zevairouter 1.0.149 → 1.0.151

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 (333) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +11 -11
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  33. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  39. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  40. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  41. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  42. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  43. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  44. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  45. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  47. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  48. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  49. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +1 -1
  62. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  63. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js +1 -1
  64. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js +1 -1
  65. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js +1 -1
  66. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  67. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  68. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  69. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  70. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  71. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  72. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  73. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  74. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  75. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  76. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  77. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  78. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  79. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  80. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  81. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  82. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  83. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  84. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  85. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  86. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  87. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  88. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  89. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  90. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  91. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  92. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  93. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  94. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  95. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  96. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  97. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  98. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  99. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  100. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  101. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  102. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  103. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  104. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  105. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  106. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  107. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  108. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  109. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  110. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  111. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  112. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  113. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  114. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  115. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  116. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  117. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  118. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  119. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  120. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  121. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  122. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  123. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  124. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  125. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  126. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  127. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  128. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  129. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  130. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  131. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  132. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  133. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  134. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  135. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  136. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  137. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  138. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  139. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  140. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  141. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  142. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  143. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  144. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  145. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  146. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  147. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  148. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  149. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  150. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  151. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  152. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  153. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  154. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  155. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  156. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  157. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  158. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  159. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  160. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  161. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  162. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  163. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  164. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  165. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  166. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  167. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  168. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  169. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  170. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  171. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  172. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  173. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  174. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  175. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  176. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  177. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  178. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  179. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  180. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  181. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  182. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  183. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  184. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  185. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  186. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  187. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  188. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  189. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  190. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  191. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  192. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  193. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  194. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  195. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  196. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  197. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  198. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  199. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  200. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  201. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  202. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  203. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  204. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  205. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  206. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  207. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  208. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  209. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  210. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  211. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  212. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  213. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  214. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  215. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  216. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  217. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  218. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  220. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  221. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  222. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  223. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  224. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  225. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  226. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  227. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  228. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  229. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  230. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  231. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  232. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  233. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  234. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  235. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  236. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  237. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  238. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  239. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  240. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  241. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  242. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  243. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  244. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  245. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  246. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  247. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  248. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  249. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  251. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  252. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  253. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  254. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  255. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  256. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  257. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  258. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  259. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  260. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  261. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  262. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  263. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  264. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  265. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  266. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  267. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  268. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  269. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  270. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  271. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  272. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  273. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  274. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  275. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  276. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  277. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  278. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  279. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  280. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  281. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  282. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  283. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  284. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  285. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  286. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  287. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  288. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  289. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  290. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  291. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  292. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  293. package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
  294. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  295. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  297. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  298. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  299. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  300. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  301. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  302. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  303. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  304. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  305. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  306. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  307. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  308. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  309. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  310. package/cli/app/.next-cli-build/server/app-paths-manifest.json +11 -11
  311. package/cli/app/.next-cli-build/server/chunks/1019.js +1 -1
  312. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  313. package/cli/app/.next-cli-build/server/chunks/4566.js +1 -1
  314. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  315. package/cli/app/.next-cli-build/server/chunks/5000.js +1 -1
  316. package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
  317. package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
  318. package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
  319. package/cli/app/.next-cli-build/server/chunks/8371.js +1 -1
  320. package/cli/app/.next-cli-build/server/chunks/9621.js +1 -1
  321. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  322. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  323. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  324. package/cli/app/.next-cli-build/static/chunks/{620-104e711e028e5a60.js → 620-e4b9eeb811dd9f2e.js} +1 -1
  325. package/cli/app/CHANGELOG.md +14 -0
  326. package/cli/app/package.json +1 -1
  327. package/cli/package.json +1 -1
  328. package/package.json +1 -1
  329. package/src/lib/oauth/services/bulkImportBrowserEngine.js +287 -4
  330. package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +216 -7
  331. package/src/lib/oauth/services/kiroBulkImportManager.js +12 -9
  332. /package/cli/app/.next-cli-build/static/{w0fFe0wlenV7JedZI_N94 → nSCRy0gnXuQuQ0zz0lV8w}/_buildManifest.js +0 -0
  333. /package/cli/app/.next-cli-build/static/{w0fFe0wlenV7JedZI_N94 → nSCRy0gnXuQuQ0zz0lV8w}/_ssgManifest.js +0 -0
@@ -1,3 +1,17 @@
1
+ # v1.0.151 (2026-07-27)
2
+
3
+ ## Fixes
4
+ - **Deterministic DataImpulse sticky sessions**: CodeBuddy CN now initializes pasted proxies with sequential CN-accessible exit checks, preventing parallel first requests from racing sticky-port assignment and falsely reporting an immediate rotation.
5
+ - **Exit-aligned CloakBrowser identity**: the verified residential exit is applied directly to WebRTC, timezone, and locale flags instead of allowing failed foreign echo services to substitute the proxy gateway address.
6
+ - **Safe pre-purchase verification**: browser-context checks use the same sequential fallback order and compare the initial exit with the exit immediately before the 5sim purchase, without modifying pasted credentials or Proxy Pool data.
7
+
8
+ # v1.0.150 (2026-07-27)
9
+
10
+ ## Fixes
11
+ - **Coherent pasted-proxy browser identity**: CodeBuddy CN manual-proxy jobs now preserve CloakBrowser's binary-level exit IP, WebRTC, timezone, locale, and native viewport instead of overwriting them from the SMS number region.
12
+ - **Safe sticky-egress preflight**: manual proxies are verified against multiple exit-IP services at launch and immediately before the 5sim purchase, so unverifiable, rotating, or changed exits fail before a phone number is ordered.
13
+ - **Isolated manual registrations**: pasted-proxy jobs enforce one worker and recycle the complete CloakBrowser process between accounts, including cleanup after unexpected worker failures, without changing Proxy Pool selection or data.
14
+
1
15
  # v1.0.149 (2026-07-27)
2
16
 
3
17
  ## Fixes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.149",
3
+ "version": "1.0.151",
4
4
  "description": "Self-hosted AI router: many providers, one OpenAI-compatible /v1 endpoint and dashboard",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.0.149",
3
+ "version": "1.0.151",
4
4
  "description": "ZevaiRouter CLI - Start and manage ZevaiRouter server",
5
5
  "bin": {
6
6
  "zevai": "./cli.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.149",
3
+ "version": "1.0.151",
4
4
  "description": "Self-hosted AI router: many providers, one OpenAI-compatible /v1 endpoint and dashboard",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
@@ -1,5 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { createRequire } from "node:module";
3
+ import net from "node:net";
4
+ import { ProxyAgent, fetch as undiciFetch } from "undici";
3
5
 
4
6
  const requireFromHere = createRequire(import.meta.url);
5
7
 
@@ -12,6 +14,28 @@ const requireFromHere = createRequire(import.meta.url);
12
14
  export const DEFAULT_BULK_IMPORT_ENGINE = "cloakbrowser";
13
15
 
14
16
  const SUPPORTED_ENGINES = new Set(["cloakbrowser"]);
17
+ const CLOAK_PROXY_PROFILES = new WeakMap();
18
+
19
+ export const PROXY_EGRESS_ECHO_URLS = Object.freeze([
20
+ "https://myip.ipip.net",
21
+ "https://ip.3322.net",
22
+ "https://cip.cc",
23
+ ]);
24
+
25
+ const PROXY_GEO_PROFILES = Object.freeze({
26
+ CN: { timezone: "Asia/Shanghai", locale: "zh-CN" },
27
+ HK: { timezone: "Asia/Hong_Kong", locale: "zh-HK" },
28
+ MO: { timezone: "Asia/Macau", locale: "zh-MO" },
29
+ TW: { timezone: "Asia/Taipei", locale: "zh-TW" },
30
+ SG: { timezone: "Asia/Singapore", locale: "en-SG" },
31
+ JP: { timezone: "Asia/Tokyo", locale: "ja-JP" },
32
+ KR: { timezone: "Asia/Seoul", locale: "ko-KR" },
33
+ US: { locale: "en-US" },
34
+ GB: { locale: "en-GB" },
35
+ });
36
+
37
+ const DEFAULT_PROXY_PROBE_TIMEOUT_MS = 8_000;
38
+ const DEFAULT_PROXY_GEO_TIMEOUT_MS = 5_000;
15
39
 
16
40
  export function normalizeBulkImportEngine(value) {
17
41
  if (typeof value !== "string" || !value.trim()) return DEFAULT_BULK_IMPORT_ENGINE;
@@ -207,12 +231,250 @@ export async function newStealthContext(browser, options = {}) {
207
231
  return context;
208
232
  }
209
233
 
234
+ export function parseProxyEgressIp(value) {
235
+ const raw = String(value || "").trim();
236
+ if (!raw) return null;
237
+ if (net.isIP(raw)) return raw;
238
+
239
+ try {
240
+ const parsed = JSON.parse(raw);
241
+ for (const key of ["ip", "query", "address", "origin"]) {
242
+ const candidate = String(parsed?.[key] || "").trim();
243
+ if (net.isIP(candidate)) return candidate;
244
+ }
245
+ } catch {
246
+ // Plain-text echo services are expected here.
247
+ }
248
+
249
+ for (const match of raw.matchAll(/(?:\d{1,3}\.){3}\d{1,3}/g)) {
250
+ if (net.isIP(match[0])) return match[0];
251
+ }
252
+
253
+ const tokens = raw.split(/[\s,;()[\]{}<>"'=\uFF1A]+/);
254
+ for (const token of tokens) {
255
+ const candidate = token.replace(/^[^0-9a-f:]+|[^0-9a-f:]+$/gi, "");
256
+ if (candidate.includes(":") && net.isIP(candidate)) return candidate;
257
+ }
258
+ return null;
259
+ }
260
+
261
+ function inferProxyRegionalProfile(proxyUrl) {
262
+ try {
263
+ const parsed = new URL(String(proxyUrl || "").trim());
264
+ const username = decodeURIComponent(parsed.username || "");
265
+ const matches = [...username.matchAll(/(?:^|__)cr\.([a-z]{2})(?=__|$)/gi)];
266
+ const countryCode = matches.at(-1)?.[1]?.toUpperCase() || null;
267
+ const regional = countryCode ? PROXY_GEO_PROFILES[countryCode] : null;
268
+ return regional?.timezone && regional?.locale
269
+ ? { countryCode, ...regional, source: "proxy-country" }
270
+ : null;
271
+ } catch {
272
+ return null;
273
+ }
274
+ }
275
+
276
+ async function closeProxyAgent(agent) {
277
+ if (!agent) return;
278
+ if (typeof agent.close === "function") {
279
+ await Promise.resolve(agent.close()).catch(() => null);
280
+ return;
281
+ }
282
+ if (typeof agent.destroy === "function") {
283
+ await Promise.resolve(agent.destroy()).catch(() => null);
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Pin a fresh sticky proxy with one request at a time. Parallel first-use
289
+ * requests can race session assignment on providers such as DataImpulse.
290
+ */
291
+ export async function probeProxyEgressBeforeLaunch(
292
+ proxyUrl,
293
+ {
294
+ timeoutMs = DEFAULT_PROXY_PROBE_TIMEOUT_MS,
295
+ urls = PROXY_EGRESS_ECHO_URLS,
296
+ fetchImpl = undiciFetch,
297
+ createProxyAgent = (url) => new ProxyAgent(url),
298
+ } = {},
299
+ ) {
300
+ let agent = null;
301
+ const attemptedUrls = [];
302
+ let lastError = null;
303
+
304
+ try {
305
+ try {
306
+ agent = createProxyAgent(proxyUrl);
307
+ } catch {
308
+ return {
309
+ ok: false,
310
+ ip: null,
311
+ url: null,
312
+ attempts: 0,
313
+ attemptedUrls,
314
+ error: "proxy agent setup failed",
315
+ };
316
+ }
317
+
318
+ for (const url of urls) {
319
+ attemptedUrls.push(url);
320
+ try {
321
+ const response = await fetchImpl(url, {
322
+ dispatcher: agent,
323
+ redirect: "follow",
324
+ signal: AbortSignal.timeout(timeoutMs),
325
+ headers: {
326
+ Accept: "text/plain, application/json;q=0.9, */*;q=0.1",
327
+ "Cache-Control": "no-cache",
328
+ },
329
+ });
330
+ if (!response?.ok) {
331
+ lastError = `HTTP ${response?.status || 0}`;
332
+ continue;
333
+ }
334
+ const ip = parseProxyEgressIp(await response.text());
335
+ if (!ip) {
336
+ lastError = "exit-IP response was not recognized";
337
+ continue;
338
+ }
339
+ return {
340
+ ok: true,
341
+ ip,
342
+ url,
343
+ attempts: attemptedUrls.length,
344
+ attemptedUrls,
345
+ error: null,
346
+ };
347
+ } catch (error) {
348
+ lastError = error?.name === "TimeoutError"
349
+ ? `timed out after ${timeoutMs}ms`
350
+ : "request failed";
351
+ }
352
+ }
353
+
354
+ return {
355
+ ok: false,
356
+ ip: null,
357
+ url: null,
358
+ attempts: attemptedUrls.length,
359
+ attemptedUrls,
360
+ error: lastError || "all exit-IP services failed",
361
+ };
362
+ } finally {
363
+ await closeProxyAgent(agent);
364
+ }
365
+ }
366
+
367
+ async function lookupProxyGeoProfile(
368
+ egressIp,
369
+ { timeoutMs = DEFAULT_PROXY_GEO_TIMEOUT_MS, fetchImpl = undiciFetch } = {},
370
+ ) {
371
+ try {
372
+ const response = await fetchImpl(`https://ipwho.is/${encodeURIComponent(egressIp)}`, {
373
+ redirect: "follow",
374
+ signal: AbortSignal.timeout(timeoutMs),
375
+ headers: { Accept: "application/json" },
376
+ });
377
+ if (!response?.ok) return null;
378
+ const data = await response.json();
379
+ if (data?.success === false) return null;
380
+ const countryCode = String(data?.country_code || "").trim().toUpperCase();
381
+ const timezone = String(data?.timezone?.id || "").trim();
382
+ const locale = PROXY_GEO_PROFILES[countryCode]?.locale
383
+ || (countryCode ? `en-${countryCode}` : "");
384
+ return timezone && locale
385
+ ? { countryCode: countryCode || null, timezone, locale, source: "ip-geo" }
386
+ : null;
387
+ } catch {
388
+ return null;
389
+ }
390
+ }
391
+
392
+ export async function resolveProxyLaunchProfile(proxyUrl, options = {}) {
393
+ const probe = await probeProxyEgressBeforeLaunch(proxyUrl, options);
394
+ if (!probe.ok || !probe.ip) {
395
+ const error = new Error(
396
+ `Manual proxy exit IP could not be verified before browser launch (${probe.error || "no response"}); no phone number was purchased`,
397
+ );
398
+ error.code = "CLOAKBROWSER_PROXY_EGRESS_UNAVAILABLE";
399
+ throw error;
400
+ }
401
+
402
+ const regional = inferProxyRegionalProfile(proxyUrl)
403
+ || await lookupProxyGeoProfile(probe.ip, options);
404
+ if (!regional?.timezone || !regional?.locale) {
405
+ const error = new Error(
406
+ "Manual proxy region could not be aligned with CloakBrowser; no phone number was purchased",
407
+ );
408
+ error.code = "CLOAKBROWSER_PROXY_GEOIP_UNAVAILABLE";
409
+ throw error;
410
+ }
411
+
412
+ return Object.freeze({
413
+ egressIp: probe.ip,
414
+ timezone: regional.timezone,
415
+ locale: regional.locale,
416
+ countryCode: regional.countryCode || null,
417
+ source: regional.source,
418
+ probeUrl: probe.url,
419
+ probeAttempts: probe.attempts,
420
+ });
421
+ }
422
+
423
+ export function buildVerifiedProxyLaunchOptions(launchOpts, proxyProfile) {
424
+ const managedPrefixes = [
425
+ "--fingerprint-webrtc-ip=",
426
+ "--fingerprint-timezone=",
427
+ "--fingerprint-locale=",
428
+ "--lang=",
429
+ ];
430
+ const args = (launchOpts?.args || []).filter(
431
+ (arg) => !managedPrefixes.some((prefix) => String(arg).startsWith(prefix)),
432
+ );
433
+ args.push(
434
+ `--fingerprint-webrtc-ip=${proxyProfile.egressIp}`,
435
+ `--fingerprint-timezone=${proxyProfile.timezone}`,
436
+ `--lang=${proxyProfile.locale}`,
437
+ `--fingerprint-locale=${proxyProfile.locale}`,
438
+ );
439
+ return {
440
+ ...launchOpts,
441
+ args,
442
+ timezone: proxyProfile.timezone,
443
+ locale: proxyProfile.locale,
444
+ geoip: false,
445
+ };
446
+ }
447
+
210
448
  /**
211
449
  * CloakBrowser — sole bulk-import engine (patched stealth Chromium).
212
450
  * Prefer headed (headless=false); Turnstile / Google bot checks often fail headless.
213
451
  * Auto-installs into ~/.zevai/runtime via cloakbrowserRuntime.
214
452
  */
215
- async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = null } = {}) {
453
+ export function extractCloakProxyProfile(args = []) {
454
+ const readFlag = (name) => {
455
+ const prefix = `${name}=`;
456
+ const value = (args || []).find((arg) => String(arg).startsWith(prefix));
457
+ return value ? String(value).slice(prefix.length) : null;
458
+ };
459
+ return {
460
+ egressIp: readFlag("--fingerprint-webrtc-ip"),
461
+ timezone: readFlag("--fingerprint-timezone"),
462
+ locale: readFlag("--fingerprint-locale") || readFlag("--lang"),
463
+ };
464
+ }
465
+
466
+ export function getCloakProxyProfile(browser) {
467
+ return browser && typeof browser === "object"
468
+ ? CLOAK_PROXY_PROFILES.get(browser) || null
469
+ : null;
470
+ }
471
+
472
+ async function launchCloakbrowser({
473
+ proxyUrl,
474
+ headless = false,
475
+ windowSize = null,
476
+ requireProxyGeoip = false,
477
+ } = {}) {
216
478
  const { ensureDisplayForHeadedBrowser } = await import("./displayEnv.js");
217
479
 
218
480
  const runtime = loadRuntimeHelper("cloakbrowserRuntime");
@@ -259,18 +521,37 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
259
521
  launchOpts.geoip = true;
260
522
  }
261
523
  if (windowSize?.width && windowSize?.height) {
262
- launchOpts.viewport = { width: windowSize.width, height: windowSize.height };
524
+ // Keep headed contexts at viewport:null so dimensions follow the real Xvfb
525
+ // window. A Playwright viewport here overrides CloakBrowser's coherent window.
526
+ launchOpts.args = [`--window-size=${windowSize.width},${windowSize.height}`];
527
+ }
528
+
529
+ let effectiveLaunchOpts = launchOpts;
530
+ let proxyProfile = null;
531
+ if (proxyUrl && requireProxyGeoip) {
532
+ // Resolve the exit ourselves through CN-accessible endpoints. CloakBrowser's
533
+ // foreign echo fallbacks can time out and mistake the gateway IP for the exit.
534
+ proxyProfile = await resolveProxyLaunchProfile(proxyUrl);
535
+ effectiveLaunchOpts = buildVerifiedProxyLaunchOptions(launchOpts, proxyProfile);
263
536
  }
264
537
 
265
538
  try {
266
539
  // Do not wrap with stock stealth scripts — CloakBrowser patches at binary level.
267
- return await cloak.launch(launchOpts);
540
+ const browser = await cloak.launch(effectiveLaunchOpts);
541
+ if (proxyProfile) {
542
+ CLOAK_PROXY_PROFILES.set(browser, Object.freeze({ ...proxyProfile }));
543
+ }
544
+ return browser;
268
545
  } catch (error) {
269
546
  const msg = String(error?.message || error || "");
270
547
  if (!useHeadless && /XServer|DISPLAY|Missing X server|headed browser|no DISPLAY/i.test(msg)) {
271
548
  const display = ensureDisplayForHeadedBrowser();
272
549
  if (display.ok) {
273
- return cloak.launch(launchOpts);
550
+ const browser = await cloak.launch(effectiveLaunchOpts);
551
+ if (proxyProfile) {
552
+ CLOAK_PROXY_PROFILES.set(browser, Object.freeze({ ...proxyProfile }));
553
+ }
554
+ return browser;
274
555
  }
275
556
  const friendly = new Error(
276
557
  `${msg}\n\nVPS has no display. Install a virtual screen then retry:\n` +
@@ -299,6 +580,7 @@ export async function launchBulkImportBrowser({
299
580
  proxyUrl,
300
581
  headless = false,
301
582
  windowSize = null,
583
+ requireProxyGeoip = false,
302
584
  } = {}) {
303
585
  // engine arg kept for API compatibility; always cloakbrowser.
304
586
  void normalizeBulkImportEngine(engine);
@@ -306,6 +588,7 @@ export async function launchBulkImportBrowser({
306
588
  proxyUrl,
307
589
  headless: headless === true,
308
590
  windowSize,
591
+ requireProxyGeoip,
309
592
  });
310
593
  }
311
594