@suveren/gateway 0.8.7 → 0.9.0

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 (642) hide show
  1. package/bin/suveren-gateway.js +165 -9
  2. package/dist/control-plane/index.mjs +330 -87
  3. package/dist/mcp-server/http.mjs +662 -186
  4. package/dist/ui/assets/{index-tzStUGuj.js → index-CIiOCgjJ.js} +21 -21
  5. package/dist/ui/index.html +1 -1
  6. package/lib/config.d.mts +37 -0
  7. package/lib/config.mjs +150 -0
  8. package/node_modules/@hap/core/dist/index.d.mts +33 -2
  9. package/node_modules/@hap/core/dist/index.d.ts +33 -2
  10. package/node_modules/@hap/core/dist/index.js +26 -2
  11. package/node_modules/@hap/core/dist/index.mjs +25 -2
  12. package/node_modules/@hap/core/package.json +1 -1
  13. package/node_modules/@hap/core/src/gatekeeper.ts +36 -2
  14. package/node_modules/@hap/core/src/types.ts +21 -1
  15. package/node_modules/@hono/node-server/README.md +21 -10
  16. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  17. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  18. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  19. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  20. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  21. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  22. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  23. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  24. package/node_modules/@hono/node-server/package.json +3 -2
  25. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts +43 -2
  26. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts.map +1 -1
  27. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js +26 -5
  28. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js.map +1 -1
  29. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts +11 -0
  30. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts.map +1 -1
  31. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js +96 -14
  32. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js.map +1 -1
  33. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts +1 -0
  34. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts.map +1 -1
  35. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js +11 -2
  36. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js.map +1 -1
  37. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  38. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  39. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
  40. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js +6 -3
  41. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
  42. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts +3 -0
  43. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts.map +1 -1
  44. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js +12 -2
  45. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js.map +1 -1
  46. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts +43 -2
  47. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts.map +1 -1
  48. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js +26 -5
  49. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js.map +1 -1
  50. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts +11 -0
  51. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts.map +1 -1
  52. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js +96 -14
  53. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js.map +1 -1
  54. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts +1 -0
  55. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts.map +1 -1
  56. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js +11 -2
  57. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js.map +1 -1
  58. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  59. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  60. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
  61. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js +6 -3
  62. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
  63. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts +3 -0
  64. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts.map +1 -1
  65. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js +12 -2
  66. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js.map +1 -1
  67. package/node_modules/@modelcontextprotocol/sdk/package.json +1 -1
  68. package/node_modules/@types/node/README.md +1 -1
  69. package/node_modules/@types/node/crypto.d.ts +2 -2
  70. package/node_modules/@types/node/dgram.d.ts +1 -1
  71. package/node_modules/@types/node/package.json +2 -2
  72. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  73. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  74. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  75. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  76. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  77. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  78. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  79. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  80. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  81. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  82. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  83. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  84. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  85. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  86. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  87. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  88. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  89. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  90. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  91. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  92. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  93. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  94. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  95. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  96. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  97. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  98. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  99. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  100. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  101. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  102. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  103. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  104. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  105. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  106. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  107. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  108. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  109. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  110. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  111. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  112. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  113. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  114. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  115. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  116. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  117. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  118. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  119. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  120. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  121. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  122. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  123. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  124. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  125. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  126. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  127. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  128. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  129. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  130. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  131. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  132. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  133. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  134. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  135. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  136. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  137. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  138. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  139. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  140. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  141. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  142. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  143. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  144. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  145. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  146. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  147. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  148. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  149. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  150. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  151. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  152. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  153. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  154. package/node_modules/hono/dist/cjs/compose.js +49 -66
  155. package/node_modules/hono/dist/cjs/context.js +379 -450
  156. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  157. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  158. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  159. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  160. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  161. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  162. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  163. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  164. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  165. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  166. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  167. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  168. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  169. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  170. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  171. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  172. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  173. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  174. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  175. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  176. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  177. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  178. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  179. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  180. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  181. package/node_modules/hono/dist/cjs/hono-base.js +345 -403
  182. package/node_modules/hono/dist/cjs/hono.js +28 -42
  183. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  184. package/node_modules/hono/dist/cjs/index.js +22 -30
  185. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  186. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  187. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  188. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  189. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  190. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  191. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  192. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  193. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  194. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  195. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  196. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  197. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  198. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  199. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  200. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  201. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  202. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  203. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  204. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  205. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  206. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  207. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  208. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  209. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  210. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  211. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  212. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  213. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  214. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  215. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  216. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  217. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  218. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  219. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  220. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  221. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  222. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  223. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  224. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  225. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  226. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  227. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  228. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  229. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  230. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  231. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  232. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  233. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  234. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  235. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  236. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  237. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  238. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  239. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  240. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  241. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  242. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  243. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  244. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  245. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  246. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  247. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  248. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  249. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  250. package/node_modules/hono/dist/cjs/request.js +334 -346
  251. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  252. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  253. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  254. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  255. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  256. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  257. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  258. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  259. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  260. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  261. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  262. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  263. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  264. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  265. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  266. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  267. package/node_modules/hono/dist/cjs/router.js +37 -37
  268. package/node_modules/hono/dist/cjs/types.js +5 -28
  269. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  270. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  271. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  272. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  273. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  274. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  275. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  276. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  277. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  278. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  279. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  280. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  281. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  282. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  283. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  284. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  285. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  286. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  287. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  288. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  289. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  290. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  291. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  292. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  293. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  294. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  295. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  296. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  297. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  298. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  299. package/node_modules/hono/dist/client/client.js +138 -197
  300. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  301. package/node_modules/hono/dist/client/index.js +3 -7
  302. package/node_modules/hono/dist/client/types.js +1 -0
  303. package/node_modules/hono/dist/client/utils.js +51 -68
  304. package/node_modules/hono/dist/compose.js +49 -45
  305. package/node_modules/hono/dist/context.js +376 -426
  306. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  307. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  308. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  309. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  310. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  311. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  312. package/node_modules/hono/dist/helper/css/common.js +167 -225
  313. package/node_modules/hono/dist/helper/css/index.js +132 -137
  314. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  315. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  316. package/node_modules/hono/dist/helper/html/index.js +30 -39
  317. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  318. package/node_modules/hono/dist/helper/route/index.js +121 -43
  319. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  320. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  321. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  322. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  323. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  324. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  325. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  326. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  327. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  328. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  329. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  330. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  331. package/node_modules/hono/dist/hono-base.js +342 -379
  332. package/node_modules/hono/dist/hono.js +27 -20
  333. package/node_modules/hono/dist/http-exception.js +53 -33
  334. package/node_modules/hono/dist/index.js +19 -6
  335. package/node_modules/hono/dist/jsx/base.js +231 -340
  336. package/node_modules/hono/dist/jsx/children.js +16 -20
  337. package/node_modules/hono/dist/jsx/components.js +118 -170
  338. package/node_modules/hono/dist/jsx/constants.js +9 -15
  339. package/node_modules/hono/dist/jsx/context.js +153 -150
  340. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  341. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  342. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  343. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  344. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  345. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  346. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  347. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  348. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  349. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  350. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  351. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  352. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  353. package/node_modules/hono/dist/jsx/index.js +45 -98
  354. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  355. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  356. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  357. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  358. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  359. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  360. package/node_modules/hono/dist/jsx/types.js +1 -0
  361. package/node_modules/hono/dist/jsx/utils.js +105 -168
  362. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  363. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  364. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  365. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  366. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  367. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  368. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  369. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  370. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  371. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  372. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  373. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  374. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  375. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  376. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  377. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  378. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  379. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  380. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  381. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  382. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  383. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  384. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  385. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  386. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  387. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  388. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  389. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  390. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  391. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  392. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  393. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  394. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  395. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  396. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  397. package/node_modules/hono/dist/preset/quick.js +17 -15
  398. package/node_modules/hono/dist/preset/tiny.js +14 -11
  399. package/node_modules/hono/dist/request/constants.js +4 -5
  400. package/node_modules/hono/dist/request.js +328 -319
  401. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  402. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  403. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  404. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  405. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  406. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  407. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  408. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  409. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  410. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  411. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  412. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  413. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  414. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  415. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  416. package/node_modules/hono/dist/router/utils.js +4 -5
  417. package/node_modules/hono/dist/router.js +35 -14
  418. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  419. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  420. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  421. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  422. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  423. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  424. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  425. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  426. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  427. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  428. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  429. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  430. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  431. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  432. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  433. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  434. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  435. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  436. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  437. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  438. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  439. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  440. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  441. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  442. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  443. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  444. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  445. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  446. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  447. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  448. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  449. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  450. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  451. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  452. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  453. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  454. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  455. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  456. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  457. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  458. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  459. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  460. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  461. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  462. package/node_modules/hono/dist/types/context.d.ts +335 -335
  463. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  464. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  465. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  466. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  467. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  468. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  469. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  470. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  471. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  472. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  473. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  474. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  475. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  476. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  477. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  478. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  479. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  480. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  481. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  482. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  483. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  484. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  485. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  486. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  487. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  488. package/node_modules/hono/dist/types/hono-base.d.ts +208 -210
  489. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  490. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  491. package/node_modules/hono/dist/types/index.d.ts +6 -37
  492. package/node_modules/hono/dist/types/jsx/base.d.ts +36 -34
  493. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  494. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  495. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  496. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  497. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  498. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  499. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  500. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  501. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  502. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  503. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  504. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  505. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  506. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  507. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  508. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  509. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  510. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  511. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  512. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  513. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  514. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  515. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  516. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  517. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  518. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  519. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  520. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  521. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  522. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  523. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  524. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  525. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  526. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  527. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  528. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  529. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  530. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  531. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  532. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  533. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  534. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  535. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  536. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  537. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  538. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  539. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  540. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  541. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  542. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  543. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  544. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  545. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  546. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  547. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  548. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  549. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  550. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  551. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  552. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  553. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  554. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  555. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  556. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  557. package/node_modules/hono/dist/types/request.d.ts +288 -286
  558. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  559. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  560. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  561. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  562. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  563. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  564. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  565. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  566. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  567. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  568. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  569. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  570. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  571. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  572. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  573. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  574. package/node_modules/hono/dist/types/router.d.ts +23 -22
  575. package/node_modules/hono/dist/types/types.d.ts +146 -505
  576. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  577. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  578. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  579. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  580. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  581. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  582. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  583. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  584. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  585. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  586. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  587. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  588. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  589. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  590. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  591. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  592. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  593. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  594. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  595. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  596. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  597. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  598. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  599. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  600. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  601. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  602. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  603. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  604. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  605. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  606. package/node_modules/hono/dist/types.js +4 -6
  607. package/node_modules/hono/dist/utils/accept.js +185 -212
  608. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  609. package/node_modules/hono/dist/utils/body.js +87 -92
  610. package/node_modules/hono/dist/utils/buffer.js +44 -71
  611. package/node_modules/hono/dist/utils/color.js +33 -21
  612. package/node_modules/hono/dist/utils/compress.js +11 -5
  613. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  614. package/node_modules/hono/dist/utils/constants.js +7 -5
  615. package/node_modules/hono/dist/utils/cookie.js +114 -163
  616. package/node_modules/hono/dist/utils/crypto.js +30 -40
  617. package/node_modules/hono/dist/utils/encode.js +30 -26
  618. package/node_modules/hono/dist/utils/filepath.js +23 -33
  619. package/node_modules/hono/dist/utils/handler.js +10 -11
  620. package/node_modules/hono/dist/utils/headers.js +1 -0
  621. package/node_modules/hono/dist/utils/html.js +97 -117
  622. package/node_modules/hono/dist/utils/http-status.js +1 -0
  623. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  624. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  625. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  626. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  627. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  628. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  629. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  630. package/node_modules/hono/dist/utils/mime.js +74 -79
  631. package/node_modules/hono/dist/utils/stream.js +86 -88
  632. package/node_modules/hono/dist/utils/types.js +1 -0
  633. package/node_modules/hono/dist/utils/url.js +187 -215
  634. package/node_modules/hono/dist/validator/index.js +1 -4
  635. package/node_modules/hono/dist/validator/utils.js +1 -0
  636. package/node_modules/hono/dist/validator/validator.js +61 -83
  637. package/node_modules/hono/package.json +27 -27
  638. package/package.json +2 -2
  639. package/profiles/README.md +20 -0
  640. package/profiles/index.json +2 -1
  641. package/profiles/sales/0.1.profile.json +252 -0
  642. package/server.js +99 -0
@@ -5,8 +5,8 @@ import {
5
5
 
6
6
  // src/index.ts
7
7
  import { randomBytes as randomBytes2 } from "crypto";
8
- import { existsSync as existsSync7, readFileSync as readFileSync8, renameSync as renameSync2 } from "fs";
9
- import { dirname as dirname6, join as join9 } from "path";
8
+ import { existsSync as existsSync9, readFileSync as readFileSync10, renameSync as renameSync2 } from "fs";
9
+ import { dirname as dirname8, join as join11 } from "path";
10
10
  import { homedir as homedir7 } from "os";
11
11
  import express from "express";
12
12
  import { createProxyMiddleware } from "http-proxy-middleware";
@@ -110,6 +110,24 @@ var Vault = class {
110
110
  this.clearKey();
111
111
  this.lockedReason = "expired";
112
112
  }
113
+ /** Lock because the live Authority Server key no longer matches the one
114
+ * pinned at pairing — see as-pairing.ts / gatekeeper.ts. Mirrors
115
+ * lockExpired() exactly; the only difference callers care about is WHY. */
116
+ lockAsKeyMismatch() {
117
+ this.clearKey();
118
+ this.lockedReason = "as-key-mismatch";
119
+ }
120
+ /**
121
+ * Boot-time only: record that the gateway starts locked because the
122
+ * resolved Authority Server URL differs from the one it was last paired
123
+ * with. Deliberately does NOT call clearKey() — the vault always boots
124
+ * locked already (nothing has been unlocked yet in this process), so there
125
+ * is no session to end; this only attaches the reason so /health and the
126
+ * locked-agent notice can explain it instead of defaulting to "restart".
127
+ */
128
+ markBootLockedAsUrlChanged() {
129
+ this.lockedReason = "as-url-changed";
130
+ }
113
131
  /** What locked the vault, if known. `null` covers both "still unlocked"
114
132
  * and the default boot-locked case — callers that care about the
115
133
  * difference should check `isUnlocked()` first. */
@@ -300,10 +318,11 @@ async function configure(sessionCookie, vaultKeyHex) {
300
318
  clearTimeout(timeout);
301
319
  }
302
320
  }
303
- async function unconfigureSession() {
321
+ async function unconfigureSession(reason) {
304
322
  const res = await fetch(`${MCP_BASE}/internal/clear-session`, {
305
323
  method: "POST",
306
- headers: internalHeaders()
324
+ headers: internalHeaders(),
325
+ body: JSON.stringify({ reason })
307
326
  });
308
327
  if (!res.ok) {
309
328
  throw new Error(`MCP clear-session failed: ${res.status}`);
@@ -465,6 +484,13 @@ async function getEnrichedAuthorizations() {
465
484
  if (!res.ok) throw new Error("Failed to fetch authorizations");
466
485
  return res.json();
467
486
  }
487
+ async function getSkippedCommitments() {
488
+ const res = await fetch(`${MCP_BASE}/internal/skipped-commitments`, {
489
+ headers: internalHeaders()
490
+ });
491
+ if (!res.ok) throw new Error("Failed to fetch skipped commitments");
492
+ return res.json();
493
+ }
468
494
  async function getLocalEvidence() {
469
495
  const res = await fetch(`${MCP_BASE}/internal/evidence`, {
470
496
  headers: internalHeaders()
@@ -634,10 +660,86 @@ function clientVersionHeaders() {
634
660
  };
635
661
  }
636
662
 
663
+ // src/lib/as-pairing.ts
664
+ import { createHash as createHash2 } from "crypto";
665
+ import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync3, unlinkSync, writeFileSync as writeFileSync2 } from "fs";
666
+ import { dirname as dirname2, join as join3 } from "path";
667
+ function pairingPath(dataDir) {
668
+ return join3(dataDir, "as-pairing.json");
669
+ }
670
+ function readPairing(dataDir) {
671
+ const path = pairingPath(dataDir);
672
+ if (!existsSync2(path)) return null;
673
+ try {
674
+ const data = JSON.parse(readFileSync3(path, "utf-8"));
675
+ if (typeof data.asUrl !== "string" || typeof data.publicKeyHex !== "string") return null;
676
+ return { asUrl: data.asUrl, publicKeyHex: data.publicKeyHex, pairedAt: data.pairedAt ?? "" };
677
+ } catch {
678
+ return null;
679
+ }
680
+ }
681
+ function writePairing(dataDir, asUrl, publicKeyHex) {
682
+ const pairing = { asUrl, publicKeyHex, pairedAt: (/* @__PURE__ */ new Date()).toISOString() };
683
+ const path = pairingPath(dataDir);
684
+ mkdirSync2(dirname2(path), { recursive: true, mode: 448 });
685
+ writeFileSync2(path, JSON.stringify(pairing, null, 2), { encoding: "utf-8", mode: 384 });
686
+ return pairing;
687
+ }
688
+ function clearPairing(dataDir) {
689
+ const path = pairingPath(dataDir);
690
+ try {
691
+ if (existsSync2(path)) unlinkSync(path);
692
+ } catch {
693
+ }
694
+ }
695
+ function fingerprintOf(publicKeyHex) {
696
+ const raw = Buffer.from(publicKeyHex, "hex");
697
+ const digest = createHash2("sha256").update(raw).digest("hex").toUpperCase();
698
+ return digest.match(/.{1,4}/g)?.join(":") ?? digest;
699
+ }
700
+
637
701
  // src/routes/auth.ts
638
- var SP_URL = process.env.SUVEREN_AS_URL ?? "https://www.suveren.ai";
639
- function createAuthRouter(vault2, logoutAuth, loginRateLimit2, onSessionEstablished) {
702
+ var DEFAULT_SP_URL = process.env.SUVEREN_AS_URL ?? "https://www.suveren.ai";
703
+ async function checkAsKeyBeforeLogin(asUrl, dataDir) {
704
+ let publicKeyHex;
705
+ try {
706
+ const res = await fetch(`${asUrl}/api/as/pubkey`, { signal: AbortSignal.timeout(5e3) });
707
+ if (!res.ok) {
708
+ return {
709
+ ok: false,
710
+ error: "as_unreachable",
711
+ message: `Could not reach the Authority Server at ${asUrl} to verify its signing key (HTTP ${res.status}). Refusing to sign in.`
712
+ };
713
+ }
714
+ const body = await res.json().catch(() => null);
715
+ if (!body || typeof body.publicKey !== "string" || !body.publicKey) {
716
+ return {
717
+ ok: false,
718
+ error: "as_unreachable",
719
+ message: `The Authority Server at ${asUrl} returned a malformed signing key. Refusing to sign in.`
720
+ };
721
+ }
722
+ publicKeyHex = body.publicKey;
723
+ } catch (err) {
724
+ return {
725
+ ok: false,
726
+ error: "as_unreachable",
727
+ message: `Could not reach the Authority Server at ${asUrl} to verify its signing key \u2014 ${err instanceof Error ? err.message : String(err)}. Refusing to sign in.`
728
+ };
729
+ }
730
+ const existing = readPairing(dataDir);
731
+ if (existing && existing.asUrl === asUrl && existing.publicKeyHex !== publicKeyHex) {
732
+ return {
733
+ ok: false,
734
+ error: "as_key_mismatch",
735
+ message: `The Authority Server at ${asUrl} presented a signing key that does not match the one pinned when this gateway last signed in (pinned fingerprint ${fingerprintOf(existing.publicKeyHex)}, now seeing ${fingerprintOf(publicKeyHex)}). Refusing to sign in. If the AS's key changed intentionally, an operator must clear the old pairing before signing in again.`
736
+ };
737
+ }
738
+ return { ok: true, publicKeyHex };
739
+ }
740
+ function createAuthRouter(vault2, logoutAuth, loginRateLimit2, onSessionEstablished, pairing) {
640
741
  const router = Router();
742
+ const SP_URL2 = pairing?.asUrl ?? DEFAULT_SP_URL;
641
743
  router.post("/login", loginRateLimit2, async (req, res) => {
642
744
  const apiKey = req.headers["x-api-key"] || req.body?.apiKey;
643
745
  const confirmWipe = req.body?.confirmWipe === true;
@@ -646,7 +748,18 @@ function createAuthRouter(vault2, logoutAuth, loginRateLimit2, onSessionEstablis
646
748
  return;
647
749
  }
648
750
  try {
649
- const spRes = await fetch(`${SP_URL}/api/auth/session`, {
751
+ let keyCheck = null;
752
+ if (pairing) {
753
+ keyCheck = await checkAsKeyBeforeLogin(pairing.asUrl, pairing.dataDir);
754
+ if (!keyCheck.ok) {
755
+ res.status(keyCheck.error === "as_key_mismatch" ? 409 : 502).json({
756
+ error: keyCheck.error,
757
+ message: keyCheck.message
758
+ });
759
+ return;
760
+ }
761
+ }
762
+ const spRes = await fetch(`${SP_URL2}/api/auth/session`, {
650
763
  method: "POST",
651
764
  headers: {
652
765
  "Content-Type": "application/json",
@@ -662,6 +775,13 @@ function createAuthRouter(vault2, logoutAuth, loginRateLimit2, onSessionEstablis
662
775
  res.status(spRes.status).json(err);
663
776
  return;
664
777
  }
778
+ if (pairing && keyCheck?.publicKeyHex) {
779
+ const existing = readPairing(pairing.dataDir);
780
+ if (!existing || existing.asUrl !== pairing.asUrl) {
781
+ writePairing(pairing.dataDir, pairing.asUrl, keyCheck.publicKeyHex);
782
+ console.error(`[Control Plane] Paired with Authority Server ${pairing.asUrl} (fingerprint ${fingerprintOf(keyCheck.publicKeyHex)})`);
783
+ }
784
+ }
665
785
  const data = await spRes.json();
666
786
  const setCookieHeaders = spRes.headers.getSetCookie?.() ?? [];
667
787
  const sessionCookie = setCookieHeaders.join("; ");
@@ -708,7 +828,7 @@ function createAuthRouter(vault2, logoutAuth, loginRateLimit2, onSessionEstablis
708
828
  const kp = await loadOrGenerateKeyPair(vault2);
709
829
  const localPubkeyB64 = Buffer.from(kp.publicKey).toString("base64");
710
830
  const spCookie = vault2.getSpCookie();
711
- const meKeyRes = await fetch(`${SP_URL}/api/users/me/pubkey`, {
831
+ const meKeyRes = await fetch(`${SP_URL2}/api/users/me/pubkey`, {
712
832
  headers: spCookie ? { Cookie: spCookie } : {},
713
833
  signal: AbortSignal.timeout(5e3)
714
834
  });
@@ -720,7 +840,7 @@ function createAuthRouter(vault2, logoutAuth, loginRateLimit2, onSessionEstablis
720
840
  needsUpdate = meKeyData.pubkey !== localPubkeyB64;
721
841
  }
722
842
  if (needsUpdate) {
723
- const putRes = await fetch(`${SP_URL}/api/users/me/pubkey`, {
843
+ const putRes = await fetch(`${SP_URL2}/api/users/me/pubkey`, {
724
844
  method: "PUT",
725
845
  headers: {
726
846
  "Content-Type": "application/json",
@@ -777,7 +897,7 @@ function createAuthRouter(vault2, logoutAuth, loginRateLimit2, onSessionEstablis
777
897
  vault2.clearKey();
778
898
  await Promise.allSettled([
779
899
  unconfigureSession(),
780
- cookie ? fetch(`${SP_URL}/api/auth/logout`, {
900
+ cookie ? fetch(`${SP_URL2}/api/auth/logout`, {
781
901
  method: "POST",
782
902
  headers: { cookie, ...clientVersionHeaders() },
783
903
  redirect: "manual"
@@ -1392,18 +1512,18 @@ async function testAIConnectivity(config) {
1392
1512
  }
1393
1513
 
1394
1514
  // src/lib/agent-brief-store.ts
1395
- import { existsSync as existsSync2, readFileSync as readFileSync3 } from "fs";
1515
+ import { existsSync as existsSync3, readFileSync as readFileSync4 } from "fs";
1396
1516
  import { homedir as homedir2 } from "os";
1397
- import { join as join3 } from "path";
1517
+ import { join as join4 } from "path";
1398
1518
  var AGENT_CONTEXT_MAX_BYTES = 16 * 1024;
1399
1519
  function agentBriefPath() {
1400
- const dataDir = process.env.SUVEREN_DATA_DIR ?? join3(homedir2(), ".suveren");
1401
- return join3(dataDir, "context.md");
1520
+ const dataDir = process.env.SUVEREN_DATA_DIR ?? join4(homedir2(), ".suveren");
1521
+ return join4(dataDir, "context.md");
1402
1522
  }
1403
1523
  function readAgentBrief() {
1404
1524
  const filePath = agentBriefPath();
1405
- if (!existsSync2(filePath)) return "";
1406
- return readFileSync3(filePath, "utf-8");
1525
+ if (!existsSync3(filePath)) return "";
1526
+ return readFileSync4(filePath, "utf-8");
1407
1527
  }
1408
1528
 
1409
1529
  // src/routes/ai.ts
@@ -1767,28 +1887,28 @@ function createMCPRouter() {
1767
1887
  // src/routes/autostart.ts
1768
1888
  import { Router as Router6 } from "express";
1769
1889
  import { execFile } from "child_process";
1770
- import { existsSync as existsSync3 } from "fs";
1890
+ import { existsSync as existsSync4 } from "fs";
1771
1891
  import { dirname as pathDirname, resolve } from "path";
1772
1892
  import { fileURLToPath } from "url";
1773
1893
  import { promisify } from "util";
1774
1894
  var run = promisify(execFile);
1775
1895
  var SUPPORTED = /* @__PURE__ */ new Set(["darwin", "win32", "linux"]);
1776
1896
  var MODULE_DIR = pathDirname(fileURLToPath(import.meta.url));
1777
- function findCli(dirname7 = MODULE_DIR) {
1897
+ function findCli(dirname9 = MODULE_DIR) {
1778
1898
  const candidates = [
1779
1899
  // Bundled (the shipped layout): dist/control-plane → dist → root → bin
1780
- resolve(dirname7, "..", "..", "bin", "suveren-gateway.js"),
1900
+ resolve(dirname9, "..", "..", "bin", "suveren-gateway.js"),
1781
1901
  // Bundled, were the routes/ directory ever preserved.
1782
- resolve(dirname7, "..", "..", "..", "bin", "suveren-gateway.js"),
1902
+ resolve(dirname9, "..", "..", "..", "bin", "suveren-gateway.js"),
1783
1903
  // Dev, running from source: the repo's own bundle directory.
1784
- resolve(dirname7, "..", "..", "..", "..", "bundle", "bin", "suveren-gateway.js"),
1785
- resolve(dirname7, "..", "..", "..", "..", "..", "bundle", "bin", "suveren-gateway.js")
1904
+ resolve(dirname9, "..", "..", "..", "..", "bundle", "bin", "suveren-gateway.js"),
1905
+ resolve(dirname9, "..", "..", "..", "..", "..", "bundle", "bin", "suveren-gateway.js")
1786
1906
  // Deliberately NO process.cwd() fallback: it makes the result depend on
1787
1907
  // where the process happened to be launched from, so the same install
1788
1908
  // resolves differently between a shell and a login service — and it would
1789
1909
  // mask a genuinely missing CLI whenever the cwd happened to be the repo.
1790
1910
  ];
1791
- return candidates.find(existsSync3) ?? null;
1911
+ return candidates.find(existsSync4) ?? null;
1792
1912
  }
1793
1913
  async function cli(args) {
1794
1914
  const bin = findCli();
@@ -1869,17 +1989,17 @@ function createAutostartRouter() {
1869
1989
  import { spawn, spawnSync } from "child_process";
1870
1990
 
1871
1991
  // src/lib/notifier-icon.ts
1872
- import { writeFileSync as writeFileSync2, mkdirSync as mkdirSync2, existsSync as existsSync4 } from "fs";
1992
+ import { writeFileSync as writeFileSync3, mkdirSync as mkdirSync3, existsSync as existsSync5 } from "fs";
1873
1993
  import { homedir as homedir3 } from "os";
1874
- import { join as join4, dirname as dirname2 } from "path";
1994
+ import { join as join5, dirname as dirname3 } from "path";
1875
1995
  var ICON_BASE64 = "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";
1876
1996
  function ensureNotifierIcon(dataDir) {
1877
1997
  try {
1878
- const dir = dataDir ?? process.env.SUVEREN_DATA_DIR ?? join4(homedir3(), ".suveren");
1879
- const path = join4(dir, "notifier-icon.png");
1880
- if (!existsSync4(path)) {
1881
- mkdirSync2(dirname2(path), { recursive: true });
1882
- writeFileSync2(path, Buffer.from(ICON_BASE64, "base64"));
1998
+ const dir = dataDir ?? process.env.SUVEREN_DATA_DIR ?? join5(homedir3(), ".suveren");
1999
+ const path = join5(dir, "notifier-icon.png");
2000
+ if (!existsSync5(path)) {
2001
+ mkdirSync3(dirname3(path), { recursive: true });
2002
+ writeFileSync3(path, Buffer.from(ICON_BASE64, "base64"));
1883
2003
  }
1884
2004
  return path;
1885
2005
  } catch {
@@ -2081,24 +2201,24 @@ import { Router as Router9 } from "express";
2081
2201
 
2082
2202
  // src/routes/approved-intents.ts
2083
2203
  import { Router as Router8 } from "express";
2084
- import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, mkdirSync as mkdirSync3 } from "fs";
2204
+ import { readFileSync as readFileSync5, writeFileSync as writeFileSync4, existsSync as existsSync6, mkdirSync as mkdirSync4 } from "fs";
2085
2205
  import { homedir as homedir4 } from "os";
2086
- import { join as join5 } from "path";
2087
- var SUVEREN_DATA_DIR = process.env.SUVEREN_DATA_DIR ?? join5(homedir4(), ".suveren");
2088
- var FILE_PATH = join5(SUVEREN_DATA_DIR, "approved-intents.enc.json");
2206
+ import { join as join6 } from "path";
2207
+ var SUVEREN_DATA_DIR = process.env.SUVEREN_DATA_DIR ?? join6(homedir4(), ".suveren");
2208
+ var FILE_PATH = join6(SUVEREN_DATA_DIR, "approved-intents.enc.json");
2089
2209
  function readFile() {
2090
- if (!existsSync5(FILE_PATH)) {
2210
+ if (!existsSync6(FILE_PATH)) {
2091
2211
  return { version: 1, entries: {} };
2092
2212
  }
2093
2213
  try {
2094
- return JSON.parse(readFileSync4(FILE_PATH, "utf-8"));
2214
+ return JSON.parse(readFileSync5(FILE_PATH, "utf-8"));
2095
2215
  } catch {
2096
2216
  return { version: 1, entries: {} };
2097
2217
  }
2098
2218
  }
2099
2219
  function writeFile(data) {
2100
- mkdirSync3(SUVEREN_DATA_DIR, { recursive: true });
2101
- writeFileSync3(FILE_PATH, JSON.stringify(data, null, 2), "utf-8");
2220
+ mkdirSync4(SUVEREN_DATA_DIR, { recursive: true });
2221
+ writeFileSync4(FILE_PATH, JSON.stringify(data, null, 2), "utf-8");
2102
2222
  }
2103
2223
  function readApprovedIntents(vault2) {
2104
2224
  const file = readFile();
@@ -2363,7 +2483,7 @@ function createDecryptIntentRouter(vault2) {
2363
2483
 
2364
2484
  // src/lib/update-checker.ts
2365
2485
  import { execSync } from "child_process";
2366
- import { dirname as dirname3 } from "path";
2486
+ import { dirname as dirname4 } from "path";
2367
2487
  import { fileURLToPath as fileURLToPath2 } from "url";
2368
2488
  var GHCR_IMAGE = "suverenai/suveren-gateway";
2369
2489
  var NPM_PACKAGE = "@suveren/gateway";
@@ -2429,7 +2549,7 @@ function compareSemver(a, b) {
2429
2549
  return 0;
2430
2550
  }
2431
2551
  function checkDev() {
2432
- const cwd = dirname3(fileURLToPath2(import.meta.url));
2552
+ const cwd = dirname4(fileURLToPath2(import.meta.url));
2433
2553
  try {
2434
2554
  execSync("git fetch origin --quiet", { cwd, stdio: "ignore", timeout: 15e3 });
2435
2555
  const out = execSync("git rev-list HEAD..origin/main --count", {
@@ -2502,19 +2622,19 @@ data: ${data}
2502
2622
  import { Router as Router12 } from "express";
2503
2623
 
2504
2624
  // src/lib/gateway-settings.ts
2505
- import { readFileSync as readFileSync5, writeFileSync as writeFileSync4, mkdirSync as mkdirSync4 } from "fs";
2625
+ import { readFileSync as readFileSync6, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5 } from "fs";
2506
2626
  import { homedir as homedir5 } from "os";
2507
- import { join as join6, dirname as dirname4 } from "path";
2627
+ import { join as join7, dirname as dirname5 } from "path";
2508
2628
  var DEFAULT_SETTINGS = {
2509
2629
  desktopNotifications: true
2510
2630
  };
2511
2631
  function settingsPath(dataDir) {
2512
- const dir = dataDir ?? process.env.SUVEREN_DATA_DIR ?? join6(homedir5(), ".suveren");
2513
- return join6(dir, "settings.json");
2632
+ const dir = dataDir ?? process.env.SUVEREN_DATA_DIR ?? join7(homedir5(), ".suveren");
2633
+ return join7(dir, "settings.json");
2514
2634
  }
2515
2635
  function readSettings(dataDir) {
2516
2636
  try {
2517
- const raw = JSON.parse(readFileSync5(settingsPath(dataDir), "utf8"));
2637
+ const raw = JSON.parse(readFileSync6(settingsPath(dataDir), "utf8"));
2518
2638
  return {
2519
2639
  desktopNotifications: typeof raw.desktopNotifications === "boolean" ? raw.desktopNotifications : DEFAULT_SETTINGS.desktopNotifications
2520
2640
  };
@@ -2528,8 +2648,8 @@ function writeSettings(patch, dataDir) {
2528
2648
  ...typeof patch.desktopNotifications === "boolean" ? { desktopNotifications: patch.desktopNotifications } : {}
2529
2649
  };
2530
2650
  const path = settingsPath(dataDir);
2531
- mkdirSync4(dirname4(path), { recursive: true });
2532
- writeFileSync4(path, JSON.stringify(next, null, 2) + "\n", "utf8");
2651
+ mkdirSync5(dirname5(path), { recursive: true });
2652
+ writeFileSync5(path, JSON.stringify(next, null, 2) + "\n", "utf8");
2533
2653
  return next;
2534
2654
  }
2535
2655
 
@@ -2561,20 +2681,20 @@ function createGatewaySettingsRouter() {
2561
2681
  import { Router as Router13 } from "express";
2562
2682
 
2563
2683
  // src/lib/archived-mandates-store.ts
2564
- import { readFileSync as readFileSync6, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5, renameSync } from "fs";
2684
+ import { readFileSync as readFileSync7, writeFileSync as writeFileSync6, mkdirSync as mkdirSync6, renameSync } from "fs";
2565
2685
  import { homedir as homedir6 } from "os";
2566
- import { join as join7, dirname as dirname5 } from "path";
2686
+ import { join as join8, dirname as dirname6 } from "path";
2567
2687
  var ID_PATTERN = /^[A-Za-z0-9_.:-]{1,200}$/;
2568
2688
  function isValidMandateId(id) {
2569
2689
  return typeof id === "string" && ID_PATTERN.test(id);
2570
2690
  }
2571
2691
  function storePath(dataDir) {
2572
- const dir = dataDir ?? process.env.SUVEREN_DATA_DIR ?? join7(homedir6(), ".suveren");
2573
- return join7(dir, "archived-mandates.json");
2692
+ const dir = dataDir ?? process.env.SUVEREN_DATA_DIR ?? join8(homedir6(), ".suveren");
2693
+ return join8(dir, "archived-mandates.json");
2574
2694
  }
2575
2695
  function readArchived(dataDir) {
2576
2696
  try {
2577
- const raw = JSON.parse(readFileSync6(storePath(dataDir), "utf8"));
2697
+ const raw = JSON.parse(readFileSync7(storePath(dataDir), "utf8"));
2578
2698
  if (!Array.isArray(raw.archived)) return [];
2579
2699
  return [...new Set(raw.archived.filter(isValidMandateId))];
2580
2700
  } catch {
@@ -2584,9 +2704,9 @@ function readArchived(dataDir) {
2584
2704
  function writeArchived(ids, dataDir) {
2585
2705
  const next = [...new Set(ids.filter(isValidMandateId))].sort();
2586
2706
  const path = storePath(dataDir);
2587
- mkdirSync5(dirname5(path), { recursive: true });
2707
+ mkdirSync6(dirname6(path), { recursive: true });
2588
2708
  const tmp = `${path}.tmp`;
2589
- writeFileSync5(tmp, JSON.stringify({ archived: next }, null, 2) + "\n", "utf8");
2709
+ writeFileSync6(tmp, JSON.stringify({ archived: next }, null, 2) + "\n", "utf8");
2590
2710
  renameSync(tmp, path);
2591
2711
  return next;
2592
2712
  }
@@ -2627,6 +2747,7 @@ import { Router as Router14 } from "express";
2627
2747
  import { timingSafeEqual as timingSafeEqual2 } from "crypto";
2628
2748
  var ALLOWED = ["proposal-added", "action-approval-needed"];
2629
2749
  var SESSION_EXPIRED = "session-expired";
2750
+ var AS_KEY_MISMATCH = "as-key-mismatch";
2630
2751
  function secretMatches(provided, expected) {
2631
2752
  if (!expected) return false;
2632
2753
  if (!provided) return false;
@@ -2635,7 +2756,7 @@ function secretMatches(provided, expected) {
2635
2756
  if (a.length !== b.length) return false;
2636
2757
  return timingSafeEqual2(a, b);
2637
2758
  }
2638
- function createInternalEventsRouter(getSecret, onSessionExpired) {
2759
+ function createInternalEventsRouter(getSecret, onSessionExpired, onAsKeyMismatch) {
2639
2760
  const router = Router14();
2640
2761
  router.post("/event", (req, res) => {
2641
2762
  if (!secretMatches(req.headers["x-internal-secret"], getSecret())) {
@@ -2648,6 +2769,11 @@ function createInternalEventsRouter(getSecret, onSessionExpired) {
2648
2769
  res.json({ ok: true });
2649
2770
  return;
2650
2771
  }
2772
+ if (type === AS_KEY_MISMATCH) {
2773
+ onAsKeyMismatch?.();
2774
+ res.json({ ok: true });
2775
+ return;
2776
+ }
2651
2777
  if (typeof type !== "string" || !ALLOWED.includes(type)) {
2652
2778
  res.status(400).json({ error: "Unsupported event type" });
2653
2779
  return;
@@ -2746,6 +2872,7 @@ function startNotificationDispatcher(opts = {}) {
2746
2872
 
2747
2873
  // src/lib/session-lock.ts
2748
2874
  var SESSION_LOCKED_MESSAGE = "Your sign-in ended after 30 days or was revoked. Sign in again.";
2875
+ var AS_KEY_MISMATCH_MESSAGE = "The Authority Server presented a signing key that does not match the one pinned at pairing. Sign in again to review.";
2749
2876
  function createSessionLock(deps) {
2750
2877
  const { vault: vault2, port: port2 } = deps;
2751
2878
  const notifyFn = deps.notifyFn ?? notify;
@@ -2763,6 +2890,23 @@ function createSessionLock(deps) {
2763
2890
  notifyFn(title, message, process.platform, url);
2764
2891
  };
2765
2892
  }
2893
+ function createAsKeyMismatchLock(deps) {
2894
+ const { vault: vault2, port: port2 } = deps;
2895
+ const notifyFn = deps.notifyFn ?? notify;
2896
+ const unconfigureSessionFn = deps.unconfigureSessionFn ?? unconfigureSession;
2897
+ const emit = deps.emit ?? eventBus.emit.bind(eventBus);
2898
+ return function lockOnAsKeyMismatch() {
2899
+ if (!vault2.isUnlocked()) return;
2900
+ vault2.lockAsKeyMismatch();
2901
+ console.error("[Control Plane] Authority Server key mismatch \u2014 gateway LOCKED");
2902
+ void unconfigureSessionFn("as-key-mismatch").catch((err) => {
2903
+ console.error("[Control Plane] Failed to push cleared session to MCP:", err);
2904
+ });
2905
+ emit("session-locked", { reason: "as-key-mismatch", message: AS_KEY_MISMATCH_MESSAGE });
2906
+ const { title, url } = sessionExpiredNotification(port2);
2907
+ notifyFn(title, AS_KEY_MISMATCH_MESSAGE, process.platform, url);
2908
+ };
2909
+ }
2766
2910
 
2767
2911
  // src/lib/session-expiry-scheduler.ts
2768
2912
  var MAX_TIMEOUT_MS = 2147483647;
@@ -2832,17 +2976,17 @@ function buildSessionHealth(vault2) {
2832
2976
  }
2833
2977
 
2834
2978
  // src/lib/denials-reader.ts
2835
- import { existsSync as existsSync6, readFileSync as readFileSync7 } from "fs";
2836
- import { join as join8 } from "path";
2979
+ import { existsSync as existsSync7, readFileSync as readFileSync8 } from "fs";
2980
+ import { join as join9 } from "path";
2837
2981
  function loadDenials(dataDir, decrypt) {
2838
- const encPath = join8(dataDir, "denials.enc.json");
2839
- const plainPath = join8(dataDir, "denials.json");
2840
- if (existsSync6(encPath)) {
2841
- const { blob } = JSON.parse(readFileSync7(encPath, "utf-8"));
2982
+ const encPath = join9(dataDir, "denials.enc.json");
2983
+ const plainPath = join9(dataDir, "denials.json");
2984
+ if (existsSync7(encPath)) {
2985
+ const { blob } = JSON.parse(readFileSync8(encPath, "utf-8"));
2842
2986
  return JSON.parse(decrypt(blob)).records ?? [];
2843
2987
  }
2844
- if (existsSync6(plainPath)) {
2845
- return JSON.parse(readFileSync7(plainPath, "utf-8")).records ?? [];
2988
+ if (existsSync7(plainPath)) {
2989
+ return JSON.parse(readFileSync8(plainPath, "utf-8")).records ?? [];
2846
2990
  }
2847
2991
  return [];
2848
2992
  }
@@ -2856,12 +3000,80 @@ function selectDenials(records, opts = {}) {
2856
3000
  return { count, records: out };
2857
3001
  }
2858
3002
 
3003
+ // src/lib/as-config.ts
3004
+ import { existsSync as existsSync8, mkdirSync as mkdirSync7, readFileSync as readFileSync9, writeFileSync as writeFileSync7 } from "fs";
3005
+ import { dirname as dirname7, join as join10 } from "path";
3006
+ var DEFAULT_AS_URL = "https://www.suveren.ai";
3007
+ function configPath(dataDir) {
3008
+ return join10(dataDir, "config.json");
3009
+ }
3010
+ function readAsConfigStrict(dataDir) {
3011
+ const path = configPath(dataDir);
3012
+ if (!existsSync8(path)) return {};
3013
+ let data;
3014
+ try {
3015
+ data = JSON.parse(readFileSync9(path, "utf-8"));
3016
+ } catch (err) {
3017
+ throw new Error(
3018
+ `Could not parse ${path}: ${err instanceof Error ? err.message : String(err)}`
3019
+ );
3020
+ }
3021
+ const out = {};
3022
+ if (typeof data.asUrl === "string") out.asUrl = data.asUrl;
3023
+ if (typeof data.caFile === "string") out.caFile = data.caFile;
3024
+ return out;
3025
+ }
3026
+ function validateAsUrl(candidate) {
3027
+ const trimmed = candidate.trim();
3028
+ if (!trimmed) return { ok: false, error: "The Authority Server URL is empty." };
3029
+ let parsed;
3030
+ try {
3031
+ parsed = new URL(trimmed);
3032
+ } catch {
3033
+ return { ok: false, error: `"${trimmed}" is not a valid URL.` };
3034
+ }
3035
+ const isLocalHttp = parsed.protocol === "http:" && (parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1");
3036
+ if (parsed.protocol !== "https:" && !isLocalHttp) {
3037
+ return {
3038
+ ok: false,
3039
+ error: `"${trimmed}" must use https:// (http:// is only allowed for http://localhost or http://127.0.0.1).`
3040
+ };
3041
+ }
3042
+ let normalized = `${parsed.origin}${parsed.pathname}${parsed.search}${parsed.hash}`;
3043
+ if (normalized.endsWith("/") && normalized !== `${parsed.origin}/`) {
3044
+ normalized = normalized.slice(0, -1);
3045
+ } else if (normalized === `${parsed.origin}/`) {
3046
+ normalized = parsed.origin;
3047
+ }
3048
+ return { ok: true, url: normalized };
3049
+ }
3050
+ function resolveAsUrl(dataDir, flag) {
3051
+ if (flag) {
3052
+ const v = validateAsUrl(flag);
3053
+ if (!v.ok) throw new Error(`Invalid --as-url: ${v.error}`);
3054
+ return v.url;
3055
+ }
3056
+ const envUrl = process.env.SUVEREN_AS_URL;
3057
+ if (envUrl) {
3058
+ const v = validateAsUrl(envUrl);
3059
+ if (!v.ok) throw new Error(`Invalid SUVEREN_AS_URL: ${v.error}`);
3060
+ return v.url;
3061
+ }
3062
+ const saved = readAsConfigStrict(dataDir).asUrl;
3063
+ if (saved) {
3064
+ const v = validateAsUrl(saved);
3065
+ if (!v.ok) throw new Error(`Invalid saved as-url "${saved}" in ${dataDir}/config.json: ${v.error}`);
3066
+ return v.url;
3067
+ }
3068
+ return DEFAULT_AS_URL;
3069
+ }
3070
+
2859
3071
  // src/index.ts
2860
3072
  (function migrateDataDir() {
2861
3073
  if (process.env.SUVEREN_DATA_DIR) return;
2862
- const oldDir = join9(homedir7(), ".hap");
2863
- const newDir = join9(homedir7(), ".suveren");
2864
- if (!existsSync7(newDir) && existsSync7(oldDir)) {
3074
+ const oldDir = join11(homedir7(), ".hap");
3075
+ const newDir = join11(homedir7(), ".suveren");
3076
+ if (!existsSync9(newDir) && existsSync9(oldDir)) {
2865
3077
  try {
2866
3078
  renameSync2(oldDir, newDir);
2867
3079
  console.error(`[Control Plane] Migrated data directory: ${oldDir} \u2192 ${newDir}`);
@@ -2871,11 +3083,22 @@ function selectDenials(records, opts = {}) {
2871
3083
  }
2872
3084
  }
2873
3085
  })();
2874
- var SP_URL2 = process.env.SUVEREN_AS_URL ?? "https://www.suveren.ai";
3086
+ var DATA_DIR = process.env.SUVEREN_DATA_DIR ?? join11(homedir7(), ".suveren");
3087
+ var SP_URL = resolveAsUrl(DATA_DIR);
2875
3088
  var port = parseInt(process.env.SUVEREN_CP_PORT ?? "3402", 10);
2876
3089
  var HAP_MODE = process.env.HAP_MODE ?? "personal";
2877
- var UI_DIST = process.env.HAP_UI_DIST ?? join9(import.meta.dirname ?? __dirname, "../../ui/dist");
2878
- var vault = new Vault();
3090
+ var UI_DIST = process.env.HAP_UI_DIST ?? join11(import.meta.dirname ?? __dirname, "../../ui/dist");
3091
+ var vault = new Vault(DATA_DIR);
3092
+ (function repairIfAsUrlChanged() {
3093
+ const pairing = readPairing(DATA_DIR);
3094
+ if (pairing && pairing.asUrl !== SP_URL) {
3095
+ console.error(
3096
+ `[Control Plane] Authority Server changed (${pairing.asUrl} \u2192 ${SP_URL}) \u2014 clearing the old pairing. Sign in again to re-pair.`
3097
+ );
3098
+ clearPairing(DATA_DIR);
3099
+ vault.markBootLockedAsUrlChanged();
3100
+ }
3101
+ })();
2879
3102
  var internalSecret2 = process.env.SUVEREN_INTERNAL_SECRET ?? randomBytes2(32).toString("hex");
2880
3103
  setInternalSecret(internalSecret2);
2881
3104
  var app = express();
@@ -2899,6 +3122,7 @@ function loginRateLimit(req, res, next) {
2899
3122
  next();
2900
3123
  }
2901
3124
  var lockExpiredSession = createSessionLock({ vault, port });
3125
+ var lockAsKeyMismatch = createAsKeyMismatchLock({ vault, port });
2902
3126
  var sessionExpiryScheduler = new SessionExpiryScheduler(
2903
3127
  () => vault.getSessionExpiresAt(),
2904
3128
  lockExpiredSession
@@ -2907,7 +3131,8 @@ app.use("/auth", jsonParser, createAuthRouter(
2907
3131
  vault,
2908
3132
  requireAuth(vault),
2909
3133
  loginRateLimit,
2910
- () => sessionExpiryScheduler.reschedule()
3134
+ () => sessionExpiryScheduler.reschedule(),
3135
+ { asUrl: SP_URL, dataDir: DATA_DIR }
2911
3136
  ));
2912
3137
  function resolveOrigin(req) {
2913
3138
  const fwdHost = req.get("x-forwarded-host");
@@ -3114,7 +3339,7 @@ app.get("/auth/oauth/:integrationId/health", authGuard, async (req, res) => {
3114
3339
  }
3115
3340
  });
3116
3341
  app.get("/events", requireAllowedHost, requireAuthQueryOrHeader(vault), createEventsHandler());
3117
- app.use("/internal", jsonParser, createInternalEventsRouter(() => internalSecret2, lockExpiredSession));
3342
+ app.use("/internal", jsonParser, createInternalEventsRouter(() => internalSecret2, lockExpiredSession, lockAsKeyMismatch));
3118
3343
  app.use("/vault", jsonParser, authGuard, createVaultRouter(vault));
3119
3344
  app.use("/ai", jsonParser, authGuard, createAIRouter(vault));
3120
3345
  app.use("/ai-prompts", jsonParser, authGuard, createAIPromptsRouter());
@@ -3123,7 +3348,7 @@ app.use("/autostart", jsonParser, authGuard, createAutostartRouter());
3123
3348
  app.use("/api/gateway-settings", jsonParser, authGuard, createGatewaySettingsRouter());
3124
3349
  app.use("/api/archived-mandates", jsonParser, authGuard, createArchivedMandatesRouter());
3125
3350
  app.use("/api/encrypt-intent", jsonParser, authGuard, createEncryptIntentRouter());
3126
- app.use("/api/evidence-export", authGuard, createEvidenceExportRouter(SP_URL2, vault));
3351
+ app.use("/api/evidence-export", authGuard, createEvidenceExportRouter(SP_URL, vault));
3127
3352
  app.use("/api/evidence", authGuard, createEvidenceRouter());
3128
3353
  app.use("/api/decrypt-intent", jsonParser, authGuard, createDecryptIntentRouter(vault));
3129
3354
  app.use("/api/approved-intents", jsonParser, authGuard, createApprovedIntentsRouter(vault));
@@ -3253,9 +3478,27 @@ app.get("/active-authorizations", authGuard, async (_req, res) => {
3253
3478
  res.status(500).json({ error: "Failed to fetch authorizations from MCP server" });
3254
3479
  }
3255
3480
  });
3481
+ app.get("/skipped-commitments", authGuard, async (_req, res) => {
3482
+ try {
3483
+ const data = await getSkippedCommitments();
3484
+ res.json(data);
3485
+ } catch (err) {
3486
+ console.error("[Control Plane] Skipped-commitments retrieval error:", err);
3487
+ res.status(500).json({ error: "Failed to fetch skipped commitments from MCP server" });
3488
+ }
3489
+ });
3490
+ app.get("/as-pairing", authGuard, (_req, res) => {
3491
+ const pairing = readPairing(DATA_DIR);
3492
+ res.json({
3493
+ asUrl: SP_URL,
3494
+ paired: pairing !== null && pairing.asUrl === SP_URL,
3495
+ fingerprint: pairing && pairing.asUrl === SP_URL ? fingerprintOf(pairing.publicKeyHex) : null,
3496
+ pairedAt: pairing && pairing.asUrl === SP_URL ? pairing.pairedAt : null
3497
+ });
3498
+ });
3256
3499
  app.get("/denials", authGuard, (req, res) => {
3257
3500
  try {
3258
- const dataDir = process.env.SUVEREN_DATA_DIR ?? join9(homedir7(), ".suveren");
3501
+ const dataDir = process.env.SUVEREN_DATA_DIR ?? join11(homedir7(), ".suveren");
3259
3502
  const all = loadDenials(dataDir, (blob) => vault.decrypt(blob));
3260
3503
  const since = Number(req.query.since);
3261
3504
  const limit = Number(req.query.limit);
@@ -3306,11 +3549,11 @@ app.put("/agent-brief/context", jsonParser, authGuard, async (req, res) => {
3306
3549
  res.status(413).json({ error: `Context exceeds ${AGENT_CONTEXT_MAX_BYTES}-byte cap` });
3307
3550
  return;
3308
3551
  }
3309
- const { mkdirSync: mkdirSync6, writeFileSync: writeFileSync6, renameSync: renameSync3 } = await import("fs");
3552
+ const { mkdirSync: mkdirSync8, writeFileSync: writeFileSync8, renameSync: renameSync3 } = await import("fs");
3310
3553
  const filePath = agentBriefPath();
3311
- mkdirSync6(dirname6(filePath), { recursive: true });
3554
+ mkdirSync8(dirname8(filePath), { recursive: true });
3312
3555
  const tmpPath = `${filePath}.tmp`;
3313
- writeFileSync6(tmpPath, content, "utf-8");
3556
+ writeFileSync8(tmpPath, content, "utf-8");
3314
3557
  renameSync3(tmpPath, filePath);
3315
3558
  res.json({ ok: true });
3316
3559
  } catch (err) {
@@ -3321,7 +3564,7 @@ app.put("/agent-brief/context", jsonParser, authGuard, async (req, res) => {
3321
3564
  app.use("/api", authGuard);
3322
3565
  app.use(
3323
3566
  createProxyMiddleware({
3324
- target: SP_URL2,
3567
+ target: SP_URL,
3325
3568
  changeOrigin: true,
3326
3569
  pathFilter: "/api",
3327
3570
  on: {
@@ -3363,13 +3606,13 @@ app.use(
3363
3606
  })
3364
3607
  );
3365
3608
  function detectInstallMethod() {
3366
- if (existsSync7("/.dockerenv")) return "docker";
3609
+ if (existsSync9("/.dockerenv")) return "docker";
3367
3610
  const dir = import.meta.dirname ?? __dirname;
3368
3611
  if (dir.includes("/node_modules/@suveren/gateway/")) return "npm";
3369
3612
  let cursor = dir;
3370
3613
  for (let i = 0; i < 8; i++) {
3371
- if (existsSync7(join9(cursor, ".git"))) return "dev";
3372
- const parent = dirname6(cursor);
3614
+ if (existsSync9(join11(cursor, ".git"))) return "dev";
3615
+ const parent = dirname8(cursor);
3373
3616
  if (parent === cursor) break;
3374
3617
  cursor = parent;
3375
3618
  }
@@ -3381,10 +3624,10 @@ function detectRunningVersion() {
3381
3624
  return process.env.HAP_BUILD_SHA ?? "dev";
3382
3625
  }
3383
3626
  const dir = import.meta.dirname ?? __dirname;
3384
- const bundlePkg = join9(dir, "..", "..", "package.json");
3385
- if (existsSync7(bundlePkg)) {
3627
+ const bundlePkg = join11(dir, "..", "..", "package.json");
3628
+ if (existsSync9(bundlePkg)) {
3386
3629
  try {
3387
- const pkg = JSON.parse(readFileSync8(bundlePkg, "utf8"));
3630
+ const pkg = JSON.parse(readFileSync10(bundlePkg, "utf8"));
3388
3631
  if (pkg.name === "@suveren/gateway" && typeof pkg.version === "string") {
3389
3632
  return pkg.version;
3390
3633
  }
@@ -3406,14 +3649,14 @@ app.get("/health", async (req, res) => {
3406
3649
  latestVersion: update.latestVersion,
3407
3650
  updateAvailable: update.updateAvailable,
3408
3651
  installMethod: INSTALL_METHOD,
3409
- spUrl: SP_URL2,
3652
+ spUrl: SP_URL,
3410
3653
  session: buildSessionHealth(vault),
3411
3654
  security: {
3412
3655
  note: "Gateway secures tool execution. Agent host isolation is the user's responsibility."
3413
3656
  }
3414
3657
  });
3415
3658
  });
3416
- if (existsSync7(UI_DIST)) {
3659
+ if (existsSync9(UI_DIST)) {
3417
3660
  app.use(express.static(UI_DIST, {
3418
3661
  setHeaders: (res, filePath) => {
3419
3662
  if (filePath.endsWith("index.html")) {
@@ -3423,7 +3666,7 @@ if (existsSync7(UI_DIST)) {
3423
3666
  }));
3424
3667
  app.get("*", (_req, res) => {
3425
3668
  res.setHeader("Cache-Control", "no-store, must-revalidate");
3426
- res.sendFile(join9(UI_DIST, "index.html"));
3669
+ res.sendFile(join11(UI_DIST, "index.html"));
3427
3670
  });
3428
3671
  } else {
3429
3672
  app.get("/", (_req, res) => {
@@ -3441,7 +3684,7 @@ app.listen(port, "0.0.0.0", () => {
3441
3684
  }
3442
3685
  startNotificationDispatcher({ url: `http://localhost:${port}` });
3443
3686
  sessionExpiryScheduler.start();
3444
- console.error(`[Control Plane] SP proxy: ${SP_URL2}`);
3687
+ console.error(`[Control Plane] SP proxy: ${SP_URL}`);
3445
3688
  console.error(`[Control Plane] UI dist: ${UI_DIST}`);
3446
3689
  console.error(`[Control Plane] Internal secret: configured`);
3447
3690
  console.error(`[Control Plane] MCP server: ${MCP_BASE}`);