@xopcai/xopcbot 0.1.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 +132 -0
- package/README.zh-CN.md +130 -0
- package/dist/__tests__/core.test.d.ts +1 -0
- package/dist/__tests__/core.test.js +72 -0
- package/dist/__tests__/core.test.js.map +1 -0
- package/dist/agent/fallback/__tests__/index.test.d.ts +1 -0
- package/dist/agent/fallback/__tests__/index.test.js +111 -0
- package/dist/agent/fallback/__tests__/index.test.js.map +1 -0
- package/dist/agent/fallback/candidates.d.ts +23 -0
- package/dist/agent/fallback/candidates.js +62 -0
- package/dist/agent/fallback/candidates.js.map +1 -0
- package/dist/agent/fallback/error.d.ts +22 -0
- package/dist/agent/fallback/error.js +27 -0
- package/dist/agent/fallback/error.js.map +1 -0
- package/dist/agent/fallback/index.d.ts +6 -0
- package/dist/agent/fallback/index.js +5 -0
- package/dist/agent/fallback/index.js.map +1 -0
- package/dist/agent/fallback/reason.d.ts +7 -0
- package/dist/agent/fallback/reason.js +78 -0
- package/dist/agent/fallback/reason.js.map +1 -0
- package/dist/agent/fallback/runner.d.ts +22 -0
- package/dist/agent/fallback/runner.js +34 -0
- package/dist/agent/fallback/runner.js.map +1 -0
- package/dist/agent/helpers.d.ts +38 -0
- package/dist/agent/helpers.js +122 -0
- package/dist/agent/helpers.js.map +1 -0
- package/dist/agent/index.d.ts +7 -0
- package/dist/agent/index.js +7 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/memory/compaction.d.ts +63 -0
- package/dist/agent/memory/compaction.js +233 -0
- package/dist/agent/memory/compaction.js.map +1 -0
- package/dist/agent/memory/window.d.ts +29 -0
- package/dist/agent/memory/window.js +64 -0
- package/dist/agent/memory/window.js.map +1 -0
- package/dist/agent/model-manager.d.ts +80 -0
- package/dist/agent/model-manager.js +213 -0
- package/dist/agent/model-manager.js.map +1 -0
- package/dist/agent/prompt/heartbeat.d.ts +97 -0
- package/dist/agent/prompt/heartbeat.js +313 -0
- package/dist/agent/prompt/heartbeat.js.map +1 -0
- package/dist/agent/prompt/index.d.ts +65 -0
- package/dist/agent/prompt/index.js +215 -0
- package/dist/agent/prompt/index.js.map +1 -0
- package/dist/agent/prompt/memory/index.d.ts +37 -0
- package/dist/agent/prompt/memory/index.js +241 -0
- package/dist/agent/prompt/memory/index.js.map +1 -0
- package/dist/agent/prompt/modes.d.ts +44 -0
- package/dist/agent/prompt/modes.js +167 -0
- package/dist/agent/prompt/modes.js.map +1 -0
- package/dist/agent/prompt/safety.d.ts +88 -0
- package/dist/agent/prompt/safety.js +290 -0
- package/dist/agent/prompt/safety.js.map +1 -0
- package/dist/agent/service.d.ts +91 -0
- package/dist/agent/service.js +641 -0
- package/dist/agent/service.js.map +1 -0
- package/dist/agent/session-tracker.d.ts +73 -0
- package/dist/agent/session-tracker.js +137 -0
- package/dist/agent/session-tracker.js.map +1 -0
- package/dist/agent/skills/__tests__/test-framework.test.d.ts +4 -0
- package/dist/agent/skills/__tests__/test-framework.test.js +343 -0
- package/dist/agent/skills/__tests__/test-framework.test.js.map +1 -0
- package/dist/agent/skills/config.d.ts +58 -0
- package/dist/agent/skills/config.js +212 -0
- package/dist/agent/skills/config.js.map +1 -0
- package/dist/agent/skills/index.d.ts +25 -0
- package/dist/agent/skills/index.js +349 -0
- package/dist/agent/skills/index.js.map +1 -0
- package/dist/agent/skills/installer.d.ts +38 -0
- package/dist/agent/skills/installer.js +352 -0
- package/dist/agent/skills/installer.js.map +1 -0
- package/dist/agent/skills/scanner.d.ts +32 -0
- package/dist/agent/skills/scanner.js +265 -0
- package/dist/agent/skills/scanner.js.map +1 -0
- package/dist/agent/skills/test-framework.d.ts +107 -0
- package/dist/agent/skills/test-framework.js +607 -0
- package/dist/agent/skills/test-framework.js.map +1 -0
- package/dist/agent/skills/types.d.ts +181 -0
- package/dist/agent/skills/types.js +7 -0
- package/dist/agent/skills/types.js.map +1 -0
- package/dist/agent/skills/watcher.d.ts +37 -0
- package/dist/agent/skills/watcher.js +124 -0
- package/dist/agent/skills/watcher.js.map +1 -0
- package/dist/agent/tools/communication.d.ts +18 -0
- package/dist/agent/tools/communication.js +56 -0
- package/dist/agent/tools/communication.js.map +1 -0
- package/dist/agent/tools/edit-diff.d.ts +21 -0
- package/dist/agent/tools/edit-diff.js +69 -0
- package/dist/agent/tools/edit-diff.js.map +1 -0
- package/dist/agent/tools/edit.d.ts +13 -0
- package/dist/agent/tools/edit.js +65 -0
- package/dist/agent/tools/edit.js.map +1 -0
- package/dist/agent/tools/find.d.ts +24 -0
- package/dist/agent/tools/find.js +99 -0
- package/dist/agent/tools/find.js.map +1 -0
- package/dist/agent/tools/grep.d.ts +33 -0
- package/dist/agent/tools/grep.js +183 -0
- package/dist/agent/tools/grep.js.map +1 -0
- package/dist/agent/tools/index.d.ts +13 -0
- package/dist/agent/tools/index.js +18 -0
- package/dist/agent/tools/index.js.map +1 -0
- package/dist/agent/tools/list-dir.d.ts +6 -0
- package/dist/agent/tools/list-dir.js +37 -0
- package/dist/agent/tools/list-dir.js.map +1 -0
- package/dist/agent/tools/memory-tool.d.ts +14 -0
- package/dist/agent/tools/memory-tool.js +81 -0
- package/dist/agent/tools/memory-tool.js.map +1 -0
- package/dist/agent/tools/path-utils.d.ts +4 -0
- package/dist/agent/tools/path-utils.js +13 -0
- package/dist/agent/tools/path-utils.js.map +1 -0
- package/dist/agent/tools/read.d.ts +7 -0
- package/dist/agent/tools/read.js +47 -0
- package/dist/agent/tools/read.js.map +1 -0
- package/dist/agent/tools/send-media.d.ts +18 -0
- package/dist/agent/tools/send-media.js +104 -0
- package/dist/agent/tools/send-media.js.map +1 -0
- package/dist/agent/tools/shell.d.ts +13 -0
- package/dist/agent/tools/shell.js +114 -0
- package/dist/agent/tools/shell.js.map +1 -0
- package/dist/agent/tools/truncate.d.ts +36 -0
- package/dist/agent/tools/truncate.js +98 -0
- package/dist/agent/tools/truncate.js.map +1 -0
- package/dist/agent/tools/web.d.ts +14 -0
- package/dist/agent/tools/web.js +109 -0
- package/dist/agent/tools/web.js.map +1 -0
- package/dist/agent/tools/write.d.ts +7 -0
- package/dist/agent/tools/write.js +35 -0
- package/dist/agent/tools/write.js.map +1 -0
- package/dist/agent/types.d.ts +8 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/typing.d.ts +9 -0
- package/dist/agent/typing.js +32 -0
- package/dist/agent/typing.js.map +1 -0
- package/dist/auth/index.d.ts +12 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth/anthropic.d.ts +7 -0
- package/dist/auth/oauth/anthropic.js +89 -0
- package/dist/auth/oauth/anthropic.js.map +1 -0
- package/dist/auth/oauth/github-copilot.d.ts +8 -0
- package/dist/auth/oauth/github-copilot.js +35 -0
- package/dist/auth/oauth/github-copilot.js.map +1 -0
- package/dist/auth/oauth/google-antigravity.d.ts +7 -0
- package/dist/auth/oauth/google-antigravity.js +27 -0
- package/dist/auth/oauth/google-antigravity.js.map +1 -0
- package/dist/auth/oauth/google-gemini-cli.d.ts +7 -0
- package/dist/auth/oauth/google-gemini-cli.js +28 -0
- package/dist/auth/oauth/google-gemini-cli.js.map +1 -0
- package/dist/auth/oauth/index.d.ts +14 -0
- package/dist/auth/oauth/index.js +15 -0
- package/dist/auth/oauth/index.js.map +1 -0
- package/dist/auth/oauth/kimi.d.ts +8 -0
- package/dist/auth/oauth/kimi.js +104 -0
- package/dist/auth/oauth/kimi.js.map +1 -0
- package/dist/auth/oauth/minimax.d.ts +8 -0
- package/dist/auth/oauth/minimax.js +109 -0
- package/dist/auth/oauth/minimax.js.map +1 -0
- package/dist/auth/oauth/openai-codex.d.ts +7 -0
- package/dist/auth/oauth/openai-codex.js +33 -0
- package/dist/auth/oauth/openai-codex.js.map +1 -0
- package/dist/auth/oauth/pkce.d.ts +8 -0
- package/dist/auth/oauth/pkce.js +22 -0
- package/dist/auth/oauth/pkce.js.map +1 -0
- package/dist/auth/oauth/qwen.d.ts +7 -0
- package/dist/auth/oauth/qwen.js +114 -0
- package/dist/auth/oauth/qwen.js.map +1 -0
- package/dist/auth/oauth/types.d.ts +46 -0
- package/dist/auth/oauth/types.js +7 -0
- package/dist/auth/oauth/types.js.map +1 -0
- package/dist/auth/profiles/index.d.ts +16 -0
- package/dist/auth/profiles/index.js +17 -0
- package/dist/auth/profiles/index.js.map +1 -0
- package/dist/auth/profiles/oauth.d.ts +12 -0
- package/dist/auth/profiles/oauth.js +106 -0
- package/dist/auth/profiles/oauth.js.map +1 -0
- package/dist/auth/profiles/order.d.ts +19 -0
- package/dist/auth/profiles/order.js +63 -0
- package/dist/auth/profiles/order.js.map +1 -0
- package/dist/auth/profiles/profiles.d.ts +27 -0
- package/dist/auth/profiles/profiles.js +110 -0
- package/dist/auth/profiles/profiles.js.map +1 -0
- package/dist/auth/profiles/store.d.ts +17 -0
- package/dist/auth/profiles/store.js +234 -0
- package/dist/auth/profiles/store.js.map +1 -0
- package/dist/auth/profiles/types.d.ts +64 -0
- package/dist/auth/profiles/types.js +7 -0
- package/dist/auth/profiles/types.js.map +1 -0
- package/dist/auth/profiles/usage.d.ts +24 -0
- package/dist/auth/profiles/usage.js +99 -0
- package/dist/auth/profiles/usage.js.map +1 -0
- package/dist/auth/storage.d.ts +99 -0
- package/dist/auth/storage.js +315 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/bus/index.d.ts +3 -0
- package/dist/bus/index.js +2 -0
- package/dist/bus/index.js.map +1 -0
- package/dist/bus/queue.d.ts +20 -0
- package/dist/bus/queue.js +57 -0
- package/dist/bus/queue.js.map +1 -0
- package/dist/channels/__tests__/access-control.test.d.ts +4 -0
- package/dist/channels/__tests__/access-control.test.js +310 -0
- package/dist/channels/__tests__/access-control.test.js.map +1 -0
- package/dist/channels/__tests__/draft-stream.test.d.ts +4 -0
- package/dist/channels/__tests__/draft-stream.test.js +243 -0
- package/dist/channels/__tests__/draft-stream.test.js.map +1 -0
- package/dist/channels/__tests__/format.test.d.ts +4 -0
- package/dist/channels/__tests__/format.test.js +146 -0
- package/dist/channels/__tests__/format.test.js.map +1 -0
- package/dist/channels/__tests__/manager.test.d.ts +6 -0
- package/dist/channels/__tests__/manager.test.js +34 -0
- package/dist/channels/__tests__/manager.test.js.map +1 -0
- package/dist/channels/__tests__/typing-controller.test.d.ts +4 -0
- package/dist/channels/__tests__/typing-controller.test.js +109 -0
- package/dist/channels/__tests__/typing-controller.test.js.map +1 -0
- package/dist/channels/__tests__/update-offset-store.test.d.ts +7 -0
- package/dist/channels/__tests__/update-offset-store.test.js +35 -0
- package/dist/channels/__tests__/update-offset-store.test.js.map +1 -0
- package/dist/channels/access-control.d.ts +93 -0
- package/dist/channels/access-control.js +201 -0
- package/dist/channels/access-control.js.map +1 -0
- package/dist/channels/draft-stream.d.ts +55 -0
- package/dist/channels/draft-stream.js +211 -0
- package/dist/channels/draft-stream.js.map +1 -0
- package/dist/channels/format.d.ts +38 -0
- package/dist/channels/format.js +187 -0
- package/dist/channels/format.js.map +1 -0
- package/dist/channels/index.d.ts +22 -0
- package/dist/channels/index.js +23 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/manager.d.ts +30 -0
- package/dist/channels/manager.js +125 -0
- package/dist/channels/manager.js.map +1 -0
- package/dist/channels/telegram/__tests__/index.test.d.ts +4 -0
- package/dist/channels/telegram/__tests__/index.test.js +153 -0
- package/dist/channels/telegram/__tests__/index.test.js.map +1 -0
- package/dist/channels/telegram/__tests__/inline-keyboards.test.d.ts +4 -0
- package/dist/channels/telegram/__tests__/inline-keyboards.test.js +99 -0
- package/dist/channels/telegram/__tests__/inline-keyboards.test.js.map +1 -0
- package/dist/channels/telegram/client.d.ts +48 -0
- package/dist/channels/telegram/client.js +177 -0
- package/dist/channels/telegram/client.js.map +1 -0
- package/dist/channels/telegram/command-handler.d.ts +28 -0
- package/dist/channels/telegram/command-handler.js +209 -0
- package/dist/channels/telegram/command-handler.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +8 -0
- package/dist/channels/telegram/index.js +9 -0
- package/dist/channels/telegram/index.js.map +1 -0
- package/dist/channels/telegram/inline-keyboards.d.ts +20 -0
- package/dist/channels/telegram/inline-keyboards.js +38 -0
- package/dist/channels/telegram/inline-keyboards.js.map +1 -0
- package/dist/channels/telegram/plugin.d.ts +33 -0
- package/dist/channels/telegram/plugin.js +640 -0
- package/dist/channels/telegram/plugin.js.map +1 -0
- package/dist/channels/telegram/webhook.d.ts +31 -0
- package/dist/channels/telegram/webhook.js +129 -0
- package/dist/channels/telegram/webhook.js.map +1 -0
- package/dist/channels/types.d.ts +186 -0
- package/dist/channels/types.js +7 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/channels/typing-controller.d.ts +47 -0
- package/dist/channels/typing-controller.js +117 -0
- package/dist/channels/typing-controller.js.map +1 -0
- package/dist/channels/update-offset-store.d.ts +37 -0
- package/dist/channels/update-offset-store.js +165 -0
- package/dist/channels/update-offset-store.js.map +1 -0
- package/dist/channels/whatsapp/index.d.ts +4 -0
- package/dist/channels/whatsapp/index.js +5 -0
- package/dist/channels/whatsapp/index.js.map +1 -0
- package/dist/channels/whatsapp/plugin.d.ts +27 -0
- package/dist/channels/whatsapp/plugin.js +66 -0
- package/dist/channels/whatsapp/plugin.js.map +1 -0
- package/dist/cli/__tests__/registry.test.d.ts +1 -0
- package/dist/cli/__tests__/registry.test.js +366 -0
- package/dist/cli/__tests__/registry.test.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +1 -0
- package/dist/cli/commands/agent.js +216 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +6 -0
- package/dist/cli/commands/auth.js +440 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/config.d.ts +1 -0
- package/dist/cli/commands/config.js +135 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +1 -0
- package/dist/cli/commands/configure.js +173 -0
- package/dist/cli/commands/configure.js.map +1 -0
- package/dist/cli/commands/cron.d.ts +1 -0
- package/dist/cli/commands/cron.js +81 -0
- package/dist/cli/commands/cron.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts +1 -0
- package/dist/cli/commands/gateway.js +91 -0
- package/dist/cli/commands/gateway.js.map +1 -0
- package/dist/cli/commands/index.d.ts +0 -0
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/models.d.ts +1 -0
- package/dist/cli/commands/models.js +79 -0
- package/dist/cli/commands/models.js.map +1 -0
- package/dist/cli/commands/onboard.d.ts +1 -0
- package/dist/cli/commands/onboard.js +621 -0
- package/dist/cli/commands/onboard.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +1 -0
- package/dist/cli/commands/plugin.js +341 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/session.d.ts +1 -0
- package/dist/cli/commands/session.js +450 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/skills-test.d.ts +9 -0
- package/dist/cli/commands/skills-test.js +195 -0
- package/dist/cli/commands/skills-test.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +9 -0
- package/dist/cli/commands/skills.js +385 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/index.d.ts +19 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/registry.d.ts +43 -0
- package/dist/cli/registry.js +82 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/templates.d.ts +19 -0
- package/dist/cli/templates.js +191 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/cli/utils/colors.d.ts +13 -0
- package/dist/cli/utils/colors.js +16 -0
- package/dist/cli/utils/colors.js.map +1 -0
- package/dist/config/__tests__/diff.test.d.ts +1 -0
- package/dist/config/__tests__/diff.test.js +192 -0
- package/dist/config/__tests__/diff.test.js.map +1 -0
- package/dist/config/__tests__/loader.test.d.ts +1 -0
- package/dist/config/__tests__/loader.test.js +356 -0
- package/dist/config/__tests__/loader.test.js.map +1 -0
- package/dist/config/__tests__/paths.test.d.ts +1 -0
- package/dist/config/__tests__/paths.test.js +192 -0
- package/dist/config/__tests__/paths.test.js.map +1 -0
- package/dist/config/__tests__/reload.test.d.ts +1 -0
- package/dist/config/__tests__/reload.test.js +374 -0
- package/dist/config/__tests__/reload.test.js.map +1 -0
- package/dist/config/__tests__/rules.test.d.ts +1 -0
- package/dist/config/__tests__/rules.test.js +204 -0
- package/dist/config/__tests__/rules.test.js.map +1 -0
- package/dist/config/__tests__/schema.test.d.ts +1 -0
- package/dist/config/__tests__/schema.test.js +672 -0
- package/dist/config/__tests__/schema.test.js.map +1 -0
- package/dist/config/diff.d.ts +7 -0
- package/dist/config/diff.js +46 -0
- package/dist/config/diff.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +5 -0
- package/dist/config/loader.js +81 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +35 -0
- package/dist/config/paths.js +79 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/reload.d.ts +78 -0
- package/dist/config/reload.js +190 -0
- package/dist/config/reload.js.map +1 -0
- package/dist/config/rules.d.ts +42 -0
- package/dist/config/rules.js +114 -0
- package/dist/config/rules.js.map +1 -0
- package/dist/config/schema.d.ts +1340 -0
- package/dist/config/schema.js +611 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/cron/executor.d.ts +54 -0
- package/dist/cron/executor.js +364 -0
- package/dist/cron/executor.js.map +1 -0
- package/dist/cron/index.d.ts +5 -0
- package/dist/cron/index.js +6 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron/persistence.d.ts +61 -0
- package/dist/cron/persistence.js +188 -0
- package/dist/cron/persistence.js.map +1 -0
- package/dist/cron/service.d.ts +94 -0
- package/dist/cron/service.js +382 -0
- package/dist/cron/service.js.map +1 -0
- package/dist/cron/types.d.ts +119 -0
- package/dist/cron/types.js +3 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/cron/validation.d.ts +144 -0
- package/dist/cron/validation.js +113 -0
- package/dist/cron/validation.js.map +1 -0
- package/dist/errors/__tests__/index.test.d.ts +1 -0
- package/dist/errors/__tests__/index.test.js +301 -0
- package/dist/errors/__tests__/index.test.js.map +1 -0
- package/dist/errors/index.d.ts +114 -0
- package/dist/errors/index.js +278 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/gateway/hono/app.d.ts +7 -0
- package/dist/gateway/hono/app.js +668 -0
- package/dist/gateway/hono/app.js.map +1 -0
- package/dist/gateway/hono/index.d.ts +2 -0
- package/dist/gateway/hono/index.js +3 -0
- package/dist/gateway/hono/index.js.map +1 -0
- package/dist/gateway/hono/middleware/auth.d.ts +18 -0
- package/dist/gateway/hono/middleware/auth.js +79 -0
- package/dist/gateway/hono/middleware/auth.js.map +1 -0
- package/dist/gateway/hono/middleware/logger.d.ts +1 -0
- package/dist/gateway/hono/middleware/logger.js +17 -0
- package/dist/gateway/hono/middleware/logger.js.map +1 -0
- package/dist/gateway/hono/sse.d.ts +55 -0
- package/dist/gateway/hono/sse.js +224 -0
- package/dist/gateway/hono/sse.js.map +1 -0
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.js +5 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/protocol.d.ts +28 -0
- package/dist/gateway/protocol.js +14 -0
- package/dist/gateway/protocol.js.map +1 -0
- package/dist/gateway/server.d.ts +19 -0
- package/dist/gateway/server.js +64 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/service.d.ts +265 -0
- package/dist/gateway/service.js +621 -0
- package/dist/gateway/service.js.map +1 -0
- package/dist/gateway/static/root/assets/main-CfIxL-cL.js +2105 -0
- package/dist/gateway/static/root/assets/main-CfIxL-cL.js.map +1 -0
- package/dist/gateway/static/root/assets/main-DndcTCgX.css +1 -0
- package/dist/gateway/static/root/index.html +116 -0
- package/dist/heartbeat/index.d.ts +1 -0
- package/dist/heartbeat/index.js +2 -0
- package/dist/heartbeat/index.js.map +1 -0
- package/dist/heartbeat/service.d.ts +19 -0
- package/dist/heartbeat/service.js +61 -0
- package/dist/heartbeat/service.js.map +1 -0
- package/dist/plugin-sdk/index.d.ts +21 -0
- package/dist/plugin-sdk/index.js +12 -0
- package/dist/plugin-sdk/index.js.map +1 -0
- package/dist/plugins/__tests__/api.test.d.ts +1 -0
- package/dist/plugins/__tests__/api.test.js +164 -0
- package/dist/plugins/__tests__/api.test.js.map +1 -0
- package/dist/plugins/__tests__/hooks.test.d.ts +1 -0
- package/dist/plugins/__tests__/hooks.test.js +159 -0
- package/dist/plugins/__tests__/hooks.test.js.map +1 -0
- package/dist/plugins/__tests__/loader.test.d.ts +1 -0
- package/dist/plugins/__tests__/loader.test.js +120 -0
- package/dist/plugins/__tests__/loader.test.js.map +1 -0
- package/dist/plugins/api.d.ts +41 -0
- package/dist/plugins/api.js +131 -0
- package/dist/plugins/api.js.map +1 -0
- package/dist/plugins/hooks.d.ts +153 -0
- package/dist/plugins/hooks.js +172 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/dist/plugins/index.d.ts +11 -0
- package/dist/plugins/index.js +16 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/install.d.ts +59 -0
- package/dist/plugins/install.js +324 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +84 -0
- package/dist/plugins/loader.js +545 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +190 -0
- package/dist/plugins/types.js +7 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/providers/__tests__/registry.test.d.ts +1 -0
- package/dist/providers/__tests__/registry.test.js +110 -0
- package/dist/providers/__tests__/registry.test.js.map +1 -0
- package/dist/providers/api-strategies.d.ts +15 -0
- package/dist/providers/api-strategies.js +96 -0
- package/dist/providers/api-strategies.js.map +1 -0
- package/dist/providers/auto-discovery.d.ts +84 -0
- package/dist/providers/auto-discovery.js +236 -0
- package/dist/providers/auto-discovery.js.map +1 -0
- package/dist/providers/config.d.ts +25 -0
- package/dist/providers/config.js +42 -0
- package/dist/providers/config.js.map +1 -0
- package/dist/providers/index.d.ts +25 -0
- package/dist/providers/index.js +55 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/model-catalog.d.ts +205 -0
- package/dist/providers/model-catalog.js +1071 -0
- package/dist/providers/model-catalog.js.map +1 -0
- package/dist/providers/models-dev-data.d.ts +11 -0
- package/dist/providers/models-dev-data.js +1035 -0
- package/dist/providers/models-dev-data.js.map +1 -0
- package/dist/providers/models-dev.d.ts +30 -0
- package/dist/providers/models-dev.js +42 -0
- package/dist/providers/models-dev.js.map +1 -0
- package/dist/providers/pi-ai.d.ts +62 -0
- package/dist/providers/pi-ai.js +221 -0
- package/dist/providers/pi-ai.js.map +1 -0
- package/dist/providers/provider-catalog.d.ts +173 -0
- package/dist/providers/provider-catalog.js +834 -0
- package/dist/providers/provider-catalog.js.map +1 -0
- package/dist/providers/registry.d.ts +155 -0
- package/dist/providers/registry.js +524 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +95 -0
- package/dist/providers/types.js +7 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/session/chat-manager.d.ts +49 -0
- package/dist/session/chat-manager.js +167 -0
- package/dist/session/chat-manager.js.map +1 -0
- package/dist/session/chat-types.d.ts +53 -0
- package/dist/session/chat-types.js +63 -0
- package/dist/session/chat-types.js.map +1 -0
- package/dist/session/index.d.ts +5 -0
- package/dist/session/index.js +5 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +103 -0
- package/dist/session/manager.js +200 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/store.d.ts +114 -0
- package/dist/session/store.js +687 -0
- package/dist/session/store.js.map +1 -0
- package/dist/session/types.d.ts +88 -0
- package/dist/session/types.js +10 -0
- package/dist/session/types.js.map +1 -0
- package/dist/types/index.d.ts +177 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/providers.d.ts +67 -0
- package/dist/types/providers.js +7 -0
- package/dist/types/providers.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +17 -0
- package/dist/utils/frontmatter.js +104 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/helpers.d.ts +5 -0
- package/dist/utils/helpers.js +36 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/log-store.d.ts +78 -0
- package/dist/utils/log-store.js +432 -0
- package/dist/utils/log-store.js.map +1 -0
- package/dist/utils/logger.d.ts +127 -0
- package/dist/utils/logger.js +481 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logger.types.d.ts +152 -0
- package/dist/utils/logger.types.js +30 -0
- package/dist/utils/logger.types.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PKCE utilities using Web Crypto API.
|
|
3
|
+
* Works in both Node.js 20+ and browsers.
|
|
4
|
+
*/
|
|
5
|
+
function base64urlEncode(bytes) {
|
|
6
|
+
let binary = "";
|
|
7
|
+
for (const byte of bytes) {
|
|
8
|
+
binary += String.fromCharCode(byte);
|
|
9
|
+
}
|
|
10
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
11
|
+
}
|
|
12
|
+
export async function generatePKCE() {
|
|
13
|
+
const verifierBytes = new Uint8Array(32);
|
|
14
|
+
crypto.getRandomValues(verifierBytes);
|
|
15
|
+
const verifier = base64urlEncode(verifierBytes);
|
|
16
|
+
const encoder = new TextEncoder();
|
|
17
|
+
const data = encoder.encode(verifier);
|
|
18
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
19
|
+
const challenge = base64urlEncode(new Uint8Array(hashBuffer));
|
|
20
|
+
return { verifier, challenge };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=pkce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../../src/auth/oauth/pkce.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,SAAS,eAAe,CAAC,KAAiB;IACzC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAE9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qwen Portal OAuth Provider
|
|
3
|
+
*
|
|
4
|
+
* OAuth 2.0 authentication for Qwen (DashScope).
|
|
5
|
+
*/
|
|
6
|
+
const QWEN_OAUTH_BASE_URL = 'https://chat.qwen.ai';
|
|
7
|
+
const QWEN_OAUTH_TOKEN_ENDPOINT = `${QWEN_OAUTH_BASE_URL}/api/v1/oauth2/token`;
|
|
8
|
+
const QWEN_OAUTH_CLIENT_ID = 'f0304373b74a44d2b584a3fb70ca9e56';
|
|
9
|
+
export const qwenPortalOAuthProvider = {
|
|
10
|
+
id: 'qwen',
|
|
11
|
+
name: 'Qwen (通义千问)',
|
|
12
|
+
usesCallbackServer: false,
|
|
13
|
+
async login(callbacks) {
|
|
14
|
+
// Qwen uses device code flow
|
|
15
|
+
const deviceCodeUrl = `${QWEN_OAUTH_BASE_URL}/api/v1/oauth2/device/code`;
|
|
16
|
+
const deviceResponse = await fetch(deviceCodeUrl, {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
headers: {
|
|
19
|
+
'Content-Type': 'application/json',
|
|
20
|
+
Accept: 'application/json',
|
|
21
|
+
},
|
|
22
|
+
body: JSON.stringify({
|
|
23
|
+
client_id: QWEN_OAUTH_CLIENT_ID,
|
|
24
|
+
scope: 'user:email',
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
if (!deviceResponse.ok) {
|
|
28
|
+
throw new Error(`Qwen device code request failed: ${deviceResponse.statusText}`);
|
|
29
|
+
}
|
|
30
|
+
const deviceData = await deviceResponse.json();
|
|
31
|
+
// Show user the verification URL and code
|
|
32
|
+
callbacks.onAuth({
|
|
33
|
+
url: deviceData.verification_uri,
|
|
34
|
+
instructions: `Code: ${deviceData.user_code}`,
|
|
35
|
+
});
|
|
36
|
+
// Poll for token
|
|
37
|
+
const tokenUrl = `${QWEN_OAUTH_BASE_URL}/api/v1/oauth2/token`;
|
|
38
|
+
const expiresAt = Date.now() + deviceData.expires_in * 1000;
|
|
39
|
+
const intervalMs = deviceData.interval * 1000;
|
|
40
|
+
while (Date.now() < expiresAt) {
|
|
41
|
+
await new Promise(r => setTimeout(r, intervalMs));
|
|
42
|
+
const tokenResponse = await fetch(tokenUrl, {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
headers: {
|
|
45
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
46
|
+
Accept: 'application/json',
|
|
47
|
+
},
|
|
48
|
+
body: new URLSearchParams({
|
|
49
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
50
|
+
device_code: deviceData.device_code,
|
|
51
|
+
client_id: QWEN_OAUTH_CLIENT_ID,
|
|
52
|
+
}),
|
|
53
|
+
});
|
|
54
|
+
if (!tokenResponse.ok) {
|
|
55
|
+
const error = await tokenResponse.json();
|
|
56
|
+
if (error.error === 'authorization_pending') {
|
|
57
|
+
callbacks.onProgress?.('Waiting for authorization...');
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (error.error === 'slow_down') {
|
|
61
|
+
callbacks.onProgress?.('Slowing down polling...');
|
|
62
|
+
await new Promise(r => setTimeout(r, 2000));
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Token request failed: ${error.error}`);
|
|
66
|
+
}
|
|
67
|
+
const tokenData = await tokenResponse.json();
|
|
68
|
+
return {
|
|
69
|
+
access: tokenData.access_token,
|
|
70
|
+
refresh: tokenData.refresh_token,
|
|
71
|
+
expires: Date.now() + tokenData.expires_in * 1000,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
throw new Error('Device code expired. Please try again.');
|
|
75
|
+
},
|
|
76
|
+
async refreshToken(credentials) {
|
|
77
|
+
if (!credentials.refresh) {
|
|
78
|
+
throw new Error('Qwen OAuth refresh token missing. Re-authenticate.');
|
|
79
|
+
}
|
|
80
|
+
const response = await fetch(QWEN_OAUTH_TOKEN_ENDPOINT, {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
headers: {
|
|
83
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
84
|
+
Accept: 'application/json',
|
|
85
|
+
},
|
|
86
|
+
body: new URLSearchParams({
|
|
87
|
+
grant_type: 'refresh_token',
|
|
88
|
+
refresh_token: credentials.refresh,
|
|
89
|
+
client_id: QWEN_OAUTH_CLIENT_ID,
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
const text = await response.text();
|
|
94
|
+
if (response.status === 400) {
|
|
95
|
+
throw new Error('Qwen OAuth refresh token expired or invalid. Re-authenticate.');
|
|
96
|
+
}
|
|
97
|
+
throw new Error(`Qwen OAuth refresh failed: ${text || response.statusText}`);
|
|
98
|
+
}
|
|
99
|
+
const payload = await response.json();
|
|
100
|
+
if (!payload.access_token || !payload.expires_in) {
|
|
101
|
+
throw new Error('Qwen OAuth refresh response missing access token.');
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
...credentials,
|
|
105
|
+
access: payload.access_token,
|
|
106
|
+
refresh: payload.refresh_token || credentials.refresh,
|
|
107
|
+
expires: Date.now() + payload.expires_in * 1000,
|
|
108
|
+
};
|
|
109
|
+
},
|
|
110
|
+
getApiKey(credentials) {
|
|
111
|
+
return credentials.access;
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=qwen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen.js","sourceRoot":"","sources":["../../../src/auth/oauth/qwen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Types
|
|
3
|
+
*
|
|
4
|
+
* OAuth authentication types and interfaces for provider authentication.
|
|
5
|
+
*/
|
|
6
|
+
export type OAuthCredentials = {
|
|
7
|
+
refresh: string;
|
|
8
|
+
access: string;
|
|
9
|
+
expires: number;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
};
|
|
12
|
+
export type OAuthProviderId = string;
|
|
13
|
+
export type OAuthPrompt = {
|
|
14
|
+
message: string;
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
allowEmpty?: boolean;
|
|
17
|
+
};
|
|
18
|
+
export type OAuthAuthInfo = {
|
|
19
|
+
url: string;
|
|
20
|
+
instructions?: string;
|
|
21
|
+
};
|
|
22
|
+
export interface OAuthLoginCallbacks {
|
|
23
|
+
onAuth: (info: OAuthAuthInfo) => void;
|
|
24
|
+
onPrompt: (prompt: OAuthPrompt) => Promise<string>;
|
|
25
|
+
onProgress?: (message: string) => void;
|
|
26
|
+
onManualCodeInput?: () => Promise<string>;
|
|
27
|
+
signal?: AbortSignal;
|
|
28
|
+
}
|
|
29
|
+
export interface OAuthProviderInterface {
|
|
30
|
+
readonly id: OAuthProviderId;
|
|
31
|
+
readonly name: string;
|
|
32
|
+
/** Run the login flow, return credentials to persist */
|
|
33
|
+
login(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
|
|
34
|
+
/** Whether login uses a local callback server and supports manual code input. */
|
|
35
|
+
usesCallbackServer?: boolean;
|
|
36
|
+
/** Refresh expired credentials, return updated credentials to persist */
|
|
37
|
+
refreshToken(credentials: OAuthCredentials): Promise<OAuthCredentials>;
|
|
38
|
+
/** Convert credentials to API key string for the provider */
|
|
39
|
+
getApiKey(credentials: OAuthCredentials): string;
|
|
40
|
+
}
|
|
41
|
+
export type AuthCredential = {
|
|
42
|
+
type: 'api_key';
|
|
43
|
+
key: string;
|
|
44
|
+
} | {
|
|
45
|
+
type: 'oauth';
|
|
46
|
+
} & OAuthCredentials;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/auth/oauth/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles
|
|
3
|
+
*
|
|
4
|
+
* Credential storage and management with support for:
|
|
5
|
+
* - API keys (static)
|
|
6
|
+
* - Tokens (static bearer-style)
|
|
7
|
+
* - OAuth (refreshable credentials)
|
|
8
|
+
*
|
|
9
|
+
* Based on openclaw's auth-profiles architecture.
|
|
10
|
+
*/
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
export * from './store.js';
|
|
13
|
+
export * from './profiles.js';
|
|
14
|
+
export { resolveApiKeyForProfile, profileHasAuth } from './oauth.js';
|
|
15
|
+
export * from './order.js';
|
|
16
|
+
export * from './usage.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles
|
|
3
|
+
*
|
|
4
|
+
* Credential storage and management with support for:
|
|
5
|
+
* - API keys (static)
|
|
6
|
+
* - Tokens (static bearer-style)
|
|
7
|
+
* - OAuth (refreshable credentials)
|
|
8
|
+
*
|
|
9
|
+
* Based on openclaw's auth-profiles architecture.
|
|
10
|
+
*/
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
export * from './store.js';
|
|
13
|
+
export * from './profiles.js';
|
|
14
|
+
export { resolveApiKeyForProfile, profileHasAuth } from './oauth.js';
|
|
15
|
+
export * from './order.js';
|
|
16
|
+
export * from './usage.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/profiles/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrE,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles - OAuth Support
|
|
3
|
+
*
|
|
4
|
+
* OAuth credential resolution and refresh.
|
|
5
|
+
*/
|
|
6
|
+
import type { OAuthCredentials } from '@mariozechner/pi-ai';
|
|
7
|
+
/** Resolve API key for a profile (handles OAuth refresh) */
|
|
8
|
+
export declare function resolveApiKeyForProfile(profileId: string, refreshFn?: (credentials: OAuthCredentials) => Promise<OAuthCredentials>): Promise<string | undefined>;
|
|
9
|
+
/** Check if a profile has valid credentials */
|
|
10
|
+
export declare function profileHasAuth(profileId: string): boolean;
|
|
11
|
+
/** Resolve profile for a provider (finds first available profile) */
|
|
12
|
+
export declare function resolveProfileForProvider(provider: string, order?: string[]): string | undefined;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles - OAuth Support
|
|
3
|
+
*
|
|
4
|
+
* OAuth credential resolution and refresh.
|
|
5
|
+
*/
|
|
6
|
+
import { loadAuthProfileStore, saveAuthProfileStore } from './store.js';
|
|
7
|
+
/** Resolve API key for a profile (handles OAuth refresh) */
|
|
8
|
+
export async function resolveApiKeyForProfile(profileId, refreshFn) {
|
|
9
|
+
const store = loadAuthProfileStore();
|
|
10
|
+
const cred = store.profiles[profileId];
|
|
11
|
+
if (!cred) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
// Handle API key
|
|
15
|
+
if (cred.type === 'api_key') {
|
|
16
|
+
return cred.key;
|
|
17
|
+
}
|
|
18
|
+
// Handle token
|
|
19
|
+
if (cred.type === 'token') {
|
|
20
|
+
// Check if expired
|
|
21
|
+
if (cred.expires && Date.now() >= cred.expires) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return cred.token;
|
|
25
|
+
}
|
|
26
|
+
// Handle OAuth
|
|
27
|
+
if (cred.type === 'oauth') {
|
|
28
|
+
// Check if token is valid
|
|
29
|
+
const expires = cred.expires ?? 0;
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
if (now >= expires) {
|
|
32
|
+
// Token expired, try to refresh
|
|
33
|
+
if (cred.refresh && refreshFn) {
|
|
34
|
+
try {
|
|
35
|
+
const newCreds = {
|
|
36
|
+
refresh: cred.refresh,
|
|
37
|
+
access: cred.access || '',
|
|
38
|
+
expires: cred.expires || 0,
|
|
39
|
+
};
|
|
40
|
+
const refreshed = await refreshFn(newCreds);
|
|
41
|
+
// Update stored credentials
|
|
42
|
+
store.profiles[profileId] = {
|
|
43
|
+
...cred,
|
|
44
|
+
access: refreshed.access,
|
|
45
|
+
refresh: refreshed.refresh,
|
|
46
|
+
expires: refreshed.expires,
|
|
47
|
+
};
|
|
48
|
+
saveAuthProfileStore(store);
|
|
49
|
+
return refreshed.access;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
return cred.access;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
/** Check if a profile has valid credentials */
|
|
62
|
+
export function profileHasAuth(profileId) {
|
|
63
|
+
const store = loadAuthProfileStore();
|
|
64
|
+
const cred = store.profiles[profileId];
|
|
65
|
+
if (!cred) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (cred.type === 'api_key') {
|
|
69
|
+
return !!cred.key;
|
|
70
|
+
}
|
|
71
|
+
if (cred.type === 'token') {
|
|
72
|
+
// Check if expired
|
|
73
|
+
if (cred.expires && Date.now() >= cred.expires) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return !!cred.token;
|
|
77
|
+
}
|
|
78
|
+
if (cred.type === 'oauth') {
|
|
79
|
+
// Check if valid (not expired)
|
|
80
|
+
const expires = cred.expires ?? 0;
|
|
81
|
+
return !!cred.access && Date.now() < expires;
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
/** Resolve profile for a provider (finds first available profile) */
|
|
86
|
+
export function resolveProfileForProvider(provider, order) {
|
|
87
|
+
const store = loadAuthProfileStore();
|
|
88
|
+
// Use provided order or fall back to stored order
|
|
89
|
+
const profileIds = order ?? store.order?.[provider];
|
|
90
|
+
if (profileIds && profileIds.length > 0) {
|
|
91
|
+
for (const profileId of profileIds) {
|
|
92
|
+
const cred = store.profiles[profileId];
|
|
93
|
+
if (cred?.provider === provider && profileHasAuth(profileId)) {
|
|
94
|
+
return profileId;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Fall back to any profile for this provider
|
|
99
|
+
for (const [profileId, cred] of Object.entries(store.profiles)) {
|
|
100
|
+
if (cred.provider === provider && profileHasAuth(profileId)) {
|
|
101
|
+
return profileId;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/auth/profiles/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles - Profile Order Resolution
|
|
3
|
+
*
|
|
4
|
+
* Resolves the order of auth profiles for a provider (round-robin, etc).
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Resolve auth profile order for a provider.
|
|
8
|
+
* Uses stored order if available, otherwise returns default order.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveAuthProfileOrder(provider: string): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Get next profile in rotation for a provider.
|
|
13
|
+
* Considers last good profile and round-robin.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getNextProfileInRotation(provider: string, availableProfiles: string[]): string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Mark a profile as "good" (working)
|
|
18
|
+
*/
|
|
19
|
+
export declare function markProfileGood(provider: string, profileId: string): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles - Profile Order Resolution
|
|
3
|
+
*
|
|
4
|
+
* Resolves the order of auth profiles for a provider (round-robin, etc).
|
|
5
|
+
*/
|
|
6
|
+
import { loadAuthProfileStore } from './store.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resolve auth profile order for a provider.
|
|
9
|
+
* Uses stored order if available, otherwise returns default order.
|
|
10
|
+
*/
|
|
11
|
+
export function resolveAuthProfileOrder(provider) {
|
|
12
|
+
const store = loadAuthProfileStore();
|
|
13
|
+
// Use stored order if available
|
|
14
|
+
if (store.order && store.order[provider]) {
|
|
15
|
+
return store.order[provider];
|
|
16
|
+
}
|
|
17
|
+
// Return default: {provider}:default
|
|
18
|
+
return [`${provider}:default`];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get next profile in rotation for a provider.
|
|
22
|
+
* Considers last good profile and round-robin.
|
|
23
|
+
*/
|
|
24
|
+
export function getNextProfileInRotation(provider, availableProfiles) {
|
|
25
|
+
if (availableProfiles.length === 0) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
if (availableProfiles.length === 1) {
|
|
29
|
+
return availableProfiles[0];
|
|
30
|
+
}
|
|
31
|
+
const store = loadAuthProfileStore();
|
|
32
|
+
const lastGood = store.lastGood?.[provider];
|
|
33
|
+
// Find next profile after last good one
|
|
34
|
+
if (lastGood) {
|
|
35
|
+
const currentIndex = availableProfiles.indexOf(lastGood);
|
|
36
|
+
if (currentIndex >= 0) {
|
|
37
|
+
const nextIndex = (currentIndex + 1) % availableProfiles.length;
|
|
38
|
+
return availableProfiles[nextIndex];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Default to first available
|
|
42
|
+
return availableProfiles[0];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Mark a profile as "good" (working)
|
|
46
|
+
*/
|
|
47
|
+
export function markProfileGood(provider, profileId) {
|
|
48
|
+
const store = loadAuthProfileStore();
|
|
49
|
+
if (!store.lastGood) {
|
|
50
|
+
store.lastGood = {};
|
|
51
|
+
}
|
|
52
|
+
store.lastGood[provider] = profileId;
|
|
53
|
+
// Clear any cooldown for this profile
|
|
54
|
+
if (store.usageStats?.[profileId]) {
|
|
55
|
+
delete store.usageStats[profileId].cooldownUntil;
|
|
56
|
+
delete store.usageStats[profileId].disabledUntil;
|
|
57
|
+
delete store.usageStats[profileId].disabledReason;
|
|
58
|
+
}
|
|
59
|
+
import('./store.js').then(({ saveAuthProfileStore }) => {
|
|
60
|
+
saveAuthProfileStore(store);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/auth/profiles/order.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACvD,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IAErC,gCAAgC;IAChC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,qCAAqC;IACrC,OAAO,CAAC,GAAG,QAAQ,UAAU,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACvC,QAAgB,EAChB,iBAA2B;IAE3B,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE5C,wCAAwC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAChE,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IAED,6BAA6B;IAC7B,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,SAAiB;IAClE,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAErC,sCAAsC;IACtC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC;QACjD,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC;QACjD,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,EAAE,EAAE,EAAE;QACtD,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles - Profile Management
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for auth profiles.
|
|
5
|
+
*/
|
|
6
|
+
import type { AuthProfileCredential, AuthProfileEntry } from './types.js';
|
|
7
|
+
/** Get all profiles for a provider */
|
|
8
|
+
export declare function listProfilesForProvider(provider: string, dataDir?: string): AuthProfileEntry[];
|
|
9
|
+
/** Get all auth profiles */
|
|
10
|
+
export declare function listAllProfiles(dataDir?: string): AuthProfileEntry[];
|
|
11
|
+
/** Get profile by ID */
|
|
12
|
+
export declare function getProfile(profileId: string, dataDir?: string): AuthProfileCredential | undefined;
|
|
13
|
+
/** Upsert (insert or update) an auth profile */
|
|
14
|
+
export declare function upsertAuthProfile(profile: {
|
|
15
|
+
profileId: string;
|
|
16
|
+
credential: AuthProfileCredential;
|
|
17
|
+
}, dataDir?: string): void;
|
|
18
|
+
/** Remove an auth profile */
|
|
19
|
+
export declare function removeAuthProfile(profileId: string, dataDir?: string): boolean;
|
|
20
|
+
/** Set profile order for a provider */
|
|
21
|
+
export declare function setAuthProfileOrder(provider: string, profileIds: string[], dataDir?: string): void;
|
|
22
|
+
/** Get profile order for a provider */
|
|
23
|
+
export declare function getAuthProfileOrder(provider: string, dataDir?: string): string[] | undefined;
|
|
24
|
+
/** Get all providers with profiles */
|
|
25
|
+
export declare function getProvidersWithProfiles(dataDir?: string): string[];
|
|
26
|
+
/** Get auth path for display */
|
|
27
|
+
export declare function getAuthStorePath(dataDir?: string): string;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles - Profile Management
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for auth profiles.
|
|
5
|
+
*/
|
|
6
|
+
import { ensureAuthProfileStore, loadAuthProfileStore, saveAuthProfileStore, resolveAuthStorePath } from './store.js';
|
|
7
|
+
function hasKey(cred) {
|
|
8
|
+
if (cred.type === 'api_key') {
|
|
9
|
+
return !!cred.key;
|
|
10
|
+
}
|
|
11
|
+
if (cred.type === 'token') {
|
|
12
|
+
return !!cred.token;
|
|
13
|
+
}
|
|
14
|
+
if (cred.type === 'oauth') {
|
|
15
|
+
return !!cred.access;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
function getExpires(cred) {
|
|
20
|
+
if (cred.type === 'token') {
|
|
21
|
+
return cred.expires;
|
|
22
|
+
}
|
|
23
|
+
if (cred.type === 'oauth') {
|
|
24
|
+
return cred.expires;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
/** Get all profiles for a provider */
|
|
29
|
+
export function listProfilesForProvider(provider, dataDir) {
|
|
30
|
+
const store = loadAuthProfileStore(dataDir);
|
|
31
|
+
const profiles = [];
|
|
32
|
+
for (const [profileId, cred] of Object.entries(store.profiles)) {
|
|
33
|
+
if (cred.provider === provider) {
|
|
34
|
+
profiles.push({
|
|
35
|
+
profileId,
|
|
36
|
+
provider: cred.provider,
|
|
37
|
+
type: cred.type,
|
|
38
|
+
email: cred.email,
|
|
39
|
+
hasKey: hasKey(cred),
|
|
40
|
+
expires: getExpires(cred),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return profiles;
|
|
45
|
+
}
|
|
46
|
+
/** Get all auth profiles */
|
|
47
|
+
export function listAllProfiles(dataDir) {
|
|
48
|
+
const store = loadAuthProfileStore(dataDir);
|
|
49
|
+
const profiles = [];
|
|
50
|
+
for (const [profileId, cred] of Object.entries(store.profiles)) {
|
|
51
|
+
profiles.push({
|
|
52
|
+
profileId,
|
|
53
|
+
provider: cred.provider,
|
|
54
|
+
type: cred.type,
|
|
55
|
+
email: cred.email,
|
|
56
|
+
hasKey: hasKey(cred),
|
|
57
|
+
expires: getExpires(cred),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return profiles;
|
|
61
|
+
}
|
|
62
|
+
/** Get profile by ID */
|
|
63
|
+
export function getProfile(profileId, dataDir) {
|
|
64
|
+
const store = loadAuthProfileStore(dataDir);
|
|
65
|
+
return store.profiles[profileId];
|
|
66
|
+
}
|
|
67
|
+
/** Upsert (insert or update) an auth profile */
|
|
68
|
+
export function upsertAuthProfile(profile, dataDir) {
|
|
69
|
+
const store = ensureAuthProfileStore(dataDir);
|
|
70
|
+
store.profiles[profile.profileId] = profile.credential;
|
|
71
|
+
saveAuthProfileStore(store, dataDir);
|
|
72
|
+
}
|
|
73
|
+
/** Remove an auth profile */
|
|
74
|
+
export function removeAuthProfile(profileId, dataDir) {
|
|
75
|
+
const store = loadAuthProfileStore(dataDir);
|
|
76
|
+
if (store.profiles[profileId]) {
|
|
77
|
+
delete store.profiles[profileId];
|
|
78
|
+
saveAuthProfileStore(store, dataDir);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/** Set profile order for a provider */
|
|
84
|
+
export function setAuthProfileOrder(provider, profileIds, dataDir) {
|
|
85
|
+
const store = ensureAuthProfileStore(dataDir);
|
|
86
|
+
if (!store.order) {
|
|
87
|
+
store.order = {};
|
|
88
|
+
}
|
|
89
|
+
store.order[provider] = profileIds;
|
|
90
|
+
saveAuthProfileStore(store, dataDir);
|
|
91
|
+
}
|
|
92
|
+
/** Get profile order for a provider */
|
|
93
|
+
export function getAuthProfileOrder(provider, dataDir) {
|
|
94
|
+
const store = loadAuthProfileStore(dataDir);
|
|
95
|
+
return store.order?.[provider];
|
|
96
|
+
}
|
|
97
|
+
/** Get all providers with profiles */
|
|
98
|
+
export function getProvidersWithProfiles(dataDir) {
|
|
99
|
+
const store = loadAuthProfileStore(dataDir);
|
|
100
|
+
const providers = new Set();
|
|
101
|
+
for (const cred of Object.values(store.profiles)) {
|
|
102
|
+
providers.add(cred.provider);
|
|
103
|
+
}
|
|
104
|
+
return Array.from(providers);
|
|
105
|
+
}
|
|
106
|
+
/** Get auth path for display */
|
|
107
|
+
export function getAuthStorePath(dataDir) {
|
|
108
|
+
return resolveAuthStorePath(dataDir);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/auth/profiles/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profile Store
|
|
3
|
+
*
|
|
4
|
+
* Persistent storage for auth profiles.
|
|
5
|
+
* Handles loading, saving, and migration of auth credentials.
|
|
6
|
+
*/
|
|
7
|
+
import type { AuthProfileStore } from './types.js';
|
|
8
|
+
/** Get the auth profiles file path */
|
|
9
|
+
export declare function resolveAuthStorePath(dataDir?: string): string;
|
|
10
|
+
/** Ensure auth store file exists */
|
|
11
|
+
export declare function ensureAuthStoreFile(authPath: string): void;
|
|
12
|
+
/** Load auth profile store from disk */
|
|
13
|
+
export declare function loadAuthProfileStore(dataDir?: string): AuthProfileStore;
|
|
14
|
+
/** Ensure auth profile store exists */
|
|
15
|
+
export declare function ensureAuthProfileStore(dataDir?: string): AuthProfileStore;
|
|
16
|
+
/** Save auth profile store to disk */
|
|
17
|
+
export declare function saveAuthProfileStore(store: AuthProfileStore, dataDir?: string): void;
|