@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.
- package/README.md +149 -0
- package/dist/discover.d.ts +3 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +18 -0
- package/dist/discover.js.map +1 -0
- package/dist/genericagent.d.ts +3 -0
- package/dist/genericagent.d.ts.map +1 -0
- package/dist/genericagent.js +40 -0
- package/dist/genericagent.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/zero-token/accounts/account-repository.d.ts +7 -0
- package/dist/zero-token/accounts/account-repository.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-repository.js +37 -0
- package/dist/zero-token/accounts/account-repository.js.map +1 -0
- package/dist/zero-token/accounts/account-service.d.ts +11 -0
- package/dist/zero-token/accounts/account-service.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-service.js +66 -0
- package/dist/zero-token/accounts/account-service.js.map +1 -0
- package/dist/zero-token/accounts/account-types.d.ts +42 -0
- package/dist/zero-token/accounts/account-types.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-types.js +2 -0
- package/dist/zero-token/accounts/account-types.js.map +1 -0
- package/dist/zero-token/accounts/account-validation.d.ts +14 -0
- package/dist/zero-token/accounts/account-validation.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-validation.js +88 -0
- package/dist/zero-token/accounts/account-validation.js.map +1 -0
- package/dist/zero-token/agent/cli.d.ts +2 -0
- package/dist/zero-token/agent/cli.d.ts.map +1 -0
- package/dist/zero-token/agent/cli.js +116 -0
- package/dist/zero-token/agent/cli.js.map +1 -0
- package/dist/zero-token/agent/external-backend.d.ts +3 -0
- package/dist/zero-token/agent/external-backend.d.ts.map +1 -0
- package/dist/zero-token/agent/external-backend.js +3 -0
- package/dist/zero-token/agent/external-backend.js.map +1 -0
- package/dist/zero-token/agent/genericagent-config.d.ts +11 -0
- package/dist/zero-token/agent/genericagent-config.d.ts.map +1 -0
- package/dist/zero-token/agent/genericagent-config.js +44 -0
- package/dist/zero-token/agent/genericagent-config.js.map +1 -0
- package/dist/zero-token/agent/genericagent-runtime.d.ts +20 -0
- package/dist/zero-token/agent/genericagent-runtime.d.ts.map +1 -0
- package/dist/zero-token/agent/genericagent-runtime.js +71 -0
- package/dist/zero-token/agent/genericagent-runtime.js.map +1 -0
- package/dist/zero-token/agent/project-init.d.ts +11 -0
- package/dist/zero-token/agent/project-init.d.ts.map +1 -0
- package/dist/zero-token/agent/project-init.js +58 -0
- package/dist/zero-token/agent/project-init.js.map +1 -0
- package/dist/zero-token/agent/yoyo-adapter.d.ts +23 -0
- package/dist/zero-token/agent/yoyo-adapter.d.ts.map +1 -0
- package/dist/zero-token/agent/yoyo-adapter.js +88 -0
- package/dist/zero-token/agent/yoyo-adapter.js.map +1 -0
- package/dist/zero-token/app-meta.d.ts +7 -0
- package/dist/zero-token/app-meta.d.ts.map +1 -0
- package/dist/zero-token/app-meta.js +7 -0
- package/dist/zero-token/app-meta.js.map +1 -0
- package/dist/zero-token/cli/doctor-command.d.ts +18 -0
- package/dist/zero-token/cli/doctor-command.d.ts.map +1 -0
- package/dist/zero-token/cli/doctor-command.js +96 -0
- package/dist/zero-token/cli/doctor-command.js.map +1 -0
- package/dist/zero-token/config/config.d.ts +56 -0
- package/dist/zero-token/config/config.d.ts.map +1 -0
- package/dist/zero-token/config/config.js +98 -0
- package/dist/zero-token/config/config.js.map +1 -0
- package/dist/zero-token/config/paths.d.ts +12 -0
- package/dist/zero-token/config/paths.d.ts.map +1 -0
- package/dist/zero-token/config/paths.js +50 -0
- package/dist/zero-token/config/paths.js.map +1 -0
- package/dist/zero-token/discovery/builtin-catalog.d.ts +13 -0
- package/dist/zero-token/discovery/builtin-catalog.d.ts.map +1 -0
- package/dist/zero-token/discovery/builtin-catalog.js +25 -0
- package/dist/zero-token/discovery/builtin-catalog.js.map +1 -0
- package/dist/zero-token/discovery/candidate-evaluator.d.ts +4 -0
- package/dist/zero-token/discovery/candidate-evaluator.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-evaluator.js +132 -0
- package/dist/zero-token/discovery/candidate-evaluator.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-capability.d.ts +6 -0
- package/dist/zero-token/discovery/candidate-probe-capability.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-capability.js +10 -0
- package/dist/zero-token/discovery/candidate-probe-capability.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.d.ts +13 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.js +53 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-observer.d.ts +3 -0
- package/dist/zero-token/discovery/candidate-probe-observer.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-observer.js +36 -0
- package/dist/zero-token/discovery/candidate-probe-observer.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.d.ts +6 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.js +120 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-store.d.ts +9 -0
- package/dist/zero-token/discovery/candidate-probe-store.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-store.js +66 -0
- package/dist/zero-token/discovery/candidate-probe-store.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-types.d.ts +30 -0
- package/dist/zero-token/discovery/candidate-probe-types.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-types.js +2 -0
- package/dist/zero-token/discovery/candidate-probe-types.js.map +1 -0
- package/dist/zero-token/discovery/control-service.d.ts +8 -0
- package/dist/zero-token/discovery/control-service.d.ts.map +1 -0
- package/dist/zero-token/discovery/control-service.js +107 -0
- package/dist/zero-token/discovery/control-service.js.map +1 -0
- package/dist/zero-token/discovery/control-store.d.ts +7 -0
- package/dist/zero-token/discovery/control-store.d.ts.map +1 -0
- package/dist/zero-token/discovery/control-store.js +70 -0
- package/dist/zero-token/discovery/control-store.js.map +1 -0
- package/dist/zero-token/discovery/control-types.d.ts +39 -0
- package/dist/zero-token/discovery/control-types.d.ts.map +1 -0
- package/dist/zero-token/discovery/control-types.js +2 -0
- package/dist/zero-token/discovery/control-types.js.map +1 -0
- package/dist/zero-token/discovery/discovery-routes.d.ts +3 -0
- package/dist/zero-token/discovery/discovery-routes.d.ts.map +1 -0
- package/dist/zero-token/discovery/discovery-routes.js +130 -0
- package/dist/zero-token/discovery/discovery-routes.js.map +1 -0
- package/dist/zero-token/discovery/discovery-service.d.ts +18 -0
- package/dist/zero-token/discovery/discovery-service.d.ts.map +1 -0
- package/dist/zero-token/discovery/discovery-service.js +81 -0
- package/dist/zero-token/discovery/discovery-service.js.map +1 -0
- package/dist/zero-token/discovery/manifest.d.ts +14 -0
- package/dist/zero-token/discovery/manifest.d.ts.map +1 -0
- package/dist/zero-token/discovery/manifest.js +43 -0
- package/dist/zero-token/discovery/manifest.js.map +1 -0
- package/dist/zero-token/discovery/public-site-inspector.d.ts +10 -0
- package/dist/zero-token/discovery/public-site-inspector.d.ts.map +1 -0
- package/dist/zero-token/discovery/public-site-inspector.js +111 -0
- package/dist/zero-token/discovery/public-site-inspector.js.map +1 -0
- package/dist/zero-token/gateway/api-key-auth.d.ts +3 -0
- package/dist/zero-token/gateway/api-key-auth.d.ts.map +1 -0
- package/dist/zero-token/gateway/api-key-auth.js +59 -0
- package/dist/zero-token/gateway/api-key-auth.js.map +1 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.d.ts +3 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.d.ts.map +1 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.js +79 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.js.map +1 -0
- package/dist/zero-token/gateway/api-request-logger.d.ts +3 -0
- package/dist/zero-token/gateway/api-request-logger.d.ts.map +1 -0
- package/dist/zero-token/gateway/api-request-logger.js +67 -0
- package/dist/zero-token/gateway/api-request-logger.js.map +1 -0
- package/dist/zero-token/gateway/complete-gateway.d.ts +16 -0
- package/dist/zero-token/gateway/complete-gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/complete-gateway.js +25 -0
- package/dist/zero-token/gateway/complete-gateway.js.map +1 -0
- package/dist/zero-token/gateway/dashboard-gateway.d.ts +16 -0
- package/dist/zero-token/gateway/dashboard-gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/dashboard-gateway.js +33 -0
- package/dist/zero-token/gateway/dashboard-gateway.js.map +1 -0
- package/dist/zero-token/gateway/gateway.d.ts +2 -0
- package/dist/zero-token/gateway/gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/gateway.js +2 -0
- package/dist/zero-token/gateway/gateway.js.map +1 -0
- package/dist/zero-token/gateway/inference-dispatch.d.ts +3 -0
- package/dist/zero-token/gateway/inference-dispatch.d.ts.map +1 -0
- package/dist/zero-token/gateway/inference-dispatch.js +97 -0
- package/dist/zero-token/gateway/inference-dispatch.js.map +1 -0
- package/dist/zero-token/gateway/playground-routes.d.ts +3 -0
- package/dist/zero-token/gateway/playground-routes.d.ts.map +1 -0
- package/dist/zero-token/gateway/playground-routes.js +33 -0
- package/dist/zero-token/gateway/playground-routes.js.map +1 -0
- package/dist/zero-token/gateway/provider-runtime-routes.d.ts +3 -0
- package/dist/zero-token/gateway/provider-runtime-routes.d.ts.map +1 -0
- package/dist/zero-token/gateway/provider-runtime-routes.js +38 -0
- package/dist/zero-token/gateway/provider-runtime-routes.js.map +1 -0
- package/dist/zero-token/gateway/runtime-gateway.d.ts +20 -0
- package/dist/zero-token/gateway/runtime-gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/runtime-gateway.js +234 -0
- package/dist/zero-token/gateway/runtime-gateway.js.map +1 -0
- package/dist/zero-token/identities/google-identity-service.d.ts +27 -0
- package/dist/zero-token/identities/google-identity-service.d.ts.map +1 -0
- package/dist/zero-token/identities/google-identity-service.js +162 -0
- package/dist/zero-token/identities/google-identity-service.js.map +1 -0
- package/dist/zero-token/index.d.ts +3 -0
- package/dist/zero-token/index.d.ts.map +1 -0
- package/dist/zero-token/index.js +380 -0
- package/dist/zero-token/index.js.map +1 -0
- package/dist/zero-token/inference/browser-stream-utils.d.ts +5 -0
- package/dist/zero-token/inference/browser-stream-utils.d.ts.map +1 -0
- package/dist/zero-token/inference/browser-stream-utils.js +118 -0
- package/dist/zero-token/inference/browser-stream-utils.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.d.ts +17 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.js +242 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.d.ts +8 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.js +60 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.d.ts +15 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.js +348 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-provider.d.ts +32 -0
- package/dist/zero-token/inference/chatgpt-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-provider.js +312 -0
- package/dist/zero-token/inference/chatgpt-provider.js.map +1 -0
- package/dist/zero-token/inference/claude-browser-provider.d.ts +16 -0
- package/dist/zero-token/inference/claude-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/claude-browser-provider.js +193 -0
- package/dist/zero-token/inference/claude-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/claude-openclaw-provider.d.ts +14 -0
- package/dist/zero-token/inference/claude-openclaw-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/claude-openclaw-provider.js +187 -0
- package/dist/zero-token/inference/claude-openclaw-provider.js.map +1 -0
- package/dist/zero-token/inference/glm-browser-provider.d.ts +15 -0
- package/dist/zero-token/inference/glm-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/glm-browser-provider.js +166 -0
- package/dist/zero-token/inference/glm-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/inference-provider.d.ts +44 -0
- package/dist/zero-token/inference/inference-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/inference-provider.js +32 -0
- package/dist/zero-token/inference/inference-provider.js.map +1 -0
- package/dist/zero-token/inference/model-registry.d.ts +28 -0
- package/dist/zero-token/inference/model-registry.d.ts.map +1 -0
- package/dist/zero-token/inference/model-registry.js +48 -0
- package/dist/zero-token/inference/model-registry.js.map +1 -0
- package/dist/zero-token/inference/qwen-browser-provider.d.ts +14 -0
- package/dist/zero-token/inference/qwen-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/qwen-browser-provider.js +227 -0
- package/dist/zero-token/inference/qwen-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/stream.d.ts +15 -0
- package/dist/zero-token/inference/stream.d.ts.map +1 -0
- package/dist/zero-token/inference/stream.js +94 -0
- package/dist/zero-token/inference/stream.js.map +1 -0
- package/dist/zero-token/inference/types.d.ts +94 -0
- package/dist/zero-token/inference/types.d.ts.map +1 -0
- package/dist/zero-token/inference/types.js +5 -0
- package/dist/zero-token/inference/types.js.map +1 -0
- package/dist/zero-token/logger.d.ts +4 -0
- package/dist/zero-token/logger.d.ts.map +1 -0
- package/dist/zero-token/logger.js +27 -0
- package/dist/zero-token/logger.js.map +1 -0
- package/dist/zero-token/logging/log-events.d.ts +17 -0
- package/dist/zero-token/logging/log-events.d.ts.map +1 -0
- package/dist/zero-token/logging/log-events.js +74 -0
- package/dist/zero-token/logging/log-events.js.map +1 -0
- package/dist/zero-token/logging/log-routes.d.ts +3 -0
- package/dist/zero-token/logging/log-routes.d.ts.map +1 -0
- package/dist/zero-token/logging/log-routes.js +68 -0
- package/dist/zero-token/logging/log-routes.js.map +1 -0
- package/dist/zero-token/models/model-cache.d.ts +7 -0
- package/dist/zero-token/models/model-cache.d.ts.map +1 -0
- package/dist/zero-token/models/model-cache.js +58 -0
- package/dist/zero-token/models/model-cache.js.map +1 -0
- package/dist/zero-token/models/model-normalization.d.ts +4 -0
- package/dist/zero-token/models/model-normalization.d.ts.map +1 -0
- package/dist/zero-token/models/model-normalization.js +33 -0
- package/dist/zero-token/models/model-normalization.js.map +1 -0
- package/dist/zero-token/models/model-service.d.ts +6 -0
- package/dist/zero-token/models/model-service.d.ts.map +1 -0
- package/dist/zero-token/models/model-service.js +110 -0
- package/dist/zero-token/models/model-service.js.map +1 -0
- package/dist/zero-token/models/model-types.d.ts +28 -0
- package/dist/zero-token/models/model-types.d.ts.map +1 -0
- package/dist/zero-token/models/model-types.js +2 -0
- package/dist/zero-token/models/model-types.js.map +1 -0
- package/dist/zero-token/multi-account/router.d.ts +43 -0
- package/dist/zero-token/multi-account/router.d.ts.map +1 -0
- package/dist/zero-token/multi-account/router.js +94 -0
- package/dist/zero-token/multi-account/router.js.map +1 -0
- package/dist/zero-token/providers/browser-bridge-jobs.d.ts +26 -0
- package/dist/zero-token/providers/browser-bridge-jobs.d.ts.map +1 -0
- package/dist/zero-token/providers/browser-bridge-jobs.js +119 -0
- package/dist/zero-token/providers/browser-bridge-jobs.js.map +1 -0
- package/dist/zero-token/providers/browser-bridge-routes.d.ts +3 -0
- package/dist/zero-token/providers/browser-bridge-routes.d.ts.map +1 -0
- package/dist/zero-token/providers/browser-bridge-routes.js +71 -0
- package/dist/zero-token/providers/browser-bridge-routes.js.map +1 -0
- package/dist/zero-token/providers/browser.d.ts +47 -0
- package/dist/zero-token/providers/browser.d.ts.map +1 -0
- package/dist/zero-token/providers/browser.js +330 -0
- package/dist/zero-token/providers/browser.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.d.ts +12 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.js +66 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.d.ts +9 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.js +81 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.d.ts +21 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.js +64 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.d.ts +22 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.js +44 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.d.ts +10 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.js +71 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.d.ts +36 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.js +2 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.js.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-auth.d.ts +10 -0
- package/dist/zero-token/providers/chatgpt-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-auth.js +143 -0
- package/dist/zero-token/providers/chatgpt-web-auth.js.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-models.d.ts +8 -0
- package/dist/zero-token/providers/chatgpt-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-models.js +99 -0
- package/dist/zero-token/providers/chatgpt-web-models.js.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-validator.d.ts +8 -0
- package/dist/zero-token/providers/chatgpt-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-validator.js +79 -0
- package/dist/zero-token/providers/chatgpt-web-validator.js.map +1 -0
- package/dist/zero-token/providers/claude-web-auth.d.ts +3 -0
- package/dist/zero-token/providers/claude-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/claude-web-auth.js +109 -0
- package/dist/zero-token/providers/claude-web-auth.js.map +1 -0
- package/dist/zero-token/providers/claude-web-models.d.ts +3 -0
- package/dist/zero-token/providers/claude-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/claude-web-models.js +71 -0
- package/dist/zero-token/providers/claude-web-models.js.map +1 -0
- package/dist/zero-token/providers/claude-web-validator.d.ts +3 -0
- package/dist/zero-token/providers/claude-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/claude-web-validator.js +57 -0
- package/dist/zero-token/providers/claude-web-validator.js.map +1 -0
- package/dist/zero-token/providers/deepseek-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/deepseek-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/deepseek-web-auth.js +69 -0
- package/dist/zero-token/providers/deepseek-web-auth.js.map +1 -0
- package/dist/zero-token/providers/deepseek-web-validator.d.ts +3 -0
- package/dist/zero-token/providers/deepseek-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/deepseek-web-validator.js +24 -0
- package/dist/zero-token/providers/deepseek-web-validator.js.map +1 -0
- package/dist/zero-token/providers/doubao-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/doubao-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/doubao-web-auth.js +44 -0
- package/dist/zero-token/providers/doubao-web-auth.js.map +1 -0
- package/dist/zero-token/providers/gemini-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/gemini-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/gemini-web-auth.js +47 -0
- package/dist/zero-token/providers/gemini-web-auth.js.map +1 -0
- package/dist/zero-token/providers/glm-intl-web-auth.d.ts +4 -0
- package/dist/zero-token/providers/glm-intl-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/glm-intl-web-auth.js +53 -0
- package/dist/zero-token/providers/glm-intl-web-auth.js.map +1 -0
- package/dist/zero-token/providers/glm-web-auth.d.ts +3 -0
- package/dist/zero-token/providers/glm-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/glm-web-auth.js +42 -0
- package/dist/zero-token/providers/glm-web-auth.js.map +1 -0
- package/dist/zero-token/providers/glm-web-models.d.ts +3 -0
- package/dist/zero-token/providers/glm-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/glm-web-models.js +52 -0
- package/dist/zero-token/providers/glm-web-models.js.map +1 -0
- package/dist/zero-token/providers/grok-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/grok-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/grok-web-auth.js +47 -0
- package/dist/zero-token/providers/grok-web-auth.js.map +1 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.d.ts +15 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.js +15 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.js.map +1 -0
- package/dist/zero-token/providers/identity/identity-validation.d.ts +3 -0
- package/dist/zero-token/providers/identity/identity-validation.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/identity-validation.js +74 -0
- package/dist/zero-token/providers/identity/identity-validation.js.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.d.ts +16 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.js +56 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.js.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity.d.ts +88 -0
- package/dist/zero-token/providers/identity/provider-identity.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity.js +17 -0
- package/dist/zero-token/providers/identity/provider-identity.js.map +1 -0
- package/dist/zero-token/providers/kimi-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/kimi-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/kimi-web-auth.js +50 -0
- package/dist/zero-token/providers/kimi-web-auth.js.map +1 -0
- package/dist/zero-token/providers/perplexity-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/perplexity-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/perplexity-web-auth.js +68 -0
- package/dist/zero-token/providers/perplexity-web-auth.js.map +1 -0
- package/dist/zero-token/providers/perplexity-web-validator.d.ts +3 -0
- package/dist/zero-token/providers/perplexity-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/perplexity-web-validator.js +33 -0
- package/dist/zero-token/providers/perplexity-web-validator.js.map +1 -0
- package/dist/zero-token/providers/provider-account-resolver.d.ts +9 -0
- package/dist/zero-token/providers/provider-account-resolver.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-account-resolver.js +28 -0
- package/dist/zero-token/providers/provider-account-resolver.js.map +1 -0
- package/dist/zero-token/providers/provider-browser-profiles.d.ts +14 -0
- package/dist/zero-token/providers/provider-browser-profiles.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-browser-profiles.js +78 -0
- package/dist/zero-token/providers/provider-browser-profiles.js.map +1 -0
- package/dist/zero-token/providers/provider-catalog.d.ts +7 -0
- package/dist/zero-token/providers/provider-catalog.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-catalog.js +27 -0
- package/dist/zero-token/providers/provider-catalog.js.map +1 -0
- package/dist/zero-token/providers/provider-login-jobs.d.ts +21 -0
- package/dist/zero-token/providers/provider-login-jobs.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-login-jobs.js +185 -0
- package/dist/zero-token/providers/provider-login-jobs.js.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.d.ts +16 -0
- package/dist/zero-token/providers/provider-runtime-registry.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.js +88 -0
- package/dist/zero-token/providers/provider-runtime-registry.js.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.d.ts +2 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.js +26 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.js.map +1 -0
- package/dist/zero-token/providers/provider-types.d.ts +72 -0
- package/dist/zero-token/providers/provider-types.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-types.js +2 -0
- package/dist/zero-token/providers/provider-types.js.map +1 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.d.ts +4 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.js +58 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.js.map +1 -0
- package/dist/zero-token/providers/qwen-web-auth.d.ts +3 -0
- package/dist/zero-token/providers/qwen-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/qwen-web-auth.js +67 -0
- package/dist/zero-token/providers/qwen-web-auth.js.map +1 -0
- package/dist/zero-token/providers/qwen-web-models.d.ts +3 -0
- package/dist/zero-token/providers/qwen-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/qwen-web-models.js +27 -0
- package/dist/zero-token/providers/qwen-web-models.js.map +1 -0
- package/dist/zero-token/providers/registry.d.ts +4 -0
- package/dist/zero-token/providers/registry.d.ts.map +1 -0
- package/dist/zero-token/providers/registry.js +39 -0
- package/dist/zero-token/providers/registry.js.map +1 -0
- package/dist/zero-token/providers/registry.next.d.ts +4 -0
- package/dist/zero-token/providers/registry.next.d.ts.map +1 -0
- package/dist/zero-token/providers/registry.next.js +30 -0
- package/dist/zero-token/providers/registry.next.js.map +1 -0
- package/dist/zero-token/providers/remote-browser-session.d.ts +7 -0
- package/dist/zero-token/providers/remote-browser-session.d.ts.map +1 -0
- package/dist/zero-token/providers/remote-browser-session.js +85 -0
- package/dist/zero-token/providers/remote-browser-session.js.map +1 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.js +44 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.js.map +1 -0
- package/dist/zero-token/quota/quota-manager.d.ts +2 -0
- package/dist/zero-token/quota/quota-manager.d.ts.map +1 -0
- package/dist/zero-token/quota/quota-manager.js +2 -0
- package/dist/zero-token/quota/quota-manager.js.map +1 -0
- package/dist/zero-token/quota/runtime-quota-manager.d.ts +19 -0
- package/dist/zero-token/quota/runtime-quota-manager.d.ts.map +1 -0
- package/dist/zero-token/quota/runtime-quota-manager.js +118 -0
- package/dist/zero-token/quota/runtime-quota-manager.js.map +1 -0
- package/dist/zero-token/session/session-service.d.ts +11 -0
- package/dist/zero-token/session/session-service.d.ts.map +1 -0
- package/dist/zero-token/session/session-service.js +169 -0
- package/dist/zero-token/session/session-service.js.map +1 -0
- package/dist/zero-token/session/session-types.d.ts +22 -0
- package/dist/zero-token/session/session-types.d.ts.map +1 -0
- package/dist/zero-token/session/session-types.js +2 -0
- package/dist/zero-token/session/session-types.js.map +1 -0
- package/dist/zero-token/storage/atomic-json-store.d.ts +10 -0
- package/dist/zero-token/storage/atomic-json-store.d.ts.map +1 -0
- package/dist/zero-token/storage/atomic-json-store.js +60 -0
- package/dist/zero-token/storage/atomic-json-store.js.map +1 -0
- package/package.json +59 -0
- package/web-console/dist/assets/index-B_4vEorW.css +1 -0
- package/web-console/dist/assets/index-DFs1Oo-1.js +27 -0
- package/web-console/dist/index.html +20 -0
- package/web-console/dist/nova-mark.svg +18 -0
- package/web-console/dist/nova-network.svg +36 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ChatGPTNotPlusError, ChatGPTNetworkError } from "./chatgpt-errors.js";
|
|
2
|
+
import logger from "../../logger.js";
|
|
3
|
+
const ACCOUNT_API = "https://chatgpt.com/api/auth/session";
|
|
4
|
+
/**
|
|
5
|
+
* Ruft die Account-Informationen von ChatGPT ab und prüft den Plus-Status.
|
|
6
|
+
*
|
|
7
|
+
* Verwendet die extrahierte Session (Cookies + AccessToken) für die Anfrage.
|
|
8
|
+
*/
|
|
9
|
+
export async function fetchAccountInfo(session) {
|
|
10
|
+
const headers = {
|
|
11
|
+
Accept: "application/json",
|
|
12
|
+
"User-Agent": session.userAgent ?? "zero-token/0.1.0",
|
|
13
|
+
Cookie: session.cookies,
|
|
14
|
+
};
|
|
15
|
+
if (session.accessToken) {
|
|
16
|
+
headers["Authorization"] = `Bearer ${session.accessToken}`;
|
|
17
|
+
}
|
|
18
|
+
logger.info("Prüfe Account-Status bei ChatGPT …");
|
|
19
|
+
let response;
|
|
20
|
+
try {
|
|
21
|
+
response = await fetch(ACCOUNT_API, { headers, redirect: "follow" });
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
throw new ChatGPTNetworkError(`Netzwerkfehler beim Abruf der Account-Informationen: ${err instanceof Error ? err.message : String(err)}`);
|
|
25
|
+
}
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new ChatGPTNetworkError(`ChatGPT API antwortete mit Status ${response.status}.`, response.status);
|
|
28
|
+
}
|
|
29
|
+
let body;
|
|
30
|
+
try {
|
|
31
|
+
body = await response.json();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
throw new ChatGPTNetworkError("Ungültige JSON-Antwort von ChatGPT API.");
|
|
35
|
+
}
|
|
36
|
+
if (!body || typeof body !== "object") {
|
|
37
|
+
throw new ChatGPTNetworkError("Unerwartetes Antwortformat von ChatGPT API.");
|
|
38
|
+
}
|
|
39
|
+
const data = body;
|
|
40
|
+
const user = data.user;
|
|
41
|
+
const accountInfo = {
|
|
42
|
+
email: typeof user?.email === "string" ? user.email : undefined,
|
|
43
|
+
userId: typeof user?.id === "string" ? user.id : undefined,
|
|
44
|
+
name: typeof user?.name === "string" ? user.name : undefined,
|
|
45
|
+
plan: "unknown",
|
|
46
|
+
workspaceId: typeof data.workspaceId === "string" ? data.workspaceId : undefined,
|
|
47
|
+
};
|
|
48
|
+
// Prüfe Plus-Status
|
|
49
|
+
const plan = typeof data.plan === "string" ? data.plan : user?.plan;
|
|
50
|
+
const isPlus = plan === "plus" ||
|
|
51
|
+
(typeof user?.plan === "string" && user.plan === "plus");
|
|
52
|
+
if (isPlus) {
|
|
53
|
+
accountInfo.plan = "plus";
|
|
54
|
+
}
|
|
55
|
+
logger.info({ plan: accountInfo.plan }, "Account-Status ermittelt.");
|
|
56
|
+
return accountInfo;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Prüft, ob der Account Plus-Zugriff hat. Wirft ChatGPTNotPlusError, falls nicht.
|
|
60
|
+
*/
|
|
61
|
+
export function requirePlusPlan(info) {
|
|
62
|
+
if (info.plan !== "plus") {
|
|
63
|
+
throw new ChatGPTNotPlusError();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=chatgpt-account-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-account-info.js","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-account-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ChatGPTBrowserConfig, LoginResult } from "./chatgpt-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Führt den vollständigen ChatGPT-Plus-Login durch.
|
|
4
|
+
*
|
|
5
|
+
* Dies ist ein Legacy-Wrapper um das neue provider-agnostische Login-System.
|
|
6
|
+
* Bei Erfolg wird der Account lokal gespeichert.
|
|
7
|
+
*/
|
|
8
|
+
export declare function login(config?: ChatGPTBrowserConfig): Promise<LoginResult>;
|
|
9
|
+
//# sourceMappingURL=chatgpt-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-auth.d.ts","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAM5E;;;;;GAKG;AACH,wBAAsB,KAAK,CACzB,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,WAAW,CAAC,CA4DtB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { login as registryLogin } from "../registry.js";
|
|
2
|
+
import { createAccount, updateAccount } from "../../accounts/account-service.js";
|
|
3
|
+
import logger from "../../logger.js";
|
|
4
|
+
/**
|
|
5
|
+
* Führt den vollständigen ChatGPT-Plus-Login durch.
|
|
6
|
+
*
|
|
7
|
+
* Dies ist ein Legacy-Wrapper um das neue provider-agnostische Login-System.
|
|
8
|
+
* Bei Erfolg wird der Account lokal gespeichert.
|
|
9
|
+
*/
|
|
10
|
+
export async function login(config = {}) {
|
|
11
|
+
try {
|
|
12
|
+
const providerConfig = {
|
|
13
|
+
cdpPort: config.cdpPort,
|
|
14
|
+
loginTimeout: config.loginTimeout,
|
|
15
|
+
proxy: config.proxy,
|
|
16
|
+
headless: config.headless,
|
|
17
|
+
};
|
|
18
|
+
const result = await registryLogin("chatgpt", providerConfig);
|
|
19
|
+
if (!result.ok) {
|
|
20
|
+
return { ok: false, reason: mapFailure(result.reason) };
|
|
21
|
+
}
|
|
22
|
+
// Account speichern
|
|
23
|
+
const label = result.info.email
|
|
24
|
+
? result.info.email.split("@")[0]
|
|
25
|
+
: "ChatGPT Plus";
|
|
26
|
+
const account = await createAccount(label, "chatgpt");
|
|
27
|
+
await updateAccount(account.id, {
|
|
28
|
+
email: result.info.email,
|
|
29
|
+
userId: result.info.userId,
|
|
30
|
+
plan: result.info.plan === "plus" ? "plus" : "unknown",
|
|
31
|
+
cookies: result.session.cookies,
|
|
32
|
+
accessToken: result.session.accessToken,
|
|
33
|
+
userAgent: result.session.userAgent,
|
|
34
|
+
sessionStatus: "valid",
|
|
35
|
+
lastValidatedAt: new Date().toISOString(),
|
|
36
|
+
});
|
|
37
|
+
logger.info({ accountId: account.id }, "Account erfolgreich gespeichert.");
|
|
38
|
+
return {
|
|
39
|
+
ok: true,
|
|
40
|
+
session: {
|
|
41
|
+
cookies: result.session.cookies,
|
|
42
|
+
accessToken: result.session.accessToken,
|
|
43
|
+
userAgent: result.session.userAgent,
|
|
44
|
+
},
|
|
45
|
+
info: {
|
|
46
|
+
email: result.info.email,
|
|
47
|
+
userId: result.info.userId,
|
|
48
|
+
name: result.info.name,
|
|
49
|
+
plan: result.info.plan === "plus" ? "plus" : "unknown",
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
55
|
+
logger.error({ err }, "Login fehlgeschlagen.");
|
|
56
|
+
if (message.includes("Browser konnte nicht geöffnet")) {
|
|
57
|
+
return { ok: false, reason: "browser-launch-failed" };
|
|
58
|
+
}
|
|
59
|
+
if (message.includes("Login nicht innerhalb")) {
|
|
60
|
+
return { ok: false, reason: "login-timeout" };
|
|
61
|
+
}
|
|
62
|
+
return { ok: false, reason: "unknown-error" };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function mapFailure(reason) {
|
|
66
|
+
switch (reason) {
|
|
67
|
+
case "browser-launch-failed":
|
|
68
|
+
return "browser-launch-failed";
|
|
69
|
+
case "login-timeout":
|
|
70
|
+
return "login-timeout";
|
|
71
|
+
case "plan-not-supported":
|
|
72
|
+
return "not-plus-account";
|
|
73
|
+
case "session-extraction-failed":
|
|
74
|
+
return "session-extraction-failed";
|
|
75
|
+
case "user-cancelled":
|
|
76
|
+
return "user-cancelled";
|
|
77
|
+
default:
|
|
78
|
+
return "unknown-error";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=chatgpt-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-auth.js","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Browser, BrowserContext, Page } from "playwright";
|
|
2
|
+
import type { ChatGPTBrowserConfig } from "./chatgpt-types.js";
|
|
3
|
+
export interface OpenBrowserResult {
|
|
4
|
+
browser: Browser;
|
|
5
|
+
context: BrowserContext;
|
|
6
|
+
page: Page;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Öffnet einen Chromium-Browser (entweder via CDP an bestehendem Chrome
|
|
10
|
+
* oder neu gestartet) und navigiert zu chatgpt.com.
|
|
11
|
+
*
|
|
12
|
+
* Der Benutzer muss sich manuell anmelden. Die Funktion wartet,
|
|
13
|
+
* bis die Seite den Login-Zustand erkennt.
|
|
14
|
+
*/
|
|
15
|
+
export declare function openChatGPTBrowser(config?: ChatGPTBrowserConfig): Promise<OpenBrowserResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Wartet darauf, dass der Benutzer sich bei ChatGPT anmeldet.
|
|
18
|
+
* Erkennt Login anhand der URL (Umschaltung von /auth/* → /).
|
|
19
|
+
*/
|
|
20
|
+
export declare function waitForLogin(page: Page, timeout?: number): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=chatgpt-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-browser.d.ts","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAM/D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAkB5B;AAyBD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,MAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { chromium } from "playwright";
|
|
2
|
+
import { ChatGPTBrowserError } from "./chatgpt-errors.js";
|
|
3
|
+
import logger from "../../logger.js";
|
|
4
|
+
const CHATGPT_URL = "https://chatgpt.com";
|
|
5
|
+
/**
|
|
6
|
+
* Öffnet einen Chromium-Browser (entweder via CDP an bestehendem Chrome
|
|
7
|
+
* oder neu gestartet) und navigiert zu chatgpt.com.
|
|
8
|
+
*
|
|
9
|
+
* Der Benutzer muss sich manuell anmelden. Die Funktion wartet,
|
|
10
|
+
* bis die Seite den Login-Zustand erkennt.
|
|
11
|
+
*/
|
|
12
|
+
export async function openChatGPTBrowser(config = {}) {
|
|
13
|
+
const timeout = config.loginTimeout ?? 300_000;
|
|
14
|
+
try {
|
|
15
|
+
const browser = await launchBrowser(config);
|
|
16
|
+
const context = browser.contexts()[0] ?? (await browser.newContext());
|
|
17
|
+
const page = context.pages()[0] ?? (await context.newPage());
|
|
18
|
+
logger.info("Öffne chatgpt.com …");
|
|
19
|
+
await page.goto(CHATGPT_URL, { waitUntil: "domcontentloaded", timeout: 30_000 });
|
|
20
|
+
return { browser, context, page };
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
throw new ChatGPTBrowserError("Browser konnte nicht geöffnet werden.", err instanceof Error ? err : undefined);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function launchBrowser(config) {
|
|
27
|
+
if (config.cdpPort) {
|
|
28
|
+
logger.info({ cdpPort: config.cdpPort }, "Verbinde zu bestehendem Chrome über CDP …");
|
|
29
|
+
try {
|
|
30
|
+
return await chromium.connectOverCDP(`http://127.0.0.1:${config.cdpPort}`);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
throw new ChatGPTBrowserError(`Keine Verbindung zu Chrome auf Port ${config.cdpPort} möglich. ` +
|
|
34
|
+
"Stelle sicher, dass Chrome mit --remote-debugging-port=9222 läuft.", err instanceof Error ? err : undefined);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
logger.info("Starte Chromium (nicht-headless) …");
|
|
38
|
+
return await chromium.launch({
|
|
39
|
+
headless: config.headless ?? false, // user needs to see the login page
|
|
40
|
+
...(config.proxy && {
|
|
41
|
+
proxy: { server: config.proxy },
|
|
42
|
+
}),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Wartet darauf, dass der Benutzer sich bei ChatGPT anmeldet.
|
|
47
|
+
* Erkennt Login anhand der URL (Umschaltung von /auth/* → /).
|
|
48
|
+
*/
|
|
49
|
+
export async function waitForLogin(page, timeout = 300_000) {
|
|
50
|
+
const start = Date.now();
|
|
51
|
+
while (Date.now() - start < timeout) {
|
|
52
|
+
const url = page.url();
|
|
53
|
+
// Successful login redirects away from auth pages
|
|
54
|
+
if (url.startsWith(CHATGPT_URL) && !url.includes("/auth/")) {
|
|
55
|
+
// Give the page a moment to fully hydrate
|
|
56
|
+
await page.waitForTimeout(1500);
|
|
57
|
+
logger.info("Login erkannt.");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
await page.waitForTimeout(500);
|
|
61
|
+
}
|
|
62
|
+
throw new ChatGPTBrowserError(`Login nicht innerhalb von ${timeout / 1000}s abgeschlossen.`);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=chatgpt-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-browser.js","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare class ChatGPTError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class ChatGPTBrowserError extends ChatGPTError {
|
|
5
|
+
cause?: Error | undefined;
|
|
6
|
+
constructor(message: string, cause?: Error | undefined);
|
|
7
|
+
}
|
|
8
|
+
export declare class ChatGPTLoginTimeoutError extends ChatGPTError {
|
|
9
|
+
constructor(timeoutMs: number);
|
|
10
|
+
}
|
|
11
|
+
export declare class ChatGPTNotPlusError extends ChatGPTError {
|
|
12
|
+
constructor();
|
|
13
|
+
}
|
|
14
|
+
export declare class ChatGPTSessionError extends ChatGPTError {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
/** Wrapper for fetch-level errors (network, proxy, DNS) */
|
|
18
|
+
export declare class ChatGPTNetworkError extends ChatGPTError {
|
|
19
|
+
statusCode?: number | undefined;
|
|
20
|
+
constructor(message: string, statusCode?: number | undefined);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=chatgpt-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-errors.d.ts","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IAG1C,KAAK,CAAC,EAAE,KAAK;gBADpB,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,KAAK,YAAA;CAKvB;AAED,qBAAa,wBAAyB,SAAQ,YAAY;gBAC5C,SAAS,EAAE,MAAM;CAO9B;AAED,qBAAa,mBAAoB,SAAQ,YAAY;;CAQpD;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,2DAA2D;AAC3D,qBAAa,mBAAoB,SAAQ,YAAY;IAG1C,UAAU,CAAC,EAAE,MAAM;gBAD1B,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA;CAK7B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export class ChatGPTError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "ChatGPTError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class ChatGPTBrowserError extends ChatGPTError {
|
|
8
|
+
cause;
|
|
9
|
+
constructor(message, cause) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.cause = cause;
|
|
12
|
+
this.name = "ChatGPTBrowserError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class ChatGPTLoginTimeoutError extends ChatGPTError {
|
|
16
|
+
constructor(timeoutMs) {
|
|
17
|
+
super(`Login-Zeitüberschreitung nach ${timeoutMs / 1000}s. ` +
|
|
18
|
+
"Bitte melde dich manuell bei chatgpt.com an.");
|
|
19
|
+
this.name = "ChatGPTLoginTimeoutError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class ChatGPTNotPlusError extends ChatGPTError {
|
|
23
|
+
constructor() {
|
|
24
|
+
super("Dieser ChatGPT-Account hat keinen Plus-Zugriff. " +
|
|
25
|
+
"AI Zero Token benötigt einen aktiven ChatGPT Plus Account.");
|
|
26
|
+
this.name = "ChatGPTNotPlusError";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class ChatGPTSessionError extends ChatGPTError {
|
|
30
|
+
constructor(message) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.name = "ChatGPTSessionError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Wrapper for fetch-level errors (network, proxy, DNS) */
|
|
36
|
+
export class ChatGPTNetworkError extends ChatGPTError {
|
|
37
|
+
statusCode;
|
|
38
|
+
constructor(message, statusCode) {
|
|
39
|
+
super(message);
|
|
40
|
+
this.statusCode = statusCode;
|
|
41
|
+
this.name = "ChatGPTNetworkError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=chatgpt-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-errors.js","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAG1C;IAFT,YACE,OAAe,EACR,KAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,UAAK,GAAL,KAAK,CAAQ;QAGpB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,YAAY;IACxD,YAAY,SAAiB;QAC3B,KAAK,CACH,iCAAiC,SAAS,GAAG,IAAI,KAAK;YACpD,8CAA8C,CACjD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD;QACE,KAAK,CACH,kDAAkD;YAChD,4DAA4D,CAC/D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAG1C;IAFT,YACE,OAAe,EACR,UAAmB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,eAAU,GAAV,UAAU,CAAS;QAG1B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Page } from "playwright";
|
|
2
|
+
import type { ChatGPTSessionData } from "./chatgpt-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Extrahiert Session-Daten aus der aktuellen ChatGPT-Seite:
|
|
5
|
+
* - Cookies (als HTTP-Header-String)
|
|
6
|
+
* - AccessToken (aus localStorage)
|
|
7
|
+
* - User-Agent
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractSessionData(page: Page): Promise<ChatGPTSessionData>;
|
|
10
|
+
//# sourceMappingURL=chatgpt-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-session.d.ts","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAI7D;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkBhF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ChatGPTSessionError } from "./chatgpt-errors.js";
|
|
2
|
+
import logger from "../../logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Extrahiert Session-Daten aus der aktuellen ChatGPT-Seite:
|
|
5
|
+
* - Cookies (als HTTP-Header-String)
|
|
6
|
+
* - AccessToken (aus localStorage)
|
|
7
|
+
* - User-Agent
|
|
8
|
+
*/
|
|
9
|
+
export async function extractSessionData(page) {
|
|
10
|
+
try {
|
|
11
|
+
const cookies = await extractCookies(page);
|
|
12
|
+
const accessToken = await extractAccessToken(page);
|
|
13
|
+
const userAgent = await page.evaluate(() => navigator.userAgent);
|
|
14
|
+
logger.info("Session-Daten erfolgreich extrahiert.");
|
|
15
|
+
return {
|
|
16
|
+
cookies,
|
|
17
|
+
accessToken: accessToken ?? undefined,
|
|
18
|
+
userAgent,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
throw new ChatGPTSessionError("Session-Daten konnten nicht extrahiert werden.");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function extractCookies(page) {
|
|
26
|
+
const browserCookies = await page.context().cookies();
|
|
27
|
+
const relevant = browserCookies.filter((c) => c.name.includes("__Secure-next-auth") ||
|
|
28
|
+
c.name.includes("__cf_bm") ||
|
|
29
|
+
c.name.includes("cf_clearance") ||
|
|
30
|
+
c.name === "session_id" ||
|
|
31
|
+
c.name === "__Host-authjs.csrf-token");
|
|
32
|
+
if (relevant.length === 0) {
|
|
33
|
+
// Fallback: alle Cookies nehmen
|
|
34
|
+
logger.warn("Keine bekannten Session-Cookies gefunden, nehme alle Cookies.");
|
|
35
|
+
}
|
|
36
|
+
const cookieMap = new Map();
|
|
37
|
+
for (const c of (relevant.length ? relevant : browserCookies)) {
|
|
38
|
+
cookieMap.set(c.name, c.value);
|
|
39
|
+
}
|
|
40
|
+
return Array.from(cookieMap.entries())
|
|
41
|
+
.map(([name, value]) => `${name}=${value}`)
|
|
42
|
+
.join("; ");
|
|
43
|
+
}
|
|
44
|
+
async function extractAccessToken(page) {
|
|
45
|
+
try {
|
|
46
|
+
// ChatGPT speichert den AccessToken in verschiedenen localStorage-Keys
|
|
47
|
+
const possibleKeys = [
|
|
48
|
+
"accessToken",
|
|
49
|
+
"oidc.accessToken",
|
|
50
|
+
"next-auth.accessToken",
|
|
51
|
+
"__session",
|
|
52
|
+
];
|
|
53
|
+
for (const key of possibleKeys) {
|
|
54
|
+
const value = await page.evaluate((k) => {
|
|
55
|
+
try {
|
|
56
|
+
return localStorage.getItem(k);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}, key);
|
|
62
|
+
if (value)
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=chatgpt-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-session.js","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAU;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEjE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAErD,OAAO;YACL,OAAO;YACP,WAAW,EAAE,WAAW,IAAI,SAAS;YACrC,SAAS;SACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,mBAAmB,CAC3B,gDAAgD,CACjD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAU;IACtC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IAEtD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC/B,CAAC,CAAC,IAAI,KAAK,YAAY;QACvB,CAAC,CAAC,IAAI,KAAK,0BAA0B,CACxC,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,gCAAgC;QAChC,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9D,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;SAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAU;IAC1C,IAAI,CAAC;QACH,uEAAuE;QACvE,MAAM,YAAY,GAAG;YACnB,aAAa;YACb,kBAAkB;YAClB,uBAAuB;YACvB,WAAW;SACZ,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAS,EAAE,EAAE;gBAC9C,IAAI,CAAC;oBACH,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface ChatGPTBrowserConfig {
|
|
2
|
+
/** CDP remote port (e.g. 9222). If set, connects to existing Chrome. */
|
|
3
|
+
cdpPort?: number;
|
|
4
|
+
/** Timeout for waiting on login, in ms (default: 300000 = 5 min) */
|
|
5
|
+
loginTimeout?: number;
|
|
6
|
+
/** Optional proxy URL for the browser */
|
|
7
|
+
proxy?: string;
|
|
8
|
+
/** Whether to show the browser window (default: true for login) */
|
|
9
|
+
headless?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ChatGPTSessionData {
|
|
12
|
+
cookies: string;
|
|
13
|
+
accessToken?: string;
|
|
14
|
+
userAgent?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ChatGPTAccountInfo {
|
|
17
|
+
email?: string;
|
|
18
|
+
userId?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
plan: "plus" | "unknown";
|
|
21
|
+
workspaceId?: string;
|
|
22
|
+
}
|
|
23
|
+
export type LoginResult = {
|
|
24
|
+
ok: true;
|
|
25
|
+
session: ChatGPTSessionData;
|
|
26
|
+
info: ChatGPTAccountInfo;
|
|
27
|
+
} | {
|
|
28
|
+
ok: false;
|
|
29
|
+
reason: LoginFailureReason;
|
|
30
|
+
};
|
|
31
|
+
export type LoginFailureReason = "browser-launch-failed" | "login-timeout" | "not-plus-account" | "session-extraction-failed" | "user-cancelled" | "unknown-error";
|
|
32
|
+
export interface BrowserInstance {
|
|
33
|
+
/** Close the browser / CDP session */
|
|
34
|
+
close(): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=chatgpt-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-types.d.ts","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,GACnE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAC1B,uBAAuB,GACvB,eAAe,GACf,kBAAkB,GAClB,2BAA2B,GAC3B,gBAAgB,GAChB,eAAe,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-types.js","sourceRoot":"","sources":["../../../../src/zero-token/providers/chatgpt/chatgpt-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProviderAuthFunction, ProviderAccountInfo } from "./provider-types.js";
|
|
2
|
+
type ChatGptPlan = ProviderAccountInfo["plan"];
|
|
3
|
+
/**
|
|
4
|
+
* ChatGPT-Web-Auth: Browser öffnen, auf manuellen Login warten,
|
|
5
|
+
* Session-Cookies und AccessToken extrahieren.
|
|
6
|
+
*/
|
|
7
|
+
export declare const auth: ProviderAuthFunction;
|
|
8
|
+
export declare function detectChatGptPlan(value: unknown, depth?: number, visited?: Set<object>): ChatGptPlan;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=chatgpt-web-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-web-auth.d.ts","sourceRoot":"","sources":["../../../src/zero-token/providers/chatgpt-web-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAS7B,KAAK,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,oBAgDlB,CAAC;AAkCF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,KAAK,SAAI,EACT,OAAO,cAAoB,GAC1B,WAAW,CAuCb"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { openProviderBrowser, waitForUrlLogin, extractCookies, extractLocalStorage } from "./browser.js";
|
|
2
|
+
const CHATGPT_URL = "https://chatgpt.com";
|
|
3
|
+
const AUTH_PATTERNS = ["/auth/"];
|
|
4
|
+
const COOKIE_NAMES = ["__Secure-next-auth", "__cf_bm", "cf_clearance", "session_id", "__Host-authjs.csrf-token"];
|
|
5
|
+
const TOKEN_KEYS = ["accessToken", "oidc.accessToken", "next-auth.accessToken", "__session"];
|
|
6
|
+
const PLAN_FIELD_PATTERN = /(plan|tier|subscription|account.?type|workspace.?type|product)/i;
|
|
7
|
+
/**
|
|
8
|
+
* ChatGPT-Web-Auth: Browser öffnen, auf manuellen Login warten,
|
|
9
|
+
* Session-Cookies und AccessToken extrahieren.
|
|
10
|
+
*/
|
|
11
|
+
export const auth = async (config) => {
|
|
12
|
+
let browserInstance = null;
|
|
13
|
+
try {
|
|
14
|
+
const { browser, page } = await openProviderBrowser({
|
|
15
|
+
targetUrl: CHATGPT_URL,
|
|
16
|
+
cdpUrl: config.cdpUrl,
|
|
17
|
+
cdpPort: config.cdpPort,
|
|
18
|
+
headless: config.headless,
|
|
19
|
+
proxy: config.proxy,
|
|
20
|
+
loginTimeout: config.loginTimeout,
|
|
21
|
+
});
|
|
22
|
+
browserInstance = browser;
|
|
23
|
+
await waitForUrlLogin(page, CHATGPT_URL, AUTH_PATTERNS, config.loginTimeout ?? 300_000);
|
|
24
|
+
const cookies = await extractCookies(page, COOKIE_NAMES);
|
|
25
|
+
const accessToken = (await extractLocalStorage(page, TOKEN_KEYS)) ?? undefined;
|
|
26
|
+
const userAgent = await page.evaluate(() => navigator.userAgent);
|
|
27
|
+
const info = await fetchChatGPTAccountInfo({ cookies, accessToken, userAgent });
|
|
28
|
+
// ChatGPT exposes the paid-plan label inconsistently. Reject only an
|
|
29
|
+
// explicitly detected free account; an authenticated session whose plan is
|
|
30
|
+
// not present in /api/auth/session is kept and validated by real requests.
|
|
31
|
+
if (info.plan === "free") {
|
|
32
|
+
return { ok: false, reason: "plan-not-supported" };
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
ok: true,
|
|
36
|
+
session: { cookies, accessToken: accessToken ?? undefined, userAgent },
|
|
37
|
+
info,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
42
|
+
if (msg.includes("Login nicht innerhalb")) {
|
|
43
|
+
return { ok: false, reason: "login-timeout" };
|
|
44
|
+
}
|
|
45
|
+
if (msg.includes("Browser konnte nicht geöffnet")) {
|
|
46
|
+
return { ok: false, reason: "browser-launch-failed" };
|
|
47
|
+
}
|
|
48
|
+
return { ok: false, reason: "unknown-error" };
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
if (browserInstance) {
|
|
52
|
+
await browserInstance.close().catch(() => { });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
function normalizePlanValue(value) {
|
|
57
|
+
const normalized = value.trim().toLowerCase().replace(/[\s-]+/g, "_");
|
|
58
|
+
if (normalized === "plus" ||
|
|
59
|
+
normalized.includes("chatgpt_plus") ||
|
|
60
|
+
normalized.includes("plus_plan")) {
|
|
61
|
+
return "plus";
|
|
62
|
+
}
|
|
63
|
+
if (normalized === "pro" ||
|
|
64
|
+
normalized.includes("chatgpt_pro") ||
|
|
65
|
+
normalized.includes("team") ||
|
|
66
|
+
normalized.includes("business") ||
|
|
67
|
+
normalized.includes("enterprise")) {
|
|
68
|
+
return "pro";
|
|
69
|
+
}
|
|
70
|
+
if (normalized === "free" ||
|
|
71
|
+
normalized.includes("free_plan") ||
|
|
72
|
+
normalized.includes("free_tier")) {
|
|
73
|
+
return "free";
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
export function detectChatGptPlan(value, depth = 0, visited = new Set()) {
|
|
78
|
+
if (depth > 5 || value === null || value === undefined)
|
|
79
|
+
return "unknown";
|
|
80
|
+
if (typeof value === "string") {
|
|
81
|
+
return normalizePlanValue(value) ?? "unknown";
|
|
82
|
+
}
|
|
83
|
+
if (typeof value !== "object" || visited.has(value))
|
|
84
|
+
return "unknown";
|
|
85
|
+
visited.add(value);
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
for (const item of value) {
|
|
88
|
+
const detected = detectChatGptPlan(item, depth + 1, visited);
|
|
89
|
+
if (detected !== "unknown")
|
|
90
|
+
return detected;
|
|
91
|
+
}
|
|
92
|
+
return "unknown";
|
|
93
|
+
}
|
|
94
|
+
const record = value;
|
|
95
|
+
// Prefer values stored under plan-related keys to avoid matching unrelated
|
|
96
|
+
// text elsewhere in the session payload.
|
|
97
|
+
for (const [key, item] of Object.entries(record)) {
|
|
98
|
+
if (!PLAN_FIELD_PATTERN.test(key))
|
|
99
|
+
continue;
|
|
100
|
+
if (typeof item === "string") {
|
|
101
|
+
const detected = normalizePlanValue(item);
|
|
102
|
+
if (detected)
|
|
103
|
+
return detected;
|
|
104
|
+
}
|
|
105
|
+
const nested = detectChatGptPlan(item, depth + 1, visited);
|
|
106
|
+
if (nested !== "unknown")
|
|
107
|
+
return nested;
|
|
108
|
+
}
|
|
109
|
+
for (const item of Object.values(record)) {
|
|
110
|
+
if (typeof item !== "object" || item === null)
|
|
111
|
+
continue;
|
|
112
|
+
const nested = detectChatGptPlan(item, depth + 1, visited);
|
|
113
|
+
if (nested !== "unknown")
|
|
114
|
+
return nested;
|
|
115
|
+
}
|
|
116
|
+
return "unknown";
|
|
117
|
+
}
|
|
118
|
+
async function fetchChatGPTAccountInfo(session) {
|
|
119
|
+
const headers = {
|
|
120
|
+
Accept: "application/json",
|
|
121
|
+
"User-Agent": session.userAgent ?? "nova/0.3.0",
|
|
122
|
+
Cookie: session.cookies,
|
|
123
|
+
};
|
|
124
|
+
if (session.accessToken) {
|
|
125
|
+
headers["Authorization"] = `Bearer ${session.accessToken}`;
|
|
126
|
+
}
|
|
127
|
+
const response = await fetch("https://chatgpt.com/api/auth/session", {
|
|
128
|
+
headers,
|
|
129
|
+
redirect: "follow",
|
|
130
|
+
});
|
|
131
|
+
if (!response.ok) {
|
|
132
|
+
return { plan: "unknown" };
|
|
133
|
+
}
|
|
134
|
+
const data = (await response.json());
|
|
135
|
+
const user = data.user;
|
|
136
|
+
return {
|
|
137
|
+
email: typeof user?.email === "string" ? user.email : undefined,
|
|
138
|
+
userId: typeof user?.id === "string" ? user.id : undefined,
|
|
139
|
+
name: typeof user?.name === "string" ? user.name : undefined,
|
|
140
|
+
plan: detectChatGptPlan(data),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=chatgpt-web-auth.js.map
|