siclaw 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/LICENSE +190 -0
- package/README.md +268 -0
- package/dist/agentbox/gateway-client.d.ts +41 -0
- package/dist/agentbox/gateway-client.js +108 -0
- package/dist/agentbox/gateway-client.js.map +1 -0
- package/dist/agentbox/http-server.d.ts +12 -0
- package/dist/agentbox/http-server.js +700 -0
- package/dist/agentbox/http-server.js.map +1 -0
- package/dist/agentbox/mcp-sync.d.ts +6 -0
- package/dist/agentbox/mcp-sync.js +26 -0
- package/dist/agentbox/mcp-sync.js.map +1 -0
- package/dist/agentbox/resource-handlers.d.ts +40 -0
- package/dist/agentbox/resource-handlers.js +116 -0
- package/dist/agentbox/resource-handlers.js.map +1 -0
- package/dist/agentbox/resource-sync.d.ts +28 -0
- package/dist/agentbox/resource-sync.js +74 -0
- package/dist/agentbox/resource-sync.js.map +1 -0
- package/dist/agentbox/session.d.ts +145 -0
- package/dist/agentbox/session.js +444 -0
- package/dist/agentbox/session.js.map +1 -0
- package/dist/agentbox-main.d.ts +7 -0
- package/dist/agentbox-main.js +90 -0
- package/dist/agentbox-main.js.map +1 -0
- package/dist/cli-main.d.ts +1 -0
- package/dist/cli-main.js +187 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli-setup.d.ts +17 -0
- package/dist/cli-setup.js +247 -0
- package/dist/cli-setup.js.map +1 -0
- package/dist/core/agent-factory.d.ts +52 -0
- package/dist/core/agent-factory.js +547 -0
- package/dist/core/agent-factory.js.map +1 -0
- package/dist/core/brain-session.d.ts +67 -0
- package/dist/core/brain-session.js +15 -0
- package/dist/core/brain-session.js.map +1 -0
- package/dist/core/brains/claude-sdk-brain.d.ts +76 -0
- package/dist/core/brains/claude-sdk-brain.js +403 -0
- package/dist/core/brains/claude-sdk-brain.js.map +1 -0
- package/dist/core/brains/pi-agent-brain.d.ts +28 -0
- package/dist/core/brains/pi-agent-brain.js +84 -0
- package/dist/core/brains/pi-agent-brain.js.map +1 -0
- package/dist/core/config.d.ts +109 -0
- package/dist/core/config.js +294 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/extensions/context-pruning.d.ts +38 -0
- package/dist/core/extensions/context-pruning.js +162 -0
- package/dist/core/extensions/context-pruning.js.map +1 -0
- package/dist/core/extensions/deep-investigation.d.ts +2 -0
- package/dist/core/extensions/deep-investigation.js +541 -0
- package/dist/core/extensions/deep-investigation.js.map +1 -0
- package/dist/core/extensions/memory-flush.d.ts +20 -0
- package/dist/core/extensions/memory-flush.js +120 -0
- package/dist/core/extensions/memory-flush.js.map +1 -0
- package/dist/core/llm-proxy.d.ts +37 -0
- package/dist/core/llm-proxy.js +578 -0
- package/dist/core/llm-proxy.js.map +1 -0
- package/dist/core/mcp-client.d.ts +80 -0
- package/dist/core/mcp-client.js +285 -0
- package/dist/core/mcp-client.js.map +1 -0
- package/dist/core/prompt.d.ts +1 -0
- package/dist/core/prompt.js +64 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/tool-adapter.d.ts +45 -0
- package/dist/core/tool-adapter.js +154 -0
- package/dist/core/tool-adapter.js.map +1 -0
- package/dist/cron/cron-api.d.ts +9 -0
- package/dist/cron/cron-api.js +94 -0
- package/dist/cron/cron-api.js.map +1 -0
- package/dist/cron/cron-coordinator.d.ts +29 -0
- package/dist/cron/cron-coordinator.js +150 -0
- package/dist/cron/cron-coordinator.js.map +1 -0
- package/dist/cron/cron-executor.d.ts +15 -0
- package/dist/cron/cron-executor.js +90 -0
- package/dist/cron/cron-executor.js.map +1 -0
- package/dist/cron/cron-matcher.d.ts +19 -0
- package/dist/cron/cron-matcher.js +114 -0
- package/dist/cron/cron-matcher.js.map +1 -0
- package/dist/cron/cron-scheduler.d.ts +42 -0
- package/dist/cron/cron-scheduler.js +91 -0
- package/dist/cron/cron-scheduler.js.map +1 -0
- package/dist/cron/gateway-client.d.ts +32 -0
- package/dist/cron/gateway-client.js +91 -0
- package/dist/cron/gateway-client.js.map +1 -0
- package/dist/cron-main.d.ts +10 -0
- package/dist/cron-main.js +75 -0
- package/dist/cron-main.js.map +1 -0
- package/dist/gateway/agentbox/client.d.ts +187 -0
- package/dist/gateway/agentbox/client.js +314 -0
- package/dist/gateway/agentbox/client.js.map +1 -0
- package/dist/gateway/agentbox/index.d.ts +10 -0
- package/dist/gateway/agentbox/index.js +11 -0
- package/dist/gateway/agentbox/index.js.map +1 -0
- package/dist/gateway/agentbox/k8s-spawner.d.ts +70 -0
- package/dist/gateway/agentbox/k8s-spawner.js +466 -0
- package/dist/gateway/agentbox/k8s-spawner.js.map +1 -0
- package/dist/gateway/agentbox/local-spawner.d.ts +63 -0
- package/dist/gateway/agentbox/local-spawner.js +234 -0
- package/dist/gateway/agentbox/local-spawner.js.map +1 -0
- package/dist/gateway/agentbox/manager.d.ts +121 -0
- package/dist/gateway/agentbox/manager.js +325 -0
- package/dist/gateway/agentbox/manager.js.map +1 -0
- package/dist/gateway/agentbox/process-spawner.d.ts +21 -0
- package/dist/gateway/agentbox/process-spawner.js +168 -0
- package/dist/gateway/agentbox/process-spawner.js.map +1 -0
- package/dist/gateway/agentbox/spawner.d.ts +33 -0
- package/dist/gateway/agentbox/spawner.js +10 -0
- package/dist/gateway/agentbox/spawner.js.map +1 -0
- package/dist/gateway/agentbox/types.d.ts +39 -0
- package/dist/gateway/agentbox/types.js +5 -0
- package/dist/gateway/agentbox/types.js.map +1 -0
- package/dist/gateway/auth/bind-code-store.d.ts +31 -0
- package/dist/gateway/auth/bind-code-store.js +73 -0
- package/dist/gateway/auth/bind-code-store.js.map +1 -0
- package/dist/gateway/auth/index.d.ts +9 -0
- package/dist/gateway/auth/index.js +10 -0
- package/dist/gateway/auth/index.js.map +1 -0
- package/dist/gateway/auth/jwt.d.ts +23 -0
- package/dist/gateway/auth/jwt.js +82 -0
- package/dist/gateway/auth/jwt.js.map +1 -0
- package/dist/gateway/auth/login.d.ts +26 -0
- package/dist/gateway/auth/login.js +74 -0
- package/dist/gateway/auth/login.js.map +1 -0
- package/dist/gateway/auth/middleware.d.ts +23 -0
- package/dist/gateway/auth/middleware.js +67 -0
- package/dist/gateway/auth/middleware.js.map +1 -0
- package/dist/gateway/auth/oauth2.d.ts +57 -0
- package/dist/gateway/auth/oauth2.js +113 -0
- package/dist/gateway/auth/oauth2.js.map +1 -0
- package/dist/gateway/auth/user-store.d.ts +95 -0
- package/dist/gateway/auth/user-store.js +291 -0
- package/dist/gateway/auth/user-store.js.map +1 -0
- package/dist/gateway/channels/channel-manager.d.ts +42 -0
- package/dist/gateway/channels/channel-manager.js +156 -0
- package/dist/gateway/channels/channel-manager.js.map +1 -0
- package/dist/gateway/channels/channel-rpc.d.ts +9 -0
- package/dist/gateway/channels/channel-rpc.js +104 -0
- package/dist/gateway/channels/channel-rpc.js.map +1 -0
- package/dist/gateway/channels/channel-store.d.ts +32 -0
- package/dist/gateway/channels/channel-store.js +114 -0
- package/dist/gateway/channels/channel-store.js.map +1 -0
- package/dist/gateway/channels/discord.d.ts +5 -0
- package/dist/gateway/channels/discord.js +177 -0
- package/dist/gateway/channels/discord.js.map +1 -0
- package/dist/gateway/channels/lark-format.d.ts +41 -0
- package/dist/gateway/channels/lark-format.js +620 -0
- package/dist/gateway/channels/lark-format.js.map +1 -0
- package/dist/gateway/channels/lark.d.ts +5 -0
- package/dist/gateway/channels/lark.js +1000 -0
- package/dist/gateway/channels/lark.js.map +1 -0
- package/dist/gateway/channels/slack.d.ts +5 -0
- package/dist/gateway/channels/slack.js +170 -0
- package/dist/gateway/channels/slack.js.map +1 -0
- package/dist/gateway/channels/telegram.d.ts +5 -0
- package/dist/gateway/channels/telegram.js +173 -0
- package/dist/gateway/channels/telegram.js.map +1 -0
- package/dist/gateway/channels/utils.d.ts +34 -0
- package/dist/gateway/channels/utils.js +115 -0
- package/dist/gateway/channels/utils.js.map +1 -0
- package/dist/gateway/config.d.ts +14 -0
- package/dist/gateway/config.js +12 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/cron/notify.d.ts +14 -0
- package/dist/gateway/cron/notify.js +40 -0
- package/dist/gateway/cron/notify.js.map +1 -0
- package/dist/gateway/db/dialect-helpers.d.ts +8 -0
- package/dist/gateway/db/dialect-helpers.js +26 -0
- package/dist/gateway/db/dialect-helpers.js.map +1 -0
- package/dist/gateway/db/index.d.ts +20 -0
- package/dist/gateway/db/index.js +140 -0
- package/dist/gateway/db/index.js.map +1 -0
- package/dist/gateway/db/init-schema.d.ts +8 -0
- package/dist/gateway/db/init-schema.js +385 -0
- package/dist/gateway/db/init-schema.js.map +1 -0
- package/dist/gateway/db/migrate-sqlite.d.ts +8 -0
- package/dist/gateway/db/migrate-sqlite.js +335 -0
- package/dist/gateway/db/migrate-sqlite.js.map +1 -0
- package/dist/gateway/db/repositories/chat-repo.d.ts +64 -0
- package/dist/gateway/db/repositories/chat-repo.js +115 -0
- package/dist/gateway/db/repositories/chat-repo.js.map +1 -0
- package/dist/gateway/db/repositories/config-repo.d.ts +164 -0
- package/dist/gateway/db/repositories/config-repo.js +267 -0
- package/dist/gateway/db/repositories/config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/credential-repo.d.ts +51 -0
- package/dist/gateway/db/repositories/credential-repo.js +70 -0
- package/dist/gateway/db/repositories/credential-repo.js.map +1 -0
- package/dist/gateway/db/repositories/env-repo.d.ts +37 -0
- package/dist/gateway/db/repositories/env-repo.js +74 -0
- package/dist/gateway/db/repositories/env-repo.js.map +1 -0
- package/dist/gateway/db/repositories/mcp-server-repo.d.ts +97 -0
- package/dist/gateway/db/repositories/mcp-server-repo.js +83 -0
- package/dist/gateway/db/repositories/mcp-server-repo.js.map +1 -0
- package/dist/gateway/db/repositories/model-config-repo.d.ts +141 -0
- package/dist/gateway/db/repositories/model-config-repo.js +439 -0
- package/dist/gateway/db/repositories/model-config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/notification-repo.d.ts +50 -0
- package/dist/gateway/db/repositories/notification-repo.js +105 -0
- package/dist/gateway/db/repositories/notification-repo.js.map +1 -0
- package/dist/gateway/db/repositories/permission-repo.d.ts +28 -0
- package/dist/gateway/db/repositories/permission-repo.js +74 -0
- package/dist/gateway/db/repositories/permission-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-content-repo.d.ts +29 -0
- package/dist/gateway/db/repositories/skill-content-repo.js +90 -0
- package/dist/gateway/db/repositories/skill-content-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-repo.d.ts +170 -0
- package/dist/gateway/db/repositories/skill-repo.js +185 -0
- package/dist/gateway/db/repositories/skill-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-review-repo.d.ts +44 -0
- package/dist/gateway/db/repositories/skill-review-repo.js +44 -0
- package/dist/gateway/db/repositories/skill-review-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-version-repo.d.ts +30 -0
- package/dist/gateway/db/repositories/skill-version-repo.js +56 -0
- package/dist/gateway/db/repositories/skill-version-repo.js.map +1 -0
- package/dist/gateway/db/repositories/system-config-repo.d.ts +21 -0
- package/dist/gateway/db/repositories/system-config-repo.js +86 -0
- package/dist/gateway/db/repositories/system-config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/user-env-config-repo.d.ts +32 -0
- package/dist/gateway/db/repositories/user-env-config-repo.js +79 -0
- package/dist/gateway/db/repositories/user-env-config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/user-repo.d.ts +59 -0
- package/dist/gateway/db/repositories/user-repo.js +83 -0
- package/dist/gateway/db/repositories/user-repo.js.map +1 -0
- package/dist/gateway/db/repositories/vote-repo.d.ts +26 -0
- package/dist/gateway/db/repositories/vote-repo.js +97 -0
- package/dist/gateway/db/repositories/vote-repo.js.map +1 -0
- package/dist/gateway/db/repositories/workspace-repo.d.ts +27 -0
- package/dist/gateway/db/repositories/workspace-repo.js +145 -0
- package/dist/gateway/db/repositories/workspace-repo.js.map +1 -0
- package/dist/gateway/db/schema-mysql.d.ts +3897 -0
- package/dist/gateway/db/schema-mysql.js +354 -0
- package/dist/gateway/db/schema-mysql.js.map +1 -0
- package/dist/gateway/db/schema-sqlite.d.ts +4147 -0
- package/dist/gateway/db/schema-sqlite.js +345 -0
- package/dist/gateway/db/schema-sqlite.js.map +1 -0
- package/dist/gateway/db/schema.d.ts +3869 -0
- package/dist/gateway/db/schema.js +16 -0
- package/dist/gateway/db/schema.js.map +1 -0
- package/dist/gateway/mcp-config-builder.d.ts +8 -0
- package/dist/gateway/mcp-config-builder.js +39 -0
- package/dist/gateway/mcp-config-builder.js.map +1 -0
- package/dist/gateway/output-redactor.d.ts +27 -0
- package/dist/gateway/output-redactor.js +101 -0
- package/dist/gateway/output-redactor.js.map +1 -0
- package/dist/gateway/plugins/api.d.ts +181 -0
- package/dist/gateway/plugins/api.js +28 -0
- package/dist/gateway/plugins/api.js.map +1 -0
- package/dist/gateway/plugins/channel-bridge.d.ts +72 -0
- package/dist/gateway/plugins/channel-bridge.js +586 -0
- package/dist/gateway/plugins/channel-bridge.js.map +1 -0
- package/dist/gateway/plugins/loader.d.ts +2 -0
- package/dist/gateway/plugins/loader.js +83 -0
- package/dist/gateway/plugins/loader.js.map +1 -0
- package/dist/gateway/plugins/runtime.d.ts +25 -0
- package/dist/gateway/plugins/runtime.js +64 -0
- package/dist/gateway/plugins/runtime.js.map +1 -0
- package/dist/gateway/resource-notifier.d.ts +36 -0
- package/dist/gateway/resource-notifier.js +123 -0
- package/dist/gateway/resource-notifier.js.map +1 -0
- package/dist/gateway/rpc-methods.d.ts +34 -0
- package/dist/gateway/rpc-methods.js +3198 -0
- package/dist/gateway/rpc-methods.js.map +1 -0
- package/dist/gateway/security/cert-manager.d.ts +77 -0
- package/dist/gateway/security/cert-manager.js +280 -0
- package/dist/gateway/security/cert-manager.js.map +1 -0
- package/dist/gateway/security/mtls-middleware.d.ts +33 -0
- package/dist/gateway/security/mtls-middleware.js +89 -0
- package/dist/gateway/security/mtls-middleware.js.map +1 -0
- package/dist/gateway/server.d.ts +54 -0
- package/dist/gateway/server.js +1146 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/skill-labels.d.ts +16 -0
- package/dist/gateway/skill-labels.js +79 -0
- package/dist/gateway/skill-labels.js.map +1 -0
- package/dist/gateway/skills/file-writer.d.ts +75 -0
- package/dist/gateway/skills/file-writer.js +320 -0
- package/dist/gateway/skills/file-writer.js.map +1 -0
- package/dist/gateway/skills/script-evaluator.d.ts +42 -0
- package/dist/gateway/skills/script-evaluator.js +204 -0
- package/dist/gateway/skills/script-evaluator.js.map +1 -0
- package/dist/gateway/skills/skill-bundle.d.ts +34 -0
- package/dist/gateway/skills/skill-bundle.js +83 -0
- package/dist/gateway/skills/skill-bundle.js.map +1 -0
- package/dist/gateway/web/dist/assets/index-BF6CtvnV.css +1 -0
- package/dist/gateway/web/dist/assets/index-Dumzqsr-.js +680 -0
- package/dist/gateway/web/dist/assets/index-n4IMHP1Q.js +675 -0
- package/dist/gateway/web/dist/index.html +14 -0
- package/dist/gateway/web/dist/noise.png +1 -0
- package/dist/gateway/web/dist/robots.txt +2 -0
- package/dist/gateway/web/dist/vite.svg +1 -0
- package/dist/gateway/ws-protocol.d.ts +68 -0
- package/dist/gateway/ws-protocol.js +106 -0
- package/dist/gateway/ws-protocol.js.map +1 -0
- package/dist/gateway-main.d.ts +1 -0
- package/dist/gateway-main.js +129 -0
- package/dist/gateway-main.js.map +1 -0
- package/dist/lib/s3-backup.d.ts +28 -0
- package/dist/lib/s3-backup.js +85 -0
- package/dist/lib/s3-backup.js.map +1 -0
- package/dist/lib/s3-storage.d.ts +45 -0
- package/dist/lib/s3-storage.js +210 -0
- package/dist/lib/s3-storage.js.map +1 -0
- package/dist/memory/chunker.d.ts +15 -0
- package/dist/memory/chunker.js +94 -0
- package/dist/memory/chunker.js.map +1 -0
- package/dist/memory/embeddings.d.ts +14 -0
- package/dist/memory/embeddings.js +143 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/index.d.ts +18 -0
- package/dist/memory/index.js +15 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/indexer.d.ts +70 -0
- package/dist/memory/indexer.js +567 -0
- package/dist/memory/indexer.js.map +1 -0
- package/dist/memory/mmr.d.ts +22 -0
- package/dist/memory/mmr.js +82 -0
- package/dist/memory/mmr.js.map +1 -0
- package/dist/memory/schema.d.ts +2 -0
- package/dist/memory/schema.js +85 -0
- package/dist/memory/schema.js.map +1 -0
- package/dist/memory/session-summarizer.d.ts +19 -0
- package/dist/memory/session-summarizer.js +139 -0
- package/dist/memory/session-summarizer.js.map +1 -0
- package/dist/memory/stop-words.d.ts +13 -0
- package/dist/memory/stop-words.js +132 -0
- package/dist/memory/stop-words.js.map +1 -0
- package/dist/memory/temporal-decay.d.ts +20 -0
- package/dist/memory/temporal-decay.js +63 -0
- package/dist/memory/temporal-decay.js.map +1 -0
- package/dist/memory/types.d.ts +40 -0
- package/dist/memory/types.js +2 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/shared/resource-sync.d.ts +80 -0
- package/dist/shared/resource-sync.js +24 -0
- package/dist/shared/resource-sync.js.map +1 -0
- package/dist/tools/command-sets.d.ts +61 -0
- package/dist/tools/command-sets.js +845 -0
- package/dist/tools/command-sets.js.map +1 -0
- package/dist/tools/create-skill.d.ts +2 -0
- package/dist/tools/create-skill.js +169 -0
- package/dist/tools/create-skill.js.map +1 -0
- package/dist/tools/credential-list.d.ts +8 -0
- package/dist/tools/credential-list.js +139 -0
- package/dist/tools/credential-list.js.map +1 -0
- package/dist/tools/deep-search/engine.d.ts +40 -0
- package/dist/tools/deep-search/engine.js +594 -0
- package/dist/tools/deep-search/engine.js.map +1 -0
- package/dist/tools/deep-search/events.d.ts +11 -0
- package/dist/tools/deep-search/events.js +10 -0
- package/dist/tools/deep-search/events.js.map +1 -0
- package/dist/tools/deep-search/format.d.ts +11 -0
- package/dist/tools/deep-search/format.js +143 -0
- package/dist/tools/deep-search/format.js.map +1 -0
- package/dist/tools/deep-search/prompts.d.ts +30 -0
- package/dist/tools/deep-search/prompts.js +237 -0
- package/dist/tools/deep-search/prompts.js.map +1 -0
- package/dist/tools/deep-search/sre-knowledge.d.ts +21 -0
- package/dist/tools/deep-search/sre-knowledge.js +112 -0
- package/dist/tools/deep-search/sre-knowledge.js.map +1 -0
- package/dist/tools/deep-search/sub-agent.d.ts +71 -0
- package/dist/tools/deep-search/sub-agent.js +401 -0
- package/dist/tools/deep-search/sub-agent.js.map +1 -0
- package/dist/tools/deep-search/tool.d.ts +9 -0
- package/dist/tools/deep-search/tool.js +201 -0
- package/dist/tools/deep-search/tool.js.map +1 -0
- package/dist/tools/deep-search/types.d.ts +67 -0
- package/dist/tools/deep-search/types.js +41 -0
- package/dist/tools/deep-search/types.js.map +1 -0
- package/dist/tools/dp-tools.d.ts +47 -0
- package/dist/tools/dp-tools.js +170 -0
- package/dist/tools/dp-tools.js.map +1 -0
- package/dist/tools/fork-skill.d.ts +2 -0
- package/dist/tools/fork-skill.js +93 -0
- package/dist/tools/fork-skill.js.map +1 -0
- package/dist/tools/k8s-checks.d.ts +18 -0
- package/dist/tools/k8s-checks.js +105 -0
- package/dist/tools/k8s-checks.js.map +1 -0
- package/dist/tools/kubeconfig-resolver.d.ts +11 -0
- package/dist/tools/kubeconfig-resolver.js +53 -0
- package/dist/tools/kubeconfig-resolver.js.map +1 -0
- package/dist/tools/kubectl.d.ts +12 -0
- package/dist/tools/kubectl.js +169 -0
- package/dist/tools/kubectl.js.map +1 -0
- package/dist/tools/manage-schedule.d.ts +3 -0
- package/dist/tools/manage-schedule.js +189 -0
- package/dist/tools/manage-schedule.js.map +1 -0
- package/dist/tools/memory-get.d.ts +2 -0
- package/dist/tools/memory-get.js +99 -0
- package/dist/tools/memory-get.js.map +1 -0
- package/dist/tools/memory-search.d.ts +3 -0
- package/dist/tools/memory-search.js +93 -0
- package/dist/tools/memory-search.js.map +1 -0
- package/dist/tools/netns-script.d.ts +3 -0
- package/dist/tools/netns-script.js +394 -0
- package/dist/tools/netns-script.js.map +1 -0
- package/dist/tools/node-exec.d.ts +18 -0
- package/dist/tools/node-exec.js +342 -0
- package/dist/tools/node-exec.js.map +1 -0
- package/dist/tools/node-script.d.ts +3 -0
- package/dist/tools/node-script.js +266 -0
- package/dist/tools/node-script.js.map +1 -0
- package/dist/tools/pod-exec.d.ts +4 -0
- package/dist/tools/pod-exec.js +146 -0
- package/dist/tools/pod-exec.js.map +1 -0
- package/dist/tools/pod-nsenter-exec.d.ts +3 -0
- package/dist/tools/pod-nsenter-exec.js +333 -0
- package/dist/tools/pod-nsenter-exec.js.map +1 -0
- package/dist/tools/pod-script.d.ts +3 -0
- package/dist/tools/pod-script.js +176 -0
- package/dist/tools/pod-script.js.map +1 -0
- package/dist/tools/restricted-bash.d.ts +41 -0
- package/dist/tools/restricted-bash.js +503 -0
- package/dist/tools/restricted-bash.js.map +1 -0
- package/dist/tools/run-skill.d.ts +3 -0
- package/dist/tools/run-skill.js +169 -0
- package/dist/tools/run-skill.js.map +1 -0
- package/dist/tools/sanitize-env.d.ts +14 -0
- package/dist/tools/sanitize-env.js +95 -0
- package/dist/tools/sanitize-env.js.map +1 -0
- package/dist/tools/script-resolver.d.ts +35 -0
- package/dist/tools/script-resolver.js +213 -0
- package/dist/tools/script-resolver.js.map +1 -0
- package/dist/tools/tool-render.d.ts +20 -0
- package/dist/tools/tool-render.js +77 -0
- package/dist/tools/tool-render.js.map +1 -0
- package/dist/tools/update-skill.d.ts +2 -0
- package/dist/tools/update-skill.js +169 -0
- package/dist/tools/update-skill.js.map +1 -0
- package/package.json +106 -0
- package/settings.example.json +74 -0
- package/siclaw.mjs +48 -0
- package/skills/core/cluster-events/SKILL.md +150 -0
- package/skills/core/deep-investigation/SKILL.md +87 -0
- package/skills/core/deep-investigation/default-memory.md +8 -0
- package/skills/core/deployment-rollout-debug/SKILL.md +144 -0
- package/skills/core/dns-debug/SKILL.md +144 -0
- package/skills/core/find-node/SKILL.md +23 -0
- package/skills/core/find-node/scripts/find-node.sh +9 -0
- package/skills/core/hpa-debug/SKILL.md +159 -0
- package/skills/core/image-pull-debug/SKILL.md +151 -0
- package/skills/core/ingress-debug/SKILL.md +189 -0
- package/skills/core/job-debug/SKILL.md +180 -0
- package/skills/core/meta.json +23 -0
- package/skills/core/node-health-check/SKILL.md +150 -0
- package/skills/core/node-logs/SKILL.md +68 -0
- package/skills/core/node-logs/scripts/get-node-logs.sh +78 -0
- package/skills/core/node-ping-gateway/SKILL.md +54 -0
- package/skills/core/node-ping-gateway/scripts/ping-node-gateway.sh +71 -0
- package/skills/core/node-show-gateway/SKILL.md +55 -0
- package/skills/core/node-show-gateway/scripts/show-node-gateway.sh +90 -0
- package/skills/core/pod-crash-debug/SKILL.md +135 -0
- package/skills/core/pod-pending-debug/SKILL.md +146 -0
- package/skills/core/pod-ping-gateway/SKILL.md +44 -0
- package/skills/core/pod-ping-gateway/scripts/ping-gateway.sh +76 -0
- package/skills/core/pod-show-gateway/SKILL.md +54 -0
- package/skills/core/pod-show-gateway/scripts/show-gateway.sh +115 -0
- package/skills/core/pvc-debug/SKILL.md +169 -0
- package/skills/core/service-debug/SKILL.md +164 -0
- package/skills/extension/.gitkeep +0 -0
- package/skills/platform/create-skill/SKILL.md +288 -0
- package/skills/platform/manage-skill/SKILL.md +23 -0
- package/skills/platform/update-skill/SKILL.md +52 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login API
|
|
3
|
+
*
|
|
4
|
+
* Handles user login requests and returns a JWT token.
|
|
5
|
+
*/
|
|
6
|
+
import { signJwt } from "./jwt.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create the login handler
|
|
9
|
+
*/
|
|
10
|
+
export function createLoginHandler(userStore, jwtSecret) {
|
|
11
|
+
/**
|
|
12
|
+
* Parse the JSON request body
|
|
13
|
+
*/
|
|
14
|
+
async function parseBody(req) {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
let body = "";
|
|
17
|
+
req.on("data", (chunk) => (body += chunk));
|
|
18
|
+
req.on("end", () => {
|
|
19
|
+
try {
|
|
20
|
+
resolve(body ? JSON.parse(body) : {});
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
reject(new Error("Invalid JSON"));
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
req.on("error", reject);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Handle a login request
|
|
31
|
+
*/
|
|
32
|
+
async function handleLogin(req, res) {
|
|
33
|
+
// Only accept POST
|
|
34
|
+
if (req.method !== "POST") {
|
|
35
|
+
res.writeHead(405, { "Content-Type": "application/json" });
|
|
36
|
+
res.end(JSON.stringify({ ok: false, error: "Method not allowed" }));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const { username, password } = await parseBody(req);
|
|
41
|
+
if (!username || !password) {
|
|
42
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
43
|
+
res.end(JSON.stringify({ ok: false, error: "Missing username or password" }));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Authenticate the user
|
|
47
|
+
const user = userStore.authenticate(username, password);
|
|
48
|
+
if (!user) {
|
|
49
|
+
res.writeHead(401, { "Content-Type": "application/json" });
|
|
50
|
+
res.end(JSON.stringify({ ok: false, error: "Invalid credentials" }));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Issue token
|
|
54
|
+
const token = signJwt({ userId: user.id, username: user.username }, jwtSecret);
|
|
55
|
+
const response = {
|
|
56
|
+
ok: true,
|
|
57
|
+
token,
|
|
58
|
+
user: {
|
|
59
|
+
id: user.id,
|
|
60
|
+
username: user.username,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
64
|
+
res.end(JSON.stringify(response));
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
console.error("[login] Error:", err);
|
|
68
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
69
|
+
res.end(JSON.stringify({ ok: false, error: "Internal server error" }));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { handleLogin };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/gateway/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication middleware
|
|
3
|
+
*
|
|
4
|
+
* Handles authentication for HTTP and WebSocket requests.
|
|
5
|
+
*/
|
|
6
|
+
import type http from "node:http";
|
|
7
|
+
/** Authenticated request context */
|
|
8
|
+
export interface AuthContext {
|
|
9
|
+
userId: string;
|
|
10
|
+
username: string;
|
|
11
|
+
}
|
|
12
|
+
/** Extended request type with auth context */
|
|
13
|
+
export interface AuthenticatedRequest extends http.IncomingMessage {
|
|
14
|
+
auth?: AuthContext;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create the authentication middleware
|
|
18
|
+
*/
|
|
19
|
+
export declare function createAuthMiddleware(jwtSecret: string): {
|
|
20
|
+
authenticateRequest: (req: http.IncomingMessage) => AuthContext | null;
|
|
21
|
+
authenticateWebSocket: (req: http.IncomingMessage) => AuthContext | null;
|
|
22
|
+
authenticateFromQuery: (url: string | undefined, host: string | undefined) => AuthContext | null;
|
|
23
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication middleware
|
|
3
|
+
*
|
|
4
|
+
* Handles authentication for HTTP and WebSocket requests.
|
|
5
|
+
*/
|
|
6
|
+
import { extractBearerToken, verifyJwt } from "./jwt.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create the authentication middleware
|
|
9
|
+
*/
|
|
10
|
+
export function createAuthMiddleware(jwtSecret) {
|
|
11
|
+
/**
|
|
12
|
+
* Authenticate an HTTP request
|
|
13
|
+
*/
|
|
14
|
+
function authenticateRequest(req) {
|
|
15
|
+
const authHeader = req.headers.authorization;
|
|
16
|
+
const token = extractBearerToken(authHeader);
|
|
17
|
+
if (!token)
|
|
18
|
+
return null;
|
|
19
|
+
const payload = verifyJwt(token, jwtSecret);
|
|
20
|
+
if (!payload)
|
|
21
|
+
return null;
|
|
22
|
+
return {
|
|
23
|
+
userId: payload.userId,
|
|
24
|
+
username: payload.username,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get token from URL query parameters (used for WebSocket)
|
|
29
|
+
*/
|
|
30
|
+
function authenticateFromQuery(url, host) {
|
|
31
|
+
if (!url)
|
|
32
|
+
return null;
|
|
33
|
+
try {
|
|
34
|
+
const fullUrl = new URL(url, `http://${host || "localhost"}`);
|
|
35
|
+
const token = fullUrl.searchParams.get("token");
|
|
36
|
+
if (!token)
|
|
37
|
+
return null;
|
|
38
|
+
const payload = verifyJwt(token, jwtSecret);
|
|
39
|
+
if (!payload)
|
|
40
|
+
return null;
|
|
41
|
+
return {
|
|
42
|
+
userId: payload.userId,
|
|
43
|
+
username: payload.username,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Authenticate a WebSocket upgrade request
|
|
52
|
+
*/
|
|
53
|
+
function authenticateWebSocket(req) {
|
|
54
|
+
// Try Authorization header first
|
|
55
|
+
const auth = authenticateRequest(req);
|
|
56
|
+
if (auth)
|
|
57
|
+
return auth;
|
|
58
|
+
// Fall back to query parameter
|
|
59
|
+
return authenticateFromQuery(req.url, req.headers.host);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
authenticateRequest,
|
|
63
|
+
authenticateWebSocket,
|
|
64
|
+
authenticateFromQuery,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/gateway/auth/middleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;AAa1E;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD;;OAEG;IACH,SAAS,mBAAmB,CAAC,GAAyB;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,qBAAqB,CAAC,GAAuB,EAAE,IAAwB;QAC9E,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAExB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE1B,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,qBAAqB,CAAC,GAAyB;QACtD,iCAAiC;QACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAEtB,+BAA+B;QAC/B,OAAO,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth2 Authorization Code Flow — Dex / Generic OIDC
|
|
3
|
+
*
|
|
4
|
+
* Handles the server-side OAuth2 flow:
|
|
5
|
+
* 1. Build authorize URL (redirect user to IdP)
|
|
6
|
+
* 2. Exchange authorization code for tokens
|
|
7
|
+
* 3. Fetch user info from IdP
|
|
8
|
+
*
|
|
9
|
+
* Config is loaded from DB overrides → SICLAW_SSO_* environment variables.
|
|
10
|
+
* If neither is set, SSO is disabled and loadOAuth2Config() returns null.
|
|
11
|
+
*/
|
|
12
|
+
export interface OAuth2Config {
|
|
13
|
+
issuer: string;
|
|
14
|
+
clientId: string;
|
|
15
|
+
clientSecret: string;
|
|
16
|
+
redirectUri: string;
|
|
17
|
+
/** Derived endpoints (from issuer) */
|
|
18
|
+
authorizeUrl: string;
|
|
19
|
+
tokenUrl: string;
|
|
20
|
+
userInfoUrl: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load OAuth2 config from DB overrides → environment variables.
|
|
24
|
+
* Returns null if SSO is not configured.
|
|
25
|
+
*
|
|
26
|
+
* Priority: dbOverrides > SICLAW_SSO_* env vars > null
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadOAuth2Config(dbOverrides?: Record<string, string>): OAuth2Config | null;
|
|
29
|
+
/** Generate a cryptographic random state and store it */
|
|
30
|
+
export declare function generateState(): string;
|
|
31
|
+
/** Validate and consume a state (returns true if valid) */
|
|
32
|
+
export declare function consumeState(state: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Step 1: Build the authorization URL that the user's browser should redirect to.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildAuthorizeUrl(config: OAuth2Config, state: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Step 2: Exchange the authorization code for tokens.
|
|
39
|
+
*/
|
|
40
|
+
export interface TokenResponse {
|
|
41
|
+
access_token: string;
|
|
42
|
+
id_token?: string;
|
|
43
|
+
token_type: string;
|
|
44
|
+
expires_in?: number;
|
|
45
|
+
refresh_token?: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function exchangeCode(config: OAuth2Config, code: string): Promise<TokenResponse>;
|
|
48
|
+
/**
|
|
49
|
+
* Step 3: Fetch user info using the access token.
|
|
50
|
+
*/
|
|
51
|
+
export interface SsoUserInfo {
|
|
52
|
+
sub: string;
|
|
53
|
+
email?: string;
|
|
54
|
+
name?: string;
|
|
55
|
+
preferred_username?: string;
|
|
56
|
+
}
|
|
57
|
+
export declare function fetchUserInfo(config: OAuth2Config, accessToken: string): Promise<SsoUserInfo>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth2 Authorization Code Flow — Dex / Generic OIDC
|
|
3
|
+
*
|
|
4
|
+
* Handles the server-side OAuth2 flow:
|
|
5
|
+
* 1. Build authorize URL (redirect user to IdP)
|
|
6
|
+
* 2. Exchange authorization code for tokens
|
|
7
|
+
* 3. Fetch user info from IdP
|
|
8
|
+
*
|
|
9
|
+
* Config is loaded from DB overrides → SICLAW_SSO_* environment variables.
|
|
10
|
+
* If neither is set, SSO is disabled and loadOAuth2Config() returns null.
|
|
11
|
+
*/
|
|
12
|
+
import crypto from "node:crypto";
|
|
13
|
+
/**
|
|
14
|
+
* Load OAuth2 config from DB overrides → environment variables.
|
|
15
|
+
* Returns null if SSO is not configured.
|
|
16
|
+
*
|
|
17
|
+
* Priority: dbOverrides > SICLAW_SSO_* env vars > null
|
|
18
|
+
*/
|
|
19
|
+
export function loadOAuth2Config(dbOverrides) {
|
|
20
|
+
const issuer = dbOverrides?.["sso.issuer"] ?? process.env.SICLAW_SSO_ISSUER;
|
|
21
|
+
if (!issuer)
|
|
22
|
+
return null;
|
|
23
|
+
const clientId = dbOverrides?.["sso.clientId"] ?? process.env.SICLAW_SSO_CLIENT_ID;
|
|
24
|
+
const clientSecret = dbOverrides?.["sso.clientSecret"] ?? process.env.SICLAW_SSO_CLIENT_SECRET;
|
|
25
|
+
const redirectUri = dbOverrides?.["sso.redirectUri"] ?? process.env.SICLAW_SSO_REDIRECT_URI;
|
|
26
|
+
if (!clientId || !clientSecret || !redirectUri) {
|
|
27
|
+
console.warn("[oauth2] SSO issuer is set but missing clientId, clientSecret, or redirectUri — SSO disabled");
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
// Standard OIDC endpoints (Dex follows this convention)
|
|
31
|
+
const base = issuer.replace(/\/+$/, "");
|
|
32
|
+
return {
|
|
33
|
+
issuer: base,
|
|
34
|
+
clientId,
|
|
35
|
+
clientSecret,
|
|
36
|
+
redirectUri,
|
|
37
|
+
authorizeUrl: `${base}/auth`,
|
|
38
|
+
tokenUrl: `${base}/token`,
|
|
39
|
+
userInfoUrl: `${base}/userinfo`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// ─── CSRF State Store ───────────────────────────────
|
|
43
|
+
const pendingStates = new Map();
|
|
44
|
+
const STATE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
45
|
+
/** Generate a cryptographic random state and store it */
|
|
46
|
+
export function generateState() {
|
|
47
|
+
const state = crypto.randomBytes(16).toString("hex");
|
|
48
|
+
pendingStates.set(state, { createdAt: Date.now() });
|
|
49
|
+
return state;
|
|
50
|
+
}
|
|
51
|
+
/** Validate and consume a state (returns true if valid) */
|
|
52
|
+
export function consumeState(state) {
|
|
53
|
+
const entry = pendingStates.get(state);
|
|
54
|
+
if (!entry)
|
|
55
|
+
return false;
|
|
56
|
+
pendingStates.delete(state);
|
|
57
|
+
return Date.now() - entry.createdAt < STATE_TTL_MS;
|
|
58
|
+
}
|
|
59
|
+
/** Periodic cleanup of expired states */
|
|
60
|
+
setInterval(() => {
|
|
61
|
+
const now = Date.now();
|
|
62
|
+
for (const [key, entry] of pendingStates) {
|
|
63
|
+
if (now - entry.createdAt > STATE_TTL_MS) {
|
|
64
|
+
pendingStates.delete(key);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}, 60_000);
|
|
68
|
+
// ─── OAuth2 Flow Steps ──────────────────────────────
|
|
69
|
+
/**
|
|
70
|
+
* Step 1: Build the authorization URL that the user's browser should redirect to.
|
|
71
|
+
*/
|
|
72
|
+
export function buildAuthorizeUrl(config, state) {
|
|
73
|
+
const params = new URLSearchParams({
|
|
74
|
+
response_type: "code",
|
|
75
|
+
client_id: config.clientId,
|
|
76
|
+
redirect_uri: config.redirectUri,
|
|
77
|
+
scope: "openid profile email",
|
|
78
|
+
state,
|
|
79
|
+
});
|
|
80
|
+
return `${config.authorizeUrl}?${params.toString()}`;
|
|
81
|
+
}
|
|
82
|
+
export async function exchangeCode(config, code) {
|
|
83
|
+
const body = new URLSearchParams({
|
|
84
|
+
grant_type: "authorization_code",
|
|
85
|
+
code,
|
|
86
|
+
client_id: config.clientId,
|
|
87
|
+
client_secret: config.clientSecret,
|
|
88
|
+
redirect_uri: config.redirectUri,
|
|
89
|
+
});
|
|
90
|
+
const res = await fetch(config.tokenUrl, {
|
|
91
|
+
method: "POST",
|
|
92
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
93
|
+
body: body.toString(),
|
|
94
|
+
signal: AbortSignal.timeout(10_000),
|
|
95
|
+
});
|
|
96
|
+
if (!res.ok) {
|
|
97
|
+
const text = await res.text().catch(() => "");
|
|
98
|
+
throw new Error(`Token exchange failed (${res.status}): ${text}`);
|
|
99
|
+
}
|
|
100
|
+
return res.json();
|
|
101
|
+
}
|
|
102
|
+
export async function fetchUserInfo(config, accessToken) {
|
|
103
|
+
const res = await fetch(config.userInfoUrl, {
|
|
104
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
105
|
+
signal: AbortSignal.timeout(10_000),
|
|
106
|
+
});
|
|
107
|
+
if (!res.ok) {
|
|
108
|
+
const text = await res.text().catch(() => "");
|
|
109
|
+
throw new Error(`UserInfo fetch failed (${res.status}): ${text}`);
|
|
110
|
+
}
|
|
111
|
+
return res.json();
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=oauth2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth2.js","sourceRoot":"","sources":["../../../src/gateway/auth/oauth2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User store
|
|
3
|
+
*
|
|
4
|
+
* DB-first: falls back to in-memory when no DB is available.
|
|
5
|
+
*/
|
|
6
|
+
import type { Database } from "../db/index.js";
|
|
7
|
+
export interface User {
|
|
8
|
+
id: string;
|
|
9
|
+
username: string;
|
|
10
|
+
passwordHash: string;
|
|
11
|
+
createdAt: Date;
|
|
12
|
+
/** Channel bindings */
|
|
13
|
+
bindings?: Record<string, string>;
|
|
14
|
+
/** Intern flag: restricted to test environments only */
|
|
15
|
+
testOnly?: boolean;
|
|
16
|
+
/** SSO user flag: password changes are not supported */
|
|
17
|
+
ssoUser?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface CreateUserInput {
|
|
20
|
+
username: string;
|
|
21
|
+
password: string;
|
|
22
|
+
testOnly?: boolean;
|
|
23
|
+
ssoUser?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare class UserStore {
|
|
26
|
+
private users;
|
|
27
|
+
private usernameIndex;
|
|
28
|
+
private repo;
|
|
29
|
+
constructor(db: Database | null);
|
|
30
|
+
/**
|
|
31
|
+
* Async initialization — loads users from DB or creates the default admin
|
|
32
|
+
*/
|
|
33
|
+
init(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Create the default admin user
|
|
36
|
+
*/
|
|
37
|
+
private createDefaultAdmin;
|
|
38
|
+
/**
|
|
39
|
+
* Create a user (async, writes to DB)
|
|
40
|
+
*/
|
|
41
|
+
createAsync(input: CreateUserInput): Promise<User>;
|
|
42
|
+
/**
|
|
43
|
+
* Create a user (sync compat, in-memory only)
|
|
44
|
+
*/
|
|
45
|
+
create(input: CreateUserInput): User;
|
|
46
|
+
/**
|
|
47
|
+
* Get a user by ID
|
|
48
|
+
*/
|
|
49
|
+
getById(id: string): User | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Get a user by username
|
|
52
|
+
*/
|
|
53
|
+
getByUsername(username: string): User | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Authenticate a login attempt
|
|
56
|
+
*/
|
|
57
|
+
authenticate(username: string, password: string): User | null;
|
|
58
|
+
/**
|
|
59
|
+
* Find a user by channel binding
|
|
60
|
+
*/
|
|
61
|
+
getByBinding(channel: string, channelUserId: string): User | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Add a channel binding
|
|
64
|
+
*/
|
|
65
|
+
addBinding(userId: string, channel: string, channelUserId: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Remove a channel binding
|
|
68
|
+
*/
|
|
69
|
+
removeBinding(userId: string, channel: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* SSO login: finds an existing user by username, or auto-creates one if not found
|
|
72
|
+
*/
|
|
73
|
+
findOrCreateBySso(ssoInfo: {
|
|
74
|
+
sub: string;
|
|
75
|
+
email?: string;
|
|
76
|
+
name?: string;
|
|
77
|
+
preferredUsername?: string;
|
|
78
|
+
}): Promise<User>;
|
|
79
|
+
/**
|
|
80
|
+
* Change password (requires verification of the old password)
|
|
81
|
+
*/
|
|
82
|
+
changePassword(userId: string, oldPassword: string, newPassword: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Reset password (admin use — no verification of old password)
|
|
85
|
+
*/
|
|
86
|
+
resetPassword(userId: string, newPassword: string): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Set the testOnly flag
|
|
89
|
+
*/
|
|
90
|
+
setTestOnly(userId: string, testOnly: boolean): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* List all users
|
|
93
|
+
*/
|
|
94
|
+
list(): User[];
|
|
95
|
+
}
|