9router 0.3.7 → 0.3.9

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 (249) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +35 -35
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/_global-error.html +2 -2
  16. package/app/.next/server/app/_global-error.rsc +1 -1
  17. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  18. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  19. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  20. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  21. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  22. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  23. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/_not-found.html +1 -1
  25. package/app/.next/server/app/_not-found.rsc +2 -2
  26. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  27. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  28. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  29. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  30. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  31. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  32. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/callback.html +1 -1
  101. package/app/.next/server/app/callback.rsc +2 -2
  102. package/app/.next/server/app/callback.segments/_full.segment.rsc +2 -2
  103. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  104. package/app/.next/server/app/callback.segments/_index.segment.rsc +2 -2
  105. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  106. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  107. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  108. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  109. package/app/.next/server/app/dashboard/cli-tools.rsc +4 -4
  110. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  111. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  112. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  113. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  114. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +4 -4
  115. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  116. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +2 -2
  117. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  118. package/app/.next/server/app/dashboard/combos.html +1 -1
  119. package/app/.next/server/app/dashboard/combos.rsc +4 -4
  120. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  121. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  122. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  123. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  124. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +4 -4
  125. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  126. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +2 -2
  127. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  128. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  129. package/app/.next/server/app/dashboard/endpoint.rsc +4 -4
  130. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  131. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  132. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  133. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  134. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +4 -4
  135. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  136. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +2 -2
  137. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  138. package/app/.next/server/app/dashboard/profile.html +1 -1
  139. package/app/.next/server/app/dashboard/profile.rsc +4 -4
  140. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  141. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  142. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  143. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  144. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +4 -4
  145. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  146. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +2 -2
  147. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  148. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  149. package/app/.next/server/app/dashboard/providers/new.rsc +4 -4
  150. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  151. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  152. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  153. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  154. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  155. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +4 -4
  156. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  157. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +2 -2
  158. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  159. package/app/.next/server/app/dashboard/providers.html +1 -1
  160. package/app/.next/server/app/dashboard/providers.rsc +4 -4
  161. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  162. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  163. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  164. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  165. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +4 -4
  166. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  167. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +2 -2
  168. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  169. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  171. package/app/.next/server/app/dashboard/settings/pricing.rsc +2 -2
  172. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +2 -2
  173. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  174. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +2 -2
  175. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  176. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  177. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  178. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  179. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  180. package/app/.next/server/app/dashboard/translator.html +1 -1
  181. package/app/.next/server/app/dashboard/translator.rsc +4 -4
  182. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  183. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  184. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  185. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  186. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +4 -4
  187. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  188. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +2 -2
  189. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  190. package/app/.next/server/app/dashboard/usage.html +1 -1
  191. package/app/.next/server/app/dashboard/usage.rsc +4 -4
  192. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  193. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  194. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  195. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  196. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +4 -4
  197. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  198. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +2 -2
  199. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  200. package/app/.next/server/app/dashboard.html +1 -1
  201. package/app/.next/server/app/dashboard.rsc +4 -4
  202. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  203. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  204. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  205. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +4 -4
  206. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  207. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +2 -2
  208. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  209. package/app/.next/server/app/index.html +1 -1
  210. package/app/.next/server/app/index.rsc +2 -2
  211. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  212. package/app/.next/server/app/index.segments/_full.segment.rsc +2 -2
  213. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  214. package/app/.next/server/app/index.segments/_index.segment.rsc +2 -2
  215. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  216. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  217. package/app/.next/server/app/landing.html +1 -1
  218. package/app/.next/server/app/landing.rsc +2 -2
  219. package/app/.next/server/app/landing.segments/_full.segment.rsc +2 -2
  220. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  221. package/app/.next/server/app/landing.segments/_index.segment.rsc +2 -2
  222. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  223. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  224. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  225. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  226. package/app/.next/server/app/login.html +1 -1
  227. package/app/.next/server/app/login.rsc +3 -3
  228. package/app/.next/server/app/login.segments/_full.segment.rsc +3 -3
  229. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  230. package/app/.next/server/app/login.segments/_index.segment.rsc +2 -2
  231. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  232. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  233. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  234. package/app/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  235. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  236. package/app/.next/server/app-paths-manifest.json +35 -35
  237. package/app/.next/server/chunks/6186.js +12 -23
  238. package/app/.next/server/chunks/8694.js +1 -1
  239. package/app/.next/server/pages/404.html +1 -1
  240. package/app/.next/server/pages/500.html +2 -2
  241. package/app/.next/server/server-reference-manifest.js +1 -1
  242. package/app/.next/server/server-reference-manifest.json +1 -1
  243. package/app/.next/static/chunks/{8729-34f7f0844b464ca0.js → 8729-4580b1f9160e0d05.js} +1 -1
  244. package/app/package.json +1 -1
  245. package/app/src/mitm/manager.js +69 -76
  246. package/cli.js +4 -3
  247. package/package.json +1 -1
  248. /package/app/.next/static/{O7zv0v3lkhShT-i4HrmmA → q0QYF_Zfw0WVfoFaOHw7X}/_buildManifest.js +0 -0
  249. /package/app/.next/static/{O7zv0v3lkhShT-i4HrmmA → q0QYF_Zfw0WVfoFaOHw7X}/_ssgManifest.js +0 -0
@@ -276,12 +276,11 @@ async function killLeftoverMitm(sudoPassword) {
276
276
  * Returns { ok, pid } on success, null on timeout.
277
277
  */
278
278
  function pollMitmHealth(timeoutMs) {
279
- const healthPort = MITM_PORT;
280
279
  return new Promise((resolve) => {
281
280
  const deadline = Date.now() + timeoutMs;
282
281
  const check = () => {
283
282
  const req = https.request(
284
- { hostname: "127.0.0.1", port: healthPort, path: "/_mitm_health", method: "GET", rejectUnauthorized: false },
283
+ { hostname: "127.0.0.1", port: 443, path: "/_mitm_health", method: "GET", rejectUnauthorized: false },
285
284
  (res) => {
286
285
  let body = "";
287
286
  res.on("data", (d) => { body += d; });
@@ -413,54 +412,75 @@ async function startMitm(apiKey, sudoPassword) {
413
412
  const esc = (s) => s.replace(/'/g, "''");
414
413
  const certPsPath = esc(certPath);
415
414
  const hostsPsPath = esc(hostsFile);
416
- const nodePsPath = esc(process.execPath);
417
- const serverPsPath = esc(SERVER_PATH);
418
415
 
419
- const dnsAddLines = TARGET_HOSTS_WIN.map(h =>
420
- `if (-not (Select-String -Path '${hostsPsPath}' -Pattern '${h}' -Quiet)) { Add-Content -Path '${hostsPsPath}' -Value "127.0.0.1 ${h}" }`
421
- ).join("\n");
416
+ // Check if one-time setup is already done (urlacl granted + cert installed + DNS added)
417
+ const settings = _getSettings ? await _getSettings().catch(() => ({})) : {};
418
+ const setupDone = settings.mitmWinSetupDone && fs.existsSync(certPath) && checkDNSEntry();
419
+
420
+ if (!setupDone) {
421
+ // Phase 1: single UAC prompt — cert + DNS + netsh urlacl (one-time setup)
422
+ const dnsAddLines = TARGET_HOSTS_WIN.map(h =>
423
+ `if (-not (Select-String -Path '${hostsPsPath}' -Pattern '${h}' -Quiet)) { Add-Content -Path '${hostsPsPath}' -Value "127.0.0.1 ${h}" }`
424
+ ).join("\n");
425
+
426
+ const ts = Date.now();
427
+ const tmpSetup = path.join(os.tmpdir(), `mitm_setup_${ts}.ps1`);
428
+ const tmpDone = path.join(os.tmpdir(), `mitm_done_${ts}.tmp`);
429
+ const tmpDonePsPath = esc(tmpDone);
422
430
 
423
- // Single elevated script: cert + DNS + urlacl (allow node to bind 443) + start node
424
- // urlacl grants non-admin processes permission to bind port 443 via HTTP.sys
425
- const setupScript = `
426
- # 1. Install cert to Root store if not present
431
+ const setupScript = `
432
+ # 1. Install cert to Root store
427
433
  $certCheck = & certutil -store Root 'daily-cloudcode-pa.googleapis.com' 2>&1
428
- if ($LASTEXITCODE -ne 0) {
429
- & certutil -addstore Root '${certPsPath}' | Out-Null
430
- }
434
+ if ($LASTEXITCODE -ne 0) { & certutil -addstore Root '${certPsPath}' | Out-Null }
431
435
 
432
- # 2. Add DNS entries to hosts file
436
+ # 2. Add DNS entries
433
437
  ${dnsAddLines}
434
438
  & ipconfig /flushdns | Out-Null
435
439
 
436
- # 3. Grant permission for any user to bind HTTPS port 443 (no admin needed after this)
437
- & netsh http add urlacl url=https://+:${MITM_PORT}/ user=Everyone 2>&1 | Out-Null
440
+ # 3. Grant current user permission to bind port 443 (no more UAC needed after this)
441
+ $sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
442
+ & netsh http add urlacl url=https://+:443/ sddl="D:(A;;GX;;;$sid)" | Out-Null
438
443
 
439
- # 4. Start node MITM server (now allowed to bind 443 without admin)
440
- $env:ROUTER_API_KEY = '${esc(apiKey)}'
441
- $env:NODE_ENV = 'production'
442
- Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -WindowStyle Hidden
444
+ # 4. Write sentinel file so JS knows setup is complete
445
+ Set-Content -Path '${tmpDonePsPath}' -Value 'done' -Force
443
446
  `.trim();
444
447
 
445
- const tmpSetup = path.join(os.tmpdir(), `mitm_setup_${Date.now()}.ps1`);
446
- fs.writeFileSync(tmpSetup, setupScript, "utf8");
448
+ fs.writeFileSync(tmpSetup, setupScript, "utf8");
447
449
 
448
- // Outer spawn WITHOUT -NonInteractive so UAC dialog can appear
449
- await new Promise((resolve, reject) => {
450
- const setupProc = spawn("powershell", [
451
- "-NoProfile", "-WindowStyle", "Hidden",
450
+ // Trigger elevated script UAC will appear for user to confirm
451
+ spawn("powershell", [
452
+ "-NoProfile", "-NonInteractive",
452
453
  "-Command",
453
- `Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpSetup)}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpSetup)}' -ErrorAction SilentlyContinue`
454
- ], { stdio: "ignore", windowsHide: true });
455
- setupProc.on("close", () => resolve());
456
- setupProc.on("error", reject);
457
- });
454
+ `Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpSetup)}\\"' -Verb RunAs`
455
+ ], { stdio: "ignore", windowsHide: true }).unref();
456
+
457
+ // Poll sentinel file — wait up to 60s for user to confirm UAC + script to finish
458
+ await new Promise((resolve, reject) => {
459
+ const deadline = Date.now() + 60000;
460
+ const interval = setInterval(() => {
461
+ if (fs.existsSync(tmpDone)) {
462
+ clearInterval(interval);
463
+ try { fs.unlinkSync(tmpDone); } catch { /* ignore */ }
464
+ try { fs.unlinkSync(tmpSetup); } catch { /* ignore */ }
465
+ resolve();
466
+ } else if (Date.now() > deadline) {
467
+ clearInterval(interval);
468
+ reject(new Error("Setup timed out. Please confirm the UAC prompt and try again."));
469
+ }
470
+ }, 500);
471
+ });
458
472
 
459
- if (_updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
473
+ if (_updateSettings) await _updateSettings({ mitmWinSetupDone: true, mitmCertInstalled: true }).catch(() => { });
474
+ }
460
475
 
461
- // serverProcess reference not available (started inside elevated script)
462
- // PID will be captured from health check response
463
- serverProcess = { pid: null, killed: false };
476
+ // Phase 2: spawn node directly — no UAC needed (urlacl already granted)
477
+ serverProcess = spawn(process.execPath, [SERVER_PATH], {
478
+ detached: true,
479
+ stdio: "ignore",
480
+ windowsHide: true,
481
+ env: { ...process.env, ROUTER_API_KEY: apiKey, NODE_ENV: "production" },
482
+ });
483
+ serverProcess.unref();
464
484
  } else {
465
485
  // macOS/Linux: install cert + add DNS (requires sudo), then spawn server
466
486
  const settings = _getSettings ? await _getSettings().catch(() => ({})) : {};
@@ -483,8 +503,8 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
483
503
  serverProcess.stdin.end();
484
504
  }
485
505
 
486
- serverPid = IS_WIN ? null : serverProcess.pid;
487
- if (serverPid) fs.writeFileSync(PID_FILE, String(serverPid));
506
+ serverPid = serverProcess.pid;
507
+ fs.writeFileSync(PID_FILE, String(serverPid));
488
508
 
489
509
  let startError = null;
490
510
  if (!IS_WIN) {
@@ -508,7 +528,8 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
508
528
  }
509
529
 
510
530
  // Wait for server to be ready by polling health endpoint
511
- const health = await pollMitmHealth(IS_WIN ? 12000 : 8000);
531
+ // Windows: allow extra time for urlacl setup + node startup on first run
532
+ const health = await pollMitmHealth(IS_WIN ? 20000 : 8000);
512
533
 
513
534
  if (!health) {
514
535
  if (IS_WIN) serverProcess = null;
@@ -519,7 +540,10 @@ Start-Process -FilePath '${nodePsPath}' -ArgumentList '"${serverPsPath}"' -Windo
519
540
  throw new Error(`MITM server failed to start. ${reason}`);
520
541
  }
521
542
 
522
- // On Windows, use real PID from health check (node detached, serverProcess.pid may differ)
543
+ // On Windows, mark cert as installed after successful start
544
+ if (IS_WIN && _updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
545
+
546
+ // On Windows, use real PID from health check (launcher exits immediately after UAC)
523
547
  if (IS_WIN && health.pid) {
524
548
  serverPid = health.pid;
525
549
  fs.writeFileSync(PID_FILE, String(serverPid));
@@ -560,45 +584,14 @@ async function stopMitm(sudoPassword) {
560
584
  serverPid = null;
561
585
  }
562
586
 
563
- if (IS_WIN) {
564
- // Cleanup: remove DNS entries + urlacl — single UAC prompt
565
- const hostsFile = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts");
566
- const TARGET_HOSTS_WIN = ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"];
567
- const esc = (s) => s.replace(/'/g, "''");
568
- const hostsPsPath = esc(hostsFile);
569
-
570
- const content = fs.readFileSync(hostsFile, "utf8");
571
- const filtered = content.split(/\r?\n/).filter(l => !TARGET_HOSTS_WIN.some(h => l.includes(h))).join("\r\n");
572
- const tmpHosts = path.join(os.tmpdir(), "hosts_filtered.tmp");
573
- fs.writeFileSync(tmpHosts, filtered, "utf8");
574
-
575
- const cleanupScript = `
576
- # Remove DNS entries
577
- Copy-Item -Path '${esc(tmpHosts)}' -Destination '${hostsPsPath}' -Force
578
- & ipconfig /flushdns | Out-Null
579
- Remove-Item '${esc(tmpHosts)}' -ErrorAction SilentlyContinue
580
-
581
- # Remove urlacl
582
- & netsh http delete urlacl url=https://+:${MITM_PORT}/ 2>&1 | Out-Null
583
- `.trim();
584
- const tmpCleanup = path.join(os.tmpdir(), `mitm_cleanup_${Date.now()}.ps1`);
585
- fs.writeFileSync(tmpCleanup, cleanupScript, "utf8");
586
- await new Promise((resolve) => {
587
- const p = spawn("powershell", [
588
- "-NoProfile", "-WindowStyle", "Hidden",
589
- "-Command",
590
- `Start-Process powershell -ArgumentList '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File \\"${esc(tmpCleanup)}\\"' -Verb RunAs -Wait; Remove-Item '${esc(tmpCleanup)}' -ErrorAction SilentlyContinue`
591
- ], { stdio: "ignore", windowsHide: true });
592
- p.on("close", resolve);
593
- p.on("error", resolve);
594
- });
595
- } else {
596
- console.log("Removing DNS entry...");
597
- await removeDNSEntry(sudoPassword);
598
- }
587
+ console.log("Removing DNS entry...");
588
+ await removeDNSEntry(sudoPassword);
599
589
 
600
590
  try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
601
591
 
592
+ // Reset win setup flag so DNS gets re-added on next start
593
+ if (IS_WIN && _updateSettings) await _updateSettings({ mitmWinSetupDone: false }).catch(() => { });
594
+
602
595
  await saveMitmSettings(false, null);
603
596
 
604
597
  return { running: false, pid: null };
package/cli.js CHANGED
@@ -360,10 +360,11 @@ fi
360
360
  }
361
361
 
362
362
  const spawnOpts = platform === "win32"
363
- ? { stdio: "ignore", shell: true } // cmd /c start opens new window
364
- : { stdio: "inherit" }; // show progress in current terminal
363
+ ? { stdio: "ignore", windowsHide: true }
364
+ : { detached: true, stdio: "ignore" };
365
365
  const child = spawn(shellCmd[0], shellCmd[1], spawnOpts);
366
- child.on("close", () => process.exit(0));
366
+ child.unref();
367
+ process.exit(0);
367
368
  } catch (err) {
368
369
  console.error(`⚠️ Update failed: ${err.message}`);
369
370
  console.log(` Run manually: npm install -g ${pkg.name}@latest\n`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router",
3
- "version": "0.3.7",
3
+ "version": "0.3.9",
4
4
  "description": "9Router CLI - Start and manage 9Router server",
5
5
  "bin": {
6
6
  "9router": "./cli.js"