@jheavenknows/bluerouter 5.3.84 → 5.3.85

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 (1145) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +10 -9
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/routes-manifest.json +6 -0
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page.js.nft.json +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +2 -2
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page.js +2 -2
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page.js +2 -2
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/console/page.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/console/page.js.nft.json +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/console/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personal/page.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personal/page.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personal/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +1 -1
  87. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  90. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  92. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  93. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  95. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  96. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  98. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page.js +1 -1
  99. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page_client-reference-manifest.js +1 -1
  101. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/tts/page.js +1 -1
  102. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/tts/page.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/tts/page_client-reference-manifest.js +1 -1
  104. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  105. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  107. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  108. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  110. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page.js +1 -1
  111. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page_client-reference-manifest.js +1 -1
  113. package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/page.js +1 -1
  114. package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/page.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/page_client-reference-manifest.js +1 -1
  116. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js +1 -1
  117. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  119. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  120. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  122. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  123. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  125. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  126. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  128. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  129. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  131. package/app/.next-cli-build/server/app/_global-error/page.js +1 -1
  132. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  134. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  135. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  136. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  137. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  138. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  139. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  140. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  142. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  143. package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
  144. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
  145. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  146. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  147. package/app/.next-cli-build/server/app/api/audit-proxy/ca/route.js +1 -1
  148. package/app/.next-cli-build/server/app/api/audit-proxy/ca/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/audit-proxy/me/route.js +1 -0
  150. package/app/.next-cli-build/server/app/api/audit-proxy/me/route.js.nft.json +1 -0
  151. package/app/.next-cli-build/server/app/api/audit-proxy/me/route_client-reference-manifest.js +1 -0
  152. package/app/.next-cli-build/server/app/api/audit-proxy/route.js +2 -71
  153. package/app/.next-cli-build/server/app/api/audit-proxy/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
  155. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/auth/login/route.js +2 -2
  159. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  161. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  163. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  165. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  167. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/auth/view-mode/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/auth/view-mode/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/branding/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/branding/upload/route.js +1 -1
  177. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js +1 -1
  179. package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
  183. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  185. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
  187. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +2 -2
  189. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js +1 -1
  191. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  201. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  205. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  207. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  209. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  211. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  213. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  215. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  219. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  221. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js +2 -2
  223. package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/cluster/config/route.js +1 -1
  225. package/app/.next-cli-build/server/app/api/cluster/config/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/cluster/peers/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/cluster/peers/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js +2 -2
  235. package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/cluster/sync/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/cluster/sync/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/cluster/test/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/cluster/test/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +2 -2
  241. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  243. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/dashboard/ai-power-index/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/dashboard/ai-power-index/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js +1 -1
  247. package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js +2 -2
  249. package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js +1 -1
  251. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js +1 -1
  253. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js +1 -1
  255. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/route.js +2 -2
  257. package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +1 -1
  259. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js +1 -1
  261. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +1 -1
  263. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/config/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/config/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/live/route.js +1 -1
  267. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/live/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js +2 -2
  271. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/health/route.js +1 -1
  273. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/init/route.js +1 -1
  275. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js +1 -1
  277. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js +1 -1
  279. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  281. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/keys/route.js +2 -2
  283. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  285. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  291. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  293. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  297. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +2 -2
  299. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  301. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  302. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  303. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  305. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  307. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  309. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  315. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +1 -1
  317. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  319. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  321. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/oauth/grok-cli/device-code/route.js +1 -1
  323. package/app/.next-cli-build/server/app/api/oauth/grok-cli/device-code/route.js.nft.json +1 -1
  324. package/app/.next-cli-build/server/app/api/oauth/grok-cli/poll/route.js +1 -1
  325. package/app/.next-cli-build/server/app/api/oauth/grok-cli/poll/route.js.nft.json +1 -1
  326. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  327. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  333. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js +1 -1
  337. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js +1 -1
  339. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  340. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js +1 -1
  341. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  342. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/move/route.js +1 -1
  343. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/move/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js +1 -1
  345. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  346. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js +1 -1
  347. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js +1 -1
  349. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js +1 -1
  351. package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
  352. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js +1 -1
  353. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js +1 -1
  355. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  356. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js +1 -1
  357. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  358. package/app/.next-cli-build/server/app/api/personal-cloud-providers/shares/route.js +1 -1
  359. package/app/.next-cli-build/server/app/api/personal-cloud-providers/shares/route.js.nft.json +1 -1
  360. package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js +1 -1
  361. package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js.nft.json +1 -1
  362. package/app/.next-cli-build/server/app/api/pricing/catalog/route.js +2 -2
  363. package/app/.next-cli-build/server/app/api/pricing/catalog/route.js.nft.json +1 -1
  364. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js +1 -1
  365. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  366. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  367. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  368. package/app/.next-cli-build/server/app/api/provider-health/route.js +1 -1
  369. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  370. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  371. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  372. package/app/.next-cli-build/server/app/api/provider-nodes/openai-compatible/manage/route.js +1 -1
  373. package/app/.next-cli-build/server/app/api/provider-nodes/openai-compatible/manage/route.js.nft.json +1 -1
  374. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  375. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  376. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  377. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  378. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  379. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  380. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  381. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  382. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  383. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  384. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  385. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  386. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  387. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  388. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  389. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  390. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  391. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  392. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  393. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  394. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  395. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  396. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  397. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  398. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  399. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  400. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  401. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  402. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  403. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  404. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  405. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  406. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  407. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  408. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  409. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  410. package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js +1 -1
  411. package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js.nft.json +1 -1
  412. package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js +1 -1
  413. package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js.nft.json +1 -1
  414. package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js +2 -2
  415. package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js.nft.json +1 -1
  416. package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js +2 -2
  417. package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js.nft.json +1 -1
  418. package/app/.next-cli-build/server/app/api/resource-monitor/route.js +3 -3
  419. package/app/.next-cli-build/server/app/api/resource-monitor/route.js.nft.json +1 -1
  420. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  421. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  422. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  423. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  424. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  425. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  426. package/app/.next-cli-build/server/app/api/settings/route.js +2 -2
  427. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  428. package/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  429. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  430. package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  431. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  432. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  433. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  434. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  435. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  436. package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  437. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  438. package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  439. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  440. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  441. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  442. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  443. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  444. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  445. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  446. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  447. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  448. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  449. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  450. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  451. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  452. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  453. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  454. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  455. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  456. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  457. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  458. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js +1 -1
  459. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  460. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +1 -1
  461. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  462. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  463. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  464. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  465. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  466. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  467. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  468. package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
  469. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  470. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  471. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  472. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  473. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  474. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  475. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  476. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  477. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  478. package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  479. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  480. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  481. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  482. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  483. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  484. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  485. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  486. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  487. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  488. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  489. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  490. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  491. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  492. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  493. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  494. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  495. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  496. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  497. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  498. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  499. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  500. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  501. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  502. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  503. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  504. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  505. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  506. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  507. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  508. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  509. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  510. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  511. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  512. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  513. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  514. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  515. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  516. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  517. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  518. package/app/.next-cli-build/server/app/api/version/restart/route.js +1 -1
  519. package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
  520. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  521. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  522. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  523. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  524. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  525. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  526. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  527. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  528. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  529. package/app/.next-cli-build/server/app/callback.html +1 -1
  530. package/app/.next-cli-build/server/app/callback.rsc +6 -6
  531. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
  532. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  533. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
  534. package/app/.next-cli-build/server/app/dashboard/ai-power-index.html +1 -1
  535. package/app/.next-cli-build/server/app/dashboard/ai-power-index.rsc +7 -7
  536. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index/__PAGE__.segment.rsc +7 -7
  537. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_full.segment.rsc +7 -7
  538. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_tree.segment.rsc +2 -2
  539. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  540. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +10 -10
  541. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +10 -10
  542. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +10 -10
  543. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +2 -2
  544. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  545. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +8 -8
  546. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +8 -8
  547. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
  548. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  549. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.html +1 -1
  550. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.rsc +8 -8
  551. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles/__PAGE__.segment.rsc +8 -8
  552. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_full.segment.rsc +8 -8
  553. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_tree.segment.rsc +2 -2
  554. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  555. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +8 -8
  556. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  557. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  558. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  559. package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
  560. package/app/.next-cli-build/server/app/dashboard/cluster.rsc +7 -7
  561. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +7 -7
  562. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +7 -7
  563. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +2 -2
  564. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  565. package/app/.next-cli-build/server/app/dashboard/combos.rsc +8 -8
  566. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  567. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  568. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  569. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  570. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
  571. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  572. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  573. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  574. package/app/.next-cli-build/server/app/dashboard/local-ai-report.html +1 -1
  575. package/app/.next-cli-build/server/app/dashboard/local-ai-report.rsc +8 -8
  576. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report/__PAGE__.segment.rsc +8 -8
  577. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_full.segment.rsc +8 -8
  578. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_tree.segment.rsc +2 -2
  579. package/app/.next-cli-build/server/app/dashboard/logs.html +1 -1
  580. package/app/.next-cli-build/server/app/dashboard/logs.rsc +7 -7
  581. package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs/__PAGE__.segment.rsc +7 -7
  582. package/app/.next-cli-build/server/app/dashboard/logs.segments/_full.segment.rsc +7 -7
  583. package/app/.next-cli-build/server/app/dashboard/logs.segments/_tree.segment.rsc +2 -2
  584. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  585. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +8 -8
  586. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +8 -8
  587. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
  588. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  589. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  590. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +8 -8
  591. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +8 -8
  592. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
  593. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  594. package/app/.next-cli-build/server/app/dashboard/personal.html +1 -1
  595. package/app/.next-cli-build/server/app/dashboard/personal.rsc +8 -8
  596. package/app/.next-cli-build/server/app/dashboard/personal.segments/!KGRhc2hib2FyZCk/dashboard/personal/__PAGE__.segment.rsc +8 -8
  597. package/app/.next-cli-build/server/app/dashboard/personal.segments/_full.segment.rsc +8 -8
  598. package/app/.next-cli-build/server/app/dashboard/personal.segments/_tree.segment.rsc +2 -2
  599. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  600. package/app/.next-cli-build/server/app/dashboard/profile.rsc +8 -8
  601. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  602. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  603. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  604. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  605. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +7 -7
  606. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +7 -7
  607. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +7 -7
  608. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
  609. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  610. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +7 -7
  611. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +7 -7
  612. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +7 -7
  613. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
  614. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  615. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +8 -8
  616. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  617. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  618. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  619. package/app/.next-cli-build/server/app/dashboard/providers/stt.html +1 -1
  620. package/app/.next-cli-build/server/app/dashboard/providers/stt.rsc +8 -8
  621. package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk/dashboard/providers/stt/__PAGE__.segment.rsc +8 -8
  622. package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_full.segment.rsc +8 -8
  623. package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_tree.segment.rsc +2 -2
  624. package/app/.next-cli-build/server/app/dashboard/providers/tts.html +1 -1
  625. package/app/.next-cli-build/server/app/dashboard/providers/tts.rsc +8 -8
  626. package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk/dashboard/providers/tts/__PAGE__.segment.rsc +8 -8
  627. package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_full.segment.rsc +8 -8
  628. package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_tree.segment.rsc +2 -2
  629. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  630. package/app/.next-cli-build/server/app/dashboard/providers.rsc +8 -8
  631. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  632. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  633. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  634. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  635. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +8 -8
  636. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  637. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  638. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  639. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  640. package/app/.next-cli-build/server/app/dashboard/quota.rsc +9 -9
  641. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  642. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  643. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  644. package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
  645. package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +7 -7
  646. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +7 -7
  647. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +7 -7
  648. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +2 -2
  649. package/app/.next-cli-build/server/app/dashboard/routing-topology.html +1 -1
  650. package/app/.next-cli-build/server/app/dashboard/routing-topology.rsc +7 -7
  651. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/!KGRhc2hib2FyZCk/dashboard/routing-topology/__PAGE__.segment.rsc +7 -7
  652. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_full.segment.rsc +7 -7
  653. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_tree.segment.rsc +2 -2
  654. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  655. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +7 -7
  656. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +7 -7
  657. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +7 -7
  658. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  659. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  660. package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
  661. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
  662. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
  663. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  664. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  665. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +7 -7
  666. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
  667. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
  668. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  669. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  670. package/app/.next-cli-build/server/app/dashboard/translator.rsc +8 -8
  671. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +8 -8
  672. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
  673. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  674. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  675. package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -8
  676. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  677. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  678. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  679. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  680. package/app/.next-cli-build/server/app/dashboard.rsc +8 -8
  681. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  682. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +8 -8
  683. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  684. package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
  685. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  686. package/app/.next-cli-build/server/app/index.html +1 -1
  687. package/app/.next-cli-build/server/app/index.rsc +6 -6
  688. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  689. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
  690. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  691. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  692. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  693. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  694. package/app/.next-cli-build/server/app/landing.html +1 -1
  695. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  696. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  697. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  698. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
  699. package/app/.next-cli-build/server/app/login/page.js +1 -1
  700. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  701. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  702. package/app/.next-cli-build/server/app/login.html +1 -1
  703. package/app/.next-cli-build/server/app/login.rsc +7 -7
  704. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
  705. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  706. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +7 -7
  707. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
  708. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  709. package/app/.next-cli-build/server/app/page.js +1 -1
  710. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  711. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  712. package/app/.next-cli-build/server/app-paths-manifest.json +10 -9
  713. package/app/.next-cli-build/server/chunks/2731.js +2 -2
  714. package/app/.next-cli-build/server/chunks/3399.js +1 -1
  715. package/app/.next-cli-build/server/chunks/3433.js +3 -3
  716. package/app/.next-cli-build/server/chunks/3958.js +10 -10
  717. package/app/.next-cli-build/server/chunks/4432.js +1 -0
  718. package/app/.next-cli-build/server/chunks/4696.js +1 -1
  719. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  720. package/app/.next-cli-build/server/chunks/5210.js +4 -4
  721. package/app/.next-cli-build/server/chunks/5530.js +18 -0
  722. package/app/.next-cli-build/server/chunks/607.js +1 -1
  723. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  724. package/app/.next-cli-build/server/chunks/6684.js +1 -1
  725. package/app/.next-cli-build/server/chunks/6811.js +1 -1
  726. package/app/.next-cli-build/server/chunks/689.js +3 -3
  727. package/app/.next-cli-build/server/chunks/6977.js +1 -1
  728. package/app/.next-cli-build/server/chunks/6992.js +1 -1
  729. package/app/.next-cli-build/server/chunks/7007.js +2 -0
  730. package/app/.next-cli-build/server/chunks/7812.js +1 -1
  731. package/app/.next-cli-build/server/chunks/8352.js +1 -1
  732. package/app/.next-cli-build/server/chunks/8640.js +1 -1
  733. package/app/.next-cli-build/server/chunks/9083.js +69 -0
  734. package/app/.next-cli-build/server/functions-config-manifest.json +1 -0
  735. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  736. package/app/.next-cli-build/server/pages/404.html +1 -1
  737. package/app/.next-cli-build/server/pages/500.html +1 -1
  738. package/app/.next-cli-build/static/IIFO5RGYvaU0aOO82Ud1_/_buildManifest.js +1 -0
  739. package/app/.next-cli-build/static/chunks/{5263-3954db1727e15f74.js → 5263-138eecf0d19758fe.js} +1 -1
  740. package/app/.next-cli-build/static/chunks/{5497-ba85afce54af9f8f.js → 5497-a78a755c8aa4623d.js} +3 -3
  741. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/analytics/{page-c8ad699d35b93c2d.js → page-ceed626d3c451d99.js} +1 -1
  742. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/audit-proxy/page-92c59be230ac596e.js +21 -0
  743. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/local-ai-report/{page-0f3e7963fc09b58f.js → page-560eded56e8ad020.js} +1 -1
  744. package/app/.next-cli-build/static/chunks/app/_global-error/page-341e13c0c7617e2b.js +1 -0
  745. package/app/.next-cli-build/static/chunks/app/api/audit-proxy/ca/route-341e13c0c7617e2b.js +1 -0
  746. package/app/.next-cli-build/static/chunks/app/api/audit-proxy/me/route-341e13c0c7617e2b.js +1 -0
  747. package/app/.next-cli-build/static/chunks/app/api/audit-proxy/route-341e13c0c7617e2b.js +1 -0
  748. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-341e13c0c7617e2b.js +1 -0
  749. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-341e13c0c7617e2b.js +1 -0
  750. package/app/.next-cli-build/static/chunks/app/api/auth/login/route-341e13c0c7617e2b.js +1 -0
  751. package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-341e13c0c7617e2b.js +1 -0
  752. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-341e13c0c7617e2b.js +1 -0
  753. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-341e13c0c7617e2b.js +1 -0
  754. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-341e13c0c7617e2b.js +1 -0
  755. package/app/.next-cli-build/static/chunks/app/api/auth/status/route-341e13c0c7617e2b.js +1 -0
  756. package/app/.next-cli-build/static/chunks/app/api/auth/view-mode/route-341e13c0c7617e2b.js +1 -0
  757. package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-341e13c0c7617e2b.js +1 -0
  758. package/app/.next-cli-build/static/chunks/app/api/branding/route-341e13c0c7617e2b.js +1 -0
  759. package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-341e13c0c7617e2b.js +1 -0
  760. package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/cloud-models/route-341e13c0c7617e2b.js +1 -0
  761. package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/route-341e13c0c7617e2b.js +1 -0
  762. package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-341e13c0c7617e2b.js +1 -0
  763. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-341e13c0c7617e2b.js +1 -0
  764. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-341e13c0c7617e2b.js +1 -0
  765. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-341e13c0c7617e2b.js +1 -0
  766. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-341e13c0c7617e2b.js +1 -0
  767. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-341e13c0c7617e2b.js +1 -0
  768. package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-341e13c0c7617e2b.js +1 -0
  769. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-341e13c0c7617e2b.js +1 -0
  770. package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-341e13c0c7617e2b.js +1 -0
  771. package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-341e13c0c7617e2b.js +1 -0
  772. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-341e13c0c7617e2b.js +1 -0
  773. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-341e13c0c7617e2b.js +1 -0
  774. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-341e13c0c7617e2b.js +1 -0
  775. package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-341e13c0c7617e2b.js +1 -0
  776. package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-341e13c0c7617e2b.js +1 -0
  777. package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-341e13c0c7617e2b.js +1 -0
  778. package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-341e13c0c7617e2b.js +1 -0
  779. package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-341e13c0c7617e2b.js +1 -0
  780. package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-341e13c0c7617e2b.js +1 -0
  781. package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-341e13c0c7617e2b.js +1 -0
  782. package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-341e13c0c7617e2b.js +1 -0
  783. package/app/.next-cli-build/static/chunks/app/api/cluster/config/route-341e13c0c7617e2b.js +1 -0
  784. package/app/.next-cli-build/static/chunks/app/api/cluster/heartbeat/route-341e13c0c7617e2b.js +1 -0
  785. package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/command/route-341e13c0c7617e2b.js +1 -0
  786. package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/route-341e13c0c7617e2b.js +1 -0
  787. package/app/.next-cli-build/static/chunks/app/api/cluster/peers/route-341e13c0c7617e2b.js +1 -0
  788. package/app/.next-cli-build/static/chunks/app/api/cluster/snapshot/route-341e13c0c7617e2b.js +1 -0
  789. package/app/.next-cli-build/static/chunks/app/api/cluster/sync/route-341e13c0c7617e2b.js +1 -0
  790. package/app/.next-cli-build/static/chunks/app/api/cluster/test/route-341e13c0c7617e2b.js +1 -0
  791. package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-341e13c0c7617e2b.js +1 -0
  792. package/app/.next-cli-build/static/chunks/app/api/combos/route-341e13c0c7617e2b.js +1 -0
  793. package/app/.next-cli-build/static/chunks/app/api/dashboard/ai-power-index/route-341e13c0c7617e2b.js +1 -0
  794. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/ai-models/route-341e13c0c7617e2b.js +1 -0
  795. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/analyze/route-341e13c0c7617e2b.js +1 -0
  796. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-341e13c0c7617e2b.js +1 -0
  797. package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-341e13c0c7617e2b.js +1 -0
  798. package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-341e13c0c7617e2b.js +1 -0
  799. package/app/.next-cli-build/static/chunks/app/api/dashboard/local-ai-report/route-341e13c0c7617e2b.js +1 -0
  800. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-341e13c0c7617e2b.js +1 -0
  801. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-341e13c0c7617e2b.js +1 -0
  802. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-341e13c0c7617e2b.js +1 -0
  803. package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/config/route-341e13c0c7617e2b.js +1 -0
  804. package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/live/route-341e13c0c7617e2b.js +1 -0
  805. package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/route-341e13c0c7617e2b.js +1 -0
  806. package/app/.next-cli-build/static/chunks/app/api/dashboard/token-saver/route-341e13c0c7617e2b.js +1 -0
  807. package/app/.next-cli-build/static/chunks/app/api/health/route-341e13c0c7617e2b.js +1 -0
  808. package/app/.next-cli-build/static/chunks/app/api/init/route-341e13c0c7617e2b.js +1 -0
  809. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/caveman-test/route-341e13c0c7617e2b.js +1 -0
  810. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-341e13c0c7617e2b.js +1 -0
  811. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-341e13c0c7617e2b.js +1 -0
  812. package/app/.next-cli-build/static/chunks/app/api/keys/route-341e13c0c7617e2b.js +1 -0
  813. package/app/.next-cli-build/static/chunks/app/api/locale/route-341e13c0c7617e2b.js +1 -0
  814. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-341e13c0c7617e2b.js +1 -0
  815. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-341e13c0c7617e2b.js +1 -0
  816. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-341e13c0c7617e2b.js +1 -0
  817. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-341e13c0c7617e2b.js +1 -0
  818. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-341e13c0c7617e2b.js +1 -0
  819. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-341e13c0c7617e2b.js +1 -0
  820. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-341e13c0c7617e2b.js +1 -0
  821. package/app/.next-cli-build/static/chunks/app/api/models/alias/route-341e13c0c7617e2b.js +1 -0
  822. package/app/.next-cli-build/static/chunks/app/api/models/availability/route-341e13c0c7617e2b.js +1 -0
  823. package/app/.next-cli-build/static/chunks/app/api/models/custom/route-341e13c0c7617e2b.js +1 -0
  824. package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-341e13c0c7617e2b.js +1 -0
  825. package/app/.next-cli-build/static/chunks/app/api/models/route-341e13c0c7617e2b.js +1 -0
  826. package/app/.next-cli-build/static/chunks/app/api/models/test/route-341e13c0c7617e2b.js +1 -0
  827. package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-341e13c0c7617e2b.js +1 -0
  828. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-341e13c0c7617e2b.js +1 -0
  829. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-341e13c0c7617e2b.js +1 -0
  830. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-341e13c0c7617e2b.js +1 -0
  831. package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-341e13c0c7617e2b.js +1 -0
  832. package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/device-code/route-341e13c0c7617e2b.js +1 -0
  833. package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/poll/route-341e13c0c7617e2b.js +1 -0
  834. package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-341e13c0c7617e2b.js +1 -0
  835. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-341e13c0c7617e2b.js +1 -0
  836. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-341e13c0c7617e2b.js +1 -0
  837. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-341e13c0c7617e2b.js +1 -0
  838. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-341e13c0c7617e2b.js +1 -0
  839. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-341e13c0c7617e2b.js +1 -0
  840. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-341e13c0c7617e2b.js +1 -0
  841. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-341e13c0c7617e2b.js +1 -0
  842. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/move/route-341e13c0c7617e2b.js +1 -0
  843. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-341e13c0c7617e2b.js +1 -0
  844. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/usage/route-341e13c0c7617e2b.js +1 -0
  845. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/client/route-341e13c0c7617e2b.js +1 -0
  846. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/monitor/route-341e13c0c7617e2b.js +1 -0
  847. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-341e13c0c7617e2b.js +1 -0
  848. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-341e13c0c7617e2b.js +1 -0
  849. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-341e13c0c7617e2b.js +1 -0
  850. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/shares/route-341e13c0c7617e2b.js +1 -0
  851. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/visibility/route-341e13c0c7617e2b.js +1 -0
  852. package/app/.next-cli-build/static/chunks/app/api/pricing/catalog/route-341e13c0c7617e2b.js +1 -0
  853. package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-341e13c0c7617e2b.js +1 -0
  854. package/app/.next-cli-build/static/chunks/app/api/pricing/route-341e13c0c7617e2b.js +1 -0
  855. package/app/.next-cli-build/static/chunks/app/api/provider-health/route-341e13c0c7617e2b.js +1 -0
  856. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-341e13c0c7617e2b.js +1 -0
  857. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/openai-compatible/manage/route-341e13c0c7617e2b.js +1 -0
  858. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-341e13c0c7617e2b.js +1 -0
  859. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-341e13c0c7617e2b.js +1 -0
  860. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-341e13c0c7617e2b.js +1 -0
  861. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-341e13c0c7617e2b.js +1 -0
  862. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-341e13c0c7617e2b.js +1 -0
  863. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-341e13c0c7617e2b.js +1 -0
  864. package/app/.next-cli-build/static/chunks/app/api/providers/client/route-341e13c0c7617e2b.js +1 -0
  865. package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-341e13c0c7617e2b.js +1 -0
  866. package/app/.next-cli-build/static/chunks/app/api/providers/route-341e13c0c7617e2b.js +1 -0
  867. package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-341e13c0c7617e2b.js +1 -0
  868. package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-341e13c0c7617e2b.js +1 -0
  869. package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-341e13c0c7617e2b.js +1 -0
  870. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-341e13c0c7617e2b.js +1 -0
  871. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-341e13c0c7617e2b.js +1 -0
  872. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-341e13c0c7617e2b.js +1 -0
  873. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-341e13c0c7617e2b.js +1 -0
  874. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-341e13c0c7617e2b.js +1 -0
  875. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-341e13c0c7617e2b.js +1 -0
  876. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/[id]/route-341e13c0c7617e2b.js +1 -0
  877. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/ai-models/route-341e13c0c7617e2b.js +1 -0
  878. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/analyze/route-341e13c0c7617e2b.js +1 -0
  879. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/history/route-341e13c0c7617e2b.js +1 -0
  880. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/route-341e13c0c7617e2b.js +1 -0
  881. package/app/.next-cli-build/static/chunks/app/api/settings/database/route-341e13c0c7617e2b.js +1 -0
  882. package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-341e13c0c7617e2b.js +1 -0
  883. package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-341e13c0c7617e2b.js +1 -0
  884. package/app/.next-cli-build/static/chunks/app/api/settings/route-341e13c0c7617e2b.js +1 -0
  885. package/app/.next-cli-build/static/chunks/app/api/shutdown/route-341e13c0c7617e2b.js +1 -0
  886. package/app/.next-cli-build/static/chunks/app/api/tags/route-341e13c0c7617e2b.js +1 -0
  887. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-341e13c0c7617e2b.js +1 -0
  888. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-341e13c0c7617e2b.js +1 -0
  889. package/app/.next-cli-build/static/chunks/app/api/translator/load/route-341e13c0c7617e2b.js +1 -0
  890. package/app/.next-cli-build/static/chunks/app/api/translator/save/route-341e13c0c7617e2b.js +1 -0
  891. package/app/.next-cli-build/static/chunks/app/api/translator/send/route-341e13c0c7617e2b.js +1 -0
  892. package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-341e13c0c7617e2b.js +1 -0
  893. package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-341e13c0c7617e2b.js +1 -0
  894. package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-341e13c0c7617e2b.js +1 -0
  895. package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-341e13c0c7617e2b.js +1 -0
  896. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-341e13c0c7617e2b.js +1 -0
  897. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-341e13c0c7617e2b.js +1 -0
  898. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-341e13c0c7617e2b.js +1 -0
  899. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-341e13c0c7617e2b.js +1 -0
  900. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-341e13c0c7617e2b.js +1 -0
  901. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-341e13c0c7617e2b.js +1 -0
  902. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-341e13c0c7617e2b.js +1 -0
  903. package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-341e13c0c7617e2b.js +1 -0
  904. package/app/.next-cli-build/static/chunks/app/api/usage/history/route-341e13c0c7617e2b.js +1 -0
  905. package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-341e13c0c7617e2b.js +1 -0
  906. package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-341e13c0c7617e2b.js +1 -0
  907. package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-341e13c0c7617e2b.js +1 -0
  908. package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-341e13c0c7617e2b.js +1 -0
  909. package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-341e13c0c7617e2b.js +1 -0
  910. package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-341e13c0c7617e2b.js +1 -0
  911. package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-341e13c0c7617e2b.js +1 -0
  912. package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-341e13c0c7617e2b.js +1 -0
  913. package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-341e13c0c7617e2b.js +1 -0
  914. package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-341e13c0c7617e2b.js +1 -0
  915. package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-341e13c0c7617e2b.js +1 -0
  916. package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-341e13c0c7617e2b.js +1 -0
  917. package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-341e13c0c7617e2b.js +1 -0
  918. package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-341e13c0c7617e2b.js +1 -0
  919. package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-341e13c0c7617e2b.js +1 -0
  920. package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-341e13c0c7617e2b.js +1 -0
  921. package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-341e13c0c7617e2b.js +1 -0
  922. package/app/.next-cli-build/static/chunks/app/api/v1/models/route-341e13c0c7617e2b.js +1 -0
  923. package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-341e13c0c7617e2b.js +1 -0
  924. package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-341e13c0c7617e2b.js +1 -0
  925. package/app/.next-cli-build/static/chunks/app/api/v1/route-341e13c0c7617e2b.js +1 -0
  926. package/app/.next-cli-build/static/chunks/app/api/v1/search/route-341e13c0c7617e2b.js +1 -0
  927. package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-341e13c0c7617e2b.js +1 -0
  928. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-341e13c0c7617e2b.js +1 -0
  929. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-341e13c0c7617e2b.js +1 -0
  930. package/app/.next-cli-build/static/chunks/app/api/version/restart/route-341e13c0c7617e2b.js +1 -0
  931. package/app/.next-cli-build/static/chunks/app/api/version/route-341e13c0c7617e2b.js +1 -0
  932. package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-341e13c0c7617e2b.js +1 -0
  933. package/app/.next-cli-build/static/chunks/app/api/version/update/route-341e13c0c7617e2b.js +1 -0
  934. package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-341e13c0c7617e2b.js +1 -0
  935. package/app/.next-cli-build/static/chunks/app/page-341e13c0c7617e2b.js +1 -0
  936. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-341e13c0c7617e2b.js +1 -0
  937. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-341e13c0c7617e2b.js +1 -0
  938. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-341e13c0c7617e2b.js +1 -0
  939. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-341e13c0c7617e2b.js +1 -0
  940. package/app/.next-cli-build/static/css/{f21569c5199f3f94.css → 5ea18070d2325887.css} +1 -1
  941. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.3.78-to-5.3.79-5.3.79-20260823-174256 → upgrade-5.3.83-to-5.3.84-5.3.84-20260823-203807}/data.sqlite +0 -0
  942. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
  943. package/app/package.json +1 -1
  944. package/package.json +2 -2
  945. package/app/.next-cli-build/server/chunks/3767.js +0 -18
  946. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/audit-proxy/page-992f9910d3c75785.js +0 -21
  947. package/app/.next-cli-build/static/chunks/app/_global-error/page-a48c4c9356e97886.js +0 -1
  948. package/app/.next-cli-build/static/chunks/app/api/audit-proxy/ca/route-a48c4c9356e97886.js +0 -1
  949. package/app/.next-cli-build/static/chunks/app/api/audit-proxy/route-a48c4c9356e97886.js +0 -1
  950. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-a48c4c9356e97886.js +0 -1
  951. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-a48c4c9356e97886.js +0 -1
  952. package/app/.next-cli-build/static/chunks/app/api/auth/login/route-a48c4c9356e97886.js +0 -1
  953. package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-a48c4c9356e97886.js +0 -1
  954. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-a48c4c9356e97886.js +0 -1
  955. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-a48c4c9356e97886.js +0 -1
  956. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-a48c4c9356e97886.js +0 -1
  957. package/app/.next-cli-build/static/chunks/app/api/auth/status/route-a48c4c9356e97886.js +0 -1
  958. package/app/.next-cli-build/static/chunks/app/api/auth/view-mode/route-a48c4c9356e97886.js +0 -1
  959. package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-a48c4c9356e97886.js +0 -1
  960. package/app/.next-cli-build/static/chunks/app/api/branding/route-a48c4c9356e97886.js +0 -1
  961. package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-a48c4c9356e97886.js +0 -1
  962. package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/cloud-models/route-a48c4c9356e97886.js +0 -1
  963. package/app/.next-cli-build/static/chunks/app/api/cli-model-profiles/route-a48c4c9356e97886.js +0 -1
  964. package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-a48c4c9356e97886.js +0 -1
  965. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-a48c4c9356e97886.js +0 -1
  966. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-a48c4c9356e97886.js +0 -1
  967. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-a48c4c9356e97886.js +0 -1
  968. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-a48c4c9356e97886.js +0 -1
  969. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-a48c4c9356e97886.js +0 -1
  970. package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-a48c4c9356e97886.js +0 -1
  971. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-a48c4c9356e97886.js +0 -1
  972. package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-a48c4c9356e97886.js +0 -1
  973. package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-a48c4c9356e97886.js +0 -1
  974. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-a48c4c9356e97886.js +0 -1
  975. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-a48c4c9356e97886.js +0 -1
  976. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-a48c4c9356e97886.js +0 -1
  977. package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-a48c4c9356e97886.js +0 -1
  978. package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-a48c4c9356e97886.js +0 -1
  979. package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-a48c4c9356e97886.js +0 -1
  980. package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-a48c4c9356e97886.js +0 -1
  981. package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-a48c4c9356e97886.js +0 -1
  982. package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-a48c4c9356e97886.js +0 -1
  983. package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-a48c4c9356e97886.js +0 -1
  984. package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-a48c4c9356e97886.js +0 -1
  985. package/app/.next-cli-build/static/chunks/app/api/cluster/config/route-a48c4c9356e97886.js +0 -1
  986. package/app/.next-cli-build/static/chunks/app/api/cluster/heartbeat/route-a48c4c9356e97886.js +0 -1
  987. package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/command/route-a48c4c9356e97886.js +0 -1
  988. package/app/.next-cli-build/static/chunks/app/api/cluster/peers/[id]/route-a48c4c9356e97886.js +0 -1
  989. package/app/.next-cli-build/static/chunks/app/api/cluster/peers/route-a48c4c9356e97886.js +0 -1
  990. package/app/.next-cli-build/static/chunks/app/api/cluster/snapshot/route-a48c4c9356e97886.js +0 -1
  991. package/app/.next-cli-build/static/chunks/app/api/cluster/sync/route-a48c4c9356e97886.js +0 -1
  992. package/app/.next-cli-build/static/chunks/app/api/cluster/test/route-a48c4c9356e97886.js +0 -1
  993. package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-a48c4c9356e97886.js +0 -1
  994. package/app/.next-cli-build/static/chunks/app/api/combos/route-a48c4c9356e97886.js +0 -1
  995. package/app/.next-cli-build/static/chunks/app/api/dashboard/ai-power-index/route-a48c4c9356e97886.js +0 -1
  996. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/ai-models/route-a48c4c9356e97886.js +0 -1
  997. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/analyze/route-a48c4c9356e97886.js +0 -1
  998. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-a48c4c9356e97886.js +0 -1
  999. package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-a48c4c9356e97886.js +0 -1
  1000. package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-a48c4c9356e97886.js +0 -1
  1001. package/app/.next-cli-build/static/chunks/app/api/dashboard/local-ai-report/route-a48c4c9356e97886.js +0 -1
  1002. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-a48c4c9356e97886.js +0 -1
  1003. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-a48c4c9356e97886.js +0 -1
  1004. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-a48c4c9356e97886.js +0 -1
  1005. package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/config/route-a48c4c9356e97886.js +0 -1
  1006. package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/live/route-a48c4c9356e97886.js +0 -1
  1007. package/app/.next-cli-build/static/chunks/app/api/dashboard/routing-topology/route-a48c4c9356e97886.js +0 -1
  1008. package/app/.next-cli-build/static/chunks/app/api/dashboard/token-saver/route-a48c4c9356e97886.js +0 -1
  1009. package/app/.next-cli-build/static/chunks/app/api/health/route-a48c4c9356e97886.js +0 -1
  1010. package/app/.next-cli-build/static/chunks/app/api/init/route-a48c4c9356e97886.js +0 -1
  1011. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/caveman-test/route-a48c4c9356e97886.js +0 -1
  1012. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-a48c4c9356e97886.js +0 -1
  1013. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-a48c4c9356e97886.js +0 -1
  1014. package/app/.next-cli-build/static/chunks/app/api/keys/route-a48c4c9356e97886.js +0 -1
  1015. package/app/.next-cli-build/static/chunks/app/api/locale/route-a48c4c9356e97886.js +0 -1
  1016. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-a48c4c9356e97886.js +0 -1
  1017. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-a48c4c9356e97886.js +0 -1
  1018. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-a48c4c9356e97886.js +0 -1
  1019. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-a48c4c9356e97886.js +0 -1
  1020. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-a48c4c9356e97886.js +0 -1
  1021. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-a48c4c9356e97886.js +0 -1
  1022. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-a48c4c9356e97886.js +0 -1
  1023. package/app/.next-cli-build/static/chunks/app/api/models/alias/route-a48c4c9356e97886.js +0 -1
  1024. package/app/.next-cli-build/static/chunks/app/api/models/availability/route-a48c4c9356e97886.js +0 -1
  1025. package/app/.next-cli-build/static/chunks/app/api/models/custom/route-a48c4c9356e97886.js +0 -1
  1026. package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-a48c4c9356e97886.js +0 -1
  1027. package/app/.next-cli-build/static/chunks/app/api/models/route-a48c4c9356e97886.js +0 -1
  1028. package/app/.next-cli-build/static/chunks/app/api/models/test/route-a48c4c9356e97886.js +0 -1
  1029. package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-a48c4c9356e97886.js +0 -1
  1030. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-a48c4c9356e97886.js +0 -1
  1031. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-a48c4c9356e97886.js +0 -1
  1032. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-a48c4c9356e97886.js +0 -1
  1033. package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-a48c4c9356e97886.js +0 -1
  1034. package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/device-code/route-a48c4c9356e97886.js +0 -1
  1035. package/app/.next-cli-build/static/chunks/app/api/oauth/grok-cli/poll/route-a48c4c9356e97886.js +0 -1
  1036. package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-a48c4c9356e97886.js +0 -1
  1037. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-a48c4c9356e97886.js +0 -1
  1038. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-a48c4c9356e97886.js +0 -1
  1039. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-a48c4c9356e97886.js +0 -1
  1040. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-a48c4c9356e97886.js +0 -1
  1041. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-a48c4c9356e97886.js +0 -1
  1042. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-a48c4c9356e97886.js +0 -1
  1043. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-a48c4c9356e97886.js +0 -1
  1044. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/move/route-a48c4c9356e97886.js +0 -1
  1045. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-a48c4c9356e97886.js +0 -1
  1046. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/usage/route-a48c4c9356e97886.js +0 -1
  1047. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/client/route-a48c4c9356e97886.js +0 -1
  1048. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/monitor/route-a48c4c9356e97886.js +0 -1
  1049. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-a48c4c9356e97886.js +0 -1
  1050. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-a48c4c9356e97886.js +0 -1
  1051. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-a48c4c9356e97886.js +0 -1
  1052. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/shares/route-a48c4c9356e97886.js +0 -1
  1053. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/visibility/route-a48c4c9356e97886.js +0 -1
  1054. package/app/.next-cli-build/static/chunks/app/api/pricing/catalog/route-a48c4c9356e97886.js +0 -1
  1055. package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-a48c4c9356e97886.js +0 -1
  1056. package/app/.next-cli-build/static/chunks/app/api/pricing/route-a48c4c9356e97886.js +0 -1
  1057. package/app/.next-cli-build/static/chunks/app/api/provider-health/route-a48c4c9356e97886.js +0 -1
  1058. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-a48c4c9356e97886.js +0 -1
  1059. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/openai-compatible/manage/route-a48c4c9356e97886.js +0 -1
  1060. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-a48c4c9356e97886.js +0 -1
  1061. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-a48c4c9356e97886.js +0 -1
  1062. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-a48c4c9356e97886.js +0 -1
  1063. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-a48c4c9356e97886.js +0 -1
  1064. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-a48c4c9356e97886.js +0 -1
  1065. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-a48c4c9356e97886.js +0 -1
  1066. package/app/.next-cli-build/static/chunks/app/api/providers/client/route-a48c4c9356e97886.js +0 -1
  1067. package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-a48c4c9356e97886.js +0 -1
  1068. package/app/.next-cli-build/static/chunks/app/api/providers/route-a48c4c9356e97886.js +0 -1
  1069. package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-a48c4c9356e97886.js +0 -1
  1070. package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-a48c4c9356e97886.js +0 -1
  1071. package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-a48c4c9356e97886.js +0 -1
  1072. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-a48c4c9356e97886.js +0 -1
  1073. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-a48c4c9356e97886.js +0 -1
  1074. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-a48c4c9356e97886.js +0 -1
  1075. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-a48c4c9356e97886.js +0 -1
  1076. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-a48c4c9356e97886.js +0 -1
  1077. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-a48c4c9356e97886.js +0 -1
  1078. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/[id]/route-a48c4c9356e97886.js +0 -1
  1079. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/ai-models/route-a48c4c9356e97886.js +0 -1
  1080. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/analyze/route-a48c4c9356e97886.js +0 -1
  1081. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/history/route-a48c4c9356e97886.js +0 -1
  1082. package/app/.next-cli-build/static/chunks/app/api/resource-monitor/route-a48c4c9356e97886.js +0 -1
  1083. package/app/.next-cli-build/static/chunks/app/api/settings/database/route-a48c4c9356e97886.js +0 -1
  1084. package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-a48c4c9356e97886.js +0 -1
  1085. package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-a48c4c9356e97886.js +0 -1
  1086. package/app/.next-cli-build/static/chunks/app/api/settings/route-a48c4c9356e97886.js +0 -1
  1087. package/app/.next-cli-build/static/chunks/app/api/shutdown/route-a48c4c9356e97886.js +0 -1
  1088. package/app/.next-cli-build/static/chunks/app/api/tags/route-a48c4c9356e97886.js +0 -1
  1089. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-a48c4c9356e97886.js +0 -1
  1090. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-a48c4c9356e97886.js +0 -1
  1091. package/app/.next-cli-build/static/chunks/app/api/translator/load/route-a48c4c9356e97886.js +0 -1
  1092. package/app/.next-cli-build/static/chunks/app/api/translator/save/route-a48c4c9356e97886.js +0 -1
  1093. package/app/.next-cli-build/static/chunks/app/api/translator/send/route-a48c4c9356e97886.js +0 -1
  1094. package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-a48c4c9356e97886.js +0 -1
  1095. package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-a48c4c9356e97886.js +0 -1
  1096. package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-a48c4c9356e97886.js +0 -1
  1097. package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-a48c4c9356e97886.js +0 -1
  1098. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-a48c4c9356e97886.js +0 -1
  1099. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-a48c4c9356e97886.js +0 -1
  1100. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-a48c4c9356e97886.js +0 -1
  1101. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-a48c4c9356e97886.js +0 -1
  1102. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-a48c4c9356e97886.js +0 -1
  1103. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-a48c4c9356e97886.js +0 -1
  1104. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-a48c4c9356e97886.js +0 -1
  1105. package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-a48c4c9356e97886.js +0 -1
  1106. package/app/.next-cli-build/static/chunks/app/api/usage/history/route-a48c4c9356e97886.js +0 -1
  1107. package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-a48c4c9356e97886.js +0 -1
  1108. package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-a48c4c9356e97886.js +0 -1
  1109. package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-a48c4c9356e97886.js +0 -1
  1110. package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-a48c4c9356e97886.js +0 -1
  1111. package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-a48c4c9356e97886.js +0 -1
  1112. package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-a48c4c9356e97886.js +0 -1
  1113. package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-a48c4c9356e97886.js +0 -1
  1114. package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-a48c4c9356e97886.js +0 -1
  1115. package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-a48c4c9356e97886.js +0 -1
  1116. package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-a48c4c9356e97886.js +0 -1
  1117. package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-a48c4c9356e97886.js +0 -1
  1118. package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-a48c4c9356e97886.js +0 -1
  1119. package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-a48c4c9356e97886.js +0 -1
  1120. package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-a48c4c9356e97886.js +0 -1
  1121. package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-a48c4c9356e97886.js +0 -1
  1122. package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-a48c4c9356e97886.js +0 -1
  1123. package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-a48c4c9356e97886.js +0 -1
  1124. package/app/.next-cli-build/static/chunks/app/api/v1/models/route-a48c4c9356e97886.js +0 -1
  1125. package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-a48c4c9356e97886.js +0 -1
  1126. package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-a48c4c9356e97886.js +0 -1
  1127. package/app/.next-cli-build/static/chunks/app/api/v1/route-a48c4c9356e97886.js +0 -1
  1128. package/app/.next-cli-build/static/chunks/app/api/v1/search/route-a48c4c9356e97886.js +0 -1
  1129. package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-a48c4c9356e97886.js +0 -1
  1130. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-a48c4c9356e97886.js +0 -1
  1131. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-a48c4c9356e97886.js +0 -1
  1132. package/app/.next-cli-build/static/chunks/app/api/version/restart/route-a48c4c9356e97886.js +0 -1
  1133. package/app/.next-cli-build/static/chunks/app/api/version/route-a48c4c9356e97886.js +0 -1
  1134. package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-a48c4c9356e97886.js +0 -1
  1135. package/app/.next-cli-build/static/chunks/app/api/version/update/route-a48c4c9356e97886.js +0 -1
  1136. package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-a48c4c9356e97886.js +0 -1
  1137. package/app/.next-cli-build/static/chunks/app/page-a48c4c9356e97886.js +0 -1
  1138. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-a48c4c9356e97886.js +0 -1
  1139. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-a48c4c9356e97886.js +0 -1
  1140. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-a48c4c9356e97886.js +0 -1
  1141. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-a48c4c9356e97886.js +0 -1
  1142. package/app/.next-cli-build/static/kaXkRUJBLBMwUodOM-VRl/_buildManifest.js +0 -1
  1143. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  1144. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  1145. /package/app/.next-cli-build/static/{kaXkRUJBLBMwUodOM-VRl → IIFO5RGYvaU0aOO82Ud1_}/_ssgManifest.js +0 -0
@@ -21,8 +21,8 @@ ${f}Connection: close\r
21
21
  Content-Type: text/plain; charset=utf-8\r
22
22
  Content-Length: ${Buffer.byteLength(e)}\r
23
23
  \r
24
- ${e}`)}catch{try{a.destroy()}catch{}}}function N(a={}){let b={};for(let[c,d]of Object.entries(a||{}))b[c]=d;return b}async function O(a){let b=await a.requestCapture.finish(String(a.requestHeaders["content-type"]||""),String(a.requestHeaders["content-encoding"]||"")),c=String(a.responseHeaders?.["content-type"]||""),d=await a.responseCapture.finish(c,String(a.responseHeaders?.["content-encoding"]||"")),e=J(a.target.host),f=n(a.path),g=p({provider:e,body:d.body,contentType:c,path:f}),h=K(b.body)||g?.model||null;return{id:i.randomUUID(),timestamp:new Date().toISOString(),protocol:a.protocol||"http/1.1",client:{ip:a.clientIp||"",port:a.clientPort||null,userAgent:String(a.requestHeaders["user-agent"]||""),proxyUser:a.authUser||null},provider:e,host:C(a.target.host),port:a.target.port,method:a.method,path:f,model:h,usage:g,status:a.statusCode||null,durationMs:Date.now()-a.startedAt,error:a.error?o(a.error.message||a.error):null,denied:!0===a.denied,request:{headers:l(a.requestHeaders),...b},response:{headers:l(a.responseHeaders||{}),...d}}}a.exports={createAuditProxy:function(a={},b={}){let i={allowedHosts:[],passthroughUnknown:!0,captureBodies:!0,captureLimitBytes:2097152,verifyUpstreamTls:!0,allowedConnectPorts:[443],connectTimeoutMs:1e4,tlsHandshakeTimeoutMs:1e4,responseHeaderTimeoutMs:3e4,idleTimeoutMs:9e5,allowPlainHttp:!1,clientToolFilterEnabled:!1,allowedClientTools:[],proxyAuthEnabled:!1,proxyAuthUsers:[],clientAlpnProtocols:["http/1.1"],...a};if(!0!==i.verifyUpstreamTls)throw Error("Upstream TLS verification is mandatory in Audit Proxy mode");let j=b.certificateProvider;if("function"!=typeof j)throw Error("certificateProvider is required");let k="function"==typeof b.onAudit?b.onAudit:()=>{},l="function"==typeof b.onAuditJob?b.onAuditJob:null,m="function"==typeof b.resolveTarget?b.resolveTarget:(a,b)=>q(a,b,{allowedPorts:i.allowedConnectPorts}),n=b.upstreamCa,o=r(i.allowedClientTools),p=i.proxyAuthEnabled?u(i.proxyAuthUsers):null,w=i.proxyAuthEnabled?v():null,x=new Set,y=new Map,z=new WeakMap,A=new Set;function B(a){return!a||x.has(a)||(x.add(a),a.once?.("close",()=>x.delete(a))),a}function C(a,b){try{"function"==typeof a.destroy?a.destroy(b):"function"==typeof a.close&&a.close()}catch{}}function G(a){let b=()=>O(a);if(l){try{l(b)}catch(a){console.warn("[audit-proxy] audit enqueue failed:",a?.message||a)}return}setImmediate(()=>{Promise.resolve().then(b).then(k).catch(a=>console.warn("[audit-proxy] audit callback failed:",a?.message||a))})}function H({requestHeaders:a,method:b,path:c,target:d,requestCapture:e,responseCapture:f,responseHeaders:g,statusCode:h,startedAt:i,error:j,socket:k,protocol:l,authUser:m=null,denied:n=!1}){return{requestHeaders:N(a),method:b,path:c,target:d,requestCapture:e,responseCapture:f,responseHeaders:N(g),statusCode:h,startedAt:i,error:j,clientIp:L(k),clientPort:k?.remotePort||null,authUser:m,protocol:l,denied:n}}let J="This proxy does not support WebSocket connections. Use the HTTP streaming transport instead - most clients fall back to it automatically.";function K(a,b,c,d,{statusCode:e=403,authUser:f=null}={}){let g=String(a.url||""),h=c||{host:g.includes(":")?g.slice(0,g.lastIndexOf(":")):g||"unknown",port:443},j=new I(i.captureBodies?i.captureLimitBytes:0);j.add(Buffer.from(d)),G(H({requestHeaders:a.headers,method:"CONNECT",path:"",target:h,requestCapture:new I(0),responseCapture:j,responseHeaders:{"content-type":"text/plain; charset=utf-8",connection:"close"},statusCode:e,startedAt:Date.now(),error:d,socket:b,protocol:"http/1.1",authUser:f,denied:!0}))}let P=Symbol("refused");async function Q(a,b){if(!p)return null;let d=L(b),e=(c,d=null)=>(M(b,"407 Proxy Authentication Required",c,['Proxy-Authenticate: Basic realm="BlueRouter Audit Proxy", charset="UTF-8"']),K(a,b,void 0,c,{statusCode:407,authUser:d}),P);if(w.isLocked(d))return e("Too many failed proxy authentication attempts");let f=a.headers["proxy-authorization"],g=await p.authenticate(f);if(g.ok)return w.recordSuccess(d),g.username;let h=null;if(f){let{lockedNow:a}=w.recordFailure(d);a&&console.log(`[audit-proxy] proxy auth lockout for ${d||"unknown"}`);try{h=c(99721).parseBasicProxyAuthorization(f)?.username||null}catch{h=null}}return e(g.reason||"Proxy authentication required",h)}function R(a,b,c){if(!c)return;let d=new I(i.captureBodies?i.captureLimitBytes:0);d.add(Buffer.from(J)),G(H({requestHeaders:a.headers,method:a.method,path:a.url,target:c,requestCapture:new I(0),responseCapture:d,responseHeaders:{"content-type":"text/plain; charset=utf-8",connection:"close"},statusCode:501,startedAt:Date.now(),error:null,socket:b,protocol:"http/1.1",authUser:b?.__auditProxyUser||null,denied:!0}))}async function S(a,b,{expectContinue:c=!1}={}){let d=a.socket.__auditTarget,e=a.socket.__auditProxyUser||null;if(!d){b.writeHead(502,{"content-type":"text/plain"}),b.end("Audit target is missing");return}if(function(a={}){return"string"==typeof a.upgrade&&""!==a.upgrade.trim()}(a.headers)){b.writeHead(501,{"content-type":"text/plain; charset=utf-8",connection:"close"}),b.end(J),R(a,a.socket,d);return}let h=Date.now(),j=new I(i.captureBodies?i.captureLimitBytes:0),k=new I(i.captureBodies?i.captureLimitBytes:0),l=F(a.headers,{stripInternal:!0});l.host=443===d.port?d.host:`${d.host}:${d.port}`;let o=null,p=null,q={},r=null,s=!1,t=!1,u=null,v=(b=null)=>{s||(s=!0,u&&clearTimeout(u),G(H({requestHeaders:a.headers,method:a.method,path:a.url,target:d,requestCapture:j,responseCapture:k,responseHeaders:q,statusCode:r,startedAt:h,error:b,socket:a.socket,protocol:"http/1.1",authUser:e})))};try{let e,h,s=await m(d.host,d.port);(o=f.request({hostname:d.host,port:d.port,method:a.method,path:a.url,headers:l,rejectUnauthorized:!0,servername:g.isIP(d.host)?void 0:d.host,ca:n,ALPNProtocols:["http/1.1"],lookup:s.lookup,autoSelectFamily:!0,agent:(e=`${d.host}:${d.port}`,(h=y.get(e))||(h=new f.Agent({keepAlive:!0,maxSockets:32,maxFreeSockets:8,timeout:i.idleTimeoutMs}),y.set(e,h)),h)})).on("socket",a=>{if(B(a),a.setNoDelay(!0),a.setKeepAlive(!0,3e4),a.setTimeout(i.idleTimeoutMs,()=>a.destroy(Error("Upstream idle timeout"))),a.connecting){let b=setTimeout(()=>a.destroy(Error("Upstream TLS connect timeout")),i.connectTimeoutMs+i.tlsHandshakeTimeoutMs);b.unref?.();let c=()=>clearTimeout(b);a.once("secureConnect",c),a.once("error",c),a.once("close",c)}}),o.on("continue",()=>{c&&!b.headersSent&&b.writeContinue()}),o.on("information",a=>{102===a.statusCode&&"function"==typeof b.writeProcessing&&b.writeProcessing(),103===a.statusCode&&"function"==typeof b.writeEarlyHints&&b.writeEarlyHints(a.headers||{})}),o.on("response",a=>{p=a,u&&clearTimeout(u),r=a.statusCode||502,q=N(a.headers||{});let c=F(a.headers,{stripInternal:!1});b.writeHead(r,c),b.flushHeaders?.(),a.on("data",c=>{k.add(c),b.write(c)||a.pause()}),b.on("drain",()=>a.resume()),a.on("aborted",()=>{let a=Error("Upstream response aborted");b.destroyed||b.destroy(a),v(a)}),a.on("error",a=>{b.destroyed||b.destroy(a),v(a)}),a.on("end",()=>{if(a.trailers&&Object.keys(a.trailers).length)try{b.addTrailers(F(a.trailers,{stripInternal:!1}))}catch{}t=!0,b.end(),v(null)})}),o.on("error",a=>{b.headersSent?b.destroyed||b.destroy(a):(b.writeHead(502,{"content-type":"application/json"}),b.end(JSON.stringify({error:"Verified upstream TLS request failed"})),t=!0),v(a)}),a.on("data",b=>{j.add(b),o.write(b)||a.pause()}),o.on("drain",()=>a.resume()),a.on("end",()=>{if(a.trailers&&Object.keys(a.trailers).length)try{o.addTrailers(F(a.trailers,{stripInternal:!0}))}catch{}o.end(),u=setTimeout(()=>o.destroy(Error("Upstream response header timeout")),i.responseHeaderTimeoutMs),u.unref?.()}),a.on("aborted",()=>o.destroy(Error("Client request aborted"))),a.on("error",a=>o.destroy(a)),b.on("close",()=>{t||(p?.destroy(Error("Client response closed")),o?.destroy(Error("Client response closed")),v(Error("Client response closed")))})}catch(a){b.headersSent||(b.writeHead(502,{"content-type":"application/json"}),b.end(JSON.stringify({error:"Destination validation or connection failed"})),t=!0),v(a)}}let T=d.createServer((a,b)=>{S(a,b)});async function U(a){return a.upstreamPromise||(a.upstreamPromise=(async()=>{let b=a.target,c=await m(b.host,b.port),d=B(h.connect({host:b.host,port:b.port,servername:g.isIP(b.host)?void 0:b.host,rejectUnauthorized:!0,ca:n,ALPNProtocols:["h2"],lookup:c.lookup,autoSelectFamily:!0}));d.setNoDelay(!0),d.setKeepAlive(!0,3e4);let f=setTimeout(()=>d.destroy(Error("Upstream HTTP/2 TLS connect timeout")),i.connectTimeoutMs+i.tlsHandshakeTimeoutMs);f.unref?.(),d.once("secureConnect",()=>{clearTimeout(f),"h2"!==d.alpnProtocol&&d.destroy(Error("Upstream did not negotiate HTTP/2"))}),d.once("error",()=>clearTimeout(f)),d.once("close",()=>clearTimeout(f));let j=`https://${b.host}${443===b.port?"":`:${b.port}`}`,k=e.connect(j,{createConnection:()=>d,settings:{enablePush:!1}});return A.add(k),k.setTimeout(i.idleTimeoutMs,()=>k.destroy(Error("Upstream HTTP/2 idle timeout"))),k.once("close",()=>A.delete(k)),await new Promise((a,b)=>{let c=setTimeout(()=>b(Error("Upstream HTTP/2 session timeout")),i.connectTimeoutMs+i.tlsHandshakeTimeoutMs);c.unref?.();let d=(a,b)=>{clearTimeout(c),k.removeListener("connect",e),k.removeListener("error",f),a(b)},e=()=>d(a,k),f=a=>d(b,a);k.once("connect",e),k.once("error",f)}),k})().catch(b=>{throw a.upstreamPromise=null,b})),a.upstreamPromise}async function V(a,b){let c=z.get(a.session),d=c?.target;if(!c||!d){a.respond({":status":502,"content-type":"text/plain"}),a.end("Audit target is missing");return}a.pause();let f=Date.now(),g=new I(i.captureBodies?i.captureLimitBytes:0),h=new I(i.captureBodies?i.captureLimitBytes:0),j={},k=null,l=!1,m=!1,n=null,o=null,p=null,q=(e=null)=>{l||(l=!0,G(H({requestHeaders:b,method:b[":method"]||"GET",path:b[":path"]||"/",target:d,requestCapture:g,responseCapture:h,responseHeaders:j,statusCode:k,startedAt:f,error:e,socket:a.session.socket,protocol:"h2",authUser:c.authUser||null})))};try{(n=(await U(c)).request(function(a,b){let c=F(a,{stripInternal:!0}),d={":method":a[":method"]||"GET",":path":a[":path"]||"/",":scheme":"https",":authority":443===b.port?b.host:`${b.host}:${b.port}`};for(let[a,b]of Object.entries(c))a.startsWith(":")||(d[a.toLowerCase()]=b);return d}(b,d),{endStream:!1,waitForTrailers:!0})).setTimeout(i.idleTimeoutMs,()=>n.close(e.constants.NGHTTP2_CANCEL)),a.setTimeout(i.idleTimeoutMs,()=>a.close(e.constants.NGHTTP2_CANCEL)),n.on("response",b=>{j=N(b),k=Number(b[":status"]||502),a.respond(function(a){let b=F(a,{stripInternal:!1}),c={":status":Number(a[":status"]||502)};for(let[a,d]of Object.entries(b))a.startsWith(":")||(c[a.toLowerCase()]=d);return c}(b),{waitForTrailers:!0})}),n.on("trailers",a=>{p=F(a,{stripInternal:!1})}),a.on("wantTrailers",()=>{try{a.sendTrailers(p||{})}catch{}}),a.on("trailers",a=>{o=F(a,{stripInternal:!0})}),n.on("wantTrailers",()=>{try{n.sendTrailers(o||{})}catch{}}),a.on("data",b=>{g.add(b),n.write(b)||a.pause()}),n.on("drain",()=>a.resume()),a.on("end",()=>n.end()),n.on("data",b=>{h.add(b),a.write(b)||n.pause()}),a.on("drain",()=>n.resume()),n.on("end",()=>{m=!0,a.end(),q(null)}),n.on("aborted",()=>{let b=Error("Upstream HTTP/2 stream aborted");a.close(e.constants.NGHTTP2_INTERNAL_ERROR),q(b)}),n.on("error",b=>{a.closed||a.close(e.constants.NGHTTP2_INTERNAL_ERROR),q(b)}),a.on("aborted",()=>{n.close(e.constants.NGHTTP2_CANCEL),q(Error("Client HTTP/2 stream aborted"))}),a.on("error",a=>{n.close(e.constants.NGHTTP2_CANCEL),q(a)}),a.on("close",()=>{m||!n||n.closed||(n.close(e.constants.NGHTTP2_CANCEL),q(Error("Client HTTP/2 stream closed")))}),a.resume()}catch(b){a.headersSent||a.closed||a.respond({":status":502,"content-type":"application/json"}),a.closed||a.end(JSON.stringify({error:"Verified upstream HTTP/2 request failed"})),q(b)}}T.on("checkContinue",(a,b)=>{S(a,b,{expectContinue:!0})}),T.on("upgrade",(a,b)=>{M(b,"501 Not Implemented",J),R(a,b,b.__auditTarget)}),T.on("clientError",(a,b)=>C(b)),T.headersTimeout=i.responseHeaderTimeoutMs,T.requestTimeout=0,T.keepAliveTimeout=i.idleTimeoutMs;let W=e.createServer({settings:{enablePush:!1}});W.on("session",a=>{let b={target:a.socket.__auditTarget,authUser:a.socket.__auditProxyUser||null,upstreamPromise:null};z.set(a,b),a.setTimeout(i.idleTimeoutMs,()=>a.destroy(Error("Client HTTP/2 idle timeout"))),a.once("close",()=>{Promise.resolve(b.upstreamPromise).then(a=>a?.close()).catch(()=>{})})}),W.on("stream",(a,b)=>{V(a,b)}),W.on("sessionError",a=>{console.warn("[audit-proxy] HTTP/2 client session error:",a?.message||a)});let X=d.createServer((a,b)=>{b.writeHead(403,{"content-type":"text/plain; charset=utf-8",connection:"close"}),b.end("Audit Proxy accepts HTTPS CONNECT traffic only")});return X.on("connect",(a,b,c)=>{(async()=>{let d,e;try{d=D(a.url,443)}catch(e){let c=e.message||"Invalid CONNECT authority";M(b,"400 Bad Request",c),K(a,b,d,c,{statusCode:400});return}let f=await Q(a,b);if(f===P)return;try{await m(d.host,d.port)}catch(e){let c=e.message||"Destination is not allowed";M(b,"403 Forbidden",c),K(a,b,d,c,{authUser:f});return}if(i.clientToolFilterEnabled&&s(a.headers["user-agent"],o)){let c=`Client tool is not allowed to use this proxy (${t(a.headers["user-agent"])})`;M(b,"403 Forbidden",c),K(a,b,d,c);return}if(!E(d.host,i.allowedHosts)){if(!i.passthroughUnknown){let c="Host is not in the audit allowlist";M(b,"403 Forbidden",c),K(a,b,d,c);return}let e=!1;try{let a=await m(d.host,d.port),f=B(g.connect({host:d.host,port:d.port,lookup:a.lookup,autoSelectFamily:!0})),h=setTimeout(()=>f.destroy(Error("TCP passthrough connect timeout")),i.connectTimeoutMs);h.unref?.(),f.setNoDelay(!0),f.setKeepAlive(!0,3e4),f.setTimeout(i.idleTimeoutMs,()=>f.destroy(Error("TCP passthrough idle timeout"))),f.once("connect",()=>{clearTimeout(h),e=!0,b.write("HTTP/1.1 200 Connection Established\r\nProxy-Agent: BlueRouter-Audit\r\n\r\n"),c?.length&&f.write(c),f.pipe(b),b.pipe(f)}),f.once("error",()=>{clearTimeout(h),e?C(b):M(b,"502 Bad Gateway","TCP passthrough failed")}),b.once("error",()=>C(f)),b.once("close",()=>C(f))}catch(a){M(b,"502 Bad Gateway",a.message||"TCP passthrough failed")}return}try{if(e=j(d.host),!e?.key||!e?.cert)throw Error("Certificate provider returned no certificate")}catch(a){M(b,"500 Internal Server Error",`Cannot issue audit certificate: ${a.message}`);return}b.write("HTTP/1.1 200 Connection Established\r\nProxy-Agent: BlueRouter-Audit\r\n\r\n"),c?.length&&b.unshift(c);let k=B(new h.TLSSocket(b,{isServer:!0,key:e.key,cert:e.cert,ALPNProtocols:i.clientAlpnProtocols}));k.__auditTarget=d,k.__auditProxyUser=f,k.setNoDelay(!0),k.setKeepAlive(!0,3e4),k.setTimeout(i.idleTimeoutMs,()=>k.destroy(Error("Client TLS idle timeout")));let l=setTimeout(()=>k.destroy(Error("Client TLS handshake timeout")),i.tlsHandshakeTimeoutMs);l.unref?.();let n=!1,p=()=>{n||(n=!0,clearTimeout(l),"h2"===k.alpnProtocol?W.emit("connection",k):T.emit("connection",k))};k.once("secure",p),k.once("secureConnect",p),k.once("error",()=>{clearTimeout(l),C(k)}),k.once("close",()=>clearTimeout(l))})().catch(a=>M(b,"500 Internal Server Error",a.message||"Audit CONNECT failed"))}),X.prependListener("connection",a=>{B(a),a.setNoDelay(!0),a.setKeepAlive(!0,3e4)}),X.on("upgrade",(a,b)=>M(b,"501 Not Implemented",J)),X.on("clientError",(a,b)=>C(b)),X.headersTimeout=i.responseHeaderTimeoutMs,X.requestTimeout=0,X.keepAliveTimeout=i.idleTimeoutMs,X.forceCloseAll=()=>{for(let a of A)try{a.destroy()}catch{}for(let a of y.values())try{a.destroy()}catch{}for(let a of[...x])C(a)},X.getActiveConnectionCount=()=>x.size,X.auditConfig=i,X.auditCapabilities={http1:!0,http2:i.clientAlpnProtocols.includes("h2"),proxyAuth:!0===i.proxyAuthEnabled,plainHttp:!1,publicConnectPorts:[...i.allowedConnectPorts]},X},hostMatches:E,parseAuthority:D,stripHopByHop:F,CaptureBuffer:I,detectProvider:J,extractModel:K,decodeCapturedBuffer:G}},33889:(a,b,c)=>{var d=c(45654),e=c(20096),f=a.exports=d.util=d.util||{};function g(a){if(8!==a&&16!==a&&24!==a&&32!==a)throw Error("Only 8, 16, 24, or 32 bits supported: "+a)}function h(a){if(this.data="",this.read=0,"string"==typeof a)this.data=a;else if(f.isArrayBuffer(a)||f.isArrayBufferView(a))if("u">typeof Buffer&&a instanceof Buffer)this.data=a.toString("binary");else{var b=new Uint8Array(a);try{this.data=String.fromCharCode.apply(null,b)}catch(a){for(var c=0;c<b.length;++c)this.putByte(b[c])}}else(a instanceof h||"object"==typeof a&&"string"==typeof a.data&&"number"==typeof a.read)&&(this.data=a.data,this.read=a.read);this._constructedStringLength=0}!function(){if("u">typeof process&&process.nextTick&&1){f.nextTick=process.nextTick,"function"==typeof setImmediate?f.setImmediate=setImmediate:f.setImmediate=f.nextTick;return}if("function"==typeof setImmediate){f.setImmediate=function(){return setImmediate.apply(void 0,arguments)},f.nextTick=function(a){return setImmediate(a)};return}if(f.setImmediate=function(a){setTimeout(a,0)},"u">typeof window&&"function"==typeof window.postMessage){var a="forge.setImmediate",b=[];f.setImmediate=function(c){b.push(c),1===b.length&&window.postMessage(a,"*")},window.addEventListener("message",function(c){if(c.source===window&&c.data===a){c.stopPropagation();var d=b.slice();b.length=0,d.forEach(function(a){a()})}},!0)}if("u">typeof MutationObserver){var c=Date.now(),d=!0,e=document.createElement("div"),b=[];new MutationObserver(function(){var a=b.slice();b.length=0,a.forEach(function(a){a()})}).observe(e,{attributes:!0});var g=f.setImmediate;f.setImmediate=function(a){Date.now()-c>15?(c=Date.now(),g(a)):(b.push(a),1===b.length&&e.setAttribute("a",d=!d))}}f.nextTick=f.setImmediate}(),f.isNodejs="u">typeof process&&process.versions&&process.versions.node,f.globalScope=f.isNodejs?global:"u"<typeof self?window:self,f.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},f.isArrayBuffer=function(a){return"u">typeof ArrayBuffer&&a instanceof ArrayBuffer},f.isArrayBufferView=function(a){return a&&f.isArrayBuffer(a.buffer)&&void 0!==a.byteLength},f.ByteBuffer=h,f.ByteStringBuffer=h,f.ByteStringBuffer.prototype._optimizeConstructedString=function(a){this._constructedStringLength+=a,this._constructedStringLength>4096&&(this.data.substr(0,1),this._constructedStringLength=0)},f.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read},f.ByteStringBuffer.prototype.isEmpty=function(){return 0>=this.length()},f.ByteStringBuffer.prototype.putByte=function(a){return this.putBytes(String.fromCharCode(a))},f.ByteStringBuffer.prototype.fillWithByte=function(a,b){a=String.fromCharCode(a);for(var c=this.data;b>0;)1&b&&(c+=a),(b>>>=1)>0&&(a+=a);return this.data=c,this._optimizeConstructedString(b),this},f.ByteStringBuffer.prototype.putBytes=function(a){return this.data+=a,this._optimizeConstructedString(a.length),this},f.ByteStringBuffer.prototype.putString=function(a){return this.putBytes(f.encodeUtf8(a))},f.ByteStringBuffer.prototype.putInt16=function(a){return this.putBytes(String.fromCharCode(a>>8&255)+String.fromCharCode(255&a))},f.ByteStringBuffer.prototype.putInt24=function(a){return this.putBytes(String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a))},f.ByteStringBuffer.prototype.putInt32=function(a){return this.putBytes(String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a))},f.ByteStringBuffer.prototype.putInt16Le=function(a){return this.putBytes(String.fromCharCode(255&a)+String.fromCharCode(a>>8&255))},f.ByteStringBuffer.prototype.putInt24Le=function(a){return this.putBytes(String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255))},f.ByteStringBuffer.prototype.putInt32Le=function(a){return this.putBytes(String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>24&255))},f.ByteStringBuffer.prototype.putInt=function(a,b){g(b);var c="";do b-=8,c+=String.fromCharCode(a>>b&255);while(b>0);return this.putBytes(c)},f.ByteStringBuffer.prototype.putSignedInt=function(a,b){return a<0&&(a+=2<<b-1),this.putInt(a,b)},f.ByteStringBuffer.prototype.putBuffer=function(a){return this.putBytes(a.getBytes())},f.ByteStringBuffer.prototype.getByte=function(){return this.data.charCodeAt(this.read++)},f.ByteStringBuffer.prototype.getInt16=function(){var a=this.data.charCodeAt(this.read)<<8^this.data.charCodeAt(this.read+1);return this.read+=2,a},f.ByteStringBuffer.prototype.getInt24=function(){var a=this.data.charCodeAt(this.read)<<16^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2);return this.read+=3,a},f.ByteStringBuffer.prototype.getInt32=function(){var a=this.data.charCodeAt(this.read)<<24^this.data.charCodeAt(this.read+1)<<16^this.data.charCodeAt(this.read+2)<<8^this.data.charCodeAt(this.read+3);return this.read+=4,a},f.ByteStringBuffer.prototype.getInt16Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8;return this.read+=2,a},f.ByteStringBuffer.prototype.getInt24Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16;return this.read+=3,a},f.ByteStringBuffer.prototype.getInt32Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16^this.data.charCodeAt(this.read+3)<<24;return this.read+=4,a},f.ByteStringBuffer.prototype.getInt=function(a){g(a);var b=0;do b=(b<<8)+this.data.charCodeAt(this.read++),a-=8;while(a>0);return b},f.ByteStringBuffer.prototype.getSignedInt=function(a){var b=this.getInt(a),c=2<<a-2;return b>=c&&(b-=c<<1),b},f.ByteStringBuffer.prototype.getBytes=function(a){var b;return a?(a=Math.min(this.length(),a),b=this.data.slice(this.read,this.read+a),this.read+=a):0===a?b="":(b=0===this.read?this.data:this.data.slice(this.read),this.clear()),b},f.ByteStringBuffer.prototype.bytes=function(a){return void 0===a?this.data.slice(this.read):this.data.slice(this.read,this.read+a)},f.ByteStringBuffer.prototype.at=function(a){return this.data.charCodeAt(this.read+a)},f.ByteStringBuffer.prototype.setAt=function(a,b){return this.data=this.data.substr(0,this.read+a)+String.fromCharCode(b)+this.data.substr(this.read+a+1),this},f.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},f.ByteStringBuffer.prototype.copy=function(){var a=f.createBuffer(this.data);return a.read=this.read,a},f.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},f.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this},f.ByteStringBuffer.prototype.truncate=function(a){var b=Math.max(0,this.length()-a);return this.data=this.data.substr(this.read,b),this.read=0,this},f.ByteStringBuffer.prototype.toHex=function(){for(var a="",b=this.read;b<this.data.length;++b){var c=this.data.charCodeAt(b);c<16&&(a+="0"),a+=c.toString(16)}return a},f.ByteStringBuffer.prototype.toString=function(){return f.decodeUtf8(this.bytes())},f.DataBuffer=function(a,b){b=b||{},this.read=b.readOffset||0,this.growSize=b.growSize||1024;var c=f.isArrayBuffer(a),d=f.isArrayBufferView(a);if(c||d){c?this.data=new DataView(a):this.data=new DataView(a.buffer,a.byteOffset,a.byteLength),this.write="writeOffset"in b?b.writeOffset:this.data.byteLength;return}this.data=new DataView(new ArrayBuffer(0)),this.write=0,null!=a&&this.putBytes(a),"writeOffset"in b&&(this.write=b.writeOffset)},f.DataBuffer.prototype.length=function(){return this.write-this.read},f.DataBuffer.prototype.isEmpty=function(){return 0>=this.length()},f.DataBuffer.prototype.accommodate=function(a,b){if(this.length()>=a)return this;b=Math.max(b||this.growSize,a);var c=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),d=new Uint8Array(this.length()+b);return d.set(c),this.data=new DataView(d.buffer),this},f.DataBuffer.prototype.putByte=function(a){return this.accommodate(1),this.data.setUint8(this.write++,a),this},f.DataBuffer.prototype.fillWithByte=function(a,b){this.accommodate(b);for(var c=0;c<b;++c)this.data.setUint8(a);return this},f.DataBuffer.prototype.putBytes=function(a,b){if(f.isArrayBufferView(a)){var c,d=new Uint8Array(a.buffer,a.byteOffset,a.byteLength),e=d.byteLength-d.byteOffset;this.accommodate(e);var g=new Uint8Array(this.data.buffer,this.write);return g.set(d),this.write+=e,this}if(f.isArrayBuffer(a)){var d=new Uint8Array(a);this.accommodate(d.byteLength);var g=new Uint8Array(this.data.buffer);return g.set(d,this.write),this.write+=d.byteLength,this}if(a instanceof f.DataBuffer||"object"==typeof a&&"number"==typeof a.read&&"number"==typeof a.write&&f.isArrayBufferView(a.data)){var d=new Uint8Array(a.data.byteLength,a.read,a.length());this.accommodate(d.byteLength);var g=new Uint8Array(a.data.byteLength,this.write);return g.set(d),this.write+=d.byteLength,this}if(a instanceof f.ByteStringBuffer&&(a=a.data,b="binary"),b=b||"binary","string"==typeof a){if("hex"===b)return this.accommodate(Math.ceil(a.length/2)),c=new Uint8Array(this.data.buffer,this.write),this.write+=f.binary.hex.decode(a,c,this.write),this;if("base64"===b)return this.accommodate(3*Math.ceil(a.length/4)),c=new Uint8Array(this.data.buffer,this.write),this.write+=f.binary.base64.decode(a,c,this.write),this;if("utf8"===b&&(a=f.encodeUtf8(a),b="binary"),"binary"===b||"raw"===b)return this.accommodate(a.length),c=new Uint8Array(this.data.buffer,this.write),this.write+=f.binary.raw.decode(c),this;if("utf16"===b)return this.accommodate(2*a.length),c=new Uint16Array(this.data.buffer,this.write),this.write+=f.text.utf16.encode(c),this;throw Error("Invalid encoding: "+b)}throw Error("Invalid parameter: "+a)},f.DataBuffer.prototype.putBuffer=function(a){return this.putBytes(a),a.clear(),this},f.DataBuffer.prototype.putString=function(a){return this.putBytes(a,"utf16")},f.DataBuffer.prototype.putInt16=function(a){return this.accommodate(2),this.data.setInt16(this.write,a),this.write+=2,this},f.DataBuffer.prototype.putInt24=function(a){return this.accommodate(3),this.data.setInt16(this.write,a>>8&65535),this.data.setInt8(this.write,a>>16&255),this.write+=3,this},f.DataBuffer.prototype.putInt32=function(a){return this.accommodate(4),this.data.setInt32(this.write,a),this.write+=4,this},f.DataBuffer.prototype.putInt16Le=function(a){return this.accommodate(2),this.data.setInt16(this.write,a,!0),this.write+=2,this},f.DataBuffer.prototype.putInt24Le=function(a){return this.accommodate(3),this.data.setInt8(this.write,a>>16&255),this.data.setInt16(this.write,a>>8&65535,!0),this.write+=3,this},f.DataBuffer.prototype.putInt32Le=function(a){return this.accommodate(4),this.data.setInt32(this.write,a,!0),this.write+=4,this},f.DataBuffer.prototype.putInt=function(a,b){g(b),this.accommodate(b/8);do b-=8,this.data.setInt8(this.write++,a>>b&255);while(b>0);return this},f.DataBuffer.prototype.putSignedInt=function(a,b){return g(b),this.accommodate(b/8),a<0&&(a+=2<<b-1),this.putInt(a,b)},f.DataBuffer.prototype.getByte=function(){return this.data.getInt8(this.read++)},f.DataBuffer.prototype.getInt16=function(){var a=this.data.getInt16(this.read);return this.read+=2,a},f.DataBuffer.prototype.getInt24=function(){var a=this.data.getInt16(this.read)<<8^this.data.getInt8(this.read+2);return this.read+=3,a},f.DataBuffer.prototype.getInt32=function(){var a=this.data.getInt32(this.read);return this.read+=4,a},f.DataBuffer.prototype.getInt16Le=function(){var a=this.data.getInt16(this.read,!0);return this.read+=2,a},f.DataBuffer.prototype.getInt24Le=function(){var a=this.data.getInt8(this.read)^this.data.getInt16(this.read+1,!0)<<8;return this.read+=3,a},f.DataBuffer.prototype.getInt32Le=function(){var a=this.data.getInt32(this.read,!0);return this.read+=4,a},f.DataBuffer.prototype.getInt=function(a){g(a);var b=0;do b=(b<<8)+this.data.getInt8(this.read++),a-=8;while(a>0);return b},f.DataBuffer.prototype.getSignedInt=function(a){var b=this.getInt(a),c=2<<a-2;return b>=c&&(b-=c<<1),b},f.DataBuffer.prototype.getBytes=function(a){var b;return a?(a=Math.min(this.length(),a),b=this.data.slice(this.read,this.read+a),this.read+=a):0===a?b="":(b=0===this.read?this.data:this.data.slice(this.read),this.clear()),b},f.DataBuffer.prototype.bytes=function(a){return void 0===a?this.data.slice(this.read):this.data.slice(this.read,this.read+a)},f.DataBuffer.prototype.at=function(a){return this.data.getUint8(this.read+a)},f.DataBuffer.prototype.setAt=function(a,b){return this.data.setUint8(a,b),this},f.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)},f.DataBuffer.prototype.copy=function(){return new f.DataBuffer(this)},f.DataBuffer.prototype.compact=function(){if(this.read>0){var a=new Uint8Array(this.data.buffer,this.read),b=new Uint8Array(a.byteLength);b.set(a),this.data=new DataView(b),this.write-=this.read,this.read=0}return this},f.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this},f.DataBuffer.prototype.truncate=function(a){return this.write=Math.max(0,this.length()-a),this.read=Math.min(this.read,this.write),this},f.DataBuffer.prototype.toHex=function(){for(var a="",b=this.read;b<this.data.byteLength;++b){var c=this.data.getUint8(b);c<16&&(a+="0"),a+=c.toString(16)}return a},f.DataBuffer.prototype.toString=function(a){var b=new Uint8Array(this.data,this.read,this.length());if("binary"===(a=a||"utf8")||"raw"===a)return f.binary.raw.encode(b);if("hex"===a)return f.binary.hex.encode(b);if("base64"===a)return f.binary.base64.encode(b);if("utf8"===a)return f.text.utf8.decode(b);if("utf16"===a)return f.text.utf16.decode(b);throw Error("Invalid encoding: "+a)},f.createBuffer=function(a,b){return b=b||"raw",void 0!==a&&"utf8"===b&&(a=f.encodeUtf8(a)),new f.ByteBuffer(a)},f.fillString=function(a,b){for(var c="";b>0;)1&b&&(c+=a),(b>>>=1)>0&&(a+=a);return c},f.xorBytes=function(a,b,c){for(var d="",e="",f="",g=0,h=0;c>0;--c,++g)e=a.charCodeAt(g)^b.charCodeAt(g),h>=10&&(d+=f,f="",h=0),f+=String.fromCharCode(e),++h;return d+f},f.hexToBytes=function(a){var b="",c=0;for(!0&a.length&&(c=1,b+=String.fromCharCode(parseInt(a[0],16)));c<a.length;c+=2)b+=String.fromCharCode(parseInt(a.substr(c,2),16));return b},f.bytesToHex=function(a){return f.createBuffer(a).toHex()},f.int32ToBytes=function(a){return String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a)};var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",j=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],k="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";f.encode64=function(a,b){for(var c,d,e,f="",g="",h=0;h<a.length;)c=a.charCodeAt(h++),d=a.charCodeAt(h++),e=a.charCodeAt(h++),f+=i.charAt(c>>2),f+=i.charAt((3&c)<<4|d>>4),isNaN(d)?f+="==":(f+=i.charAt((15&d)<<2|e>>6),f+=isNaN(e)?"=":i.charAt(63&e)),b&&f.length>b&&(g+=f.substr(0,b)+"\r\n",f=f.substr(b));return g+f},f.decode64=function(a){a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var b,c,d,e,f="",g=0;g<a.length;)b=j[a.charCodeAt(g++)-43],c=j[a.charCodeAt(g++)-43],d=j[a.charCodeAt(g++)-43],e=j[a.charCodeAt(g++)-43],f+=String.fromCharCode(b<<2|c>>4),64!==d&&(f+=String.fromCharCode((15&c)<<4|d>>2),64!==e&&(f+=String.fromCharCode((3&d)<<6|e)));return f},f.encodeUtf8=function(a){return unescape(encodeURIComponent(a))},f.decodeUtf8=function(a){return decodeURIComponent(escape(a))},f.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:e.encode,decode:e.decode}},f.binary.raw.encode=function(a){return String.fromCharCode.apply(null,a)},f.binary.raw.decode=function(a,b,c){var d=b;d||(d=new Uint8Array(a.length));for(var e=c=c||0,f=0;f<a.length;++f)d[e++]=a.charCodeAt(f);return b?e-c:d},f.binary.hex.encode=f.bytesToHex,f.binary.hex.decode=function(a,b,c){var d=b;d||(d=new Uint8Array(Math.ceil(a.length/2)));var e=0,f=c=c||0;for(1&a.length&&(e=1,d[f++]=parseInt(a[0],16));e<a.length;e+=2)d[f++]=parseInt(a.substr(e,2),16);return b?f-c:d},f.binary.base64.encode=function(a,b){for(var c,d,e,f="",g="",h=0;h<a.byteLength;)c=a[h++],d=a[h++],e=a[h++],f+=i.charAt(c>>2),f+=i.charAt((3&c)<<4|d>>4),isNaN(d)?f+="==":(f+=i.charAt((15&d)<<2|e>>6),f+=isNaN(e)?"=":i.charAt(63&e)),b&&f.length>b&&(g+=f.substr(0,b)+"\r\n",f=f.substr(b));return g+f},f.binary.base64.decode=function(a,b,c){var d,e,f,g,h=b;h||(h=new Uint8Array(3*Math.ceil(a.length/4))),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0,k=c=c||0;i<a.length;)d=j[a.charCodeAt(i++)-43],e=j[a.charCodeAt(i++)-43],f=j[a.charCodeAt(i++)-43],g=j[a.charCodeAt(i++)-43],h[k++]=d<<2|e>>4,64!==f&&(h[k++]=(15&e)<<4|f>>2,64!==g&&(h[k++]=(3&f)<<6|g));return b?k-c:h.subarray(0,k)},f.binary.base58.encode=function(a,b){return f.binary.baseN.encode(a,k,b)},f.binary.base58.decode=function(a,b){return f.binary.baseN.decode(a,k,b)},f.text={utf8:{},utf16:{}},f.text.utf8.encode=function(a,b,c){a=f.encodeUtf8(a);var d=b;d||(d=new Uint8Array(a.length));for(var e=c=c||0,g=0;g<a.length;++g)d[e++]=a.charCodeAt(g);return b?e-c:d},f.text.utf8.decode=function(a){return f.decodeUtf8(String.fromCharCode.apply(null,a))},f.text.utf16.encode=function(a,b,c){var d=b;d||(d=new Uint8Array(2*a.length));for(var e=new Uint16Array(d.buffer),f=c=c||0,g=c,h=0;h<a.length;++h)e[g++]=a.charCodeAt(h),f+=2;return b?f-c:d},f.text.utf16.decode=function(a){return String.fromCharCode.apply(null,new Uint16Array(a.buffer))},f.deflate=function(a,b,c){if(b=f.decode64(a.deflate(f.encode64(b)).rval),c){var d=2;32&b.charCodeAt(1)&&(d=6),b=b.substring(d,b.length-4)}return b},f.inflate=function(a,b,c){var d=a.inflate(f.encode64(b)).rval;return null===d?null:f.decode64(d)};var l=function(a,b,c){if(!a)throw Error("WebStorage not available.");if(null===c?d=a.removeItem(b):(c=f.encode64(JSON.stringify(c)),d=a.setItem(b,c)),void 0!==d&&!0!==d.rval){var d,e=Error(d.error.message);throw e.id=d.error.id,e.name=d.error.name,e}},m=function(a,b){if(!a)throw Error("WebStorage not available.");var c=a.getItem(b);if(a.init)if(null===c.rval){if(c.error){var d=Error(c.error.message);throw d.id=c.error.id,d.name=c.error.name,d}c=null}else c=c.rval;return null!==c&&(c=JSON.parse(f.decode64(c))),c},n=function(a,b,c,d){var e=m(a,b);null===e&&(e={}),e[c]=d,l(a,b,e)},o=function(a,b,c){var d=m(a,b);return null!==d&&(d=c in d?d[c]:null),d},p=function(a,b,c){var d=m(a,b);if(null!==d&&c in d){delete d[c];var e=!0;for(var f in d){e=!1;break}e&&(d=null),l(a,b,d)}},q=function(a,b){l(a,b,null)},r=function(a,b,c){var d,e=null;void 0===c&&(c=["web","flash"]);var f=!1,g=null;for(var h in c){d=c[h];try{if("flash"===d||"both"===d){if(null===b[0])throw Error("Flash local storage not available.");e=a.apply(this,b),f="flash"===d}("web"===d||"both"===d)&&(b[0]=localStorage,e=a.apply(this,b),f=!0)}catch(a){g=a}if(f)break}if(!f)throw g;return e};f.setItem=function(a,b,c,d,e){r(n,arguments,e)},f.getItem=function(a,b,c,d){return r(o,arguments,d)},f.removeItem=function(a,b,c,d){r(p,arguments,d)},f.clearItems=function(a,b,c){r(q,arguments,c)},f.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},f.format=function(a){for(var b,c,d=/%./g,e=0,f=[],g=0;b=d.exec(a);){(c=a.substring(g,d.lastIndex-2)).length>0&&f.push(c),g=d.lastIndex;var h=b[0][1];switch(h){case"s":case"o":e<arguments.length?f.push(arguments[e+++1]):f.push("<?>");break;case"%":f.push("%");break;default:f.push("<%"+h+"?>")}}return f.push(a.substring(g)),f.join("")},f.formatNumber=function(a,b,c,d){var e=a,f=isNaN(b=Math.abs(b))?2:b,g=void 0===d?".":d,h=e<0?"-":"",i=parseInt(e=Math.abs(+e||0).toFixed(f),10)+"",j=i.length>3?i.length%3:0;return h+(j?i.substr(0,j)+g:"")+i.substr(j).replace(/(\d{3})(?=\d)/g,"$1"+g)+(f?(void 0===c?",":c)+Math.abs(e-i).toFixed(f).slice(2):"")},f.formatSize=function(a){return a>=0x40000000?f.formatNumber(a/0x40000000,2,".","")+" GiB":a>=1048576?f.formatNumber(a/1048576,2,".","")+" MiB":a>=1024?f.formatNumber(a/1024,0)+" KiB":f.formatNumber(a,0)+" bytes"},f.bytesFromIP=function(a){return -1!==a.indexOf(".")?f.bytesFromIPv4(a):-1!==a.indexOf(":")?f.bytesFromIPv6(a):null},f.bytesFromIPv4=function(a){if(4!==(a=a.split(".")).length)return null;for(var b=f.createBuffer(),c=0;c<a.length;++c){var d=parseInt(a[c],10);if(isNaN(d))return null;b.putByte(d)}return b.getBytes()},f.bytesFromIPv6=function(a){for(var b=0,c=(8-(a=a.split(":").filter(function(a){return 0===a.length&&++b,!0})).length+b)*2,d=f.createBuffer(),e=0;e<8;++e){if(!a[e]||0===a[e].length){d.fillWithByte(0,c),c=0;continue}var g=f.hexToBytes(a[e]);g.length<2&&d.putByte(0),d.putBytes(g)}return d.getBytes()},f.bytesToIP=function(a){return 4===a.length?f.bytesToIPv4(a):16===a.length?f.bytesToIPv6(a):null},f.bytesToIPv4=function(a){if(4!==a.length)return null;for(var b=[],c=0;c<a.length;++c)b.push(a.charCodeAt(c));return b.join(".")},f.bytesToIPv6=function(a){if(16!==a.length)return null;for(var b=[],c=[],d=0,e=0;e<a.length;e+=2){for(var g=f.bytesToHex(a[e]+a[e+1]);"0"===g[0]&&"0"!==g;)g=g.substr(1);if("0"===g){var h=c[c.length-1],i=b.length;h&&i===h.end+1?(h.end=i,h.end-h.start>c[d].end-c[d].start&&(d=c.length-1)):c.push({start:i,end:i})}b.push(g)}if(c.length>0){var j=c[d];j.end-j.start>0&&(b.splice(j.start,j.end-j.start+1,""),0===j.start&&b.unshift(""),7===j.end&&b.push(""))}return b.join(":")},f.estimateCores=function(a,b){if("function"==typeof a&&(b=a,a={}),a=a||{},"cores"in f&&!a.update)return b(null,f.cores);if("u">typeof navigator&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return f.cores=navigator.hardwareConcurrency,b(null,f.cores);if("u"<typeof Worker)return f.cores=1,b(null,f.cores);if("u"<typeof Blob)return f.cores=2,b(null,f.cores);var c=URL.createObjectURL(new Blob(["(",(function(){self.addEventListener("message",function(a){for(var b=Date.now(),c=b+4;Date.now()<c;);self.postMessage({st:b,et:c})})}).toString(),")()"],{type:"application/javascript"}));!function a(d,e,g){if(0===e)return f.cores=Math.max(1,Math.floor(d.reduce(function(a,b){return a+b},0)/d.length)),URL.revokeObjectURL(c),b(null,f.cores);!function(a,b){for(var d=[],e=[],f=0;f<a;++f){var g=new Worker(c);g.addEventListener("message",function(c){if(e.push(c.data),e.length===a){for(var f=0;f<a;++f)d[f].terminate();b(null,e)}}),d.push(g)}for(var f=0;f<a;++f)d[f].postMessage(f)}(g,function(b,c){d.push(function(a,b){for(var c=[],d=0;d<a;++d)for(var e=b[d],f=c[d]=[],g=0;g<a;++g)if(d!==g){var h=b[g];(e.st>h.st&&e.st<h.et||h.st>e.st&&h.st<e.et)&&f.push(g)}return c.reduce(function(a,b){return Math.max(a,b.length)},0)}(g,c)),a(d,e-1,g)})}([],5,16)}},36105:(a,b,c)=>{var d=c(45654);d.pki=d.pki||{};var e=a.exports=d.pki.oids=d.oids=d.oids||{};function f(a,b){e[a]=b,e[b]=a}f("1.2.840.113549.1.1.1","rsaEncryption"),f("1.2.840.113549.1.1.4","md5WithRSAEncryption"),f("1.2.840.113549.1.1.5","sha1WithRSAEncryption"),f("1.2.840.113549.1.1.7","RSAES-OAEP"),f("1.2.840.113549.1.1.8","mgf1"),f("1.2.840.113549.1.1.9","pSpecified"),f("1.2.840.113549.1.1.10","RSASSA-PSS"),f("1.2.840.113549.1.1.11","sha256WithRSAEncryption"),f("1.2.840.113549.1.1.12","sha384WithRSAEncryption"),f("1.2.840.113549.1.1.13","sha512WithRSAEncryption"),f("1.3.101.112","EdDSA25519"),f("1.2.840.10040.4.3","dsa-with-sha1"),f("1.3.14.3.2.7","desCBC"),f("1.3.14.3.2.26","sha1"),f("1.3.14.3.2.29","sha1WithRSASignature"),f("2.16.840.1.101.3.4.2.1","sha256"),f("2.16.840.1.101.3.4.2.2","sha384"),f("2.16.840.1.101.3.4.2.3","sha512"),f("2.16.840.1.101.3.4.2.4","sha224"),f("2.16.840.1.101.3.4.2.5","sha512-224"),f("2.16.840.1.101.3.4.2.6","sha512-256"),f("1.2.840.113549.2.2","md2"),f("1.2.840.113549.2.5","md5"),f("1.2.840.113549.1.7.1","data"),f("1.2.840.113549.1.7.2","signedData"),f("1.2.840.113549.1.7.3","envelopedData"),f("1.2.840.113549.1.7.4","signedAndEnvelopedData"),f("1.2.840.113549.1.7.5","digestedData"),f("1.2.840.113549.1.7.6","encryptedData"),f("1.2.840.113549.1.9.1","emailAddress"),f("1.2.840.113549.1.9.2","unstructuredName"),f("1.2.840.113549.1.9.3","contentType"),f("1.2.840.113549.1.9.4","messageDigest"),f("1.2.840.113549.1.9.5","signingTime"),f("1.2.840.113549.1.9.6","counterSignature"),f("1.2.840.113549.1.9.7","challengePassword"),f("1.2.840.113549.1.9.8","unstructuredAddress"),f("1.2.840.113549.1.9.14","extensionRequest"),f("1.2.840.113549.1.9.20","friendlyName"),f("1.2.840.113549.1.9.21","localKeyId"),f("1.2.840.113549.1.9.22.1","x509Certificate"),f("1.2.840.113549.1.12.10.1.1","keyBag"),f("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag"),f("1.2.840.113549.1.12.10.1.3","certBag"),f("1.2.840.113549.1.12.10.1.4","crlBag"),f("1.2.840.113549.1.12.10.1.5","secretBag"),f("1.2.840.113549.1.12.10.1.6","safeContentsBag"),f("1.2.840.113549.1.5.13","pkcs5PBES2"),f("1.2.840.113549.1.5.12","pkcs5PBKDF2"),f("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4"),f("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4"),f("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC"),f("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC"),f("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC"),f("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC"),f("1.2.840.113549.2.7","hmacWithSHA1"),f("1.2.840.113549.2.8","hmacWithSHA224"),f("1.2.840.113549.2.9","hmacWithSHA256"),f("1.2.840.113549.2.10","hmacWithSHA384"),f("1.2.840.113549.2.11","hmacWithSHA512"),f("1.2.840.113549.3.7","des-EDE3-CBC"),f("2.16.840.1.101.3.4.1.2","aes128-CBC"),f("2.16.840.1.101.3.4.1.22","aes192-CBC"),f("2.16.840.1.101.3.4.1.42","aes256-CBC"),f("2.5.4.3","commonName"),f("2.5.4.4","surname"),f("2.5.4.5","serialNumber"),f("2.5.4.6","countryName"),f("2.5.4.7","localityName"),f("2.5.4.8","stateOrProvinceName"),f("2.5.4.9","streetAddress"),f("2.5.4.10","organizationName"),f("2.5.4.11","organizationalUnitName"),f("2.5.4.12","title"),f("2.5.4.13","description"),f("2.5.4.15","businessCategory"),f("2.5.4.17","postalCode"),f("2.5.4.42","givenName"),f("2.5.4.65","pseudonym"),f("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName"),f("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName"),f("2.16.840.1.113730.1.1","nsCertType"),f("2.16.840.1.113730.1.13","nsComment"),e["2.5.29.1"]="authorityKeyIdentifier",e["2.5.29.2"]="keyAttributes",e["2.5.29.3"]="certificatePolicies",e["2.5.29.4"]="keyUsageRestriction",e["2.5.29.5"]="policyMapping",e["2.5.29.6"]="subtreesConstraint",e["2.5.29.7"]="subjectAltName",e["2.5.29.8"]="issuerAltName",e["2.5.29.9"]="subjectDirectoryAttributes",e["2.5.29.10"]="basicConstraints",e["2.5.29.11"]="nameConstraints",e["2.5.29.12"]="policyConstraints",e["2.5.29.13"]="basicConstraints",f("2.5.29.14","subjectKeyIdentifier"),f("2.5.29.15","keyUsage"),e["2.5.29.16"]="privateKeyUsagePeriod",f("2.5.29.17","subjectAltName"),f("2.5.29.18","issuerAltName"),f("2.5.29.19","basicConstraints"),e["2.5.29.20"]="cRLNumber",e["2.5.29.21"]="cRLReason",e["2.5.29.22"]="expirationDate",e["2.5.29.23"]="instructionCode",e["2.5.29.24"]="invalidityDate",e["2.5.29.25"]="cRLDistributionPoints",e["2.5.29.26"]="issuingDistributionPoint",e["2.5.29.27"]="deltaCRLIndicator",e["2.5.29.28"]="issuingDistributionPoint",e["2.5.29.29"]="certificateIssuer",e["2.5.29.30"]="nameConstraints",f("2.5.29.31","cRLDistributionPoints"),f("2.5.29.32","certificatePolicies"),e["2.5.29.33"]="policyMappings",e["2.5.29.34"]="policyConstraints",f("2.5.29.35","authorityKeyIdentifier"),e["2.5.29.36"]="policyConstraints",f("2.5.29.37","extKeyUsage"),e["2.5.29.46"]="freshestCRL",e["2.5.29.54"]="inhibitAnyPolicy",f("1.3.6.1.4.1.11129.2.4.2","timestampList"),f("1.3.6.1.5.5.7.1.1","authorityInfoAccess"),f("1.3.6.1.5.5.7.3.1","serverAuth"),f("1.3.6.1.5.5.7.3.2","clientAuth"),f("1.3.6.1.5.5.7.3.3","codeSigning"),f("1.3.6.1.5.5.7.3.4","emailProtection"),f("1.3.6.1.5.5.7.3.8","timeStamping")},36902:(a,b,c)=>{var d=c(45654);c(33889),c(32e3),c(29984),function(){if(d.prime){a.exports=d.prime;return}var b=a.exports=d.prime=d.prime||{},c=d.jsbn.BigInteger,e=[6,4,2,4,2,4,6,2],f=new c(null);f.fromInt(30);var g=function(a,b){return a|b};function h(a,b,c,f){var g,h=i(a,b),j=(g=h.bitLength())<=100?27:g<=150?18:g<=200?15:g<=250?12:g<=300?9:g<=350?8:g<=400?7:g<=500?6:g<=600?5:g<=800?4:g<=1250?3:2;"millerRabinTests"in c&&(j=c.millerRabinTests);var k=10;"maxBlockTime"in c&&(k=c.maxBlockTime),function a(b,c,f,g,h,j,k){var l=+new Date;do{if(b.bitLength()>c&&(b=i(c,f)),b.isProbablePrime(h))return k(null,b);b.dAddOffset(e[g++%8],0)}while(j<0||new Date-l<j);d.util.setImmediate(function(){a(b,c,f,g,h,j,k)})}(h,a,b,0,j,k,f)}function i(a,b){var d=new c(a,b),e=a-1;return d.testBit(e)||d.bitwiseTo(c.ONE.shiftLeft(e),g,d),d.dAddOffset(31-d.mod(f).byteValue(),0),d}b.generateProbablePrime=function(a,b,e){"function"==typeof b&&(e=b,b={});var f,g,j,k,l=(b=b||{}).algorithm||"PRIMEINC";"string"==typeof l&&(l={name:l}),l.options=l.options||{};var m=b.prng||d.random;if("PRIMEINC"===l.name){return f=a,g={nextBytes:function(a){for(var b=m.getBytesSync(a.length),c=0;c<a.length;++c)a[c]=b.charCodeAt(c)}},j=l.options,k=e,"workers"in j?function(a,b,e,f){if("u"<typeof Worker)return h(a,b,e,f);var g=i(a,b),j=e.workers,k=e.workLoad||100,l=30*k/8,m=e.workerScript||"forge/prime.worker.js";if(-1===j)return d.util.estimateCores(function(a,b){a&&(b=2),j=b-1,n()});function n(){j=Math.max(1,j);for(var d=[],e=0;e<j;++e)d[e]=new Worker(m);for(var h=j,e=0;e<j;++e)d[e].addEventListener("message",o);var n=!1;function o(e){if(!n){--h;var j=e.data;if(j.found){for(var m=0;m<d.length;++m)d[m].terminate();return n=!0,f(null,new c(j.prime,16))}g.bitLength()>a&&(g=i(a,b));var o=g.toString(16);e.target.postMessage({hex:o,workLoad:k}),g.dAddOffset(l,0)}}}n()}(f,g,j,k):h(f,g,j,k)}throw Error("Invalid prime generation algorithm: "+l.name)}}()},37436:(a,b,c)=>{"use strict";let d=c(29021),e=c(33873),f=c(21820),g="bluerouter";function h(){return"win32"===process.platform?e.join(process.env.APPDATA||e.join(f.homedir(),"AppData","Roaming"),g):e.join(f.homedir(),`.${g}`)}let i=function(){let a=process.env.DATA_DIR;if(!a)return h();try{return d.mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${g}`),h();throw b}}(),j=e.join(i,"mitm");a.exports={DATA_DIR:i,MITM_DIR:j}},37691:(a,b,c)=>{var d=c(45654);c(1277),c(33889);var e=a.exports=d.sha512=d.sha512||{};d.md.sha512=d.md.algorithms.sha512=e;var f=d.sha384=d.sha512.sha384=d.sha512.sha384||{};f.create=function(){return e.create("SHA-384")},d.md.sha384=d.md.algorithms.sha384=f,d.sha512.sha256=d.sha512.sha256||{create:function(){return e.create("SHA-512/256")}},d.md["sha512/256"]=d.md.algorithms["sha512/256"]=d.sha512.sha256,d.sha512.sha224=d.sha512.sha224||{create:function(){return e.create("SHA-512/224")}},d.md["sha512/224"]=d.md.algorithms["sha512/224"]=d.sha512.sha224,e.create=function(a){if(h||(g=String.fromCharCode(128)+d.util.fillString("\0",128),i=[[0x428a2f98,0xd728ae22],[0x71374491,0x23ef65cd],[0xb5c0fbcf,0xec4d3b2f],[0xe9b5dba5,0x8189dbbc],[0x3956c25b,0xf348b538],[0x59f111f1,0xb605d019],[0x923f82a4,0xaf194f9b],[0xab1c5ed5,0xda6d8118],[0xd807aa98,0xa3030242],[0x12835b01,0x45706fbe],[0x243185be,0x4ee4b28c],[0x550c7dc3,0xd5ffb4e2],[0x72be5d74,0xf27b896f],[0x80deb1fe,0x3b1696b1],[0x9bdc06a7,0x25c71235],[0xc19bf174,0xcf692694],[0xe49b69c1,0x9ef14ad2],[0xefbe4786,0x384f25e3],[0xfc19dc6,0x8b8cd5b5],[0x240ca1cc,0x77ac9c65],[0x2de92c6f,0x592b0275],[0x4a7484aa,0x6ea6e483],[0x5cb0a9dc,0xbd41fbd4],[0x76f988da,0x831153b5],[0x983e5152,0xee66dfab],[0xa831c66d,0x2db43210],[0xb00327c8,0x98fb213f],[0xbf597fc7,0xbeef0ee4],[0xc6e00bf3,0x3da88fc2],[0xd5a79147,0x930aa725],[0x6ca6351,0xe003826f],[0x14292967,0xa0e6e70],[0x27b70a85,0x46d22ffc],[0x2e1b2138,0x5c26c926],[0x4d2c6dfc,0x5ac42aed],[0x53380d13,0x9d95b3df],[0x650a7354,0x8baf63de],[0x766a0abb,0x3c77b2a8],[0x81c2c92e,0x47edaee6],[0x92722c85,0x1482353b],[0xa2bfe8a1,0x4cf10364],[0xa81a664b,0xbc423001],[0xc24b8b70,0xd0f89791],[0xc76c51a3,0x654be30],[0xd192e819,0xd6ef5218],[0xd6990624,0x5565a910],[0xf40e3585,0x5771202a],[0x106aa070,0x32bbd1b8],[0x19a4c116,0xb8d2d0c8],[0x1e376c08,0x5141ab53],[0x2748774c,0xdf8eeb99],[0x34b0bcb5,0xe19b48a8],[0x391c0cb3,0xc5c95a63],[0x4ed8aa4a,0xe3418acb],[0x5b9cca4f,0x7763e373],[0x682e6ff3,0xd6b2b8a3],[0x748f82ee,0x5defb2fc],[0x78a5636f,0x43172f60],[0x84c87814,0xa1f0ab72],[0x8cc70208,0x1a6439ec],[0x90befffa,0x23631e28],[0xa4506ceb,0xde82bde9],[0xbef9a3f7,0xb2c67915],[0xc67178f2,0xe372532b],[0xca273ece,0xea26619c],[0xd186b8c7,0x21c0c207],[0xeada7dd6,0xcde0eb1e],[0xf57d4f7f,0xee6ed178],[0x6f067aa,0x72176fba],[0xa637dc5,0xa2c898a6],[0x113f9804,0xbef90dae],[0x1b710b35,0x131c471b],[0x28db77f5,0x23047d84],[0x32caab7b,0x40c72493],[0x3c9ebe0a,0x15c9bebc],[0x431d67c4,0x9c100d4c],[0x4cc5d4be,0xcb3e42b6],[0x597f299c,0xfc657e2a],[0x5fcb6fab,0x3ad6faec],[0x6c44198c,0x4a475817]],(j={})["SHA-512"]=[[0x6a09e667,0xf3bcc908],[0xbb67ae85,0x84caa73b],[0x3c6ef372,0xfe94f82b],[0xa54ff53a,0x5f1d36f1],[0x510e527f,0xade682d1],[0x9b05688c,0x2b3e6c1f],[0x1f83d9ab,0xfb41bd6b],[0x5be0cd19,0x137e2179]],j["SHA-384"]=[[0xcbbb9d5d,0xc1059ed8],[0x629a292a,0x367cd507],[0x9159015a,0x3070dd17],[0x152fecd8,0xf70e5939],[0x67332667,0xffc00b31],[0x8eb44a87,0x68581511],[0xdb0c2e0d,0x64f98fa7],[0x47b5481d,0xbefa4fa4]],j["SHA-512/256"]=[[0x22312194,0xfc2bf72c],[0x9f555fa3,0xc84c64c2],[0x2393b86b,0x6f53b151],[0x96387719,0x5940eabd],[0x96283ee2,0xa88effe3],[0xbe5e1e25,0x53863992],[0x2b0199fc,0x2c85b8aa],[0xeb72ddc,0x81c52ca2]],j["SHA-512/224"]=[[0x8c3d37c8,0x19544da2],[0x73e19966,0x89dcd4d6],[0x1dfab7ae,0x32ff9c82],[0x679dd514,0x582f9fcf],[0xf6d2b69,0x7bd44da8],[0x77e36f73,0x4c48942],[0x3f9d85a8,0x6a1d36c8],[0x1112e6ad,0x91d692a1]],h=!0),void 0===a&&(a="SHA-512"),!(a in j))throw Error("Invalid SHA-512 algorithm: "+a);for(var b=j[a],c=null,e=d.util.createBuffer(),f=Array(80),l=0;l<80;++l)f[l]=[,,];var m=64;switch(a){case"SHA-384":m=48;break;case"SHA-512/256":m=32;break;case"SHA-512/224":m=28}var n={algorithm:a.replace("-","").toLowerCase(),blockLength:128,digestLength:m,messageLength:0,fullMessageLength:null,messageLengthSize:16};return n.start=function(){n.messageLength=0,n.fullMessageLength=n.messageLength128=[];for(var a=n.messageLengthSize/4,f=0;f<a;++f)n.fullMessageLength.push(0);e=d.util.createBuffer(),c=Array(b.length);for(var f=0;f<b.length;++f)c[f]=b[f].slice(0);return n},n.start(),n.update=function(a,b){"utf8"===b&&(a=d.util.encodeUtf8(a));var g=a.length;n.messageLength+=g,g=[g/0x100000000>>>0,g>>>0];for(var h=n.fullMessageLength.length-1;h>=0;--h)n.fullMessageLength[h]+=g[1],g[1]=g[0]+(n.fullMessageLength[h]/0x100000000>>>0),n.fullMessageLength[h]=n.fullMessageLength[h]>>>0,g[0]=g[1]/0x100000000>>>0;return e.putBytes(a),k(c,f,e),(e.read>2048||0===e.length())&&e.compact(),n},n.digest=function(){var b,h,i=d.util.createBuffer();i.putBytes(e.bytes());var j=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize&n.blockLength-1;i.putBytes(g.substr(0,n.blockLength-j));for(var l=8*n.fullMessageLength[0],m=0;m<n.fullMessageLength.length-1;++m)l+=(b=8*n.fullMessageLength[m+1])/0x100000000>>>0,i.putInt32(l>>>0),l=b>>>0;i.putInt32(l);for(var o=Array(c.length),m=0;m<c.length;++m)o[m]=c[m].slice(0);k(o,f,i);var p=d.util.createBuffer();h="SHA-512"===a?o.length:"SHA-384"===a?o.length-2:o.length-4;for(var m=0;m<h;++m)p.putInt32(o[m][0]),(m!==h-1||"SHA-512/224"!==a)&&p.putInt32(o[m][1]);return p},n};var g=null,h=!1,i=null,j=null;function k(a,b,c){for(var d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=c.length();N>=128;){for(G=0;G<16;++G)b[G][0]=c.getInt32()>>>0,b[G][1]=c.getInt32()>>>0;for(;G<80;++G)d=(((H=(J=b[G-2])[0])>>>19|(I=J[1])<<13)^(I>>>29|H<<3)^H>>>6)>>>0,e=((H<<13|I>>>19)^(I<<3|H>>>29)^(H<<26|I>>>6))>>>0,f=(((H=(L=b[G-15])[0])>>>1|(I=L[1])<<31)^(H>>>8|I<<24)^H>>>7)>>>0,g=((H<<31|I>>>1)^(H<<24|I>>>8)^(H<<25|I>>>7))>>>0,K=b[G-7],M=b[G-16],I=e+K[1]+g+M[1],b[G][0]=d+K[0]+f+M[0]+(I/0x100000000>>>0)>>>0,b[G][1]=I>>>0;for(q=a[0][0],r=a[0][1],s=a[1][0],t=a[1][1],u=a[2][0],v=a[2][1],w=a[3][0],x=a[3][1],y=a[4][0],z=a[4][1],A=a[5][0],B=a[5][1],C=a[6][0],D=a[6][1],E=a[7][0],F=a[7][1],G=0;G<80;++G)k=((y>>>14|z<<18)^(y>>>18|z<<14)^(z>>>9|y<<23))>>>0,l=((y<<18|z>>>14)^(y<<14|z>>>18)^(z<<23|y>>>9))>>>0,m=(C^y&(A^C))>>>0,n=(D^z&(B^D))>>>0,h=((q>>>28|r<<4)^(r>>>2|q<<30)^(r>>>7|q<<25))>>>0,j=((q<<4|r>>>28)^(r<<30|q>>>2)^(r<<25|q>>>7))>>>0,o=(q&s|u&(q^s))>>>0,p=(r&t|v&(r^t))>>>0,I=F+l+n+i[G][1]+b[G][1],d=E+k+m+i[G][0]+b[G][0]+(I/0x100000000>>>0)>>>0,e=I>>>0,f=h+o+((I=j+p)/0x100000000>>>0)>>>0,g=I>>>0,E=C,F=D,C=A,D=B,A=y,B=z,y=w+d+((I=x+e)/0x100000000>>>0)>>>0,z=I>>>0,w=u,x=v,u=s,v=t,s=q,t=r,q=d+f+((I=e+g)/0x100000000>>>0)>>>0,r=I>>>0;I=a[0][1]+r,a[0][0]=a[0][0]+q+(I/0x100000000>>>0)>>>0,a[0][1]=I>>>0,I=a[1][1]+t,a[1][0]=a[1][0]+s+(I/0x100000000>>>0)>>>0,a[1][1]=I>>>0,I=a[2][1]+v,a[2][0]=a[2][0]+u+(I/0x100000000>>>0)>>>0,a[2][1]=I>>>0,I=a[3][1]+x,a[3][0]=a[3][0]+w+(I/0x100000000>>>0)>>>0,a[3][1]=I>>>0,I=a[4][1]+z,a[4][0]=a[4][0]+y+(I/0x100000000>>>0)>>>0,a[4][1]=I>>>0,I=a[5][1]+B,a[5][0]=a[5][0]+A+(I/0x100000000>>>0)>>>0,a[5][1]=I>>>0,I=a[6][1]+D,a[6][0]=a[6][0]+C+(I/0x100000000>>>0)>>>0,a[6][1]=I>>>0,I=a[7][1]+F,a[7][0]=a[7][0]+E+(I/0x100000000>>>0)>>>0,a[7][1]=I>>>0,N-=128}}},38627:(a,b,c)=>{var d=c(45654);c(1277),c(33889);var e=a.exports=d.md5=d.md5||{};d.md.md5=d.md.algorithms.md5=e,e.create=function(){j||function(){f=String.fromCharCode(128)+d.util.fillString("\0",64),g=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12,5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2,0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9],h=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],i=Array(64);for(var a=0;a<64;++a)i[a]=Math.floor(0x100000000*Math.abs(Math.sin(a+1)));j=!0}();var a=null,b=d.util.createBuffer(),c=Array(16),e={algorithm:"md5",blockLength:64,digestLength:16,messageLength:0,fullMessageLength:null,messageLengthSize:8};return e.start=function(){e.messageLength=0,e.fullMessageLength=e.messageLength64=[];for(var c=e.messageLengthSize/4,f=0;f<c;++f)e.fullMessageLength.push(0);return b=d.util.createBuffer(),a={h0:0x67452301,h1:0xefcdab89,h2:0x98badcfe,h3:0x10325476},e},e.start(),e.update=function(f,g){"utf8"===g&&(f=d.util.encodeUtf8(f));var h=f.length;e.messageLength+=h,h=[h/0x100000000>>>0,h>>>0];for(var i=e.fullMessageLength.length-1;i>=0;--i)e.fullMessageLength[i]+=h[1],h[1]=h[0]+(e.fullMessageLength[i]/0x100000000>>>0),e.fullMessageLength[i]=e.fullMessageLength[i]>>>0,h[0]=h[1]/0x100000000>>>0;return b.putBytes(f),k(a,c,b),(b.read>2048||0===b.length())&&b.compact(),e},e.digest=function(){var g=d.util.createBuffer();g.putBytes(b.bytes());var h=e.fullMessageLength[e.fullMessageLength.length-1]+e.messageLengthSize&e.blockLength-1;g.putBytes(f.substr(0,e.blockLength-h));for(var i,j=0,l=e.fullMessageLength.length-1;l>=0;--l)j=(i=8*e.fullMessageLength[l]+j)/0x100000000>>>0,g.putInt32Le(i>>>0);var m={h0:a.h0,h1:a.h1,h2:a.h2,h3:a.h3};k(m,c,g);var n=d.util.createBuffer();return n.putInt32Le(m.h0),n.putInt32Le(m.h1),n.putInt32Le(m.h2),n.putInt32Le(m.h3),n},e};var f=null,g=null,h=null,i=null,j=!1;function k(a,b,c){for(var d,e,f,j,k,l,m,n,o=c.length();o>=64;){for(e=a.h0,f=a.h1,j=a.h2,k=a.h3,n=0;n<16;++n)b[n]=c.getInt32Le(),d=e+(k^f&(j^k))+i[n]+b[n],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;for(;n<32;++n)d=e+(j^k&(f^j))+i[n]+b[g[n]],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;for(;n<48;++n)d=e+(f^j^k)+i[n]+b[g[n]],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;for(;n<64;++n)d=e+(j^(f|~k))+i[n]+b[g[n]],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;a.h0=a.h0+e|0,a.h1=a.h1+f|0,a.h2=a.h2+j|0,a.h3=a.h3+k|0,o-=64}}},39804:(a,b,c)=>{var d=c(45654);c(45518),c(27080);var e=a.exports=d.tls;function f(a,b,c){var f=b.entity===d.tls.ConnectionEnd.client;a.read.cipherState={init:!1,cipher:d.cipher.createDecipher("AES-CBC",f?c.keys.server_write_key:c.keys.client_write_key),iv:f?c.keys.server_write_IV:c.keys.client_write_IV},a.write.cipherState={init:!1,cipher:d.cipher.createCipher("AES-CBC",f?c.keys.client_write_key:c.keys.server_write_key),iv:f?c.keys.client_write_IV:c.keys.server_write_IV},a.read.cipherFunction=j,a.write.cipherFunction=g,a.read.macLength=a.write.macLength=c.mac_length,a.read.macFunction=a.write.macFunction=e.hmac_sha1}function g(a,b){var c,f=!1,g=b.macFunction(b.macKey,b.sequenceNumber,a);a.fragment.putBytes(g),b.updateSequenceNumber(),c=a.version.minor===e.Versions.TLS_1_0.minor?b.cipherState.init?null:b.cipherState.iv:d.random.getBytesSync(16),b.cipherState.init=!0;var i=b.cipherState.cipher;return i.start({iv:c}),a.version.minor>=e.Versions.TLS_1_1.minor&&i.output.putBytes(c),i.update(a.fragment),i.finish(h)&&(a.fragment=i.output,a.length=a.fragment.length(),f=!0),f}function h(a,b,c){if(!c){var d=a-b.length()%a;b.fillWithByte(d-1,d)}return!0}function i(a,b,c){var d=!0;if(c){for(var e=b.length(),f=b.last(),g=e-1-f;g<e-1;++g)d=d&&b.at(g)==f;d&&b.truncate(f+1)}return d}function j(a,b){var c,f,g,h,j,k=!1;j=a.version.minor===e.Versions.TLS_1_0.minor?b.cipherState.init?null:b.cipherState.iv:a.fragment.getBytes(16),b.cipherState.init=!0;var l=b.cipherState.cipher;l.start({iv:j}),l.update(a.fragment),k=l.finish(i);var m=b.macLength,n=d.random.getBytesSync(m),o=l.output.length();o>=m?(a.fragment=l.output.getBytes(o-m),n=l.output.getBytes(m)):a.fragment=l.output.getBytes(),a.fragment=d.util.createBuffer(a.fragment),a.length=a.fragment.length();var p=b.macFunction(b.macKey,b.sequenceNumber,a);return b.updateSequenceNumber(),k=(c=b.macKey,f=n,g=p,(h=d.hmac.create()).start("SHA1",c),h.update(f),f=h.digest().getBytes(),h.start(null,null),h.update(g),f===(g=h.digest().getBytes())&&k)}e.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA={id:[0,47],name:"TLS_RSA_WITH_AES_128_CBC_SHA",initSecurityParameters:function(a){a.bulk_cipher_algorithm=e.BulkCipherAlgorithm.aes,a.cipher_type=e.CipherType.block,a.enc_key_length=16,a.block_length=16,a.fixed_iv_length=16,a.record_iv_length=16,a.mac_algorithm=e.MACAlgorithm.hmac_sha1,a.mac_length=20,a.mac_key_length=20},initConnectionState:f},e.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA={id:[0,53],name:"TLS_RSA_WITH_AES_256_CBC_SHA",initSecurityParameters:function(a){a.bulk_cipher_algorithm=e.BulkCipherAlgorithm.aes,a.cipher_type=e.CipherType.block,a.enc_key_length=32,a.block_length=16,a.fixed_iv_length=16,a.record_iv_length=16,a.mac_algorithm=e.MACAlgorithm.hmac_sha1,a.mac_length=20,a.mac_key_length=20},initConnectionState:f}},41702:(a,b,c)=>{var d=c(45654);c(33889),d.mgf=d.mgf||{},(a.exports=d.mgf.mgf1=d.mgf1=d.mgf1||{}).create=function(a){return{generate:function(b,c){for(var e=new d.util.ByteBuffer,f=Math.ceil(c/a.digestLength),g=0;g<f;g++){var h=new d.util.ByteBuffer;h.putInt32(g),a.start(),a.update(b+h.getBytes()),e.putBuffer(a.digest())}return e.truncate(e.length()-c),e.getBytes()}}}},42947:(a,b,c)=>{"use strict";let d=c(29021),e=c(33873),{DATA_DIR:f}=c(37436),{normalizeAllowedClientIps:g}=c(54584),{normalizeAllowedToolsInput:h}=c(47141),{normalizeProxyUsers:i}=c(99721),j=e.join(f,"audit-gateway"),k=e.join(j,"config.json"),l=e.join(j,"audit.jsonl"),m=e.join(j,"logs"),n=Object.freeze({enabled:!1,bindHost:"127.0.0.1",port:3128,clientProxyHost:"",clientIpFilterEnabled:!1,allowedClientIps:[],clientToolFilterEnabled:!1,allowedClientTools:[],proxyAuthEnabled:!1,proxyAuthUsers:[],allowedHosts:["api.anthropic.com","*.anthropic.com","claude.ai","*.claude.ai","api.openai.com","*.openai.com","chatgpt.com","*.chatgpt.com"],passthroughUnknown:!0,captureBodies:!0,captureLimitBytes:2097152,retentionDays:7,verifyUpstreamTls:!0,connectTimeoutMs:1e4,tlsHandshakeTimeoutMs:1e4,responseHeaderTimeoutMs:3e4,idleTimeoutMs:9e5,shutdownGraceMs:1500,allowPlainHttp:!1,allowedConnectPorts:[443]});function o(){return{...n,allowedClientIps:[...n.allowedClientIps],allowedClientTools:[...n.allowedClientTools],proxyAuthUsers:[...n.proxyAuthUsers],allowedHosts:[...n.allowedHosts],allowedConnectPorts:[...n.allowedConnectPorts]}}function p(){d.mkdirSync(j,{recursive:!0}),d.mkdirSync(m,{recursive:!0})}function q(a){return[...new Set((Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/)).map(a=>String(a||"").trim().toLowerCase()).filter(Boolean).filter(a=>!a.includes("://")&&/^[*a-z0-9._-]+$/.test(a)))]}function r(a,b,c,d,e){let f=null==a?b:Number(a);if(!Number.isInteger(f)||f<c||f>d)throw Error(`${e} must be between ${c} and ${d}`);return f}function s(a={}){let b={...n,...a},c=r(b.port,n.port,1,65535,"Proxy port"),d=Number(b.captureLimitBytes);if(!Number.isFinite(d)||d<0||d>0x1000000)throw Error("Capture limit must be between 0 and 16 MB");let e=r(b.retentionDays,n.retentionDays,1,365,"Retention days"),f=r(b.connectTimeoutMs,n.connectTimeoutMs,1e3,12e4,"Connect timeout"),j=r(b.tlsHandshakeTimeoutMs,n.tlsHandshakeTimeoutMs,1e3,12e4,"TLS handshake timeout"),k=r(b.responseHeaderTimeoutMs,n.responseHeaderTimeoutMs,1e3,3e5,"Response header timeout"),l=r(b.idleTimeoutMs,n.idleTimeoutMs,3e4,36e5,"Idle timeout"),m=r(b.shutdownGraceMs,n.shutdownGraceMs,0,3e4,"Shutdown grace period"),o=String(b.bindHost||"127.0.0.1").trim();if(!o||/\s/.test(o))throw Error("Invalid bind address");let p=String(b.clientProxyHost||"").trim();if(/\s/.test(p)||p.includes("://"))throw Error("Client proxy host must be a hostname or IP without protocol");let t=!0===b.clientIpFilterEnabled,u=g(b.allowedClientIps);if(t&&0===u.length)throw Error("Client IP filter requires at least one allowed IP or CIDR");let v=!0===b.proxyAuthEnabled,w=i(b.proxyAuthUsers);if(v&&0===w.length)throw Error("Proxy authentication requires at least one account");let x=!0===b.clientToolFilterEnabled,y=h(b.allowedClientTools);if(x&&0===y.length)throw Error("Client tool filter requires at least one allowed tool");return{enabled:!0===b.enabled,bindHost:o,port:c,clientProxyHost:p,clientIpFilterEnabled:t,allowedClientIps:u,clientToolFilterEnabled:x,allowedClientTools:y,proxyAuthEnabled:v,proxyAuthUsers:w,allowedHosts:q(b.allowedHosts),passthroughUnknown:!1!==b.passthroughUnknown,captureBodies:!1!==b.captureBodies,captureLimitBytes:Math.round(d),retentionDays:e,verifyUpstreamTls:!0,connectTimeoutMs:f,tlsHandshakeTimeoutMs:j,responseHeaderTimeoutMs:k,idleTimeoutMs:l,shutdownGraceMs:m,allowPlainHttp:!1,allowedConnectPorts:[443]}}a.exports={AUDIT_DIR:j,CONFIG_PATH:k,AUDIT_LOG_PATH:l,AUDIT_LOG_DIR:m,DEFAULT_CONFIG:n,ensureAuditDir:p,loadConfig:function(){if(p(),!d.existsSync(k))return o();try{return s(JSON.parse(d.readFileSync(k,"utf8")))}catch(a){return console.warn(`[audit-proxy] invalid config ignored: ${a.message||a}`),o()}},saveConfig:function(a){p();let b=s(a),c=`${k}.tmp`;return d.writeFileSync(c,`${JSON.stringify(b,null,2)}
25
- `,{mode:384}),d.renameSync(c,k),b},validateConfig:s,normalizeAllowedHosts:q,normalizeAllowedClientIps:g}},45518:(a,b,c)=>{var d,e,f,g,h,i=c(45654);function j(a,b){i.cipher.registerAlgorithm(a,function(){return new i.aes.Algorithm(a,b)})}c(66568),c(19396),c(33889),a.exports=i.aes=i.aes||{},i.aes.startEncrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!1,mode:d});return e.start(b),e},i.aes.createEncryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!1,mode:b})},i.aes.startDecrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!0,mode:d});return e.start(b),e},i.aes.createDecryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!0,mode:b})},i.aes.Algorithm=function(a,b){k||l();var c=this;c.name=a,c.mode=new b({blockSize:16,cipher:{encrypt:function(a,b){return n(c._w,a,b,!1)},decrypt:function(a,b){return n(c._w,a,b,!0)}}}),c._init=!1},i.aes.Algorithm.prototype.initialize=function(a){if(!this._init){var b,c=a.key;if("string"==typeof c&&(16===c.length||24===c.length||32===c.length))c=i.util.createBuffer(c);else if(i.util.isArray(c)&&(16===c.length||24===c.length||32===c.length)){b=c,c=i.util.createBuffer();for(var d=0;d<b.length;++d)c.putByte(b[d])}if(!i.util.isArray(c)){b=c,c=[];var e=b.length();if(16===e||24===e||32===e){e>>>=2;for(var d=0;d<e;++d)c.push(b.getInt32())}}if(!i.util.isArray(c)||4!==c.length&&6!==c.length&&8!==c.length)throw Error("Invalid key parameter.");var f=-1!==["CFB","OFB","CTR","GCM"].indexOf(this.mode.name);this._w=m(c,a.decrypt&&!f),this._init=!0}},i.aes._expandKey=function(a,b){return k||l(),m(a,b)},i.aes._updateBlock=n,j("AES-ECB",i.cipher.modes.ecb),j("AES-CBC",i.cipher.modes.cbc),j("AES-CFB",i.cipher.modes.cfb),j("AES-OFB",i.cipher.modes.ofb),j("AES-CTR",i.cipher.modes.ctr),j("AES-GCM",i.cipher.modes.gcm);var k=!1;function l(){k=!0,f=[0,1,2,4,8,16,32,64,128,27,54];for(var a=Array(256),b=0;b<128;++b)a[b]=b<<1,a[b+128]=b+128<<1^283;d=Array(256),e=Array(256),g=[,,,,],h=[,,,,];for(var b=0;b<4;++b)g[b]=Array(256),h[b]=Array(256);for(var c,i,j,l,m,n,o,p=0,q=0,b=0;b<256;++b){l=(l=q^q<<1^q<<2^q<<3^q<<4)>>8^255&l^99,d[p]=l,e[l]=p,m=a[l],c=a[p],i=a[c],j=a[i],n=m<<24^l<<16^l<<8^(l^m),o=(c^i^j)<<24^(p^j)<<16^(p^i^j)<<8^(p^c^j);for(var r=0;r<4;++r)g[r][p]=n,h[r][l]=o,n=n<<24|n>>>8,o=o<<24|o>>>8;0===p?p=q=1:(p=c^a[a[a[c^j]]],q^=a[a[q]])}}function m(a,b){for(var c,e=a.slice(0),g=1,i=e.length,j=4*(i+6+1),k=i;k<j;++k)c=e[k-1],k%i==0?(c=d[c>>>16&255]<<24^d[c>>>8&255]<<16^d[255&c]<<8^d[c>>>24]^f[g]<<24,g++):i>6&&k%i==4&&(c=d[c>>>24]<<24^d[c>>>16&255]<<16^d[c>>>8&255]<<8^d[255&c]),e[k]=e[k-i]^c;if(b){var l,m=h[0],n=h[1],o=h[2],p=h[3],q=e.slice(0);j=e.length;for(var k=0,r=j-4;k<j;k+=4,r-=4)if(0===k||k===j-4)q[k]=e[r],q[k+1]=e[r+3],q[k+2]=e[r+2],q[k+3]=e[r+1];else for(var s=0;s<4;++s)l=e[r+s],q[k+(3&-s)]=m[d[l>>>24]]^n[d[l>>>16&255]]^o[d[l>>>8&255]]^p[d[255&l]];e=q}return e}function n(a,b,c,f){var i,j,k,l,m,n,o,p,q,r,s,t,u=a.length/4-1;f?(i=h[0],j=h[1],k=h[2],l=h[3],m=e):(i=g[0],j=g[1],k=g[2],l=g[3],m=d),n=b[0]^a[0],o=b[f?3:1]^a[1],p=b[2]^a[2],q=b[f?1:3]^a[3];for(var v=3,w=1;w<u;++w)r=i[n>>>24]^j[o>>>16&255]^k[p>>>8&255]^l[255&q]^a[++v],s=i[o>>>24]^j[p>>>16&255]^k[q>>>8&255]^l[255&n]^a[++v],t=i[p>>>24]^j[q>>>16&255]^k[n>>>8&255]^l[255&o]^a[++v],q=i[q>>>24]^j[n>>>16&255]^k[o>>>8&255]^l[255&p]^a[++v],n=r,o=s,p=t;c[0]=m[n>>>24]<<24^m[o>>>16&255]<<16^m[p>>>8&255]<<8^m[255&q]^a[++v],c[f?3:1]=m[o>>>24]<<24^m[p>>>16&255]<<16^m[q>>>8&255]<<8^m[255&n]^a[++v],c[2]=m[p>>>24]<<24^m[q>>>16&255]<<16^m[n>>>8&255]<<8^m[255&o]^a[++v],c[f?1:3]=m[q>>>24]<<24^m[n>>>16&255]<<16^m[o>>>8&255]<<8^m[255&p]^a[++v]}function o(a){var b,c="AES-"+((a=a||{}).mode||"CBC").toUpperCase(),d=(b=a.decrypt?i.cipher.createDecipher(c,a.key):i.cipher.createCipher(c,a.key)).start;return b.start=function(a,c){var e=null;c instanceof i.util.ByteBuffer&&(e=c,c={}),(c=c||{}).output=e,c.iv=a,d.call(b,c)},b}},45654:a=>{a.exports={options:{usePureJavaScript:!1}}},47141:a=>{"use strict";let b=[{id:"claude-code",label:"Claude Code",patterns:["claude-cli","claude-code","anthropic"]},{id:"codex",label:"OpenAI Codex",patterns:["codex_cli","codex-cli","codex"]},{id:"gemini-cli",label:"Gemini CLI",patterns:["gemini-cli","google-genai"]},{id:"cursor",label:"Cursor",patterns:["cursor"]},{id:"curl",label:"curl / scripts",patterns:["curl","wget","httpie"]}];function c(a){return String(a||"").trim().toLowerCase()}function d(a,b=[]){let e=c(a);return!!e&&!!b.length&&b.some(a=>a&&e.includes(a))}a.exports={TOOL_PRESETS:b,normalizeAllowedTools:function(a){let d=Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/),e=[];for(let a of d){let d=c(a);if(!d)continue;let f=b.find(a=>a.id===d);f?e.push(...f.patterns):e.push(d)}return[...new Set(e)]},normalizeAllowedToolsInput:function(a){return[...new Set((Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/)).map(c).filter(Boolean))]},clientToolMatches:d,shouldRefuseClientTool:function(a,b=[]){return!!c(a)&&!d(a,b)},describeUserAgent:function(a){let b=String(a||"").trim();return b?b.length>120?`${b.slice(0,119)}…`:b:"no User-Agent"}}},49345:(a,b,c)=>{var d=c(45654);c(33889);var e=a.exports=d.pem=d.pem||{};function f(a){for(var b=a.name+": ",c=[],d=function(a,b){return" "+b},e=0;e<a.values.length;++e)c.push(a.values[e].replace(/^(\S+\r\n)/,d));b+=c.join(",")+"\r\n";for(var f=0,g=-1,e=0;e<b.length;++e,++f)if(f>65&&-1!==g){var h=b[g];","===h?(++g,b=b.substr(0,g)+"\r\n "+b.substr(g)):b=b.substr(0,g)+"\r\n"+h+b.substr(g+1),f=e-g-1,g=-1,++e}else(" "===b[e]||" "===b[e]||","===b[e])&&(g=e);return b}e.encode=function(a,b){b=b||{};var c,e="-----BEGIN "+a.type+"-----\r\n";if(a.procType&&(e+=f(c={name:"Proc-Type",values:[String(a.procType.version),a.procType.type]})),a.contentDomain&&(e+=f(c={name:"Content-Domain",values:[a.contentDomain]})),a.dekInfo&&(c={name:"DEK-Info",values:[a.dekInfo.algorithm]},a.dekInfo.parameters&&c.values.push(a.dekInfo.parameters),e+=f(c)),a.headers)for(var g=0;g<a.headers.length;++g)e+=f(a.headers[g]);return a.procType&&(e+="\r\n"),e+=d.util.encode64(a.body,b.maxline||64)+"\r\n",e+="-----END "+a.type+"-----\r\n"},e.decode=function(a){for(var b,c=[],e=/\s*-----BEGIN ([A-Z0-9- ]+)-----\r?\n?([\x21-\x7e\s]+?(?:\r?\n\r?\n))?([:A-Za-z0-9+\/=\s]+?)-----END \1-----/g,f=/([\x21-\x7e]+):\s*([\x21-\x7e\s^:]+)/,g=/\r?\n/;b=e.exec(a);){var h=b[1];"NEW CERTIFICATE REQUEST"===h&&(h="CERTIFICATE REQUEST");var i={type:h,procType:null,contentDomain:null,dekInfo:null,headers:[],body:d.util.decode64(b[3])};if(c.push(i),b[2]){for(var j=b[2].split(g),k=0;b&&k<j.length;){for(var l=j[k].replace(/\s+$/,""),m=k+1;m<j.length;++m){var n=j[m];if(!/\s/.test(n[0]))break;l+=n,k=m}if(b=l.match(f)){for(var o={name:b[1],values:[]},p=b[2].split(","),q=0;q<p.length;++q)o.values.push(p[q].replace(/^\s+/,""));if(i.procType)if(i.contentDomain||"Content-Domain"!==o.name)if(i.dekInfo||"DEK-Info"!==o.name)i.headers.push(o);else{if(0===o.values.length)throw Error('Invalid PEM formatted message. The "DEK-Info" header must have at least one subfield.');i.dekInfo={algorithm:p[0],parameters:p[1]||null}}else i.contentDomain=p[0]||"";else{if("Proc-Type"!==o.name)throw Error('Invalid PEM formatted message. The first encapsulated header must be "Proc-Type".');if(2!==o.values.length)throw Error('Invalid PEM formatted message. The "Proc-Type" header must have two subfields.');i.procType={version:p[0],type:p[1]}}}++k}if("ENCRYPTED"===i.procType&&!i.dekInfo)throw Error('Invalid PEM formatted message. The "DEK-Info" header must be present if "Proc-Type" is "ENCRYPTED".')}}if(0===c.length)throw Error("Invalid PEM formatted message.");return c}},54584:(a,b,c)=>{"use strict";let d=c(91645);function e(a){let b=String(a||"").trim().toLowerCase();b.startsWith("[")&&b.endsWith("]")&&(b=b.slice(1,-1));let c=b.indexOf("%");return c>=0&&(b=b.slice(0,c)),b.startsWith("::ffff:")&&4===d.isIP(b.slice(7))&&(b=b.slice(7)),b}function f(a){return Buffer.from(a.split(".").map(a=>Number(a)))}function g(a,b){return 4===b?f(a):function(a){let b=e(a),c=b.lastIndexOf(":");if(c>=0){let a=b.slice(c+1);if(4===d.isIP(a)){let d=f(a),e=(d[0]<<8|d[1]).toString(16),g=(d[2]<<8|d[3]).toString(16);b=`${b.slice(0,c)}:${e}:${g}`}}let g=b.split("::");if(g.length>2)throw Error("Invalid IPv6 address");let h=g[0]?g[0].split(":").filter(Boolean):[],i=2===g.length&&g[1]?g[1].split(":").filter(Boolean):[],j=8-h.length-i.length;if(1===g.length&&0!==j||j<0)throw Error("Invalid IPv6 address");let k=2===g.length?[...h,...Array(j).fill("0"),...i]:h;if(8!==k.length)throw Error("Invalid IPv6 address");let l=Buffer.alloc(16);return k.forEach((a,b)=>{let c=Number.parseInt(a||"0",16);if(!Number.isInteger(c)||c<0||c>65535)throw Error("Invalid IPv6 address");l[2*b]=c>>8&255,l[2*b+1]=255&c}),l}(a)}function h(a){let b=String(a||"").trim();if(!b)throw Error("Empty IP rule");let c=b.indexOf("/"),f=e(c>=0?b.slice(0,c):b),g=d.isIP(f);if(!g)throw Error(`Invalid client IP/CIDR: ${b}`);let h=4===g?32:128,i=c>=0?Number(b.slice(c+1)):h;if(!Number.isInteger(i)||i<0||i>h)throw Error(`Invalid CIDR prefix: ${b}`);return{text:c>=0?`${f}/${i}`:f,ip:f,family:g,prefix:i}}a.exports={normalizeIp:e,parseIpRule:h,normalizeAllowedClientIps:function(a){let b=Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/),c=[],d=new Set;for(let a of b){let b=String(a||"").trim();if(!b)continue;let e=h(b);d.has(e.text)||(d.add(e.text),c.push(e.text))}return c},clientIpMatches:function(a,b=[]){let c=e(a),f=d.isIP(c);if(!f)return!1;let i=g(c,f);for(let a of b||[]){let b;try{b=h(a)}catch{continue}if(b.family===f&&function(a,b,c){let d=Math.floor(c/8),e=c%8;for(let c=0;c<d;c+=1)if(a[c]!==b[c])return!1;if(!e)return!0;let f=255<<8-e&255;return(a[d]&f)==(b[d]&f)}(i,g(b.ip,b.family),b.prefix))return!0}return!1}}},56416:(a,b,c)=>{var d=c(45654);c(63070),c(33889);var e=d.asn1,f=a.exports=d.pkcs7asn1=d.pkcs7asn1||{};d.pkcs7=d.pkcs7||{},d.pkcs7.asn1=f;var g={name:"ContentInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.ContentType",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,captureAsn1:"content"}]};f.contentInfoValidator=g;var h={name:"EncryptedContentInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentType",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"contentType"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm.parameter",tagClass:e.Class.UNIVERSAL,captureAsn1:"encParameter"}]},{name:"EncryptedContentInfo.encryptedContent",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,capture:"encryptedContent",captureAsn1:"encryptedContentAsn1"}]};f.envelopedDataValidator={name:"EnvelopedData",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EnvelopedData.Version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"},{name:"EnvelopedData.RecipientInfos",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,constructed:!0,captureAsn1:"recipientInfos"}].concat(h)},f.encryptedDataValidator={name:"EncryptedData",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedData.Version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"}].concat(h)};var i={name:"SignerInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1},{name:"SignerInfo.issuerAndSerialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.issuerAndSerialNumber.issuer",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"SignerInfo.issuerAndSerialNumber.serialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"SignerInfo.digestAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.digestAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"digestAlgorithm"},{name:"SignerInfo.digestAlgorithm.parameter",tagClass:e.Class.UNIVERSAL,constructed:!1,captureAsn1:"digestParameter",optional:!0}]},{name:"SignerInfo.authenticatedAttributes",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"authenticatedAttributes"},{name:"SignerInfo.digestEncryptionAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,capture:"signatureAlgorithm"},{name:"SignerInfo.encryptedDigest",tagClass:e.Class.UNIVERSAL,type:e.Type.OCTETSTRING,constructed:!1,capture:"signature"},{name:"SignerInfo.unauthenticatedAttributes",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,capture:"unauthenticatedAttributes"}]};f.signedDataValidator={name:"SignedData",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignedData.Version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"},{name:"SignedData.DigestAlgorithms",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,constructed:!0,captureAsn1:"digestAlgorithms"},g,{name:"SignedData.Certificates",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,optional:!0,captureAsn1:"certificates"},{name:"SignedData.CertificateRevocationLists",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,optional:!0,captureAsn1:"crls"},{name:"SignedData.SignerInfos",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,capture:"signerInfos",optional:!0,value:[i]}]},f.recipientInfoValidator={name:"RecipientInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"},{name:"RecipientInfo.issuerAndSerial",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.issuerAndSerial.issuer",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"RecipientInfo.issuerAndSerial.serialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"RecipientInfo.keyEncryptionAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.keyEncryptionAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"RecipientInfo.keyEncryptionAlgorithm.parameter",tagClass:e.Class.UNIVERSAL,constructed:!1,captureAsn1:"encParameter",optional:!0}]},{name:"RecipientInfo.encryptedKey",tagClass:e.Class.UNIVERSAL,type:e.Type.OCTETSTRING,constructed:!1,capture:"encKey"}]}},62952:(a,b,c)=>{"use strict";let d=c(29021),e=c(33873),f=c(4984),g=c(55511),{AUDIT_LOG_PATH:h,AUDIT_LOG_DIR:i,ensureAuditDir:j,loadConfig:k}=c(42947),{redactObject:l,scrubString:m}=c(14681),{toTokensJson:n,totalInputTokens:o}=c(11562),{publishRecentUsage:p}=c(79841),q="audit-proxy",r="client",s="provider_response",t=/\/(?:messages|responses|chat\/completions)$|generatecontent$/i,u={expiresAt:0,config:null},v=null,w=null,x=null,y=null,z=null,A="",B=Promise.resolve(),C=Promise.resolve(),D=0,E=null,F=new Map,G={queue:[],workers:new Set,activeWorkers:0,clearing:!1,enqueued:0,written:0,dropped:0,failed:0,mysqlWritten:0,mysqlFailed:0,mysqlSkipped:0,mysqlSkippedByReason:{},usageWritten:0,usageFailed:0,tokensSeen:0,lastError:null,lastWrittenAt:null};function H(a){let b=Date.now();b-D<6e4||(D=b,console.warn(`[AuditProxy][PromptDB] ${a}`))}function I(a){G.lastError=String(a||"Audit store failure"),console.warn(`[AuditProxy][Store] ${G.lastError}`)}async function J(){let a=Date.now();if(u.expiresAt>a)return u.config;v||(v=Promise.all([c.e(689),c.e(3960)]).then(c.bind(c,41170)));let b=await v,d=await b.getPromptLogDbConfig();return u={expiresAt:a+5e3,config:d},d}async function K(a){let b=g.createHash("sha256").update(JSON.stringify({host:a.host,port:Number(a.port||3306),database:a.database,username:a.username,password:a.password,ssl:!!a.ssl})).digest("hex");if(z&&A===b)return z;let d=B.then(async()=>{if(z&&A===b)return z;if(z){try{await z.end()}catch{}z=null,A=""}let d=await c.e(4790).then(c.t.bind(c,94790,19)),e=(d.default||d).createPool({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{rejectUnauthorized:!0}:void 0,connectTimeout:3e3,waitForConnections:!0,connectionLimit:4,maxIdle:4,idleTimeout:6e4,queueLimit:100,enableKeepAlive:!0,keepAliveInitialDelay:3e4});return z=e,A=b,e});return B=d.then(()=>void 0,()=>void 0),d}function L(a){let b=a?new Date(a):new Date;return(Number.isNaN(b.getTime())?new Date:b).toISOString().replace("T"," ").replace("Z","")}function M(a){if("string"!=typeof a)return a;let b=a.trim();if(!b||!b.startsWith("{")&&!b.startsWith("["))return a;try{return JSON.parse(b)}catch{return a}}function N(a,b=0,c=[]){if(null==a||b>12||c.join("\n").length>=2e5)return c;if("string"==typeof a)return a.trim()&&c.push(a.trim()),c;if(Array.isArray(a)){for(let d of a)N(d,b+1,c);return c}if("object"!=typeof a)return c;for(let[d,e]of Object.entries(a)){let a=d.toLowerCase();["content","text","prompt","input","message","output_text"].includes(a)?N(e,b+1,c):b<8&&["messages","contents","parts","body","request","payload","response","choices","output","item","items"].includes(a)&&N(e,b+1,c)}return c}function O(a){if("string"!=typeof a)return!1;let b=a.trim();return!!b&&!/^\[[^\]]*\]$/.test(b)}function P(a){let b=String(a||"").toLowerCase();return b.includes("claude")?{tool:"claude-code",label:"Claude Code"}:b.includes("codex")?{tool:"codex",label:"Codex"}:{tool:"audit-proxy",label:"Enterprise AI Audit Proxy"}}async function Q(a,b,c,d){if(!c)return null;let e=g.createHash("sha256").update(c).digest("hex"),f=Buffer.byteLength(String(c||""),"utf8");return await a.query(`INSERT INTO prompt_log_payloads (
24
+ ${e}`)}catch{try{a.destroy()}catch{}}}function N(a={}){let b={};for(let[c,d]of Object.entries(a||{}))b[c]=d;return b}async function O(a){let b=await a.requestCapture.finish(String(a.requestHeaders["content-type"]||""),String(a.requestHeaders["content-encoding"]||"")),c=String(a.responseHeaders?.["content-type"]||""),d=await a.responseCapture.finish(c,String(a.responseHeaders?.["content-encoding"]||"")),e=J(a.target.host),f=n(a.path),g=p({provider:e,body:d.body,contentType:c,path:f}),h=K(b.body)||g?.model||null;return{id:i.randomUUID(),timestamp:new Date().toISOString(),protocol:a.protocol||"http/1.1",client:{ip:a.clientIp||"",port:a.clientPort||null,userAgent:String(a.requestHeaders["user-agent"]||""),proxyUser:a.authUser||null},provider:e,host:C(a.target.host),port:a.target.port,method:a.method,path:f,model:h,usage:g,status:a.statusCode||null,durationMs:Date.now()-a.startedAt,error:a.error?o(a.error.message||a.error):null,denied:!0===a.denied,request:{headers:l(a.requestHeaders),...b},response:{headers:l(a.responseHeaders||{}),...d}}}a.exports={createAuditProxy:function(a={},b={}){let i={allowedHosts:[],passthroughUnknown:!0,captureBodies:!0,captureLimitBytes:2097152,verifyUpstreamTls:!0,allowedConnectPorts:[443],connectTimeoutMs:1e4,tlsHandshakeTimeoutMs:1e4,responseHeaderTimeoutMs:3e4,idleTimeoutMs:9e5,allowPlainHttp:!1,clientToolFilterEnabled:!1,allowedClientTools:[],proxyAuthEnabled:!1,proxyAuthUsers:[],clientAlpnProtocols:["http/1.1"],...a};if(!0!==i.verifyUpstreamTls)throw Error("Upstream TLS verification is mandatory in Audit Proxy mode");let j=b.certificateProvider;if("function"!=typeof j)throw Error("certificateProvider is required");let k="function"==typeof b.onAudit?b.onAudit:()=>{},l="function"==typeof b.onAuditJob?b.onAuditJob:null,m="function"==typeof b.resolveTarget?b.resolveTarget:(a,b)=>q(a,b,{allowedPorts:i.allowedConnectPorts}),n=b.upstreamCa,o=r(i.allowedClientTools),p=i.proxyAuthEnabled?u(i.proxyAuthUsers):null,w=i.proxyAuthEnabled?v():null,x=new Set,y=new Map,z=new WeakMap,A=new Set;function B(a){return!a||x.has(a)||(x.add(a),a.once?.("close",()=>x.delete(a))),a}function C(a,b){try{"function"==typeof a.destroy?a.destroy(b):"function"==typeof a.close&&a.close()}catch{}}function G(a){let b=()=>O(a);if(l){try{l(b)}catch(a){console.warn("[audit-proxy] audit enqueue failed:",a?.message||a)}return}setImmediate(()=>{Promise.resolve().then(b).then(k).catch(a=>console.warn("[audit-proxy] audit callback failed:",a?.message||a))})}function H({requestHeaders:a,method:b,path:c,target:d,requestCapture:e,responseCapture:f,responseHeaders:g,statusCode:h,startedAt:i,error:j,socket:k,protocol:l,authUser:m=null,denied:n=!1}){return{requestHeaders:N(a),method:b,path:c,target:d,requestCapture:e,responseCapture:f,responseHeaders:N(g),statusCode:h,startedAt:i,error:j,clientIp:L(k),clientPort:k?.remotePort||null,authUser:m,protocol:l,denied:n}}let J="This proxy does not support WebSocket connections. Use the HTTP streaming transport instead - most clients fall back to it automatically.";function K(a,b,c,d,{statusCode:e=403,authUser:f=null}={}){let g=String(a.url||""),h=c||{host:g.includes(":")?g.slice(0,g.lastIndexOf(":")):g||"unknown",port:443},j=new I(i.captureBodies?i.captureLimitBytes:0);j.add(Buffer.from(d)),G(H({requestHeaders:a.headers,method:"CONNECT",path:"",target:h,requestCapture:new I(0),responseCapture:j,responseHeaders:{"content-type":"text/plain; charset=utf-8",connection:"close"},statusCode:e,startedAt:Date.now(),error:d,socket:b,protocol:"http/1.1",authUser:f,denied:!0}))}let P=Symbol("refused");async function Q(a,b){if(!p)return null;let d=L(b),e=(c,d=null)=>(M(b,"407 Proxy Authentication Required",c,['Proxy-Authenticate: Basic realm="BlueRouter Audit Proxy", charset="UTF-8"']),K(a,b,void 0,c,{statusCode:407,authUser:d}),P);if(w.isLocked(d))return e("Too many failed proxy authentication attempts");let f=a.headers["proxy-authorization"],g=await p.authenticate(f);if(g.ok)return w.recordSuccess(d),g.username;let h=null;if(f){let{lockedNow:a}=w.recordFailure(d);a&&console.log(`[audit-proxy] proxy auth lockout for ${d||"unknown"}`);try{h=c(99721).parseBasicProxyAuthorization(f)?.username||null}catch{h=null}}return e(g.reason||"Proxy authentication required",h)}function R(a,b,c){if(!c)return;let d=new I(i.captureBodies?i.captureLimitBytes:0);d.add(Buffer.from(J)),G(H({requestHeaders:a.headers,method:a.method,path:a.url,target:c,requestCapture:new I(0),responseCapture:d,responseHeaders:{"content-type":"text/plain; charset=utf-8",connection:"close"},statusCode:501,startedAt:Date.now(),error:null,socket:b,protocol:"http/1.1",authUser:b?.__auditProxyUser||null,denied:!0}))}async function S(a,b,{expectContinue:c=!1}={}){let d=a.socket.__auditTarget,e=a.socket.__auditProxyUser||null;if(!d){b.writeHead(502,{"content-type":"text/plain"}),b.end("Audit target is missing");return}if(function(a={}){return"string"==typeof a.upgrade&&""!==a.upgrade.trim()}(a.headers)){b.writeHead(501,{"content-type":"text/plain; charset=utf-8",connection:"close"}),b.end(J),R(a,a.socket,d);return}let h=Date.now(),j=new I(i.captureBodies?i.captureLimitBytes:0),k=new I(i.captureBodies?i.captureLimitBytes:0),l=F(a.headers,{stripInternal:!0});l.host=443===d.port?d.host:`${d.host}:${d.port}`;let o=null,p=null,q={},r=null,s=!1,t=!1,u=null,v=(b=null)=>{s||(s=!0,u&&clearTimeout(u),G(H({requestHeaders:a.headers,method:a.method,path:a.url,target:d,requestCapture:j,responseCapture:k,responseHeaders:q,statusCode:r,startedAt:h,error:b,socket:a.socket,protocol:"http/1.1",authUser:e})))};try{let e,h,s=await m(d.host,d.port);(o=f.request({hostname:d.host,port:d.port,method:a.method,path:a.url,headers:l,rejectUnauthorized:!0,servername:g.isIP(d.host)?void 0:d.host,ca:n,ALPNProtocols:["http/1.1"],lookup:s.lookup,autoSelectFamily:!0,agent:(e=`${d.host}:${d.port}`,(h=y.get(e))||(h=new f.Agent({keepAlive:!0,maxSockets:32,maxFreeSockets:8,timeout:i.idleTimeoutMs}),y.set(e,h)),h)})).on("socket",a=>{if(B(a),a.setNoDelay(!0),a.setKeepAlive(!0,3e4),a.setTimeout(i.idleTimeoutMs,()=>a.destroy(Error("Upstream idle timeout"))),a.connecting){let b=setTimeout(()=>a.destroy(Error("Upstream TLS connect timeout")),i.connectTimeoutMs+i.tlsHandshakeTimeoutMs);b.unref?.();let c=()=>clearTimeout(b);a.once("secureConnect",c),a.once("error",c),a.once("close",c)}}),o.on("continue",()=>{c&&!b.headersSent&&b.writeContinue()}),o.on("information",a=>{102===a.statusCode&&"function"==typeof b.writeProcessing&&b.writeProcessing(),103===a.statusCode&&"function"==typeof b.writeEarlyHints&&b.writeEarlyHints(a.headers||{})}),o.on("response",a=>{p=a,u&&clearTimeout(u),r=a.statusCode||502,q=N(a.headers||{});let c=F(a.headers,{stripInternal:!1});b.writeHead(r,c),b.flushHeaders?.(),a.on("data",c=>{k.add(c),b.write(c)||a.pause()}),b.on("drain",()=>a.resume()),a.on("aborted",()=>{let a=Error("Upstream response aborted");b.destroyed||b.destroy(a),v(a)}),a.on("error",a=>{b.destroyed||b.destroy(a),v(a)}),a.on("end",()=>{if(a.trailers&&Object.keys(a.trailers).length)try{b.addTrailers(F(a.trailers,{stripInternal:!1}))}catch{}t=!0,b.end(),v(null)})}),o.on("error",a=>{b.headersSent?b.destroyed||b.destroy(a):(b.writeHead(502,{"content-type":"application/json"}),b.end(JSON.stringify({error:"Verified upstream TLS request failed"})),t=!0),v(a)}),a.on("data",b=>{j.add(b),o.write(b)||a.pause()}),o.on("drain",()=>a.resume()),a.on("end",()=>{if(a.trailers&&Object.keys(a.trailers).length)try{o.addTrailers(F(a.trailers,{stripInternal:!0}))}catch{}o.end(),u=setTimeout(()=>o.destroy(Error("Upstream response header timeout")),i.responseHeaderTimeoutMs),u.unref?.()}),a.on("aborted",()=>o.destroy(Error("Client request aborted"))),a.on("error",a=>o.destroy(a)),b.on("close",()=>{t||(p?.destroy(Error("Client response closed")),o?.destroy(Error("Client response closed")),v(Error("Client response closed")))})}catch(a){b.headersSent||(b.writeHead(502,{"content-type":"application/json"}),b.end(JSON.stringify({error:"Destination validation or connection failed"})),t=!0),v(a)}}let T=d.createServer((a,b)=>{S(a,b)});async function U(a){return a.upstreamPromise||(a.upstreamPromise=(async()=>{let b=a.target,c=await m(b.host,b.port),d=B(h.connect({host:b.host,port:b.port,servername:g.isIP(b.host)?void 0:b.host,rejectUnauthorized:!0,ca:n,ALPNProtocols:["h2"],lookup:c.lookup,autoSelectFamily:!0}));d.setNoDelay(!0),d.setKeepAlive(!0,3e4);let f=setTimeout(()=>d.destroy(Error("Upstream HTTP/2 TLS connect timeout")),i.connectTimeoutMs+i.tlsHandshakeTimeoutMs);f.unref?.(),d.once("secureConnect",()=>{clearTimeout(f),"h2"!==d.alpnProtocol&&d.destroy(Error("Upstream did not negotiate HTTP/2"))}),d.once("error",()=>clearTimeout(f)),d.once("close",()=>clearTimeout(f));let j=`https://${b.host}${443===b.port?"":`:${b.port}`}`,k=e.connect(j,{createConnection:()=>d,settings:{enablePush:!1}});return A.add(k),k.setTimeout(i.idleTimeoutMs,()=>k.destroy(Error("Upstream HTTP/2 idle timeout"))),k.once("close",()=>A.delete(k)),await new Promise((a,b)=>{let c=setTimeout(()=>b(Error("Upstream HTTP/2 session timeout")),i.connectTimeoutMs+i.tlsHandshakeTimeoutMs);c.unref?.();let d=(a,b)=>{clearTimeout(c),k.removeListener("connect",e),k.removeListener("error",f),a(b)},e=()=>d(a,k),f=a=>d(b,a);k.once("connect",e),k.once("error",f)}),k})().catch(b=>{throw a.upstreamPromise=null,b})),a.upstreamPromise}async function V(a,b){let c=z.get(a.session),d=c?.target;if(!c||!d){a.respond({":status":502,"content-type":"text/plain"}),a.end("Audit target is missing");return}a.pause();let f=Date.now(),g=new I(i.captureBodies?i.captureLimitBytes:0),h=new I(i.captureBodies?i.captureLimitBytes:0),j={},k=null,l=!1,m=!1,n=null,o=null,p=null,q=(e=null)=>{l||(l=!0,G(H({requestHeaders:b,method:b[":method"]||"GET",path:b[":path"]||"/",target:d,requestCapture:g,responseCapture:h,responseHeaders:j,statusCode:k,startedAt:f,error:e,socket:a.session.socket,protocol:"h2",authUser:c.authUser||null})))};try{(n=(await U(c)).request(function(a,b){let c=F(a,{stripInternal:!0}),d={":method":a[":method"]||"GET",":path":a[":path"]||"/",":scheme":"https",":authority":443===b.port?b.host:`${b.host}:${b.port}`};for(let[a,b]of Object.entries(c))a.startsWith(":")||(d[a.toLowerCase()]=b);return d}(b,d),{endStream:!1,waitForTrailers:!0})).setTimeout(i.idleTimeoutMs,()=>n.close(e.constants.NGHTTP2_CANCEL)),a.setTimeout(i.idleTimeoutMs,()=>a.close(e.constants.NGHTTP2_CANCEL)),n.on("response",b=>{j=N(b),k=Number(b[":status"]||502),a.respond(function(a){let b=F(a,{stripInternal:!1}),c={":status":Number(a[":status"]||502)};for(let[a,d]of Object.entries(b))a.startsWith(":")||(c[a.toLowerCase()]=d);return c}(b),{waitForTrailers:!0})}),n.on("trailers",a=>{p=F(a,{stripInternal:!1})}),a.on("wantTrailers",()=>{try{a.sendTrailers(p||{})}catch{}}),a.on("trailers",a=>{o=F(a,{stripInternal:!0})}),n.on("wantTrailers",()=>{try{n.sendTrailers(o||{})}catch{}}),a.on("data",b=>{g.add(b),n.write(b)||a.pause()}),n.on("drain",()=>a.resume()),a.on("end",()=>n.end()),n.on("data",b=>{h.add(b),a.write(b)||n.pause()}),a.on("drain",()=>n.resume()),n.on("end",()=>{m=!0,a.end(),q(null)}),n.on("aborted",()=>{let b=Error("Upstream HTTP/2 stream aborted");a.close(e.constants.NGHTTP2_INTERNAL_ERROR),q(b)}),n.on("error",b=>{a.closed||a.close(e.constants.NGHTTP2_INTERNAL_ERROR),q(b)}),a.on("aborted",()=>{n.close(e.constants.NGHTTP2_CANCEL),q(Error("Client HTTP/2 stream aborted"))}),a.on("error",a=>{n.close(e.constants.NGHTTP2_CANCEL),q(a)}),a.on("close",()=>{m||!n||n.closed||(n.close(e.constants.NGHTTP2_CANCEL),q(Error("Client HTTP/2 stream closed")))}),a.resume()}catch(b){a.headersSent||a.closed||a.respond({":status":502,"content-type":"application/json"}),a.closed||a.end(JSON.stringify({error:"Verified upstream HTTP/2 request failed"})),q(b)}}T.on("checkContinue",(a,b)=>{S(a,b,{expectContinue:!0})}),T.on("upgrade",(a,b)=>{M(b,"501 Not Implemented",J),R(a,b,b.__auditTarget)}),T.on("clientError",(a,b)=>C(b)),T.headersTimeout=i.responseHeaderTimeoutMs,T.requestTimeout=0,T.keepAliveTimeout=i.idleTimeoutMs;let W=e.createServer({settings:{enablePush:!1}});W.on("session",a=>{let b={target:a.socket.__auditTarget,authUser:a.socket.__auditProxyUser||null,upstreamPromise:null};z.set(a,b),a.setTimeout(i.idleTimeoutMs,()=>a.destroy(Error("Client HTTP/2 idle timeout"))),a.once("close",()=>{Promise.resolve(b.upstreamPromise).then(a=>a?.close()).catch(()=>{})})}),W.on("stream",(a,b)=>{V(a,b)}),W.on("sessionError",a=>{console.warn("[audit-proxy] HTTP/2 client session error:",a?.message||a)});let X=d.createServer((a,b)=>{b.writeHead(403,{"content-type":"text/plain; charset=utf-8",connection:"close"}),b.end("Audit Proxy accepts HTTPS CONNECT traffic only")});return X.on("connect",(a,b,c)=>{(async()=>{let d,e;try{d=D(a.url,443)}catch(e){let c=e.message||"Invalid CONNECT authority";M(b,"400 Bad Request",c),K(a,b,d,c,{statusCode:400});return}let f=await Q(a,b);if(f===P)return;try{await m(d.host,d.port)}catch(e){let c=e.message||"Destination is not allowed";M(b,"403 Forbidden",c),K(a,b,d,c,{authUser:f});return}if(i.clientToolFilterEnabled&&s(a.headers["user-agent"],o)){let c=`Client tool is not allowed to use this proxy (${t(a.headers["user-agent"])})`;M(b,"403 Forbidden",c),K(a,b,d,c);return}if(!E(d.host,i.allowedHosts)){if(!i.passthroughUnknown){let c="Host is not in the audit allowlist";M(b,"403 Forbidden",c),K(a,b,d,c);return}let e=!1;try{let a=await m(d.host,d.port),f=B(g.connect({host:d.host,port:d.port,lookup:a.lookup,autoSelectFamily:!0})),h=setTimeout(()=>f.destroy(Error("TCP passthrough connect timeout")),i.connectTimeoutMs);h.unref?.(),f.setNoDelay(!0),f.setKeepAlive(!0,3e4),f.setTimeout(i.idleTimeoutMs,()=>f.destroy(Error("TCP passthrough idle timeout"))),f.once("connect",()=>{clearTimeout(h),e=!0,b.write("HTTP/1.1 200 Connection Established\r\nProxy-Agent: BlueRouter-Audit\r\n\r\n"),c?.length&&f.write(c),f.pipe(b),b.pipe(f)}),f.once("error",()=>{clearTimeout(h),e?C(b):M(b,"502 Bad Gateway","TCP passthrough failed")}),b.once("error",()=>C(f)),b.once("close",()=>C(f))}catch(a){M(b,"502 Bad Gateway",a.message||"TCP passthrough failed")}return}try{if(e=j(d.host),!e?.key||!e?.cert)throw Error("Certificate provider returned no certificate")}catch(a){M(b,"500 Internal Server Error",`Cannot issue audit certificate: ${a.message}`);return}b.write("HTTP/1.1 200 Connection Established\r\nProxy-Agent: BlueRouter-Audit\r\n\r\n"),c?.length&&b.unshift(c);let k=B(new h.TLSSocket(b,{isServer:!0,key:e.key,cert:e.cert,ALPNProtocols:i.clientAlpnProtocols}));k.__auditTarget=d,k.__auditProxyUser=f,k.setNoDelay(!0),k.setKeepAlive(!0,3e4),k.setTimeout(i.idleTimeoutMs,()=>k.destroy(Error("Client TLS idle timeout")));let l=setTimeout(()=>k.destroy(Error("Client TLS handshake timeout")),i.tlsHandshakeTimeoutMs);l.unref?.();let n=!1,p=()=>{n||(n=!0,clearTimeout(l),"h2"===k.alpnProtocol?W.emit("connection",k):T.emit("connection",k))};k.once("secure",p),k.once("secureConnect",p),k.once("error",()=>{clearTimeout(l),C(k)}),k.once("close",()=>clearTimeout(l))})().catch(a=>M(b,"500 Internal Server Error",a.message||"Audit CONNECT failed"))}),X.prependListener("connection",a=>{B(a),a.setNoDelay(!0),a.setKeepAlive(!0,3e4)}),X.on("upgrade",(a,b)=>M(b,"501 Not Implemented",J)),X.on("clientError",(a,b)=>C(b)),X.headersTimeout=i.responseHeaderTimeoutMs,X.requestTimeout=0,X.keepAliveTimeout=i.idleTimeoutMs,X.forceCloseAll=()=>{for(let a of A)try{a.destroy()}catch{}for(let a of y.values())try{a.destroy()}catch{}for(let a of[...x])C(a)},X.getActiveConnectionCount=()=>x.size,X.auditConfig=i,X.auditCapabilities={http1:!0,http2:i.clientAlpnProtocols.includes("h2"),proxyAuth:!0===i.proxyAuthEnabled,plainHttp:!1,publicConnectPorts:[...i.allowedConnectPorts]},X},hostMatches:E,parseAuthority:D,stripHopByHop:F,CaptureBuffer:I,detectProvider:J,extractModel:K,decodeCapturedBuffer:G}},33889:(a,b,c)=>{var d=c(45654),e=c(20096),f=a.exports=d.util=d.util||{};function g(a){if(8!==a&&16!==a&&24!==a&&32!==a)throw Error("Only 8, 16, 24, or 32 bits supported: "+a)}function h(a){if(this.data="",this.read=0,"string"==typeof a)this.data=a;else if(f.isArrayBuffer(a)||f.isArrayBufferView(a))if("u">typeof Buffer&&a instanceof Buffer)this.data=a.toString("binary");else{var b=new Uint8Array(a);try{this.data=String.fromCharCode.apply(null,b)}catch(a){for(var c=0;c<b.length;++c)this.putByte(b[c])}}else(a instanceof h||"object"==typeof a&&"string"==typeof a.data&&"number"==typeof a.read)&&(this.data=a.data,this.read=a.read);this._constructedStringLength=0}!function(){if("u">typeof process&&process.nextTick&&1){f.nextTick=process.nextTick,"function"==typeof setImmediate?f.setImmediate=setImmediate:f.setImmediate=f.nextTick;return}if("function"==typeof setImmediate){f.setImmediate=function(){return setImmediate.apply(void 0,arguments)},f.nextTick=function(a){return setImmediate(a)};return}if(f.setImmediate=function(a){setTimeout(a,0)},"u">typeof window&&"function"==typeof window.postMessage){var a="forge.setImmediate",b=[];f.setImmediate=function(c){b.push(c),1===b.length&&window.postMessage(a,"*")},window.addEventListener("message",function(c){if(c.source===window&&c.data===a){c.stopPropagation();var d=b.slice();b.length=0,d.forEach(function(a){a()})}},!0)}if("u">typeof MutationObserver){var c=Date.now(),d=!0,e=document.createElement("div"),b=[];new MutationObserver(function(){var a=b.slice();b.length=0,a.forEach(function(a){a()})}).observe(e,{attributes:!0});var g=f.setImmediate;f.setImmediate=function(a){Date.now()-c>15?(c=Date.now(),g(a)):(b.push(a),1===b.length&&e.setAttribute("a",d=!d))}}f.nextTick=f.setImmediate}(),f.isNodejs="u">typeof process&&process.versions&&process.versions.node,f.globalScope=f.isNodejs?global:"u"<typeof self?window:self,f.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},f.isArrayBuffer=function(a){return"u">typeof ArrayBuffer&&a instanceof ArrayBuffer},f.isArrayBufferView=function(a){return a&&f.isArrayBuffer(a.buffer)&&void 0!==a.byteLength},f.ByteBuffer=h,f.ByteStringBuffer=h,f.ByteStringBuffer.prototype._optimizeConstructedString=function(a){this._constructedStringLength+=a,this._constructedStringLength>4096&&(this.data.substr(0,1),this._constructedStringLength=0)},f.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read},f.ByteStringBuffer.prototype.isEmpty=function(){return 0>=this.length()},f.ByteStringBuffer.prototype.putByte=function(a){return this.putBytes(String.fromCharCode(a))},f.ByteStringBuffer.prototype.fillWithByte=function(a,b){a=String.fromCharCode(a);for(var c=this.data;b>0;)1&b&&(c+=a),(b>>>=1)>0&&(a+=a);return this.data=c,this._optimizeConstructedString(b),this},f.ByteStringBuffer.prototype.putBytes=function(a){return this.data+=a,this._optimizeConstructedString(a.length),this},f.ByteStringBuffer.prototype.putString=function(a){return this.putBytes(f.encodeUtf8(a))},f.ByteStringBuffer.prototype.putInt16=function(a){return this.putBytes(String.fromCharCode(a>>8&255)+String.fromCharCode(255&a))},f.ByteStringBuffer.prototype.putInt24=function(a){return this.putBytes(String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a))},f.ByteStringBuffer.prototype.putInt32=function(a){return this.putBytes(String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a))},f.ByteStringBuffer.prototype.putInt16Le=function(a){return this.putBytes(String.fromCharCode(255&a)+String.fromCharCode(a>>8&255))},f.ByteStringBuffer.prototype.putInt24Le=function(a){return this.putBytes(String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255))},f.ByteStringBuffer.prototype.putInt32Le=function(a){return this.putBytes(String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>24&255))},f.ByteStringBuffer.prototype.putInt=function(a,b){g(b);var c="";do b-=8,c+=String.fromCharCode(a>>b&255);while(b>0);return this.putBytes(c)},f.ByteStringBuffer.prototype.putSignedInt=function(a,b){return a<0&&(a+=2<<b-1),this.putInt(a,b)},f.ByteStringBuffer.prototype.putBuffer=function(a){return this.putBytes(a.getBytes())},f.ByteStringBuffer.prototype.getByte=function(){return this.data.charCodeAt(this.read++)},f.ByteStringBuffer.prototype.getInt16=function(){var a=this.data.charCodeAt(this.read)<<8^this.data.charCodeAt(this.read+1);return this.read+=2,a},f.ByteStringBuffer.prototype.getInt24=function(){var a=this.data.charCodeAt(this.read)<<16^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2);return this.read+=3,a},f.ByteStringBuffer.prototype.getInt32=function(){var a=this.data.charCodeAt(this.read)<<24^this.data.charCodeAt(this.read+1)<<16^this.data.charCodeAt(this.read+2)<<8^this.data.charCodeAt(this.read+3);return this.read+=4,a},f.ByteStringBuffer.prototype.getInt16Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8;return this.read+=2,a},f.ByteStringBuffer.prototype.getInt24Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16;return this.read+=3,a},f.ByteStringBuffer.prototype.getInt32Le=function(){var a=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16^this.data.charCodeAt(this.read+3)<<24;return this.read+=4,a},f.ByteStringBuffer.prototype.getInt=function(a){g(a);var b=0;do b=(b<<8)+this.data.charCodeAt(this.read++),a-=8;while(a>0);return b},f.ByteStringBuffer.prototype.getSignedInt=function(a){var b=this.getInt(a),c=2<<a-2;return b>=c&&(b-=c<<1),b},f.ByteStringBuffer.prototype.getBytes=function(a){var b;return a?(a=Math.min(this.length(),a),b=this.data.slice(this.read,this.read+a),this.read+=a):0===a?b="":(b=0===this.read?this.data:this.data.slice(this.read),this.clear()),b},f.ByteStringBuffer.prototype.bytes=function(a){return void 0===a?this.data.slice(this.read):this.data.slice(this.read,this.read+a)},f.ByteStringBuffer.prototype.at=function(a){return this.data.charCodeAt(this.read+a)},f.ByteStringBuffer.prototype.setAt=function(a,b){return this.data=this.data.substr(0,this.read+a)+String.fromCharCode(b)+this.data.substr(this.read+a+1),this},f.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},f.ByteStringBuffer.prototype.copy=function(){var a=f.createBuffer(this.data);return a.read=this.read,a},f.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},f.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this},f.ByteStringBuffer.prototype.truncate=function(a){var b=Math.max(0,this.length()-a);return this.data=this.data.substr(this.read,b),this.read=0,this},f.ByteStringBuffer.prototype.toHex=function(){for(var a="",b=this.read;b<this.data.length;++b){var c=this.data.charCodeAt(b);c<16&&(a+="0"),a+=c.toString(16)}return a},f.ByteStringBuffer.prototype.toString=function(){return f.decodeUtf8(this.bytes())},f.DataBuffer=function(a,b){b=b||{},this.read=b.readOffset||0,this.growSize=b.growSize||1024;var c=f.isArrayBuffer(a),d=f.isArrayBufferView(a);if(c||d){c?this.data=new DataView(a):this.data=new DataView(a.buffer,a.byteOffset,a.byteLength),this.write="writeOffset"in b?b.writeOffset:this.data.byteLength;return}this.data=new DataView(new ArrayBuffer(0)),this.write=0,null!=a&&this.putBytes(a),"writeOffset"in b&&(this.write=b.writeOffset)},f.DataBuffer.prototype.length=function(){return this.write-this.read},f.DataBuffer.prototype.isEmpty=function(){return 0>=this.length()},f.DataBuffer.prototype.accommodate=function(a,b){if(this.length()>=a)return this;b=Math.max(b||this.growSize,a);var c=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),d=new Uint8Array(this.length()+b);return d.set(c),this.data=new DataView(d.buffer),this},f.DataBuffer.prototype.putByte=function(a){return this.accommodate(1),this.data.setUint8(this.write++,a),this},f.DataBuffer.prototype.fillWithByte=function(a,b){this.accommodate(b);for(var c=0;c<b;++c)this.data.setUint8(a);return this},f.DataBuffer.prototype.putBytes=function(a,b){if(f.isArrayBufferView(a)){var c,d=new Uint8Array(a.buffer,a.byteOffset,a.byteLength),e=d.byteLength-d.byteOffset;this.accommodate(e);var g=new Uint8Array(this.data.buffer,this.write);return g.set(d),this.write+=e,this}if(f.isArrayBuffer(a)){var d=new Uint8Array(a);this.accommodate(d.byteLength);var g=new Uint8Array(this.data.buffer);return g.set(d,this.write),this.write+=d.byteLength,this}if(a instanceof f.DataBuffer||"object"==typeof a&&"number"==typeof a.read&&"number"==typeof a.write&&f.isArrayBufferView(a.data)){var d=new Uint8Array(a.data.byteLength,a.read,a.length());this.accommodate(d.byteLength);var g=new Uint8Array(a.data.byteLength,this.write);return g.set(d),this.write+=d.byteLength,this}if(a instanceof f.ByteStringBuffer&&(a=a.data,b="binary"),b=b||"binary","string"==typeof a){if("hex"===b)return this.accommodate(Math.ceil(a.length/2)),c=new Uint8Array(this.data.buffer,this.write),this.write+=f.binary.hex.decode(a,c,this.write),this;if("base64"===b)return this.accommodate(3*Math.ceil(a.length/4)),c=new Uint8Array(this.data.buffer,this.write),this.write+=f.binary.base64.decode(a,c,this.write),this;if("utf8"===b&&(a=f.encodeUtf8(a),b="binary"),"binary"===b||"raw"===b)return this.accommodate(a.length),c=new Uint8Array(this.data.buffer,this.write),this.write+=f.binary.raw.decode(c),this;if("utf16"===b)return this.accommodate(2*a.length),c=new Uint16Array(this.data.buffer,this.write),this.write+=f.text.utf16.encode(c),this;throw Error("Invalid encoding: "+b)}throw Error("Invalid parameter: "+a)},f.DataBuffer.prototype.putBuffer=function(a){return this.putBytes(a),a.clear(),this},f.DataBuffer.prototype.putString=function(a){return this.putBytes(a,"utf16")},f.DataBuffer.prototype.putInt16=function(a){return this.accommodate(2),this.data.setInt16(this.write,a),this.write+=2,this},f.DataBuffer.prototype.putInt24=function(a){return this.accommodate(3),this.data.setInt16(this.write,a>>8&65535),this.data.setInt8(this.write,a>>16&255),this.write+=3,this},f.DataBuffer.prototype.putInt32=function(a){return this.accommodate(4),this.data.setInt32(this.write,a),this.write+=4,this},f.DataBuffer.prototype.putInt16Le=function(a){return this.accommodate(2),this.data.setInt16(this.write,a,!0),this.write+=2,this},f.DataBuffer.prototype.putInt24Le=function(a){return this.accommodate(3),this.data.setInt8(this.write,a>>16&255),this.data.setInt16(this.write,a>>8&65535,!0),this.write+=3,this},f.DataBuffer.prototype.putInt32Le=function(a){return this.accommodate(4),this.data.setInt32(this.write,a,!0),this.write+=4,this},f.DataBuffer.prototype.putInt=function(a,b){g(b),this.accommodate(b/8);do b-=8,this.data.setInt8(this.write++,a>>b&255);while(b>0);return this},f.DataBuffer.prototype.putSignedInt=function(a,b){return g(b),this.accommodate(b/8),a<0&&(a+=2<<b-1),this.putInt(a,b)},f.DataBuffer.prototype.getByte=function(){return this.data.getInt8(this.read++)},f.DataBuffer.prototype.getInt16=function(){var a=this.data.getInt16(this.read);return this.read+=2,a},f.DataBuffer.prototype.getInt24=function(){var a=this.data.getInt16(this.read)<<8^this.data.getInt8(this.read+2);return this.read+=3,a},f.DataBuffer.prototype.getInt32=function(){var a=this.data.getInt32(this.read);return this.read+=4,a},f.DataBuffer.prototype.getInt16Le=function(){var a=this.data.getInt16(this.read,!0);return this.read+=2,a},f.DataBuffer.prototype.getInt24Le=function(){var a=this.data.getInt8(this.read)^this.data.getInt16(this.read+1,!0)<<8;return this.read+=3,a},f.DataBuffer.prototype.getInt32Le=function(){var a=this.data.getInt32(this.read,!0);return this.read+=4,a},f.DataBuffer.prototype.getInt=function(a){g(a);var b=0;do b=(b<<8)+this.data.getInt8(this.read++),a-=8;while(a>0);return b},f.DataBuffer.prototype.getSignedInt=function(a){var b=this.getInt(a),c=2<<a-2;return b>=c&&(b-=c<<1),b},f.DataBuffer.prototype.getBytes=function(a){var b;return a?(a=Math.min(this.length(),a),b=this.data.slice(this.read,this.read+a),this.read+=a):0===a?b="":(b=0===this.read?this.data:this.data.slice(this.read),this.clear()),b},f.DataBuffer.prototype.bytes=function(a){return void 0===a?this.data.slice(this.read):this.data.slice(this.read,this.read+a)},f.DataBuffer.prototype.at=function(a){return this.data.getUint8(this.read+a)},f.DataBuffer.prototype.setAt=function(a,b){return this.data.setUint8(a,b),this},f.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)},f.DataBuffer.prototype.copy=function(){return new f.DataBuffer(this)},f.DataBuffer.prototype.compact=function(){if(this.read>0){var a=new Uint8Array(this.data.buffer,this.read),b=new Uint8Array(a.byteLength);b.set(a),this.data=new DataView(b),this.write-=this.read,this.read=0}return this},f.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this},f.DataBuffer.prototype.truncate=function(a){return this.write=Math.max(0,this.length()-a),this.read=Math.min(this.read,this.write),this},f.DataBuffer.prototype.toHex=function(){for(var a="",b=this.read;b<this.data.byteLength;++b){var c=this.data.getUint8(b);c<16&&(a+="0"),a+=c.toString(16)}return a},f.DataBuffer.prototype.toString=function(a){var b=new Uint8Array(this.data,this.read,this.length());if("binary"===(a=a||"utf8")||"raw"===a)return f.binary.raw.encode(b);if("hex"===a)return f.binary.hex.encode(b);if("base64"===a)return f.binary.base64.encode(b);if("utf8"===a)return f.text.utf8.decode(b);if("utf16"===a)return f.text.utf16.decode(b);throw Error("Invalid encoding: "+a)},f.createBuffer=function(a,b){return b=b||"raw",void 0!==a&&"utf8"===b&&(a=f.encodeUtf8(a)),new f.ByteBuffer(a)},f.fillString=function(a,b){for(var c="";b>0;)1&b&&(c+=a),(b>>>=1)>0&&(a+=a);return c},f.xorBytes=function(a,b,c){for(var d="",e="",f="",g=0,h=0;c>0;--c,++g)e=a.charCodeAt(g)^b.charCodeAt(g),h>=10&&(d+=f,f="",h=0),f+=String.fromCharCode(e),++h;return d+f},f.hexToBytes=function(a){var b="",c=0;for(!0&a.length&&(c=1,b+=String.fromCharCode(parseInt(a[0],16)));c<a.length;c+=2)b+=String.fromCharCode(parseInt(a.substr(c,2),16));return b},f.bytesToHex=function(a){return f.createBuffer(a).toHex()},f.int32ToBytes=function(a){return String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a)};var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",j=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],k="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";f.encode64=function(a,b){for(var c,d,e,f="",g="",h=0;h<a.length;)c=a.charCodeAt(h++),d=a.charCodeAt(h++),e=a.charCodeAt(h++),f+=i.charAt(c>>2),f+=i.charAt((3&c)<<4|d>>4),isNaN(d)?f+="==":(f+=i.charAt((15&d)<<2|e>>6),f+=isNaN(e)?"=":i.charAt(63&e)),b&&f.length>b&&(g+=f.substr(0,b)+"\r\n",f=f.substr(b));return g+f},f.decode64=function(a){a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var b,c,d,e,f="",g=0;g<a.length;)b=j[a.charCodeAt(g++)-43],c=j[a.charCodeAt(g++)-43],d=j[a.charCodeAt(g++)-43],e=j[a.charCodeAt(g++)-43],f+=String.fromCharCode(b<<2|c>>4),64!==d&&(f+=String.fromCharCode((15&c)<<4|d>>2),64!==e&&(f+=String.fromCharCode((3&d)<<6|e)));return f},f.encodeUtf8=function(a){return unescape(encodeURIComponent(a))},f.decodeUtf8=function(a){return decodeURIComponent(escape(a))},f.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:e.encode,decode:e.decode}},f.binary.raw.encode=function(a){return String.fromCharCode.apply(null,a)},f.binary.raw.decode=function(a,b,c){var d=b;d||(d=new Uint8Array(a.length));for(var e=c=c||0,f=0;f<a.length;++f)d[e++]=a.charCodeAt(f);return b?e-c:d},f.binary.hex.encode=f.bytesToHex,f.binary.hex.decode=function(a,b,c){var d=b;d||(d=new Uint8Array(Math.ceil(a.length/2)));var e=0,f=c=c||0;for(1&a.length&&(e=1,d[f++]=parseInt(a[0],16));e<a.length;e+=2)d[f++]=parseInt(a.substr(e,2),16);return b?f-c:d},f.binary.base64.encode=function(a,b){for(var c,d,e,f="",g="",h=0;h<a.byteLength;)c=a[h++],d=a[h++],e=a[h++],f+=i.charAt(c>>2),f+=i.charAt((3&c)<<4|d>>4),isNaN(d)?f+="==":(f+=i.charAt((15&d)<<2|e>>6),f+=isNaN(e)?"=":i.charAt(63&e)),b&&f.length>b&&(g+=f.substr(0,b)+"\r\n",f=f.substr(b));return g+f},f.binary.base64.decode=function(a,b,c){var d,e,f,g,h=b;h||(h=new Uint8Array(3*Math.ceil(a.length/4))),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0,k=c=c||0;i<a.length;)d=j[a.charCodeAt(i++)-43],e=j[a.charCodeAt(i++)-43],f=j[a.charCodeAt(i++)-43],g=j[a.charCodeAt(i++)-43],h[k++]=d<<2|e>>4,64!==f&&(h[k++]=(15&e)<<4|f>>2,64!==g&&(h[k++]=(3&f)<<6|g));return b?k-c:h.subarray(0,k)},f.binary.base58.encode=function(a,b){return f.binary.baseN.encode(a,k,b)},f.binary.base58.decode=function(a,b){return f.binary.baseN.decode(a,k,b)},f.text={utf8:{},utf16:{}},f.text.utf8.encode=function(a,b,c){a=f.encodeUtf8(a);var d=b;d||(d=new Uint8Array(a.length));for(var e=c=c||0,g=0;g<a.length;++g)d[e++]=a.charCodeAt(g);return b?e-c:d},f.text.utf8.decode=function(a){return f.decodeUtf8(String.fromCharCode.apply(null,a))},f.text.utf16.encode=function(a,b,c){var d=b;d||(d=new Uint8Array(2*a.length));for(var e=new Uint16Array(d.buffer),f=c=c||0,g=c,h=0;h<a.length;++h)e[g++]=a.charCodeAt(h),f+=2;return b?f-c:d},f.text.utf16.decode=function(a){return String.fromCharCode.apply(null,new Uint16Array(a.buffer))},f.deflate=function(a,b,c){if(b=f.decode64(a.deflate(f.encode64(b)).rval),c){var d=2;32&b.charCodeAt(1)&&(d=6),b=b.substring(d,b.length-4)}return b},f.inflate=function(a,b,c){var d=a.inflate(f.encode64(b)).rval;return null===d?null:f.decode64(d)};var l=function(a,b,c){if(!a)throw Error("WebStorage not available.");if(null===c?d=a.removeItem(b):(c=f.encode64(JSON.stringify(c)),d=a.setItem(b,c)),void 0!==d&&!0!==d.rval){var d,e=Error(d.error.message);throw e.id=d.error.id,e.name=d.error.name,e}},m=function(a,b){if(!a)throw Error("WebStorage not available.");var c=a.getItem(b);if(a.init)if(null===c.rval){if(c.error){var d=Error(c.error.message);throw d.id=c.error.id,d.name=c.error.name,d}c=null}else c=c.rval;return null!==c&&(c=JSON.parse(f.decode64(c))),c},n=function(a,b,c,d){var e=m(a,b);null===e&&(e={}),e[c]=d,l(a,b,e)},o=function(a,b,c){var d=m(a,b);return null!==d&&(d=c in d?d[c]:null),d},p=function(a,b,c){var d=m(a,b);if(null!==d&&c in d){delete d[c];var e=!0;for(var f in d){e=!1;break}e&&(d=null),l(a,b,d)}},q=function(a,b){l(a,b,null)},r=function(a,b,c){var d,e=null;void 0===c&&(c=["web","flash"]);var f=!1,g=null;for(var h in c){d=c[h];try{if("flash"===d||"both"===d){if(null===b[0])throw Error("Flash local storage not available.");e=a.apply(this,b),f="flash"===d}("web"===d||"both"===d)&&(b[0]=localStorage,e=a.apply(this,b),f=!0)}catch(a){g=a}if(f)break}if(!f)throw g;return e};f.setItem=function(a,b,c,d,e){r(n,arguments,e)},f.getItem=function(a,b,c,d){return r(o,arguments,d)},f.removeItem=function(a,b,c,d){r(p,arguments,d)},f.clearItems=function(a,b,c){r(q,arguments,c)},f.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},f.format=function(a){for(var b,c,d=/%./g,e=0,f=[],g=0;b=d.exec(a);){(c=a.substring(g,d.lastIndex-2)).length>0&&f.push(c),g=d.lastIndex;var h=b[0][1];switch(h){case"s":case"o":e<arguments.length?f.push(arguments[e+++1]):f.push("<?>");break;case"%":f.push("%");break;default:f.push("<%"+h+"?>")}}return f.push(a.substring(g)),f.join("")},f.formatNumber=function(a,b,c,d){var e=a,f=isNaN(b=Math.abs(b))?2:b,g=void 0===d?".":d,h=e<0?"-":"",i=parseInt(e=Math.abs(+e||0).toFixed(f),10)+"",j=i.length>3?i.length%3:0;return h+(j?i.substr(0,j)+g:"")+i.substr(j).replace(/(\d{3})(?=\d)/g,"$1"+g)+(f?(void 0===c?",":c)+Math.abs(e-i).toFixed(f).slice(2):"")},f.formatSize=function(a){return a>=0x40000000?f.formatNumber(a/0x40000000,2,".","")+" GiB":a>=1048576?f.formatNumber(a/1048576,2,".","")+" MiB":a>=1024?f.formatNumber(a/1024,0)+" KiB":f.formatNumber(a,0)+" bytes"},f.bytesFromIP=function(a){return -1!==a.indexOf(".")?f.bytesFromIPv4(a):-1!==a.indexOf(":")?f.bytesFromIPv6(a):null},f.bytesFromIPv4=function(a){if(4!==(a=a.split(".")).length)return null;for(var b=f.createBuffer(),c=0;c<a.length;++c){var d=parseInt(a[c],10);if(isNaN(d))return null;b.putByte(d)}return b.getBytes()},f.bytesFromIPv6=function(a){for(var b=0,c=(8-(a=a.split(":").filter(function(a){return 0===a.length&&++b,!0})).length+b)*2,d=f.createBuffer(),e=0;e<8;++e){if(!a[e]||0===a[e].length){d.fillWithByte(0,c),c=0;continue}var g=f.hexToBytes(a[e]);g.length<2&&d.putByte(0),d.putBytes(g)}return d.getBytes()},f.bytesToIP=function(a){return 4===a.length?f.bytesToIPv4(a):16===a.length?f.bytesToIPv6(a):null},f.bytesToIPv4=function(a){if(4!==a.length)return null;for(var b=[],c=0;c<a.length;++c)b.push(a.charCodeAt(c));return b.join(".")},f.bytesToIPv6=function(a){if(16!==a.length)return null;for(var b=[],c=[],d=0,e=0;e<a.length;e+=2){for(var g=f.bytesToHex(a[e]+a[e+1]);"0"===g[0]&&"0"!==g;)g=g.substr(1);if("0"===g){var h=c[c.length-1],i=b.length;h&&i===h.end+1?(h.end=i,h.end-h.start>c[d].end-c[d].start&&(d=c.length-1)):c.push({start:i,end:i})}b.push(g)}if(c.length>0){var j=c[d];j.end-j.start>0&&(b.splice(j.start,j.end-j.start+1,""),0===j.start&&b.unshift(""),7===j.end&&b.push(""))}return b.join(":")},f.estimateCores=function(a,b){if("function"==typeof a&&(b=a,a={}),a=a||{},"cores"in f&&!a.update)return b(null,f.cores);if("u">typeof navigator&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return f.cores=navigator.hardwareConcurrency,b(null,f.cores);if("u"<typeof Worker)return f.cores=1,b(null,f.cores);if("u"<typeof Blob)return f.cores=2,b(null,f.cores);var c=URL.createObjectURL(new Blob(["(",(function(){self.addEventListener("message",function(a){for(var b=Date.now(),c=b+4;Date.now()<c;);self.postMessage({st:b,et:c})})}).toString(),")()"],{type:"application/javascript"}));!function a(d,e,g){if(0===e)return f.cores=Math.max(1,Math.floor(d.reduce(function(a,b){return a+b},0)/d.length)),URL.revokeObjectURL(c),b(null,f.cores);!function(a,b){for(var d=[],e=[],f=0;f<a;++f){var g=new Worker(c);g.addEventListener("message",function(c){if(e.push(c.data),e.length===a){for(var f=0;f<a;++f)d[f].terminate();b(null,e)}}),d.push(g)}for(var f=0;f<a;++f)d[f].postMessage(f)}(g,function(b,c){d.push(function(a,b){for(var c=[],d=0;d<a;++d)for(var e=b[d],f=c[d]=[],g=0;g<a;++g)if(d!==g){var h=b[g];(e.st>h.st&&e.st<h.et||h.st>e.st&&h.st<e.et)&&f.push(g)}return c.reduce(function(a,b){return Math.max(a,b.length)},0)}(g,c)),a(d,e-1,g)})}([],5,16)}},36105:(a,b,c)=>{var d=c(45654);d.pki=d.pki||{};var e=a.exports=d.pki.oids=d.oids=d.oids||{};function f(a,b){e[a]=b,e[b]=a}f("1.2.840.113549.1.1.1","rsaEncryption"),f("1.2.840.113549.1.1.4","md5WithRSAEncryption"),f("1.2.840.113549.1.1.5","sha1WithRSAEncryption"),f("1.2.840.113549.1.1.7","RSAES-OAEP"),f("1.2.840.113549.1.1.8","mgf1"),f("1.2.840.113549.1.1.9","pSpecified"),f("1.2.840.113549.1.1.10","RSASSA-PSS"),f("1.2.840.113549.1.1.11","sha256WithRSAEncryption"),f("1.2.840.113549.1.1.12","sha384WithRSAEncryption"),f("1.2.840.113549.1.1.13","sha512WithRSAEncryption"),f("1.3.101.112","EdDSA25519"),f("1.2.840.10040.4.3","dsa-with-sha1"),f("1.3.14.3.2.7","desCBC"),f("1.3.14.3.2.26","sha1"),f("1.3.14.3.2.29","sha1WithRSASignature"),f("2.16.840.1.101.3.4.2.1","sha256"),f("2.16.840.1.101.3.4.2.2","sha384"),f("2.16.840.1.101.3.4.2.3","sha512"),f("2.16.840.1.101.3.4.2.4","sha224"),f("2.16.840.1.101.3.4.2.5","sha512-224"),f("2.16.840.1.101.3.4.2.6","sha512-256"),f("1.2.840.113549.2.2","md2"),f("1.2.840.113549.2.5","md5"),f("1.2.840.113549.1.7.1","data"),f("1.2.840.113549.1.7.2","signedData"),f("1.2.840.113549.1.7.3","envelopedData"),f("1.2.840.113549.1.7.4","signedAndEnvelopedData"),f("1.2.840.113549.1.7.5","digestedData"),f("1.2.840.113549.1.7.6","encryptedData"),f("1.2.840.113549.1.9.1","emailAddress"),f("1.2.840.113549.1.9.2","unstructuredName"),f("1.2.840.113549.1.9.3","contentType"),f("1.2.840.113549.1.9.4","messageDigest"),f("1.2.840.113549.1.9.5","signingTime"),f("1.2.840.113549.1.9.6","counterSignature"),f("1.2.840.113549.1.9.7","challengePassword"),f("1.2.840.113549.1.9.8","unstructuredAddress"),f("1.2.840.113549.1.9.14","extensionRequest"),f("1.2.840.113549.1.9.20","friendlyName"),f("1.2.840.113549.1.9.21","localKeyId"),f("1.2.840.113549.1.9.22.1","x509Certificate"),f("1.2.840.113549.1.12.10.1.1","keyBag"),f("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag"),f("1.2.840.113549.1.12.10.1.3","certBag"),f("1.2.840.113549.1.12.10.1.4","crlBag"),f("1.2.840.113549.1.12.10.1.5","secretBag"),f("1.2.840.113549.1.12.10.1.6","safeContentsBag"),f("1.2.840.113549.1.5.13","pkcs5PBES2"),f("1.2.840.113549.1.5.12","pkcs5PBKDF2"),f("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4"),f("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4"),f("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC"),f("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC"),f("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC"),f("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC"),f("1.2.840.113549.2.7","hmacWithSHA1"),f("1.2.840.113549.2.8","hmacWithSHA224"),f("1.2.840.113549.2.9","hmacWithSHA256"),f("1.2.840.113549.2.10","hmacWithSHA384"),f("1.2.840.113549.2.11","hmacWithSHA512"),f("1.2.840.113549.3.7","des-EDE3-CBC"),f("2.16.840.1.101.3.4.1.2","aes128-CBC"),f("2.16.840.1.101.3.4.1.22","aes192-CBC"),f("2.16.840.1.101.3.4.1.42","aes256-CBC"),f("2.5.4.3","commonName"),f("2.5.4.4","surname"),f("2.5.4.5","serialNumber"),f("2.5.4.6","countryName"),f("2.5.4.7","localityName"),f("2.5.4.8","stateOrProvinceName"),f("2.5.4.9","streetAddress"),f("2.5.4.10","organizationName"),f("2.5.4.11","organizationalUnitName"),f("2.5.4.12","title"),f("2.5.4.13","description"),f("2.5.4.15","businessCategory"),f("2.5.4.17","postalCode"),f("2.5.4.42","givenName"),f("2.5.4.65","pseudonym"),f("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName"),f("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName"),f("2.16.840.1.113730.1.1","nsCertType"),f("2.16.840.1.113730.1.13","nsComment"),e["2.5.29.1"]="authorityKeyIdentifier",e["2.5.29.2"]="keyAttributes",e["2.5.29.3"]="certificatePolicies",e["2.5.29.4"]="keyUsageRestriction",e["2.5.29.5"]="policyMapping",e["2.5.29.6"]="subtreesConstraint",e["2.5.29.7"]="subjectAltName",e["2.5.29.8"]="issuerAltName",e["2.5.29.9"]="subjectDirectoryAttributes",e["2.5.29.10"]="basicConstraints",e["2.5.29.11"]="nameConstraints",e["2.5.29.12"]="policyConstraints",e["2.5.29.13"]="basicConstraints",f("2.5.29.14","subjectKeyIdentifier"),f("2.5.29.15","keyUsage"),e["2.5.29.16"]="privateKeyUsagePeriod",f("2.5.29.17","subjectAltName"),f("2.5.29.18","issuerAltName"),f("2.5.29.19","basicConstraints"),e["2.5.29.20"]="cRLNumber",e["2.5.29.21"]="cRLReason",e["2.5.29.22"]="expirationDate",e["2.5.29.23"]="instructionCode",e["2.5.29.24"]="invalidityDate",e["2.5.29.25"]="cRLDistributionPoints",e["2.5.29.26"]="issuingDistributionPoint",e["2.5.29.27"]="deltaCRLIndicator",e["2.5.29.28"]="issuingDistributionPoint",e["2.5.29.29"]="certificateIssuer",e["2.5.29.30"]="nameConstraints",f("2.5.29.31","cRLDistributionPoints"),f("2.5.29.32","certificatePolicies"),e["2.5.29.33"]="policyMappings",e["2.5.29.34"]="policyConstraints",f("2.5.29.35","authorityKeyIdentifier"),e["2.5.29.36"]="policyConstraints",f("2.5.29.37","extKeyUsage"),e["2.5.29.46"]="freshestCRL",e["2.5.29.54"]="inhibitAnyPolicy",f("1.3.6.1.4.1.11129.2.4.2","timestampList"),f("1.3.6.1.5.5.7.1.1","authorityInfoAccess"),f("1.3.6.1.5.5.7.3.1","serverAuth"),f("1.3.6.1.5.5.7.3.2","clientAuth"),f("1.3.6.1.5.5.7.3.3","codeSigning"),f("1.3.6.1.5.5.7.3.4","emailProtection"),f("1.3.6.1.5.5.7.3.8","timeStamping")},36902:(a,b,c)=>{var d=c(45654);c(33889),c(32e3),c(29984),function(){if(d.prime){a.exports=d.prime;return}var b=a.exports=d.prime=d.prime||{},c=d.jsbn.BigInteger,e=[6,4,2,4,2,4,6,2],f=new c(null);f.fromInt(30);var g=function(a,b){return a|b};function h(a,b,c,f){var g,h=i(a,b),j=(g=h.bitLength())<=100?27:g<=150?18:g<=200?15:g<=250?12:g<=300?9:g<=350?8:g<=400?7:g<=500?6:g<=600?5:g<=800?4:g<=1250?3:2;"millerRabinTests"in c&&(j=c.millerRabinTests);var k=10;"maxBlockTime"in c&&(k=c.maxBlockTime),function a(b,c,f,g,h,j,k){var l=+new Date;do{if(b.bitLength()>c&&(b=i(c,f)),b.isProbablePrime(h))return k(null,b);b.dAddOffset(e[g++%8],0)}while(j<0||new Date-l<j);d.util.setImmediate(function(){a(b,c,f,g,h,j,k)})}(h,a,b,0,j,k,f)}function i(a,b){var d=new c(a,b),e=a-1;return d.testBit(e)||d.bitwiseTo(c.ONE.shiftLeft(e),g,d),d.dAddOffset(31-d.mod(f).byteValue(),0),d}b.generateProbablePrime=function(a,b,e){"function"==typeof b&&(e=b,b={});var f,g,j,k,l=(b=b||{}).algorithm||"PRIMEINC";"string"==typeof l&&(l={name:l}),l.options=l.options||{};var m=b.prng||d.random;if("PRIMEINC"===l.name){return f=a,g={nextBytes:function(a){for(var b=m.getBytesSync(a.length),c=0;c<a.length;++c)a[c]=b.charCodeAt(c)}},j=l.options,k=e,"workers"in j?function(a,b,e,f){if("u"<typeof Worker)return h(a,b,e,f);var g=i(a,b),j=e.workers,k=e.workLoad||100,l=30*k/8,m=e.workerScript||"forge/prime.worker.js";if(-1===j)return d.util.estimateCores(function(a,b){a&&(b=2),j=b-1,n()});function n(){j=Math.max(1,j);for(var d=[],e=0;e<j;++e)d[e]=new Worker(m);for(var h=j,e=0;e<j;++e)d[e].addEventListener("message",o);var n=!1;function o(e){if(!n){--h;var j=e.data;if(j.found){for(var m=0;m<d.length;++m)d[m].terminate();return n=!0,f(null,new c(j.prime,16))}g.bitLength()>a&&(g=i(a,b));var o=g.toString(16);e.target.postMessage({hex:o,workLoad:k}),g.dAddOffset(l,0)}}}n()}(f,g,j,k):h(f,g,j,k)}throw Error("Invalid prime generation algorithm: "+l.name)}}()},37436:(a,b,c)=>{"use strict";let d=c(29021),e=c(33873),f=c(21820),g="bluerouter";function h(){return"win32"===process.platform?e.join(process.env.APPDATA||e.join(f.homedir(),"AppData","Roaming"),g):e.join(f.homedir(),`.${g}`)}let i=function(){let a=process.env.DATA_DIR;if(!a)return h();try{return d.mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${g}`),h();throw b}}(),j=e.join(i,"mitm");a.exports={DATA_DIR:i,MITM_DIR:j}},37691:(a,b,c)=>{var d=c(45654);c(1277),c(33889);var e=a.exports=d.sha512=d.sha512||{};d.md.sha512=d.md.algorithms.sha512=e;var f=d.sha384=d.sha512.sha384=d.sha512.sha384||{};f.create=function(){return e.create("SHA-384")},d.md.sha384=d.md.algorithms.sha384=f,d.sha512.sha256=d.sha512.sha256||{create:function(){return e.create("SHA-512/256")}},d.md["sha512/256"]=d.md.algorithms["sha512/256"]=d.sha512.sha256,d.sha512.sha224=d.sha512.sha224||{create:function(){return e.create("SHA-512/224")}},d.md["sha512/224"]=d.md.algorithms["sha512/224"]=d.sha512.sha224,e.create=function(a){if(h||(g=String.fromCharCode(128)+d.util.fillString("\0",128),i=[[0x428a2f98,0xd728ae22],[0x71374491,0x23ef65cd],[0xb5c0fbcf,0xec4d3b2f],[0xe9b5dba5,0x8189dbbc],[0x3956c25b,0xf348b538],[0x59f111f1,0xb605d019],[0x923f82a4,0xaf194f9b],[0xab1c5ed5,0xda6d8118],[0xd807aa98,0xa3030242],[0x12835b01,0x45706fbe],[0x243185be,0x4ee4b28c],[0x550c7dc3,0xd5ffb4e2],[0x72be5d74,0xf27b896f],[0x80deb1fe,0x3b1696b1],[0x9bdc06a7,0x25c71235],[0xc19bf174,0xcf692694],[0xe49b69c1,0x9ef14ad2],[0xefbe4786,0x384f25e3],[0xfc19dc6,0x8b8cd5b5],[0x240ca1cc,0x77ac9c65],[0x2de92c6f,0x592b0275],[0x4a7484aa,0x6ea6e483],[0x5cb0a9dc,0xbd41fbd4],[0x76f988da,0x831153b5],[0x983e5152,0xee66dfab],[0xa831c66d,0x2db43210],[0xb00327c8,0x98fb213f],[0xbf597fc7,0xbeef0ee4],[0xc6e00bf3,0x3da88fc2],[0xd5a79147,0x930aa725],[0x6ca6351,0xe003826f],[0x14292967,0xa0e6e70],[0x27b70a85,0x46d22ffc],[0x2e1b2138,0x5c26c926],[0x4d2c6dfc,0x5ac42aed],[0x53380d13,0x9d95b3df],[0x650a7354,0x8baf63de],[0x766a0abb,0x3c77b2a8],[0x81c2c92e,0x47edaee6],[0x92722c85,0x1482353b],[0xa2bfe8a1,0x4cf10364],[0xa81a664b,0xbc423001],[0xc24b8b70,0xd0f89791],[0xc76c51a3,0x654be30],[0xd192e819,0xd6ef5218],[0xd6990624,0x5565a910],[0xf40e3585,0x5771202a],[0x106aa070,0x32bbd1b8],[0x19a4c116,0xb8d2d0c8],[0x1e376c08,0x5141ab53],[0x2748774c,0xdf8eeb99],[0x34b0bcb5,0xe19b48a8],[0x391c0cb3,0xc5c95a63],[0x4ed8aa4a,0xe3418acb],[0x5b9cca4f,0x7763e373],[0x682e6ff3,0xd6b2b8a3],[0x748f82ee,0x5defb2fc],[0x78a5636f,0x43172f60],[0x84c87814,0xa1f0ab72],[0x8cc70208,0x1a6439ec],[0x90befffa,0x23631e28],[0xa4506ceb,0xde82bde9],[0xbef9a3f7,0xb2c67915],[0xc67178f2,0xe372532b],[0xca273ece,0xea26619c],[0xd186b8c7,0x21c0c207],[0xeada7dd6,0xcde0eb1e],[0xf57d4f7f,0xee6ed178],[0x6f067aa,0x72176fba],[0xa637dc5,0xa2c898a6],[0x113f9804,0xbef90dae],[0x1b710b35,0x131c471b],[0x28db77f5,0x23047d84],[0x32caab7b,0x40c72493],[0x3c9ebe0a,0x15c9bebc],[0x431d67c4,0x9c100d4c],[0x4cc5d4be,0xcb3e42b6],[0x597f299c,0xfc657e2a],[0x5fcb6fab,0x3ad6faec],[0x6c44198c,0x4a475817]],(j={})["SHA-512"]=[[0x6a09e667,0xf3bcc908],[0xbb67ae85,0x84caa73b],[0x3c6ef372,0xfe94f82b],[0xa54ff53a,0x5f1d36f1],[0x510e527f,0xade682d1],[0x9b05688c,0x2b3e6c1f],[0x1f83d9ab,0xfb41bd6b],[0x5be0cd19,0x137e2179]],j["SHA-384"]=[[0xcbbb9d5d,0xc1059ed8],[0x629a292a,0x367cd507],[0x9159015a,0x3070dd17],[0x152fecd8,0xf70e5939],[0x67332667,0xffc00b31],[0x8eb44a87,0x68581511],[0xdb0c2e0d,0x64f98fa7],[0x47b5481d,0xbefa4fa4]],j["SHA-512/256"]=[[0x22312194,0xfc2bf72c],[0x9f555fa3,0xc84c64c2],[0x2393b86b,0x6f53b151],[0x96387719,0x5940eabd],[0x96283ee2,0xa88effe3],[0xbe5e1e25,0x53863992],[0x2b0199fc,0x2c85b8aa],[0xeb72ddc,0x81c52ca2]],j["SHA-512/224"]=[[0x8c3d37c8,0x19544da2],[0x73e19966,0x89dcd4d6],[0x1dfab7ae,0x32ff9c82],[0x679dd514,0x582f9fcf],[0xf6d2b69,0x7bd44da8],[0x77e36f73,0x4c48942],[0x3f9d85a8,0x6a1d36c8],[0x1112e6ad,0x91d692a1]],h=!0),void 0===a&&(a="SHA-512"),!(a in j))throw Error("Invalid SHA-512 algorithm: "+a);for(var b=j[a],c=null,e=d.util.createBuffer(),f=Array(80),l=0;l<80;++l)f[l]=[,,];var m=64;switch(a){case"SHA-384":m=48;break;case"SHA-512/256":m=32;break;case"SHA-512/224":m=28}var n={algorithm:a.replace("-","").toLowerCase(),blockLength:128,digestLength:m,messageLength:0,fullMessageLength:null,messageLengthSize:16};return n.start=function(){n.messageLength=0,n.fullMessageLength=n.messageLength128=[];for(var a=n.messageLengthSize/4,f=0;f<a;++f)n.fullMessageLength.push(0);e=d.util.createBuffer(),c=Array(b.length);for(var f=0;f<b.length;++f)c[f]=b[f].slice(0);return n},n.start(),n.update=function(a,b){"utf8"===b&&(a=d.util.encodeUtf8(a));var g=a.length;n.messageLength+=g,g=[g/0x100000000>>>0,g>>>0];for(var h=n.fullMessageLength.length-1;h>=0;--h)n.fullMessageLength[h]+=g[1],g[1]=g[0]+(n.fullMessageLength[h]/0x100000000>>>0),n.fullMessageLength[h]=n.fullMessageLength[h]>>>0,g[0]=g[1]/0x100000000>>>0;return e.putBytes(a),k(c,f,e),(e.read>2048||0===e.length())&&e.compact(),n},n.digest=function(){var b,h,i=d.util.createBuffer();i.putBytes(e.bytes());var j=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize&n.blockLength-1;i.putBytes(g.substr(0,n.blockLength-j));for(var l=8*n.fullMessageLength[0],m=0;m<n.fullMessageLength.length-1;++m)l+=(b=8*n.fullMessageLength[m+1])/0x100000000>>>0,i.putInt32(l>>>0),l=b>>>0;i.putInt32(l);for(var o=Array(c.length),m=0;m<c.length;++m)o[m]=c[m].slice(0);k(o,f,i);var p=d.util.createBuffer();h="SHA-512"===a?o.length:"SHA-384"===a?o.length-2:o.length-4;for(var m=0;m<h;++m)p.putInt32(o[m][0]),(m!==h-1||"SHA-512/224"!==a)&&p.putInt32(o[m][1]);return p},n};var g=null,h=!1,i=null,j=null;function k(a,b,c){for(var d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=c.length();N>=128;){for(G=0;G<16;++G)b[G][0]=c.getInt32()>>>0,b[G][1]=c.getInt32()>>>0;for(;G<80;++G)d=(((H=(J=b[G-2])[0])>>>19|(I=J[1])<<13)^(I>>>29|H<<3)^H>>>6)>>>0,e=((H<<13|I>>>19)^(I<<3|H>>>29)^(H<<26|I>>>6))>>>0,f=(((H=(L=b[G-15])[0])>>>1|(I=L[1])<<31)^(H>>>8|I<<24)^H>>>7)>>>0,g=((H<<31|I>>>1)^(H<<24|I>>>8)^(H<<25|I>>>7))>>>0,K=b[G-7],M=b[G-16],I=e+K[1]+g+M[1],b[G][0]=d+K[0]+f+M[0]+(I/0x100000000>>>0)>>>0,b[G][1]=I>>>0;for(q=a[0][0],r=a[0][1],s=a[1][0],t=a[1][1],u=a[2][0],v=a[2][1],w=a[3][0],x=a[3][1],y=a[4][0],z=a[4][1],A=a[5][0],B=a[5][1],C=a[6][0],D=a[6][1],E=a[7][0],F=a[7][1],G=0;G<80;++G)k=((y>>>14|z<<18)^(y>>>18|z<<14)^(z>>>9|y<<23))>>>0,l=((y<<18|z>>>14)^(y<<14|z>>>18)^(z<<23|y>>>9))>>>0,m=(C^y&(A^C))>>>0,n=(D^z&(B^D))>>>0,h=((q>>>28|r<<4)^(r>>>2|q<<30)^(r>>>7|q<<25))>>>0,j=((q<<4|r>>>28)^(r<<30|q>>>2)^(r<<25|q>>>7))>>>0,o=(q&s|u&(q^s))>>>0,p=(r&t|v&(r^t))>>>0,I=F+l+n+i[G][1]+b[G][1],d=E+k+m+i[G][0]+b[G][0]+(I/0x100000000>>>0)>>>0,e=I>>>0,f=h+o+((I=j+p)/0x100000000>>>0)>>>0,g=I>>>0,E=C,F=D,C=A,D=B,A=y,B=z,y=w+d+((I=x+e)/0x100000000>>>0)>>>0,z=I>>>0,w=u,x=v,u=s,v=t,s=q,t=r,q=d+f+((I=e+g)/0x100000000>>>0)>>>0,r=I>>>0;I=a[0][1]+r,a[0][0]=a[0][0]+q+(I/0x100000000>>>0)>>>0,a[0][1]=I>>>0,I=a[1][1]+t,a[1][0]=a[1][0]+s+(I/0x100000000>>>0)>>>0,a[1][1]=I>>>0,I=a[2][1]+v,a[2][0]=a[2][0]+u+(I/0x100000000>>>0)>>>0,a[2][1]=I>>>0,I=a[3][1]+x,a[3][0]=a[3][0]+w+(I/0x100000000>>>0)>>>0,a[3][1]=I>>>0,I=a[4][1]+z,a[4][0]=a[4][0]+y+(I/0x100000000>>>0)>>>0,a[4][1]=I>>>0,I=a[5][1]+B,a[5][0]=a[5][0]+A+(I/0x100000000>>>0)>>>0,a[5][1]=I>>>0,I=a[6][1]+D,a[6][0]=a[6][0]+C+(I/0x100000000>>>0)>>>0,a[6][1]=I>>>0,I=a[7][1]+F,a[7][0]=a[7][0]+E+(I/0x100000000>>>0)>>>0,a[7][1]=I>>>0,N-=128}}},38627:(a,b,c)=>{var d=c(45654);c(1277),c(33889);var e=a.exports=d.md5=d.md5||{};d.md.md5=d.md.algorithms.md5=e,e.create=function(){j||function(){f=String.fromCharCode(128)+d.util.fillString("\0",64),g=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12,5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2,0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9],h=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],i=Array(64);for(var a=0;a<64;++a)i[a]=Math.floor(0x100000000*Math.abs(Math.sin(a+1)));j=!0}();var a=null,b=d.util.createBuffer(),c=Array(16),e={algorithm:"md5",blockLength:64,digestLength:16,messageLength:0,fullMessageLength:null,messageLengthSize:8};return e.start=function(){e.messageLength=0,e.fullMessageLength=e.messageLength64=[];for(var c=e.messageLengthSize/4,f=0;f<c;++f)e.fullMessageLength.push(0);return b=d.util.createBuffer(),a={h0:0x67452301,h1:0xefcdab89,h2:0x98badcfe,h3:0x10325476},e},e.start(),e.update=function(f,g){"utf8"===g&&(f=d.util.encodeUtf8(f));var h=f.length;e.messageLength+=h,h=[h/0x100000000>>>0,h>>>0];for(var i=e.fullMessageLength.length-1;i>=0;--i)e.fullMessageLength[i]+=h[1],h[1]=h[0]+(e.fullMessageLength[i]/0x100000000>>>0),e.fullMessageLength[i]=e.fullMessageLength[i]>>>0,h[0]=h[1]/0x100000000>>>0;return b.putBytes(f),k(a,c,b),(b.read>2048||0===b.length())&&b.compact(),e},e.digest=function(){var g=d.util.createBuffer();g.putBytes(b.bytes());var h=e.fullMessageLength[e.fullMessageLength.length-1]+e.messageLengthSize&e.blockLength-1;g.putBytes(f.substr(0,e.blockLength-h));for(var i,j=0,l=e.fullMessageLength.length-1;l>=0;--l)j=(i=8*e.fullMessageLength[l]+j)/0x100000000>>>0,g.putInt32Le(i>>>0);var m={h0:a.h0,h1:a.h1,h2:a.h2,h3:a.h3};k(m,c,g);var n=d.util.createBuffer();return n.putInt32Le(m.h0),n.putInt32Le(m.h1),n.putInt32Le(m.h2),n.putInt32Le(m.h3),n},e};var f=null,g=null,h=null,i=null,j=!1;function k(a,b,c){for(var d,e,f,j,k,l,m,n,o=c.length();o>=64;){for(e=a.h0,f=a.h1,j=a.h2,k=a.h3,n=0;n<16;++n)b[n]=c.getInt32Le(),d=e+(k^f&(j^k))+i[n]+b[n],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;for(;n<32;++n)d=e+(j^k&(f^j))+i[n]+b[g[n]],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;for(;n<48;++n)d=e+(f^j^k)+i[n]+b[g[n]],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;for(;n<64;++n)d=e+(j^(f|~k))+i[n]+b[g[n]],m=h[n],e=k,k=j,j=f,f+=d<<m|d>>>32-m;a.h0=a.h0+e|0,a.h1=a.h1+f|0,a.h2=a.h2+j|0,a.h3=a.h3+k|0,o-=64}}},39804:(a,b,c)=>{var d=c(45654);c(45518),c(27080);var e=a.exports=d.tls;function f(a,b,c){var f=b.entity===d.tls.ConnectionEnd.client;a.read.cipherState={init:!1,cipher:d.cipher.createDecipher("AES-CBC",f?c.keys.server_write_key:c.keys.client_write_key),iv:f?c.keys.server_write_IV:c.keys.client_write_IV},a.write.cipherState={init:!1,cipher:d.cipher.createCipher("AES-CBC",f?c.keys.client_write_key:c.keys.server_write_key),iv:f?c.keys.client_write_IV:c.keys.server_write_IV},a.read.cipherFunction=j,a.write.cipherFunction=g,a.read.macLength=a.write.macLength=c.mac_length,a.read.macFunction=a.write.macFunction=e.hmac_sha1}function g(a,b){var c,f=!1,g=b.macFunction(b.macKey,b.sequenceNumber,a);a.fragment.putBytes(g),b.updateSequenceNumber(),c=a.version.minor===e.Versions.TLS_1_0.minor?b.cipherState.init?null:b.cipherState.iv:d.random.getBytesSync(16),b.cipherState.init=!0;var i=b.cipherState.cipher;return i.start({iv:c}),a.version.minor>=e.Versions.TLS_1_1.minor&&i.output.putBytes(c),i.update(a.fragment),i.finish(h)&&(a.fragment=i.output,a.length=a.fragment.length(),f=!0),f}function h(a,b,c){if(!c){var d=a-b.length()%a;b.fillWithByte(d-1,d)}return!0}function i(a,b,c){var d=!0;if(c){for(var e=b.length(),f=b.last(),g=e-1-f;g<e-1;++g)d=d&&b.at(g)==f;d&&b.truncate(f+1)}return d}function j(a,b){var c,f,g,h,j,k=!1;j=a.version.minor===e.Versions.TLS_1_0.minor?b.cipherState.init?null:b.cipherState.iv:a.fragment.getBytes(16),b.cipherState.init=!0;var l=b.cipherState.cipher;l.start({iv:j}),l.update(a.fragment),k=l.finish(i);var m=b.macLength,n=d.random.getBytesSync(m),o=l.output.length();o>=m?(a.fragment=l.output.getBytes(o-m),n=l.output.getBytes(m)):a.fragment=l.output.getBytes(),a.fragment=d.util.createBuffer(a.fragment),a.length=a.fragment.length();var p=b.macFunction(b.macKey,b.sequenceNumber,a);return b.updateSequenceNumber(),k=(c=b.macKey,f=n,g=p,(h=d.hmac.create()).start("SHA1",c),h.update(f),f=h.digest().getBytes(),h.start(null,null),h.update(g),f===(g=h.digest().getBytes())&&k)}e.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA={id:[0,47],name:"TLS_RSA_WITH_AES_128_CBC_SHA",initSecurityParameters:function(a){a.bulk_cipher_algorithm=e.BulkCipherAlgorithm.aes,a.cipher_type=e.CipherType.block,a.enc_key_length=16,a.block_length=16,a.fixed_iv_length=16,a.record_iv_length=16,a.mac_algorithm=e.MACAlgorithm.hmac_sha1,a.mac_length=20,a.mac_key_length=20},initConnectionState:f},e.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA={id:[0,53],name:"TLS_RSA_WITH_AES_256_CBC_SHA",initSecurityParameters:function(a){a.bulk_cipher_algorithm=e.BulkCipherAlgorithm.aes,a.cipher_type=e.CipherType.block,a.enc_key_length=32,a.block_length=16,a.fixed_iv_length=16,a.record_iv_length=16,a.mac_algorithm=e.MACAlgorithm.hmac_sha1,a.mac_length=20,a.mac_key_length=20},initConnectionState:f}},41702:(a,b,c)=>{var d=c(45654);c(33889),d.mgf=d.mgf||{},(a.exports=d.mgf.mgf1=d.mgf1=d.mgf1||{}).create=function(a){return{generate:function(b,c){for(var e=new d.util.ByteBuffer,f=Math.ceil(c/a.digestLength),g=0;g<f;g++){var h=new d.util.ByteBuffer;h.putInt32(g),a.start(),a.update(b+h.getBytes()),e.putBuffer(a.digest())}return e.truncate(e.length()-c),e.getBytes()}}}},42947:(a,b,c)=>{"use strict";let d=c(29021),e=c(33873),{DATA_DIR:f}=c(37436),{normalizeAllowedClientIps:g}=c(54584),{normalizeAllowedToolsInput:h}=c(47141),{normalizeProxyUsers:i}=c(99721),{normalizeAccessGrants:j}=c(68370),k=e.join(f,"audit-gateway"),l=e.join(k,"config.json"),m=e.join(k,"audit.jsonl"),n=e.join(k,"logs"),o=Object.freeze({enabled:!1,bindHost:"127.0.0.1",port:3128,clientProxyHost:"",clientIpFilterEnabled:!1,allowedClientIps:[],clientToolFilterEnabled:!1,allowedClientTools:[],proxyAuthEnabled:!1,proxyAuthUsers:[],accessGrants:[],allowedHosts:["api.anthropic.com","*.anthropic.com","claude.ai","*.claude.ai","api.openai.com","*.openai.com","chatgpt.com","*.chatgpt.com"],passthroughUnknown:!0,captureBodies:!0,captureLimitBytes:2097152,retentionDays:7,verifyUpstreamTls:!0,connectTimeoutMs:1e4,tlsHandshakeTimeoutMs:1e4,responseHeaderTimeoutMs:3e4,idleTimeoutMs:9e5,shutdownGraceMs:1500,allowPlainHttp:!1,allowedConnectPorts:[443]});function p(){return{...o,allowedClientIps:[...o.allowedClientIps],allowedClientTools:[...o.allowedClientTools],proxyAuthUsers:[...o.proxyAuthUsers],accessGrants:[],allowedHosts:[...o.allowedHosts],allowedConnectPorts:[...o.allowedConnectPorts]}}function q(){d.mkdirSync(k,{recursive:!0}),d.mkdirSync(n,{recursive:!0})}function r(a){return[...new Set((Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/)).map(a=>String(a||"").trim().toLowerCase()).filter(Boolean).filter(a=>!a.includes("://")&&/^[*a-z0-9._-]+$/.test(a)))]}function s(a,b,c,d,e){let f=null==a?b:Number(a);if(!Number.isInteger(f)||f<c||f>d)throw Error(`${e} must be between ${c} and ${d}`);return f}function t(a={}){let b={...o,...a},c=s(b.port,o.port,1,65535,"Proxy port"),d=Number(b.captureLimitBytes);if(!Number.isFinite(d)||d<0||d>0x1000000)throw Error("Capture limit must be between 0 and 16 MB");let e=s(b.retentionDays,o.retentionDays,1,365,"Retention days"),f=s(b.connectTimeoutMs,o.connectTimeoutMs,1e3,12e4,"Connect timeout"),k=s(b.tlsHandshakeTimeoutMs,o.tlsHandshakeTimeoutMs,1e3,12e4,"TLS handshake timeout"),l=s(b.responseHeaderTimeoutMs,o.responseHeaderTimeoutMs,1e3,3e5,"Response header timeout"),m=s(b.idleTimeoutMs,o.idleTimeoutMs,3e4,36e5,"Idle timeout"),n=s(b.shutdownGraceMs,o.shutdownGraceMs,0,3e4,"Shutdown grace period"),p=String(b.bindHost||"127.0.0.1").trim();if(!p||/\s/.test(p))throw Error("Invalid bind address");let q=String(b.clientProxyHost||"").trim();if(/\s/.test(q)||q.includes("://"))throw Error("Client proxy host must be a hostname or IP without protocol");let u=!0===b.clientIpFilterEnabled,v=g(b.allowedClientIps);if(u&&0===v.length)throw Error("Client IP filter requires at least one allowed IP or CIDR");let w=!0===b.proxyAuthEnabled,x=i(b.proxyAuthUsers);if(w&&0===x.length)throw Error("Proxy authentication requires at least one account");let y=j(b.accessGrants),z=!0===b.clientToolFilterEnabled,A=h(b.allowedClientTools);if(z&&0===A.length)throw Error("Client tool filter requires at least one allowed tool");return{enabled:!0===b.enabled,bindHost:p,port:c,clientProxyHost:q,clientIpFilterEnabled:u,allowedClientIps:v,clientToolFilterEnabled:z,allowedClientTools:A,proxyAuthEnabled:w,proxyAuthUsers:x,accessGrants:y,allowedHosts:r(b.allowedHosts),passthroughUnknown:!1!==b.passthroughUnknown,captureBodies:!1!==b.captureBodies,captureLimitBytes:Math.round(d),retentionDays:e,verifyUpstreamTls:!0,connectTimeoutMs:f,tlsHandshakeTimeoutMs:k,responseHeaderTimeoutMs:l,idleTimeoutMs:m,shutdownGraceMs:n,allowPlainHttp:!1,allowedConnectPorts:[443]}}a.exports={AUDIT_DIR:k,CONFIG_PATH:l,AUDIT_LOG_PATH:m,AUDIT_LOG_DIR:n,DEFAULT_CONFIG:o,ensureAuditDir:q,loadConfig:function(){if(q(),!d.existsSync(l))return p();try{return t(JSON.parse(d.readFileSync(l,"utf8")))}catch(a){return console.warn(`[audit-proxy] invalid config ignored: ${a.message||a}`),p()}},saveConfig:function(a){q();let b=t(a),c=`${l}.tmp`;return d.writeFileSync(c,`${JSON.stringify(b,null,2)}
25
+ `,{mode:384}),d.renameSync(c,l),b},validateConfig:t,normalizeAllowedHosts:r,normalizeAllowedClientIps:g}},45518:(a,b,c)=>{var d,e,f,g,h,i=c(45654);function j(a,b){i.cipher.registerAlgorithm(a,function(){return new i.aes.Algorithm(a,b)})}c(66568),c(19396),c(33889),a.exports=i.aes=i.aes||{},i.aes.startEncrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!1,mode:d});return e.start(b),e},i.aes.createEncryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!1,mode:b})},i.aes.startDecrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!0,mode:d});return e.start(b),e},i.aes.createDecryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!0,mode:b})},i.aes.Algorithm=function(a,b){k||l();var c=this;c.name=a,c.mode=new b({blockSize:16,cipher:{encrypt:function(a,b){return n(c._w,a,b,!1)},decrypt:function(a,b){return n(c._w,a,b,!0)}}}),c._init=!1},i.aes.Algorithm.prototype.initialize=function(a){if(!this._init){var b,c=a.key;if("string"==typeof c&&(16===c.length||24===c.length||32===c.length))c=i.util.createBuffer(c);else if(i.util.isArray(c)&&(16===c.length||24===c.length||32===c.length)){b=c,c=i.util.createBuffer();for(var d=0;d<b.length;++d)c.putByte(b[d])}if(!i.util.isArray(c)){b=c,c=[];var e=b.length();if(16===e||24===e||32===e){e>>>=2;for(var d=0;d<e;++d)c.push(b.getInt32())}}if(!i.util.isArray(c)||4!==c.length&&6!==c.length&&8!==c.length)throw Error("Invalid key parameter.");var f=-1!==["CFB","OFB","CTR","GCM"].indexOf(this.mode.name);this._w=m(c,a.decrypt&&!f),this._init=!0}},i.aes._expandKey=function(a,b){return k||l(),m(a,b)},i.aes._updateBlock=n,j("AES-ECB",i.cipher.modes.ecb),j("AES-CBC",i.cipher.modes.cbc),j("AES-CFB",i.cipher.modes.cfb),j("AES-OFB",i.cipher.modes.ofb),j("AES-CTR",i.cipher.modes.ctr),j("AES-GCM",i.cipher.modes.gcm);var k=!1;function l(){k=!0,f=[0,1,2,4,8,16,32,64,128,27,54];for(var a=Array(256),b=0;b<128;++b)a[b]=b<<1,a[b+128]=b+128<<1^283;d=Array(256),e=Array(256),g=[,,,,],h=[,,,,];for(var b=0;b<4;++b)g[b]=Array(256),h[b]=Array(256);for(var c,i,j,l,m,n,o,p=0,q=0,b=0;b<256;++b){l=(l=q^q<<1^q<<2^q<<3^q<<4)>>8^255&l^99,d[p]=l,e[l]=p,m=a[l],c=a[p],i=a[c],j=a[i],n=m<<24^l<<16^l<<8^(l^m),o=(c^i^j)<<24^(p^j)<<16^(p^i^j)<<8^(p^c^j);for(var r=0;r<4;++r)g[r][p]=n,h[r][l]=o,n=n<<24|n>>>8,o=o<<24|o>>>8;0===p?p=q=1:(p=c^a[a[a[c^j]]],q^=a[a[q]])}}function m(a,b){for(var c,e=a.slice(0),g=1,i=e.length,j=4*(i+6+1),k=i;k<j;++k)c=e[k-1],k%i==0?(c=d[c>>>16&255]<<24^d[c>>>8&255]<<16^d[255&c]<<8^d[c>>>24]^f[g]<<24,g++):i>6&&k%i==4&&(c=d[c>>>24]<<24^d[c>>>16&255]<<16^d[c>>>8&255]<<8^d[255&c]),e[k]=e[k-i]^c;if(b){var l,m=h[0],n=h[1],o=h[2],p=h[3],q=e.slice(0);j=e.length;for(var k=0,r=j-4;k<j;k+=4,r-=4)if(0===k||k===j-4)q[k]=e[r],q[k+1]=e[r+3],q[k+2]=e[r+2],q[k+3]=e[r+1];else for(var s=0;s<4;++s)l=e[r+s],q[k+(3&-s)]=m[d[l>>>24]]^n[d[l>>>16&255]]^o[d[l>>>8&255]]^p[d[255&l]];e=q}return e}function n(a,b,c,f){var i,j,k,l,m,n,o,p,q,r,s,t,u=a.length/4-1;f?(i=h[0],j=h[1],k=h[2],l=h[3],m=e):(i=g[0],j=g[1],k=g[2],l=g[3],m=d),n=b[0]^a[0],o=b[f?3:1]^a[1],p=b[2]^a[2],q=b[f?1:3]^a[3];for(var v=3,w=1;w<u;++w)r=i[n>>>24]^j[o>>>16&255]^k[p>>>8&255]^l[255&q]^a[++v],s=i[o>>>24]^j[p>>>16&255]^k[q>>>8&255]^l[255&n]^a[++v],t=i[p>>>24]^j[q>>>16&255]^k[n>>>8&255]^l[255&o]^a[++v],q=i[q>>>24]^j[n>>>16&255]^k[o>>>8&255]^l[255&p]^a[++v],n=r,o=s,p=t;c[0]=m[n>>>24]<<24^m[o>>>16&255]<<16^m[p>>>8&255]<<8^m[255&q]^a[++v],c[f?3:1]=m[o>>>24]<<24^m[p>>>16&255]<<16^m[q>>>8&255]<<8^m[255&n]^a[++v],c[2]=m[p>>>24]<<24^m[q>>>16&255]<<16^m[n>>>8&255]<<8^m[255&o]^a[++v],c[f?1:3]=m[q>>>24]<<24^m[n>>>16&255]<<16^m[o>>>8&255]<<8^m[255&p]^a[++v]}function o(a){var b,c="AES-"+((a=a||{}).mode||"CBC").toUpperCase(),d=(b=a.decrypt?i.cipher.createDecipher(c,a.key):i.cipher.createCipher(c,a.key)).start;return b.start=function(a,c){var e=null;c instanceof i.util.ByteBuffer&&(e=c,c={}),(c=c||{}).output=e,c.iv=a,d.call(b,c)},b}},45654:a=>{a.exports={options:{usePureJavaScript:!1}}},47141:a=>{"use strict";let b=[{id:"claude-code",label:"Claude Code",patterns:["claude-cli","claude-code","anthropic"]},{id:"codex",label:"OpenAI Codex",patterns:["codex_cli","codex-cli","codex"]},{id:"gemini-cli",label:"Gemini CLI",patterns:["gemini-cli","google-genai"]},{id:"cursor",label:"Cursor",patterns:["cursor"]},{id:"curl",label:"curl / scripts",patterns:["curl","wget","httpie"]}];function c(a){return String(a||"").trim().toLowerCase()}function d(a,b=[]){let e=c(a);return!!e&&!!b.length&&b.some(a=>a&&e.includes(a))}a.exports={TOOL_PRESETS:b,normalizeAllowedTools:function(a){let d=Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/),e=[];for(let a of d){let d=c(a);if(!d)continue;let f=b.find(a=>a.id===d);f?e.push(...f.patterns):e.push(d)}return[...new Set(e)]},normalizeAllowedToolsInput:function(a){return[...new Set((Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/)).map(c).filter(Boolean))]},clientToolMatches:d,shouldRefuseClientTool:function(a,b=[]){return!!c(a)&&!d(a,b)},describeUserAgent:function(a){let b=String(a||"").trim();return b?b.length>120?`${b.slice(0,119)}…`:b:"no User-Agent"}}},49345:(a,b,c)=>{var d=c(45654);c(33889);var e=a.exports=d.pem=d.pem||{};function f(a){for(var b=a.name+": ",c=[],d=function(a,b){return" "+b},e=0;e<a.values.length;++e)c.push(a.values[e].replace(/^(\S+\r\n)/,d));b+=c.join(",")+"\r\n";for(var f=0,g=-1,e=0;e<b.length;++e,++f)if(f>65&&-1!==g){var h=b[g];","===h?(++g,b=b.substr(0,g)+"\r\n "+b.substr(g)):b=b.substr(0,g)+"\r\n"+h+b.substr(g+1),f=e-g-1,g=-1,++e}else(" "===b[e]||" "===b[e]||","===b[e])&&(g=e);return b}e.encode=function(a,b){b=b||{};var c,e="-----BEGIN "+a.type+"-----\r\n";if(a.procType&&(e+=f(c={name:"Proc-Type",values:[String(a.procType.version),a.procType.type]})),a.contentDomain&&(e+=f(c={name:"Content-Domain",values:[a.contentDomain]})),a.dekInfo&&(c={name:"DEK-Info",values:[a.dekInfo.algorithm]},a.dekInfo.parameters&&c.values.push(a.dekInfo.parameters),e+=f(c)),a.headers)for(var g=0;g<a.headers.length;++g)e+=f(a.headers[g]);return a.procType&&(e+="\r\n"),e+=d.util.encode64(a.body,b.maxline||64)+"\r\n",e+="-----END "+a.type+"-----\r\n"},e.decode=function(a){for(var b,c=[],e=/\s*-----BEGIN ([A-Z0-9- ]+)-----\r?\n?([\x21-\x7e\s]+?(?:\r?\n\r?\n))?([:A-Za-z0-9+\/=\s]+?)-----END \1-----/g,f=/([\x21-\x7e]+):\s*([\x21-\x7e\s^:]+)/,g=/\r?\n/;b=e.exec(a);){var h=b[1];"NEW CERTIFICATE REQUEST"===h&&(h="CERTIFICATE REQUEST");var i={type:h,procType:null,contentDomain:null,dekInfo:null,headers:[],body:d.util.decode64(b[3])};if(c.push(i),b[2]){for(var j=b[2].split(g),k=0;b&&k<j.length;){for(var l=j[k].replace(/\s+$/,""),m=k+1;m<j.length;++m){var n=j[m];if(!/\s/.test(n[0]))break;l+=n,k=m}if(b=l.match(f)){for(var o={name:b[1],values:[]},p=b[2].split(","),q=0;q<p.length;++q)o.values.push(p[q].replace(/^\s+/,""));if(i.procType)if(i.contentDomain||"Content-Domain"!==o.name)if(i.dekInfo||"DEK-Info"!==o.name)i.headers.push(o);else{if(0===o.values.length)throw Error('Invalid PEM formatted message. The "DEK-Info" header must have at least one subfield.');i.dekInfo={algorithm:p[0],parameters:p[1]||null}}else i.contentDomain=p[0]||"";else{if("Proc-Type"!==o.name)throw Error('Invalid PEM formatted message. The first encapsulated header must be "Proc-Type".');if(2!==o.values.length)throw Error('Invalid PEM formatted message. The "Proc-Type" header must have two subfields.');i.procType={version:p[0],type:p[1]}}}++k}if("ENCRYPTED"===i.procType&&!i.dekInfo)throw Error('Invalid PEM formatted message. The "DEK-Info" header must be present if "Proc-Type" is "ENCRYPTED".')}}if(0===c.length)throw Error("Invalid PEM formatted message.");return c}},54584:(a,b,c)=>{"use strict";let d=c(91645);function e(a){let b=String(a||"").trim().toLowerCase();b.startsWith("[")&&b.endsWith("]")&&(b=b.slice(1,-1));let c=b.indexOf("%");return c>=0&&(b=b.slice(0,c)),b.startsWith("::ffff:")&&4===d.isIP(b.slice(7))&&(b=b.slice(7)),b}function f(a){return Buffer.from(a.split(".").map(a=>Number(a)))}function g(a,b){return 4===b?f(a):function(a){let b=e(a),c=b.lastIndexOf(":");if(c>=0){let a=b.slice(c+1);if(4===d.isIP(a)){let d=f(a),e=(d[0]<<8|d[1]).toString(16),g=(d[2]<<8|d[3]).toString(16);b=`${b.slice(0,c)}:${e}:${g}`}}let g=b.split("::");if(g.length>2)throw Error("Invalid IPv6 address");let h=g[0]?g[0].split(":").filter(Boolean):[],i=2===g.length&&g[1]?g[1].split(":").filter(Boolean):[],j=8-h.length-i.length;if(1===g.length&&0!==j||j<0)throw Error("Invalid IPv6 address");let k=2===g.length?[...h,...Array(j).fill("0"),...i]:h;if(8!==k.length)throw Error("Invalid IPv6 address");let l=Buffer.alloc(16);return k.forEach((a,b)=>{let c=Number.parseInt(a||"0",16);if(!Number.isInteger(c)||c<0||c>65535)throw Error("Invalid IPv6 address");l[2*b]=c>>8&255,l[2*b+1]=255&c}),l}(a)}function h(a){let b=String(a||"").trim();if(!b)throw Error("Empty IP rule");let c=b.indexOf("/"),f=e(c>=0?b.slice(0,c):b),g=d.isIP(f);if(!g)throw Error(`Invalid client IP/CIDR: ${b}`);let h=4===g?32:128,i=c>=0?Number(b.slice(c+1)):h;if(!Number.isInteger(i)||i<0||i>h)throw Error(`Invalid CIDR prefix: ${b}`);return{text:c>=0?`${f}/${i}`:f,ip:f,family:g,prefix:i}}a.exports={normalizeIp:e,parseIpRule:h,normalizeAllowedClientIps:function(a){let b=Array.isArray(a)?a:String(a||"").split(/[\r\n,]+/),c=[],d=new Set;for(let a of b){let b=String(a||"").trim();if(!b)continue;let e=h(b);d.has(e.text)||(d.add(e.text),c.push(e.text))}return c},clientIpMatches:function(a,b=[]){let c=e(a),f=d.isIP(c);if(!f)return!1;let i=g(c,f);for(let a of b||[]){let b;try{b=h(a)}catch{continue}if(b.family===f&&function(a,b,c){let d=Math.floor(c/8),e=c%8;for(let c=0;c<d;c+=1)if(a[c]!==b[c])return!1;if(!e)return!0;let f=255<<8-e&255;return(a[d]&f)==(b[d]&f)}(i,g(b.ip,b.family),b.prefix))return!0}return!1}}},56416:(a,b,c)=>{var d=c(45654);c(63070),c(33889);var e=d.asn1,f=a.exports=d.pkcs7asn1=d.pkcs7asn1||{};d.pkcs7=d.pkcs7||{},d.pkcs7.asn1=f;var g={name:"ContentInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.ContentType",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,captureAsn1:"content"}]};f.contentInfoValidator=g;var h={name:"EncryptedContentInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentType",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"contentType"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm.parameter",tagClass:e.Class.UNIVERSAL,captureAsn1:"encParameter"}]},{name:"EncryptedContentInfo.encryptedContent",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,capture:"encryptedContent",captureAsn1:"encryptedContentAsn1"}]};f.envelopedDataValidator={name:"EnvelopedData",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EnvelopedData.Version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"},{name:"EnvelopedData.RecipientInfos",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,constructed:!0,captureAsn1:"recipientInfos"}].concat(h)},f.encryptedDataValidator={name:"EncryptedData",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedData.Version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"}].concat(h)};var i={name:"SignerInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1},{name:"SignerInfo.issuerAndSerialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.issuerAndSerialNumber.issuer",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"SignerInfo.issuerAndSerialNumber.serialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"SignerInfo.digestAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.digestAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"digestAlgorithm"},{name:"SignerInfo.digestAlgorithm.parameter",tagClass:e.Class.UNIVERSAL,constructed:!1,captureAsn1:"digestParameter",optional:!0}]},{name:"SignerInfo.authenticatedAttributes",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"authenticatedAttributes"},{name:"SignerInfo.digestEncryptionAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,capture:"signatureAlgorithm"},{name:"SignerInfo.encryptedDigest",tagClass:e.Class.UNIVERSAL,type:e.Type.OCTETSTRING,constructed:!1,capture:"signature"},{name:"SignerInfo.unauthenticatedAttributes",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,capture:"unauthenticatedAttributes"}]};f.signedDataValidator={name:"SignedData",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"SignedData.Version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"},{name:"SignedData.DigestAlgorithms",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,constructed:!0,captureAsn1:"digestAlgorithms"},g,{name:"SignedData.Certificates",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,optional:!0,captureAsn1:"certificates"},{name:"SignedData.CertificateRevocationLists",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,optional:!0,captureAsn1:"crls"},{name:"SignedData.SignerInfos",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,capture:"signerInfos",optional:!0,value:[i]}]},f.recipientInfoValidator={name:"RecipientInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.version",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"version"},{name:"RecipientInfo.issuerAndSerial",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.issuerAndSerial.issuer",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"RecipientInfo.issuerAndSerial.serialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"RecipientInfo.keyEncryptionAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.keyEncryptionAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"RecipientInfo.keyEncryptionAlgorithm.parameter",tagClass:e.Class.UNIVERSAL,constructed:!1,captureAsn1:"encParameter",optional:!0}]},{name:"RecipientInfo.encryptedKey",tagClass:e.Class.UNIVERSAL,type:e.Type.OCTETSTRING,constructed:!1,capture:"encKey"}]}},62952:(a,b,c)=>{"use strict";let d=c(29021),e=c(33873),f=c(4984),g=c(55511),{AUDIT_LOG_PATH:h,AUDIT_LOG_DIR:i,ensureAuditDir:j,loadConfig:k}=c(42947),{redactObject:l,scrubString:m}=c(14681),{toTokensJson:n,totalInputTokens:o}=c(11562),{publishRecentUsage:p}=c(79841),q="audit-proxy",r="client",s="provider_response",t=/\/(?:messages|responses|chat\/completions)$|generatecontent$/i,u={expiresAt:0,config:null},v=null,w=null,x=null,y=null,z=null,A="",B=Promise.resolve(),C=Promise.resolve(),D=0,E=null,F=new Map,G={queue:[],workers:new Set,activeWorkers:0,clearing:!1,enqueued:0,written:0,dropped:0,failed:0,mysqlWritten:0,mysqlFailed:0,mysqlSkipped:0,mysqlSkippedByReason:{},usageWritten:0,usageFailed:0,tokensSeen:0,lastError:null,lastWrittenAt:null};function H(a){let b=Date.now();b-D<6e4||(D=b,console.warn(`[AuditProxy][PromptDB] ${a}`))}function I(a){G.lastError=String(a||"Audit store failure"),console.warn(`[AuditProxy][Store] ${G.lastError}`)}async function J(){let a=Date.now();if(u.expiresAt>a)return u.config;v||(v=Promise.all([c.e(689),c.e(3960)]).then(c.bind(c,41170)));let b=await v,d=await b.getPromptLogDbConfig();return u={expiresAt:a+5e3,config:d},d}async function K(a){let b=g.createHash("sha256").update(JSON.stringify({host:a.host,port:Number(a.port||3306),database:a.database,username:a.username,password:a.password,ssl:!!a.ssl})).digest("hex");if(z&&A===b)return z;let d=B.then(async()=>{if(z&&A===b)return z;if(z){try{await z.end()}catch{}z=null,A=""}let d=await c.e(4790).then(c.t.bind(c,94790,19)),e=(d.default||d).createPool({host:a.host,port:Number(a.port||3306),database:a.database,user:a.username,password:a.password,ssl:a.ssl?{rejectUnauthorized:!0}:void 0,connectTimeout:3e3,waitForConnections:!0,connectionLimit:4,maxIdle:4,idleTimeout:6e4,queueLimit:100,enableKeepAlive:!0,keepAliveInitialDelay:3e4});return z=e,A=b,e});return B=d.then(()=>void 0,()=>void 0),d}function L(a){let b=a?new Date(a):new Date;return(Number.isNaN(b.getTime())?new Date:b).toISOString().replace("T"," ").replace("Z","")}function M(a){if("string"!=typeof a)return a;let b=a.trim();if(!b||!b.startsWith("{")&&!b.startsWith("["))return a;try{return JSON.parse(b)}catch{return a}}function N(a,b=0,c=[]){if(null==a||b>12||c.join("\n").length>=2e5)return c;if("string"==typeof a)return a.trim()&&c.push(a.trim()),c;if(Array.isArray(a)){for(let d of a)N(d,b+1,c);return c}if("object"!=typeof a)return c;for(let[d,e]of Object.entries(a)){let a=d.toLowerCase();["content","text","prompt","input","message","output_text"].includes(a)?N(e,b+1,c):b<8&&["messages","contents","parts","body","request","payload","response","choices","output","item","items"].includes(a)&&N(e,b+1,c)}return c}function O(a){if("string"!=typeof a)return!1;let b=a.trim();return!!b&&!/^\[[^\]]*\]$/.test(b)}function P(a){let b=String(a||"").toLowerCase();return b.includes("claude")?{tool:"claude-code",label:"Claude Code"}:b.includes("codex")?{tool:"codex",label:"Codex"}:{tool:"audit-proxy",label:"Enterprise AI Audit Proxy"}}async function Q(a,b,c,d){if(!c)return null;let e=g.createHash("sha256").update(c).digest("hex"),f=Buffer.byteLength(String(c||""),"utf8");return await a.query(`INSERT INTO prompt_log_payloads (
26
26
  payload_hash, created_at, last_seen_at, content_type, payload_size_bytes, ref_count, payload_json
27
27
  ) VALUES (?, ?, ?, ?, ?, 1, CAST(? AS JSON))
28
28
  ON DUPLICATE KEY UPDATE
@@ -46,16 +46,16 @@ ${e}`)}catch{try{a.destroy()}catch{}}}function N(a={}){let b={};for(let[c,d]of O
46
46
  WHERE p.payload_hash = ?
47
47
  AND p.last_seen_at < UTC_TIMESTAMP(3) - INTERVAL 5 MINUTE
48
48
  AND NOT EXISTS (SELECT 1 FROM prompt_logs r WHERE r.payload_hash = p.payload_hash)
49
- AND NOT EXISTS (SELECT 1 FROM prompt_logs r WHERE r.response_payload_hash = p.payload_hash)`,[b]);await a.commit()}catch(b){if(a)try{await a.rollback()}catch{}H(`Failed to clear mirrored audit rows: ${b.message||b}`)}finally{try{a?.release()}catch{}}}a.exports={appendAudit:function(a){return ab(async()=>a)},enqueueAuditJob:ab,readRecent:ae,clearAudit:async function a(){G.clearing=!0,G.queue.length=0,G.workers.size&&await Promise.allSettled([...G.workers]),j();let a=await d.promises.readdir(i).catch(()=>[]);await Promise.all(a.filter(a=>a.endsWith(".jsonl")).map(a=>d.promises.unlink(e.join(i,a)).catch(()=>{}))),await d.promises.writeFile(h,"",{mode:384}).catch(()=>{}),F.clear(),await ai(),G.clearing=!1,G.queue.length&&setImmediate(aa)},pruneExpired:ag,startAuditMaintenance:function(){E||(E=setInterval(()=>void ag(),36e5),E.unref?.())},stopAuditMaintenance:function(){E&&clearInterval(E),E=null},flushAuditQueue:ah,getAuditStoreStats:function(){return{queueDepth:G.queue.length,queueLimit:1e3,workerRunning:G.activeWorkers>0,workerConcurrency:4,activeWorkers:G.activeWorkers,mysqlPoolConnections:4,enqueued:G.enqueued,written:G.written,dropped:G.dropped,failed:G.failed,mysqlWritten:G.mysqlWritten,mysqlFailed:G.mysqlFailed,mysqlSkipped:G.mysqlSkipped,mysqlSkippedByReason:{...G.mysqlSkippedByReason},usageWritten:G.usageWritten,usageFailed:G.usageFailed,tokensSeen:G.tokensSeen,lastError:G.lastError,lastWrittenAt:G.lastWrittenAt,logDirectory:i}},appendPromptLog:U,appendUsageEvent:X,promptLogMirrorDecision:T}},63070:(a,b,c)=>{var d=c(45654);c(33889),c(36105);var e=a.exports=d.asn1=d.asn1||{};function f(a,b,c){if(c>b){var d=Error("Too few bytes to parse DER.");throw d.available=a.length(),d.remaining=b,d.requested=c,d}}e.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192},e.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30},e.maxDepth=256,e.create=function(a,b,c,f,g){if(d.util.isArray(f)){for(var h=[],i=0;i<f.length;++i)void 0!==f[i]&&h.push(f[i]);f=h}var j={tagClass:a,type:b,constructed:c,composed:c||d.util.isArray(f),value:f};return g&&"bitStringContents"in g&&(j.bitStringContents=g.bitStringContents,j.original=e.copy(j)),j},e.copy=function(a,b){var c;if(d.util.isArray(a)){c=[];for(var f=0;f<a.length;++f)c.push(e.copy(a[f],b));return c}return"string"==typeof a?a:(c={tagClass:a.tagClass,type:a.type,constructed:a.constructed,composed:a.composed,value:e.copy(a.value,b)},b&&!b.excludeBitStringContents&&(c.bitStringContents=a.bitStringContents),c)},e.equals=function(a,b,c){if(d.util.isArray(a)){if(!d.util.isArray(b)||a.length!==b.length)return!1;for(var f=0;f<a.length;++f)if(!e.equals(a[f],b[f]))return!1;return!0}if(typeof a!=typeof b)return!1;if("string"==typeof a)return a===b;var g=a.tagClass===b.tagClass&&a.type===b.type&&a.constructed===b.constructed&&a.composed===b.composed&&e.equals(a.value,b.value);return c&&c.includeBitStringContents&&(g=g&&a.bitStringContents===b.bitStringContents),g},e.getBerValueLength=function(a){var b=a.getByte();if(128!==b)return 128&b?a.getInt((127&b)<<3):b};var g=function(a,b){var c,d=a.getByte();if(b--,128!==d){if(128&d){var e=127&d;f(a,b,e),c=a.getInt(e<<3)}else c=d;if(c<0)throw Error("Negative length: "+c);return c}};e.fromDer=function(a,b){void 0===b&&(b={strict:!0,parseAllBytes:!0,decodeBitStrings:!0}),"boolean"==typeof b&&(b={strict:b,parseAllBytes:!0,decodeBitStrings:!0}),"strict"in b||(b.strict=!0),"parseAllBytes"in b||(b.parseAllBytes=!0),"decodeBitStrings"in b||(b.decodeBitStrings=!0),"maxDepth"in b||(b.maxDepth=e.maxDepth),"string"==typeof a&&(a=d.util.createBuffer(a));var c=a.length(),h=function a(b,c,d,h){if(d>=h.maxDepth)throw Error("ASN.1 parsing error: Max depth exceeded.");f(b,c,2);var i,j,k,l=b.getByte();c--;var m=192&l,n=31&l;i=b.length();var o=g(b,c);if(c-=i-b.length(),void 0!==o&&o>c){if(h.strict){var p=Error("Too few bytes to read ASN.1 value.");throw p.available=b.length(),p.remaining=c,p.requested=o,p}o=c}var q=(32&l)==32;if(q)if(j=[],void 0===o)for(;;){if(f(b,c,2),b.bytes(2)===String.fromCharCode(0,0)){b.getBytes(2),c-=2;break}i=b.length(),j.push(a(b,c,d+1,h)),c-=i-b.length()}else for(;o>0;)i=b.length(),j.push(a(b,o,d+1,h)),c-=i-b.length(),o-=i-b.length();if(void 0===j&&m===e.Class.UNIVERSAL&&n===e.Type.BITSTRING&&(k=b.bytes(o)),void 0===j&&h.decodeBitStrings&&m===e.Class.UNIVERSAL&&n===e.Type.BITSTRING&&o>1){var r=b.read,s=c,t=0;if(n===e.Type.BITSTRING&&(f(b,c,1),t=b.getByte(),c--),0===t)try{i=b.length();var u=a(b,c,d+1,{strict:!0,decodeBitStrings:!0}),v=i-b.length();c-=v,n==e.Type.BITSTRING&&v++;var w=u.tagClass;v===o&&(w===e.Class.UNIVERSAL||w===e.Class.CONTEXT_SPECIFIC)&&(j=[u])}catch(a){}void 0===j&&(b.read=r,c=s)}if(void 0===j){if(void 0===o){if(h.strict)throw Error("Non-constructed ASN.1 object of indefinite length.");o=c}if(n===e.Type.BMPSTRING)for(j="";o>0;o-=2)f(b,c,2),j+=String.fromCharCode(b.getInt16()),c-=2;else j=b.getBytes(o),c-=o}var x=void 0===k?null:{bitStringContents:k};return e.create(m,n,q,j,x)}(a,a.length(),0,b);if(b.parseAllBytes&&0!==a.length()){var i=Error("Unparsed DER bytes remain after ASN.1 parsing.");throw i.byteCount=c,i.remaining=a.length(),i}return h},e.toDer=function(a){var b=d.util.createBuffer(),c=a.tagClass|a.type,f=d.util.createBuffer(),g=!1;if("bitStringContents"in a&&(g=!0,a.original&&(g=e.equals(a,a.original))),g)f.putBytes(a.bitStringContents);else if(a.composed){a.constructed?c|=32:f.putByte(0);for(var h=0;h<a.value.length;++h)void 0!==a.value[h]&&f.putBuffer(e.toDer(a.value[h]))}else if(a.type===e.Type.BMPSTRING)for(var h=0;h<a.value.length;++h)f.putInt16(a.value.charCodeAt(h));else a.type===e.Type.INTEGER&&a.value.length>1&&(0===a.value.charCodeAt(0)&&(128&a.value.charCodeAt(1))==0||255===a.value.charCodeAt(0)&&(128&a.value.charCodeAt(1))==128)?f.putBytes(a.value.substr(1)):f.putBytes(a.value);if(b.putByte(c),127>=f.length())b.putByte(127&f.length());else{var i=f.length(),j="";do j+=String.fromCharCode(255&i),i>>>=8;while(i>0);b.putByte(128|j.length);for(var h=j.length-1;h>=0;--h)b.putByte(j.charCodeAt(h))}return b.putBuffer(f),b},e.oidToDer=function(a){var b,c,e,f,g=a.split("."),h=d.util.createBuffer();h.putByte(40*parseInt(g[0],10)+parseInt(g[1],10));for(var i=2;i<g.length;++i){if(b=!0,c=[],(e=parseInt(g[i],10))>0xffffffff)throw Error("OID value too large; max is 32-bits.");do f=127&e,e>>>=7,b||(f|=128),c.push(f),b=!1;while(e>0);for(var j=c.length-1;j>=0;--j)h.putByte(c[j])}return h},e.derToOid=function(a){"string"==typeof a&&(a=d.util.createBuffer(a));var b,c=a.getByte();b=Math.floor(c/40)+"."+c%40;for(var e=0;a.length()>0;){if(e>0x3fffffffffff)throw Error("OID value too large; max is 53-bits.");c=a.getByte(),e*=128,128&c?e+=127&c:(b+="."+(e+c),e=0)}return b},e.utcTimeToDate=function(a){var b=new Date,c=parseInt(a.substr(0,2),10);c=c>=50?1900+c:2e3+c;var d=parseInt(a.substr(2,2),10)-1,e=parseInt(a.substr(4,2),10),f=parseInt(a.substr(6,2),10),g=parseInt(a.substr(8,2),10),h=0;if(a.length>11){var i=a.charAt(10),j=10;"+"!==i&&"-"!==i&&(h=parseInt(a.substr(10,2),10),j+=2)}if(b.setUTCFullYear(c,d,e),b.setUTCHours(f,g,h,0),j&&("+"===(i=a.charAt(j))||"-"===i)){var k=60*parseInt(a.substr(j+1,2),10)+parseInt(a.substr(j+4,2),10);k*=6e4,"+"===i?b.setTime(b-k):b.setTime(+b+k)}return b},e.generalizedTimeToDate=function(a){var b=new Date,c=parseInt(a.substr(0,4),10),d=parseInt(a.substr(4,2),10)-1,e=parseInt(a.substr(6,2),10),f=parseInt(a.substr(8,2),10),g=parseInt(a.substr(10,2),10),h=parseInt(a.substr(12,2),10),i=0,j=0,k=!1;"Z"===a.charAt(a.length-1)&&(k=!0);var l=a.length-5,m=a.charAt(l);return("+"===m||"-"===m)&&(j=(60*parseInt(a.substr(l+1,2),10)+parseInt(a.substr(l+4,2),10))*6e4,"+"===m&&(j*=-1),k=!0),"."===a.charAt(14)&&(i=1e3*parseFloat(a.substr(14),10)),k?(b.setUTCFullYear(c,d,e),b.setUTCHours(f,g,h,i),b.setTime(+b+j)):(b.setFullYear(c,d,e),b.setHours(f,g,h,i)),b},e.dateToUtcTime=function(a){if("string"==typeof a)return a;var b="",c=[];c.push((""+a.getUTCFullYear()).substr(2)),c.push(""+(a.getUTCMonth()+1)),c.push(""+a.getUTCDate()),c.push(""+a.getUTCHours()),c.push(""+a.getUTCMinutes()),c.push(""+a.getUTCSeconds());for(var d=0;d<c.length;++d)c[d].length<2&&(b+="0"),b+=c[d];return b+"Z"},e.dateToGeneralizedTime=function(a){if("string"==typeof a)return a;var b="",c=[];c.push(""+a.getUTCFullYear()),c.push(""+(a.getUTCMonth()+1)),c.push(""+a.getUTCDate()),c.push(""+a.getUTCHours()),c.push(""+a.getUTCMinutes()),c.push(""+a.getUTCSeconds());for(var d=0;d<c.length;++d)c[d].length<2&&(b+="0"),b+=c[d];return b+"Z"},e.integerToDer=function(a){var b=d.util.createBuffer();if(a>=-128&&a<128)return b.putSignedInt(a,8);if(a>=-32768&&a<32768)return b.putSignedInt(a,16);if(a>=-8388608&&a<8388608)return b.putSignedInt(a,24);if(a>=-0x80000000&&a<0x80000000)return b.putSignedInt(a,32);var c=Error("Integer too large; max is 32-bits.");throw c.integer=a,c},e.derToInteger=function(a){"string"==typeof a&&(a=d.util.createBuffer(a));var b=8*a.length();if(b>32)throw Error("Integer too large; max is 32-bits.");return a.getSignedInt(b)},e.validate=function(a,b,c,f){var g=!1;if((a.tagClass===b.tagClass||void 0===b.tagClass)&&(a.type===b.type||void 0===b.type))if(a.constructed===b.constructed||void 0===b.constructed){if(g=!0,b.value&&d.util.isArray(b.value))for(var h=0,i=0;g&&i<b.value.length;++i){var j=b.value[i];g=!!j.optional;var k=a.value[h];if(!k){!j.optional&&(g=!1,f&&f.push("["+b.name+'] Missing required element. Expected tag class "'+j.tagClass+'", type "'+j.type+'"'));continue}if(void 0!==j.tagClass&&void 0!==j.type&&(k.tagClass!==j.tagClass||k.type!==j.type))if(j.optional){g=!0;continue}else{g=!1,f&&f.push("["+b.name+"] Tag mismatch. Expected ("+j.tagClass+","+j.type+"), got ("+k.tagClass+","+k.type+")");break}if(e.validate(k,j,c,f))++h,g=!0;else if(j.optional)g=!0;else{g=!1;break}}if(g&&c&&(b.capture&&(c[b.capture]=a.value),b.captureAsn1&&(c[b.captureAsn1]=a),b.captureBitStringContents&&"bitStringContents"in a&&(c[b.captureBitStringContents]=a.bitStringContents),b.captureBitStringValue&&"bitStringContents"in a))if(a.bitStringContents.length<2)c[b.captureBitStringValue]="";else{if(0!==a.bitStringContents.charCodeAt(0))throw Error("captureBitStringValue only supported for zero unused bits");c[b.captureBitStringValue]=a.bitStringContents.slice(1)}}else f&&f.push("["+b.name+'] Expected constructed "'+b.constructed+'", got "'+a.constructed+'"');else f&&(a.tagClass!==b.tagClass&&f.push("["+b.name+'] Expected tag class "'+b.tagClass+'", got "'+a.tagClass+'"'),a.type!==b.type&&f.push("["+b.name+'] Expected type "'+b.type+'", got "'+a.type+'"'));return g};var h=/[^\\u0000-\\u00ff]/;e.prettyPrint=function(a,b,c){var f="";c=c||2,(b=b||0)>0&&(f+="\n");for(var g="",i=0;i<b*c;++i)g+=" ";switch(f+=g+"Tag: ",a.tagClass){case e.Class.UNIVERSAL:f+="Universal:";break;case e.Class.APPLICATION:f+="Application:";break;case e.Class.CONTEXT_SPECIFIC:f+="Context-Specific:";break;case e.Class.PRIVATE:f+="Private:"}if(a.tagClass===e.Class.UNIVERSAL)switch(f+=a.type,a.type){case e.Type.NONE:f+=" (None)";break;case e.Type.BOOLEAN:f+=" (Boolean)";break;case e.Type.INTEGER:f+=" (Integer)";break;case e.Type.BITSTRING:f+=" (Bit string)";break;case e.Type.OCTETSTRING:f+=" (Octet string)";break;case e.Type.NULL:f+=" (Null)";break;case e.Type.OID:f+=" (Object Identifier)";break;case e.Type.ODESC:f+=" (Object Descriptor)";break;case e.Type.EXTERNAL:f+=" (External or Instance of)";break;case e.Type.REAL:f+=" (Real)";break;case e.Type.ENUMERATED:f+=" (Enumerated)";break;case e.Type.EMBEDDED:f+=" (Embedded PDV)";break;case e.Type.UTF8:f+=" (UTF8)";break;case e.Type.ROID:f+=" (Relative Object Identifier)";break;case e.Type.SEQUENCE:f+=" (Sequence)";break;case e.Type.SET:f+=" (Set)";break;case e.Type.PRINTABLESTRING:f+=" (Printable String)";break;case e.Type.IA5String:f+=" (IA5String (ASCII))";break;case e.Type.UTCTIME:f+=" (UTC time)";break;case e.Type.GENERALIZEDTIME:f+=" (Generalized time)";break;case e.Type.BMPSTRING:f+=" (BMP String)"}else f+=a.type;if(f+="\n",f+=g+"Constructed: "+a.constructed+"\n",a.composed){for(var j=0,k="",i=0;i<a.value.length;++i)void 0!==a.value[i]&&(j+=1,k+=e.prettyPrint(a.value[i],b+1,c),i+1<a.value.length&&(k+=","));f+=g+"Sub values: "+j+k}else{if(f+=g+"Value: ",a.type===e.Type.OID){var l=e.derToOid(a.value);f+=l,d.pki&&d.pki.oids&&l in d.pki.oids&&(f+=" ("+d.pki.oids[l]+") ")}if(a.type===e.Type.INTEGER)try{f+=e.derToInteger(a.value)}catch(b){f+="0x"+d.util.bytesToHex(a.value)}else if(a.type===e.Type.BITSTRING){if(a.value.length>1?f+="0x"+d.util.bytesToHex(a.value.slice(1)):f+="(none)",a.value.length>0){var m=a.value.charCodeAt(0);1==m?f+=" (1 unused bit shown)":m>1&&(f+=" ("+m+" unused bits shown)")}}else if(a.type===e.Type.OCTETSTRING)h.test(a.value)||(f+="("+a.value+") "),f+="0x"+d.util.bytesToHex(a.value);else if(a.type===e.Type.UTF8)try{f+=d.util.decodeUtf8(a.value)}catch(b){if("URI malformed"===b.message)f+="0x"+d.util.bytesToHex(a.value)+" (malformed UTF8)";else throw b}else a.type===e.Type.PRINTABLESTRING||a.type===e.Type.IA5String?f+=a.value:h.test(a.value)?f+="0x"+d.util.bytesToHex(a.value):0===a.value.length?f+="[null]":f+=a.value}return f}},65737:(a,b,c)=>{var d=c(45654);c(45518),c(63070),c(88819),c(1277),c(15529),c(36105),c(49345),c(87981),c(10401),c(33889);var e=d.asn1,f=a.exports=d.pki=d.pki||{},g=f.oids,h={};h.CN=g.commonName,h.commonName="CN",h.C=g.countryName,h.countryName="C",h.L=g.localityName,h.localityName="L",h.ST=g.stateOrProvinceName,h.stateOrProvinceName="ST",h.O=g.organizationName,h.organizationName="O",h.OU=g.organizationalUnitName,h.organizationalUnitName="OU",h.E=g.emailAddress,h.emailAddress="E";var i=d.pki.rsa.publicKeyValidator,j={name:"Certificate",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"tbsCertificate",value:[{name:"Certificate.TBSCertificate.version",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.version.integer",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"certVersion"}]},{name:"Certificate.TBSCertificate.serialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"certSerialNumber"},{name:"Certificate.TBSCertificate.signature",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.signature.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"certinfoSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:e.Class.UNIVERSAL,optional:!0,captureAsn1:"certinfoSignatureParams"}]},{name:"Certificate.TBSCertificate.issuer",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certIssuer"},{name:"Certificate.TBSCertificate.validity",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.validity.notBefore (utc)",tagClass:e.Class.UNIVERSAL,type:e.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity1UTCTime"},{name:"Certificate.TBSCertificate.validity.notBefore (generalized)",tagClass:e.Class.UNIVERSAL,type:e.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity2GeneralizedTime"},{name:"Certificate.TBSCertificate.validity.notAfter (utc)",tagClass:e.Class.UNIVERSAL,type:e.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity3UTCTime"},{name:"Certificate.TBSCertificate.validity.notAfter (generalized)",tagClass:e.Class.UNIVERSAL,type:e.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity4GeneralizedTime"}]},{name:"Certificate.TBSCertificate.subject",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certSubject"},i,{name:"Certificate.TBSCertificate.issuerUniqueID",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.issuerUniqueID.id",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"certIssuerUniqueId"}]},{name:"Certificate.TBSCertificate.subjectUniqueID",tagClass:e.Class.CONTEXT_SPECIFIC,type:2,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.subjectUniqueID.id",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSubjectUniqueId"}]},{name:"Certificate.TBSCertificate.extensions",tagClass:e.Class.CONTEXT_SPECIFIC,type:3,constructed:!0,captureAsn1:"certExtensions",optional:!0}]},{name:"Certificate.signatureAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.signatureAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"certSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:e.Class.UNIVERSAL,optional:!0,captureAsn1:"certSignatureParams"}]},{name:"Certificate.signatureValue",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSignature"}]},k={name:"rsapss",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.hashAlgorithm",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier",tagClass:e.Class.UNIVERSAL,type:e.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"hashOid"}]}]},{name:"rsapss.maskGenAlgorithm",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier",tagClass:e.Class.UNIVERSAL,type:e.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"maskGenOid"},{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"maskGenHashOid"}]}]}]},{name:"rsapss.saltLength",tagClass:e.Class.CONTEXT_SPECIFIC,type:2,optional:!0,value:[{name:"rsapss.saltLength.saltLength",tagClass:e.Class.UNIVERSAL,type:e.Class.INTEGER,constructed:!1,capture:"saltLength"}]},{name:"rsapss.trailerField",tagClass:e.Class.CONTEXT_SPECIFIC,type:3,optional:!0,value:[{name:"rsapss.trailer.trailer",tagClass:e.Class.UNIVERSAL,type:e.Class.INTEGER,constructed:!1,capture:"trailer"}]}]},l={name:"CertificationRequestInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfo",value:[{name:"CertificationRequestInfo.integer",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"certificationRequestInfoVersion"},{name:"CertificationRequestInfo.subject",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfoSubject"},i,{name:"CertificationRequestInfo.attributes",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"certificationRequestInfoAttributes",value:[{name:"CertificationRequestInfo.attributes",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequestInfo.attributes.type",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1},{name:"CertificationRequestInfo.attributes.value",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,constructed:!0}]}]}]},m={name:"CertificationRequest",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"csr",value:[l,{name:"CertificationRequest.signatureAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequest.signatureAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"csrSignatureOid"},{name:"CertificationRequest.signatureAlgorithm.parameters",tagClass:e.Class.UNIVERSAL,optional:!0,captureAsn1:"csrSignatureParams"}]},{name:"CertificationRequest.signature",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"csrSignature"}]};function n(a,b){"string"==typeof b&&(b={shortName:b});for(var c,d=null,e=0;null===d&&e<a.attributes.length;++e)c=a.attributes[e],b.type&&b.type===c.type||b.name&&b.name===c.name?d=c:b.shortName&&b.shortName===c.shortName&&(d=c);return d}f.RDNAttributesAsArray=function(a,b){for(var c,d,f,i=[],j=0;j<a.value.length;++j){c=a.value[j];for(var k=0;k<c.value.length;++k)f={},d=c.value[k],f.type=e.derToOid(d.value[0].value),f.value=d.value[1].value,f.valueTagClass=d.value[1].type,f.type in g&&(f.name=g[f.type],f.name in h&&(f.shortName=h[f.name])),b&&(b.update(f.type),b.update(f.value)),i.push(f)}return i},f.CRIAttributesAsArray=function(a){for(var b=[],c=0;c<a.length;++c)for(var d=a[c],i=e.derToOid(d.value[0].value),j=d.value[1].value,k=0;k<j.length;++k){var l={};if(l.type=i,l.value=j[k].value,l.valueTagClass=j[k].type,l.type in g&&(l.name=g[l.type],l.name in h&&(l.shortName=h[l.name])),l.type===g.extensionRequest){l.extensions=[];for(var m=0;m<l.value.length;++m)l.extensions.push(f.certificateExtensionFromAsn1(l.value[m]))}b.push(l)}return b};var o=function(a,b,c){var d={};if(a!==g["RSASSA-PSS"])return d;c&&(d={hash:{algorithmOid:g.sha1},mgf:{algorithmOid:g.mgf1,hash:{algorithmOid:g.sha1}},saltLength:20});var f={},h=[];if(!e.validate(b,k,f,h)){var i=Error("Cannot read RSASSA-PSS parameter block.");throw i.errors=h,i}return void 0!==f.hashOid&&(d.hash=d.hash||{},d.hash.algorithmOid=e.derToOid(f.hashOid)),void 0!==f.maskGenOid&&(d.mgf=d.mgf||{},d.mgf.algorithmOid=e.derToOid(f.maskGenOid),d.mgf.hash=d.mgf.hash||{},d.mgf.hash.algorithmOid=e.derToOid(f.maskGenHashOid)),void 0!==f.saltLength&&(d.saltLength=f.saltLength.charCodeAt(0)),d},p=function(a){switch(g[a.signatureOid]){case"sha1WithRSAEncryption":case"sha1WithRSASignature":return d.md.sha1.create();case"md5WithRSAEncryption":return d.md.md5.create();case"sha256WithRSAEncryption":case"RSASSA-PSS":return d.md.sha256.create();case"sha384WithRSAEncryption":return d.md.sha384.create();case"sha512WithRSAEncryption":return d.md.sha512.create();default:var b=Error("Could not compute "+a.type+" digest. Unknown signature OID.");throw b.signatureOid=a.signatureOid,b}},q=function(a){var b,c,e,f=a.certificate;switch(f.signatureOid){case g.sha1WithRSAEncryption:case g.sha1WithRSASignature:break;case g["RSASSA-PSS"]:if(void 0===(c=g[f.signatureParameters.mgf.hash.algorithmOid])||void 0===d.md[c]){var h=Error("Unsupported MGF hash function.");throw h.oid=f.signatureParameters.mgf.hash.algorithmOid,h.name=c,h}if(void 0===(e=g[f.signatureParameters.mgf.algorithmOid])||void 0===d.mgf[e]){var h=Error("Unsupported MGF function.");throw h.oid=f.signatureParameters.mgf.algorithmOid,h.name=e,h}if(e=d.mgf[e].create(d.md[c].create()),void 0===(c=g[f.signatureParameters.hash.algorithmOid])||void 0===d.md[c]){var h=Error("Unsupported RSASSA-PSS hash function.");throw h.oid=f.signatureParameters.hash.algorithmOid,h.name=c,h}b=d.pss.create(d.md[c].create(),e,f.signatureParameters.saltLength)}return f.publicKey.verify(a.md.digest().getBytes(),a.signature,b)};function r(a){for(var b,c,f=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]),g=a.attributes,h=0;h<g.length;++h){var i=(b=g[h]).value,j=e.Type.PRINTABLESTRING;"valueTagClass"in b&&(j=b.valueTagClass)===e.Type.UTF8&&(i=d.util.encodeUtf8(i)),c=e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.type).getBytes()),e.create(e.Class.UNIVERSAL,j,!1,i)])]),f.value.push(c)}return f}function s(a){for(var b,c=0;c<a.length;++c){if(void 0===(b=a[c]).name&&(b.type&&b.type in f.oids?b.name=f.oids[b.type]:b.shortName&&b.shortName in h&&(b.name=f.oids[h[b.shortName]])),void 0===b.type)if(b.name&&b.name in f.oids)b.type=f.oids[b.name];else{var d=Error("Attribute type not specified.");throw d.attribute=b,d}if(void 0===b.shortName&&b.name&&b.name in h&&(b.shortName=h[b.name]),b.type===g.extensionRequest&&(b.valueConstructed=!0,b.valueTagClass=e.Type.SEQUENCE,!b.value&&b.extensions)){b.value=[];for(var i=0;i<b.extensions.length;++i)b.value.push(f.certificateExtensionToAsn1(t(b.extensions[i])))}if(void 0===b.value){var d=Error("Attribute value not specified.");throw d.attribute=b,d}}}function t(a,b){if(b=b||{},void 0===a.name&&a.id&&a.id in f.oids&&(a.name=f.oids[a.id]),void 0===a.id)if(a.name&&a.name in f.oids)a.id=f.oids[a.name];else{var c=Error("Extension ID not specified.");throw c.extension=a,c}if(void 0!==a.value)return a;if("keyUsage"===a.name){var h=0,i=0,j=0;a.digitalSignature&&(i|=128,h=7),a.nonRepudiation&&(i|=64,h=6),a.keyEncipherment&&(i|=32,h=5),a.dataEncipherment&&(i|=16,h=4),a.keyAgreement&&(i|=8,h=3),a.keyCertSign&&(i|=4,h=2),a.cRLSign&&(i|=2,h=1),a.encipherOnly&&(i|=1,h=0),a.decipherOnly&&(j|=128,h=7);var k=String.fromCharCode(h);0!==j?k+=String.fromCharCode(i)+String.fromCharCode(j):0!==i&&(k+=String.fromCharCode(i)),a.value=e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,k)}else if("basicConstraints"===a.name)a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]),a.cA&&a.value.value.push(e.create(e.Class.UNIVERSAL,e.Type.BOOLEAN,!1,String.fromCharCode(255))),"pathLenConstraint"in a&&a.value.value.push(e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.pathLenConstraint).getBytes()));else if("extKeyUsage"===a.name){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);var l=a.value.value;for(var m in a)!0===a[m]&&(m in g?l.push(e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(g[m]).getBytes())):-1!==m.indexOf(".")&&l.push(e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(m).getBytes())))}else if("nsCertType"===a.name){var h=0,i=0;a.client&&(i|=128,h=7),a.server&&(i|=64,h=6),a.email&&(i|=32,h=5),a.objsign&&(i|=16,h=4),a.reserved&&(i|=8,h=3),a.sslCA&&(i|=4,h=2),a.emailCA&&(i|=2,h=1),a.objCA&&(i|=1,h=0);var k=String.fromCharCode(h);0!==i&&(k+=String.fromCharCode(i)),a.value=e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,k)}else if("subjectAltName"===a.name||"issuerAltName"===a.name){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);for(var n,o=0;o<a.altNames.length;++o){var k=(n=a.altNames[o]).value;if(7===n.type&&n.ip){if(null===(k=d.util.bytesFromIP(n.ip))){var c=Error('Extension "ip" value is not a valid IPv4 or IPv6 address.');throw c.extension=a,c}}else 8===n.type&&(k=n.oid?e.oidToDer(e.oidToDer(n.oid)):e.oidToDer(k));a.value.value.push(e.create(e.Class.CONTEXT_SPECIFIC,n.type,!1,k))}}else if("nsComment"===a.name&&b.cert){if(!/^[\x00-\x7F]*$/.test(a.comment)||a.comment.length<1||a.comment.length>128)throw Error('Invalid "nsComment" content.');a.value=e.create(e.Class.UNIVERSAL,e.Type.IA5STRING,!1,a.comment)}else if("subjectKeyIdentifier"===a.name&&b.cert){var p=b.cert.generateSubjectKeyIdentifier();a.subjectKeyIdentifier=p.toHex(),a.value=e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,p.getBytes())}else if("authorityKeyIdentifier"===a.name&&b.cert){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);var l=a.value.value;if(a.keyIdentifier){var q=!0===a.keyIdentifier?b.cert.generateSubjectKeyIdentifier().getBytes():a.keyIdentifier;l.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!1,q))}if(a.authorityCertIssuer){var s=[e.create(e.Class.CONTEXT_SPECIFIC,4,!0,[r(!0===a.authorityCertIssuer?b.cert.issuer:a.authorityCertIssuer)])];l.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,s))}if(a.serialNumber){var t=d.util.hexToBytes(!0===a.serialNumber?b.cert.serialNumber:a.serialNumber);l.push(e.create(e.Class.CONTEXT_SPECIFIC,2,!1,t))}}else if("cRLDistributionPoints"===a.name){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);for(var n,l=a.value.value,u=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]),v=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[]),o=0;o<a.altNames.length;++o){var k=(n=a.altNames[o]).value;if(7===n.type&&n.ip){if(null===(k=d.util.bytesFromIP(n.ip))){var c=Error('Extension "ip" value is not a valid IPv4 or IPv6 address.');throw c.extension=a,c}}else 8===n.type&&(k=n.oid?e.oidToDer(e.oidToDer(n.oid)):e.oidToDer(k));v.value.push(e.create(e.Class.CONTEXT_SPECIFIC,n.type,!1,k))}u.value.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[v])),l.push(u)}if(void 0===a.value){var c=Error("Extension value not specified.");throw c.extension=a,c}return a}function u(a,b){if(a!==g["RSASSA-PSS"])return e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"");var c=[];return void 0!==b.hash.algorithmOid&&c.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.hash.algorithmOid).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])])),void 0!==b.mgf.algorithmOid&&c.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.mgf.algorithmOid).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.mgf.hash.algorithmOid).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])])])),void 0!==b.saltLength&&c.push(e.create(e.Class.CONTEXT_SPECIFIC,2,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(b.saltLength).getBytes())])),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,c)}f.certificateFromPem=function(a,b,c){var g=d.pem.decode(a)[0];if("CERTIFICATE"!==g.type&&"X509 CERTIFICATE"!==g.type&&"TRUSTED CERTIFICATE"!==g.type){var h=Error('Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".');throw h.headerType=g.type,h}if(g.procType&&"ENCRYPTED"===g.procType.type)throw Error("Could not convert certificate from PEM; PEM is encrypted.");var i=e.fromDer(g.body,c);return f.certificateFromAsn1(i,b)},f.certificateToPem=function(a,b){var c={type:"CERTIFICATE",body:e.toDer(f.certificateToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.publicKeyFromPem=function(a){var b=d.pem.decode(a)[0];if("PUBLIC KEY"!==b.type&&"RSA PUBLIC KEY"!==b.type){var c=Error('Could not convert public key from PEM; PEM header type is not "PUBLIC KEY" or "RSA PUBLIC KEY".');throw c.headerType=b.type,c}if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert public key from PEM; PEM is encrypted.");var g=e.fromDer(b.body);return f.publicKeyFromAsn1(g)},f.publicKeyToPem=function(a,b){var c={type:"PUBLIC KEY",body:e.toDer(f.publicKeyToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.publicKeyToRSAPublicKeyPem=function(a,b){var c={type:"RSA PUBLIC KEY",body:e.toDer(f.publicKeyToRSAPublicKey(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.getPublicKeyFingerprint=function(a,b){var c,g=(b=b||{}).md||d.md.sha1.create();switch(b.type||"RSAPublicKey"){case"RSAPublicKey":c=e.toDer(f.publicKeyToRSAPublicKey(a)).getBytes();break;case"SubjectPublicKeyInfo":c=e.toDer(f.publicKeyToAsn1(a)).getBytes();break;default:throw Error('Unknown fingerprint type "'+b.type+'".')}g.start(),g.update(c);var h=g.digest();if("hex"===b.encoding){var i=h.toHex();return b.delimiter?i.match(/.{2}/g).join(b.delimiter):i}if("binary"===b.encoding)return h.getBytes();if(b.encoding)throw Error('Unknown encoding "'+b.encoding+'".');return h},f.certificationRequestFromPem=function(a,b,c){var g=d.pem.decode(a)[0];if("CERTIFICATE REQUEST"!==g.type){var h=Error('Could not convert certification request from PEM; PEM header type is not "CERTIFICATE REQUEST".');throw h.headerType=g.type,h}if(g.procType&&"ENCRYPTED"===g.procType.type)throw Error("Could not convert certification request from PEM; PEM is encrypted.");var i=e.fromDer(g.body,c);return f.certificationRequestFromAsn1(i,b)},f.certificationRequestToPem=function(a,b){var c={type:"CERTIFICATE REQUEST",body:e.toDer(f.certificationRequestToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.createCertificate=function(){var a={};return a.version=2,a.serialNumber="00",a.signatureOid=null,a.signature=null,a.siginfo={},a.siginfo.algorithmOid=null,a.validity={},a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.issuer={},a.issuer.getField=function(b){return n(a.issuer,b)},a.issuer.addField=function(b){s([b]),a.issuer.attributes.push(b)},a.issuer.attributes=[],a.issuer.hash=null,a.subject={},a.subject.getField=function(b){return n(a.subject,b)},a.subject.addField=function(b){s([b]),a.subject.attributes.push(b)},a.subject.attributes=[],a.subject.hash=null,a.extensions=[],a.publicKey=null,a.md=null,a.setSubject=function(b,c){s(b),a.subject.attributes=b,delete a.subject.uniqueId,c&&(a.subject.uniqueId=c),a.subject.hash=null},a.setIssuer=function(b,c){s(b),a.issuer.attributes=b,delete a.issuer.uniqueId,c&&(a.issuer.uniqueId=c),a.issuer.hash=null},a.setExtensions=function(b){for(var c=0;c<b.length;++c)t(b[c],{cert:a});a.extensions=b},a.getExtension=function(b){"string"==typeof b&&(b={name:b});for(var c,d=null,e=0;null===d&&e<a.extensions.length;++e)c=a.extensions[e],b.id&&c.id===b.id?d=c:b.name&&c.name===b.name&&(d=c);return d},a.sign=function(b,c){a.md=c||d.md.sha1.create();var h=g[a.md.algorithm+"WithRSAEncryption"];if(!h){var i=Error("Could not compute certificate digest. Unknown message digest algorithm OID.");throw i.algorithm=a.md.algorithm,i}a.signatureOid=a.siginfo.algorithmOid=h,a.tbsCertificate=f.getTBSCertificate(a);var j=e.toDer(a.tbsCertificate);a.md.update(j.getBytes()),a.signature=b.sign(a.md)},a.verify=function(b){var c=!1;if(!a.issued(b)){var d=b.issuer,g=a.subject,h=Error("The parent certificate did not issue the given child certificate; the child certificate's issuer does not match the parent's subject.");throw h.expectedIssuer=g.attributes,h.actualIssuer=d.attributes,h}var i=b.md;if(null===i){i=p({signatureOid:b.signatureOid,type:"certificate"});var j=b.tbsCertificate||f.getTBSCertificate(b),k=e.toDer(j);i.update(k.getBytes())}return null!==i&&(c=q({certificate:a,md:i,signature:b.signature})),c},a.isIssuer=function(b){var c=!1,d=a.issuer,e=b.subject;if(d.hash&&e.hash)c=d.hash===e.hash;else if(d.attributes.length===e.attributes.length){c=!0;for(var f,g,h=0;c&&h<d.attributes.length;++h)f=d.attributes[h],g=e.attributes[h],(f.type!==g.type||f.value!==g.value)&&(c=!1)}return c},a.issued=function(b){return b.isIssuer(a)},a.generateSubjectKeyIdentifier=function(){return f.getPublicKeyFingerprint(a.publicKey,{type:"RSAPublicKey"})},a.verifySubjectKeyIdentifier=function(){for(var b=g.subjectKeyIdentifier,c=0;c<a.extensions.length;++c){var e=a.extensions[c];if(e.id===b){var f=a.generateSubjectKeyIdentifier().getBytes();return d.util.hexToBytes(e.subjectKeyIdentifier)===f}}return!1},a},f.certificateFromAsn1=function(a,b){var c={},g=[];if(!e.validate(a,j,c,g)){var h=Error("Cannot read X.509 certificate. ASN.1 object is not an X509v3 Certificate.");throw h.errors=g,h}if(e.derToOid(c.publicKeyOid)!==f.oids.rsaEncryption)throw Error("Cannot read public key. OID is not RSA.");var i=f.createCertificate();i.version=c.certVersion?c.certVersion.charCodeAt(0):0,i.serialNumber=d.util.createBuffer(c.certSerialNumber).toHex(),i.signatureOid=d.asn1.derToOid(c.certSignatureOid),i.signatureParameters=o(i.signatureOid,c.certSignatureParams,!0),i.siginfo.algorithmOid=d.asn1.derToOid(c.certinfoSignatureOid),i.siginfo.parameters=o(i.siginfo.algorithmOid,c.certinfoSignatureParams,!1),i.signature=c.certSignature;var k=[];if(void 0!==c.certValidity1UTCTime&&k.push(e.utcTimeToDate(c.certValidity1UTCTime)),void 0!==c.certValidity2GeneralizedTime&&k.push(e.generalizedTimeToDate(c.certValidity2GeneralizedTime)),void 0!==c.certValidity3UTCTime&&k.push(e.utcTimeToDate(c.certValidity3UTCTime)),void 0!==c.certValidity4GeneralizedTime&&k.push(e.generalizedTimeToDate(c.certValidity4GeneralizedTime)),k.length>2)throw Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");if(k.length<2)throw Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");if(i.validity.notBefore=k[0],i.validity.notAfter=k[1],i.tbsCertificate=c.tbsCertificate,b){i.md=p({signatureOid:i.signatureOid,type:"certificate"});var l=e.toDer(i.tbsCertificate);i.md.update(l.getBytes())}var m=d.md.sha1.create(),q=e.toDer(c.certIssuer);m.update(q.getBytes()),i.issuer.getField=function(a){return n(i.issuer,a)},i.issuer.addField=function(a){s([a]),i.issuer.attributes.push(a)},i.issuer.attributes=f.RDNAttributesAsArray(c.certIssuer),c.certIssuerUniqueId&&(i.issuer.uniqueId=c.certIssuerUniqueId),i.issuer.hash=m.digest().toHex();var r=d.md.sha1.create(),t=e.toDer(c.certSubject);return r.update(t.getBytes()),i.subject.getField=function(a){return n(i.subject,a)},i.subject.addField=function(a){s([a]),i.subject.attributes.push(a)},i.subject.attributes=f.RDNAttributesAsArray(c.certSubject),c.certSubjectUniqueId&&(i.subject.uniqueId=c.certSubjectUniqueId),i.subject.hash=r.digest().toHex(),c.certExtensions?i.extensions=f.certificateExtensionsFromAsn1(c.certExtensions):i.extensions=[],i.publicKey=f.publicKeyFromAsn1(c.subjectPublicKeyInfo),i},f.certificateExtensionsFromAsn1=function(a){for(var b=[],c=0;c<a.value.length;++c)for(var d=a.value[c],e=0;e<d.value.length;++e)b.push(f.certificateExtensionFromAsn1(d.value[e]));return b},f.certificateExtensionFromAsn1=function(a){var b={};if(b.id=e.derToOid(a.value[0].value),b.critical=!1,a.value[1].type===e.Type.BOOLEAN?(b.critical=0!==a.value[1].value.charCodeAt(0),b.value=a.value[2].value):b.value=a.value[1].value,b.id in g){if(b.name=g[b.id],"keyUsage"===b.name){var c=e.fromDer(b.value),f=0,h=0;c.value.length>1&&(f=c.value.charCodeAt(1),h=c.value.length>2?c.value.charCodeAt(2):0),b.digitalSignature=(128&f)==128,b.nonRepudiation=(64&f)==64,b.keyEncipherment=(32&f)==32,b.dataEncipherment=(16&f)==16,b.keyAgreement=(8&f)==8,b.keyCertSign=(4&f)==4,b.cRLSign=(2&f)==2,b.encipherOnly=(1&f)==1,b.decipherOnly=(128&h)==128}else if("basicConstraints"===b.name){var c=e.fromDer(b.value);c.value.length>0&&c.value[0].type===e.Type.BOOLEAN?b.cA=0!==c.value[0].value.charCodeAt(0):b.cA=!1;var i=null;c.value.length>0&&c.value[0].type===e.Type.INTEGER?i=c.value[0].value:c.value.length>1&&(i=c.value[1].value),null!==i&&(b.pathLenConstraint=e.derToInteger(i))}else if("extKeyUsage"===b.name)for(var c=e.fromDer(b.value),j=0;j<c.value.length;++j){var k=e.derToOid(c.value[j].value);k in g?b[g[k]]=!0:b[k]=!0}else if("nsCertType"===b.name){var c=e.fromDer(b.value),f=0;c.value.length>1&&(f=c.value.charCodeAt(1)),b.client=(128&f)==128,b.server=(64&f)==64,b.email=(32&f)==32,b.objsign=(16&f)==16,b.reserved=(8&f)==8,b.sslCA=(4&f)==4,b.emailCA=(2&f)==2,b.objCA=(1&f)==1}else if("subjectAltName"===b.name||"issuerAltName"===b.name){b.altNames=[];for(var l,c=e.fromDer(b.value),m=0;m<c.value.length;++m){var n={type:(l=c.value[m]).type,value:l.value};switch(b.altNames.push(n),l.type){case 1:case 2:case 6:break;case 7:n.ip=d.util.bytesToIP(l.value);break;case 8:n.oid=e.derToOid(l.value)}}}else if("subjectKeyIdentifier"===b.name){var c=e.fromDer(b.value);b.subjectKeyIdentifier=d.util.bytesToHex(c.value)}}return b},f.certificationRequestFromAsn1=function(a,b){var c={},g=[];if(!e.validate(a,m,c,g)){var h=Error("Cannot read PKCS#10 certificate request. ASN.1 object is not a PKCS#10 CertificationRequest.");throw h.errors=g,h}if(e.derToOid(c.publicKeyOid)!==f.oids.rsaEncryption)throw Error("Cannot read public key. OID is not RSA.");var i=f.createCertificationRequest();if(i.version=c.csrVersion?c.csrVersion.charCodeAt(0):0,i.signatureOid=d.asn1.derToOid(c.csrSignatureOid),i.signatureParameters=o(i.signatureOid,c.csrSignatureParams,!0),i.siginfo.algorithmOid=d.asn1.derToOid(c.csrSignatureOid),i.siginfo.parameters=o(i.siginfo.algorithmOid,c.csrSignatureParams,!1),i.signature=c.csrSignature,i.certificationRequestInfo=c.certificationRequestInfo,b){i.md=p({signatureOid:i.signatureOid,type:"certification request"});var j=e.toDer(i.certificationRequestInfo);i.md.update(j.getBytes())}var k=d.md.sha1.create();return i.subject.getField=function(a){return n(i.subject,a)},i.subject.addField=function(a){s([a]),i.subject.attributes.push(a)},i.subject.attributes=f.RDNAttributesAsArray(c.certificationRequestInfoSubject,k),i.subject.hash=k.digest().toHex(),i.publicKey=f.publicKeyFromAsn1(c.subjectPublicKeyInfo),i.getAttribute=function(a){return n(i,a)},i.addAttribute=function(a){s([a]),i.attributes.push(a)},i.attributes=f.CRIAttributesAsArray(c.certificationRequestInfoAttributes||[]),i},f.createCertificationRequest=function(){var a={};return a.version=0,a.signatureOid=null,a.signature=null,a.siginfo={},a.siginfo.algorithmOid=null,a.subject={},a.subject.getField=function(b){return n(a.subject,b)},a.subject.addField=function(b){s([b]),a.subject.attributes.push(b)},a.subject.attributes=[],a.subject.hash=null,a.publicKey=null,a.attributes=[],a.getAttribute=function(b){return n(a,b)},a.addAttribute=function(b){s([b]),a.attributes.push(b)},a.md=null,a.setSubject=function(b){s(b),a.subject.attributes=b,a.subject.hash=null},a.setAttributes=function(b){s(b),a.attributes=b},a.sign=function(b,c){a.md=c||d.md.sha1.create();var h=g[a.md.algorithm+"WithRSAEncryption"];if(!h){var i=Error("Could not compute certification request digest. Unknown message digest algorithm OID.");throw i.algorithm=a.md.algorithm,i}a.signatureOid=a.siginfo.algorithmOid=h,a.certificationRequestInfo=f.getCertificationRequestInfo(a);var j=e.toDer(a.certificationRequestInfo);a.md.update(j.getBytes()),a.signature=b.sign(a.md)},a.verify=function(){var b=!1,c=a.md;if(null===c){c=p({signatureOid:a.signatureOid,type:"certification request"});var d=a.certificationRequestInfo||f.getCertificationRequestInfo(a),g=e.toDer(d);c.update(g.getBytes())}return null!==c&&(b=q({certificate:a,md:c,signature:a.signature})),b},a};var v=new Date("1950-01-01T00:00:00Z"),w=new Date("2050-01-01T00:00:00Z");function x(a){return a>=v&&a<w?e.create(e.Class.UNIVERSAL,e.Type.UTCTIME,!1,e.dateToUtcTime(a)):e.create(e.Class.UNIVERSAL,e.Type.GENERALIZEDTIME,!1,e.dateToGeneralizedTime(a))}f.getTBSCertificate=function(a){var b=x(a.validity.notBefore),c=x(a.validity.notAfter),g=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes())]),e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,d.util.hexToBytes(a.serialNumber)),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.siginfo.algorithmOid).getBytes()),u(a.siginfo.algorithmOid,a.siginfo.parameters)]),r(a.issuer),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[b,c]),r(a.subject),f.publicKeyToAsn1(a.publicKey)]);return a.issuer.uniqueId&&g.value.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,[e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.issuer.uniqueId)])),a.subject.uniqueId&&g.value.push(e.create(e.Class.CONTEXT_SPECIFIC,2,!0,[e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.subject.uniqueId)])),a.extensions.length>0&&g.value.push(f.certificateExtensionsToAsn1(a.extensions)),g},f.getCertificationRequestInfo=function(a){return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),r(a.subject),f.publicKeyToAsn1(a.publicKey),function(a){var b=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[]);if(0===a.attributes.length)return b;for(var c=a.attributes,f=0;f<c.length;++f){var g=c[f],h=g.value,i=e.Type.UTF8;"valueTagClass"in g&&(i=g.valueTagClass),i===e.Type.UTF8&&(h=d.util.encodeUtf8(h));var j=!1;"valueConstructed"in g&&(j=g.valueConstructed);var k=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(g.type).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[e.create(e.Class.UNIVERSAL,i,j,h)])]);b.value.push(k)}return b}(a)])},f.distinguishedNameToAsn1=function(a){return r(a)},f.certificateToAsn1=function(a){var b=a.tbsCertificate||f.getTBSCertificate(a);return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[b,e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.signatureOid).getBytes()),u(a.signatureOid,a.signatureParameters)]),e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.signature)])},f.certificateExtensionsToAsn1=function(a){var b=e.create(e.Class.CONTEXT_SPECIFIC,3,!0,[]),c=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);b.value.push(c);for(var d=0;d<a.length;++d)c.value.push(f.certificateExtensionToAsn1(a[d]));return b},f.certificateExtensionToAsn1=function(a){var b=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);b.value.push(e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.id).getBytes())),a.critical&&b.value.push(e.create(e.Class.UNIVERSAL,e.Type.BOOLEAN,!1,String.fromCharCode(255)));var c=a.value;return"string"!=typeof a.value&&(c=e.toDer(c).getBytes()),b.value.push(e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,c)),b},f.certificationRequestToAsn1=function(a){var b=a.certificationRequestInfo||f.getCertificationRequestInfo(a);return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[b,e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.signatureOid).getBytes()),u(a.signatureOid,a.signatureParameters)]),e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.signature)])},f.createCaStore=function(a){var b={certs:{}};function c(a){return g(a),b.certs[a.hash]||null}function g(a){if(!a.hash){var b=d.md.sha1.create();a.attributes=f.RDNAttributesAsArray(r(a),b),a.hash=b.digest().toHex()}}if(b.getIssuer=function(a){return c(a.issuer)},b.addCertificate=function(a){if("string"==typeof a&&(a=d.pki.certificateFromPem(a)),g(a.subject),!b.hasCertificate(a))if(a.subject.hash in b.certs){var c=b.certs[a.subject.hash];d.util.isArray(c)||(c=[c]),c.push(a),b.certs[a.subject.hash]=c}else b.certs[a.subject.hash]=a},b.hasCertificate=function(a){"string"==typeof a&&(a=d.pki.certificateFromPem(a));var b=c(a.subject);if(!b)return!1;d.util.isArray(b)||(b=[b]);for(var g=e.toDer(f.certificateToAsn1(a)).getBytes(),h=0;h<b.length;++h)if(g===e.toDer(f.certificateToAsn1(b[h])).getBytes())return!0;return!1},b.listAllCertificates=function(){var a=[];for(var c in b.certs)if(b.certs.hasOwnProperty(c)){var e=b.certs[c];if(d.util.isArray(e))for(var f=0;f<e.length;++f)a.push(e[f]);else a.push(e)}return a},b.removeCertificate=function(a){if("string"==typeof a&&(a=d.pki.certificateFromPem(a)),g(a.subject),!b.hasCertificate(a))return null;var h,i=c(a.subject);if(!d.util.isArray(i))return h=b.certs[a.subject.hash],delete b.certs[a.subject.hash],h;for(var j=e.toDer(f.certificateToAsn1(a)).getBytes(),k=0;k<i.length;++k)j===e.toDer(f.certificateToAsn1(i[k])).getBytes()&&(h=i[k],i.splice(k,1));return 0===i.length&&delete b.certs[a.subject.hash],h},a)for(var h=0;h<a.length;++h){var i=a[h];b.addCertificate(i)}return b},f.certificateError={bad_certificate:"forge.pki.BadCertificate",unsupported_certificate:"forge.pki.UnsupportedCertificate",certificate_revoked:"forge.pki.CertificateRevoked",certificate_expired:"forge.pki.CertificateExpired",certificate_unknown:"forge.pki.CertificateUnknown",unknown_ca:"forge.pki.UnknownCertificateAuthority"},f.verifyCertificateChain=function(a,b,c){"function"==typeof c&&(c={verify:c}),c=c||{};var e=(b=b.slice(0)).slice(0),g=c.validityCheckDate;void 0===g&&(g=new Date);var h=!0,i=null,j=0;do{var k=b.shift(),l=null,m=!1;if(g&&(g<k.validity.notBefore||g>k.validity.notAfter)&&(i={message:"Certificate is not valid yet or has expired.",error:f.certificateError.certificate_expired,notBefore:k.validity.notBefore,notAfter:k.validity.notAfter,now:g}),null===i){if(null===(l=b[0]||a.getIssuer(k))&&k.isIssuer(k)&&(m=!0,l=k),l){var n=l;d.util.isArray(n)||(n=[n]);for(var o=!1;!o&&n.length>0;){l=n.shift();try{o=l.verify(k)}catch(a){}}o||(i={message:"Certificate signature is invalid.",error:f.certificateError.bad_certificate})}null!==i||l&&!m||a.hasCertificate(k)||(i={message:"Certificate is not trusted.",error:f.certificateError.unknown_ca})}if(null===i&&l&&!k.isIssuer(l)&&(i={message:"Certificate issuer is invalid.",error:f.certificateError.bad_certificate}),null===i)for(var p={keyUsage:!0,basicConstraints:!0},q=0;null===i&&q<k.extensions.length;++q){var r=k.extensions[q];!r.critical||r.name in p||(i={message:"Certificate has an unsupported critical extension.",error:f.certificateError.unsupported_certificate})}if(null===i&&(!h||0===b.length&&(!l||m))){var s=k.getExtension("basicConstraints"),t=k.getExtension("keyUsage");null===t||t.keyCertSign&&null!==s||(i={message:"Certificate keyUsage or basicConstraints conflict or indicate that the certificate is not a CA. If the certificate is the only one in the chain or isn't the first then the certificate must be a valid CA.",error:f.certificateError.bad_certificate}),null===i&&null===s&&(i={message:"Certificate is missing basicConstraints extension and cannot be used as a CA.",error:f.certificateError.bad_certificate}),null!==i||null===s||s.cA||(i={message:"Certificate basicConstraints indicates the certificate is not a CA.",error:f.certificateError.bad_certificate}),null===i&&null!==t&&"pathLenConstraint"in s&&j-1>s.pathLenConstraint&&(i={message:"Certificate basicConstraints pathLenConstraint violated.",error:f.certificateError.bad_certificate})}var u=null===i||i.error,v=c.verify?c.verify(u,j,e):u;if(!0===v)i=null;else throw!0===u&&(i={message:"The application rejected the certificate.",error:f.certificateError.bad_certificate}),(v||0===v)&&("object"!=typeof v||d.util.isArray(v)?"string"==typeof v&&(i.error=v):(v.message&&(i.message=v.message),v.error&&(i.error=v.error))),i;h=!1,++j}while(b.length>0);return!0}},66568:(a,b,c)=>{var d=c(45654);c(33889),a.exports=d.cipher=d.cipher||{},d.cipher.algorithms=d.cipher.algorithms||{},d.cipher.createCipher=function(a,b){var c=a;if("string"==typeof c&&(c=d.cipher.getAlgorithm(c))&&(c=c()),!c)throw Error("Unsupported algorithm: "+a);return new d.cipher.BlockCipher({algorithm:c,key:b,decrypt:!1})},d.cipher.createDecipher=function(a,b){var c=a;if("string"==typeof c&&(c=d.cipher.getAlgorithm(c))&&(c=c()),!c)throw Error("Unsupported algorithm: "+a);return new d.cipher.BlockCipher({algorithm:c,key:b,decrypt:!0})},d.cipher.registerAlgorithm=function(a,b){a=a.toUpperCase(),d.cipher.algorithms[a]=b},d.cipher.getAlgorithm=function(a){return(a=a.toUpperCase())in d.cipher.algorithms?d.cipher.algorithms[a]:null};var e=d.cipher.BlockCipher=function(a){this.algorithm=a.algorithm,this.mode=this.algorithm.mode,this.blockSize=this.mode.blockSize,this._finish=!1,this._input=null,this.output=null,this._op=a.decrypt?this.mode.decrypt:this.mode.encrypt,this._decrypt=a.decrypt,this.algorithm.initialize(a)};e.prototype.start=function(a){var b={};for(var c in a=a||{})b[c]=a[c];b.decrypt=this._decrypt,this._finish=!1,this._input=d.util.createBuffer(),this.output=a.output||d.util.createBuffer(),this.mode.start(b)},e.prototype.update=function(a){for(a&&this._input.putBuffer(a);!this._op.call(this.mode,this._input,this.output,this._finish)&&!this._finish;);this._input.compact()},e.prototype.finish=function(a){a&&("ECB"===this.mode.name||"CBC"===this.mode.name)&&(this.mode.pad=function(b){return a(this.blockSize,b,!1)},this.mode.unpad=function(b){return a(this.blockSize,b,!0)});var b={};return b.decrypt=this._decrypt,b.overflow=this._input.length()%this.blockSize,(!!this._decrypt||!this.mode.pad||!!this.mode.pad(this._input,b))&&(this._finish=!0,this.update(),(!this._decrypt||!this.mode.unpad||!!this.mode.unpad(this.output,b))&&(!this.mode.afterFinish||!!this.mode.afterFinish(this.output,b)))}},67382:(a,b,c)=>{var d=c(45654);c(33889);var e=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],f=[1,2,3,5];a.exports=d.rc2=d.rc2||{},d.rc2.expandKey=function(a,b){"string"==typeof a&&(a=d.util.createBuffer(a)),b=b||128;var c,f=a,g=a.length(),h=b,i=Math.ceil(h/8);for(c=g;c<128;c++)f.putByte(e[f.at(c-1)+f.at(c-g)&255]);for(f.setAt(128-i,e[f.at(128-i)&255>>(7&h)]),c=127-i;c>=0;c--)f.setAt(c,e[f.at(c+1)^f.at(c+i)]);return f};var g=function(a,b,c){var e,g,h,i,j=!1,k=null,l=null,m=null,n=[];for(a=d.rc2.expandKey(a,b),h=0;h<64;h++)n.push(a.getInt16Le());c?(e=function(a){for(h=0;h<4;h++){var b,c;a[h]+=n[i]+(a[(h+3)%4]&a[(h+2)%4])+(~a[(h+3)%4]&a[(h+1)%4]),a[h]=(b=a[h])<<(c=f[h])&65535|(65535&b)>>16-c,i++}},g=function(a){for(h=0;h<4;h++)a[h]+=n[63&a[(h+3)%4]]}):(e=function(a){for(h=3;h>=0;h--){var b,c;a[h]=(65535&(b=a[h]))>>(c=f[h])|b<<16-c&65535,a[h]-=n[i]+(a[(h+3)%4]&a[(h+2)%4])+(~a[(h+3)%4]&a[(h+1)%4]),i--}},g=function(a){for(h=3;h>=0;h--)a[h]-=n[63&a[(h+3)%4]]});var o=function(a){var b=[];for(h=0;h<4;h++){var d=k.getInt16Le();null!==m&&(c?d^=m.getInt16Le():m.putInt16Le(d)),b.push(65535&d)}i=63*!c;for(var e=0;e<a.length;e++)for(var f=0;f<a[e][0];f++)a[e][1](b);for(h=0;h<4;h++)null!==m&&(c?m.putInt16Le(b[h]):b[h]^=m.getInt16Le()),l.putInt16Le(b[h])},p=null;return p={start:function(a,b){a&&"string"==typeof a&&(a=d.util.createBuffer(a)),j=!1,k=d.util.createBuffer(),l=b||new d.util.createBuffer,m=a,p.output=l},update:function(a){for(j||k.putBuffer(a);k.length()>=8;)o([[5,e],[1,g],[6,e],[1,g],[5,e]])},finish:function(a){var b=!0;if(c)if(a)b=a(8,k,!c);else{var d=8===k.length()?8:8-k.length();k.fillWithByte(d,d)}if(b&&(j=!0,p.update()),!c&&(b=0===k.length()))if(a)b=a(8,l,!c);else{var e=l.length(),f=l.at(e-1);f>e?b=!1:l.truncate(f)}return b}}};d.rc2.startEncrypting=function(a,b,c){var e=d.rc2.createEncryptionCipher(a,128);return e.start(b,c),e},d.rc2.createEncryptionCipher=function(a,b){return g(a,b,!0)},d.rc2.startDecrypting=function(a,b,c){var e=d.rc2.createDecryptionCipher(a,128);return e.start(b,c),e},d.rc2.createDecryptionCipher=function(a,b){return g(a,b,!1)}},69445:(a,b,c)=>{a.exports=c(1277),c(38627),c(4554),c(6680),c(37691)},70710:(a,b,c)=>{var d,e=c(45654);c(76632),c(1277),c(33889);var f=e.pkcs5=e.pkcs5||{};e.util.isNodejs&&!e.options.usePureJavaScript&&(d=c(55511)),a.exports=e.pbkdf2=f.pbkdf2=function(a,b,c,f,g,h){if("function"==typeof g&&(h=g,g=null),e.util.isNodejs&&!e.options.usePureJavaScript&&d.pbkdf2&&(null===g||"object"!=typeof g)&&(d.pbkdf2Sync.length>4||!g||"sha1"===g))return("string"!=typeof g&&(g="sha1"),a=Buffer.from(a,"binary"),b=Buffer.from(b,"binary"),h)?4===d.pbkdf2Sync.length?d.pbkdf2(a,b,c,f,function(a,b){if(a)return h(a);h(null,b.toString("binary"))}):d.pbkdf2(a,b,c,f,g,function(a,b){if(a)return h(a);h(null,b.toString("binary"))}):4===d.pbkdf2Sync.length?d.pbkdf2Sync(a,b,c,f).toString("binary"):d.pbkdf2Sync(a,b,c,f,g).toString("binary");if(null==g&&(g="sha1"),"string"==typeof g){if(!(g in e.md.algorithms))throw Error("Unknown hash algorithm: "+g);g=e.md[g].create()}var i=g.digestLength;if(f>0xffffffff*i){var j=Error("Derived key is too long.");if(h)return h(j);throw j}var k=Math.ceil(f/i),l=f-(k-1)*i,m=e.hmac.create();m.start(g,a);var n="";if(!h){for(var o=1;o<=k;++o){m.start(null,null),m.update(b),m.update(e.util.int32ToBytes(o)),q=s=m.digest().getBytes();for(var p=2;p<=c;++p)m.start(null,null),m.update(s),r=m.digest().getBytes(),q=e.util.xorBytes(q,r,i),s=r;n+=o<k?q:q.substr(0,l)}return n}var q,r,s,p,o=1;!function a(){if(o>k)return h(null,n);m.start(null,null),m.update(b),m.update(e.util.int32ToBytes(o)),q=s=m.digest().getBytes(),p=2,function b(){if(p<=c)return m.start(null,null),m.update(s),r=m.digest().getBytes(),q=e.util.xorBytes(q,r,i),s=r,++p,e.util.setImmediate(b);n+=o<k?q:q.substr(0,l),++o,a()}()}()}},76103:(a,b,c)=>{var d=c(45654);c(45518),c(63070),c(88819),c(36105),c(49345),c(56416),c(29984),c(33889),c(65737);var e=d.asn1,f=a.exports=d.pkcs7=d.pkcs7||{};function g(a){var b;if(a.type===d.pki.oids.contentType)b=e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.value).getBytes());else if(a.type===d.pki.oids.messageDigest)b=e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,a.value.bytes());else if(a.type===d.pki.oids.signingTime){var c=new Date("1950-01-01T00:00:00Z"),f=new Date("2050-01-01T00:00:00Z"),g=a.value;if("string"==typeof g){var h=Date.parse(g);g=isNaN(h)?13===g.length?e.utcTimeToDate(g):e.generalizedTimeToDate(g):new Date(h)}b=g>=c&&g<f?e.create(e.Class.UNIVERSAL,e.Type.UTCTIME,!1,e.dateToUtcTime(g)):e.create(e.Class.UNIVERSAL,e.Type.GENERALIZEDTIME,!1,e.dateToGeneralizedTime(g))}return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.type).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[b])])}function h(a,b,c){var f={};if(!e.validate(b,c,f,[])){var g=Error("Cannot read PKCS#7 message. ASN.1 object is not a supported PKCS#7 message.");throw g.errors=g,g}if(e.derToOid(f.contentType)!==d.pki.oids.data)throw Error("Unsupported PKCS#7 message. Only wrapped ContentType Data supported.");if(f.encryptedContent){var h="";if(d.util.isArray(f.encryptedContent))for(var i=0;i<f.encryptedContent.length;++i){if(f.encryptedContent[i].type!==e.Type.OCTETSTRING)throw Error("Malformed PKCS#7 message, expecting encrypted content constructed of only OCTET STRING objects.");h+=f.encryptedContent[i].value}else h=f.encryptedContent;a.encryptedContent={algorithm:e.derToOid(f.encAlgorithm),parameter:d.util.createBuffer(f.encParameter.value),content:d.util.createBuffer(h)}}if(f.content){var h="";if(d.util.isArray(f.content))for(var i=0;i<f.content.length;++i){if(f.content[i].type!==e.Type.OCTETSTRING)throw Error("Malformed PKCS#7 message, expecting content constructed of only OCTET STRING objects.");h+=f.content[i].value}else h=f.content;a.content=d.util.createBuffer(h)}return a.version=f.version.charCodeAt(0),a.rawCapture=f,f}function i(a){if(void 0===a.encryptedContent.key)throw Error("Symmetric key not available.");if(void 0===a.content){var b;switch(a.encryptedContent.algorithm){case d.pki.oids["aes128-CBC"]:case d.pki.oids["aes192-CBC"]:case d.pki.oids["aes256-CBC"]:b=d.aes.createDecryptionCipher(a.encryptedContent.key);break;case d.pki.oids.desCBC:case d.pki.oids["des-EDE3-CBC"]:b=d.des.createDecryptionCipher(a.encryptedContent.key);break;default:throw Error("Unsupported symmetric cipher, OID "+a.encryptedContent.algorithm)}if(b.start(a.encryptedContent.parameter),b.update(a.encryptedContent.content),!b.finish())throw Error("Symmetric decryption failed.");a.content=b.output}}f.messageFromPem=function(a){var b=d.pem.decode(a)[0];if("PKCS7"!==b.type){var c=Error('Could not convert PKCS#7 message from PEM; PEM header type is not "PKCS#7".');throw c.headerType=b.type,c}if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert PKCS#7 message from PEM; PEM is encrypted.");var g=e.fromDer(b.body);return f.messageFromAsn1(g)},f.messageToPem=function(a,b){var c={type:"PKCS7",body:e.toDer(a.toAsn1()).getBytes()};return d.pem.encode(c,{maxline:b})},f.messageFromAsn1=function(a){var b,c={},g=[];if(!e.validate(a,f.asn1.contentInfoValidator,c,g)){var h=Error("Cannot read PKCS#7 message. ASN.1 object is not an PKCS#7 ContentInfo.");throw h.errors=g,h}var i=e.derToOid(c.contentType);switch(i){case d.pki.oids.envelopedData:b=f.createEnvelopedData();break;case d.pki.oids.encryptedData:b=f.createEncryptedData();break;case d.pki.oids.signedData:b=f.createSignedData();break;default:throw Error("Cannot read PKCS#7 message. ContentType with OID "+i+" is not (yet) supported.")}return b.fromAsn1(c.content.value[0]),b},f.createSignedData=function(){var a=null;return a={type:d.pki.oids.signedData,version:1,certificates:[],crls:[],signers:[],digestAlgorithmIdentifiers:[],contentInfo:null,signerInfos:[],fromAsn1:function(b){if(h(a,b,f.asn1.signedDataValidator),a.certificates=[],a.crls=[],a.digestAlgorithmIdentifiers=[],a.contentInfo=null,a.signerInfos=[],a.rawCapture.certificates)for(var c=a.rawCapture.certificates.value,e=0;e<c.length;++e)a.certificates.push(d.pki.certificateFromAsn1(c[e]))},toAsn1:function(){a.contentInfo||a.sign();for(var b=[],c=0;c<a.certificates.length;++c)b.push(d.pki.certificateToAsn1(a.certificates[c]));var f=[],g=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,a.digestAlgorithmIdentifiers),a.contentInfo])]);return b.length>0&&g.value[0].value.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,b)),f.length>0&&g.value[0].value.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,f)),g.value[0].value.push(e.create(e.Class.UNIVERSAL,e.Type.SET,!0,a.signerInfos)),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.type).getBytes()),g])},addSigner:function(b){var c=b.issuer,e=b.serialNumber;if(b.certificate){var f=b.certificate;"string"==typeof f&&(f=d.pki.certificateFromPem(f)),c=f.issuer.attributes,e=f.serialNumber}var g=b.key;if(!g)throw Error("Could not add PKCS#7 signer; no private key specified.");"string"==typeof g&&(g=d.pki.privateKeyFromPem(g));var h=b.digestAlgorithm||d.pki.oids.sha1;switch(h){case d.pki.oids.sha1:case d.pki.oids.sha256:case d.pki.oids.sha384:case d.pki.oids.sha512:case d.pki.oids.md5:break;default:throw Error("Could not add PKCS#7 signer; unknown message digest algorithm: "+h)}var i=b.authenticatedAttributes||[];if(i.length>0){for(var j=!1,k=!1,l=0;l<i.length;++l){var m=i[l];if(!j&&m.type===d.pki.oids.contentType){if(j=!0,k)break;continue}if(!k&&m.type===d.pki.oids.messageDigest){if(k=!0,j)break;continue}}if(!j||!k)throw Error("Invalid signer.authenticatedAttributes. If signer.authenticatedAttributes is specified, then it must contain at least two attributes, PKCS #9 content-type and PKCS #9 message-digest.")}a.signers.push({key:g,version:1,issuer:c,serialNumber:e,digestAlgorithm:h,signatureAlgorithm:d.pki.oids.rsaEncryption,signature:null,authenticatedAttributes:i,unauthenticatedAttributes:[]})},sign:function(b){if(b=b||{},("object"!=typeof a.content||null===a.contentInfo)&&(a.contentInfo=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(d.pki.oids.data).getBytes())]),"content"in a)){var c;a.content instanceof d.util.ByteBuffer?c=a.content.bytes():"string"==typeof a.content&&(c=d.util.encodeUtf8(a.content)),b.detached?a.detachedContent=e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,c):a.contentInfo.value.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,c)]))}0!==a.signers.length&&function(b){if(!(c=a.detachedContent?a.detachedContent:(c=a.contentInfo.value[1]).value[0]))throw Error("Could not sign PKCS#7 message; there is no content to sign.");var c,f=e.derToOid(a.contentInfo.value[0].value),h=e.toDer(c);for(var i in h.getByte(),e.getBerValueLength(h),h=h.getBytes(),b)b[i].start().update(h);for(var j=new Date,k=0;k<a.signers.length;++k){var l=a.signers[k];if(0===l.authenticatedAttributes.length){if(f!==d.pki.oids.data)throw Error("Invalid signer; authenticatedAttributes must be present when the ContentInfo content type is not PKCS#7 Data.")}else{l.authenticatedAttributesAsn1=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[]);for(var m=e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[]),n=0;n<l.authenticatedAttributes.length;++n){var o=l.authenticatedAttributes[n];o.type===d.pki.oids.messageDigest?o.value=b[l.digestAlgorithm].digest():o.type!==d.pki.oids.signingTime||o.value||(o.value=j),m.value.push(g(o)),l.authenticatedAttributesAsn1.value.push(g(o))}h=e.toDer(m).getBytes(),l.md.start().update(h)}l.signature=l.key.sign(l.md,"RSASSA-PKCS1-V1_5")}a.signerInfos=function(a){for(var b=[],c=0;c<a.length;++c)b.push(function(a){var b=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[d.pki.distinguishedNameToAsn1({attributes:a.issuer}),e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,d.util.hexToBytes(a.serialNumber))]),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.digestAlgorithm).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])]);if(a.authenticatedAttributesAsn1&&b.value.push(a.authenticatedAttributesAsn1),b.value.push(e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.signatureAlgorithm).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])),b.value.push(e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,a.signature)),a.unauthenticatedAttributes.length>0){for(var c=e.create(e.Class.CONTEXT_SPECIFIC,1,!0,[]),f=0;f<a.unauthenticatedAttributes.length;++f){var h=a.unauthenticatedAttributes[f];c.values.push(g(h))}b.value.push(c)}return b}(a[c]));return b}(a.signers)}(function(){for(var b={},c=0;c<a.signers.length;++c){var f=a.signers[c],g=f.digestAlgorithm;g in b||(b[g]=d.md[d.pki.oids[g]].create()),0===f.authenticatedAttributes.length?f.md=b[g]:f.md=d.md[d.pki.oids[g]].create()}for(var g in a.digestAlgorithmIdentifiers=[],b)a.digestAlgorithmIdentifiers.push(e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(g).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")]));return b}())},verify:function(){throw Error("PKCS#7 signature verification not yet implemented.")},addCertificate:function(b){"string"==typeof b&&(b=d.pki.certificateFromPem(b)),a.certificates.push(b)},addCertificateRevokationList:function(a){throw Error("PKCS#7 CRL support not yet implemented.")}}},f.createEncryptedData=function(){var a=null;return a={type:d.pki.oids.encryptedData,version:0,encryptedContent:{algorithm:d.pki.oids["aes256-CBC"]},fromAsn1:function(b){h(a,b,f.asn1.encryptedDataValidator)},decrypt:function(b){void 0!==b&&(a.encryptedContent.key=b),i(a)}}},f.createEnvelopedData=function(){var a=null;return a={type:d.pki.oids.envelopedData,version:0,recipients:[],encryptedContent:{algorithm:d.pki.oids["aes256-CBC"]},fromAsn1:function(b){var c=h(a,b,f.asn1.envelopedDataValidator);a.recipients=function(a){for(var b=[],c=0;c<a.length;++c)b.push(function(a){var b={},c=[];if(!e.validate(a,f.asn1.recipientInfoValidator,b,c)){var g=Error("Cannot read PKCS#7 RecipientInfo. ASN.1 object is not an PKCS#7 RecipientInfo.");throw g.errors=c,g}return{version:b.version.charCodeAt(0),issuer:d.pki.RDNAttributesAsArray(b.issuer),serialNumber:d.util.createBuffer(b.serial).toHex(),encryptedContent:{algorithm:e.derToOid(b.encAlgorithm),parameter:b.encParameter?b.encParameter.value:void 0,content:b.encKey}}}(a[c]));return b}(c.recipientInfos.value)},toAsn1:function(){var b;return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.type).getBytes()),e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,function(a){for(var b,c=[],f=0;f<a.length;++f)c.push((b=a[f],e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(b.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[d.pki.distinguishedNameToAsn1({attributes:b.issuer}),e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,d.util.hexToBytes(b.serialNumber))]),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.encryptedContent.algorithm).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")]),e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,b.encryptedContent.content)])));return c}(a.recipients)),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,(b=a.encryptedContent,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(d.pki.oids.data).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.algorithm).getBytes()),b.parameter?e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,b.parameter.getBytes()):void 0]),e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,b.content.getBytes())])]))])])])},findRecipient:function(b){for(var c=b.issuer.attributes,d=0;d<a.recipients.length;++d){var e=a.recipients[d],f=e.issuer;if(e.serialNumber===b.serialNumber&&f.length===c.length){for(var g=!0,h=0;h<c.length;++h)if(f[h].type!==c[h].type||f[h].value!==c[h].value){g=!1;break}if(g)return e}}return null},decrypt:function(b,c){if(void 0===a.encryptedContent.key&&void 0!==b&&void 0!==c)switch(b.encryptedContent.algorithm){case d.pki.oids.rsaEncryption:case d.pki.oids.desCBC:var e=c.decrypt(b.encryptedContent.content);a.encryptedContent.key=d.util.createBuffer(e);break;default:throw Error("Unsupported asymmetric cipher, OID "+b.encryptedContent.algorithm)}i(a)},addRecipient:function(b){a.recipients.push({version:0,issuer:b.issuer.attributes,serialNumber:b.serialNumber,encryptedContent:{algorithm:d.pki.oids.rsaEncryption,key:b.publicKey}})},encrypt:function(b,c){if(void 0===a.encryptedContent.content){switch(c=c||a.encryptedContent.algorithm,b=b||a.encryptedContent.key,c){case d.pki.oids["aes128-CBC"]:e=16,f=16,g=d.aes.createEncryptionCipher;break;case d.pki.oids["aes192-CBC"]:e=24,f=16,g=d.aes.createEncryptionCipher;break;case d.pki.oids["aes256-CBC"]:e=32,f=16,g=d.aes.createEncryptionCipher;break;case d.pki.oids["des-EDE3-CBC"]:e=24,f=8,g=d.des.createEncryptionCipher;break;default:throw Error("Unsupported symmetric cipher, OID "+c)}if(void 0===b)b=d.util.createBuffer(d.random.getBytes(e));else if(b.length()!=e)throw Error("Symmetric key has wrong length; got "+b.length()+" bytes, expected "+e+".");a.encryptedContent.algorithm=c,a.encryptedContent.key=b,a.encryptedContent.parameter=d.util.createBuffer(d.random.getBytes(f));var e,f,g,h=g(b);if(h.start(a.encryptedContent.parameter.copy()),h.update(a.content),!h.finish())throw Error("Symmetric encryption failed.");a.encryptedContent.content=h.output}for(var i=0;i<a.recipients.length;++i){var j=a.recipients[i];if(void 0===j.encryptedContent.content)if(j.encryptedContent.algorithm===d.pki.oids.rsaEncryption)j.encryptedContent.content=j.encryptedContent.key.encrypt(a.encryptedContent.key.data);else throw Error("Unsupported asymmetric cipher, OID "+j.encryptedContent.algorithm)}}}}},76632:(a,b,c)=>{var d=c(45654);c(1277),c(33889),(a.exports=d.hmac=d.hmac||{}).create=function(){var a=null,b=null,c=null,e=null,f={};return f.start=function(f,g){if(null!==f)if("string"==typeof f)if((f=f.toLowerCase())in d.md.algorithms)b=d.md.algorithms[f].create();else throw Error('Unknown hash algorithm "'+f+'"');else b=f;if(null===g)g=a;else{if("string"==typeof g)g=d.util.createBuffer(g);else if(d.util.isArray(g)){var h=g;g=d.util.createBuffer();for(var i=0;i<h.length;++i)g.putByte(h[i])}var j=g.length();j>b.blockLength&&(b.start(),b.update(g.bytes()),g=b.digest()),c=d.util.createBuffer(),e=d.util.createBuffer(),j=g.length();for(var i=0;i<j;++i){var h=g.at(i);c.putByte(54^h),e.putByte(92^h)}if(j<b.blockLength)for(var h=b.blockLength-j,i=0;i<h;++i)c.putByte(54),e.putByte(92);a=g,c=c.bytes(),e=e.bytes()}b.start(),b.update(c)},f.update=function(a){b.update(a)},f.getMac=function(){var a=b.digest().bytes();return b.start(),b.update(e),b.update(a),b.digest()},f.digest=f.getMac,f}},77051:(a,b,c)=>{"use strict";let d=c(14985).promises,e=c(91645),{normalizeIp:f,clientIpMatches:g}=c(54584),h=new Map,i=Object.freeze(["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.2.0/24","192.88.99.0/24","192.168.0.0/16","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","224.0.0.0/4","240.0.0.0/4","::/96","::1/128","100::/64","2001:2::/48","2001:db8::/32","fc00::/7","fe80::/10","ff00::/8"]),j=Object.freeze([".localhost",".local",".internal",".lan",".home.arpa"]);function k(a){return String(a||"").trim().replace(/^\[|\]$/g,"").replace(/\.$/,"").toLowerCase()}function l(a){let b=k(a);return!(!(!b||"localhost"===b||j.some(a=>b.endsWith(a)))&&(e.isIP(b)||b.includes(".")))}function m(a){let b=f(a);return!!e.isIP(b)&&!g(b,i)}function n(a){let b=[...new Set((Array.isArray(a)?a:[a]).map(a=>Number(a)).filter(a=>Number.isInteger(a)&&a>=1&&a<=65535))];return b.length?b:[443]}function o(a){let b=[...a?.addresses||[]];return function(c,d,e){let f=d,g=e;"function"==typeof d&&(g=d,f={});let h="number"==typeof f?f:Number(f?.family||0);if("object"==typeof f&&f?.all===!0){let c=4===h||6===h?b.filter(a=>a.family===h):b;if(!c.length){let b=Error(`No validated public address for ${a.host}`);b.code="ENOTFOUND",g(b);return}g(null,c.map(({address:a,family:b})=>({address:a,family:b})));return}let i=function(a,b=0){let c=Number(b||0);return 4===c||6===c?a.find(a=>a.family===c)||null:a.find(a=>4===a.family)||a[0]||null}(b,h);if(!i){let b=Error(`No validated public address for ${a.host}`);b.code="ENOTFOUND",g(b);return}g(null,i.address,i.family)}}async function p(a,b,c={}){let g=k(a),i=Number(b||443),j=n(c.allowedPorts||[443]);if(!g)throw Error("Destination host is empty");if(!Number.isInteger(i)||!j.includes(i))throw Error(`CONNECT destination port ${i||"unknown"} is not allowed`);if(l(g))throw Error(`Private or local destination hostname is not allowed: ${g}`);let q=e.isIP(f(g));if(q){let a=f(g);if(!m(a))throw Error(`Private or reserved destination address is not allowed: ${a}`);let b={host:g,port:i,addresses:[{address:a,family:q}]};return{...b,lookup:o(b)}}let r=Date.now(),s=h.get(g);if(!s||s.expiresAt<=r){let a=await d.lookup(g,{all:!0,verbatim:!0}),b=[],c=new Set;for(let d of a||[]){let a=f(d.address),g=e.isIP(a);if(!g||!m(a))continue;let h=`${g}:${a}`;c.has(h)||(c.add(h),b.push({address:a,family:g}))}if(!b.length)throw Error(`Destination did not resolve to a public address: ${g}`);s={addresses:b,expiresAt:r+6e4},h.set(g,s)}let t={host:g,port:i,addresses:[...s.addresses]};return{...t,lookup:o(t)}}a.exports={BLOCKED_ADDRESS_RANGES:i,normalizeTargetHost:k,normalizeAllowedPorts:n,isBlockedHostname:l,isPublicAddress:m,createPinnedLookup:o,resolvePublicTarget:p,clearDnsPolicyCache:function(){h.clear()}}},79841:(a,b,c)=>{"use strict";let{EventEmitter:d}=c(78474),e=Symbol.for("bluerouter.realtime-usage.v1");function f(){let a="u">typeof process?process:globalThis;if(!a[e]){let b=new d;b.setMaxListeners(100),a[e]={emitter:b,ring:{items:[],initialized:!1}}}return a[e]}function g(a={}){let b=String(a.requestId||"").trim();if(b)return`request:${b}`;let c=new Date(a.timestamp||0).getTime();return`fallback:${c}|${a.model||""}|${a.provider||""}|${a.connectionId||""}`}a.exports={entryKey:g,getRealtimeUsageState:f,publishRecentUsage:function(a,{emit:b=!0,cap:c=50}={}){if(!a||"object"!=typeof a)return null;let d=f(),e=g(a),h=d.ring.items.findIndex(a=>g(a)===e),i=h>=0?function(a={},b={}){return{...a,...b,tokens:{...a.tokens&&"object"==typeof a.tokens?a.tokens:{},...b.tokens&&"object"==typeof b.tokens?b.tokens:{}}}}(d.ring.items[h],a):{...a};return h>=0?d.ring.items[h]=i:d.ring.items.push(i),d.ring.items=d.ring.items.sort((a,b)=>new Date(a.timestamp||0)-new Date(b.timestamp||0)).slice(-Math.max(1,Number(c)||50)),d.ring.initialized=!0,b&&d.emitter.emit("update",{source:"memory-ring",requestId:i.requestId||""}),i},resetForTests:function(){let a=f();a.ring.items=[],a.ring.initialized=!1,a.emitter.removeAllListeners()}}},87981:(a,b,c)=>{var d=c(45654);c(29984),c(33889),(a.exports=d.pss=d.pss||{}).create=function(a){3==arguments.length&&(a={md:arguments[0],mgf:arguments[1],saltLength:arguments[2]});var b,c=a.md,e=a.mgf,f=c.digestLength,g=a.salt||null;if("string"==typeof g&&(g=d.util.createBuffer(g)),"saltLength"in a)b=a.saltLength;else if(null!==g)b=g.length();else throw Error("Salt length not specified or specific salt not given.");if(null!==g&&g.length()!==b)throw Error("Given salt length does not match length of given salt.");var h=a.prng||d.random,i={};return i.encode=function(a,i){var j,k,l=i-1,m=Math.ceil(l/8),n=a.digest().getBytes();if(m<f+b+2)throw Error("Message is too long to encrypt.");k=null===g?h.getBytesSync(b):g.bytes();var o=new d.util.ByteBuffer;o.fillWithByte(0,8),o.putBytes(n),o.putBytes(k),c.start(),c.update(o.getBytes());var p=c.digest().getBytes(),q=new d.util.ByteBuffer;q.fillWithByte(0,m-b-f-2),q.putByte(1),q.putBytes(k);var r=q.getBytes(),s=m-f-1,t=e.generate(p,s),u="";for(j=0;j<s;j++)u+=String.fromCharCode(r.charCodeAt(j)^t.charCodeAt(j));return(u=String.fromCharCode(u.charCodeAt(0)&~(65280>>8*m-l&255))+u.substr(1))+p+String.fromCharCode(188)},i.verify=function(a,g,h){var i,j=h-1,k=Math.ceil(j/8);if(g=g.substr(-k),k<f+b+2)throw Error("Inconsistent parameters to PSS signature verification.");if(188!==g.charCodeAt(k-1))throw Error("Encoded message does not end in 0xBC.");var l=k-f-1,m=g.substr(0,l),n=g.substr(l,f),o=65280>>8*k-j&255;if((m.charCodeAt(0)&o)!=0)throw Error("Bits beyond keysize not zero as expected.");var p=e.generate(n,l),q="";for(i=0;i<l;i++)q+=String.fromCharCode(m.charCodeAt(i)^p.charCodeAt(i));q=String.fromCharCode(q.charCodeAt(0)&~o)+q.substr(1);var r=k-f-b-2;for(i=0;i<r;i++)if(0!==q.charCodeAt(i))throw Error("Leftmost octets not zero as expected");if(1!==q.charCodeAt(r))throw Error("Inconsistent PSS signature, 0x01 marker not found");var s=q.substr(-b),t=new d.util.ByteBuffer;return t.fillWithByte(0,8),t.putBytes(a),t.putBytes(s),c.start(),c.update(t.getBytes()),n===c.digest().getBytes()},i}},88819:(a,b,c)=>{var d=c(45654);function e(a,b){d.cipher.registerAlgorithm(a,function(){return new d.des.Algorithm(a,b)})}c(66568),c(19396),c(33889),a.exports=d.des=d.des||{},d.des.startEncrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!1,mode:d||(null===b?"ECB":"CBC")});return e.start(b),e},d.des.createEncryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!1,mode:b})},d.des.startDecrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!0,mode:d||(null===b?"ECB":"CBC")});return e.start(b),e},d.des.createDecryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!0,mode:b})},d.des.Algorithm=function(a,b){var c=this;c.name=a,c.mode=new b({blockSize:8,cipher:{encrypt:function(a,b){return n(c._keys,a,b,!1)},decrypt:function(a,b){return n(c._keys,a,b,!0)}}}),c._init=!1},d.des.Algorithm.prototype.initialize=function(a){if(!this._init){var b=d.util.createBuffer(a.key);if(0===this.name.indexOf("3DES")&&24!==b.length())throw Error("Invalid Triple-DES key size: "+8*b.length());this._keys=function(a){for(var b,c=[0,4,0x20000000,0x20000004,65536,65540,0x20010000,0x20010004,512,516,0x20000200,0x20000204,66048,66052,0x20010200,0x20010204],d=[0,1,1048576,1048577,0x4000000,0x4000001,0x4100000,0x4100001,256,257,1048832,1048833,0x4000100,0x4000101,0x4100100,0x4100101],e=[0,8,2048,2056,0x1000000,0x1000008,0x1000800,0x1000808,0,8,2048,2056,0x1000000,0x1000008,0x1000800,0x1000808],f=[0,2097152,0x8000000,0x8200000,8192,2105344,0x8002000,0x8202000,131072,2228224,0x8020000,0x8220000,139264,2236416,0x8022000,0x8222000],g=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],h=[0,1024,32,1056,0,1024,32,1056,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420],i=[0,0x10000000,524288,0x10080000,2,0x10000002,524290,0x10080002,0,0x10000000,524288,0x10080000,2,0x10000002,524290,0x10080002],j=[0,65536,2048,67584,0x20000000,0x20010000,0x20000800,0x20010800,131072,196608,133120,198656,0x20020000,0x20030000,0x20020800,0x20030800],k=[0,262144,0,262144,2,262146,2,262146,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002],l=[0,0x10000000,8,0x10000008,0,0x10000000,8,0x10000008,1024,0x10000400,1032,0x10000408,1024,0x10000400,1032,0x10000408],m=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],n=[0,0x1000000,512,0x1000200,2097152,0x1200000,2097664,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200],o=[0,4096,0x8000000,0x8001000,524288,528384,0x8080000,0x8081000,16,4112,0x8000010,0x8001010,524304,528400,0x8080010,0x8081010],p=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],q=a.length()>8?3:1,r=[],s=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],t=0,u=0;u<q;u++){var v=a.getInt32(),w=a.getInt32();b=(v>>>4^w)&0xf0f0f0f,w^=b,v^=b<<4,b=(w>>>-16^v)&65535,v^=b,w^=b<<-16,b=(v>>>2^w)&0x33333333,w^=b,v^=b<<2,b=(w>>>-16^v)&65535,v^=b,w^=b<<-16,b=(v>>>1^w)&0x55555555,w^=b,v^=b<<1,b=(w>>>8^v)&0xff00ff,v^=b,w^=b<<8,b=(v>>>1^w)&0x55555555,w^=b,v^=b<<1,b=v<<8|w>>>20&240,v=w<<24|w<<8&0xff0000|w>>>8&65280|w>>>24&240,w=b;for(var x=0;x<s.length;++x){s[x]?(v=v<<2|v>>>26,w=w<<2|w>>>26):(v=v<<1|v>>>27,w=w<<1|w>>>27),w&=-15;var y=c[(v&=-15)>>>28]|d[v>>>24&15]|e[v>>>20&15]|f[v>>>16&15]|g[v>>>12&15]|h[v>>>8&15]|i[v>>>4&15],z=j[w>>>28]|k[w>>>24&15]|l[w>>>20&15]|m[w>>>16&15]|n[w>>>12&15]|o[w>>>8&15]|p[w>>>4&15];b=(z>>>16^y)&65535,r[t++]=y^b,r[t++]=z^b<<16}}return r}(b),this._init=!0}},e("DES-ECB",d.cipher.modes.ecb),e("DES-CBC",d.cipher.modes.cbc),e("DES-CFB",d.cipher.modes.cfb),e("DES-OFB",d.cipher.modes.ofb),e("DES-CTR",d.cipher.modes.ctr),e("3DES-ECB",d.cipher.modes.ecb),e("3DES-CBC",d.cipher.modes.cbc),e("3DES-CFB",d.cipher.modes.cfb),e("3DES-OFB",d.cipher.modes.ofb),e("3DES-CTR",d.cipher.modes.ctr);var f=[0x1010400,0,65536,0x1010404,0x1010004,66564,4,65536,1024,0x1010400,0x1010404,1024,0x1000404,0x1010004,0x1000000,4,1028,0x1000400,0x1000400,66560,66560,0x1010000,0x1010000,0x1000404,65540,0x1000004,0x1000004,65540,0,1028,66564,0x1000000,65536,0x1010404,4,0x1010000,0x1010400,0x1000000,0x1000000,1024,0x1010004,65536,66560,0x1000004,1024,4,0x1000404,66564,0x1010404,65540,0x1010000,0x1000404,0x1000004,1028,66564,0x1010400,1028,0x1000400,0x1000400,0,65540,66560,0,0x1010004],g=[-0x7fef7fe0,-0x7fff8000,32768,1081376,1048576,32,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,1048576,32,-0x7fefffe0,1081344,1048608,-0x7fff7fe0,0,-0x80000000,32768,1081376,-0x7ff00000,1048608,-0x7fffffe0,0,1081344,32800,-0x7fef8000,-0x7ff00000,32800,0,1081376,-0x7fefffe0,1048576,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,32768,-0x7ff00000,-0x7fff8000,32,-0x7fef7fe0,1081376,32,32768,-0x80000000,32800,-0x7fef8000,1048576,-0x7fffffe0,1048608,-0x7fff7fe0,-0x7fffffe0,1048608,1081344,0,-0x7fff8000,32800,-0x80000000,-0x7fefffe0,-0x7fef7fe0,1081344],h=[520,0x8020200,0,0x8020008,0x8000200,0,131592,0x8000200,131080,0x8000008,0x8000008,131072,0x8020208,131080,0x8020000,520,0x8000000,8,0x8020200,512,131584,0x8020000,0x8020008,131592,0x8000208,131584,131072,0x8000208,8,0x8020208,512,0x8000000,0x8020200,0x8000000,131080,520,131072,0x8020200,0x8000200,0,512,131080,0x8020208,0x8000200,0x8000008,512,0,0x8020008,0x8000208,131072,0x8000000,0x8020208,8,131592,131584,0x8000008,0x8020000,0x8000208,520,0x8020000,131592,8,0x8020008,131584],i=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],j=[256,0x2080100,0x2080000,0x42000100,524288,256,0x40000000,0x2080000,0x40080100,524288,0x2000100,0x40080100,0x42000100,0x42080000,524544,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,524544,524288,0x42000100,256,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,256,0x2000000,0x42080000,0x42080100,524544,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,524544,0x2000100,0x40000100,524288,0,0x40080000,0x2080100,0x40000100],k=[0x20000010,0x20400000,16384,0x20404010,0x20400000,16,0x20404010,4194304,0x20004000,4210704,4194304,0x20000010,4194320,0x20004000,0x20000000,16400,0,4194320,0x20004010,16384,4210688,0x20004010,16,0x20400010,0x20400010,0,4210704,0x20404000,16400,4210688,0x20404000,0x20000000,0x20004000,16,0x20400010,4210688,0x20404010,4194304,16400,0x20000010,4194304,0x20004000,0x20000000,16400,0x20000010,0x20404010,4210688,0x20400000,4210704,0x20404000,0,0x20400010,16,16384,0x20400000,4210704,16384,4194320,0x20004010,0,0x20404000,0x20000000,4194320,0x20004010],l=[2097152,0x4200002,0x4000802,0,2048,0x4000802,2099202,0x4200800,0x4200802,2097152,0,0x4000002,2,0x4000000,0x4200002,2050,0x4000800,2099202,2097154,0x4000800,0x4000002,0x4200000,0x4200800,2097154,0x4200000,2048,2050,0x4200802,2099200,2,0x4000000,2099200,0x4000000,2099200,2097152,0x4000802,0x4000802,0x4200002,0x4200002,2,2097154,0x4000000,0x4000800,2097152,0x4200800,2050,2099202,0x4200800,2050,0x4000002,0x4200802,0x4200000,2099200,0,2,0x4200802,0,2099202,0x4200000,2048,0x4000002,0x4000800,2048,2097154],m=[0x10001040,4096,262144,0x10041040,0x10000000,0x10001040,64,0x10000000,262208,0x10040000,0x10041040,266240,0x10041000,266304,4096,64,0x10040000,0x10000040,0x10001000,4160,266240,262208,0x10040040,0x10041000,4160,0,0,0x10040040,0x10000040,0x10001000,266304,262144,266304,262144,0x10041000,4096,64,0x10040040,4096,266304,0x10001000,64,0x10000040,0x10040000,0x10040040,0x10000000,262144,0x10001040,0,0x10041040,262208,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,266240,266240,4160,4160,262208,0x10000000,0x10041000];function n(a,b,c,d){var e,n,o=32===a.length?3:9;e=3===o?d?[30,-2,-2]:[0,32,2]:d?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var p=b[0],q=b[1];n=(p>>>4^q)&0xf0f0f0f,q^=n,p^=n<<4,n=(p>>>16^q)&65535,q^=n,p^=n<<16,n=(q>>>2^p)&0x33333333,p^=n,q^=n<<2,n=(q>>>8^p)&0xff00ff,p^=n,q^=n<<8,n=(p>>>1^q)&0x55555555,q^=n,p^=n<<1,p=p<<1|p>>>31,q=q<<1|q>>>31;for(var r=0;r<o;r+=3){for(var s=e[r+1],t=e[r+2],u=e[r];u!=s;u+=t){var v=q^a[u],w=(q>>>4|q<<28)^a[u+1];n=p,p=q,q=n^(g[v>>>24&63]|i[v>>>16&63]|k[v>>>8&63]|m[63&v]|f[w>>>24&63]|h[w>>>16&63]|j[w>>>8&63]|l[63&w])}n=p,p=q,q=n}n=((p=p>>>1|p<<31)>>>1^(q=q>>>1|q<<31))&0x55555555,q^=n,p^=n<<1,n=(q>>>8^p)&0xff00ff,p^=n,q^=n<<8,n=(q>>>2^p)&0x33333333,p^=n,q^=n<<2,n=(p>>>16^q)&65535,q^=n,p^=n<<16,n=(p>>>4^q)&0xf0f0f0f,q^=n,p^=n<<4,c[0]=p,c[1]=q}function o(a){var b,c="DES-"+((a=a||{}).mode||"CBC").toUpperCase(),e=(b=a.decrypt?d.cipher.createDecipher(c,a.key):d.cipher.createCipher(c,a.key)).start;return b.start=function(a,c){var f=null;c instanceof d.util.ByteBuffer&&(f=c,c={}),(c=c||{}).output=f,c.iv=a,e.call(b,c)},b}},93599:(a,b,c)=>{"use strict";let d=c(73496),e=c(91645),f=c(34631),g=c(74075),h=c(55511),i=c(5019),{createAuditProxy:j,CaptureBuffer:k}=c(33575),{containsLikelySecret:l}=c(14681),{clientIpMatches:m,normalizeAllowedClientIps:n}=c(54584),{normalizeAllowedTools:o,clientToolMatches:p,shouldRefuseClientTool:q}=c(47141),{createProxyAuthenticator:r,createProxyAuthLimiter:s,hashProxyPassword:t,parseBasicProxyAuthorization:u}=c(99721),{isPublicAddress:v}=c(77051),{promptLogMirrorDecision:w}=c(62952);function x(a){return h.createHash("sha256").update(a).digest("hex")}function y(a){let b=i.pki.rsa.generateKeyPair(2048),c=i.pki.createCertificate();c.publicKey=b.publicKey,c.serialNumber=String(Date.now()),c.validity.notBefore=new Date(Date.now()-6e4),c.validity.notAfter=new Date(Date.now()+864e5);let d=[{name:"commonName",value:a}];return c.setSubject(d),c.setIssuer(d),c.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0}]),c.sign(b.privateKey,i.md.sha256.create()),{cert:c,keys:b,certPem:i.pki.certificateToPem(c)}}function z(a,b){let c=i.pki.rsa.generateKeyPair(2048),d=i.pki.createCertificate();return d.publicKey=c.publicKey,d.serialNumber=`${Date.now()}${Math.floor(1e3*Math.random())}`,d.validity.notBefore=new Date(Date.now()-6e4),d.validity.notAfter=new Date(Date.now()+864e5),d.setSubject([{name:"commonName",value:b}]),d.setIssuer(a.cert.subject.attributes),d.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:b}]}]),d.sign(a.keys.privateKey,i.md.sha256.create()),{cert:i.pki.certificateToPem(d),key:i.pki.privateKeyToPem(c.privateKey)}}function A(a,b="127.0.0.1"){return new Promise((c,d)=>{a.once("error",d),a.listen(0,b,()=>{a.removeListener("error",d),c(a.address())})})}function B(a){return new Promise(b=>{if(!a)return b();try{a.forceCloseAll?.()}catch{}if(!a.listening)return b();a.close(()=>b()),setTimeout(b,1e3).unref?.()})}function C(a,b){let c="127.0.0.1";return Promise.resolve({host:a,port:b,addresses:[{address:c,family:4}],lookup:(a,b,d)=>{let e=b,f=d;"function"==typeof b&&(f=b,e={}),e?.all?f(null,[{address:c,family:4}]):f(null,c,4)}})}function D(a,b,c="",d=""){return new Promise((f,g)=>{let h=e.connect(a,"127.0.0.1"),i=Buffer.alloc(0),j=setTimeout(()=>g(Error("CONNECT timeout")),7e3);h.once("error",g),h.once("connect",()=>{let a=c?`User-Agent: ${c}\r
49
+ AND NOT EXISTS (SELECT 1 FROM prompt_logs r WHERE r.response_payload_hash = p.payload_hash)`,[b]);await a.commit()}catch(b){if(a)try{await a.rollback()}catch{}H(`Failed to clear mirrored audit rows: ${b.message||b}`)}finally{try{a?.release()}catch{}}}a.exports={appendAudit:function(a){return ab(async()=>a)},enqueueAuditJob:ab,readRecent:ae,clearAudit:async function a(){G.clearing=!0,G.queue.length=0,G.workers.size&&await Promise.allSettled([...G.workers]),j();let a=await d.promises.readdir(i).catch(()=>[]);await Promise.all(a.filter(a=>a.endsWith(".jsonl")).map(a=>d.promises.unlink(e.join(i,a)).catch(()=>{}))),await d.promises.writeFile(h,"",{mode:384}).catch(()=>{}),F.clear(),await ai(),G.clearing=!1,G.queue.length&&setImmediate(aa)},pruneExpired:ag,startAuditMaintenance:function(){E||(E=setInterval(()=>void ag(),36e5),E.unref?.())},stopAuditMaintenance:function(){E&&clearInterval(E),E=null},flushAuditQueue:ah,getAuditStoreStats:function(){return{queueDepth:G.queue.length,queueLimit:1e3,workerRunning:G.activeWorkers>0,workerConcurrency:4,activeWorkers:G.activeWorkers,mysqlPoolConnections:4,enqueued:G.enqueued,written:G.written,dropped:G.dropped,failed:G.failed,mysqlWritten:G.mysqlWritten,mysqlFailed:G.mysqlFailed,mysqlSkipped:G.mysqlSkipped,mysqlSkippedByReason:{...G.mysqlSkippedByReason},usageWritten:G.usageWritten,usageFailed:G.usageFailed,tokensSeen:G.tokensSeen,lastError:G.lastError,lastWrittenAt:G.lastWrittenAt,logDirectory:i}},appendPromptLog:U,appendUsageEvent:X,promptLogMirrorDecision:T}},63070:(a,b,c)=>{var d=c(45654);c(33889),c(36105);var e=a.exports=d.asn1=d.asn1||{};function f(a,b,c){if(c>b){var d=Error("Too few bytes to parse DER.");throw d.available=a.length(),d.remaining=b,d.requested=c,d}}e.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192},e.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30},e.maxDepth=256,e.create=function(a,b,c,f,g){if(d.util.isArray(f)){for(var h=[],i=0;i<f.length;++i)void 0!==f[i]&&h.push(f[i]);f=h}var j={tagClass:a,type:b,constructed:c,composed:c||d.util.isArray(f),value:f};return g&&"bitStringContents"in g&&(j.bitStringContents=g.bitStringContents,j.original=e.copy(j)),j},e.copy=function(a,b){var c;if(d.util.isArray(a)){c=[];for(var f=0;f<a.length;++f)c.push(e.copy(a[f],b));return c}return"string"==typeof a?a:(c={tagClass:a.tagClass,type:a.type,constructed:a.constructed,composed:a.composed,value:e.copy(a.value,b)},b&&!b.excludeBitStringContents&&(c.bitStringContents=a.bitStringContents),c)},e.equals=function(a,b,c){if(d.util.isArray(a)){if(!d.util.isArray(b)||a.length!==b.length)return!1;for(var f=0;f<a.length;++f)if(!e.equals(a[f],b[f]))return!1;return!0}if(typeof a!=typeof b)return!1;if("string"==typeof a)return a===b;var g=a.tagClass===b.tagClass&&a.type===b.type&&a.constructed===b.constructed&&a.composed===b.composed&&e.equals(a.value,b.value);return c&&c.includeBitStringContents&&(g=g&&a.bitStringContents===b.bitStringContents),g},e.getBerValueLength=function(a){var b=a.getByte();if(128!==b)return 128&b?a.getInt((127&b)<<3):b};var g=function(a,b){var c,d=a.getByte();if(b--,128!==d){if(128&d){var e=127&d;f(a,b,e),c=a.getInt(e<<3)}else c=d;if(c<0)throw Error("Negative length: "+c);return c}};e.fromDer=function(a,b){void 0===b&&(b={strict:!0,parseAllBytes:!0,decodeBitStrings:!0}),"boolean"==typeof b&&(b={strict:b,parseAllBytes:!0,decodeBitStrings:!0}),"strict"in b||(b.strict=!0),"parseAllBytes"in b||(b.parseAllBytes=!0),"decodeBitStrings"in b||(b.decodeBitStrings=!0),"maxDepth"in b||(b.maxDepth=e.maxDepth),"string"==typeof a&&(a=d.util.createBuffer(a));var c=a.length(),h=function a(b,c,d,h){if(d>=h.maxDepth)throw Error("ASN.1 parsing error: Max depth exceeded.");f(b,c,2);var i,j,k,l=b.getByte();c--;var m=192&l,n=31&l;i=b.length();var o=g(b,c);if(c-=i-b.length(),void 0!==o&&o>c){if(h.strict){var p=Error("Too few bytes to read ASN.1 value.");throw p.available=b.length(),p.remaining=c,p.requested=o,p}o=c}var q=(32&l)==32;if(q)if(j=[],void 0===o)for(;;){if(f(b,c,2),b.bytes(2)===String.fromCharCode(0,0)){b.getBytes(2),c-=2;break}i=b.length(),j.push(a(b,c,d+1,h)),c-=i-b.length()}else for(;o>0;)i=b.length(),j.push(a(b,o,d+1,h)),c-=i-b.length(),o-=i-b.length();if(void 0===j&&m===e.Class.UNIVERSAL&&n===e.Type.BITSTRING&&(k=b.bytes(o)),void 0===j&&h.decodeBitStrings&&m===e.Class.UNIVERSAL&&n===e.Type.BITSTRING&&o>1){var r=b.read,s=c,t=0;if(n===e.Type.BITSTRING&&(f(b,c,1),t=b.getByte(),c--),0===t)try{i=b.length();var u=a(b,c,d+1,{strict:!0,decodeBitStrings:!0}),v=i-b.length();c-=v,n==e.Type.BITSTRING&&v++;var w=u.tagClass;v===o&&(w===e.Class.UNIVERSAL||w===e.Class.CONTEXT_SPECIFIC)&&(j=[u])}catch(a){}void 0===j&&(b.read=r,c=s)}if(void 0===j){if(void 0===o){if(h.strict)throw Error("Non-constructed ASN.1 object of indefinite length.");o=c}if(n===e.Type.BMPSTRING)for(j="";o>0;o-=2)f(b,c,2),j+=String.fromCharCode(b.getInt16()),c-=2;else j=b.getBytes(o),c-=o}var x=void 0===k?null:{bitStringContents:k};return e.create(m,n,q,j,x)}(a,a.length(),0,b);if(b.parseAllBytes&&0!==a.length()){var i=Error("Unparsed DER bytes remain after ASN.1 parsing.");throw i.byteCount=c,i.remaining=a.length(),i}return h},e.toDer=function(a){var b=d.util.createBuffer(),c=a.tagClass|a.type,f=d.util.createBuffer(),g=!1;if("bitStringContents"in a&&(g=!0,a.original&&(g=e.equals(a,a.original))),g)f.putBytes(a.bitStringContents);else if(a.composed){a.constructed?c|=32:f.putByte(0);for(var h=0;h<a.value.length;++h)void 0!==a.value[h]&&f.putBuffer(e.toDer(a.value[h]))}else if(a.type===e.Type.BMPSTRING)for(var h=0;h<a.value.length;++h)f.putInt16(a.value.charCodeAt(h));else a.type===e.Type.INTEGER&&a.value.length>1&&(0===a.value.charCodeAt(0)&&(128&a.value.charCodeAt(1))==0||255===a.value.charCodeAt(0)&&(128&a.value.charCodeAt(1))==128)?f.putBytes(a.value.substr(1)):f.putBytes(a.value);if(b.putByte(c),127>=f.length())b.putByte(127&f.length());else{var i=f.length(),j="";do j+=String.fromCharCode(255&i),i>>>=8;while(i>0);b.putByte(128|j.length);for(var h=j.length-1;h>=0;--h)b.putByte(j.charCodeAt(h))}return b.putBuffer(f),b},e.oidToDer=function(a){var b,c,e,f,g=a.split("."),h=d.util.createBuffer();h.putByte(40*parseInt(g[0],10)+parseInt(g[1],10));for(var i=2;i<g.length;++i){if(b=!0,c=[],(e=parseInt(g[i],10))>0xffffffff)throw Error("OID value too large; max is 32-bits.");do f=127&e,e>>>=7,b||(f|=128),c.push(f),b=!1;while(e>0);for(var j=c.length-1;j>=0;--j)h.putByte(c[j])}return h},e.derToOid=function(a){"string"==typeof a&&(a=d.util.createBuffer(a));var b,c=a.getByte();b=Math.floor(c/40)+"."+c%40;for(var e=0;a.length()>0;){if(e>0x3fffffffffff)throw Error("OID value too large; max is 53-bits.");c=a.getByte(),e*=128,128&c?e+=127&c:(b+="."+(e+c),e=0)}return b},e.utcTimeToDate=function(a){var b=new Date,c=parseInt(a.substr(0,2),10);c=c>=50?1900+c:2e3+c;var d=parseInt(a.substr(2,2),10)-1,e=parseInt(a.substr(4,2),10),f=parseInt(a.substr(6,2),10),g=parseInt(a.substr(8,2),10),h=0;if(a.length>11){var i=a.charAt(10),j=10;"+"!==i&&"-"!==i&&(h=parseInt(a.substr(10,2),10),j+=2)}if(b.setUTCFullYear(c,d,e),b.setUTCHours(f,g,h,0),j&&("+"===(i=a.charAt(j))||"-"===i)){var k=60*parseInt(a.substr(j+1,2),10)+parseInt(a.substr(j+4,2),10);k*=6e4,"+"===i?b.setTime(b-k):b.setTime(+b+k)}return b},e.generalizedTimeToDate=function(a){var b=new Date,c=parseInt(a.substr(0,4),10),d=parseInt(a.substr(4,2),10)-1,e=parseInt(a.substr(6,2),10),f=parseInt(a.substr(8,2),10),g=parseInt(a.substr(10,2),10),h=parseInt(a.substr(12,2),10),i=0,j=0,k=!1;"Z"===a.charAt(a.length-1)&&(k=!0);var l=a.length-5,m=a.charAt(l);return("+"===m||"-"===m)&&(j=(60*parseInt(a.substr(l+1,2),10)+parseInt(a.substr(l+4,2),10))*6e4,"+"===m&&(j*=-1),k=!0),"."===a.charAt(14)&&(i=1e3*parseFloat(a.substr(14),10)),k?(b.setUTCFullYear(c,d,e),b.setUTCHours(f,g,h,i),b.setTime(+b+j)):(b.setFullYear(c,d,e),b.setHours(f,g,h,i)),b},e.dateToUtcTime=function(a){if("string"==typeof a)return a;var b="",c=[];c.push((""+a.getUTCFullYear()).substr(2)),c.push(""+(a.getUTCMonth()+1)),c.push(""+a.getUTCDate()),c.push(""+a.getUTCHours()),c.push(""+a.getUTCMinutes()),c.push(""+a.getUTCSeconds());for(var d=0;d<c.length;++d)c[d].length<2&&(b+="0"),b+=c[d];return b+"Z"},e.dateToGeneralizedTime=function(a){if("string"==typeof a)return a;var b="",c=[];c.push(""+a.getUTCFullYear()),c.push(""+(a.getUTCMonth()+1)),c.push(""+a.getUTCDate()),c.push(""+a.getUTCHours()),c.push(""+a.getUTCMinutes()),c.push(""+a.getUTCSeconds());for(var d=0;d<c.length;++d)c[d].length<2&&(b+="0"),b+=c[d];return b+"Z"},e.integerToDer=function(a){var b=d.util.createBuffer();if(a>=-128&&a<128)return b.putSignedInt(a,8);if(a>=-32768&&a<32768)return b.putSignedInt(a,16);if(a>=-8388608&&a<8388608)return b.putSignedInt(a,24);if(a>=-0x80000000&&a<0x80000000)return b.putSignedInt(a,32);var c=Error("Integer too large; max is 32-bits.");throw c.integer=a,c},e.derToInteger=function(a){"string"==typeof a&&(a=d.util.createBuffer(a));var b=8*a.length();if(b>32)throw Error("Integer too large; max is 32-bits.");return a.getSignedInt(b)},e.validate=function(a,b,c,f){var g=!1;if((a.tagClass===b.tagClass||void 0===b.tagClass)&&(a.type===b.type||void 0===b.type))if(a.constructed===b.constructed||void 0===b.constructed){if(g=!0,b.value&&d.util.isArray(b.value))for(var h=0,i=0;g&&i<b.value.length;++i){var j=b.value[i];g=!!j.optional;var k=a.value[h];if(!k){!j.optional&&(g=!1,f&&f.push("["+b.name+'] Missing required element. Expected tag class "'+j.tagClass+'", type "'+j.type+'"'));continue}if(void 0!==j.tagClass&&void 0!==j.type&&(k.tagClass!==j.tagClass||k.type!==j.type))if(j.optional){g=!0;continue}else{g=!1,f&&f.push("["+b.name+"] Tag mismatch. Expected ("+j.tagClass+","+j.type+"), got ("+k.tagClass+","+k.type+")");break}if(e.validate(k,j,c,f))++h,g=!0;else if(j.optional)g=!0;else{g=!1;break}}if(g&&c&&(b.capture&&(c[b.capture]=a.value),b.captureAsn1&&(c[b.captureAsn1]=a),b.captureBitStringContents&&"bitStringContents"in a&&(c[b.captureBitStringContents]=a.bitStringContents),b.captureBitStringValue&&"bitStringContents"in a))if(a.bitStringContents.length<2)c[b.captureBitStringValue]="";else{if(0!==a.bitStringContents.charCodeAt(0))throw Error("captureBitStringValue only supported for zero unused bits");c[b.captureBitStringValue]=a.bitStringContents.slice(1)}}else f&&f.push("["+b.name+'] Expected constructed "'+b.constructed+'", got "'+a.constructed+'"');else f&&(a.tagClass!==b.tagClass&&f.push("["+b.name+'] Expected tag class "'+b.tagClass+'", got "'+a.tagClass+'"'),a.type!==b.type&&f.push("["+b.name+'] Expected type "'+b.type+'", got "'+a.type+'"'));return g};var h=/[^\\u0000-\\u00ff]/;e.prettyPrint=function(a,b,c){var f="";c=c||2,(b=b||0)>0&&(f+="\n");for(var g="",i=0;i<b*c;++i)g+=" ";switch(f+=g+"Tag: ",a.tagClass){case e.Class.UNIVERSAL:f+="Universal:";break;case e.Class.APPLICATION:f+="Application:";break;case e.Class.CONTEXT_SPECIFIC:f+="Context-Specific:";break;case e.Class.PRIVATE:f+="Private:"}if(a.tagClass===e.Class.UNIVERSAL)switch(f+=a.type,a.type){case e.Type.NONE:f+=" (None)";break;case e.Type.BOOLEAN:f+=" (Boolean)";break;case e.Type.INTEGER:f+=" (Integer)";break;case e.Type.BITSTRING:f+=" (Bit string)";break;case e.Type.OCTETSTRING:f+=" (Octet string)";break;case e.Type.NULL:f+=" (Null)";break;case e.Type.OID:f+=" (Object Identifier)";break;case e.Type.ODESC:f+=" (Object Descriptor)";break;case e.Type.EXTERNAL:f+=" (External or Instance of)";break;case e.Type.REAL:f+=" (Real)";break;case e.Type.ENUMERATED:f+=" (Enumerated)";break;case e.Type.EMBEDDED:f+=" (Embedded PDV)";break;case e.Type.UTF8:f+=" (UTF8)";break;case e.Type.ROID:f+=" (Relative Object Identifier)";break;case e.Type.SEQUENCE:f+=" (Sequence)";break;case e.Type.SET:f+=" (Set)";break;case e.Type.PRINTABLESTRING:f+=" (Printable String)";break;case e.Type.IA5String:f+=" (IA5String (ASCII))";break;case e.Type.UTCTIME:f+=" (UTC time)";break;case e.Type.GENERALIZEDTIME:f+=" (Generalized time)";break;case e.Type.BMPSTRING:f+=" (BMP String)"}else f+=a.type;if(f+="\n",f+=g+"Constructed: "+a.constructed+"\n",a.composed){for(var j=0,k="",i=0;i<a.value.length;++i)void 0!==a.value[i]&&(j+=1,k+=e.prettyPrint(a.value[i],b+1,c),i+1<a.value.length&&(k+=","));f+=g+"Sub values: "+j+k}else{if(f+=g+"Value: ",a.type===e.Type.OID){var l=e.derToOid(a.value);f+=l,d.pki&&d.pki.oids&&l in d.pki.oids&&(f+=" ("+d.pki.oids[l]+") ")}if(a.type===e.Type.INTEGER)try{f+=e.derToInteger(a.value)}catch(b){f+="0x"+d.util.bytesToHex(a.value)}else if(a.type===e.Type.BITSTRING){if(a.value.length>1?f+="0x"+d.util.bytesToHex(a.value.slice(1)):f+="(none)",a.value.length>0){var m=a.value.charCodeAt(0);1==m?f+=" (1 unused bit shown)":m>1&&(f+=" ("+m+" unused bits shown)")}}else if(a.type===e.Type.OCTETSTRING)h.test(a.value)||(f+="("+a.value+") "),f+="0x"+d.util.bytesToHex(a.value);else if(a.type===e.Type.UTF8)try{f+=d.util.decodeUtf8(a.value)}catch(b){if("URI malformed"===b.message)f+="0x"+d.util.bytesToHex(a.value)+" (malformed UTF8)";else throw b}else a.type===e.Type.PRINTABLESTRING||a.type===e.Type.IA5String?f+=a.value:h.test(a.value)?f+="0x"+d.util.bytesToHex(a.value):0===a.value.length?f+="[null]":f+=a.value}return f}},65737:(a,b,c)=>{var d=c(45654);c(45518),c(63070),c(88819),c(1277),c(15529),c(36105),c(49345),c(87981),c(10401),c(33889);var e=d.asn1,f=a.exports=d.pki=d.pki||{},g=f.oids,h={};h.CN=g.commonName,h.commonName="CN",h.C=g.countryName,h.countryName="C",h.L=g.localityName,h.localityName="L",h.ST=g.stateOrProvinceName,h.stateOrProvinceName="ST",h.O=g.organizationName,h.organizationName="O",h.OU=g.organizationalUnitName,h.organizationalUnitName="OU",h.E=g.emailAddress,h.emailAddress="E";var i=d.pki.rsa.publicKeyValidator,j={name:"Certificate",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"tbsCertificate",value:[{name:"Certificate.TBSCertificate.version",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.version.integer",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"certVersion"}]},{name:"Certificate.TBSCertificate.serialNumber",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"certSerialNumber"},{name:"Certificate.TBSCertificate.signature",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.signature.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"certinfoSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:e.Class.UNIVERSAL,optional:!0,captureAsn1:"certinfoSignatureParams"}]},{name:"Certificate.TBSCertificate.issuer",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certIssuer"},{name:"Certificate.TBSCertificate.validity",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.validity.notBefore (utc)",tagClass:e.Class.UNIVERSAL,type:e.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity1UTCTime"},{name:"Certificate.TBSCertificate.validity.notBefore (generalized)",tagClass:e.Class.UNIVERSAL,type:e.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity2GeneralizedTime"},{name:"Certificate.TBSCertificate.validity.notAfter (utc)",tagClass:e.Class.UNIVERSAL,type:e.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity3UTCTime"},{name:"Certificate.TBSCertificate.validity.notAfter (generalized)",tagClass:e.Class.UNIVERSAL,type:e.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity4GeneralizedTime"}]},{name:"Certificate.TBSCertificate.subject",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certSubject"},i,{name:"Certificate.TBSCertificate.issuerUniqueID",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.issuerUniqueID.id",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"certIssuerUniqueId"}]},{name:"Certificate.TBSCertificate.subjectUniqueID",tagClass:e.Class.CONTEXT_SPECIFIC,type:2,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.subjectUniqueID.id",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSubjectUniqueId"}]},{name:"Certificate.TBSCertificate.extensions",tagClass:e.Class.CONTEXT_SPECIFIC,type:3,constructed:!0,captureAsn1:"certExtensions",optional:!0}]},{name:"Certificate.signatureAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.signatureAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"certSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:e.Class.UNIVERSAL,optional:!0,captureAsn1:"certSignatureParams"}]},{name:"Certificate.signatureValue",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSignature"}]},k={name:"rsapss",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.hashAlgorithm",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier",tagClass:e.Class.UNIVERSAL,type:e.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"hashOid"}]}]},{name:"rsapss.maskGenAlgorithm",tagClass:e.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier",tagClass:e.Class.UNIVERSAL,type:e.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"maskGenOid"},{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"maskGenHashOid"}]}]}]},{name:"rsapss.saltLength",tagClass:e.Class.CONTEXT_SPECIFIC,type:2,optional:!0,value:[{name:"rsapss.saltLength.saltLength",tagClass:e.Class.UNIVERSAL,type:e.Class.INTEGER,constructed:!1,capture:"saltLength"}]},{name:"rsapss.trailerField",tagClass:e.Class.CONTEXT_SPECIFIC,type:3,optional:!0,value:[{name:"rsapss.trailer.trailer",tagClass:e.Class.UNIVERSAL,type:e.Class.INTEGER,constructed:!1,capture:"trailer"}]}]},l={name:"CertificationRequestInfo",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfo",value:[{name:"CertificationRequestInfo.integer",tagClass:e.Class.UNIVERSAL,type:e.Type.INTEGER,constructed:!1,capture:"certificationRequestInfoVersion"},{name:"CertificationRequestInfo.subject",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfoSubject"},i,{name:"CertificationRequestInfo.attributes",tagClass:e.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"certificationRequestInfoAttributes",value:[{name:"CertificationRequestInfo.attributes",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequestInfo.attributes.type",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1},{name:"CertificationRequestInfo.attributes.value",tagClass:e.Class.UNIVERSAL,type:e.Type.SET,constructed:!0}]}]}]},m={name:"CertificationRequest",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,captureAsn1:"csr",value:[l,{name:"CertificationRequest.signatureAlgorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequest.signatureAlgorithm.algorithm",tagClass:e.Class.UNIVERSAL,type:e.Type.OID,constructed:!1,capture:"csrSignatureOid"},{name:"CertificationRequest.signatureAlgorithm.parameters",tagClass:e.Class.UNIVERSAL,optional:!0,captureAsn1:"csrSignatureParams"}]},{name:"CertificationRequest.signature",tagClass:e.Class.UNIVERSAL,type:e.Type.BITSTRING,constructed:!1,captureBitStringValue:"csrSignature"}]};function n(a,b){"string"==typeof b&&(b={shortName:b});for(var c,d=null,e=0;null===d&&e<a.attributes.length;++e)c=a.attributes[e],b.type&&b.type===c.type||b.name&&b.name===c.name?d=c:b.shortName&&b.shortName===c.shortName&&(d=c);return d}f.RDNAttributesAsArray=function(a,b){for(var c,d,f,i=[],j=0;j<a.value.length;++j){c=a.value[j];for(var k=0;k<c.value.length;++k)f={},d=c.value[k],f.type=e.derToOid(d.value[0].value),f.value=d.value[1].value,f.valueTagClass=d.value[1].type,f.type in g&&(f.name=g[f.type],f.name in h&&(f.shortName=h[f.name])),b&&(b.update(f.type),b.update(f.value)),i.push(f)}return i},f.CRIAttributesAsArray=function(a){for(var b=[],c=0;c<a.length;++c)for(var d=a[c],i=e.derToOid(d.value[0].value),j=d.value[1].value,k=0;k<j.length;++k){var l={};if(l.type=i,l.value=j[k].value,l.valueTagClass=j[k].type,l.type in g&&(l.name=g[l.type],l.name in h&&(l.shortName=h[l.name])),l.type===g.extensionRequest){l.extensions=[];for(var m=0;m<l.value.length;++m)l.extensions.push(f.certificateExtensionFromAsn1(l.value[m]))}b.push(l)}return b};var o=function(a,b,c){var d={};if(a!==g["RSASSA-PSS"])return d;c&&(d={hash:{algorithmOid:g.sha1},mgf:{algorithmOid:g.mgf1,hash:{algorithmOid:g.sha1}},saltLength:20});var f={},h=[];if(!e.validate(b,k,f,h)){var i=Error("Cannot read RSASSA-PSS parameter block.");throw i.errors=h,i}return void 0!==f.hashOid&&(d.hash=d.hash||{},d.hash.algorithmOid=e.derToOid(f.hashOid)),void 0!==f.maskGenOid&&(d.mgf=d.mgf||{},d.mgf.algorithmOid=e.derToOid(f.maskGenOid),d.mgf.hash=d.mgf.hash||{},d.mgf.hash.algorithmOid=e.derToOid(f.maskGenHashOid)),void 0!==f.saltLength&&(d.saltLength=f.saltLength.charCodeAt(0)),d},p=function(a){switch(g[a.signatureOid]){case"sha1WithRSAEncryption":case"sha1WithRSASignature":return d.md.sha1.create();case"md5WithRSAEncryption":return d.md.md5.create();case"sha256WithRSAEncryption":case"RSASSA-PSS":return d.md.sha256.create();case"sha384WithRSAEncryption":return d.md.sha384.create();case"sha512WithRSAEncryption":return d.md.sha512.create();default:var b=Error("Could not compute "+a.type+" digest. Unknown signature OID.");throw b.signatureOid=a.signatureOid,b}},q=function(a){var b,c,e,f=a.certificate;switch(f.signatureOid){case g.sha1WithRSAEncryption:case g.sha1WithRSASignature:break;case g["RSASSA-PSS"]:if(void 0===(c=g[f.signatureParameters.mgf.hash.algorithmOid])||void 0===d.md[c]){var h=Error("Unsupported MGF hash function.");throw h.oid=f.signatureParameters.mgf.hash.algorithmOid,h.name=c,h}if(void 0===(e=g[f.signatureParameters.mgf.algorithmOid])||void 0===d.mgf[e]){var h=Error("Unsupported MGF function.");throw h.oid=f.signatureParameters.mgf.algorithmOid,h.name=e,h}if(e=d.mgf[e].create(d.md[c].create()),void 0===(c=g[f.signatureParameters.hash.algorithmOid])||void 0===d.md[c]){var h=Error("Unsupported RSASSA-PSS hash function.");throw h.oid=f.signatureParameters.hash.algorithmOid,h.name=c,h}b=d.pss.create(d.md[c].create(),e,f.signatureParameters.saltLength)}return f.publicKey.verify(a.md.digest().getBytes(),a.signature,b)};function r(a){for(var b,c,f=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]),g=a.attributes,h=0;h<g.length;++h){var i=(b=g[h]).value,j=e.Type.PRINTABLESTRING;"valueTagClass"in b&&(j=b.valueTagClass)===e.Type.UTF8&&(i=d.util.encodeUtf8(i)),c=e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.type).getBytes()),e.create(e.Class.UNIVERSAL,j,!1,i)])]),f.value.push(c)}return f}function s(a){for(var b,c=0;c<a.length;++c){if(void 0===(b=a[c]).name&&(b.type&&b.type in f.oids?b.name=f.oids[b.type]:b.shortName&&b.shortName in h&&(b.name=f.oids[h[b.shortName]])),void 0===b.type)if(b.name&&b.name in f.oids)b.type=f.oids[b.name];else{var d=Error("Attribute type not specified.");throw d.attribute=b,d}if(void 0===b.shortName&&b.name&&b.name in h&&(b.shortName=h[b.name]),b.type===g.extensionRequest&&(b.valueConstructed=!0,b.valueTagClass=e.Type.SEQUENCE,!b.value&&b.extensions)){b.value=[];for(var i=0;i<b.extensions.length;++i)b.value.push(f.certificateExtensionToAsn1(t(b.extensions[i])))}if(void 0===b.value){var d=Error("Attribute value not specified.");throw d.attribute=b,d}}}function t(a,b){if(b=b||{},void 0===a.name&&a.id&&a.id in f.oids&&(a.name=f.oids[a.id]),void 0===a.id)if(a.name&&a.name in f.oids)a.id=f.oids[a.name];else{var c=Error("Extension ID not specified.");throw c.extension=a,c}if(void 0!==a.value)return a;if("keyUsage"===a.name){var h=0,i=0,j=0;a.digitalSignature&&(i|=128,h=7),a.nonRepudiation&&(i|=64,h=6),a.keyEncipherment&&(i|=32,h=5),a.dataEncipherment&&(i|=16,h=4),a.keyAgreement&&(i|=8,h=3),a.keyCertSign&&(i|=4,h=2),a.cRLSign&&(i|=2,h=1),a.encipherOnly&&(i|=1,h=0),a.decipherOnly&&(j|=128,h=7);var k=String.fromCharCode(h);0!==j?k+=String.fromCharCode(i)+String.fromCharCode(j):0!==i&&(k+=String.fromCharCode(i)),a.value=e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,k)}else if("basicConstraints"===a.name)a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]),a.cA&&a.value.value.push(e.create(e.Class.UNIVERSAL,e.Type.BOOLEAN,!1,String.fromCharCode(255))),"pathLenConstraint"in a&&a.value.value.push(e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.pathLenConstraint).getBytes()));else if("extKeyUsage"===a.name){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);var l=a.value.value;for(var m in a)!0===a[m]&&(m in g?l.push(e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(g[m]).getBytes())):-1!==m.indexOf(".")&&l.push(e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(m).getBytes())))}else if("nsCertType"===a.name){var h=0,i=0;a.client&&(i|=128,h=7),a.server&&(i|=64,h=6),a.email&&(i|=32,h=5),a.objsign&&(i|=16,h=4),a.reserved&&(i|=8,h=3),a.sslCA&&(i|=4,h=2),a.emailCA&&(i|=2,h=1),a.objCA&&(i|=1,h=0);var k=String.fromCharCode(h);0!==i&&(k+=String.fromCharCode(i)),a.value=e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,k)}else if("subjectAltName"===a.name||"issuerAltName"===a.name){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);for(var n,o=0;o<a.altNames.length;++o){var k=(n=a.altNames[o]).value;if(7===n.type&&n.ip){if(null===(k=d.util.bytesFromIP(n.ip))){var c=Error('Extension "ip" value is not a valid IPv4 or IPv6 address.');throw c.extension=a,c}}else 8===n.type&&(k=n.oid?e.oidToDer(e.oidToDer(n.oid)):e.oidToDer(k));a.value.value.push(e.create(e.Class.CONTEXT_SPECIFIC,n.type,!1,k))}}else if("nsComment"===a.name&&b.cert){if(!/^[\x00-\x7F]*$/.test(a.comment)||a.comment.length<1||a.comment.length>128)throw Error('Invalid "nsComment" content.');a.value=e.create(e.Class.UNIVERSAL,e.Type.IA5STRING,!1,a.comment)}else if("subjectKeyIdentifier"===a.name&&b.cert){var p=b.cert.generateSubjectKeyIdentifier();a.subjectKeyIdentifier=p.toHex(),a.value=e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,p.getBytes())}else if("authorityKeyIdentifier"===a.name&&b.cert){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);var l=a.value.value;if(a.keyIdentifier){var q=!0===a.keyIdentifier?b.cert.generateSubjectKeyIdentifier().getBytes():a.keyIdentifier;l.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!1,q))}if(a.authorityCertIssuer){var s=[e.create(e.Class.CONTEXT_SPECIFIC,4,!0,[r(!0===a.authorityCertIssuer?b.cert.issuer:a.authorityCertIssuer)])];l.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,s))}if(a.serialNumber){var t=d.util.hexToBytes(!0===a.serialNumber?b.cert.serialNumber:a.serialNumber);l.push(e.create(e.Class.CONTEXT_SPECIFIC,2,!1,t))}}else if("cRLDistributionPoints"===a.name){a.value=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);for(var n,l=a.value.value,u=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]),v=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[]),o=0;o<a.altNames.length;++o){var k=(n=a.altNames[o]).value;if(7===n.type&&n.ip){if(null===(k=d.util.bytesFromIP(n.ip))){var c=Error('Extension "ip" value is not a valid IPv4 or IPv6 address.');throw c.extension=a,c}}else 8===n.type&&(k=n.oid?e.oidToDer(e.oidToDer(n.oid)):e.oidToDer(k));v.value.push(e.create(e.Class.CONTEXT_SPECIFIC,n.type,!1,k))}u.value.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[v])),l.push(u)}if(void 0===a.value){var c=Error("Extension value not specified.");throw c.extension=a,c}return a}function u(a,b){if(a!==g["RSASSA-PSS"])return e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"");var c=[];return void 0!==b.hash.algorithmOid&&c.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.hash.algorithmOid).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])])),void 0!==b.mgf.algorithmOid&&c.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.mgf.algorithmOid).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.mgf.hash.algorithmOid).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])])])),void 0!==b.saltLength&&c.push(e.create(e.Class.CONTEXT_SPECIFIC,2,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(b.saltLength).getBytes())])),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,c)}f.certificateFromPem=function(a,b,c){var g=d.pem.decode(a)[0];if("CERTIFICATE"!==g.type&&"X509 CERTIFICATE"!==g.type&&"TRUSTED CERTIFICATE"!==g.type){var h=Error('Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".');throw h.headerType=g.type,h}if(g.procType&&"ENCRYPTED"===g.procType.type)throw Error("Could not convert certificate from PEM; PEM is encrypted.");var i=e.fromDer(g.body,c);return f.certificateFromAsn1(i,b)},f.certificateToPem=function(a,b){var c={type:"CERTIFICATE",body:e.toDer(f.certificateToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.publicKeyFromPem=function(a){var b=d.pem.decode(a)[0];if("PUBLIC KEY"!==b.type&&"RSA PUBLIC KEY"!==b.type){var c=Error('Could not convert public key from PEM; PEM header type is not "PUBLIC KEY" or "RSA PUBLIC KEY".');throw c.headerType=b.type,c}if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert public key from PEM; PEM is encrypted.");var g=e.fromDer(b.body);return f.publicKeyFromAsn1(g)},f.publicKeyToPem=function(a,b){var c={type:"PUBLIC KEY",body:e.toDer(f.publicKeyToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.publicKeyToRSAPublicKeyPem=function(a,b){var c={type:"RSA PUBLIC KEY",body:e.toDer(f.publicKeyToRSAPublicKey(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.getPublicKeyFingerprint=function(a,b){var c,g=(b=b||{}).md||d.md.sha1.create();switch(b.type||"RSAPublicKey"){case"RSAPublicKey":c=e.toDer(f.publicKeyToRSAPublicKey(a)).getBytes();break;case"SubjectPublicKeyInfo":c=e.toDer(f.publicKeyToAsn1(a)).getBytes();break;default:throw Error('Unknown fingerprint type "'+b.type+'".')}g.start(),g.update(c);var h=g.digest();if("hex"===b.encoding){var i=h.toHex();return b.delimiter?i.match(/.{2}/g).join(b.delimiter):i}if("binary"===b.encoding)return h.getBytes();if(b.encoding)throw Error('Unknown encoding "'+b.encoding+'".');return h},f.certificationRequestFromPem=function(a,b,c){var g=d.pem.decode(a)[0];if("CERTIFICATE REQUEST"!==g.type){var h=Error('Could not convert certification request from PEM; PEM header type is not "CERTIFICATE REQUEST".');throw h.headerType=g.type,h}if(g.procType&&"ENCRYPTED"===g.procType.type)throw Error("Could not convert certification request from PEM; PEM is encrypted.");var i=e.fromDer(g.body,c);return f.certificationRequestFromAsn1(i,b)},f.certificationRequestToPem=function(a,b){var c={type:"CERTIFICATE REQUEST",body:e.toDer(f.certificationRequestToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.createCertificate=function(){var a={};return a.version=2,a.serialNumber="00",a.signatureOid=null,a.signature=null,a.siginfo={},a.siginfo.algorithmOid=null,a.validity={},a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.issuer={},a.issuer.getField=function(b){return n(a.issuer,b)},a.issuer.addField=function(b){s([b]),a.issuer.attributes.push(b)},a.issuer.attributes=[],a.issuer.hash=null,a.subject={},a.subject.getField=function(b){return n(a.subject,b)},a.subject.addField=function(b){s([b]),a.subject.attributes.push(b)},a.subject.attributes=[],a.subject.hash=null,a.extensions=[],a.publicKey=null,a.md=null,a.setSubject=function(b,c){s(b),a.subject.attributes=b,delete a.subject.uniqueId,c&&(a.subject.uniqueId=c),a.subject.hash=null},a.setIssuer=function(b,c){s(b),a.issuer.attributes=b,delete a.issuer.uniqueId,c&&(a.issuer.uniqueId=c),a.issuer.hash=null},a.setExtensions=function(b){for(var c=0;c<b.length;++c)t(b[c],{cert:a});a.extensions=b},a.getExtension=function(b){"string"==typeof b&&(b={name:b});for(var c,d=null,e=0;null===d&&e<a.extensions.length;++e)c=a.extensions[e],b.id&&c.id===b.id?d=c:b.name&&c.name===b.name&&(d=c);return d},a.sign=function(b,c){a.md=c||d.md.sha1.create();var h=g[a.md.algorithm+"WithRSAEncryption"];if(!h){var i=Error("Could not compute certificate digest. Unknown message digest algorithm OID.");throw i.algorithm=a.md.algorithm,i}a.signatureOid=a.siginfo.algorithmOid=h,a.tbsCertificate=f.getTBSCertificate(a);var j=e.toDer(a.tbsCertificate);a.md.update(j.getBytes()),a.signature=b.sign(a.md)},a.verify=function(b){var c=!1;if(!a.issued(b)){var d=b.issuer,g=a.subject,h=Error("The parent certificate did not issue the given child certificate; the child certificate's issuer does not match the parent's subject.");throw h.expectedIssuer=g.attributes,h.actualIssuer=d.attributes,h}var i=b.md;if(null===i){i=p({signatureOid:b.signatureOid,type:"certificate"});var j=b.tbsCertificate||f.getTBSCertificate(b),k=e.toDer(j);i.update(k.getBytes())}return null!==i&&(c=q({certificate:a,md:i,signature:b.signature})),c},a.isIssuer=function(b){var c=!1,d=a.issuer,e=b.subject;if(d.hash&&e.hash)c=d.hash===e.hash;else if(d.attributes.length===e.attributes.length){c=!0;for(var f,g,h=0;c&&h<d.attributes.length;++h)f=d.attributes[h],g=e.attributes[h],(f.type!==g.type||f.value!==g.value)&&(c=!1)}return c},a.issued=function(b){return b.isIssuer(a)},a.generateSubjectKeyIdentifier=function(){return f.getPublicKeyFingerprint(a.publicKey,{type:"RSAPublicKey"})},a.verifySubjectKeyIdentifier=function(){for(var b=g.subjectKeyIdentifier,c=0;c<a.extensions.length;++c){var e=a.extensions[c];if(e.id===b){var f=a.generateSubjectKeyIdentifier().getBytes();return d.util.hexToBytes(e.subjectKeyIdentifier)===f}}return!1},a},f.certificateFromAsn1=function(a,b){var c={},g=[];if(!e.validate(a,j,c,g)){var h=Error("Cannot read X.509 certificate. ASN.1 object is not an X509v3 Certificate.");throw h.errors=g,h}if(e.derToOid(c.publicKeyOid)!==f.oids.rsaEncryption)throw Error("Cannot read public key. OID is not RSA.");var i=f.createCertificate();i.version=c.certVersion?c.certVersion.charCodeAt(0):0,i.serialNumber=d.util.createBuffer(c.certSerialNumber).toHex(),i.signatureOid=d.asn1.derToOid(c.certSignatureOid),i.signatureParameters=o(i.signatureOid,c.certSignatureParams,!0),i.siginfo.algorithmOid=d.asn1.derToOid(c.certinfoSignatureOid),i.siginfo.parameters=o(i.siginfo.algorithmOid,c.certinfoSignatureParams,!1),i.signature=c.certSignature;var k=[];if(void 0!==c.certValidity1UTCTime&&k.push(e.utcTimeToDate(c.certValidity1UTCTime)),void 0!==c.certValidity2GeneralizedTime&&k.push(e.generalizedTimeToDate(c.certValidity2GeneralizedTime)),void 0!==c.certValidity3UTCTime&&k.push(e.utcTimeToDate(c.certValidity3UTCTime)),void 0!==c.certValidity4GeneralizedTime&&k.push(e.generalizedTimeToDate(c.certValidity4GeneralizedTime)),k.length>2)throw Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");if(k.length<2)throw Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");if(i.validity.notBefore=k[0],i.validity.notAfter=k[1],i.tbsCertificate=c.tbsCertificate,b){i.md=p({signatureOid:i.signatureOid,type:"certificate"});var l=e.toDer(i.tbsCertificate);i.md.update(l.getBytes())}var m=d.md.sha1.create(),q=e.toDer(c.certIssuer);m.update(q.getBytes()),i.issuer.getField=function(a){return n(i.issuer,a)},i.issuer.addField=function(a){s([a]),i.issuer.attributes.push(a)},i.issuer.attributes=f.RDNAttributesAsArray(c.certIssuer),c.certIssuerUniqueId&&(i.issuer.uniqueId=c.certIssuerUniqueId),i.issuer.hash=m.digest().toHex();var r=d.md.sha1.create(),t=e.toDer(c.certSubject);return r.update(t.getBytes()),i.subject.getField=function(a){return n(i.subject,a)},i.subject.addField=function(a){s([a]),i.subject.attributes.push(a)},i.subject.attributes=f.RDNAttributesAsArray(c.certSubject),c.certSubjectUniqueId&&(i.subject.uniqueId=c.certSubjectUniqueId),i.subject.hash=r.digest().toHex(),c.certExtensions?i.extensions=f.certificateExtensionsFromAsn1(c.certExtensions):i.extensions=[],i.publicKey=f.publicKeyFromAsn1(c.subjectPublicKeyInfo),i},f.certificateExtensionsFromAsn1=function(a){for(var b=[],c=0;c<a.value.length;++c)for(var d=a.value[c],e=0;e<d.value.length;++e)b.push(f.certificateExtensionFromAsn1(d.value[e]));return b},f.certificateExtensionFromAsn1=function(a){var b={};if(b.id=e.derToOid(a.value[0].value),b.critical=!1,a.value[1].type===e.Type.BOOLEAN?(b.critical=0!==a.value[1].value.charCodeAt(0),b.value=a.value[2].value):b.value=a.value[1].value,b.id in g){if(b.name=g[b.id],"keyUsage"===b.name){var c=e.fromDer(b.value),f=0,h=0;c.value.length>1&&(f=c.value.charCodeAt(1),h=c.value.length>2?c.value.charCodeAt(2):0),b.digitalSignature=(128&f)==128,b.nonRepudiation=(64&f)==64,b.keyEncipherment=(32&f)==32,b.dataEncipherment=(16&f)==16,b.keyAgreement=(8&f)==8,b.keyCertSign=(4&f)==4,b.cRLSign=(2&f)==2,b.encipherOnly=(1&f)==1,b.decipherOnly=(128&h)==128}else if("basicConstraints"===b.name){var c=e.fromDer(b.value);c.value.length>0&&c.value[0].type===e.Type.BOOLEAN?b.cA=0!==c.value[0].value.charCodeAt(0):b.cA=!1;var i=null;c.value.length>0&&c.value[0].type===e.Type.INTEGER?i=c.value[0].value:c.value.length>1&&(i=c.value[1].value),null!==i&&(b.pathLenConstraint=e.derToInteger(i))}else if("extKeyUsage"===b.name)for(var c=e.fromDer(b.value),j=0;j<c.value.length;++j){var k=e.derToOid(c.value[j].value);k in g?b[g[k]]=!0:b[k]=!0}else if("nsCertType"===b.name){var c=e.fromDer(b.value),f=0;c.value.length>1&&(f=c.value.charCodeAt(1)),b.client=(128&f)==128,b.server=(64&f)==64,b.email=(32&f)==32,b.objsign=(16&f)==16,b.reserved=(8&f)==8,b.sslCA=(4&f)==4,b.emailCA=(2&f)==2,b.objCA=(1&f)==1}else if("subjectAltName"===b.name||"issuerAltName"===b.name){b.altNames=[];for(var l,c=e.fromDer(b.value),m=0;m<c.value.length;++m){var n={type:(l=c.value[m]).type,value:l.value};switch(b.altNames.push(n),l.type){case 1:case 2:case 6:break;case 7:n.ip=d.util.bytesToIP(l.value);break;case 8:n.oid=e.derToOid(l.value)}}}else if("subjectKeyIdentifier"===b.name){var c=e.fromDer(b.value);b.subjectKeyIdentifier=d.util.bytesToHex(c.value)}}return b},f.certificationRequestFromAsn1=function(a,b){var c={},g=[];if(!e.validate(a,m,c,g)){var h=Error("Cannot read PKCS#10 certificate request. ASN.1 object is not a PKCS#10 CertificationRequest.");throw h.errors=g,h}if(e.derToOid(c.publicKeyOid)!==f.oids.rsaEncryption)throw Error("Cannot read public key. OID is not RSA.");var i=f.createCertificationRequest();if(i.version=c.csrVersion?c.csrVersion.charCodeAt(0):0,i.signatureOid=d.asn1.derToOid(c.csrSignatureOid),i.signatureParameters=o(i.signatureOid,c.csrSignatureParams,!0),i.siginfo.algorithmOid=d.asn1.derToOid(c.csrSignatureOid),i.siginfo.parameters=o(i.siginfo.algorithmOid,c.csrSignatureParams,!1),i.signature=c.csrSignature,i.certificationRequestInfo=c.certificationRequestInfo,b){i.md=p({signatureOid:i.signatureOid,type:"certification request"});var j=e.toDer(i.certificationRequestInfo);i.md.update(j.getBytes())}var k=d.md.sha1.create();return i.subject.getField=function(a){return n(i.subject,a)},i.subject.addField=function(a){s([a]),i.subject.attributes.push(a)},i.subject.attributes=f.RDNAttributesAsArray(c.certificationRequestInfoSubject,k),i.subject.hash=k.digest().toHex(),i.publicKey=f.publicKeyFromAsn1(c.subjectPublicKeyInfo),i.getAttribute=function(a){return n(i,a)},i.addAttribute=function(a){s([a]),i.attributes.push(a)},i.attributes=f.CRIAttributesAsArray(c.certificationRequestInfoAttributes||[]),i},f.createCertificationRequest=function(){var a={};return a.version=0,a.signatureOid=null,a.signature=null,a.siginfo={},a.siginfo.algorithmOid=null,a.subject={},a.subject.getField=function(b){return n(a.subject,b)},a.subject.addField=function(b){s([b]),a.subject.attributes.push(b)},a.subject.attributes=[],a.subject.hash=null,a.publicKey=null,a.attributes=[],a.getAttribute=function(b){return n(a,b)},a.addAttribute=function(b){s([b]),a.attributes.push(b)},a.md=null,a.setSubject=function(b){s(b),a.subject.attributes=b,a.subject.hash=null},a.setAttributes=function(b){s(b),a.attributes=b},a.sign=function(b,c){a.md=c||d.md.sha1.create();var h=g[a.md.algorithm+"WithRSAEncryption"];if(!h){var i=Error("Could not compute certification request digest. Unknown message digest algorithm OID.");throw i.algorithm=a.md.algorithm,i}a.signatureOid=a.siginfo.algorithmOid=h,a.certificationRequestInfo=f.getCertificationRequestInfo(a);var j=e.toDer(a.certificationRequestInfo);a.md.update(j.getBytes()),a.signature=b.sign(a.md)},a.verify=function(){var b=!1,c=a.md;if(null===c){c=p({signatureOid:a.signatureOid,type:"certification request"});var d=a.certificationRequestInfo||f.getCertificationRequestInfo(a),g=e.toDer(d);c.update(g.getBytes())}return null!==c&&(b=q({certificate:a,md:c,signature:a.signature})),b},a};var v=new Date("1950-01-01T00:00:00Z"),w=new Date("2050-01-01T00:00:00Z");function x(a){return a>=v&&a<w?e.create(e.Class.UNIVERSAL,e.Type.UTCTIME,!1,e.dateToUtcTime(a)):e.create(e.Class.UNIVERSAL,e.Type.GENERALIZEDTIME,!1,e.dateToGeneralizedTime(a))}f.getTBSCertificate=function(a){var b=x(a.validity.notBefore),c=x(a.validity.notAfter),g=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes())]),e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,d.util.hexToBytes(a.serialNumber)),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.siginfo.algorithmOid).getBytes()),u(a.siginfo.algorithmOid,a.siginfo.parameters)]),r(a.issuer),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[b,c]),r(a.subject),f.publicKeyToAsn1(a.publicKey)]);return a.issuer.uniqueId&&g.value.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,[e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.issuer.uniqueId)])),a.subject.uniqueId&&g.value.push(e.create(e.Class.CONTEXT_SPECIFIC,2,!0,[e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.subject.uniqueId)])),a.extensions.length>0&&g.value.push(f.certificateExtensionsToAsn1(a.extensions)),g},f.getCertificationRequestInfo=function(a){return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),r(a.subject),f.publicKeyToAsn1(a.publicKey),function(a){var b=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[]);if(0===a.attributes.length)return b;for(var c=a.attributes,f=0;f<c.length;++f){var g=c[f],h=g.value,i=e.Type.UTF8;"valueTagClass"in g&&(i=g.valueTagClass),i===e.Type.UTF8&&(h=d.util.encodeUtf8(h));var j=!1;"valueConstructed"in g&&(j=g.valueConstructed);var k=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(g.type).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[e.create(e.Class.UNIVERSAL,i,j,h)])]);b.value.push(k)}return b}(a)])},f.distinguishedNameToAsn1=function(a){return r(a)},f.certificateToAsn1=function(a){var b=a.tbsCertificate||f.getTBSCertificate(a);return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[b,e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.signatureOid).getBytes()),u(a.signatureOid,a.signatureParameters)]),e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.signature)])},f.certificateExtensionsToAsn1=function(a){var b=e.create(e.Class.CONTEXT_SPECIFIC,3,!0,[]),c=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);b.value.push(c);for(var d=0;d<a.length;++d)c.value.push(f.certificateExtensionToAsn1(a[d]));return b},f.certificateExtensionToAsn1=function(a){var b=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[]);b.value.push(e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.id).getBytes())),a.critical&&b.value.push(e.create(e.Class.UNIVERSAL,e.Type.BOOLEAN,!1,String.fromCharCode(255)));var c=a.value;return"string"!=typeof a.value&&(c=e.toDer(c).getBytes()),b.value.push(e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,c)),b},f.certificationRequestToAsn1=function(a){var b=a.certificationRequestInfo||f.getCertificationRequestInfo(a);return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[b,e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.signatureOid).getBytes()),u(a.signatureOid,a.signatureParameters)]),e.create(e.Class.UNIVERSAL,e.Type.BITSTRING,!1,"\0"+a.signature)])},f.createCaStore=function(a){var b={certs:{}};function c(a){return g(a),b.certs[a.hash]||null}function g(a){if(!a.hash){var b=d.md.sha1.create();a.attributes=f.RDNAttributesAsArray(r(a),b),a.hash=b.digest().toHex()}}if(b.getIssuer=function(a){return c(a.issuer)},b.addCertificate=function(a){if("string"==typeof a&&(a=d.pki.certificateFromPem(a)),g(a.subject),!b.hasCertificate(a))if(a.subject.hash in b.certs){var c=b.certs[a.subject.hash];d.util.isArray(c)||(c=[c]),c.push(a),b.certs[a.subject.hash]=c}else b.certs[a.subject.hash]=a},b.hasCertificate=function(a){"string"==typeof a&&(a=d.pki.certificateFromPem(a));var b=c(a.subject);if(!b)return!1;d.util.isArray(b)||(b=[b]);for(var g=e.toDer(f.certificateToAsn1(a)).getBytes(),h=0;h<b.length;++h)if(g===e.toDer(f.certificateToAsn1(b[h])).getBytes())return!0;return!1},b.listAllCertificates=function(){var a=[];for(var c in b.certs)if(b.certs.hasOwnProperty(c)){var e=b.certs[c];if(d.util.isArray(e))for(var f=0;f<e.length;++f)a.push(e[f]);else a.push(e)}return a},b.removeCertificate=function(a){if("string"==typeof a&&(a=d.pki.certificateFromPem(a)),g(a.subject),!b.hasCertificate(a))return null;var h,i=c(a.subject);if(!d.util.isArray(i))return h=b.certs[a.subject.hash],delete b.certs[a.subject.hash],h;for(var j=e.toDer(f.certificateToAsn1(a)).getBytes(),k=0;k<i.length;++k)j===e.toDer(f.certificateToAsn1(i[k])).getBytes()&&(h=i[k],i.splice(k,1));return 0===i.length&&delete b.certs[a.subject.hash],h},a)for(var h=0;h<a.length;++h){var i=a[h];b.addCertificate(i)}return b},f.certificateError={bad_certificate:"forge.pki.BadCertificate",unsupported_certificate:"forge.pki.UnsupportedCertificate",certificate_revoked:"forge.pki.CertificateRevoked",certificate_expired:"forge.pki.CertificateExpired",certificate_unknown:"forge.pki.CertificateUnknown",unknown_ca:"forge.pki.UnknownCertificateAuthority"},f.verifyCertificateChain=function(a,b,c){"function"==typeof c&&(c={verify:c}),c=c||{};var e=(b=b.slice(0)).slice(0),g=c.validityCheckDate;void 0===g&&(g=new Date);var h=!0,i=null,j=0;do{var k=b.shift(),l=null,m=!1;if(g&&(g<k.validity.notBefore||g>k.validity.notAfter)&&(i={message:"Certificate is not valid yet or has expired.",error:f.certificateError.certificate_expired,notBefore:k.validity.notBefore,notAfter:k.validity.notAfter,now:g}),null===i){if(null===(l=b[0]||a.getIssuer(k))&&k.isIssuer(k)&&(m=!0,l=k),l){var n=l;d.util.isArray(n)||(n=[n]);for(var o=!1;!o&&n.length>0;){l=n.shift();try{o=l.verify(k)}catch(a){}}o||(i={message:"Certificate signature is invalid.",error:f.certificateError.bad_certificate})}null!==i||l&&!m||a.hasCertificate(k)||(i={message:"Certificate is not trusted.",error:f.certificateError.unknown_ca})}if(null===i&&l&&!k.isIssuer(l)&&(i={message:"Certificate issuer is invalid.",error:f.certificateError.bad_certificate}),null===i)for(var p={keyUsage:!0,basicConstraints:!0},q=0;null===i&&q<k.extensions.length;++q){var r=k.extensions[q];!r.critical||r.name in p||(i={message:"Certificate has an unsupported critical extension.",error:f.certificateError.unsupported_certificate})}if(null===i&&(!h||0===b.length&&(!l||m))){var s=k.getExtension("basicConstraints"),t=k.getExtension("keyUsage");null===t||t.keyCertSign&&null!==s||(i={message:"Certificate keyUsage or basicConstraints conflict or indicate that the certificate is not a CA. If the certificate is the only one in the chain or isn't the first then the certificate must be a valid CA.",error:f.certificateError.bad_certificate}),null===i&&null===s&&(i={message:"Certificate is missing basicConstraints extension and cannot be used as a CA.",error:f.certificateError.bad_certificate}),null!==i||null===s||s.cA||(i={message:"Certificate basicConstraints indicates the certificate is not a CA.",error:f.certificateError.bad_certificate}),null===i&&null!==t&&"pathLenConstraint"in s&&j-1>s.pathLenConstraint&&(i={message:"Certificate basicConstraints pathLenConstraint violated.",error:f.certificateError.bad_certificate})}var u=null===i||i.error,v=c.verify?c.verify(u,j,e):u;if(!0===v)i=null;else throw!0===u&&(i={message:"The application rejected the certificate.",error:f.certificateError.bad_certificate}),(v||0===v)&&("object"!=typeof v||d.util.isArray(v)?"string"==typeof v&&(i.error=v):(v.message&&(i.message=v.message),v.error&&(i.error=v.error))),i;h=!1,++j}while(b.length>0);return!0}},66568:(a,b,c)=>{var d=c(45654);c(33889),a.exports=d.cipher=d.cipher||{},d.cipher.algorithms=d.cipher.algorithms||{},d.cipher.createCipher=function(a,b){var c=a;if("string"==typeof c&&(c=d.cipher.getAlgorithm(c))&&(c=c()),!c)throw Error("Unsupported algorithm: "+a);return new d.cipher.BlockCipher({algorithm:c,key:b,decrypt:!1})},d.cipher.createDecipher=function(a,b){var c=a;if("string"==typeof c&&(c=d.cipher.getAlgorithm(c))&&(c=c()),!c)throw Error("Unsupported algorithm: "+a);return new d.cipher.BlockCipher({algorithm:c,key:b,decrypt:!0})},d.cipher.registerAlgorithm=function(a,b){a=a.toUpperCase(),d.cipher.algorithms[a]=b},d.cipher.getAlgorithm=function(a){return(a=a.toUpperCase())in d.cipher.algorithms?d.cipher.algorithms[a]:null};var e=d.cipher.BlockCipher=function(a){this.algorithm=a.algorithm,this.mode=this.algorithm.mode,this.blockSize=this.mode.blockSize,this._finish=!1,this._input=null,this.output=null,this._op=a.decrypt?this.mode.decrypt:this.mode.encrypt,this._decrypt=a.decrypt,this.algorithm.initialize(a)};e.prototype.start=function(a){var b={};for(var c in a=a||{})b[c]=a[c];b.decrypt=this._decrypt,this._finish=!1,this._input=d.util.createBuffer(),this.output=a.output||d.util.createBuffer(),this.mode.start(b)},e.prototype.update=function(a){for(a&&this._input.putBuffer(a);!this._op.call(this.mode,this._input,this.output,this._finish)&&!this._finish;);this._input.compact()},e.prototype.finish=function(a){a&&("ECB"===this.mode.name||"CBC"===this.mode.name)&&(this.mode.pad=function(b){return a(this.blockSize,b,!1)},this.mode.unpad=function(b){return a(this.blockSize,b,!0)});var b={};return b.decrypt=this._decrypt,b.overflow=this._input.length()%this.blockSize,(!!this._decrypt||!this.mode.pad||!!this.mode.pad(this._input,b))&&(this._finish=!0,this.update(),(!this._decrypt||!this.mode.unpad||!!this.mode.unpad(this.output,b))&&(!this.mode.afterFinish||!!this.mode.afterFinish(this.output,b)))}},67382:(a,b,c)=>{var d=c(45654);c(33889);var e=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],f=[1,2,3,5];a.exports=d.rc2=d.rc2||{},d.rc2.expandKey=function(a,b){"string"==typeof a&&(a=d.util.createBuffer(a)),b=b||128;var c,f=a,g=a.length(),h=b,i=Math.ceil(h/8);for(c=g;c<128;c++)f.putByte(e[f.at(c-1)+f.at(c-g)&255]);for(f.setAt(128-i,e[f.at(128-i)&255>>(7&h)]),c=127-i;c>=0;c--)f.setAt(c,e[f.at(c+1)^f.at(c+i)]);return f};var g=function(a,b,c){var e,g,h,i,j=!1,k=null,l=null,m=null,n=[];for(a=d.rc2.expandKey(a,b),h=0;h<64;h++)n.push(a.getInt16Le());c?(e=function(a){for(h=0;h<4;h++){var b,c;a[h]+=n[i]+(a[(h+3)%4]&a[(h+2)%4])+(~a[(h+3)%4]&a[(h+1)%4]),a[h]=(b=a[h])<<(c=f[h])&65535|(65535&b)>>16-c,i++}},g=function(a){for(h=0;h<4;h++)a[h]+=n[63&a[(h+3)%4]]}):(e=function(a){for(h=3;h>=0;h--){var b,c;a[h]=(65535&(b=a[h]))>>(c=f[h])|b<<16-c&65535,a[h]-=n[i]+(a[(h+3)%4]&a[(h+2)%4])+(~a[(h+3)%4]&a[(h+1)%4]),i--}},g=function(a){for(h=3;h>=0;h--)a[h]-=n[63&a[(h+3)%4]]});var o=function(a){var b=[];for(h=0;h<4;h++){var d=k.getInt16Le();null!==m&&(c?d^=m.getInt16Le():m.putInt16Le(d)),b.push(65535&d)}i=63*!c;for(var e=0;e<a.length;e++)for(var f=0;f<a[e][0];f++)a[e][1](b);for(h=0;h<4;h++)null!==m&&(c?m.putInt16Le(b[h]):b[h]^=m.getInt16Le()),l.putInt16Le(b[h])},p=null;return p={start:function(a,b){a&&"string"==typeof a&&(a=d.util.createBuffer(a)),j=!1,k=d.util.createBuffer(),l=b||new d.util.createBuffer,m=a,p.output=l},update:function(a){for(j||k.putBuffer(a);k.length()>=8;)o([[5,e],[1,g],[6,e],[1,g],[5,e]])},finish:function(a){var b=!0;if(c)if(a)b=a(8,k,!c);else{var d=8===k.length()?8:8-k.length();k.fillWithByte(d,d)}if(b&&(j=!0,p.update()),!c&&(b=0===k.length()))if(a)b=a(8,l,!c);else{var e=l.length(),f=l.at(e-1);f>e?b=!1:l.truncate(f)}return b}}};d.rc2.startEncrypting=function(a,b,c){var e=d.rc2.createEncryptionCipher(a,128);return e.start(b,c),e},d.rc2.createEncryptionCipher=function(a,b){return g(a,b,!0)},d.rc2.startDecrypting=function(a,b,c){var e=d.rc2.createDecryptionCipher(a,128);return e.start(b,c),e},d.rc2.createDecryptionCipher=function(a,b){return g(a,b,!1)}},68370:(a,b,c)=>{"use strict";let{normalizeAllowedClientIps:d,clientIpMatches:e,normalizeIp:f}=c(54584);function g(a){return String(a||"").trim().toLowerCase()}function h(a){let b=Array.isArray(a)?a:a&&"object"==typeof a?Object.entries(a).map(([a,b])=>({userId:a,ips:b})):[],c=new Map;for(let a of b){let b=g(a?.userId??a?.user??a?.id);if(!b)continue;let e=d(a?.ips??a?.allowedClientIps??[]);if(e.length>64)throw Error(`Grant for ${b} exceeds 64 IP entries`);let f=c.get(b);c.set(b,{userId:b,ips:f?d([...f.ips,...e]):e,note:String((a?.note??f?.note)||"").trim().slice(0,200)})}if(c.size>500)throw Error("At most 500 Audit Proxy access grants are supported");return[...c.values()].sort((a,b)=>a.userId.localeCompare(b.userId))}function i(a=[]){return d(a.flatMap(a=>a?.ips||[]))}function j(a={}){let b=h(a.accessGrants),c=i(b);return c.length>0?{enabled:!0,allowedClientIps:c,source:"grants",grants:b}:{enabled:!0===a.clientIpFilterEnabled,allowedClientIps:d(a.allowedClientIps||[]),source:"manual",grants:b}}a.exports={MAX_GRANTS:500,MAX_IPS_PER_GRANT:64,normalizeGrantUserId:g,normalizeAccessGrants:h,grantedIps:i,findAccessGrant:function(a=[],b=""){let c=g(b);return c&&a.find(a=>a.userId===c)||null},effectiveClientIpPolicy:j,attachClientIpGate:function(a,b){let c=j(b);return c.enabled&&a.prependListener("connection",a=>{let b=f(a?.remoteAddress||"");if(!e(b,c.allowedClientIps)){console.log(`[audit-proxy] denied client IP ${b||"unknown"} (${c.source} allowlist)`);try{a.destroy()}catch{}}}),c}}},69445:(a,b,c)=>{a.exports=c(1277),c(38627),c(4554),c(6680),c(37691)},70710:(a,b,c)=>{var d,e=c(45654);c(76632),c(1277),c(33889);var f=e.pkcs5=e.pkcs5||{};e.util.isNodejs&&!e.options.usePureJavaScript&&(d=c(55511)),a.exports=e.pbkdf2=f.pbkdf2=function(a,b,c,f,g,h){if("function"==typeof g&&(h=g,g=null),e.util.isNodejs&&!e.options.usePureJavaScript&&d.pbkdf2&&(null===g||"object"!=typeof g)&&(d.pbkdf2Sync.length>4||!g||"sha1"===g))return("string"!=typeof g&&(g="sha1"),a=Buffer.from(a,"binary"),b=Buffer.from(b,"binary"),h)?4===d.pbkdf2Sync.length?d.pbkdf2(a,b,c,f,function(a,b){if(a)return h(a);h(null,b.toString("binary"))}):d.pbkdf2(a,b,c,f,g,function(a,b){if(a)return h(a);h(null,b.toString("binary"))}):4===d.pbkdf2Sync.length?d.pbkdf2Sync(a,b,c,f).toString("binary"):d.pbkdf2Sync(a,b,c,f,g).toString("binary");if(null==g&&(g="sha1"),"string"==typeof g){if(!(g in e.md.algorithms))throw Error("Unknown hash algorithm: "+g);g=e.md[g].create()}var i=g.digestLength;if(f>0xffffffff*i){var j=Error("Derived key is too long.");if(h)return h(j);throw j}var k=Math.ceil(f/i),l=f-(k-1)*i,m=e.hmac.create();m.start(g,a);var n="";if(!h){for(var o=1;o<=k;++o){m.start(null,null),m.update(b),m.update(e.util.int32ToBytes(o)),q=s=m.digest().getBytes();for(var p=2;p<=c;++p)m.start(null,null),m.update(s),r=m.digest().getBytes(),q=e.util.xorBytes(q,r,i),s=r;n+=o<k?q:q.substr(0,l)}return n}var q,r,s,p,o=1;!function a(){if(o>k)return h(null,n);m.start(null,null),m.update(b),m.update(e.util.int32ToBytes(o)),q=s=m.digest().getBytes(),p=2,function b(){if(p<=c)return m.start(null,null),m.update(s),r=m.digest().getBytes(),q=e.util.xorBytes(q,r,i),s=r,++p,e.util.setImmediate(b);n+=o<k?q:q.substr(0,l),++o,a()}()}()}},76103:(a,b,c)=>{var d=c(45654);c(45518),c(63070),c(88819),c(36105),c(49345),c(56416),c(29984),c(33889),c(65737);var e=d.asn1,f=a.exports=d.pkcs7=d.pkcs7||{};function g(a){var b;if(a.type===d.pki.oids.contentType)b=e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.value).getBytes());else if(a.type===d.pki.oids.messageDigest)b=e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,a.value.bytes());else if(a.type===d.pki.oids.signingTime){var c=new Date("1950-01-01T00:00:00Z"),f=new Date("2050-01-01T00:00:00Z"),g=a.value;if("string"==typeof g){var h=Date.parse(g);g=isNaN(h)?13===g.length?e.utcTimeToDate(g):e.generalizedTimeToDate(g):new Date(h)}b=g>=c&&g<f?e.create(e.Class.UNIVERSAL,e.Type.UTCTIME,!1,e.dateToUtcTime(g)):e.create(e.Class.UNIVERSAL,e.Type.GENERALIZEDTIME,!1,e.dateToGeneralizedTime(g))}return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.type).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[b])])}function h(a,b,c){var f={};if(!e.validate(b,c,f,[])){var g=Error("Cannot read PKCS#7 message. ASN.1 object is not a supported PKCS#7 message.");throw g.errors=g,g}if(e.derToOid(f.contentType)!==d.pki.oids.data)throw Error("Unsupported PKCS#7 message. Only wrapped ContentType Data supported.");if(f.encryptedContent){var h="";if(d.util.isArray(f.encryptedContent))for(var i=0;i<f.encryptedContent.length;++i){if(f.encryptedContent[i].type!==e.Type.OCTETSTRING)throw Error("Malformed PKCS#7 message, expecting encrypted content constructed of only OCTET STRING objects.");h+=f.encryptedContent[i].value}else h=f.encryptedContent;a.encryptedContent={algorithm:e.derToOid(f.encAlgorithm),parameter:d.util.createBuffer(f.encParameter.value),content:d.util.createBuffer(h)}}if(f.content){var h="";if(d.util.isArray(f.content))for(var i=0;i<f.content.length;++i){if(f.content[i].type!==e.Type.OCTETSTRING)throw Error("Malformed PKCS#7 message, expecting content constructed of only OCTET STRING objects.");h+=f.content[i].value}else h=f.content;a.content=d.util.createBuffer(h)}return a.version=f.version.charCodeAt(0),a.rawCapture=f,f}function i(a){if(void 0===a.encryptedContent.key)throw Error("Symmetric key not available.");if(void 0===a.content){var b;switch(a.encryptedContent.algorithm){case d.pki.oids["aes128-CBC"]:case d.pki.oids["aes192-CBC"]:case d.pki.oids["aes256-CBC"]:b=d.aes.createDecryptionCipher(a.encryptedContent.key);break;case d.pki.oids.desCBC:case d.pki.oids["des-EDE3-CBC"]:b=d.des.createDecryptionCipher(a.encryptedContent.key);break;default:throw Error("Unsupported symmetric cipher, OID "+a.encryptedContent.algorithm)}if(b.start(a.encryptedContent.parameter),b.update(a.encryptedContent.content),!b.finish())throw Error("Symmetric decryption failed.");a.content=b.output}}f.messageFromPem=function(a){var b=d.pem.decode(a)[0];if("PKCS7"!==b.type){var c=Error('Could not convert PKCS#7 message from PEM; PEM header type is not "PKCS#7".');throw c.headerType=b.type,c}if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert PKCS#7 message from PEM; PEM is encrypted.");var g=e.fromDer(b.body);return f.messageFromAsn1(g)},f.messageToPem=function(a,b){var c={type:"PKCS7",body:e.toDer(a.toAsn1()).getBytes()};return d.pem.encode(c,{maxline:b})},f.messageFromAsn1=function(a){var b,c={},g=[];if(!e.validate(a,f.asn1.contentInfoValidator,c,g)){var h=Error("Cannot read PKCS#7 message. ASN.1 object is not an PKCS#7 ContentInfo.");throw h.errors=g,h}var i=e.derToOid(c.contentType);switch(i){case d.pki.oids.envelopedData:b=f.createEnvelopedData();break;case d.pki.oids.encryptedData:b=f.createEncryptedData();break;case d.pki.oids.signedData:b=f.createSignedData();break;default:throw Error("Cannot read PKCS#7 message. ContentType with OID "+i+" is not (yet) supported.")}return b.fromAsn1(c.content.value[0]),b},f.createSignedData=function(){var a=null;return a={type:d.pki.oids.signedData,version:1,certificates:[],crls:[],signers:[],digestAlgorithmIdentifiers:[],contentInfo:null,signerInfos:[],fromAsn1:function(b){if(h(a,b,f.asn1.signedDataValidator),a.certificates=[],a.crls=[],a.digestAlgorithmIdentifiers=[],a.contentInfo=null,a.signerInfos=[],a.rawCapture.certificates)for(var c=a.rawCapture.certificates.value,e=0;e<c.length;++e)a.certificates.push(d.pki.certificateFromAsn1(c[e]))},toAsn1:function(){a.contentInfo||a.sign();for(var b=[],c=0;c<a.certificates.length;++c)b.push(d.pki.certificateToAsn1(a.certificates[c]));var f=[],g=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,a.digestAlgorithmIdentifiers),a.contentInfo])]);return b.length>0&&g.value[0].value.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,b)),f.length>0&&g.value[0].value.push(e.create(e.Class.CONTEXT_SPECIFIC,1,!0,f)),g.value[0].value.push(e.create(e.Class.UNIVERSAL,e.Type.SET,!0,a.signerInfos)),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.type).getBytes()),g])},addSigner:function(b){var c=b.issuer,e=b.serialNumber;if(b.certificate){var f=b.certificate;"string"==typeof f&&(f=d.pki.certificateFromPem(f)),c=f.issuer.attributes,e=f.serialNumber}var g=b.key;if(!g)throw Error("Could not add PKCS#7 signer; no private key specified.");"string"==typeof g&&(g=d.pki.privateKeyFromPem(g));var h=b.digestAlgorithm||d.pki.oids.sha1;switch(h){case d.pki.oids.sha1:case d.pki.oids.sha256:case d.pki.oids.sha384:case d.pki.oids.sha512:case d.pki.oids.md5:break;default:throw Error("Could not add PKCS#7 signer; unknown message digest algorithm: "+h)}var i=b.authenticatedAttributes||[];if(i.length>0){for(var j=!1,k=!1,l=0;l<i.length;++l){var m=i[l];if(!j&&m.type===d.pki.oids.contentType){if(j=!0,k)break;continue}if(!k&&m.type===d.pki.oids.messageDigest){if(k=!0,j)break;continue}}if(!j||!k)throw Error("Invalid signer.authenticatedAttributes. If signer.authenticatedAttributes is specified, then it must contain at least two attributes, PKCS #9 content-type and PKCS #9 message-digest.")}a.signers.push({key:g,version:1,issuer:c,serialNumber:e,digestAlgorithm:h,signatureAlgorithm:d.pki.oids.rsaEncryption,signature:null,authenticatedAttributes:i,unauthenticatedAttributes:[]})},sign:function(b){if(b=b||{},("object"!=typeof a.content||null===a.contentInfo)&&(a.contentInfo=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(d.pki.oids.data).getBytes())]),"content"in a)){var c;a.content instanceof d.util.ByteBuffer?c=a.content.bytes():"string"==typeof a.content&&(c=d.util.encodeUtf8(a.content)),b.detached?a.detachedContent=e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,c):a.contentInfo.value.push(e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,c)]))}0!==a.signers.length&&function(b){if(!(c=a.detachedContent?a.detachedContent:(c=a.contentInfo.value[1]).value[0]))throw Error("Could not sign PKCS#7 message; there is no content to sign.");var c,f=e.derToOid(a.contentInfo.value[0].value),h=e.toDer(c);for(var i in h.getByte(),e.getBerValueLength(h),h=h.getBytes(),b)b[i].start().update(h);for(var j=new Date,k=0;k<a.signers.length;++k){var l=a.signers[k];if(0===l.authenticatedAttributes.length){if(f!==d.pki.oids.data)throw Error("Invalid signer; authenticatedAttributes must be present when the ContentInfo content type is not PKCS#7 Data.")}else{l.authenticatedAttributesAsn1=e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[]);for(var m=e.create(e.Class.UNIVERSAL,e.Type.SET,!0,[]),n=0;n<l.authenticatedAttributes.length;++n){var o=l.authenticatedAttributes[n];o.type===d.pki.oids.messageDigest?o.value=b[l.digestAlgorithm].digest():o.type!==d.pki.oids.signingTime||o.value||(o.value=j),m.value.push(g(o)),l.authenticatedAttributesAsn1.value.push(g(o))}h=e.toDer(m).getBytes(),l.md.start().update(h)}l.signature=l.key.sign(l.md,"RSASSA-PKCS1-V1_5")}a.signerInfos=function(a){for(var b=[],c=0;c<a.length;++c)b.push(function(a){var b=e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[d.pki.distinguishedNameToAsn1({attributes:a.issuer}),e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,d.util.hexToBytes(a.serialNumber))]),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.digestAlgorithm).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])]);if(a.authenticatedAttributesAsn1&&b.value.push(a.authenticatedAttributesAsn1),b.value.push(e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.signatureAlgorithm).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")])),b.value.push(e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,a.signature)),a.unauthenticatedAttributes.length>0){for(var c=e.create(e.Class.CONTEXT_SPECIFIC,1,!0,[]),f=0;f<a.unauthenticatedAttributes.length;++f){var h=a.unauthenticatedAttributes[f];c.values.push(g(h))}b.value.push(c)}return b}(a[c]));return b}(a.signers)}(function(){for(var b={},c=0;c<a.signers.length;++c){var f=a.signers[c],g=f.digestAlgorithm;g in b||(b[g]=d.md[d.pki.oids[g]].create()),0===f.authenticatedAttributes.length?f.md=b[g]:f.md=d.md[d.pki.oids[g]].create()}for(var g in a.digestAlgorithmIdentifiers=[],b)a.digestAlgorithmIdentifiers.push(e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(g).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")]));return b}())},verify:function(){throw Error("PKCS#7 signature verification not yet implemented.")},addCertificate:function(b){"string"==typeof b&&(b=d.pki.certificateFromPem(b)),a.certificates.push(b)},addCertificateRevokationList:function(a){throw Error("PKCS#7 CRL support not yet implemented.")}}},f.createEncryptedData=function(){var a=null;return a={type:d.pki.oids.encryptedData,version:0,encryptedContent:{algorithm:d.pki.oids["aes256-CBC"]},fromAsn1:function(b){h(a,b,f.asn1.encryptedDataValidator)},decrypt:function(b){void 0!==b&&(a.encryptedContent.key=b),i(a)}}},f.createEnvelopedData=function(){var a=null;return a={type:d.pki.oids.envelopedData,version:0,recipients:[],encryptedContent:{algorithm:d.pki.oids["aes256-CBC"]},fromAsn1:function(b){var c=h(a,b,f.asn1.envelopedDataValidator);a.recipients=function(a){for(var b=[],c=0;c<a.length;++c)b.push(function(a){var b={},c=[];if(!e.validate(a,f.asn1.recipientInfoValidator,b,c)){var g=Error("Cannot read PKCS#7 RecipientInfo. ASN.1 object is not an PKCS#7 RecipientInfo.");throw g.errors=c,g}return{version:b.version.charCodeAt(0),issuer:d.pki.RDNAttributesAsArray(b.issuer),serialNumber:d.util.createBuffer(b.serial).toHex(),encryptedContent:{algorithm:e.derToOid(b.encAlgorithm),parameter:b.encParameter?b.encParameter.value:void 0,content:b.encKey}}}(a[c]));return b}(c.recipientInfos.value)},toAsn1:function(){var b;return e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(a.type).getBytes()),e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(a.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SET,!0,function(a){for(var b,c=[],f=0;f<a.length;++f)c.push((b=a[f],e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,e.integerToDer(b.version).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[d.pki.distinguishedNameToAsn1({attributes:b.issuer}),e.create(e.Class.UNIVERSAL,e.Type.INTEGER,!1,d.util.hexToBytes(b.serialNumber))]),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.encryptedContent.algorithm).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.NULL,!1,"")]),e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,b.encryptedContent.content)])));return c}(a.recipients)),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,(b=a.encryptedContent,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(d.pki.oids.data).getBytes()),e.create(e.Class.UNIVERSAL,e.Type.SEQUENCE,!0,[e.create(e.Class.UNIVERSAL,e.Type.OID,!1,e.oidToDer(b.algorithm).getBytes()),b.parameter?e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,b.parameter.getBytes()):void 0]),e.create(e.Class.CONTEXT_SPECIFIC,0,!0,[e.create(e.Class.UNIVERSAL,e.Type.OCTETSTRING,!1,b.content.getBytes())])]))])])])},findRecipient:function(b){for(var c=b.issuer.attributes,d=0;d<a.recipients.length;++d){var e=a.recipients[d],f=e.issuer;if(e.serialNumber===b.serialNumber&&f.length===c.length){for(var g=!0,h=0;h<c.length;++h)if(f[h].type!==c[h].type||f[h].value!==c[h].value){g=!1;break}if(g)return e}}return null},decrypt:function(b,c){if(void 0===a.encryptedContent.key&&void 0!==b&&void 0!==c)switch(b.encryptedContent.algorithm){case d.pki.oids.rsaEncryption:case d.pki.oids.desCBC:var e=c.decrypt(b.encryptedContent.content);a.encryptedContent.key=d.util.createBuffer(e);break;default:throw Error("Unsupported asymmetric cipher, OID "+b.encryptedContent.algorithm)}i(a)},addRecipient:function(b){a.recipients.push({version:0,issuer:b.issuer.attributes,serialNumber:b.serialNumber,encryptedContent:{algorithm:d.pki.oids.rsaEncryption,key:b.publicKey}})},encrypt:function(b,c){if(void 0===a.encryptedContent.content){switch(c=c||a.encryptedContent.algorithm,b=b||a.encryptedContent.key,c){case d.pki.oids["aes128-CBC"]:e=16,f=16,g=d.aes.createEncryptionCipher;break;case d.pki.oids["aes192-CBC"]:e=24,f=16,g=d.aes.createEncryptionCipher;break;case d.pki.oids["aes256-CBC"]:e=32,f=16,g=d.aes.createEncryptionCipher;break;case d.pki.oids["des-EDE3-CBC"]:e=24,f=8,g=d.des.createEncryptionCipher;break;default:throw Error("Unsupported symmetric cipher, OID "+c)}if(void 0===b)b=d.util.createBuffer(d.random.getBytes(e));else if(b.length()!=e)throw Error("Symmetric key has wrong length; got "+b.length()+" bytes, expected "+e+".");a.encryptedContent.algorithm=c,a.encryptedContent.key=b,a.encryptedContent.parameter=d.util.createBuffer(d.random.getBytes(f));var e,f,g,h=g(b);if(h.start(a.encryptedContent.parameter.copy()),h.update(a.content),!h.finish())throw Error("Symmetric encryption failed.");a.encryptedContent.content=h.output}for(var i=0;i<a.recipients.length;++i){var j=a.recipients[i];if(void 0===j.encryptedContent.content)if(j.encryptedContent.algorithm===d.pki.oids.rsaEncryption)j.encryptedContent.content=j.encryptedContent.key.encrypt(a.encryptedContent.key.data);else throw Error("Unsupported asymmetric cipher, OID "+j.encryptedContent.algorithm)}}}}},76632:(a,b,c)=>{var d=c(45654);c(1277),c(33889),(a.exports=d.hmac=d.hmac||{}).create=function(){var a=null,b=null,c=null,e=null,f={};return f.start=function(f,g){if(null!==f)if("string"==typeof f)if((f=f.toLowerCase())in d.md.algorithms)b=d.md.algorithms[f].create();else throw Error('Unknown hash algorithm "'+f+'"');else b=f;if(null===g)g=a;else{if("string"==typeof g)g=d.util.createBuffer(g);else if(d.util.isArray(g)){var h=g;g=d.util.createBuffer();for(var i=0;i<h.length;++i)g.putByte(h[i])}var j=g.length();j>b.blockLength&&(b.start(),b.update(g.bytes()),g=b.digest()),c=d.util.createBuffer(),e=d.util.createBuffer(),j=g.length();for(var i=0;i<j;++i){var h=g.at(i);c.putByte(54^h),e.putByte(92^h)}if(j<b.blockLength)for(var h=b.blockLength-j,i=0;i<h;++i)c.putByte(54),e.putByte(92);a=g,c=c.bytes(),e=e.bytes()}b.start(),b.update(c)},f.update=function(a){b.update(a)},f.getMac=function(){var a=b.digest().bytes();return b.start(),b.update(e),b.update(a),b.digest()},f.digest=f.getMac,f}},77051:(a,b,c)=>{"use strict";let d=c(14985).promises,e=c(91645),{normalizeIp:f,clientIpMatches:g}=c(54584),h=new Map,i=Object.freeze(["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.2.0/24","192.88.99.0/24","192.168.0.0/16","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","224.0.0.0/4","240.0.0.0/4","::/96","::1/128","100::/64","2001:2::/48","2001:db8::/32","fc00::/7","fe80::/10","ff00::/8"]),j=Object.freeze([".localhost",".local",".internal",".lan",".home.arpa"]);function k(a){return String(a||"").trim().replace(/^\[|\]$/g,"").replace(/\.$/,"").toLowerCase()}function l(a){let b=k(a);return!(!(!b||"localhost"===b||j.some(a=>b.endsWith(a)))&&(e.isIP(b)||b.includes(".")))}function m(a){let b=f(a);return!!e.isIP(b)&&!g(b,i)}function n(a){let b=[...new Set((Array.isArray(a)?a:[a]).map(a=>Number(a)).filter(a=>Number.isInteger(a)&&a>=1&&a<=65535))];return b.length?b:[443]}function o(a){let b=[...a?.addresses||[]];return function(c,d,e){let f=d,g=e;"function"==typeof d&&(g=d,f={});let h="number"==typeof f?f:Number(f?.family||0);if("object"==typeof f&&f?.all===!0){let c=4===h||6===h?b.filter(a=>a.family===h):b;if(!c.length){let b=Error(`No validated public address for ${a.host}`);b.code="ENOTFOUND",g(b);return}g(null,c.map(({address:a,family:b})=>({address:a,family:b})));return}let i=function(a,b=0){let c=Number(b||0);return 4===c||6===c?a.find(a=>a.family===c)||null:a.find(a=>4===a.family)||a[0]||null}(b,h);if(!i){let b=Error(`No validated public address for ${a.host}`);b.code="ENOTFOUND",g(b);return}g(null,i.address,i.family)}}async function p(a,b,c={}){let g=k(a),i=Number(b||443),j=n(c.allowedPorts||[443]);if(!g)throw Error("Destination host is empty");if(!Number.isInteger(i)||!j.includes(i))throw Error(`CONNECT destination port ${i||"unknown"} is not allowed`);if(l(g))throw Error(`Private or local destination hostname is not allowed: ${g}`);let q=e.isIP(f(g));if(q){let a=f(g);if(!m(a))throw Error(`Private or reserved destination address is not allowed: ${a}`);let b={host:g,port:i,addresses:[{address:a,family:q}]};return{...b,lookup:o(b)}}let r=Date.now(),s=h.get(g);if(!s||s.expiresAt<=r){let a=await d.lookup(g,{all:!0,verbatim:!0}),b=[],c=new Set;for(let d of a||[]){let a=f(d.address),g=e.isIP(a);if(!g||!m(a))continue;let h=`${g}:${a}`;c.has(h)||(c.add(h),b.push({address:a,family:g}))}if(!b.length)throw Error(`Destination did not resolve to a public address: ${g}`);s={addresses:b,expiresAt:r+6e4},h.set(g,s)}let t={host:g,port:i,addresses:[...s.addresses]};return{...t,lookup:o(t)}}a.exports={BLOCKED_ADDRESS_RANGES:i,normalizeTargetHost:k,normalizeAllowedPorts:n,isBlockedHostname:l,isPublicAddress:m,createPinnedLookup:o,resolvePublicTarget:p,clearDnsPolicyCache:function(){h.clear()}}},79841:(a,b,c)=>{"use strict";let{EventEmitter:d}=c(78474),e=Symbol.for("bluerouter.realtime-usage.v1");function f(){let a="u">typeof process?process:globalThis;if(!a[e]){let b=new d;b.setMaxListeners(100),a[e]={emitter:b,ring:{items:[],initialized:!1}}}return a[e]}function g(a={}){let b=String(a.requestId||"").trim();if(b)return`request:${b}`;let c=new Date(a.timestamp||0).getTime();return`fallback:${c}|${a.model||""}|${a.provider||""}|${a.connectionId||""}`}a.exports={entryKey:g,getRealtimeUsageState:f,publishRecentUsage:function(a,{emit:b=!0,cap:c=50}={}){if(!a||"object"!=typeof a)return null;let d=f(),e=g(a),h=d.ring.items.findIndex(a=>g(a)===e),i=h>=0?function(a={},b={}){return{...a,...b,tokens:{...a.tokens&&"object"==typeof a.tokens?a.tokens:{},...b.tokens&&"object"==typeof b.tokens?b.tokens:{}}}}(d.ring.items[h],a):{...a};return h>=0?d.ring.items[h]=i:d.ring.items.push(i),d.ring.items=d.ring.items.sort((a,b)=>new Date(a.timestamp||0)-new Date(b.timestamp||0)).slice(-Math.max(1,Number(c)||50)),d.ring.initialized=!0,b&&d.emitter.emit("update",{source:"memory-ring",requestId:i.requestId||""}),i},resetForTests:function(){let a=f();a.ring.items=[],a.ring.initialized=!1,a.emitter.removeAllListeners()}}},87981:(a,b,c)=>{var d=c(45654);c(29984),c(33889),(a.exports=d.pss=d.pss||{}).create=function(a){3==arguments.length&&(a={md:arguments[0],mgf:arguments[1],saltLength:arguments[2]});var b,c=a.md,e=a.mgf,f=c.digestLength,g=a.salt||null;if("string"==typeof g&&(g=d.util.createBuffer(g)),"saltLength"in a)b=a.saltLength;else if(null!==g)b=g.length();else throw Error("Salt length not specified or specific salt not given.");if(null!==g&&g.length()!==b)throw Error("Given salt length does not match length of given salt.");var h=a.prng||d.random,i={};return i.encode=function(a,i){var j,k,l=i-1,m=Math.ceil(l/8),n=a.digest().getBytes();if(m<f+b+2)throw Error("Message is too long to encrypt.");k=null===g?h.getBytesSync(b):g.bytes();var o=new d.util.ByteBuffer;o.fillWithByte(0,8),o.putBytes(n),o.putBytes(k),c.start(),c.update(o.getBytes());var p=c.digest().getBytes(),q=new d.util.ByteBuffer;q.fillWithByte(0,m-b-f-2),q.putByte(1),q.putBytes(k);var r=q.getBytes(),s=m-f-1,t=e.generate(p,s),u="";for(j=0;j<s;j++)u+=String.fromCharCode(r.charCodeAt(j)^t.charCodeAt(j));return(u=String.fromCharCode(u.charCodeAt(0)&~(65280>>8*m-l&255))+u.substr(1))+p+String.fromCharCode(188)},i.verify=function(a,g,h){var i,j=h-1,k=Math.ceil(j/8);if(g=g.substr(-k),k<f+b+2)throw Error("Inconsistent parameters to PSS signature verification.");if(188!==g.charCodeAt(k-1))throw Error("Encoded message does not end in 0xBC.");var l=k-f-1,m=g.substr(0,l),n=g.substr(l,f),o=65280>>8*k-j&255;if((m.charCodeAt(0)&o)!=0)throw Error("Bits beyond keysize not zero as expected.");var p=e.generate(n,l),q="";for(i=0;i<l;i++)q+=String.fromCharCode(m.charCodeAt(i)^p.charCodeAt(i));q=String.fromCharCode(q.charCodeAt(0)&~o)+q.substr(1);var r=k-f-b-2;for(i=0;i<r;i++)if(0!==q.charCodeAt(i))throw Error("Leftmost octets not zero as expected");if(1!==q.charCodeAt(r))throw Error("Inconsistent PSS signature, 0x01 marker not found");var s=q.substr(-b),t=new d.util.ByteBuffer;return t.fillWithByte(0,8),t.putBytes(a),t.putBytes(s),c.start(),c.update(t.getBytes()),n===c.digest().getBytes()},i}},88819:(a,b,c)=>{var d=c(45654);function e(a,b){d.cipher.registerAlgorithm(a,function(){return new d.des.Algorithm(a,b)})}c(66568),c(19396),c(33889),a.exports=d.des=d.des||{},d.des.startEncrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!1,mode:d||(null===b?"ECB":"CBC")});return e.start(b),e},d.des.createEncryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!1,mode:b})},d.des.startDecrypting=function(a,b,c,d){var e=o({key:a,output:c,decrypt:!0,mode:d||(null===b?"ECB":"CBC")});return e.start(b),e},d.des.createDecryptionCipher=function(a,b){return o({key:a,output:null,decrypt:!0,mode:b})},d.des.Algorithm=function(a,b){var c=this;c.name=a,c.mode=new b({blockSize:8,cipher:{encrypt:function(a,b){return n(c._keys,a,b,!1)},decrypt:function(a,b){return n(c._keys,a,b,!0)}}}),c._init=!1},d.des.Algorithm.prototype.initialize=function(a){if(!this._init){var b=d.util.createBuffer(a.key);if(0===this.name.indexOf("3DES")&&24!==b.length())throw Error("Invalid Triple-DES key size: "+8*b.length());this._keys=function(a){for(var b,c=[0,4,0x20000000,0x20000004,65536,65540,0x20010000,0x20010004,512,516,0x20000200,0x20000204,66048,66052,0x20010200,0x20010204],d=[0,1,1048576,1048577,0x4000000,0x4000001,0x4100000,0x4100001,256,257,1048832,1048833,0x4000100,0x4000101,0x4100100,0x4100101],e=[0,8,2048,2056,0x1000000,0x1000008,0x1000800,0x1000808,0,8,2048,2056,0x1000000,0x1000008,0x1000800,0x1000808],f=[0,2097152,0x8000000,0x8200000,8192,2105344,0x8002000,0x8202000,131072,2228224,0x8020000,0x8220000,139264,2236416,0x8022000,0x8222000],g=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],h=[0,1024,32,1056,0,1024,32,1056,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420],i=[0,0x10000000,524288,0x10080000,2,0x10000002,524290,0x10080002,0,0x10000000,524288,0x10080000,2,0x10000002,524290,0x10080002],j=[0,65536,2048,67584,0x20000000,0x20010000,0x20000800,0x20010800,131072,196608,133120,198656,0x20020000,0x20030000,0x20020800,0x20030800],k=[0,262144,0,262144,2,262146,2,262146,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002],l=[0,0x10000000,8,0x10000008,0,0x10000000,8,0x10000008,1024,0x10000400,1032,0x10000408,1024,0x10000400,1032,0x10000408],m=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],n=[0,0x1000000,512,0x1000200,2097152,0x1200000,2097664,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200],o=[0,4096,0x8000000,0x8001000,524288,528384,0x8080000,0x8081000,16,4112,0x8000010,0x8001010,524304,528400,0x8080010,0x8081010],p=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],q=a.length()>8?3:1,r=[],s=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],t=0,u=0;u<q;u++){var v=a.getInt32(),w=a.getInt32();b=(v>>>4^w)&0xf0f0f0f,w^=b,v^=b<<4,b=(w>>>-16^v)&65535,v^=b,w^=b<<-16,b=(v>>>2^w)&0x33333333,w^=b,v^=b<<2,b=(w>>>-16^v)&65535,v^=b,w^=b<<-16,b=(v>>>1^w)&0x55555555,w^=b,v^=b<<1,b=(w>>>8^v)&0xff00ff,v^=b,w^=b<<8,b=(v>>>1^w)&0x55555555,w^=b,v^=b<<1,b=v<<8|w>>>20&240,v=w<<24|w<<8&0xff0000|w>>>8&65280|w>>>24&240,w=b;for(var x=0;x<s.length;++x){s[x]?(v=v<<2|v>>>26,w=w<<2|w>>>26):(v=v<<1|v>>>27,w=w<<1|w>>>27),w&=-15;var y=c[(v&=-15)>>>28]|d[v>>>24&15]|e[v>>>20&15]|f[v>>>16&15]|g[v>>>12&15]|h[v>>>8&15]|i[v>>>4&15],z=j[w>>>28]|k[w>>>24&15]|l[w>>>20&15]|m[w>>>16&15]|n[w>>>12&15]|o[w>>>8&15]|p[w>>>4&15];b=(z>>>16^y)&65535,r[t++]=y^b,r[t++]=z^b<<16}}return r}(b),this._init=!0}},e("DES-ECB",d.cipher.modes.ecb),e("DES-CBC",d.cipher.modes.cbc),e("DES-CFB",d.cipher.modes.cfb),e("DES-OFB",d.cipher.modes.ofb),e("DES-CTR",d.cipher.modes.ctr),e("3DES-ECB",d.cipher.modes.ecb),e("3DES-CBC",d.cipher.modes.cbc),e("3DES-CFB",d.cipher.modes.cfb),e("3DES-OFB",d.cipher.modes.ofb),e("3DES-CTR",d.cipher.modes.ctr);var f=[0x1010400,0,65536,0x1010404,0x1010004,66564,4,65536,1024,0x1010400,0x1010404,1024,0x1000404,0x1010004,0x1000000,4,1028,0x1000400,0x1000400,66560,66560,0x1010000,0x1010000,0x1000404,65540,0x1000004,0x1000004,65540,0,1028,66564,0x1000000,65536,0x1010404,4,0x1010000,0x1010400,0x1000000,0x1000000,1024,0x1010004,65536,66560,0x1000004,1024,4,0x1000404,66564,0x1010404,65540,0x1010000,0x1000404,0x1000004,1028,66564,0x1010400,1028,0x1000400,0x1000400,0,65540,66560,0,0x1010004],g=[-0x7fef7fe0,-0x7fff8000,32768,1081376,1048576,32,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,1048576,32,-0x7fefffe0,1081344,1048608,-0x7fff7fe0,0,-0x80000000,32768,1081376,-0x7ff00000,1048608,-0x7fffffe0,0,1081344,32800,-0x7fef8000,-0x7ff00000,32800,0,1081376,-0x7fefffe0,1048576,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,32768,-0x7ff00000,-0x7fff8000,32,-0x7fef7fe0,1081376,32,32768,-0x80000000,32800,-0x7fef8000,1048576,-0x7fffffe0,1048608,-0x7fff7fe0,-0x7fffffe0,1048608,1081344,0,-0x7fff8000,32800,-0x80000000,-0x7fefffe0,-0x7fef7fe0,1081344],h=[520,0x8020200,0,0x8020008,0x8000200,0,131592,0x8000200,131080,0x8000008,0x8000008,131072,0x8020208,131080,0x8020000,520,0x8000000,8,0x8020200,512,131584,0x8020000,0x8020008,131592,0x8000208,131584,131072,0x8000208,8,0x8020208,512,0x8000000,0x8020200,0x8000000,131080,520,131072,0x8020200,0x8000200,0,512,131080,0x8020208,0x8000200,0x8000008,512,0,0x8020008,0x8000208,131072,0x8000000,0x8020208,8,131592,131584,0x8000008,0x8020000,0x8000208,520,0x8020000,131592,8,0x8020008,131584],i=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],j=[256,0x2080100,0x2080000,0x42000100,524288,256,0x40000000,0x2080000,0x40080100,524288,0x2000100,0x40080100,0x42000100,0x42080000,524544,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,524544,524288,0x42000100,256,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,256,0x2000000,0x42080000,0x42080100,524544,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,524544,0x2000100,0x40000100,524288,0,0x40080000,0x2080100,0x40000100],k=[0x20000010,0x20400000,16384,0x20404010,0x20400000,16,0x20404010,4194304,0x20004000,4210704,4194304,0x20000010,4194320,0x20004000,0x20000000,16400,0,4194320,0x20004010,16384,4210688,0x20004010,16,0x20400010,0x20400010,0,4210704,0x20404000,16400,4210688,0x20404000,0x20000000,0x20004000,16,0x20400010,4210688,0x20404010,4194304,16400,0x20000010,4194304,0x20004000,0x20000000,16400,0x20000010,0x20404010,4210688,0x20400000,4210704,0x20404000,0,0x20400010,16,16384,0x20400000,4210704,16384,4194320,0x20004010,0,0x20404000,0x20000000,4194320,0x20004010],l=[2097152,0x4200002,0x4000802,0,2048,0x4000802,2099202,0x4200800,0x4200802,2097152,0,0x4000002,2,0x4000000,0x4200002,2050,0x4000800,2099202,2097154,0x4000800,0x4000002,0x4200000,0x4200800,2097154,0x4200000,2048,2050,0x4200802,2099200,2,0x4000000,2099200,0x4000000,2099200,2097152,0x4000802,0x4000802,0x4200002,0x4200002,2,2097154,0x4000000,0x4000800,2097152,0x4200800,2050,2099202,0x4200800,2050,0x4000002,0x4200802,0x4200000,2099200,0,2,0x4200802,0,2099202,0x4200000,2048,0x4000002,0x4000800,2048,2097154],m=[0x10001040,4096,262144,0x10041040,0x10000000,0x10001040,64,0x10000000,262208,0x10040000,0x10041040,266240,0x10041000,266304,4096,64,0x10040000,0x10000040,0x10001000,4160,266240,262208,0x10040040,0x10041000,4160,0,0,0x10040040,0x10000040,0x10001000,266304,262144,266304,262144,0x10041000,4096,64,0x10040040,4096,266304,0x10001000,64,0x10000040,0x10040000,0x10040040,0x10000000,262144,0x10001040,0,0x10041040,262208,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,266240,266240,4160,4160,262208,0x10000000,0x10041000];function n(a,b,c,d){var e,n,o=32===a.length?3:9;e=3===o?d?[30,-2,-2]:[0,32,2]:d?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var p=b[0],q=b[1];n=(p>>>4^q)&0xf0f0f0f,q^=n,p^=n<<4,n=(p>>>16^q)&65535,q^=n,p^=n<<16,n=(q>>>2^p)&0x33333333,p^=n,q^=n<<2,n=(q>>>8^p)&0xff00ff,p^=n,q^=n<<8,n=(p>>>1^q)&0x55555555,q^=n,p^=n<<1,p=p<<1|p>>>31,q=q<<1|q>>>31;for(var r=0;r<o;r+=3){for(var s=e[r+1],t=e[r+2],u=e[r];u!=s;u+=t){var v=q^a[u],w=(q>>>4|q<<28)^a[u+1];n=p,p=q,q=n^(g[v>>>24&63]|i[v>>>16&63]|k[v>>>8&63]|m[63&v]|f[w>>>24&63]|h[w>>>16&63]|j[w>>>8&63]|l[63&w])}n=p,p=q,q=n}n=((p=p>>>1|p<<31)>>>1^(q=q>>>1|q<<31))&0x55555555,q^=n,p^=n<<1,n=(q>>>8^p)&0xff00ff,p^=n,q^=n<<8,n=(q>>>2^p)&0x33333333,p^=n,q^=n<<2,n=(p>>>16^q)&65535,q^=n,p^=n<<16,n=(p>>>4^q)&0xf0f0f0f,q^=n,p^=n<<4,c[0]=p,c[1]=q}function o(a){var b,c="DES-"+((a=a||{}).mode||"CBC").toUpperCase(),e=(b=a.decrypt?d.cipher.createDecipher(c,a.key):d.cipher.createCipher(c,a.key)).start;return b.start=function(a,c){var f=null;c instanceof d.util.ByteBuffer&&(f=c,c={}),(c=c||{}).output=f,c.iv=a,e.call(b,c)},b}},93599:(a,b,c)=>{"use strict";let d=c(81630),e=c(73496),f=c(91645),g=c(34631),h=c(74075),i=c(55511),j=c(5019),{createAuditProxy:k,CaptureBuffer:l}=c(33575),{containsLikelySecret:m}=c(14681),{clientIpMatches:n,normalizeAllowedClientIps:o}=c(54584),{normalizeAllowedTools:p,clientToolMatches:q,shouldRefuseClientTool:r}=c(47141),{createProxyAuthenticator:s,createProxyAuthLimiter:t,hashProxyPassword:u,parseBasicProxyAuthorization:v}=c(99721),{isPublicAddress:w}=c(77051),{normalizeAccessGrants:x,effectiveClientIpPolicy:y,attachClientIpGate:z,findAccessGrant:A}=c(68370),{promptLogMirrorDecision:B}=c(62952);function C(a){return i.createHash("sha256").update(a).digest("hex")}function D(a){let b=j.pki.rsa.generateKeyPair(2048),c=j.pki.createCertificate();c.publicKey=b.publicKey,c.serialNumber=String(Date.now()),c.validity.notBefore=new Date(Date.now()-6e4),c.validity.notAfter=new Date(Date.now()+864e5);let d=[{name:"commonName",value:a}];return c.setSubject(d),c.setIssuer(d),c.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0}]),c.sign(b.privateKey,j.md.sha256.create()),{cert:c,keys:b,certPem:j.pki.certificateToPem(c)}}function E(a,b){let c=j.pki.rsa.generateKeyPair(2048),d=j.pki.createCertificate();return d.publicKey=c.publicKey,d.serialNumber=`${Date.now()}${Math.floor(1e3*Math.random())}`,d.validity.notBefore=new Date(Date.now()-6e4),d.validity.notAfter=new Date(Date.now()+864e5),d.setSubject([{name:"commonName",value:b}]),d.setIssuer(a.cert.subject.attributes),d.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:b}]}]),d.sign(a.keys.privateKey,j.md.sha256.create()),{cert:j.pki.certificateToPem(d),key:j.pki.privateKeyToPem(c.privateKey)}}function F(a,b="127.0.0.1"){return new Promise((c,d)=>{a.once("error",d),a.listen(0,b,()=>{a.removeListener("error",d),c(a.address())})})}function G(a){return new Promise(b=>{if(!a)return b();try{a.forceCloseAll?.()}catch{}if(!a.listening)return b();a.close(()=>b()),setTimeout(b,1e3).unref?.()})}function H(a,b){let c="127.0.0.1";return Promise.resolve({host:a,port:b,addresses:[{address:c,family:4}],lookup:(a,b,d)=>{let e=b,f=d;"function"==typeof b&&(f=b,e={}),e?.all?f(null,[{address:c,family:4}]):f(null,c,4)}})}function I(a,b,c="",d=""){return new Promise((e,g)=>{let h=f.connect(a,"127.0.0.1"),i=Buffer.alloc(0),j=setTimeout(()=>g(Error("CONNECT timeout")),7e3);h.once("error",g),h.once("connect",()=>{let a=c?`User-Agent: ${c}\r
50
50
  `:"";h.write(`CONNECT ${b} HTTP/1.1\r
51
51
  Host: ${b}\r
52
52
  ${a}${d}Proxy-Connection: keep-alive\r
53
53
  \r
54
- `)});let k=a=>{let b=(i=Buffer.concat([i,a])).indexOf("\r\n\r\n");if(b<0)return;h.removeListener("data",k),clearTimeout(j);let c=i.subarray(0,b).toString("utf8"),d=i.subarray(b+4);if(!/^HTTP\/1\.1 200\b/.test(c)){h.destroy(),g(Error(`CONNECT failed: ${c.split("\r\n")[0]}`));return}d.length&&h.unshift(d),f(h)};h.on("data",k)})}function E(a,b,c=""){return new Promise((d,f)=>{let g=e.connect(a,"127.0.0.1"),h=Buffer.alloc(0),i=setTimeout(()=>f(Error("CONNECT raw timeout")),7e3);g.once("error",f),g.once("connect",()=>{g.write(`CONNECT ${b} HTTP/1.1\r
54
+ `)});let k=a=>{let b=(i=Buffer.concat([i,a])).indexOf("\r\n\r\n");if(b<0)return;h.removeListener("data",k),clearTimeout(j);let c=i.subarray(0,b).toString("utf8"),d=i.subarray(b+4);if(!/^HTTP\/1\.1 200\b/.test(c)){h.destroy(),g(Error(`CONNECT failed: ${c.split("\r\n")[0]}`));return}d.length&&h.unshift(d),e(h)};h.on("data",k)})}function J(a,b,c=""){return new Promise((d,e)=>{let g=f.connect(a,"127.0.0.1"),h=Buffer.alloc(0),i=setTimeout(()=>e(Error("CONNECT raw timeout")),7e3);g.once("error",e),g.once("connect",()=>{g.write(`CONNECT ${b} HTTP/1.1\r
55
55
  Host: ${b}\r
56
56
  ${c}\r
57
- `)}),g.on("data",a=>{let b=(h=Buffer.concat([h,a])).indexOf("\r\n\r\n");if(b<0)return;clearTimeout(i);let c=h.subarray(0,b).toString("utf8");try{g.destroy()}catch{}d(c)}),g.on("close",()=>{clearTimeout(i),d(h.toString("utf8"))})})}function F(a,b){return`Proxy-Authorization: Basic ${Buffer.from(`${a}:${b}`).toString("base64")}\r
58
- `}function G({socket:a,ca:b,servername:c,port:d,body:e,path:g,alpnProtocols:h=["http/1.1"],onAlpn:i}){return new Promise((j,k)=>{let l=f.connect({socket:a,ca:b,servername:c,rejectUnauthorized:!0,ALPNProtocols:h}),m=[],n=setTimeout(()=>k(Error("TLS HTTP/1.1 test timeout")),1e4);l.once("error",k),l.once("secureConnect",()=>{i?.(l.alpnProtocol),l.write(`POST ${g} HTTP/1.1\r
57
+ `)}),g.on("data",a=>{let b=(h=Buffer.concat([h,a])).indexOf("\r\n\r\n");if(b<0)return;clearTimeout(i);let c=h.subarray(0,b).toString("utf8");try{g.destroy()}catch{}d(c)}),g.on("close",()=>{clearTimeout(i),d(h.toString("utf8"))})})}function K(a){return new Promise(b=>{let c=f.connect(a,"127.0.0.1"),d="",e=!1,g=a=>{if(!e){e=!0,clearTimeout(h);try{c.destroy()}catch{}b(a)}},h=setTimeout(()=>g({served:d.length>0,hungUp:!1,received:d}),1500);c.on("connect",()=>c.write("GET / HTTP/1.1\r\nHost: gate.test\r\nConnection: close\r\n\r\n")),c.on("data",a=>{d+=a.toString("utf8")}),c.on("error",()=>g({served:!1,hungUp:!0,received:d})),c.on("close",()=>g({served:d.length>0,hungUp:0===d.length,received:d}))})}function L(a,b){return`Proxy-Authorization: Basic ${Buffer.from(`${a}:${b}`).toString("base64")}\r
58
+ `}function M({socket:a,ca:b,servername:c,port:d,body:e,path:f,alpnProtocols:h=["http/1.1"],onAlpn:i}){return new Promise((j,k)=>{let l=g.connect({socket:a,ca:b,servername:c,rejectUnauthorized:!0,ALPNProtocols:h}),m=[],n=setTimeout(()=>k(Error("TLS HTTP/1.1 test timeout")),1e4);l.once("error",k),l.once("secureConnect",()=>{i?.(l.alpnProtocol),l.write(`POST ${f} HTTP/1.1\r
59
59
  Host: localhost:${d}\r
60
60
  Authorization: Bearer test-secret-authorization-123456789\r
61
61
  x-api-key: sk-test-supersecret-123456789\r
@@ -64,7 +64,7 @@ Content-Type: application/json\r
64
64
  Content-Length: ${e.length}\r
65
65
  Connection: close\r
66
66
  \r
67
- `),l.write(e)}),l.on("data",a=>m.push(Buffer.from(a))),l.on("end",()=>{clearTimeout(n),j(function(a){let b=a.indexOf("\r\n\r\n");if(b<0)throw Error("Invalid HTTP/1.1 response");let c=a.subarray(0,b).toString("latin1"),d={};for(let a of c.split("\r\n").slice(1)){let b=a.indexOf(":");b>0&&(d[a.slice(0,b).toLowerCase()]=a.slice(b+1).trim())}let e=Number(d["content-length"]||0);return{head:c,headers:d,body:a.subarray(b+4,e?b+4+e:void 0)}}(Buffer.concat(m)))})})}a.exports={runSelfTest:async function(){let a=Date.now(),b=[],c=(a,c,d="")=>b.push({name:a,ok:!!c,detail:d}),i=n(["172.16.253.3","10.20.30.0/24","2001:db8::/64"]);c("Client IP exact allowlist match",m("::ffff:172.16.253.3",i)),c("Client IPv4 CIDR allowlist match",m("10.20.30.77",i)),c("Client IPv6 CIDR allowlist match",m("2001:db8::1234",i)),c("Client IP outside allowlist denied",!m("10.20.31.77",i)),c("Public destination accepted",v("1.1.1.1"));let r=o(["claude-code","codex"]);if(c("Preset expands to the tool's User-Agent patterns",p("claude-cli/2.0.1 (external, cli)",r)),c("Codex User-Agent matches its preset",p("codex_cli_rs/0.147.0 (Windows 10.0.26200; x86_64)",r)),c("A browser is refused",q("Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/131.0",r)),c("An allowed tool is not refused",!q("claude-cli/2.1.241 (external, cli)",r)),c("A CONNECT without a User-Agent is let through",!q("",r)),c("A free-text entry is matched verbatim",p("my-internal-agent/3",o(["my-internal-agent"]))),c("Private destination rejected",!v("127.0.0.1")&&!v("169.254.169.254")),"function"==typeof g.zstdCompressSync){let a=JSON.stringify({input:[{content:[{text:"zstd audit ok"}]}]}),b=new k(1048576);b.add(g.zstdCompressSync(Buffer.from(a)));let d=await b.finish("application/json","zstd");c("Zstd audit body decoded",!0===d.decoded&&d.body.includes("zstd audit ok")&&!d.decodeError,d.decodeError||"")}else c("Zstd audit body decoded",!1,`This runtime has no zlib zstd support (${process.version}); Codex request bodies cannot be decoded. Run Node 22.15 or newer.`);let s=JSON.stringify({type:"message",content:[{type:"text",text:"brotli audit ok"}]}),u=new k(1048576);u.add(g.brotliCompressSync(Buffer.from(s)));let H=await u.finish("application/json","br");c("Brotli audit body decoded",!0===H.decoded&&H.body.includes("brotli audit ok")&&!H.decodeError);let I=Buffer.from(`TRUNCATED-GZIP-PREFIX-OK${h.randomBytes(8192).toString("hex")}`),J=g.gzipSync(I),K=new k(Math.floor(.7*J.length));K.add(J);let L=await K.finish("application/json","gzip");c("Truncated gzip audit body partially decoded",!0===L.decodePartial&&!0===L.truncated&&L.body.includes("TRUNCATED-GZIP-PREFIX-OK"),L.decodeError||"");let M=y("BlueRouter Audit Self Test Upstream CA"),N=z(M,"localhost"),O=y("BlueRouter Audit Self Test Proxy CA"),P=z(O,"localhost"),Q=Buffer.from(JSON.stringify({type:"message",content:[{type:"text",text:"compressed response preserved"}]})),R=g.brotliCompressSync(Q),S=[],T=`event: message_start
67
+ `),l.write(e)}),l.on("data",a=>m.push(Buffer.from(a))),l.on("end",()=>{clearTimeout(n),j(function(a){let b=a.indexOf("\r\n\r\n");if(b<0)throw Error("Invalid HTTP/1.1 response");let c=a.subarray(0,b).toString("latin1"),d={};for(let a of c.split("\r\n").slice(1)){let b=a.indexOf(":");b>0&&(d[a.slice(0,b).toLowerCase()]=a.slice(b+1).trim())}let e=Number(d["content-length"]||0);return{head:c,headers:d,body:a.subarray(b+4,e?b+4+e:void 0)}}(Buffer.concat(m)))})})}a.exports={runSelfTest:async function(){let a=Date.now(),b=[],c=(a,c,d="")=>b.push({name:a,ok:!!c,detail:d}),j=x([{userId:"Anh-TCT@Fujinet.net",ips:["172.16.253.2","172.16.253.2","172.16.6.0/24"],note:" Laptop "},{userId:"anh-tct@fujinet.net",ips:["10.9.9.9"]},{userId:"",ips:["10.0.0.1"]}]);c("Grant user id is normalised and duplicates merge",1===j.length&&"anh-tct@fujinet.net"===j[0].userId,JSON.stringify(j)),c("Grant addresses deduplicate and keep CIDR form",j[0]?.ips.join(",")==="172.16.253.2,172.16.6.0/24,10.9.9.9",j[0]?.ips.join(",")),c("Grant note is trimmed",j[0]?.note==="Laptop",j[0]?.note);let s=x([{userId:"anh-tct",ips:["10.1.1.1"]},{userId:"bob@fujinet.net",ips:["10.1.1.2"]}]);c("Grant lookup matches a bare username",A(s,"Anh-TCT")?.ips.join()==="10.1.1.1"),c("Grant lookup matches an email identity",A(s,"BOB@fujinet.net")?.ips.join()==="10.1.1.2"),c("Grant lookup refuses an unknown identity",null===A(s,"carol"));let t="";try{x([{userId:"u",ips:["not-an-ip"]}])}catch(a){t=a.message||String(a)}c("Grant with an invalid address is rejected",/Invalid client IP/.test(t),t);let v=y({accessGrants:[{userId:"u",ips:["10.9.9.9"]}],clientIpFilterEnabled:!1,allowedClientIps:["192.168.1.1"]});c("A grant enforces the allowlist and supersedes the manual list",!0===v.enabled&&"grants"===v.source&&n("10.9.9.9",v.allowedClientIps)&&!n("192.168.1.1",v.allowedClientIps),JSON.stringify(v.allowedClientIps));let N=y({accessGrants:[{userId:"u",ips:[]}],clientIpFilterEnabled:!0,allowedClientIps:["192.168.1.1"]});c("Grants without an address fall back to the manual filter","manual"===N.source&&!0===N.enabled&&"192.168.1.1"===N.allowedClientIps.join(),JSON.stringify(N)),c("No grant and no manual filter leaves the listener open",!1===y({accessGrants:[],clientIpFilterEnabled:!1,allowedClientIps:[]}).enabled);let O=d.createServer((a,b)=>b.end("served")),P=d.createServer((a,b)=>b.end("served"));try{z(O,{accessGrants:[{userId:"granted",ips:["127.0.0.1"]}]}),z(P,{accessGrants:[{userId:"elsewhere",ips:["10.99.99.99"]}]});let a=await F(O),b=await F(P),d=await K(a.port),e=await K(b.port);c("A granted client IP reaches the listener",!0===d.served&&/served/.test(d.received),JSON.stringify(d.received.slice(0,40))),c("A client IP nobody was granted is hung up on",!1===e.served,JSON.stringify(e))}finally{await G(O),await G(P)}let Q=o(["172.16.253.3","10.20.30.0/24","2001:db8::/64"]);c("Client IP exact allowlist match",n("::ffff:172.16.253.3",Q)),c("Client IPv4 CIDR allowlist match",n("10.20.30.77",Q)),c("Client IPv6 CIDR allowlist match",n("2001:db8::1234",Q)),c("Client IP outside allowlist denied",!n("10.20.31.77",Q)),c("Public destination accepted",w("1.1.1.1"));let R=p(["claude-code","codex"]);if(c("Preset expands to the tool's User-Agent patterns",q("claude-cli/2.0.1 (external, cli)",R)),c("Codex User-Agent matches its preset",q("codex_cli_rs/0.147.0 (Windows 10.0.26200; x86_64)",R)),c("A browser is refused",r("Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/131.0",R)),c("An allowed tool is not refused",!r("claude-cli/2.1.241 (external, cli)",R)),c("A CONNECT without a User-Agent is let through",!r("",R)),c("A free-text entry is matched verbatim",q("my-internal-agent/3",p(["my-internal-agent"]))),c("Private destination rejected",!w("127.0.0.1")&&!w("169.254.169.254")),"function"==typeof h.zstdCompressSync){let a=JSON.stringify({input:[{content:[{text:"zstd audit ok"}]}]}),b=new l(1048576);b.add(h.zstdCompressSync(Buffer.from(a)));let d=await b.finish("application/json","zstd");c("Zstd audit body decoded",!0===d.decoded&&d.body.includes("zstd audit ok")&&!d.decodeError,d.decodeError||"")}else c("Zstd audit body decoded",!1,`This runtime has no zlib zstd support (${process.version}); Codex request bodies cannot be decoded. Run Node 22.15 or newer.`);let S=JSON.stringify({type:"message",content:[{type:"text",text:"brotli audit ok"}]}),T=new l(1048576);T.add(h.brotliCompressSync(Buffer.from(S)));let U=await T.finish("application/json","br");c("Brotli audit body decoded",!0===U.decoded&&U.body.includes("brotli audit ok")&&!U.decodeError);let V=Buffer.from(`TRUNCATED-GZIP-PREFIX-OK${i.randomBytes(8192).toString("hex")}`),W=h.gzipSync(V),X=new l(Math.floor(.7*W.length));X.add(W);let Y=await X.finish("application/json","gzip");c("Truncated gzip audit body partially decoded",!0===Y.decodePartial&&!0===Y.truncated&&Y.body.includes("TRUNCATED-GZIP-PREFIX-OK"),Y.decodeError||"");let Z=D("BlueRouter Audit Self Test Upstream CA"),$=E(Z,"localhost"),_=D("BlueRouter Audit Self Test Proxy CA"),aa=E(_,"localhost"),ab=Buffer.from(JSON.stringify({type:"message",content:[{type:"text",text:"compressed response preserved"}]})),ac=h.brotliCompressSync(ab),ad=[],ae=`event: message_start
68
68
  data: ${JSON.stringify({type:"message_start",message:{id:"msg_selftest",type:"message",role:"assistant",model:"audit-self-test-stream-model",content:[],usage:{input_tokens:11,cache_creation_input_tokens:22,cache_read_input_tokens:33,output_tokens:1}}})}
69
69
 
70
70
  event: content_block_delta
@@ -75,13 +75,13 @@ data: ${JSON.stringify({type:"message_delta",delta:{stop_reason:"end_turn"},usag
75
75
 
76
76
  event: message_stop
77
77
  data: ${JSON.stringify({type:"message_stop"})}
78
- `,U=g.gzipSync(Buffer.from(T,"utf8")),V=d.createSecureServer({key:N.key,cert:N.cert,allowHTTP1:!0});V.on("request",(a,b)=>{let c=[];a.on("data",a=>c.push(Buffer.from(a))),a.on("end",()=>{if(S.push({proxyAuthorization:a.headers["proxy-authorization"]||null,protocol:2===a.httpVersionMajor?"h2":"http/1.1",path:a.url,authorization:a.headers.authorization,apiKey:a.headers["x-api-key"],internalHeader:a.headers["x-9r-source-tool"],body:Buffer.concat(c)}),String(a.url||"").includes("stream=1")){b.writeHead(200,{"content-type":"text/event-stream","content-encoding":"gzip","content-length":String(U.length)}),b.end(U);return}b.writeHead(200,{"content-type":"application/json","content-encoding":"br","content-length":String(R.length)}),b.end(R)})});let W=[],X=null,Y=null;try{var Z;let a=await A(V);X=j({allowedHosts:["localhost"],passthroughUnknown:!1,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4},{certificateProvider:()=>P,upstreamCa:M.certPem,resolveTarget:C,onAudit:a=>W.push(a)});let b=await A(X),d=await (Z=b.port,new Promise((a,b)=>{let c=e.connect(Z,"127.0.0.1"),d=[],f=setTimeout(()=>b(Error("Plain HTTP rejection timeout")),5e3);c.once("connect",()=>c.end("GET http://example.com/ HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n")),c.on("data",a=>d.push(Buffer.from(a))),c.once("error",b),c.once("end",()=>{clearTimeout(f),a(Buffer.concat(d).toString("utf8"))})}));c("Plain HTTP forward proxy is disabled",d.startsWith("HTTP/1.1 403"));let g="";try{await D(b.port,`blocked.invalid:${a.port}`)}catch(a){g=a.message||String(a)}c("CONNECT to a non-allowlisted host is refused",g.includes("403"),g),await new Promise(a=>setTimeout(a,100));let i=W.find(a=>"CONNECT"===a.method&&"blocked.invalid"===a.host);c("Refused CONNECT is audited with the blocked host",!!i,i?"":"no CONNECT event recorded"),c("Refused CONNECT records why it was blocked",/allowlist/i.test(i?.error||""),i?.error||""),c("Refused CONNECT is flagged as denied",i?.denied===!0,String(i?.denied));let k=w(i);c("Denied event is not mirrored into prompt_logs",!1===k.mirror&&"denied"===k.reason,JSON.stringify(k));let m=j({allowedHosts:["localhost"],passthroughUnknown:!1,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4,clientToolFilterEnabled:!0,allowedClientTools:["claude-code"]},{certificateProvider:()=>P,upstreamCa:M.certPem,resolveTarget:C,onAudit:a=>W.push(a)}),n=await A(m),o="";try{(await D(n.port,`localhost:${a.port}`,"claude-cli/2.0.1 (external, cli)")).destroy()}catch(a){o=a.message||String(a)}c("Allowed tool still opens a tunnel",""===o,o);let p="";try{await D(n.port,`localhost:${a.port}`,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/131.0")}catch(a){p=a.message||String(a)}c("Browser is turned away by the tool filter",p.includes("403"),p);let q="";try{(await D(n.port,`localhost:${a.port}`)).destroy()}catch(a){q=a.message||String(a)}c("A client sending no User-Agent still connects",""===q,q),await new Promise(a=>setTimeout(a,100));let r=W.find(a=>/Client tool is not allowed/i.test(a.error||""));c("Refused tool is audited with the User-Agent that was rejected",/Chrome|no User-Agent/i.test(r?.error||""),r?.error||""),await B(m);let s="selftest-user",u="selftest:pass:with:colons",v=await t(u),y=0,z=j({allowedHosts:["localhost"],passthroughUnknown:!0,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4,proxyAuthEnabled:!0,proxyAuthUsers:[{username:s,passwordHash:v}]},{certificateProvider:()=>P,upstreamCa:M.certPem,resolveTarget:(a,b)=>(y+=1,C(a,b)),onAudit:a=>W.push(a)}),H=await A(z),I=`localhost:${a.port}`,J=await E(H.port,I);c("CONNECT without credentials is refused with 407",J.startsWith("HTTP/1.1 407 Proxy Authentication Required"),J.split("\r\n")[0]),c("407 carries a Basic challenge",/Proxy-Authenticate: Basic realm="BlueRouter Audit Proxy", charset="UTF-8"/.test(J)),c("407 closes the connection",/Connection: close/i.test(J));let K=await E(H.port,I,F(s,"wrong"));c("Wrong password is refused with 407",K.startsWith("HTTP/1.1 407"),K.split("\r\n")[0]);let L=await E(H.port,I,F("nobody",u));c("Unknown username is refused with 407",L.startsWith("HTTP/1.1 407"),L.split("\r\n")[0]);let N=await E(H.port,`blocked.invalid:${a.port}`);c("Unauthenticated client cannot use the passthrough tunnel",N.startsWith("HTTP/1.1 407"),N.split("\r\n")[0]),c("Unauthenticated client cannot tell an allowlisted host from a blocked one",J.split("\r\n")[0]===N.split("\r\n")[0]),c("Unauthenticated CONNECT does not resolve the destination",0===y,`resolver called ${y} times`);let Q=Buffer.from(JSON.stringify({model:"audit-self-test-auth",messages:[]})),T=await D(H.port,I,"",F(s,u)),U=await G({socket:T,ca:O.certPem,servername:"localhost",port:a.port,body:Q,path:"/v1/messages?auth=1"});c("Correct credentials open a working tunnel",U.head.startsWith("HTTP/1.1 200"),U.head.split("\r\n")[0]),c("Authenticated CONNECT does resolve the destination",y>0,`resolver called ${y} times`),await new Promise(a=>setTimeout(a,100));let $=W.find(a=>String(a.path||"").includes("auth=1"));c("Authenticated tunnel attributes the username on the request event",$?.client?.proxyUser===s,$?.client?.proxyUser||"(none)");let _=W.find(a=>407===a.status&&a.error&&/Invalid proxy credentials/.test(a.error));c("Failed proxy auth is audited",!!_,_?"":"no 407 event recorded");let aa=Buffer.from(`${s}:${u}`).toString("base64"),ab=W.some(a=>{let b=JSON.stringify(a);return b.includes(u)||b.includes(aa)});c("No audit event records the proxy credential",!ab),c("Proxy-Authorization is redacted in audit events",W.filter(a=>"proxy-authorization"in(a.request?.headers||{})).every(a=>"[REDACTED]"===a.request.headers["proxy-authorization"])),c("Proxy-Authorization never reaches the origin",S.every(a=>null==a.proxyAuthorization)),await B(z);let ac=Buffer.from(JSON.stringify({model:"audit-self-test-h1",messages:[{role:"user",content:"hello h1 ✓"}]})),ad="/v1/messages?beta=true&encoded=%2F",ae=await D(b.port,`localhost:${a.port}`),af=await G({socket:ae,ca:O.certPem,servername:"localhost",port:a.port,body:ac,path:ad});c("HTTP/1.1 CONNECT and TLS succeeded",af.head.startsWith("HTTP/1.1 200")),c("HTTP/1.1 compressed response bytes preserved",x(af.body)===x(R));let ag=Buffer.from(JSON.stringify({model:"audit-self-test-h2-downgrade",messages:[{role:"user",content:"hello downgrade ✓"}]})),ah="/v1/messages?beta=true&protocol=h2-preferred",ai=await D(b.port,`localhost:${a.port}`),aj=null,ak=await G({socket:ai,ca:O.certPem,servername:"localhost",port:a.port,body:ag,path:ah,alpnProtocols:["h2","http/1.1"],onAlpn:a=>{aj=a}});c("h2-preferring client is downgraded to HTTP/1.1","http/1.1"===aj,`negotiated ${aj||"none"}`),c("Downgraded client still gets a response",ak.head.startsWith("HTTP/1.1 200")),c("Downgraded compressed response bytes preserved",x(ak.body)===x(R)),c("HTTP/2 is not advertised while the h2 path is unfixed",X.auditCapabilities?.http2===!1);let al=Buffer.from(JSON.stringify({model:"audit-self-test-stream-model",messages:[{role:"user",content:"x".repeat(1052672)}]})),am=await D(b.port,`localhost:${a.port}`),an=await G({socket:am,ca:O.certPem,servername:"localhost",port:a.port,body:al,path:"/v1/messages?beta=true&stream=1"});c("Streaming response forwarded",an.head.startsWith("HTTP/1.1 200")),await new Promise(a=>setTimeout(a,100));let ao=W.find(a=>String(a.path||"").includes("stream=1"));c("Streaming audit event captured",!!ao),c("Token usage extracted from streamed response",ao?.usage?.inputTokens===11&&ao?.usage?.cacheCreationTokens===22&&ao?.usage?.cacheReadTokens===33&&ao?.usage?.outputTokens===44&&ao?.usage?.totalTokens===110,JSON.stringify(ao?.usage||null)),c("Streamed usage marked complete",ao?.usage?.complete===!0&&ao?.usage?.stopReason==="end_turn"),c("Model recovered from response when request body is truncated",ao?.request?.truncated===!0&&ao?.model==="audit-self-test-stream-model"),c("Exchange without token usage reports none",W.some(a=>String(a.path||"").includes("encoded=")&&null==a.usage));let ap=await D(b.port,`localhost:${a.port}`),aq=await function({socket:a,ca:b,servername:c,port:d,path:e}){return new Promise((g,i)=>{let j=f.connect({socket:a,ca:b,servername:c,rejectUnauthorized:!0,ALPNProtocols:["http/1.1"]}),k=[],l=setTimeout(()=>i(Error("Upgrade test timeout")),1e4);j.once("error",i),j.once("secureConnect",()=>{j.write(`GET ${e} HTTP/1.1\r
78
+ `,af=h.gzipSync(Buffer.from(ae,"utf8")),ag=e.createSecureServer({key:$.key,cert:$.cert,allowHTTP1:!0});ag.on("request",(a,b)=>{let c=[];a.on("data",a=>c.push(Buffer.from(a))),a.on("end",()=>{if(ad.push({proxyAuthorization:a.headers["proxy-authorization"]||null,protocol:2===a.httpVersionMajor?"h2":"http/1.1",path:a.url,authorization:a.headers.authorization,apiKey:a.headers["x-api-key"],internalHeader:a.headers["x-9r-source-tool"],body:Buffer.concat(c)}),String(a.url||"").includes("stream=1")){b.writeHead(200,{"content-type":"text/event-stream","content-encoding":"gzip","content-length":String(af.length)}),b.end(af);return}b.writeHead(200,{"content-type":"application/json","content-encoding":"br","content-length":String(ac.length)}),b.end(ac)})});let ah=[],ai=null,aj=null;try{var ak;let a=await F(ag);ai=k({allowedHosts:["localhost"],passthroughUnknown:!1,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4},{certificateProvider:()=>aa,upstreamCa:Z.certPem,resolveTarget:H,onAudit:a=>ah.push(a)});let b=await F(ai),d=await (ak=b.port,new Promise((a,b)=>{let c=f.connect(ak,"127.0.0.1"),d=[],e=setTimeout(()=>b(Error("Plain HTTP rejection timeout")),5e3);c.once("connect",()=>c.end("GET http://example.com/ HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n")),c.on("data",a=>d.push(Buffer.from(a))),c.once("error",b),c.once("end",()=>{clearTimeout(e),a(Buffer.concat(d).toString("utf8"))})}));c("Plain HTTP forward proxy is disabled",d.startsWith("HTTP/1.1 403"));let e="";try{await I(b.port,`blocked.invalid:${a.port}`)}catch(a){e=a.message||String(a)}c("CONNECT to a non-allowlisted host is refused",e.includes("403"),e),await new Promise(a=>setTimeout(a,100));let h=ah.find(a=>"CONNECT"===a.method&&"blocked.invalid"===a.host);c("Refused CONNECT is audited with the blocked host",!!h,h?"":"no CONNECT event recorded"),c("Refused CONNECT records why it was blocked",/allowlist/i.test(h?.error||""),h?.error||""),c("Refused CONNECT is flagged as denied",h?.denied===!0,String(h?.denied));let j=B(h);c("Denied event is not mirrored into prompt_logs",!1===j.mirror&&"denied"===j.reason,JSON.stringify(j));let l=k({allowedHosts:["localhost"],passthroughUnknown:!1,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4,clientToolFilterEnabled:!0,allowedClientTools:["claude-code"]},{certificateProvider:()=>aa,upstreamCa:Z.certPem,resolveTarget:H,onAudit:a=>ah.push(a)}),n=await F(l),o="";try{(await I(n.port,`localhost:${a.port}`,"claude-cli/2.0.1 (external, cli)")).destroy()}catch(a){o=a.message||String(a)}c("Allowed tool still opens a tunnel",""===o,o);let p="";try{await I(n.port,`localhost:${a.port}`,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/131.0")}catch(a){p=a.message||String(a)}c("Browser is turned away by the tool filter",p.includes("403"),p);let q="";try{(await I(n.port,`localhost:${a.port}`)).destroy()}catch(a){q=a.message||String(a)}c("A client sending no User-Agent still connects",""===q,q),await new Promise(a=>setTimeout(a,100));let r=ah.find(a=>/Client tool is not allowed/i.test(a.error||""));c("Refused tool is audited with the User-Agent that was rejected",/Chrome|no User-Agent/i.test(r?.error||""),r?.error||""),await G(l);let s="selftest-user",t="selftest:pass:with:colons",v=await u(t),w=0,x=k({allowedHosts:["localhost"],passthroughUnknown:!0,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4,proxyAuthEnabled:!0,proxyAuthUsers:[{username:s,passwordHash:v}]},{certificateProvider:()=>aa,upstreamCa:Z.certPem,resolveTarget:(a,b)=>(w+=1,H(a,b)),onAudit:a=>ah.push(a)}),y=await F(x),z=`localhost:${a.port}`,A=await J(y.port,z);c("CONNECT without credentials is refused with 407",A.startsWith("HTTP/1.1 407 Proxy Authentication Required"),A.split("\r\n")[0]),c("407 carries a Basic challenge",/Proxy-Authenticate: Basic realm="BlueRouter Audit Proxy", charset="UTF-8"/.test(A)),c("407 closes the connection",/Connection: close/i.test(A));let D=await J(y.port,z,L(s,"wrong"));c("Wrong password is refused with 407",D.startsWith("HTTP/1.1 407"),D.split("\r\n")[0]);let E=await J(y.port,z,L("nobody",t));c("Unknown username is refused with 407",E.startsWith("HTTP/1.1 407"),E.split("\r\n")[0]);let K=await J(y.port,`blocked.invalid:${a.port}`);c("Unauthenticated client cannot use the passthrough tunnel",K.startsWith("HTTP/1.1 407"),K.split("\r\n")[0]),c("Unauthenticated client cannot tell an allowlisted host from a blocked one",A.split("\r\n")[0]===K.split("\r\n")[0]),c("Unauthenticated CONNECT does not resolve the destination",0===w,`resolver called ${w} times`);let N=Buffer.from(JSON.stringify({model:"audit-self-test-auth",messages:[]})),O=await I(y.port,z,"",L(s,t)),P=await M({socket:O,ca:_.certPem,servername:"localhost",port:a.port,body:N,path:"/v1/messages?auth=1"});c("Correct credentials open a working tunnel",P.head.startsWith("HTTP/1.1 200"),P.head.split("\r\n")[0]),c("Authenticated CONNECT does resolve the destination",w>0,`resolver called ${w} times`),await new Promise(a=>setTimeout(a,100));let Q=ah.find(a=>String(a.path||"").includes("auth=1"));c("Authenticated tunnel attributes the username on the request event",Q?.client?.proxyUser===s,Q?.client?.proxyUser||"(none)");let R=ah.find(a=>407===a.status&&a.error&&/Invalid proxy credentials/.test(a.error));c("Failed proxy auth is audited",!!R,R?"":"no 407 event recorded");let S=Buffer.from(`${s}:${t}`).toString("base64"),T=ah.some(a=>{let b=JSON.stringify(a);return b.includes(t)||b.includes(S)});c("No audit event records the proxy credential",!T),c("Proxy-Authorization is redacted in audit events",ah.filter(a=>"proxy-authorization"in(a.request?.headers||{})).every(a=>"[REDACTED]"===a.request.headers["proxy-authorization"])),c("Proxy-Authorization never reaches the origin",ad.every(a=>null==a.proxyAuthorization)),await G(x);let U=Buffer.from(JSON.stringify({model:"audit-self-test-h1",messages:[{role:"user",content:"hello h1 ✓"}]})),V="/v1/messages?beta=true&encoded=%2F",W=await I(b.port,`localhost:${a.port}`),X=await M({socket:W,ca:_.certPem,servername:"localhost",port:a.port,body:U,path:V});c("HTTP/1.1 CONNECT and TLS succeeded",X.head.startsWith("HTTP/1.1 200")),c("HTTP/1.1 compressed response bytes preserved",C(X.body)===C(ac));let Y=Buffer.from(JSON.stringify({model:"audit-self-test-h2-downgrade",messages:[{role:"user",content:"hello downgrade ✓"}]})),$="/v1/messages?beta=true&protocol=h2-preferred",ab=await I(b.port,`localhost:${a.port}`),ae=null,af=await M({socket:ab,ca:_.certPem,servername:"localhost",port:a.port,body:Y,path:$,alpnProtocols:["h2","http/1.1"],onAlpn:a=>{ae=a}});c("h2-preferring client is downgraded to HTTP/1.1","http/1.1"===ae,`negotiated ${ae||"none"}`),c("Downgraded client still gets a response",af.head.startsWith("HTTP/1.1 200")),c("Downgraded compressed response bytes preserved",C(af.body)===C(ac)),c("HTTP/2 is not advertised while the h2 path is unfixed",ai.auditCapabilities?.http2===!1);let al=Buffer.from(JSON.stringify({model:"audit-self-test-stream-model",messages:[{role:"user",content:"x".repeat(1052672)}]})),am=await I(b.port,`localhost:${a.port}`),an=await M({socket:am,ca:_.certPem,servername:"localhost",port:a.port,body:al,path:"/v1/messages?beta=true&stream=1"});c("Streaming response forwarded",an.head.startsWith("HTTP/1.1 200")),await new Promise(a=>setTimeout(a,100));let ao=ah.find(a=>String(a.path||"").includes("stream=1"));c("Streaming audit event captured",!!ao),c("Token usage extracted from streamed response",ao?.usage?.inputTokens===11&&ao?.usage?.cacheCreationTokens===22&&ao?.usage?.cacheReadTokens===33&&ao?.usage?.outputTokens===44&&ao?.usage?.totalTokens===110,JSON.stringify(ao?.usage||null)),c("Streamed usage marked complete",ao?.usage?.complete===!0&&ao?.usage?.stopReason==="end_turn"),c("Model recovered from response when request body is truncated",ao?.request?.truncated===!0&&ao?.model==="audit-self-test-stream-model"),c("Exchange without token usage reports none",ah.some(a=>String(a.path||"").includes("encoded=")&&null==a.usage));let ap=await I(b.port,`localhost:${a.port}`),aq=await function({socket:a,ca:b,servername:c,port:d,path:e}){return new Promise((f,h)=>{let j=g.connect({socket:a,ca:b,servername:c,rejectUnauthorized:!0,ALPNProtocols:["http/1.1"]}),k=[],l=setTimeout(()=>h(Error("Upgrade test timeout")),1e4);j.once("error",h),j.once("secureConnect",()=>{j.write(`GET ${e} HTTP/1.1\r
79
79
  Host: localhost:${d}\r
80
80
  Upgrade: websocket\r
81
81
  Connection: Upgrade\r
82
82
  Authorization: Bearer test-secret-authorization-123456789\r
83
83
  x-api-key: sk-test-supersecret-123456789\r
84
- Sec-WebSocket-Key: ${h.randomBytes(16).toString("base64")}\r
84
+ Sec-WebSocket-Key: ${i.randomBytes(16).toString("base64")}\r
85
85
  Sec-WebSocket-Version: 13\r
86
86
  \r
87
- `)});let m=()=>{clearTimeout(l),g(Buffer.concat(k).toString("latin1"))};j.on("data",a=>{k.push(Buffer.from(a)),Buffer.concat(k).indexOf("\r\n\r\n")>=0&&m()}),j.on("end",m),j.on("close",m)})}({socket:ap,ca:O.certPem,servername:"localhost",port:a.port,path:"/v1/messages?transport=websocket"});c("Protocol upgrade is refused, not silently downgraded",aq.startsWith("HTTP/1.1 501"),aq.slice(0,40)),c("Upgrade refusal tells the client what to do instead",/HTTP streaming transport/i.test(aq)),c("Upgrade never reaches the origin",!S.some(a=>String(a.path||"").includes("transport=websocket"))),await new Promise(a=>setTimeout(a,100)),c("Refused upgrade is still audited",W.some(a=>501===a.status&&String(a.path||"").includes("transport=websocket")));let ar=W.find(a=>501===a.status&&String(a.path||"").includes("transport=websocket"));c("Refused upgrade is flagged as denied",ar?.denied===!0,String(ar?.denied)),c("Refused upgrade is not mirrored into prompt_logs","denied"===w(ar).reason);let as=S.find(a=>String(a.path||"").includes("encoded=")),at=S.find(a=>String(a.path||"").includes("h2-preferred"));c("HTTP/1.1 path/query preserved",as?.path===ad),c("Downgraded path/query preserved",at?.path===ah),c("HTTP/1.1 request body byte-identical",as&&x(as.body)===x(ac)),c("Downgraded request body byte-identical",at&&x(at.body)===x(ag)),c("Authorization preserved on wire",S.every(a=>"Bearer test-secret-authorization-123456789"===a.authorization)),c("x-api-key preserved on wire",S.every(a=>"sk-test-supersecret-123456789"===a.apiKey)),c("Internal x-9r-* header stripped",S.every(a=>null==a.internalHeader));let au=W.find(a=>String(a.path||"").includes("encoded=")),av=W.find(a=>String(a.path||"").includes("h2-preferred"));c("HTTP/1.1 audit event captured",!!au),c("Downgraded audit event captured",!!av),c("Request wire SHA-256 recorded",au?.request?.wireSha256===x(ac)&&av?.request?.wireSha256===x(ag)),c("Response wire SHA-256 recorded",au?.response?.wireSha256===x(R)&&av?.response?.wireSha256===x(R)),c("Compressed audit response decoded",au?.response?.body?.includes("compressed response preserved")&&av?.response?.body?.includes("compressed response preserved"));let aw=w(au);c("Exchange with a prompt is mirrored with both halves",!0===aw.mirror&&aw.promptText?.includes("hello h1")&&aw.responseText?.includes("compressed response preserved"),JSON.stringify({mirror:aw.mirror,prompt:aw.promptText,response:aw.responseText}));let ax={...au,path:"/api/claude_code/telemetry",request:{...au.request,body:JSON.stringify({events:[{eventName:"tengu_api_success",metadata:{durationMs:120}}]})},response:{...au.response,body:JSON.stringify({accepted_count:17,rejected_count:0})}},ay=w(ax);c("Telemetry exchange is not mirrored into prompt_logs",!1===ay.mirror&&"not-inference"===ay.reason,JSON.stringify(ay));let az={...au,path:"/backend-api/ps/plugins/list?scope=GLOBAL",request:{...au.request,body:""},response:{...au.response,body:JSON.stringify({items:[{text:"gmail@openai-curated-remote"}]})}};c("Plugin listing is not mirrored into prompt_logs","not-inference"===w(az).reason);let aA={...au,request:{...au.request,body:""},response:{...au.response,body:"[br audit body capture truncated; decoded body unavailable]"}};c("Capture placeholder does not count as content","contentless"===w(aA).reason);let aB=W.filter(a=>"authorization"in(a.request?.headers||{}));c("Authorization redacted in audit",aB.length>0&&aB.every(a=>"[REDACTED]"===a.request.headers.authorization));let aC=W.filter(a=>"x-api-key"in(a.request?.headers||{}));c("x-api-key redacted in audit",aC.length>0&&aC.every(a=>"[REDACTED]"===a.request.headers["x-api-key"])),c("No likely API secret persisted",W.length>=2&&W.every(a=>!l(a))),Y=j({allowedHosts:["localhost"],passthroughUnknown:!1,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4},{certificateProvider:()=>P,upstreamCa:M.certPem,resolveTarget:C,onAudit:()=>{throw Error("simulated audit sink failure")}});let aD=await A(Y),aE=await D(aD.port,`localhost:${a.port}`),aF=await G({socket:aE,ca:O.certPem,servername:"localhost",port:a.port,body:ac,path:ad});c("Audit sink failure does not fail proxied request",aF.head.startsWith("HTTP/1.1 200"))}catch(a){c("Self-test execution",!1,a.message||String(a))}finally{await B(Y),await B(X),await B(V)}return{ok:b.length>0&&b.every(a=>a.ok),checks:b,passed:b.filter(a=>a.ok).length,total:b.length,durationMs:Date.now()-a}}}},93958:(a,b,c)=>{"use strict";let{createAuditProxy:d}=c(33575),{loadConfig:e,saveConfig:f,validateConfig:g,CONFIG_PATH:h,AUDIT_LOG_PATH:i,AUDIT_LOG_DIR:j}=c(42947),{hashProxyPassword:k,isValidUsername:l,normalizeProxyUsers:m,redactProxyAuthUsers:n,PASSWORD_MAX_BYTES:o,PASSWORD_MIN_BYTES:p}=c(99721),{clientIpMatches:q,normalizeIp:r}=c(54584),{enqueueAuditJob:s,readRecent:t,clearAudit:u,pruneExpired:v,startAuditMaintenance:w,stopAuditMaintenance:x,flushAuditQueue:y,getAuditStoreStats:z}=c(62952),{ensureAuditRootCA:A,createAuditCertificateProvider:B,validateRootCaPair:C}=c(5541),{readRootCAInfo:D}=c(1653),{runSelfTest:E}=c(93599);function F(){return globalThis.__blueRouterAuditProxyRuntime||(globalThis.__blueRouterAuditProxyRuntime={server:null,certificateProvider:null,startedAt:null,lastError:null,autostartPromise:null,lifecycle:Promise.resolve()}),globalThis.__blueRouterAuditProxyRuntime}function G(a){let b=F(),c=b.lifecycle.then(a,a);return b.lifecycle=c.catch(()=>{}),c}async function H(a,b=1500){if(!a)return;let c=Math.max(0,Number(b)||0);await new Promise(b=>{let d=!1,e=()=>{d||(d=!0,b())};try{a.listening?a.close(e):e()}catch{e()}let f=setTimeout(()=>{try{a.forceCloseAll?.()}catch{}},c);f.unref?.();let g=setTimeout(e,c+2e3);g.unref?.()});try{a.forceCloseAll?.()}catch{}}function I(a){let b=e();return{...a,clientIpFilterEnabled:!0===b.clientIpFilterEnabled,allowedClientIps:[...b.allowedClientIps||[]],proxyAuthEnabled:!0===b.proxyAuthEnabled,proxyAuthUsers:[...b.proxyAuthUsers||[]]}}async function J(a=null){let b=F();if(b.server?.listening)return O();let c=a?f({...I(a),enabled:!1}):e();await A(),await v(),w();let g=B({maxEntries:128});g.prewarm(c.allowedHosts);let h=d(c,{certificateProvider:g,onAuditJob:s});!function(a,b){if(!b.clientIpFilterEnabled)return;let c=b.allowedClientIps||[];a.prependListener("connection",a=>{let b=r(a?.remoteAddress||"");if(!q(b,c)){console.log(`[audit-proxy] denied client IP ${b||"unknown"}`);try{a.destroy()}catch{}}})}(h,c);try{let a=await new Promise((a,b)=>{let d=a=>{h.removeListener("listening",e),b(a)},e=()=>{h.removeListener("error",d),a(h.address())};h.once("error",d),h.once("listening",e),h.listen(c.port,c.bindHost)});return b.server=h,b.certificateProvider=g,b.startedAt=new Date().toISOString(),b.lastError=null,f({...c,enabled:!0}),{...await O(),address:a}}catch(a){b.lastError=a.message||String(a);try{h.forceCloseAll?.()}catch{}try{h.close()}catch{}throw g.clear?.(),a}}async function K({persist:a=!0}={}){let b=F(),c=b.server,d=e();return b.server=null,b.startedAt=null,await H(c,d.shutdownGraceMs),b.certificateProvider?.clear?.(),b.certificateProvider=null,await y(3e3),x(),a&&f({...d,enabled:!1}),O()}async function L(a=null){return await K({persist:!1}),a&&f({...I(a),enabled:!1}),J()}function M(a=null){return G(()=>J(a))}async function N(){let a=F(),b=e();return b.enabled?a.server?.listening?{started:!1,reason:"already-running",status:await O()}:(a.autostartPromise||(a.autostartPromise=(async()=>{try{let a=await M();return console.log(`[audit-proxy] autostarted on ${b.bindHost}:${b.port}`),{started:!0,status:a}}catch(b){return a.lastError=b?.message||String(b),console.log("[audit-proxy] autostart failed:",a.lastError),{started:!1,error:a.lastError}}finally{a.autostartPromise=null}})()),a.autostartPromise):{started:!1,reason:"disabled"}}async function O(){let a=F(),b=e(),c=!!a.server?.listening,d=D();try{let a=C();d={...d,validated:!0===a.exists,expiringSoon:!0===a.expiringSoon,autoRotation:!1}}catch(a){d={...d,validated:!1,autoRotation:!1,error:a.message||String(a)}}return{running:c,listening:c,startedAt:a.startedAt,lastError:a.lastError,address:c?a.server.address():null,activeConnections:c&&a.server.getActiveConnectionCount?.()||0,capabilities:c?a.server.auditCapabilities:{http1:!0,http2:!1,plainHttp:!1,publicConnectPorts:[443]},security:{clientIpFilterEnabled:b.clientIpFilterEnabled,clientToolFilterEnabled:!0===b.clientToolFilterEnabled,allowedClientToolCount:(b.allowedClientTools||[]).length,lanExposedWithoutIpFilter:!["127.0.0.1","::1","localhost"].includes(String(b.bindHost||"").trim().toLowerCase())&&!b.clientIpFilterEnabled,privateDestinationsBlocked:!0,plainHttpBlocked:!0,upstreamTlsVerified:!0},certificateCache:a.certificateProvider?.stats?.()||{entries:0},auditStore:z(),configPath:h,auditLogPath:i,auditLogDirectory:j,rootCA:d}}async function P(a=50){let b=e(),[c,d]=await Promise.all([O(),t(a)]);return{config:Q(b),status:c,events:d}}function Q(a){return a?{...a,proxyAuthUsers:n(a.proxyAuthUsers)}:a}a.exports={startProxy:M,ensureAuditProxyAutostart:N,stopProxy:function(a={}){return G(()=>K(a))},restartProxy:function(a=null){return G(()=>L(a))},getStatus:O,getSnapshot:P,updateConfig:function(a){let b=F();if(b.server?.listening)throw Error("Stop or restart the Audit Proxy before changing its configuration");return Q(f(g(I(a))))},updateClientProxyHost:function(a){return Q(f(g({...e(),clientProxyHost:String(a||"").trim()})))},updateClientIpFilter:function({enabled:a,allowedClientIps:b}={}){return G(async()=>{let c=F(),d=g({...e(),clientIpFilterEnabled:!0===a,allowedClientIps:b});if(c.server?.listening){await K({persist:!1}),f({...d,enabled:!1});let a=await J();return{config:Q(e()),status:a,restarted:!0}}return{config:Q(f(d)),status:await O(),restarted:!1}})},updateProxyAuth:function({enabled:a,users:b}={}){return G(async()=>{let c=F(),d=e(),h=new Map(m(d.proxyAuthUsers).map(a=>[a.username.toLowerCase(),a])),i=new Set,j=[];for(let a of Array.isArray(b)?b:[]){let b=String(a?.username||"").trim();if(!l(b))throw Error(`Invalid username: ${b||"(empty)"}`);let c=b.toLowerCase();if(i.has(c))throw Error(`Duplicate username: ${b}`);i.add(c);let d="string"==typeof a?.password?a.password:"";if(d){let a=Buffer.byteLength(d,"utf8");if(a<p)throw Error(`Password for ${b} must be at least ${p} characters`);if(a>o)throw Error(`Password for ${b} must be at most ${o} bytes`);j.push({username:b,passwordHash:await k(d)});continue}let e=h.get(c);if(!e)throw Error(`Account ${b} requires a password`);j.push({username:b,passwordHash:e.passwordHash})}let n=g({...d,proxyAuthEnabled:!0===a,proxyAuthUsers:j});if(c.server?.listening){await K({persist:!1}),f({...n,enabled:!1});let a=await J();return{config:Q(e()),status:a,restarted:!0}}return{config:Q(f(n)),status:await O(),restarted:!1}})},clearAudit:u,runSelfTest:E}},94463:(a,b,c)=>{var d=c(45654);c(63070),c(36105),c(20308),c(49345),c(70710),c(15873),c(87981),c(10401),c(33889),c(65737);var e=d.asn1,f=a.exports=d.pki=d.pki||{};f.pemToDer=function(a){var b=d.pem.decode(a)[0];if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert PEM to DER; PEM is encrypted.");return d.util.createBuffer(b.body)},f.privateKeyFromPem=function(a){var b=d.pem.decode(a)[0];if("PRIVATE KEY"!==b.type&&"RSA PRIVATE KEY"!==b.type){var c=Error('Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');throw c.headerType=b.type,c}if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert private key from PEM; PEM is encrypted.");var g=e.fromDer(b.body);return f.privateKeyFromAsn1(g)},f.privateKeyToPem=function(a,b){var c={type:"RSA PRIVATE KEY",body:e.toDer(f.privateKeyToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.privateKeyInfoToPem=function(a,b){var c={type:"PRIVATE KEY",body:e.toDer(a).getBytes()};return d.pem.encode(c,{maxline:b})}},99721:(a,b,c)=>{"use strict";let d=c(55511),e=/^[a-z0-9][a-z0-9._-]{0,63}$/i,f=null;function g(){return f||(f=c(1893)),f}function h(a){return String(a||"").trim()}function i(a){let b=Array.isArray(a)?a:[],c=new Set,d=[];for(let a of b){if(!a||"object"!=typeof a)continue;let b=h(a.username),f=String(a.passwordHash||"");if(!e.test(b)||!f.startsWith("$2"))continue;let g=b.toLowerCase();c.has(g)||(c.add(g),d.push({username:b,passwordHash:f}))}return d}function j(a){if(Array.isArray(a))return null;let b=String(a||"").trim();if(!b||b.length>1024)return null;let c=b.indexOf(" ");if(c<0||"basic"!==b.slice(0,c).toLowerCase())return null;let d=b.slice(c+1).trim();if(!d||!/^[A-Za-z0-9+/]+={0,2}$/.test(d))return null;let e="";try{e=Buffer.from(d,"base64").toString("utf8")}catch{return null}let f=e.indexOf(":");return f<0?null:{username:e.slice(0,f),password:e.slice(f+1)}}a.exports={CACHE_TTL_MS:3e5,PASSWORD_MAX_BYTES:72,PASSWORD_MIN_BYTES:8,createProxyAuthLimiter:function({maxFailures:a=10,windowMs:b=6e4,cooldownMs:c=3e4,maxCooldownMs:d=3e5,maxEntries:e=1024}={}){let f=new Map;return{isLocked(a){let b=f.get(a);return!!b&&b.lockedUntil>Date.now()},recordFailure(g){let h=Date.now();!function(a){if(f.size<e)return;for(let[c,d]of f)if(d.lockedUntil<=a&&a-d.lastFailAt>b&&f.delete(c),f.size<e)return;let c=f.keys().next();c.done||f.delete(c.value)}(h);let i=f.get(g)||{failures:0,lastFailAt:0,lockedUntil:0,cooldownMs:c};h-i.lastFailAt>b&&(i.failures=0),i.failures+=1,i.lastFailAt=h;let j=!1;return i.failures>=a&&(i.lockedUntil=h+i.cooldownMs,i.cooldownMs=Math.min(2*i.cooldownMs,d),i.failures=0,j=!0),f.set(g,i),{lockedNow:j}},recordSuccess(a){f.delete(a)}}},createProxyAuthenticator:function(a){let b=new Map(i(a).map(a=>[a.username.toLowerCase(),a])),c=new Map,e=new Map;return{get accountCount(){return b.size},async authenticate(a){let f,h=j(a);if(!h)return{ok:!1,username:null,reason:a?"Unsupported proxy credentials":"Proxy authentication required"};let{username:i,password:k}=h,l=d.createHash("sha256").update(`${i}\0${k}`).digest("hex"),m=(f=c.get(l))?f.expiresAt<=Date.now()?(c.delete(l),null):f.username:null;if(m)return{ok:!0,username:m,reason:null};let n=b.get(i.trim().toLowerCase()),o=n?n.passwordHash:"$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy",p=e.get(l);p||(p=g().compare(k,o).catch(()=>!1),e.set(l,p),p.finally(()=>e.delete(l)));let q=await p;if(!n||!q)return{ok:!1,username:null,reason:"Invalid proxy credentials"};var r=n.username;if(c.size>=256){let a=c.keys().next();a.done||c.delete(a.value)}return c.set(l,{username:r,expiresAt:Date.now()+3e5}),{ok:!0,username:n.username,reason:null}}}},hashProxyPassword:async function a(a){let b=await g().genSalt(10);return g().hash(String(a),b)},isValidUsername:function(a){return e.test(h(a))},normalizeProxyUsers:i,parseBasicProxyAuthorization:j,redactProxyAuthUsers:function(a){return i(a).map(a=>({username:a.username,hasPassword:!0}))}}}};
87
+ `)});let m=()=>{clearTimeout(l),f(Buffer.concat(k).toString("latin1"))};j.on("data",a=>{k.push(Buffer.from(a)),Buffer.concat(k).indexOf("\r\n\r\n")>=0&&m()}),j.on("end",m),j.on("close",m)})}({socket:ap,ca:_.certPem,servername:"localhost",port:a.port,path:"/v1/messages?transport=websocket"});c("Protocol upgrade is refused, not silently downgraded",aq.startsWith("HTTP/1.1 501"),aq.slice(0,40)),c("Upgrade refusal tells the client what to do instead",/HTTP streaming transport/i.test(aq)),c("Upgrade never reaches the origin",!ad.some(a=>String(a.path||"").includes("transport=websocket"))),await new Promise(a=>setTimeout(a,100)),c("Refused upgrade is still audited",ah.some(a=>501===a.status&&String(a.path||"").includes("transport=websocket")));let ar=ah.find(a=>501===a.status&&String(a.path||"").includes("transport=websocket"));c("Refused upgrade is flagged as denied",ar?.denied===!0,String(ar?.denied)),c("Refused upgrade is not mirrored into prompt_logs","denied"===B(ar).reason);let as=ad.find(a=>String(a.path||"").includes("encoded=")),at=ad.find(a=>String(a.path||"").includes("h2-preferred"));c("HTTP/1.1 path/query preserved",as?.path===V),c("Downgraded path/query preserved",at?.path===$),c("HTTP/1.1 request body byte-identical",as&&C(as.body)===C(U)),c("Downgraded request body byte-identical",at&&C(at.body)===C(Y)),c("Authorization preserved on wire",ad.every(a=>"Bearer test-secret-authorization-123456789"===a.authorization)),c("x-api-key preserved on wire",ad.every(a=>"sk-test-supersecret-123456789"===a.apiKey)),c("Internal x-9r-* header stripped",ad.every(a=>null==a.internalHeader));let au=ah.find(a=>String(a.path||"").includes("encoded=")),av=ah.find(a=>String(a.path||"").includes("h2-preferred"));c("HTTP/1.1 audit event captured",!!au),c("Downgraded audit event captured",!!av),c("Request wire SHA-256 recorded",au?.request?.wireSha256===C(U)&&av?.request?.wireSha256===C(Y)),c("Response wire SHA-256 recorded",au?.response?.wireSha256===C(ac)&&av?.response?.wireSha256===C(ac)),c("Compressed audit response decoded",au?.response?.body?.includes("compressed response preserved")&&av?.response?.body?.includes("compressed response preserved"));let aw=B(au);c("Exchange with a prompt is mirrored with both halves",!0===aw.mirror&&aw.promptText?.includes("hello h1")&&aw.responseText?.includes("compressed response preserved"),JSON.stringify({mirror:aw.mirror,prompt:aw.promptText,response:aw.responseText}));let ax={...au,path:"/api/claude_code/telemetry",request:{...au.request,body:JSON.stringify({events:[{eventName:"tengu_api_success",metadata:{durationMs:120}}]})},response:{...au.response,body:JSON.stringify({accepted_count:17,rejected_count:0})}},ay=B(ax);c("Telemetry exchange is not mirrored into prompt_logs",!1===ay.mirror&&"not-inference"===ay.reason,JSON.stringify(ay));let az={...au,path:"/backend-api/ps/plugins/list?scope=GLOBAL",request:{...au.request,body:""},response:{...au.response,body:JSON.stringify({items:[{text:"gmail@openai-curated-remote"}]})}};c("Plugin listing is not mirrored into prompt_logs","not-inference"===B(az).reason);let aA={...au,request:{...au.request,body:""},response:{...au.response,body:"[br audit body capture truncated; decoded body unavailable]"}};c("Capture placeholder does not count as content","contentless"===B(aA).reason);let aB=ah.filter(a=>"authorization"in(a.request?.headers||{}));c("Authorization redacted in audit",aB.length>0&&aB.every(a=>"[REDACTED]"===a.request.headers.authorization));let aC=ah.filter(a=>"x-api-key"in(a.request?.headers||{}));c("x-api-key redacted in audit",aC.length>0&&aC.every(a=>"[REDACTED]"===a.request.headers["x-api-key"])),c("No likely API secret persisted",ah.length>=2&&ah.every(a=>!m(a))),aj=k({allowedHosts:["localhost"],passthroughUnknown:!1,captureBodies:!0,captureLimitBytes:1048576,verifyUpstreamTls:!0,allowedConnectPorts:[a.port],connectTimeoutMs:5e3,tlsHandshakeTimeoutMs:5e3,responseHeaderTimeoutMs:5e3,idleTimeoutMs:3e4},{certificateProvider:()=>aa,upstreamCa:Z.certPem,resolveTarget:H,onAudit:()=>{throw Error("simulated audit sink failure")}});let aD=await F(aj),aE=await I(aD.port,`localhost:${a.port}`),aF=await M({socket:aE,ca:_.certPem,servername:"localhost",port:a.port,body:U,path:V});c("Audit sink failure does not fail proxied request",aF.head.startsWith("HTTP/1.1 200"))}catch(a){c("Self-test execution",!1,a.message||String(a))}finally{await G(aj),await G(ai),await G(ag)}return{ok:b.length>0&&b.every(a=>a.ok),checks:b,passed:b.filter(a=>a.ok).length,total:b.length,durationMs:Date.now()-a}}}},93958:(a,b,c)=>{"use strict";let{createAuditProxy:d}=c(33575),{loadConfig:e,saveConfig:f,validateConfig:g,CONFIG_PATH:h,AUDIT_LOG_PATH:i,AUDIT_LOG_DIR:j}=c(42947),{hashProxyPassword:k,isValidUsername:l,normalizeProxyUsers:m,redactProxyAuthUsers:n,PASSWORD_MAX_BYTES:o,PASSWORD_MIN_BYTES:p}=c(99721),{normalizeAllowedClientIps:q}=c(54584),{attachClientIpGate:r,effectiveClientIpPolicy:s,normalizeAccessGrants:t,normalizeGrantUserId:u}=c(68370),{enqueueAuditJob:v,readRecent:w,clearAudit:x,pruneExpired:y,startAuditMaintenance:z,stopAuditMaintenance:A,flushAuditQueue:B,getAuditStoreStats:C}=c(62952),{ensureAuditRootCA:D,createAuditCertificateProvider:E,validateRootCaPair:F}=c(5541),{readRootCAInfo:G}=c(1653),{runSelfTest:H}=c(93599);function I(){return globalThis.__blueRouterAuditProxyRuntime||(globalThis.__blueRouterAuditProxyRuntime={server:null,certificateProvider:null,startedAt:null,lastError:null,autostartPromise:null,lifecycle:Promise.resolve()}),globalThis.__blueRouterAuditProxyRuntime}function J(a){let b=I(),c=b.lifecycle.then(a,a);return b.lifecycle=c.catch(()=>{}),c}async function K(a,b=1500){if(!a)return;let c=Math.max(0,Number(b)||0);await new Promise(b=>{let d=!1,e=()=>{d||(d=!0,b())};try{a.listening?a.close(e):e()}catch{e()}let f=setTimeout(()=>{try{a.forceCloseAll?.()}catch{}},c);f.unref?.();let g=setTimeout(e,c+2e3);g.unref?.()});try{a.forceCloseAll?.()}catch{}}function L(a){let b=e();return{...a,clientIpFilterEnabled:!0===b.clientIpFilterEnabled,allowedClientIps:[...b.allowedClientIps||[]],proxyAuthEnabled:!0===b.proxyAuthEnabled,proxyAuthUsers:[...b.proxyAuthUsers||[]],accessGrants:t(b.accessGrants)}}async function M(a=null){let b=I();if(b.server?.listening)return R();let c=a?f({...L(a),enabled:!1}):e();await D(),await y(),z();let g=E({maxEntries:128});g.prewarm(c.allowedHosts);let h=d(c,{certificateProvider:g,onAuditJob:v});r(h,c);try{let a=await new Promise((a,b)=>{let d=a=>{h.removeListener("listening",e),b(a)},e=()=>{h.removeListener("error",d),a(h.address())};h.once("error",d),h.once("listening",e),h.listen(c.port,c.bindHost)});return b.server=h,b.certificateProvider=g,b.startedAt=new Date().toISOString(),b.lastError=null,f({...c,enabled:!0}),{...await R(),address:a}}catch(a){b.lastError=a.message||String(a);try{h.forceCloseAll?.()}catch{}try{h.close()}catch{}throw g.clear?.(),a}}async function N({persist:a=!0}={}){let b=I(),c=b.server,d=e();return b.server=null,b.startedAt=null,await K(c,d.shutdownGraceMs),b.certificateProvider?.clear?.(),b.certificateProvider=null,await B(3e3),A(),a&&f({...d,enabled:!1}),R()}async function O(a=null){return await N({persist:!1}),a&&f({...L(a),enabled:!1}),M()}function P(a=null){return J(()=>M(a))}async function Q(){let a=I(),b=e();return b.enabled?a.server?.listening?{started:!1,reason:"already-running",status:await R()}:(a.autostartPromise||(a.autostartPromise=(async()=>{try{let a=await P();return console.log(`[audit-proxy] autostarted on ${b.bindHost}:${b.port}`),{started:!0,status:a}}catch(b){return a.lastError=b?.message||String(b),console.log("[audit-proxy] autostart failed:",a.lastError),{started:!1,error:a.lastError}}finally{a.autostartPromise=null}})()),a.autostartPromise):{started:!1,reason:"disabled"}}async function R(){let a=I(),b=e(),c=s(b),d=!!a.server?.listening,f=G();try{let a=F();f={...f,validated:!0===a.exists,expiringSoon:!0===a.expiringSoon,autoRotation:!1}}catch(a){f={...f,validated:!1,autoRotation:!1,error:a.message||String(a)}}return{running:d,listening:d,startedAt:a.startedAt,lastError:a.lastError,address:d?a.server.address():null,activeConnections:d&&a.server.getActiveConnectionCount?.()||0,capabilities:d?a.server.auditCapabilities:{http1:!0,http2:!1,plainHttp:!1,publicConnectPorts:[443]},security:{clientIpFilterEnabled:c.enabled,clientIpFilterSource:c.source,enforcedClientIpCount:c.allowedClientIps.length,accessGrantCount:c.grants.length,clientToolFilterEnabled:!0===b.clientToolFilterEnabled,allowedClientToolCount:(b.allowedClientTools||[]).length,lanExposedWithoutIpFilter:!["127.0.0.1","::1","localhost"].includes(String(b.bindHost||"").trim().toLowerCase())&&!c.enabled,privateDestinationsBlocked:!0,plainHttpBlocked:!0,upstreamTlsVerified:!0},certificateCache:a.certificateProvider?.stats?.()||{entries:0},auditStore:C(),configPath:h,auditLogPath:i,auditLogDirectory:j,rootCA:f}}async function S(a=50){let b=e(),[c,d]=await Promise.all([R(),w(a)]);return{config:T(b),status:c,events:d}}function T(a){return a?{...a,proxyAuthUsers:n(a.proxyAuthUsers)}:a}function U(a){return J(async()=>{let b=I(),c=g(a);if(b.server?.listening){await N({persist:!1}),f({...c,enabled:!1});let a=await M();return{config:T(e()),status:a,restarted:!0}}return{config:T(f(c)),status:await R(),restarted:!1}})}a.exports={startProxy:P,ensureAuditProxyAutostart:Q,stopProxy:function(a={}){return J(()=>N(a))},restartProxy:function(a=null){return J(()=>O(a))},getStatus:R,getSnapshot:S,updateConfig:function(a){let b=I();if(b.server?.listening)throw Error("Stop or restart the Audit Proxy before changing its configuration");return T(f(g(L(a))))},updateClientProxyHost:function(a){return T(f(g({...e(),clientProxyHost:String(a||"").trim()})))},updateClientIpFilter:function({enabled:a,allowedClientIps:b}={}){return U({...e(),clientIpFilterEnabled:!0===a,allowedClientIps:b})},updateProxyAuth:function({enabled:a,users:b}={}){return J(async()=>{let c=I(),d=e(),h=new Map(m(d.proxyAuthUsers).map(a=>[a.username.toLowerCase(),a])),i=new Set,j=[];for(let a of Array.isArray(b)?b:[]){let b=String(a?.username||"").trim();if(!l(b))throw Error(`Invalid username: ${b||"(empty)"}`);let c=b.toLowerCase();if(i.has(c))throw Error(`Duplicate username: ${b}`);i.add(c);let d="string"==typeof a?.password?a.password:"";if(d){let a=Buffer.byteLength(d,"utf8");if(a<p)throw Error(`Password for ${b} must be at least ${p} characters`);if(a>o)throw Error(`Password for ${b} must be at most ${o} bytes`);j.push({username:b,passwordHash:await k(d)});continue}let e=h.get(c);if(!e)throw Error(`Account ${b} requires a password`);j.push({username:b,passwordHash:e.passwordHash})}let n=g({...d,proxyAuthEnabled:!0===a,proxyAuthUsers:j});if(c.server?.listening){await N({persist:!1}),f({...n,enabled:!1});let a=await M();return{config:T(e()),status:a,restarted:!0}}return{config:T(f(n)),status:await R(),restarted:!1}})},listAccessGrants:function(){return t(e().accessGrants)},upsertAccessGrant:function({userId:a,ips:b,note:c}={}){let d=u(a);if(!d)throw Error("Grant requires a dashboard username or email");let f=e(),g=t(f.accessGrants).filter(a=>a.userId!==d);return g.push({userId:d,ips:q(b),note:c}),U({...f,accessGrants:g})},deleteAccessGrant:function(a){let b=u(a);if(!b)throw Error("Grant requires a dashboard username or email");let c=e(),d=t(c.accessGrants).filter(a=>a.userId!==b);return U({...c,accessGrants:d})},clearAudit:x,runSelfTest:H}},94463:(a,b,c)=>{var d=c(45654);c(63070),c(36105),c(20308),c(49345),c(70710),c(15873),c(87981),c(10401),c(33889),c(65737);var e=d.asn1,f=a.exports=d.pki=d.pki||{};f.pemToDer=function(a){var b=d.pem.decode(a)[0];if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert PEM to DER; PEM is encrypted.");return d.util.createBuffer(b.body)},f.privateKeyFromPem=function(a){var b=d.pem.decode(a)[0];if("PRIVATE KEY"!==b.type&&"RSA PRIVATE KEY"!==b.type){var c=Error('Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');throw c.headerType=b.type,c}if(b.procType&&"ENCRYPTED"===b.procType.type)throw Error("Could not convert private key from PEM; PEM is encrypted.");var g=e.fromDer(b.body);return f.privateKeyFromAsn1(g)},f.privateKeyToPem=function(a,b){var c={type:"RSA PRIVATE KEY",body:e.toDer(f.privateKeyToAsn1(a)).getBytes()};return d.pem.encode(c,{maxline:b})},f.privateKeyInfoToPem=function(a,b){var c={type:"PRIVATE KEY",body:e.toDer(a).getBytes()};return d.pem.encode(c,{maxline:b})}},99721:(a,b,c)=>{"use strict";let d=c(55511),e=/^[a-z0-9][a-z0-9._-]{0,63}$/i,f=null;function g(){return f||(f=c(1893)),f}function h(a){return String(a||"").trim()}function i(a){let b=Array.isArray(a)?a:[],c=new Set,d=[];for(let a of b){if(!a||"object"!=typeof a)continue;let b=h(a.username),f=String(a.passwordHash||"");if(!e.test(b)||!f.startsWith("$2"))continue;let g=b.toLowerCase();c.has(g)||(c.add(g),d.push({username:b,passwordHash:f}))}return d}function j(a){if(Array.isArray(a))return null;let b=String(a||"").trim();if(!b||b.length>1024)return null;let c=b.indexOf(" ");if(c<0||"basic"!==b.slice(0,c).toLowerCase())return null;let d=b.slice(c+1).trim();if(!d||!/^[A-Za-z0-9+/]+={0,2}$/.test(d))return null;let e="";try{e=Buffer.from(d,"base64").toString("utf8")}catch{return null}let f=e.indexOf(":");return f<0?null:{username:e.slice(0,f),password:e.slice(f+1)}}a.exports={CACHE_TTL_MS:3e5,PASSWORD_MAX_BYTES:72,PASSWORD_MIN_BYTES:8,createProxyAuthLimiter:function({maxFailures:a=10,windowMs:b=6e4,cooldownMs:c=3e4,maxCooldownMs:d=3e5,maxEntries:e=1024}={}){let f=new Map;return{isLocked(a){let b=f.get(a);return!!b&&b.lockedUntil>Date.now()},recordFailure(g){let h=Date.now();!function(a){if(f.size<e)return;for(let[c,d]of f)if(d.lockedUntil<=a&&a-d.lastFailAt>b&&f.delete(c),f.size<e)return;let c=f.keys().next();c.done||f.delete(c.value)}(h);let i=f.get(g)||{failures:0,lastFailAt:0,lockedUntil:0,cooldownMs:c};h-i.lastFailAt>b&&(i.failures=0),i.failures+=1,i.lastFailAt=h;let j=!1;return i.failures>=a&&(i.lockedUntil=h+i.cooldownMs,i.cooldownMs=Math.min(2*i.cooldownMs,d),i.failures=0,j=!0),f.set(g,i),{lockedNow:j}},recordSuccess(a){f.delete(a)}}},createProxyAuthenticator:function(a){let b=new Map(i(a).map(a=>[a.username.toLowerCase(),a])),c=new Map,e=new Map;return{get accountCount(){return b.size},async authenticate(a){let f,h=j(a);if(!h)return{ok:!1,username:null,reason:a?"Unsupported proxy credentials":"Proxy authentication required"};let{username:i,password:k}=h,l=d.createHash("sha256").update(`${i}\0${k}`).digest("hex"),m=(f=c.get(l))?f.expiresAt<=Date.now()?(c.delete(l),null):f.username:null;if(m)return{ok:!0,username:m,reason:null};let n=b.get(i.trim().toLowerCase()),o=n?n.passwordHash:"$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy",p=e.get(l);p||(p=g().compare(k,o).catch(()=>!1),e.set(l,p),p.finally(()=>e.delete(l)));let q=await p;if(!n||!q)return{ok:!1,username:null,reason:"Invalid proxy credentials"};var r=n.username;if(c.size>=256){let a=c.keys().next();a.done||c.delete(a.value)}return c.set(l,{username:r,expiresAt:Date.now()+3e5}),{ok:!0,username:n.username,reason:null}}}},hashProxyPassword:async function a(a){let b=await g().genSalt(10);return g().hash(String(a),b)},isValidUsername:function(a){return e.test(h(a))},normalizeProxyUsers:i,parseBasicProxyAuthorization:j,redactProxyAuthUsers:function(a){return i(a).map(a=>({username:a.username,hasPassword:!0}))}}}};