@forgefabrik/ff-ztn 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/README.md +149 -0
  2. package/dist/discover.d.ts +3 -0
  3. package/dist/discover.d.ts.map +1 -0
  4. package/dist/discover.js +18 -0
  5. package/dist/discover.js.map +1 -0
  6. package/dist/genericagent.d.ts +3 -0
  7. package/dist/genericagent.d.ts.map +1 -0
  8. package/dist/genericagent.js +40 -0
  9. package/dist/genericagent.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +46 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/zero-token/accounts/account-repository.d.ts +7 -0
  15. package/dist/zero-token/accounts/account-repository.d.ts.map +1 -0
  16. package/dist/zero-token/accounts/account-repository.js +37 -0
  17. package/dist/zero-token/accounts/account-repository.js.map +1 -0
  18. package/dist/zero-token/accounts/account-service.d.ts +11 -0
  19. package/dist/zero-token/accounts/account-service.d.ts.map +1 -0
  20. package/dist/zero-token/accounts/account-service.js +66 -0
  21. package/dist/zero-token/accounts/account-service.js.map +1 -0
  22. package/dist/zero-token/accounts/account-types.d.ts +42 -0
  23. package/dist/zero-token/accounts/account-types.d.ts.map +1 -0
  24. package/dist/zero-token/accounts/account-types.js +2 -0
  25. package/dist/zero-token/accounts/account-types.js.map +1 -0
  26. package/dist/zero-token/accounts/account-validation.d.ts +14 -0
  27. package/dist/zero-token/accounts/account-validation.d.ts.map +1 -0
  28. package/dist/zero-token/accounts/account-validation.js +88 -0
  29. package/dist/zero-token/accounts/account-validation.js.map +1 -0
  30. package/dist/zero-token/agent/cli.d.ts +2 -0
  31. package/dist/zero-token/agent/cli.d.ts.map +1 -0
  32. package/dist/zero-token/agent/cli.js +116 -0
  33. package/dist/zero-token/agent/cli.js.map +1 -0
  34. package/dist/zero-token/agent/external-backend.d.ts +3 -0
  35. package/dist/zero-token/agent/external-backend.d.ts.map +1 -0
  36. package/dist/zero-token/agent/external-backend.js +3 -0
  37. package/dist/zero-token/agent/external-backend.js.map +1 -0
  38. package/dist/zero-token/agent/genericagent-config.d.ts +11 -0
  39. package/dist/zero-token/agent/genericagent-config.d.ts.map +1 -0
  40. package/dist/zero-token/agent/genericagent-config.js +44 -0
  41. package/dist/zero-token/agent/genericagent-config.js.map +1 -0
  42. package/dist/zero-token/agent/genericagent-runtime.d.ts +20 -0
  43. package/dist/zero-token/agent/genericagent-runtime.d.ts.map +1 -0
  44. package/dist/zero-token/agent/genericagent-runtime.js +71 -0
  45. package/dist/zero-token/agent/genericagent-runtime.js.map +1 -0
  46. package/dist/zero-token/agent/project-init.d.ts +11 -0
  47. package/dist/zero-token/agent/project-init.d.ts.map +1 -0
  48. package/dist/zero-token/agent/project-init.js +58 -0
  49. package/dist/zero-token/agent/project-init.js.map +1 -0
  50. package/dist/zero-token/agent/yoyo-adapter.d.ts +23 -0
  51. package/dist/zero-token/agent/yoyo-adapter.d.ts.map +1 -0
  52. package/dist/zero-token/agent/yoyo-adapter.js +88 -0
  53. package/dist/zero-token/agent/yoyo-adapter.js.map +1 -0
  54. package/dist/zero-token/app-meta.d.ts +7 -0
  55. package/dist/zero-token/app-meta.d.ts.map +1 -0
  56. package/dist/zero-token/app-meta.js +7 -0
  57. package/dist/zero-token/app-meta.js.map +1 -0
  58. package/dist/zero-token/cli/doctor-command.d.ts +18 -0
  59. package/dist/zero-token/cli/doctor-command.d.ts.map +1 -0
  60. package/dist/zero-token/cli/doctor-command.js +96 -0
  61. package/dist/zero-token/cli/doctor-command.js.map +1 -0
  62. package/dist/zero-token/config/config.d.ts +56 -0
  63. package/dist/zero-token/config/config.d.ts.map +1 -0
  64. package/dist/zero-token/config/config.js +98 -0
  65. package/dist/zero-token/config/config.js.map +1 -0
  66. package/dist/zero-token/config/paths.d.ts +12 -0
  67. package/dist/zero-token/config/paths.d.ts.map +1 -0
  68. package/dist/zero-token/config/paths.js +50 -0
  69. package/dist/zero-token/config/paths.js.map +1 -0
  70. package/dist/zero-token/discovery/builtin-catalog.d.ts +13 -0
  71. package/dist/zero-token/discovery/builtin-catalog.d.ts.map +1 -0
  72. package/dist/zero-token/discovery/builtin-catalog.js +25 -0
  73. package/dist/zero-token/discovery/builtin-catalog.js.map +1 -0
  74. package/dist/zero-token/discovery/candidate-evaluator.d.ts +4 -0
  75. package/dist/zero-token/discovery/candidate-evaluator.d.ts.map +1 -0
  76. package/dist/zero-token/discovery/candidate-evaluator.js +132 -0
  77. package/dist/zero-token/discovery/candidate-evaluator.js.map +1 -0
  78. package/dist/zero-token/discovery/candidate-probe-capability.d.ts +6 -0
  79. package/dist/zero-token/discovery/candidate-probe-capability.d.ts.map +1 -0
  80. package/dist/zero-token/discovery/candidate-probe-capability.js +10 -0
  81. package/dist/zero-token/discovery/candidate-probe-capability.js.map +1 -0
  82. package/dist/zero-token/discovery/candidate-probe-evidence.d.ts +13 -0
  83. package/dist/zero-token/discovery/candidate-probe-evidence.d.ts.map +1 -0
  84. package/dist/zero-token/discovery/candidate-probe-evidence.js +53 -0
  85. package/dist/zero-token/discovery/candidate-probe-evidence.js.map +1 -0
  86. package/dist/zero-token/discovery/candidate-probe-observer.d.ts +3 -0
  87. package/dist/zero-token/discovery/candidate-probe-observer.d.ts.map +1 -0
  88. package/dist/zero-token/discovery/candidate-probe-observer.js +36 -0
  89. package/dist/zero-token/discovery/candidate-probe-observer.js.map +1 -0
  90. package/dist/zero-token/discovery/candidate-probe-runtime.d.ts +6 -0
  91. package/dist/zero-token/discovery/candidate-probe-runtime.d.ts.map +1 -0
  92. package/dist/zero-token/discovery/candidate-probe-runtime.js +120 -0
  93. package/dist/zero-token/discovery/candidate-probe-runtime.js.map +1 -0
  94. package/dist/zero-token/discovery/candidate-probe-store.d.ts +9 -0
  95. package/dist/zero-token/discovery/candidate-probe-store.d.ts.map +1 -0
  96. package/dist/zero-token/discovery/candidate-probe-store.js +66 -0
  97. package/dist/zero-token/discovery/candidate-probe-store.js.map +1 -0
  98. package/dist/zero-token/discovery/candidate-probe-types.d.ts +30 -0
  99. package/dist/zero-token/discovery/candidate-probe-types.d.ts.map +1 -0
  100. package/dist/zero-token/discovery/candidate-probe-types.js +2 -0
  101. package/dist/zero-token/discovery/candidate-probe-types.js.map +1 -0
  102. package/dist/zero-token/discovery/control-service.d.ts +8 -0
  103. package/dist/zero-token/discovery/control-service.d.ts.map +1 -0
  104. package/dist/zero-token/discovery/control-service.js +107 -0
  105. package/dist/zero-token/discovery/control-service.js.map +1 -0
  106. package/dist/zero-token/discovery/control-store.d.ts +7 -0
  107. package/dist/zero-token/discovery/control-store.d.ts.map +1 -0
  108. package/dist/zero-token/discovery/control-store.js +70 -0
  109. package/dist/zero-token/discovery/control-store.js.map +1 -0
  110. package/dist/zero-token/discovery/control-types.d.ts +39 -0
  111. package/dist/zero-token/discovery/control-types.d.ts.map +1 -0
  112. package/dist/zero-token/discovery/control-types.js +2 -0
  113. package/dist/zero-token/discovery/control-types.js.map +1 -0
  114. package/dist/zero-token/discovery/discovery-routes.d.ts +3 -0
  115. package/dist/zero-token/discovery/discovery-routes.d.ts.map +1 -0
  116. package/dist/zero-token/discovery/discovery-routes.js +130 -0
  117. package/dist/zero-token/discovery/discovery-routes.js.map +1 -0
  118. package/dist/zero-token/discovery/discovery-service.d.ts +18 -0
  119. package/dist/zero-token/discovery/discovery-service.d.ts.map +1 -0
  120. package/dist/zero-token/discovery/discovery-service.js +81 -0
  121. package/dist/zero-token/discovery/discovery-service.js.map +1 -0
  122. package/dist/zero-token/discovery/manifest.d.ts +14 -0
  123. package/dist/zero-token/discovery/manifest.d.ts.map +1 -0
  124. package/dist/zero-token/discovery/manifest.js +43 -0
  125. package/dist/zero-token/discovery/manifest.js.map +1 -0
  126. package/dist/zero-token/discovery/public-site-inspector.d.ts +10 -0
  127. package/dist/zero-token/discovery/public-site-inspector.d.ts.map +1 -0
  128. package/dist/zero-token/discovery/public-site-inspector.js +111 -0
  129. package/dist/zero-token/discovery/public-site-inspector.js.map +1 -0
  130. package/dist/zero-token/gateway/api-key-auth.d.ts +3 -0
  131. package/dist/zero-token/gateway/api-key-auth.d.ts.map +1 -0
  132. package/dist/zero-token/gateway/api-key-auth.js +59 -0
  133. package/dist/zero-token/gateway/api-key-auth.js.map +1 -0
  134. package/dist/zero-token/gateway/api-request-logger-quiet.d.ts +3 -0
  135. package/dist/zero-token/gateway/api-request-logger-quiet.d.ts.map +1 -0
  136. package/dist/zero-token/gateway/api-request-logger-quiet.js +79 -0
  137. package/dist/zero-token/gateway/api-request-logger-quiet.js.map +1 -0
  138. package/dist/zero-token/gateway/api-request-logger.d.ts +3 -0
  139. package/dist/zero-token/gateway/api-request-logger.d.ts.map +1 -0
  140. package/dist/zero-token/gateway/api-request-logger.js +67 -0
  141. package/dist/zero-token/gateway/api-request-logger.js.map +1 -0
  142. package/dist/zero-token/gateway/complete-gateway.d.ts +16 -0
  143. package/dist/zero-token/gateway/complete-gateway.d.ts.map +1 -0
  144. package/dist/zero-token/gateway/complete-gateway.js +25 -0
  145. package/dist/zero-token/gateway/complete-gateway.js.map +1 -0
  146. package/dist/zero-token/gateway/dashboard-gateway.d.ts +16 -0
  147. package/dist/zero-token/gateway/dashboard-gateway.d.ts.map +1 -0
  148. package/dist/zero-token/gateway/dashboard-gateway.js +33 -0
  149. package/dist/zero-token/gateway/dashboard-gateway.js.map +1 -0
  150. package/dist/zero-token/gateway/gateway.d.ts +2 -0
  151. package/dist/zero-token/gateway/gateway.d.ts.map +1 -0
  152. package/dist/zero-token/gateway/gateway.js +2 -0
  153. package/dist/zero-token/gateway/gateway.js.map +1 -0
  154. package/dist/zero-token/gateway/inference-dispatch.d.ts +3 -0
  155. package/dist/zero-token/gateway/inference-dispatch.d.ts.map +1 -0
  156. package/dist/zero-token/gateway/inference-dispatch.js +97 -0
  157. package/dist/zero-token/gateway/inference-dispatch.js.map +1 -0
  158. package/dist/zero-token/gateway/playground-routes.d.ts +3 -0
  159. package/dist/zero-token/gateway/playground-routes.d.ts.map +1 -0
  160. package/dist/zero-token/gateway/playground-routes.js +33 -0
  161. package/dist/zero-token/gateway/playground-routes.js.map +1 -0
  162. package/dist/zero-token/gateway/provider-runtime-routes.d.ts +3 -0
  163. package/dist/zero-token/gateway/provider-runtime-routes.d.ts.map +1 -0
  164. package/dist/zero-token/gateway/provider-runtime-routes.js +38 -0
  165. package/dist/zero-token/gateway/provider-runtime-routes.js.map +1 -0
  166. package/dist/zero-token/gateway/runtime-gateway.d.ts +20 -0
  167. package/dist/zero-token/gateway/runtime-gateway.d.ts.map +1 -0
  168. package/dist/zero-token/gateway/runtime-gateway.js +234 -0
  169. package/dist/zero-token/gateway/runtime-gateway.js.map +1 -0
  170. package/dist/zero-token/identities/google-identity-service.d.ts +27 -0
  171. package/dist/zero-token/identities/google-identity-service.d.ts.map +1 -0
  172. package/dist/zero-token/identities/google-identity-service.js +162 -0
  173. package/dist/zero-token/identities/google-identity-service.js.map +1 -0
  174. package/dist/zero-token/index.d.ts +3 -0
  175. package/dist/zero-token/index.d.ts.map +1 -0
  176. package/dist/zero-token/index.js +380 -0
  177. package/dist/zero-token/index.js.map +1 -0
  178. package/dist/zero-token/inference/browser-stream-utils.d.ts +5 -0
  179. package/dist/zero-token/inference/browser-stream-utils.d.ts.map +1 -0
  180. package/dist/zero-token/inference/browser-stream-utils.js +118 -0
  181. package/dist/zero-token/inference/browser-stream-utils.js.map +1 -0
  182. package/dist/zero-token/inference/chatgpt-browser-provider.d.ts +17 -0
  183. package/dist/zero-token/inference/chatgpt-browser-provider.d.ts.map +1 -0
  184. package/dist/zero-token/inference/chatgpt-browser-provider.js +242 -0
  185. package/dist/zero-token/inference/chatgpt-browser-provider.js.map +1 -0
  186. package/dist/zero-token/inference/chatgpt-conversation-state.d.ts +8 -0
  187. package/dist/zero-token/inference/chatgpt-conversation-state.d.ts.map +1 -0
  188. package/dist/zero-token/inference/chatgpt-conversation-state.js +60 -0
  189. package/dist/zero-token/inference/chatgpt-conversation-state.js.map +1 -0
  190. package/dist/zero-token/inference/chatgpt-direct-provider.d.ts +15 -0
  191. package/dist/zero-token/inference/chatgpt-direct-provider.d.ts.map +1 -0
  192. package/dist/zero-token/inference/chatgpt-direct-provider.js +348 -0
  193. package/dist/zero-token/inference/chatgpt-direct-provider.js.map +1 -0
  194. package/dist/zero-token/inference/chatgpt-provider.d.ts +32 -0
  195. package/dist/zero-token/inference/chatgpt-provider.d.ts.map +1 -0
  196. package/dist/zero-token/inference/chatgpt-provider.js +312 -0
  197. package/dist/zero-token/inference/chatgpt-provider.js.map +1 -0
  198. package/dist/zero-token/inference/claude-browser-provider.d.ts +16 -0
  199. package/dist/zero-token/inference/claude-browser-provider.d.ts.map +1 -0
  200. package/dist/zero-token/inference/claude-browser-provider.js +193 -0
  201. package/dist/zero-token/inference/claude-browser-provider.js.map +1 -0
  202. package/dist/zero-token/inference/claude-openclaw-provider.d.ts +14 -0
  203. package/dist/zero-token/inference/claude-openclaw-provider.d.ts.map +1 -0
  204. package/dist/zero-token/inference/claude-openclaw-provider.js +187 -0
  205. package/dist/zero-token/inference/claude-openclaw-provider.js.map +1 -0
  206. package/dist/zero-token/inference/glm-browser-provider.d.ts +15 -0
  207. package/dist/zero-token/inference/glm-browser-provider.d.ts.map +1 -0
  208. package/dist/zero-token/inference/glm-browser-provider.js +166 -0
  209. package/dist/zero-token/inference/glm-browser-provider.js.map +1 -0
  210. package/dist/zero-token/inference/inference-provider.d.ts +44 -0
  211. package/dist/zero-token/inference/inference-provider.d.ts.map +1 -0
  212. package/dist/zero-token/inference/inference-provider.js +32 -0
  213. package/dist/zero-token/inference/inference-provider.js.map +1 -0
  214. package/dist/zero-token/inference/model-registry.d.ts +28 -0
  215. package/dist/zero-token/inference/model-registry.d.ts.map +1 -0
  216. package/dist/zero-token/inference/model-registry.js +48 -0
  217. package/dist/zero-token/inference/model-registry.js.map +1 -0
  218. package/dist/zero-token/inference/qwen-browser-provider.d.ts +14 -0
  219. package/dist/zero-token/inference/qwen-browser-provider.d.ts.map +1 -0
  220. package/dist/zero-token/inference/qwen-browser-provider.js +227 -0
  221. package/dist/zero-token/inference/qwen-browser-provider.js.map +1 -0
  222. package/dist/zero-token/inference/stream.d.ts +15 -0
  223. package/dist/zero-token/inference/stream.d.ts.map +1 -0
  224. package/dist/zero-token/inference/stream.js +94 -0
  225. package/dist/zero-token/inference/stream.js.map +1 -0
  226. package/dist/zero-token/inference/types.d.ts +94 -0
  227. package/dist/zero-token/inference/types.d.ts.map +1 -0
  228. package/dist/zero-token/inference/types.js +5 -0
  229. package/dist/zero-token/inference/types.js.map +1 -0
  230. package/dist/zero-token/logger.d.ts +4 -0
  231. package/dist/zero-token/logger.d.ts.map +1 -0
  232. package/dist/zero-token/logger.js +27 -0
  233. package/dist/zero-token/logger.js.map +1 -0
  234. package/dist/zero-token/logging/log-events.d.ts +17 -0
  235. package/dist/zero-token/logging/log-events.d.ts.map +1 -0
  236. package/dist/zero-token/logging/log-events.js +74 -0
  237. package/dist/zero-token/logging/log-events.js.map +1 -0
  238. package/dist/zero-token/logging/log-routes.d.ts +3 -0
  239. package/dist/zero-token/logging/log-routes.d.ts.map +1 -0
  240. package/dist/zero-token/logging/log-routes.js +68 -0
  241. package/dist/zero-token/logging/log-routes.js.map +1 -0
  242. package/dist/zero-token/models/model-cache.d.ts +7 -0
  243. package/dist/zero-token/models/model-cache.d.ts.map +1 -0
  244. package/dist/zero-token/models/model-cache.js +58 -0
  245. package/dist/zero-token/models/model-cache.js.map +1 -0
  246. package/dist/zero-token/models/model-normalization.d.ts +4 -0
  247. package/dist/zero-token/models/model-normalization.d.ts.map +1 -0
  248. package/dist/zero-token/models/model-normalization.js +33 -0
  249. package/dist/zero-token/models/model-normalization.js.map +1 -0
  250. package/dist/zero-token/models/model-service.d.ts +6 -0
  251. package/dist/zero-token/models/model-service.d.ts.map +1 -0
  252. package/dist/zero-token/models/model-service.js +110 -0
  253. package/dist/zero-token/models/model-service.js.map +1 -0
  254. package/dist/zero-token/models/model-types.d.ts +28 -0
  255. package/dist/zero-token/models/model-types.d.ts.map +1 -0
  256. package/dist/zero-token/models/model-types.js +2 -0
  257. package/dist/zero-token/models/model-types.js.map +1 -0
  258. package/dist/zero-token/multi-account/router.d.ts +43 -0
  259. package/dist/zero-token/multi-account/router.d.ts.map +1 -0
  260. package/dist/zero-token/multi-account/router.js +94 -0
  261. package/dist/zero-token/multi-account/router.js.map +1 -0
  262. package/dist/zero-token/providers/browser-bridge-jobs.d.ts +26 -0
  263. package/dist/zero-token/providers/browser-bridge-jobs.d.ts.map +1 -0
  264. package/dist/zero-token/providers/browser-bridge-jobs.js +119 -0
  265. package/dist/zero-token/providers/browser-bridge-jobs.js.map +1 -0
  266. package/dist/zero-token/providers/browser-bridge-routes.d.ts +3 -0
  267. package/dist/zero-token/providers/browser-bridge-routes.d.ts.map +1 -0
  268. package/dist/zero-token/providers/browser-bridge-routes.js +71 -0
  269. package/dist/zero-token/providers/browser-bridge-routes.js.map +1 -0
  270. package/dist/zero-token/providers/browser.d.ts +47 -0
  271. package/dist/zero-token/providers/browser.d.ts.map +1 -0
  272. package/dist/zero-token/providers/browser.js +330 -0
  273. package/dist/zero-token/providers/browser.js.map +1 -0
  274. package/dist/zero-token/providers/chatgpt/chatgpt-account-info.d.ts +12 -0
  275. package/dist/zero-token/providers/chatgpt/chatgpt-account-info.d.ts.map +1 -0
  276. package/dist/zero-token/providers/chatgpt/chatgpt-account-info.js +66 -0
  277. package/dist/zero-token/providers/chatgpt/chatgpt-account-info.js.map +1 -0
  278. package/dist/zero-token/providers/chatgpt/chatgpt-auth.d.ts +9 -0
  279. package/dist/zero-token/providers/chatgpt/chatgpt-auth.d.ts.map +1 -0
  280. package/dist/zero-token/providers/chatgpt/chatgpt-auth.js +81 -0
  281. package/dist/zero-token/providers/chatgpt/chatgpt-auth.js.map +1 -0
  282. package/dist/zero-token/providers/chatgpt/chatgpt-browser.d.ts +21 -0
  283. package/dist/zero-token/providers/chatgpt/chatgpt-browser.d.ts.map +1 -0
  284. package/dist/zero-token/providers/chatgpt/chatgpt-browser.js +64 -0
  285. package/dist/zero-token/providers/chatgpt/chatgpt-browser.js.map +1 -0
  286. package/dist/zero-token/providers/chatgpt/chatgpt-errors.d.ts +22 -0
  287. package/dist/zero-token/providers/chatgpt/chatgpt-errors.d.ts.map +1 -0
  288. package/dist/zero-token/providers/chatgpt/chatgpt-errors.js +44 -0
  289. package/dist/zero-token/providers/chatgpt/chatgpt-errors.js.map +1 -0
  290. package/dist/zero-token/providers/chatgpt/chatgpt-session.d.ts +10 -0
  291. package/dist/zero-token/providers/chatgpt/chatgpt-session.d.ts.map +1 -0
  292. package/dist/zero-token/providers/chatgpt/chatgpt-session.js +71 -0
  293. package/dist/zero-token/providers/chatgpt/chatgpt-session.js.map +1 -0
  294. package/dist/zero-token/providers/chatgpt/chatgpt-types.d.ts +36 -0
  295. package/dist/zero-token/providers/chatgpt/chatgpt-types.d.ts.map +1 -0
  296. package/dist/zero-token/providers/chatgpt/chatgpt-types.js +2 -0
  297. package/dist/zero-token/providers/chatgpt/chatgpt-types.js.map +1 -0
  298. package/dist/zero-token/providers/chatgpt-web-auth.d.ts +10 -0
  299. package/dist/zero-token/providers/chatgpt-web-auth.d.ts.map +1 -0
  300. package/dist/zero-token/providers/chatgpt-web-auth.js +143 -0
  301. package/dist/zero-token/providers/chatgpt-web-auth.js.map +1 -0
  302. package/dist/zero-token/providers/chatgpt-web-models.d.ts +8 -0
  303. package/dist/zero-token/providers/chatgpt-web-models.d.ts.map +1 -0
  304. package/dist/zero-token/providers/chatgpt-web-models.js +99 -0
  305. package/dist/zero-token/providers/chatgpt-web-models.js.map +1 -0
  306. package/dist/zero-token/providers/chatgpt-web-validator.d.ts +8 -0
  307. package/dist/zero-token/providers/chatgpt-web-validator.d.ts.map +1 -0
  308. package/dist/zero-token/providers/chatgpt-web-validator.js +79 -0
  309. package/dist/zero-token/providers/chatgpt-web-validator.js.map +1 -0
  310. package/dist/zero-token/providers/claude-web-auth.d.ts +3 -0
  311. package/dist/zero-token/providers/claude-web-auth.d.ts.map +1 -0
  312. package/dist/zero-token/providers/claude-web-auth.js +109 -0
  313. package/dist/zero-token/providers/claude-web-auth.js.map +1 -0
  314. package/dist/zero-token/providers/claude-web-models.d.ts +3 -0
  315. package/dist/zero-token/providers/claude-web-models.d.ts.map +1 -0
  316. package/dist/zero-token/providers/claude-web-models.js +71 -0
  317. package/dist/zero-token/providers/claude-web-models.js.map +1 -0
  318. package/dist/zero-token/providers/claude-web-validator.d.ts +3 -0
  319. package/dist/zero-token/providers/claude-web-validator.d.ts.map +1 -0
  320. package/dist/zero-token/providers/claude-web-validator.js +57 -0
  321. package/dist/zero-token/providers/claude-web-validator.js.map +1 -0
  322. package/dist/zero-token/providers/deepseek-web-auth.d.ts +7 -0
  323. package/dist/zero-token/providers/deepseek-web-auth.d.ts.map +1 -0
  324. package/dist/zero-token/providers/deepseek-web-auth.js +69 -0
  325. package/dist/zero-token/providers/deepseek-web-auth.js.map +1 -0
  326. package/dist/zero-token/providers/deepseek-web-validator.d.ts +3 -0
  327. package/dist/zero-token/providers/deepseek-web-validator.d.ts.map +1 -0
  328. package/dist/zero-token/providers/deepseek-web-validator.js +24 -0
  329. package/dist/zero-token/providers/deepseek-web-validator.js.map +1 -0
  330. package/dist/zero-token/providers/doubao-web-auth.d.ts +7 -0
  331. package/dist/zero-token/providers/doubao-web-auth.d.ts.map +1 -0
  332. package/dist/zero-token/providers/doubao-web-auth.js +44 -0
  333. package/dist/zero-token/providers/doubao-web-auth.js.map +1 -0
  334. package/dist/zero-token/providers/gemini-web-auth.d.ts +7 -0
  335. package/dist/zero-token/providers/gemini-web-auth.d.ts.map +1 -0
  336. package/dist/zero-token/providers/gemini-web-auth.js +47 -0
  337. package/dist/zero-token/providers/gemini-web-auth.js.map +1 -0
  338. package/dist/zero-token/providers/glm-intl-web-auth.d.ts +4 -0
  339. package/dist/zero-token/providers/glm-intl-web-auth.d.ts.map +1 -0
  340. package/dist/zero-token/providers/glm-intl-web-auth.js +53 -0
  341. package/dist/zero-token/providers/glm-intl-web-auth.js.map +1 -0
  342. package/dist/zero-token/providers/glm-web-auth.d.ts +3 -0
  343. package/dist/zero-token/providers/glm-web-auth.d.ts.map +1 -0
  344. package/dist/zero-token/providers/glm-web-auth.js +42 -0
  345. package/dist/zero-token/providers/glm-web-auth.js.map +1 -0
  346. package/dist/zero-token/providers/glm-web-models.d.ts +3 -0
  347. package/dist/zero-token/providers/glm-web-models.d.ts.map +1 -0
  348. package/dist/zero-token/providers/glm-web-models.js +52 -0
  349. package/dist/zero-token/providers/glm-web-models.js.map +1 -0
  350. package/dist/zero-token/providers/grok-web-auth.d.ts +7 -0
  351. package/dist/zero-token/providers/grok-web-auth.d.ts.map +1 -0
  352. package/dist/zero-token/providers/grok-web-auth.js +47 -0
  353. package/dist/zero-token/providers/grok-web-auth.js.map +1 -0
  354. package/dist/zero-token/providers/identity/chatgpt-identity.d.ts +15 -0
  355. package/dist/zero-token/providers/identity/chatgpt-identity.d.ts.map +1 -0
  356. package/dist/zero-token/providers/identity/chatgpt-identity.js +15 -0
  357. package/dist/zero-token/providers/identity/chatgpt-identity.js.map +1 -0
  358. package/dist/zero-token/providers/identity/identity-validation.d.ts +3 -0
  359. package/dist/zero-token/providers/identity/identity-validation.d.ts.map +1 -0
  360. package/dist/zero-token/providers/identity/identity-validation.js +74 -0
  361. package/dist/zero-token/providers/identity/identity-validation.js.map +1 -0
  362. package/dist/zero-token/providers/identity/provider-identity-readiness.d.ts +16 -0
  363. package/dist/zero-token/providers/identity/provider-identity-readiness.d.ts.map +1 -0
  364. package/dist/zero-token/providers/identity/provider-identity-readiness.js +56 -0
  365. package/dist/zero-token/providers/identity/provider-identity-readiness.js.map +1 -0
  366. package/dist/zero-token/providers/identity/provider-identity.d.ts +88 -0
  367. package/dist/zero-token/providers/identity/provider-identity.d.ts.map +1 -0
  368. package/dist/zero-token/providers/identity/provider-identity.js +17 -0
  369. package/dist/zero-token/providers/identity/provider-identity.js.map +1 -0
  370. package/dist/zero-token/providers/kimi-web-auth.d.ts +7 -0
  371. package/dist/zero-token/providers/kimi-web-auth.d.ts.map +1 -0
  372. package/dist/zero-token/providers/kimi-web-auth.js +50 -0
  373. package/dist/zero-token/providers/kimi-web-auth.js.map +1 -0
  374. package/dist/zero-token/providers/perplexity-web-auth.d.ts +7 -0
  375. package/dist/zero-token/providers/perplexity-web-auth.d.ts.map +1 -0
  376. package/dist/zero-token/providers/perplexity-web-auth.js +68 -0
  377. package/dist/zero-token/providers/perplexity-web-auth.js.map +1 -0
  378. package/dist/zero-token/providers/perplexity-web-validator.d.ts +3 -0
  379. package/dist/zero-token/providers/perplexity-web-validator.d.ts.map +1 -0
  380. package/dist/zero-token/providers/perplexity-web-validator.js +33 -0
  381. package/dist/zero-token/providers/perplexity-web-validator.js.map +1 -0
  382. package/dist/zero-token/providers/provider-account-resolver.d.ts +9 -0
  383. package/dist/zero-token/providers/provider-account-resolver.d.ts.map +1 -0
  384. package/dist/zero-token/providers/provider-account-resolver.js +28 -0
  385. package/dist/zero-token/providers/provider-account-resolver.js.map +1 -0
  386. package/dist/zero-token/providers/provider-browser-profiles.d.ts +14 -0
  387. package/dist/zero-token/providers/provider-browser-profiles.d.ts.map +1 -0
  388. package/dist/zero-token/providers/provider-browser-profiles.js +78 -0
  389. package/dist/zero-token/providers/provider-browser-profiles.js.map +1 -0
  390. package/dist/zero-token/providers/provider-catalog.d.ts +7 -0
  391. package/dist/zero-token/providers/provider-catalog.d.ts.map +1 -0
  392. package/dist/zero-token/providers/provider-catalog.js +27 -0
  393. package/dist/zero-token/providers/provider-catalog.js.map +1 -0
  394. package/dist/zero-token/providers/provider-login-jobs.d.ts +21 -0
  395. package/dist/zero-token/providers/provider-login-jobs.d.ts.map +1 -0
  396. package/dist/zero-token/providers/provider-login-jobs.js +185 -0
  397. package/dist/zero-token/providers/provider-login-jobs.js.map +1 -0
  398. package/dist/zero-token/providers/provider-runtime-registry.d.ts +16 -0
  399. package/dist/zero-token/providers/provider-runtime-registry.d.ts.map +1 -0
  400. package/dist/zero-token/providers/provider-runtime-registry.js +88 -0
  401. package/dist/zero-token/providers/provider-runtime-registry.js.map +1 -0
  402. package/dist/zero-token/providers/provider-runtime-registry.test.d.ts +2 -0
  403. package/dist/zero-token/providers/provider-runtime-registry.test.d.ts.map +1 -0
  404. package/dist/zero-token/providers/provider-runtime-registry.test.js +26 -0
  405. package/dist/zero-token/providers/provider-runtime-registry.test.js.map +1 -0
  406. package/dist/zero-token/providers/provider-types.d.ts +72 -0
  407. package/dist/zero-token/providers/provider-types.d.ts.map +1 -0
  408. package/dist/zero-token/providers/provider-types.js +2 -0
  409. package/dist/zero-token/providers/provider-types.js.map +1 -0
  410. package/dist/zero-token/providers/qwen-cn-web-auth.d.ts +4 -0
  411. package/dist/zero-token/providers/qwen-cn-web-auth.d.ts.map +1 -0
  412. package/dist/zero-token/providers/qwen-cn-web-auth.js +58 -0
  413. package/dist/zero-token/providers/qwen-cn-web-auth.js.map +1 -0
  414. package/dist/zero-token/providers/qwen-web-auth.d.ts +3 -0
  415. package/dist/zero-token/providers/qwen-web-auth.d.ts.map +1 -0
  416. package/dist/zero-token/providers/qwen-web-auth.js +67 -0
  417. package/dist/zero-token/providers/qwen-web-auth.js.map +1 -0
  418. package/dist/zero-token/providers/qwen-web-models.d.ts +3 -0
  419. package/dist/zero-token/providers/qwen-web-models.d.ts.map +1 -0
  420. package/dist/zero-token/providers/qwen-web-models.js +27 -0
  421. package/dist/zero-token/providers/qwen-web-models.js.map +1 -0
  422. package/dist/zero-token/providers/registry.d.ts +4 -0
  423. package/dist/zero-token/providers/registry.d.ts.map +1 -0
  424. package/dist/zero-token/providers/registry.js +39 -0
  425. package/dist/zero-token/providers/registry.js.map +1 -0
  426. package/dist/zero-token/providers/registry.next.d.ts +4 -0
  427. package/dist/zero-token/providers/registry.next.d.ts.map +1 -0
  428. package/dist/zero-token/providers/registry.next.js +30 -0
  429. package/dist/zero-token/providers/registry.next.js.map +1 -0
  430. package/dist/zero-token/providers/remote-browser-session.d.ts +7 -0
  431. package/dist/zero-token/providers/remote-browser-session.d.ts.map +1 -0
  432. package/dist/zero-token/providers/remote-browser-session.js +85 -0
  433. package/dist/zero-token/providers/remote-browser-session.js.map +1 -0
  434. package/dist/zero-token/providers/xiaomimo-web-auth.d.ts +7 -0
  435. package/dist/zero-token/providers/xiaomimo-web-auth.d.ts.map +1 -0
  436. package/dist/zero-token/providers/xiaomimo-web-auth.js +44 -0
  437. package/dist/zero-token/providers/xiaomimo-web-auth.js.map +1 -0
  438. package/dist/zero-token/quota/quota-manager.d.ts +2 -0
  439. package/dist/zero-token/quota/quota-manager.d.ts.map +1 -0
  440. package/dist/zero-token/quota/quota-manager.js +2 -0
  441. package/dist/zero-token/quota/quota-manager.js.map +1 -0
  442. package/dist/zero-token/quota/runtime-quota-manager.d.ts +19 -0
  443. package/dist/zero-token/quota/runtime-quota-manager.d.ts.map +1 -0
  444. package/dist/zero-token/quota/runtime-quota-manager.js +118 -0
  445. package/dist/zero-token/quota/runtime-quota-manager.js.map +1 -0
  446. package/dist/zero-token/session/session-service.d.ts +11 -0
  447. package/dist/zero-token/session/session-service.d.ts.map +1 -0
  448. package/dist/zero-token/session/session-service.js +169 -0
  449. package/dist/zero-token/session/session-service.js.map +1 -0
  450. package/dist/zero-token/session/session-types.d.ts +22 -0
  451. package/dist/zero-token/session/session-types.d.ts.map +1 -0
  452. package/dist/zero-token/session/session-types.js +2 -0
  453. package/dist/zero-token/session/session-types.js.map +1 -0
  454. package/dist/zero-token/storage/atomic-json-store.d.ts +10 -0
  455. package/dist/zero-token/storage/atomic-json-store.d.ts.map +1 -0
  456. package/dist/zero-token/storage/atomic-json-store.js +60 -0
  457. package/dist/zero-token/storage/atomic-json-store.js.map +1 -0
  458. package/package.json +59 -0
  459. package/web-console/dist/assets/index-B_4vEorW.css +1 -0
  460. package/web-console/dist/assets/index-DFs1Oo-1.js +27 -0
  461. package/web-console/dist/index.html +20 -0
  462. package/web-console/dist/nova-mark.svg +18 -0
  463. package/web-console/dist/nova-network.svg +36 -0
@@ -0,0 +1,119 @@
1
+ import { createHash, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
2
+ import { createAccount, updateAccount } from "../accounts/account-service.js";
3
+ import { validateAccountSession } from "../session/session-service.js";
4
+ import { resolveProvider } from "./registry.js";
5
+ const jobs = new Map();
6
+ const JOB_TTL_MS = 10 * 60_000;
7
+ const MAX_JOBS = 50;
8
+ const MAX_COOKIES = 128_000;
9
+ const MAX_TOKEN = 32_000;
10
+ function hash(value) {
11
+ return createHash("sha256").update(value).digest("hex");
12
+ }
13
+ function publicJob(job) {
14
+ const { tokenHash: _tokenHash, ...safe } = job;
15
+ return safe;
16
+ }
17
+ function tokenMatches(job, token) {
18
+ const expected = Buffer.from(job.tokenHash, "hex");
19
+ const actual = Buffer.from(hash(token), "hex");
20
+ return expected.length === actual.length && timingSafeEqual(expected, actual);
21
+ }
22
+ function expireJobs() {
23
+ const now = Date.now();
24
+ for (const job of jobs.values()) {
25
+ if (new Date(job.expiresAt).getTime() <= now && !["succeeded", "failed"].includes(job.status)) {
26
+ job.status = "expired";
27
+ job.message = "Login-Fenster ist abgelaufen. Starte den Login erneut.";
28
+ job.updatedAt = new Date().toISOString();
29
+ }
30
+ }
31
+ if (jobs.size <= MAX_JOBS)
32
+ return;
33
+ const removable = [...jobs.values()]
34
+ .filter((job) => ["succeeded", "failed", "expired"].includes(job.status))
35
+ .sort((a, b) => a.updatedAt.localeCompare(b.updatedAt));
36
+ for (const job of removable.slice(0, jobs.size - MAX_JOBS))
37
+ jobs.delete(job.id);
38
+ }
39
+ export function createBrowserBridgeJob(providerId) {
40
+ expireJobs();
41
+ const provider = resolveProvider(providerId);
42
+ if (!provider)
43
+ throw new Error(`Unbekannter Provider: ${providerId}`);
44
+ if (provider.authType !== "web-login")
45
+ throw new Error("Dieser Provider verwendet keinen Browser-Login.");
46
+ const token = randomBytes(32).toString("base64url");
47
+ const now = new Date();
48
+ const job = {
49
+ id: randomUUID(),
50
+ providerId: provider.id,
51
+ providerLabel: provider.label,
52
+ loginUrl: provider.loginUrl,
53
+ status: "waiting-for-login",
54
+ message: "Login-Seite wurde in deinem Browser geöffnet. Melde dich dort an und übernimm danach die Sitzung.",
55
+ createdAt: now.toISOString(),
56
+ updatedAt: now.toISOString(),
57
+ expiresAt: new Date(now.getTime() + JOB_TTL_MS).toISOString(),
58
+ tokenHash: hash(token),
59
+ };
60
+ jobs.set(job.id, job);
61
+ return { ...publicJob(job), token };
62
+ }
63
+ export function getBrowserBridgeJob(id, token) {
64
+ expireJobs();
65
+ const job = jobs.get(id);
66
+ if (!job || !tokenMatches(job, token))
67
+ return undefined;
68
+ return publicJob(job);
69
+ }
70
+ export async function completeBrowserBridgeJob(id, token, session) {
71
+ expireJobs();
72
+ const job = jobs.get(id);
73
+ if (!job || !tokenMatches(job, token))
74
+ throw new Error("Ungültiger oder abgelaufener Login-Job.");
75
+ if (job.status === "expired")
76
+ throw new Error("Login-Job ist abgelaufen.");
77
+ if (!session.cookies?.trim())
78
+ throw new Error("Die Browser Bridge hat keine Sitzungscookies geliefert.");
79
+ if (session.cookies.length > MAX_COOKIES)
80
+ throw new Error("Sitzungscookies sind zu groß.");
81
+ if ((session.accessToken?.length ?? 0) > MAX_TOKEN)
82
+ throw new Error("Zugriffstoken ist zu groß.");
83
+ job.status = "capturing";
84
+ job.message = "Sitzung wurde übernommen und wird lokal gespeichert …";
85
+ job.updatedAt = new Date().toISOString();
86
+ try {
87
+ const provider = resolveProvider(job.providerId);
88
+ if (!provider)
89
+ throw new Error("Provider ist nicht mehr registriert.");
90
+ const account = await createAccount(provider.label, provider.implementation);
91
+ const stored = await updateAccount(account.id, {
92
+ cookies: session.cookies,
93
+ accessToken: session.accessToken,
94
+ userAgent: session.userAgent,
95
+ sessionStatus: "unknown",
96
+ });
97
+ job.status = "validating";
98
+ job.message = "Sitzung wird beim Provider geprüft …";
99
+ job.updatedAt = new Date().toISOString();
100
+ const validation = await validateAccountSession(stored);
101
+ job.status = validation.valid ? "succeeded" : "failed";
102
+ job.accountId = account.id;
103
+ job.accountLabel = provider.label;
104
+ job.message = validation.valid
105
+ ? "Account wurde verbunden und lokal gespeichert."
106
+ : "Sitzung wurde gespeichert, konnte aber nicht bestätigt werden.";
107
+ job.error = validation.valid ? undefined : validation.error;
108
+ job.updatedAt = new Date().toISOString();
109
+ return publicJob(job);
110
+ }
111
+ catch (error) {
112
+ job.status = "failed";
113
+ job.error = error instanceof Error ? error.message : String(error);
114
+ job.message = "Sitzung konnte nicht gespeichert werden.";
115
+ job.updatedAt = new Date().toISOString();
116
+ return publicJob(job);
117
+ }
118
+ }
119
+ //# sourceMappingURL=browser-bridge-jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-bridge-jobs.js","sourceRoot":"","sources":["../../../src/zero-token/providers/browser-bridge-jobs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Hono } from "hono";
2
+ export declare function createBrowserBridgeRoutes(): Hono;
3
+ //# sourceMappingURL=browser-bridge-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-bridge-routes.d.ts","sourceRoot":"","sources":["../../../src/zero-token/providers/browser-bridge-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoC5B,wBAAgB,yBAAyB,IAAI,IAAI,CAqEhD"}
@@ -0,0 +1,71 @@
1
+ import { Hono } from "hono";
2
+ import { completeBrowserBridgeJob, createBrowserBridgeJob, getBrowserBridgeJob, } from "./browser-bridge-jobs.js";
3
+ function bearerToken(value) {
4
+ if (!value?.startsWith("Bearer "))
5
+ return "";
6
+ return value.slice(7).trim();
7
+ }
8
+ function isLoopback(hostname) {
9
+ return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]";
10
+ }
11
+ function trustedWebOrigin(requestUrl, originHeader, hostHeader, forwardedProto) {
12
+ if (!originHeader || !hostHeader)
13
+ return false;
14
+ try {
15
+ const origin = new URL(originHeader);
16
+ const request = new URL(requestUrl);
17
+ const expectedHost = hostHeader.split(",", 1)[0].trim();
18
+ const protocol = forwardedProto?.split(",", 1)[0].trim() || request.protocol.replace(":", "");
19
+ if (origin.host !== expectedHost)
20
+ return false;
21
+ return protocol === "https" || isLoopback(origin.hostname);
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ export function createBrowserBridgeRoutes() {
28
+ const routes = new Hono();
29
+ routes.post("/jobs", async (c) => {
30
+ const host = c.req.header("x-forwarded-host") ?? c.req.header("host");
31
+ if (!trustedWebOrigin(c.req.url, c.req.header("origin"), host, c.req.header("x-forwarded-proto"))) {
32
+ return c.json({ error: "Browser-Bridge-Login benötigt dieselbe sichere Web-Origin (HTTPS; lokal auch HTTP)." }, 403);
33
+ }
34
+ const body = await c.req
35
+ .json()
36
+ .catch(() => ({}));
37
+ if (!body.providerId)
38
+ return c.json({ error: "providerId ist erforderlich" }, 400);
39
+ try {
40
+ return c.json(createBrowserBridgeJob(body.providerId), 201);
41
+ }
42
+ catch (error) {
43
+ return c.json({ error: error instanceof Error ? error.message : "Loginjob konnte nicht erstellt werden" }, 400);
44
+ }
45
+ });
46
+ routes.get("/jobs/:id", (c) => {
47
+ const token = bearerToken(c.req.header("authorization"));
48
+ const job = getBrowserBridgeJob(c.req.param("id"), token);
49
+ return job ? c.json(job) : c.json({ error: "Loginjob nicht gefunden oder abgelaufen" }, 404);
50
+ });
51
+ routes.post("/jobs/:id/complete", async (c) => {
52
+ const host = c.req.header("x-forwarded-host") ?? c.req.header("host");
53
+ if (!trustedWebOrigin(c.req.url, c.req.header("origin"), host, c.req.header("x-forwarded-proto"))) {
54
+ return c.json({ error: "Unsichere Browser-Bridge-Origin" }, 403);
55
+ }
56
+ const token = bearerToken(c.req.header("authorization"));
57
+ const body = await c.req
58
+ .json()
59
+ .catch(() => ({}));
60
+ if (!body.session)
61
+ return c.json({ error: "session ist erforderlich" }, 400);
62
+ try {
63
+ return c.json(await completeBrowserBridgeJob(c.req.param("id"), token, body.session));
64
+ }
65
+ catch (error) {
66
+ return c.json({ error: error instanceof Error ? error.message : "Sitzung konnte nicht übernommen werden" }, 400);
67
+ }
68
+ });
69
+ return routes;
70
+ }
71
+ //# sourceMappingURL=browser-bridge-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-bridge-routes.js","sourceRoot":"","sources":["../../../src/zero-token/providers/browser-bridge-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { Browser, BrowserContext, Page } from "playwright";
2
+ export interface OpenBrowserResult {
3
+ browser: Browser;
4
+ context: BrowserContext;
5
+ page: Page;
6
+ }
7
+ export declare class ProviderBrowserError extends Error {
8
+ cause?: Error | undefined;
9
+ constructor(message: string, cause?: Error | undefined);
10
+ }
11
+ export interface BrowserLaunchConfig {
12
+ cdpUrl?: string;
13
+ cdpPort?: number;
14
+ headless?: boolean;
15
+ proxy?: string;
16
+ /** URL to navigate to after opening */
17
+ targetUrl: string;
18
+ loginTimeout?: number;
19
+ }
20
+ /**
21
+ * Chromium may advertise a loopback websocket URL from inside its own
22
+ * container. Resolve Docker service names to an IP accepted by Chromium's
23
+ * DevTools host-header validation and rewrite the advertised websocket URL.
24
+ */
25
+ export declare function resolveCdpWebSocketUrl(remoteUrl: string): Promise<string>;
26
+ /**
27
+ * Opens Chromium either by connecting to a remote CDP endpoint or by launching
28
+ * a local process. Server deployments should configure NOVA_CDP_URL.
29
+ */
30
+ export declare function openProviderBrowser(config: BrowserLaunchConfig): Promise<OpenBrowserResult>;
31
+ /**
32
+ * Waits until the page has left the auth route and real provider credentials
33
+ * are present. A URL change alone is not considered a successful login.
34
+ */
35
+ export declare function waitForUrlLogin(page: Page, baseUrl: string, authPathPatterns: string[], timeout?: number): Promise<void>;
36
+ /**
37
+ * Generic request-response-based login waiter.
38
+ * A successful API response is only accepted when credentials are present.
39
+ */
40
+ export declare function waitForApiLogin(page: Page, baseUrl: string, successApiPath: string, timeout?: number): Promise<void>;
41
+ /** Extracts cookies as a semicolon-separated header string. */
42
+ export declare function extractCookies(page: Page, relevantCookieNames?: string[]): Promise<string>;
43
+ /** Extracts a value from localStorage/sessionStorage or an observed auth header. */
44
+ export declare function extractLocalStorage(page: Page, possibleKeys: string[]): Promise<string | null>;
45
+ /** Reads cookie value by name from the browser context. */
46
+ export declare function getCookieValue(page: Page, cookieName: string): Promise<string | undefined>;
47
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/zero-token/providers/browser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAW,MAAM,YAAY,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAGpC,KAAK,CAAC,EAAE,KAAK;gBADpB,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,KAAK,YAAA;CAKvB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwCD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B/E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAmB5B;AAwID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EAAE,EAC1B,OAAO,GAAE,MAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,MAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,+DAA+D;AAC/D,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,mBAAmB,GAAE,MAAM,EAAO,GACjC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,oFAAoF;AACpF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BxB;AAED,2DAA2D;AAC3D,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B"}
@@ -0,0 +1,330 @@
1
+ import { lookup } from "node:dns/promises";
2
+ import { isIP } from "node:net";
3
+ import { chromium } from "playwright";
4
+ import logger from "../logger.js";
5
+ export class ProviderBrowserError extends Error {
6
+ cause;
7
+ constructor(message, cause) {
8
+ super(message);
9
+ this.cause = cause;
10
+ this.name = "ProviderBrowserError";
11
+ }
12
+ }
13
+ const CDP_DISCOVERY_TIMEOUT_MS = 5_000;
14
+ const CDP_CONNECT_TIMEOUT_MS = 10_000;
15
+ const SESSION_COOKIE_PATTERN = /(session|token|auth|jwt|sid|login|account)/i;
16
+ const observedSessionByPage = new WeakMap();
17
+ async function resolveCdpNetworkUrl(remoteUrl) {
18
+ const resolved = new URL(remoteUrl);
19
+ const hostname = resolved.hostname;
20
+ if (hostname === "localhost" || isIP(hostname)) {
21
+ return resolved;
22
+ }
23
+ try {
24
+ const result = await lookup(hostname, { family: 4 });
25
+ resolved.hostname = result.address;
26
+ logger.debug({ cdpService: hostname, cdpAddress: result.address }, "CDP-Dienstname über Docker-DNS aufgelöst");
27
+ return resolved;
28
+ }
29
+ catch (error) {
30
+ throw new ProviderBrowserError(`CDP-Host ${hostname} konnte nicht aufgelöst werden.`, error instanceof Error ? error : undefined);
31
+ }
32
+ }
33
+ /**
34
+ * Chromium may advertise a loopback websocket URL from inside its own
35
+ * container. Resolve Docker service names to an IP accepted by Chromium's
36
+ * DevTools host-header validation and rewrite the advertised websocket URL.
37
+ */
38
+ export async function resolveCdpWebSocketUrl(remoteUrl) {
39
+ const configured = await resolveCdpNetworkUrl(remoteUrl);
40
+ if (configured.protocol === "ws:" || configured.protocol === "wss:") {
41
+ return configured.toString();
42
+ }
43
+ if (configured.protocol !== "http:" && configured.protocol !== "https:") {
44
+ throw new ProviderBrowserError(`Ungültiges CDP-Protokoll: ${configured.protocol}`);
45
+ }
46
+ const versionUrl = new URL("/json/version", configured);
47
+ const response = await fetch(versionUrl, {
48
+ signal: AbortSignal.timeout(CDP_DISCOVERY_TIMEOUT_MS),
49
+ });
50
+ if (!response.ok) {
51
+ throw new ProviderBrowserError(`CDP-Status unter ${versionUrl.toString()} antwortet mit HTTP ${response.status}.`);
52
+ }
53
+ const payload = (await response.json());
54
+ if (!payload.webSocketDebuggerUrl) {
55
+ throw new ProviderBrowserError("Chromium liefert keine webSocketDebuggerUrl.");
56
+ }
57
+ const advertised = new URL(payload.webSocketDebuggerUrl);
58
+ advertised.protocol = configured.protocol === "https:" ? "wss:" : "ws:";
59
+ advertised.hostname = configured.hostname;
60
+ advertised.port = configured.port;
61
+ return advertised.toString();
62
+ }
63
+ /**
64
+ * Opens Chromium either by connecting to a remote CDP endpoint or by launching
65
+ * a local process. Server deployments should configure NOVA_CDP_URL.
66
+ */
67
+ export async function openProviderBrowser(config) {
68
+ try {
69
+ const browser = await launchBrowser(config);
70
+ const context = browser.contexts()[0] ?? (await browser.newContext());
71
+ const page = context.pages()[0] ?? (await context.newPage());
72
+ logger.info({ url: config.targetUrl }, "Navigiere zur Login-Seite …");
73
+ await page.goto(config.targetUrl, {
74
+ waitUntil: "domcontentloaded",
75
+ timeout: 30_000,
76
+ });
77
+ return { browser, context, page };
78
+ }
79
+ catch (err) {
80
+ throw new ProviderBrowserError("Browser konnte nicht geöffnet werden.", err instanceof Error ? err : undefined);
81
+ }
82
+ }
83
+ async function launchBrowser(config) {
84
+ const remoteUrl = config.cdpUrl?.trim() || process.env.NOVA_CDP_URL?.trim();
85
+ if (remoteUrl) {
86
+ logger.info({ cdpUrl: remoteUrl }, "Verbinde zu Remote-Chromium über CDP …");
87
+ try {
88
+ const websocketUrl = await resolveCdpWebSocketUrl(remoteUrl);
89
+ logger.info({ cdpHost: new URL(websocketUrl).host }, "CDP-WebSocket aufgelöst; Verbindung wird hergestellt …");
90
+ return await chromium.connectOverCDP(websocketUrl, {
91
+ timeout: CDP_CONNECT_TIMEOUT_MS,
92
+ });
93
+ }
94
+ catch (err) {
95
+ throw new ProviderBrowserError(`Keine Verbindung zum Remote-Chromium unter ${remoteUrl} möglich.`, err instanceof Error ? err : undefined);
96
+ }
97
+ }
98
+ if (config.cdpPort) {
99
+ logger.info({ cdpPort: config.cdpPort }, "Verbinde zu bestehendem Chrome über CDP …");
100
+ try {
101
+ return await chromium.connectOverCDP(`http://127.0.0.1:${config.cdpPort}`, {
102
+ timeout: CDP_CONNECT_TIMEOUT_MS,
103
+ });
104
+ }
105
+ catch (err) {
106
+ throw new ProviderBrowserError(`Keine Verbindung zu Chrome auf Port ${config.cdpPort} möglich. ` +
107
+ "Stelle sicher, dass Chrome mit --remote-debugging-port=<port> läuft.", err instanceof Error ? err : undefined);
108
+ }
109
+ }
110
+ logger.info("Starte Chromium (nicht-headless) …");
111
+ return await chromium.launch({
112
+ headless: config.headless ?? false,
113
+ ...(config.proxy && { proxy: { server: config.proxy } }),
114
+ });
115
+ }
116
+ function requestBelongsToProvider(requestUrl, baseUrl) {
117
+ try {
118
+ const requestHost = new URL(requestUrl).hostname.toLowerCase();
119
+ const baseHost = new URL(baseUrl).hostname.toLowerCase();
120
+ return requestHost === baseHost || requestHost.endsWith(`.${baseHost}`);
121
+ }
122
+ catch {
123
+ return false;
124
+ }
125
+ }
126
+ function observeProviderSession(page, baseUrl) {
127
+ const listener = (request) => {
128
+ if (!requestBelongsToProvider(request.url(), baseUrl))
129
+ return;
130
+ const headers = request.headers();
131
+ const authorization = headers.authorization?.trim();
132
+ const cookie = headers.cookie?.trim();
133
+ if (!authorization && !cookie)
134
+ return;
135
+ const current = observedSessionByPage.get(page) ?? {};
136
+ observedSessionByPage.set(page, {
137
+ authorization: authorization || current.authorization,
138
+ cookie: cookie || current.cookie,
139
+ });
140
+ };
141
+ page.on("request", listener);
142
+ return () => page.off("request", listener);
143
+ }
144
+ function normalizeAuthorization(value) {
145
+ if (!value)
146
+ return undefined;
147
+ const normalized = value.replace(/^Bearer\s+/i, "").trim();
148
+ return normalized || undefined;
149
+ }
150
+ async function readGenericStorageToken(page) {
151
+ try {
152
+ return await page.evaluate(() => {
153
+ const keyPattern = /(token|auth|session|jwt)/i;
154
+ const stores = [];
155
+ try {
156
+ stores.push(localStorage);
157
+ }
158
+ catch {
159
+ // The current origin can temporarily block storage access.
160
+ }
161
+ try {
162
+ stores.push(sessionStorage);
163
+ }
164
+ catch {
165
+ // The current origin can temporarily block storage access.
166
+ }
167
+ for (const store of stores) {
168
+ for (let index = 0; index < store.length; index += 1) {
169
+ const key = store.key(index);
170
+ if (!key || !keyPattern.test(key))
171
+ continue;
172
+ const value = store.getItem(key)?.trim();
173
+ if (value)
174
+ return value;
175
+ }
176
+ }
177
+ return undefined;
178
+ });
179
+ }
180
+ catch {
181
+ return undefined;
182
+ }
183
+ }
184
+ async function hasProviderSession(page, baseUrl) {
185
+ const observed = observedSessionByPage.get(page);
186
+ if (normalizeAuthorization(observed?.authorization))
187
+ return true;
188
+ if (observed?.cookie && SESSION_COOKIE_PATTERN.test(observed.cookie))
189
+ return true;
190
+ try {
191
+ const cookies = await page.context().cookies([baseUrl]);
192
+ if (cookies.some((cookie) => cookie.value.trim().length > 0 && SESSION_COOKIE_PATTERN.test(cookie.name))) {
193
+ return true;
194
+ }
195
+ if (cookies.filter((cookie) => cookie.value.trim().length > 0).length >= 2) {
196
+ return true;
197
+ }
198
+ }
199
+ catch {
200
+ // Keep waiting while the page changes origin during authentication.
201
+ }
202
+ return Boolean(await readGenericStorageToken(page));
203
+ }
204
+ /**
205
+ * Waits until the page has left the auth route and real provider credentials
206
+ * are present. A URL change alone is not considered a successful login.
207
+ */
208
+ export async function waitForUrlLogin(page, baseUrl, authPathPatterns, timeout = 300_000) {
209
+ const start = Date.now();
210
+ const stopObserving = observeProviderSession(page, baseUrl);
211
+ try {
212
+ while (Date.now() - start < timeout) {
213
+ const url = page.url();
214
+ const onAuthPage = authPathPatterns.some((pattern) => url.includes(pattern));
215
+ const onProviderPage = requestBelongsToProvider(url, baseUrl);
216
+ if (onProviderPage && !onAuthPage && (await hasProviderSession(page, baseUrl))) {
217
+ await page.waitForTimeout(750);
218
+ logger.info("Login erkannt (Sessiondaten vorhanden).");
219
+ return;
220
+ }
221
+ if (url.includes("error") || url.includes("not-found")) {
222
+ await page.waitForTimeout(500);
223
+ }
224
+ await page.waitForTimeout(500);
225
+ }
226
+ }
227
+ finally {
228
+ stopObserving();
229
+ }
230
+ throw new ProviderBrowserError(`Login nicht innerhalb von ${timeout / 1000}s abgeschlossen.`);
231
+ }
232
+ /**
233
+ * Generic request-response-based login waiter.
234
+ * A successful API response is only accepted when credentials are present.
235
+ */
236
+ export async function waitForApiLogin(page, baseUrl, successApiPath, timeout = 300_000) {
237
+ const start = Date.now();
238
+ let resolved = false;
239
+ const stopObserving = observeProviderSession(page, baseUrl);
240
+ const responseListener = (response) => {
241
+ if (response.url().includes(successApiPath) && response.status() === 200) {
242
+ resolved = true;
243
+ }
244
+ };
245
+ page.on("response", responseListener);
246
+ try {
247
+ while (Date.now() - start < timeout) {
248
+ if (resolved && (await hasProviderSession(page, baseUrl))) {
249
+ await page.waitForTimeout(750);
250
+ logger.info({ apiPath: successApiPath }, "Login erkannt (API und Sessiondaten).");
251
+ return;
252
+ }
253
+ const url = page.url();
254
+ const offAuthPage = requestBelongsToProvider(url, baseUrl) &&
255
+ !url.includes("/auth/") &&
256
+ !url.includes("/login");
257
+ if (offAuthPage && (await hasProviderSession(page, baseUrl))) {
258
+ await page.waitForTimeout(750);
259
+ logger.info("Login erkannt (Sessiondaten vorhanden).");
260
+ return;
261
+ }
262
+ await page.waitForTimeout(500);
263
+ }
264
+ }
265
+ finally {
266
+ page.off("response", responseListener);
267
+ stopObserving();
268
+ }
269
+ throw new ProviderBrowserError(`Login nicht innerhalb von ${timeout / 1000}s abgeschlossen.`);
270
+ }
271
+ /** Extracts cookies as a semicolon-separated header string. */
272
+ export async function extractCookies(page, relevantCookieNames = []) {
273
+ const browserCookies = await page.context().cookies();
274
+ const relevant = relevantCookieNames.length
275
+ ? browserCookies.filter((cookie) => relevantCookieNames.some((name) => cookie.name.toLowerCase().includes(name.toLowerCase())))
276
+ : browserCookies;
277
+ const selected = relevant.length ? relevant : browserCookies;
278
+ if (selected.length > 0) {
279
+ const cookieMap = new Map();
280
+ for (const cookie of selected) {
281
+ cookieMap.set(cookie.name, cookie.value);
282
+ }
283
+ return Array.from(cookieMap.entries())
284
+ .map(([name, value]) => `${name}=${value}`)
285
+ .join("; ");
286
+ }
287
+ const observedCookie = observedSessionByPage.get(page)?.cookie?.trim();
288
+ if (observedCookie)
289
+ return observedCookie;
290
+ logger.warn("Keine Session-Cookies im Browserkontext gefunden.");
291
+ return "";
292
+ }
293
+ /** Extracts a value from localStorage/sessionStorage or an observed auth header. */
294
+ export async function extractLocalStorage(page, possibleKeys) {
295
+ for (const key of possibleKeys) {
296
+ try {
297
+ const value = await page.evaluate((candidate) => {
298
+ try {
299
+ const localValue = localStorage.getItem(candidate);
300
+ if (localValue)
301
+ return localValue;
302
+ }
303
+ catch {
304
+ // Ignore inaccessible local storage.
305
+ }
306
+ try {
307
+ return sessionStorage.getItem(candidate);
308
+ }
309
+ catch {
310
+ return null;
311
+ }
312
+ }, key);
313
+ if (value)
314
+ return value;
315
+ }
316
+ catch {
317
+ continue;
318
+ }
319
+ }
320
+ const genericToken = await readGenericStorageToken(page);
321
+ if (genericToken)
322
+ return genericToken;
323
+ return normalizeAuthorization(observedSessionByPage.get(page)?.authorization) ?? null;
324
+ }
325
+ /** Reads cookie value by name from the browser context. */
326
+ export async function getCookieValue(page, cookieName) {
327
+ const cookies = await page.context().cookies();
328
+ return cookies.find((cookie) => cookie.name === cookieName)?.value;
329
+ }
330
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/zero-token/providers/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,MAAM,MAAM,cAAc,CAAC;AAQlC,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAGpC;IAFT,YACE,OAAe,EACR,KAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,UAAK,GAAL,KAAK,CAAQ;QAGpB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAqBD,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,sBAAsB,GAAG,6CAA6C,CAAC;AAC7E,MAAM,qBAAqB,GAAG,IAAI,OAAO,EAAgC,CAAC;AAE1E,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAEnC,IAAI,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QACnC,MAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,EACpD,0CAA0C,CAC3C,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,oBAAoB,CAC5B,YAAY,QAAQ,iCAAiC,EACrD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IAC5D,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACpE,OAAO,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxE,MAAM,IAAI,oBAAoB,CAAC,6BAA6B,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;QACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC;KACtD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,oBAAoB,CAC5B,oBAAoB,UAAU,CAAC,QAAQ,EAAE,uBAAuB,QAAQ,CAAC,MAAM,GAAG,CACnF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IAC9D,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,oBAAoB,CAAC,8CAA8C,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzD,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACxE,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;IAC1C,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAClC,OAAO,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAE7D,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,6BAA6B,CAAC,CAAC;QACtE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAChC,SAAS,EAAE,kBAAkB;YAC7B,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,oBAAoB,CAC5B,uCAAuC,EACvC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAA2B;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IAC5E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,wCAAwC,CAAC,CAAC;QAC7E,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EACvC,wDAAwD,CACzD,CAAC;YACF,OAAO,MAAM,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE;gBACjD,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,oBAAoB,CAC5B,8CAA8C,SAAS,WAAW,EAClE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,2CAA2C,CAAC,CAAC;QACtF,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,cAAc,CAAC,oBAAoB,MAAM,CAAC,OAAO,EAAE,EAAE;gBACzE,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,oBAAoB,CAC5B,uCAAuC,MAAM,CAAC,OAAO,YAAY;gBAC/D,sEAAsE,EACxE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;QAClC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;KACzD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,OAAe;IACnE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzD,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAU,EAAE,OAAe;IACzD,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,EAAE;QACpC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC;YAAE,OAAO;QAE9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM;YAAE,OAAO;QAEtC,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtD,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE;YAC9B,aAAa,EAAE,aAAa,IAAI,OAAO,CAAC,aAAa;YACrD,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM;SACjC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,IAAU;IAC/C,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC9B,MAAM,UAAU,GAAG,2BAA2B,CAAC;YAC/C,MAAM,MAAM,GAAc,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;oBACrD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;oBACzC,IAAI,KAAK;wBAAE,OAAO,KAAK,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,OAAe;IAC3D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,sBAAsB,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,QAAQ,EAAE,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAElF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,IACE,OAAO,CAAC,IAAI,CACV,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CACvF,EACD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,OAAe,EACf,gBAA0B,EAC1B,UAAkB,OAAO;IAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE5D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,MAAM,cAAc,GAAG,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAE9D,IAAI,cAAc,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC/E,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,oBAAoB,CAC5B,6BAA6B,OAAO,GAAG,IAAI,kBAAkB,CAC9D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,OAAe,EACf,cAAsB,EACtB,UAAkB,OAAO;IAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,aAAa,GAAG,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,CAAC,QAA6C,EAAE,EAAE;QACzE,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,CAAC;YACzE,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;YACpC,IAAI,QAAQ,IAAI,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,uCAAuC,CAAC,CAAC;gBAClF,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,WAAW,GACf,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC;gBACtC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,WAAW,IAAI,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YAED,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACvC,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,oBAAoB,CAC5B,6BAA6B,OAAO,GAAG,IAAI,kBAAkB,CAC9D,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAU,EACV,sBAAgC,EAAE;IAElC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IAEtD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM;QACzC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC/B,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CACvD,CACF;QACH,CAAC,CAAC,cAAc,CAAC;IAEnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;IAC7D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;aAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvE,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAE1C,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAU,EACV,YAAsB;IAEtB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAiB,EAAE,EAAE;gBACtD,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,UAAU;wBAAE,OAAO,UAAU,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;gBACD,IAAI,CAAC;oBACH,OAAO,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,OAAO,sBAAsB,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC;AACxF,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAU,EACV,UAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,KAAK,CAAC;AACrE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ChatGPTSessionData, ChatGPTAccountInfo } from "./chatgpt-types.js";
2
+ /**
3
+ * Ruft die Account-Informationen von ChatGPT ab und prüft den Plus-Status.
4
+ *
5
+ * Verwendet die extrahierte Session (Cookies + AccessToken) für die Anfrage.
6
+ */
7
+ export declare function fetchAccountInfo(session: ChatGPTSessionData): Promise<ChatGPTAccountInfo>;
8
+ /**
9
+ * Prüft, ob der Account Plus-Zugriff hat. Wirft ChatGPTNotPlusError, falls nicht.
10
+ */
11
+ export declare function requirePlusPlan(info: ChatGPTAccountInfo): void;
12
+ //# sourceMappingURL=chatgpt-account-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt-account-info.d.ts","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-account-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMjF;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA+D7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAI9D"}