sandstream-kit 1.0.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 +21 -0
- package/README.md +617 -0
- package/dist/adapters/api-key-adapter.d.ts +35 -0
- package/dist/adapters/api-key-adapter.js +46 -0
- package/dist/adapters/api-key-adapter.js.map +1 -0
- package/dist/adapters/clerk-auth.d.ts +6 -0
- package/dist/adapters/clerk-auth.js +20 -0
- package/dist/adapters/clerk-auth.js.map +1 -0
- package/dist/adapters/cloudflare-r2.d.ts +6 -0
- package/dist/adapters/cloudflare-r2.js +136 -0
- package/dist/adapters/cloudflare-r2.js.map +1 -0
- package/dist/adapters/expo-eas.d.ts +6 -0
- package/dist/adapters/expo-eas.js +129 -0
- package/dist/adapters/expo-eas.js.map +1 -0
- package/dist/adapters/flagsmith-flags.d.ts +5 -0
- package/dist/adapters/flagsmith-flags.js +20 -0
- package/dist/adapters/flagsmith-flags.js.map +1 -0
- package/dist/adapters/flyio-hosting.d.ts +2 -0
- package/dist/adapters/flyio-hosting.js +143 -0
- package/dist/adapters/flyio-hosting.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.js +48 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/inngest-background.d.ts +5 -0
- package/dist/adapters/inngest-background.js +19 -0
- package/dist/adapters/inngest-background.js.map +1 -0
- package/dist/adapters/liveblocks-realtime.d.ts +11 -0
- package/dist/adapters/liveblocks-realtime.js +62 -0
- package/dist/adapters/liveblocks-realtime.js.map +1 -0
- package/dist/adapters/loops-email.d.ts +6 -0
- package/dist/adapters/loops-email.js +18 -0
- package/dist/adapters/loops-email.js.map +1 -0
- package/dist/adapters/neon-db.d.ts +10 -0
- package/dist/adapters/neon-db.js +94 -0
- package/dist/adapters/neon-db.js.map +1 -0
- package/dist/adapters/planetscale-db.d.ts +11 -0
- package/dist/adapters/planetscale-db.js +134 -0
- package/dist/adapters/planetscale-db.js.map +1 -0
- package/dist/adapters/posthog-analytics.d.ts +6 -0
- package/dist/adapters/posthog-analytics.js +22 -0
- package/dist/adapters/posthog-analytics.js.map +1 -0
- package/dist/adapters/railway-hosting.d.ts +2 -0
- package/dist/adapters/railway-hosting.js +136 -0
- package/dist/adapters/railway-hosting.js.map +1 -0
- package/dist/adapters/resend-email.d.ts +35 -0
- package/dist/adapters/resend-email.js +109 -0
- package/dist/adapters/resend-email.js.map +1 -0
- package/dist/adapters/searxng-instance.d.ts +6 -0
- package/dist/adapters/searxng-instance.js +240 -0
- package/dist/adapters/searxng-instance.js.map +1 -0
- package/dist/adapters/sentry-monitoring.d.ts +7 -0
- package/dist/adapters/sentry-monitoring.js +27 -0
- package/dist/adapters/sentry-monitoring.js.map +1 -0
- package/dist/adapters/stripe-payments.d.ts +6 -0
- package/dist/adapters/stripe-payments.js +134 -0
- package/dist/adapters/stripe-payments.js.map +1 -0
- package/dist/adapters/supabase-db.d.ts +6 -0
- package/dist/adapters/supabase-db.js +130 -0
- package/dist/adapters/supabase-db.js.map +1 -0
- package/dist/adapters/tinybird-analytics.d.ts +5 -0
- package/dist/adapters/tinybird-analytics.js +20 -0
- package/dist/adapters/tinybird-analytics.js.map +1 -0
- package/dist/adapters/trigger-background.d.ts +6 -0
- package/dist/adapters/trigger-background.js +20 -0
- package/dist/adapters/trigger-background.js.map +1 -0
- package/dist/adapters/types.d.ts +7 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/upstash-redis.d.ts +6 -0
- package/dist/adapters/upstash-redis.js +88 -0
- package/dist/adapters/upstash-redis.js.map +1 -0
- package/dist/adapters/vercel-hosting.d.ts +6 -0
- package/dist/adapters/vercel-hosting.js +112 -0
- package/dist/adapters/vercel-hosting.js.map +1 -0
- package/dist/agent-adapter-model.d.ts +108 -0
- package/dist/agent-adapter-model.js +6 -0
- package/dist/agent-adapter-model.js.map +1 -0
- package/dist/agent-adapter-service.d.ts +67 -0
- package/dist/agent-adapter-service.js +299 -0
- package/dist/agent-adapter-service.js.map +1 -0
- package/dist/agent-config.d.ts +56 -0
- package/dist/agent-config.js +129 -0
- package/dist/agent-config.js.map +1 -0
- package/dist/agent-governance-model.d.ts +128 -0
- package/dist/agent-governance-model.js +6 -0
- package/dist/agent-governance-model.js.map +1 -0
- package/dist/agent-governance-service.d.ts +101 -0
- package/dist/agent-governance-service.js +319 -0
- package/dist/agent-governance-service.js.map +1 -0
- package/dist/alert-rules-engine.d.ts +102 -0
- package/dist/alert-rules-engine.js +210 -0
- package/dist/alert-rules-engine.js.map +1 -0
- package/dist/analytics-service.d.ts +126 -0
- package/dist/analytics-service.js +318 -0
- package/dist/analytics-service.js.map +1 -0
- package/dist/analyze.d.ts +19 -0
- package/dist/analyze.js +311 -0
- package/dist/analyze.js.map +1 -0
- package/dist/apm-instrumentor.d.ts +119 -0
- package/dist/apm-instrumentor.js +225 -0
- package/dist/apm-instrumentor.js.map +1 -0
- package/dist/approval-model.d.ts +82 -0
- package/dist/approval-model.js +6 -0
- package/dist/approval-model.js.map +1 -0
- package/dist/approval-service.d.ts +39 -0
- package/dist/approval-service.js +236 -0
- package/dist/approval-service.js.map +1 -0
- package/dist/approval.d.ts +22 -0
- package/dist/approval.js +148 -0
- package/dist/approval.js.map +1 -0
- package/dist/audit-logging-model.d.ts +157 -0
- package/dist/audit-logging-model.js +6 -0
- package/dist/audit-logging-model.js.map +1 -0
- package/dist/audit-logging-service.d.ts +89 -0
- package/dist/audit-logging-service.js +367 -0
- package/dist/audit-logging-service.js.map +1 -0
- package/dist/audit-secrets.d.ts +42 -0
- package/dist/audit-secrets.js +126 -0
- package/dist/audit-secrets.js.map +1 -0
- package/dist/audit.d.ts +43 -0
- package/dist/audit.js +286 -0
- package/dist/audit.js.map +1 -0
- package/dist/author-dashboard.d.ts +84 -0
- package/dist/author-dashboard.js +204 -0
- package/dist/author-dashboard.js.map +1 -0
- package/dist/author-notifications.d.ts +130 -0
- package/dist/author-notifications.js +261 -0
- package/dist/author-notifications.js.map +1 -0
- package/dist/author-verification.d.ts +79 -0
- package/dist/author-verification.js +257 -0
- package/dist/author-verification.js.map +1 -0
- package/dist/autonomous-setup-model.d.ts +117 -0
- package/dist/autonomous-setup-model.js +6 -0
- package/dist/autonomous-setup-model.js.map +1 -0
- package/dist/autonomous-setup-service.d.ts +74 -0
- package/dist/autonomous-setup-service.js +325 -0
- package/dist/autonomous-setup-service.js.map +1 -0
- package/dist/badge-system.d.ts +70 -0
- package/dist/badge-system.js +210 -0
- package/dist/badge-system.js.map +1 -0
- package/dist/baseline.d.ts +34 -0
- package/dist/baseline.js +78 -0
- package/dist/baseline.js.map +1 -0
- package/dist/beta-program-service.d.ts +112 -0
- package/dist/beta-program-service.js +240 -0
- package/dist/beta-program-service.js.map +1 -0
- package/dist/budget.d.ts +34 -0
- package/dist/budget.js +159 -0
- package/dist/budget.js.map +1 -0
- package/dist/bumblebee.d.ts +143 -0
- package/dist/bumblebee.js +384 -0
- package/dist/bumblebee.js.map +1 -0
- package/dist/cache-manager.d.ts +97 -0
- package/dist/cache-manager.js +244 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/cdn-adapter.d.ts +64 -0
- package/dist/cdn-adapter.js +263 -0
- package/dist/cdn-adapter.js.map +1 -0
- package/dist/certification-workflow-model.d.ts +95 -0
- package/dist/certification-workflow-model.js +6 -0
- package/dist/certification-workflow-model.js.map +1 -0
- package/dist/certification-workflow-service.d.ts +72 -0
- package/dist/certification-workflow-service.js +305 -0
- package/dist/certification-workflow-service.js.map +1 -0
- package/dist/check-design.d.ts +38 -0
- package/dist/check-design.js +256 -0
- package/dist/check-design.js.map +1 -0
- package/dist/check-gitignore.d.ts +39 -0
- package/dist/check-gitignore.js +156 -0
- package/dist/check-gitignore.js.map +1 -0
- package/dist/check-hooks.d.ts +15 -0
- package/dist/check-hooks.js +72 -0
- package/dist/check-hooks.js.map +1 -0
- package/dist/check-lock.d.ts +16 -0
- package/dist/check-lock.js +94 -0
- package/dist/check-lock.js.map +1 -0
- package/dist/check-secrets.d.ts +11 -0
- package/dist/check-secrets.js +320 -0
- package/dist/check-secrets.js.map +1 -0
- package/dist/check-security.d.ts +13 -0
- package/dist/check-security.js +887 -0
- package/dist/check-security.js.map +1 -0
- package/dist/check-services.d.ts +10 -0
- package/dist/check-services.js +44 -0
- package/dist/check-services.js.map +1 -0
- package/dist/check-skills.d.ts +8 -0
- package/dist/check-skills.js +26 -0
- package/dist/check-skills.js.map +1 -0
- package/dist/check-tests.d.ts +43 -0
- package/dist/check-tests.js +175 -0
- package/dist/check-tests.js.map +1 -0
- package/dist/check-tools.d.ts +8 -0
- package/dist/check-tools.js +42 -0
- package/dist/check-tools.js.map +1 -0
- package/dist/check-web-search.d.ts +12 -0
- package/dist/check-web-search.js +168 -0
- package/dist/check-web-search.js.map +1 -0
- package/dist/ci-cd-publisher.d.ts +162 -0
- package/dist/ci-cd-publisher.js +319 -0
- package/dist/ci-cd-publisher.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +4074 -0
- package/dist/cli.js.map +1 -0
- package/dist/clone.d.ts +25 -0
- package/dist/clone.js +73 -0
- package/dist/clone.js.map +1 -0
- package/dist/completions.d.ts +8 -0
- package/dist/completions.js +250 -0
- package/dist/completions.js.map +1 -0
- package/dist/compression-manager.d.ts +107 -0
- package/dist/compression-manager.js +250 -0
- package/dist/compression-manager.js.map +1 -0
- package/dist/config.d.ts +233 -0
- package/dist/config.js +255 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +38 -0
- package/dist/context.js +86 -0
- package/dist/context.js.map +1 -0
- package/dist/cost-monitor.d.ts +72 -0
- package/dist/cost-monitor.js +218 -0
- package/dist/cost-monitor.js.map +1 -0
- package/dist/create-plugin.d.ts +22 -0
- package/dist/create-plugin.js +266 -0
- package/dist/create-plugin.js.map +1 -0
- package/dist/database.d.ts +123 -0
- package/dist/database.js +354 -0
- package/dist/database.js.map +1 -0
- package/dist/datadog-adapter.d.ts +60 -0
- package/dist/datadog-adapter.js +245 -0
- package/dist/datadog-adapter.js.map +1 -0
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.js +131 -0
- package/dist/doctor.js.map +1 -0
- package/dist/documentation-generator.d.ts +226 -0
- package/dist/documentation-generator.js +348 -0
- package/dist/documentation-generator.js.map +1 -0
- package/dist/elevation-scopes.d.ts +40 -0
- package/dist/elevation-scopes.js +110 -0
- package/dist/elevation-scopes.js.map +1 -0
- package/dist/elevation.d.ts +102 -0
- package/dist/elevation.js +449 -0
- package/dist/elevation.js.map +1 -0
- package/dist/env-diff.d.ts +27 -0
- package/dist/env-diff.js +104 -0
- package/dist/env-diff.js.map +1 -0
- package/dist/env-inspect.d.ts +28 -0
- package/dist/env-inspect.js +81 -0
- package/dist/env-inspect.js.map +1 -0
- package/dist/env-switch.d.ts +37 -0
- package/dist/env-switch.js +102 -0
- package/dist/env-switch.js.map +1 -0
- package/dist/environment.d.ts +27 -0
- package/dist/environment.js +148 -0
- package/dist/environment.js.map +1 -0
- package/dist/error-tracker.d.ts +92 -0
- package/dist/error-tracker.js +206 -0
- package/dist/error-tracker.js.map +1 -0
- package/dist/escalate.d.ts +11 -0
- package/dist/escalate.js +73 -0
- package/dist/escalate.js.map +1 -0
- package/dist/event-stream.d.ts +81 -0
- package/dist/event-stream.js +161 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/fix.d.ts +42 -0
- package/dist/fix.js +419 -0
- package/dist/fix.js.map +1 -0
- package/dist/governance-middleware.d.ts +22 -0
- package/dist/governance-middleware.js +173 -0
- package/dist/governance-middleware.js.map +1 -0
- package/dist/governance.d.ts +44 -0
- package/dist/governance.js +236 -0
- package/dist/governance.js.map +1 -0
- package/dist/hooks.d.ts +25 -0
- package/dist/hooks.js +281 -0
- package/dist/hooks.js.map +1 -0
- package/dist/id-generator.d.ts +43 -0
- package/dist/id-generator.js +47 -0
- package/dist/id-generator.js.map +1 -0
- package/dist/image-optimizer.d.ts +92 -0
- package/dist/image-optimizer.js +202 -0
- package/dist/image-optimizer.js.map +1 -0
- package/dist/install.d.ts +15 -0
- package/dist/install.js +59 -0
- package/dist/install.js.map +1 -0
- package/dist/lock.d.ts +82 -0
- package/dist/lock.js +264 -0
- package/dist/lock.js.map +1 -0
- package/dist/login.d.ts +23 -0
- package/dist/login.js +132 -0
- package/dist/login.js.map +1 -0
- package/dist/mcp-kit-tools-model.d.ts +195 -0
- package/dist/mcp-kit-tools-model.js +6 -0
- package/dist/mcp-kit-tools-model.js.map +1 -0
- package/dist/mcp-kit-tools-service.d.ts +127 -0
- package/dist/mcp-kit-tools-service.js +943 -0
- package/dist/mcp-kit-tools-service.js.map +1 -0
- package/dist/mcp-orchestrator.d.ts +70 -0
- package/dist/mcp-orchestrator.js +175 -0
- package/dist/mcp-orchestrator.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.js +722 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/middleware/rate-limiter.d.ts +74 -0
- package/dist/middleware/rate-limiter.js +342 -0
- package/dist/middleware/rate-limiter.js.map +1 -0
- package/dist/migration-runner.d.ts +66 -0
- package/dist/migration-runner.js +192 -0
- package/dist/migration-runner.js.map +1 -0
- package/dist/migrations.d.ts +25 -0
- package/dist/migrations.js +530 -0
- package/dist/migrations.js.map +1 -0
- package/dist/moderation-system.d.ts +153 -0
- package/dist/moderation-system.js +338 -0
- package/dist/moderation-system.js.map +1 -0
- package/dist/multi-agent-workflow-model.d.ts +125 -0
- package/dist/multi-agent-workflow-model.js +6 -0
- package/dist/multi-agent-workflow-model.js.map +1 -0
- package/dist/multi-agent-workflow-service.d.ts +102 -0
- package/dist/multi-agent-workflow-service.js +452 -0
- package/dist/multi-agent-workflow-service.js.map +1 -0
- package/dist/onepassword.d.ts +75 -0
- package/dist/onepassword.js +140 -0
- package/dist/onepassword.js.map +1 -0
- package/dist/open.d.ts +30 -0
- package/dist/open.js +166 -0
- package/dist/open.js.map +1 -0
- package/dist/output.d.ts +32 -0
- package/dist/output.js +295 -0
- package/dist/output.js.map +1 -0
- package/dist/partner-service.d.ts +101 -0
- package/dist/partner-service.js +191 -0
- package/dist/partner-service.js.map +1 -0
- package/dist/payout-service.d.ts +136 -0
- package/dist/payout-service.js +293 -0
- package/dist/payout-service.js.map +1 -0
- package/dist/pkg.d.ts +30 -0
- package/dist/pkg.js +162 -0
- package/dist/pkg.js.map +1 -0
- package/dist/plugin-loader.d.ts +16 -0
- package/dist/plugin-loader.js +124 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/plugin-registry-model.d.ts +133 -0
- package/dist/plugin-registry-model.js +6 -0
- package/dist/plugin-registry-model.js.map +1 -0
- package/dist/plugin-registry-service.d.ts +109 -0
- package/dist/plugin-registry-service.js +361 -0
- package/dist/plugin-registry-service.js.map +1 -0
- package/dist/plugin-registry.d.ts +58 -0
- package/dist/plugin-registry.js +108 -0
- package/dist/plugin-registry.js.map +1 -0
- package/dist/plugin-updates.d.ts +135 -0
- package/dist/plugin-updates.js +326 -0
- package/dist/plugin-updates.js.map +1 -0
- package/dist/plugins-cli.d.ts +7 -0
- package/dist/plugins-cli.js +157 -0
- package/dist/plugins-cli.js.map +1 -0
- package/dist/plugins.d.ts +88 -0
- package/dist/plugins.js +251 -0
- package/dist/plugins.js.map +1 -0
- package/dist/policy.d.ts +66 -0
- package/dist/policy.js +160 -0
- package/dist/policy.js.map +1 -0
- package/dist/post-pull-audit.d.ts +39 -0
- package/dist/post-pull-audit.js +151 -0
- package/dist/post-pull-audit.js.map +1 -0
- package/dist/provision.d.ts +17 -0
- package/dist/provision.js +147 -0
- package/dist/provision.js.map +1 -0
- package/dist/query-optimizer.d.ts +102 -0
- package/dist/query-optimizer.js +199 -0
- package/dist/query-optimizer.js.map +1 -0
- package/dist/read-only-mode.d.ts +46 -0
- package/dist/read-only-mode.js +71 -0
- package/dist/read-only-mode.js.map +1 -0
- package/dist/redis-adapter.d.ts +71 -0
- package/dist/redis-adapter.js +278 -0
- package/dist/redis-adapter.js.map +1 -0
- package/dist/resilience-tests.d.ts +120 -0
- package/dist/resilience-tests.js +293 -0
- package/dist/resilience-tests.js.map +1 -0
- package/dist/revocation.d.ts +22 -0
- package/dist/revocation.js +100 -0
- package/dist/revocation.js.map +1 -0
- package/dist/run.d.ts +21 -0
- package/dist/run.js +80 -0
- package/dist/run.js.map +1 -0
- package/dist/scan-build.d.ts +18 -0
- package/dist/scan-build.js +100 -0
- package/dist/scan-build.js.map +1 -0
- package/dist/scan-plaintext.d.ts +24 -0
- package/dist/scan-plaintext.js +147 -0
- package/dist/scan-plaintext.js.map +1 -0
- package/dist/scan-staged.d.ts +15 -0
- package/dist/scan-staged.js +70 -0
- package/dist/scan-staged.js.map +1 -0
- package/dist/scan-transcripts.d.ts +23 -0
- package/dist/scan-transcripts.js +93 -0
- package/dist/scan-transcripts.js.map +1 -0
- package/dist/secret-backends.d.ts +50 -0
- package/dist/secret-backends.js +510 -0
- package/dist/secret-backends.js.map +1 -0
- package/dist/secret-expiration.d.ts +46 -0
- package/dist/secret-expiration.js +172 -0
- package/dist/secret-expiration.js.map +1 -0
- package/dist/secrets-migrate.d.ts +75 -0
- package/dist/secrets-migrate.js +185 -0
- package/dist/secrets-migrate.js.map +1 -0
- package/dist/secrets-model.d.ts +77 -0
- package/dist/secrets-model.js +6 -0
- package/dist/secrets-model.js.map +1 -0
- package/dist/secrets-onecli.d.ts +65 -0
- package/dist/secrets-onecli.js +113 -0
- package/dist/secrets-onecli.js.map +1 -0
- package/dist/secrets-propagate.d.ts +48 -0
- package/dist/secrets-propagate.js +201 -0
- package/dist/secrets-propagate.js.map +1 -0
- package/dist/secrets-pull.d.ts +34 -0
- package/dist/secrets-pull.js +118 -0
- package/dist/secrets-pull.js.map +1 -0
- package/dist/secrets-purge-history.d.ts +53 -0
- package/dist/secrets-purge-history.js +144 -0
- package/dist/secrets-purge-history.js.map +1 -0
- package/dist/secrets-rotate-cli.d.ts +54 -0
- package/dist/secrets-rotate-cli.js +438 -0
- package/dist/secrets-rotate-cli.js.map +1 -0
- package/dist/secrets-rotate.d.ts +38 -0
- package/dist/secrets-rotate.js +65 -0
- package/dist/secrets-rotate.js.map +1 -0
- package/dist/secrets-service.d.ts +73 -0
- package/dist/secrets-service.js +283 -0
- package/dist/secrets-service.js.map +1 -0
- package/dist/secrets-set.d.ts +25 -0
- package/dist/secrets-set.js +33 -0
- package/dist/secrets-set.js.map +1 -0
- package/dist/secrets-sync.d.ts +21 -0
- package/dist/secrets-sync.js +215 -0
- package/dist/secrets-sync.js.map +1 -0
- package/dist/secrets-validate.d.ts +41 -0
- package/dist/secrets-validate.js +126 -0
- package/dist/secrets-validate.js.map +1 -0
- package/dist/secrets-vault-migrate.d.ts +71 -0
- package/dist/secrets-vault-migrate.js +258 -0
- package/dist/secrets-vault-migrate.js.map +1 -0
- package/dist/secrets.d.ts +16 -0
- package/dist/secrets.js +72 -0
- package/dist/secrets.js.map +1 -0
- package/dist/security-hardening.d.ts +150 -0
- package/dist/security-hardening.js +275 -0
- package/dist/security-hardening.js.map +1 -0
- package/dist/security-policy.d.ts +89 -0
- package/dist/security-policy.js +174 -0
- package/dist/security-policy.js.map +1 -0
- package/dist/security-prescan.d.ts +117 -0
- package/dist/security-prescan.js +566 -0
- package/dist/security-prescan.js.map +1 -0
- package/dist/sentry-adapter.d.ts +49 -0
- package/dist/sentry-adapter.js +227 -0
- package/dist/sentry-adapter.js.map +1 -0
- package/dist/service-adapter.d.ts +94 -0
- package/dist/service-adapter.js +162 -0
- package/dist/service-adapter.js.map +1 -0
- package/dist/skills.d.ts +13 -0
- package/dist/skills.js +17 -0
- package/dist/skills.js.map +1 -0
- package/dist/sla-monitor.d.ts +107 -0
- package/dist/sla-monitor.js +233 -0
- package/dist/sla-monitor.js.map +1 -0
- package/dist/stack-detector.d.ts +12 -0
- package/dist/stack-detector.js +251 -0
- package/dist/stack-detector.js.map +1 -0
- package/dist/team-model.d.ts +58 -0
- package/dist/team-model.js +83 -0
- package/dist/team-model.js.map +1 -0
- package/dist/team-service.d.ts +54 -0
- package/dist/team-service.js +206 -0
- package/dist/team-service.js.map +1 -0
- package/dist/toml-generator.d.ts +8 -0
- package/dist/toml-generator.js +223 -0
- package/dist/toml-generator.js.map +1 -0
- package/dist/triage-sandbox.d.ts +34 -0
- package/dist/triage-sandbox.js +167 -0
- package/dist/triage-sandbox.js.map +1 -0
- package/dist/triage.d.ts +30 -0
- package/dist/triage.js +79 -0
- package/dist/triage.js.map +1 -0
- package/dist/update-check.d.ts +13 -0
- package/dist/update-check.js +91 -0
- package/dist/update-check.js.map +1 -0
- package/dist/utils/colors.d.ts +14 -0
- package/dist/utils/colors.js +15 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/didYouMean.d.ts +15 -0
- package/dist/utils/didYouMean.js +47 -0
- package/dist/utils/didYouMean.js.map +1 -0
- package/dist/utils/exec.d.ts +21 -0
- package/dist/utils/exec.js +23 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/execFileNoThrow.d.ts +14 -0
- package/dist/utils/execFileNoThrow.js +29 -0
- package/dist/utils/execFileNoThrow.js.map +1 -0
- package/dist/utils/flags.d.ts +19 -0
- package/dist/utils/flags.js +36 -0
- package/dist/utils/flags.js.map +1 -0
- package/dist/utils/parseCommand.d.ts +16 -0
- package/dist/utils/parseCommand.js +13 -0
- package/dist/utils/parseCommand.js.map +1 -0
- package/dist/utils/prompt.d.ts +13 -0
- package/dist/utils/prompt.js +35 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/promptSelect.d.ts +19 -0
- package/dist/utils/promptSelect.js +89 -0
- package/dist/utils/promptSelect.js.map +1 -0
- package/dist/utils/redactSecrets.d.ts +24 -0
- package/dist/utils/redactSecrets.js +134 -0
- package/dist/utils/redactSecrets.js.map +1 -0
- package/dist/validation/dynamic-schema.d.ts +29 -0
- package/dist/validation/dynamic-schema.js +76 -0
- package/dist/validation/dynamic-schema.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Parse a .env file into a key-value record.
|
|
5
|
+
* Handles blank lines, comments (#), and quoted values.
|
|
6
|
+
*/
|
|
7
|
+
export function parseEnvFile(content) {
|
|
8
|
+
const result = {};
|
|
9
|
+
for (const line of content.split("\n")) {
|
|
10
|
+
const trimmed = line.trim();
|
|
11
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
12
|
+
continue;
|
|
13
|
+
const eqIdx = trimmed.indexOf("=");
|
|
14
|
+
if (eqIdx === -1)
|
|
15
|
+
continue;
|
|
16
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
17
|
+
let value = trimmed.slice(eqIdx + 1);
|
|
18
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
19
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
20
|
+
value = value.slice(1, -1);
|
|
21
|
+
}
|
|
22
|
+
result[key] = value;
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Redact a secret value: show first 4 chars + ****
|
|
28
|
+
*/
|
|
29
|
+
export function redactValue(value) {
|
|
30
|
+
if (value.length <= 4)
|
|
31
|
+
return "****";
|
|
32
|
+
return value.slice(0, 4) + "****";
|
|
33
|
+
}
|
|
34
|
+
export async function inspectEnv(config, options = {}) {
|
|
35
|
+
const cwd = options.cwd ?? process.cwd();
|
|
36
|
+
const envPath = join(cwd, ".env.local");
|
|
37
|
+
let envVars = {};
|
|
38
|
+
let envLocalExists = false;
|
|
39
|
+
try {
|
|
40
|
+
const content = await readFile(envPath, "utf-8");
|
|
41
|
+
envVars = parseEnvFile(content);
|
|
42
|
+
envLocalExists = true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// .env.local doesn't exist or is unreadable
|
|
46
|
+
}
|
|
47
|
+
// Collect key names from config and from .env.local
|
|
48
|
+
const keyNames = new Set();
|
|
49
|
+
const keySource = {};
|
|
50
|
+
if (config.secrets?.keys) {
|
|
51
|
+
for (const [name, cfg] of Object.entries(config.secrets.keys)) {
|
|
52
|
+
keyNames.add(name);
|
|
53
|
+
keySource[name] = cfg.source;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
for (const name of Object.keys(envVars)) {
|
|
57
|
+
if (!keyNames.has(name)) {
|
|
58
|
+
keyNames.add(name);
|
|
59
|
+
keySource[name] = ".env.local";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const allKeys = [...keyNames].sort();
|
|
63
|
+
const keys = allKeys.map((name) => {
|
|
64
|
+
const rawValue = envVars[name];
|
|
65
|
+
const set = rawValue !== undefined;
|
|
66
|
+
const entry = { name, set, source: keySource[name] ?? ".env.local" };
|
|
67
|
+
if (set) {
|
|
68
|
+
if (options.showValues) {
|
|
69
|
+
entry.value = rawValue;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
entry.redacted = redactValue(rawValue);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return entry;
|
|
76
|
+
});
|
|
77
|
+
const filteredKeys = options.missingOnly ? keys.filter((k) => !k.set) : keys;
|
|
78
|
+
const ok = keys.every((k) => k.set);
|
|
79
|
+
return { ok, keys: filteredKeys, envLocalExists };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=env-inspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-inspect.js","sourceRoot":"","sources":["../src/env-inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks the active environment ("dev" / "staging" / "prod") on disk so the
|
|
3
|
+
* rest of kit can refuse to materialize prod-scoped credentials when the
|
|
4
|
+
* developer is sitting in `dev`. The marker lives under `.kit/` because
|
|
5
|
+
* `.kit.toml` is meant to be project config (checkable into git), while
|
|
6
|
+
* the active env is per-developer state (gitignored).
|
|
7
|
+
*/
|
|
8
|
+
export type kitEnv = "dev" | "staging" | "prod";
|
|
9
|
+
export declare const KNOWN_ENVS: kitEnv[];
|
|
10
|
+
export declare const ACTIVE_ENV_FILE = ".kit/active-env.json";
|
|
11
|
+
export interface ActiveEnvState {
|
|
12
|
+
env: kitEnv;
|
|
13
|
+
switchedAt: string;
|
|
14
|
+
switchedBy: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function readActiveEnv(cwd?: string): Promise<ActiveEnvState | null>;
|
|
17
|
+
export declare function writeActiveEnv(env: kitEnv, cwd?: string, switchedBy?: string): Promise<ActiveEnvState>;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the active env if set; defaults to "dev" so a project that hasn't
|
|
20
|
+
* opted into env-switching yet behaves safely (no accidental prod-key reads).
|
|
21
|
+
*/
|
|
22
|
+
export declare function getActiveEnv(cwd?: string): Promise<kitEnv>;
|
|
23
|
+
export declare function prodReadAllowed(activeEnv: kitEnv, opts?: {
|
|
24
|
+
explicitOk?: boolean;
|
|
25
|
+
cwd?: string;
|
|
26
|
+
}): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Test-only: reset the module-scoped "warned-once" flag so tests can
|
|
29
|
+
* exercise the warning path deterministically.
|
|
30
|
+
*/
|
|
31
|
+
export declare function _resetProdOkWarningForTests(): void;
|
|
32
|
+
/**
|
|
33
|
+
* A key counts as prod-scoped when its `ref` / `name` / `vault_path` mentions
|
|
34
|
+
* a typical prod marker. Conservative — false positives just nudge the user
|
|
35
|
+
* to confirm; false negatives would defeat the gate.
|
|
36
|
+
*/
|
|
37
|
+
export declare function looksLikeProdKey(refOrName: string | undefined): boolean;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir, access } from "node:fs/promises";
|
|
2
|
+
import { resolve, dirname } from "node:path";
|
|
3
|
+
import { appendAuditEventDirect } from "./audit.js";
|
|
4
|
+
export const KNOWN_ENVS = ["dev", "staging", "prod"];
|
|
5
|
+
export const ACTIVE_ENV_FILE = ".kit/active-env.json";
|
|
6
|
+
export async function readActiveEnv(cwd = process.cwd()) {
|
|
7
|
+
const path = resolve(cwd, ACTIVE_ENV_FILE);
|
|
8
|
+
try {
|
|
9
|
+
await access(path);
|
|
10
|
+
const text = await readFile(path, "utf-8");
|
|
11
|
+
const parsed = JSON.parse(text);
|
|
12
|
+
if (!parsed.env || !KNOWN_ENVS.includes(parsed.env)) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
env: parsed.env,
|
|
17
|
+
switchedAt: parsed.switchedAt ?? new Date().toISOString(),
|
|
18
|
+
switchedBy: parsed.switchedBy ?? "unknown",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function writeActiveEnv(env, cwd = process.cwd(), switchedBy = process.env.USER || "unknown") {
|
|
26
|
+
const state = {
|
|
27
|
+
env,
|
|
28
|
+
switchedAt: new Date().toISOString(),
|
|
29
|
+
switchedBy,
|
|
30
|
+
};
|
|
31
|
+
const path = resolve(cwd, ACTIVE_ENV_FILE);
|
|
32
|
+
await mkdir(dirname(path), { recursive: true });
|
|
33
|
+
await writeFile(path, JSON.stringify(state, null, 2) + "\n", "utf-8");
|
|
34
|
+
return state;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Returns the active env if set; defaults to "dev" so a project that hasn't
|
|
38
|
+
* opted into env-switching yet behaves safely (no accidental prod-key reads).
|
|
39
|
+
*/
|
|
40
|
+
export async function getActiveEnv(cwd = process.cwd()) {
|
|
41
|
+
const state = await readActiveEnv(cwd);
|
|
42
|
+
return state?.env ?? "dev";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Returns true if the caller is allowed to read prod-scoped secrets in the
|
|
46
|
+
* current shell. Two gates: the active env must be "prod" AND either an
|
|
47
|
+
* interactive confirmation has happened OR `KIT_PROD_OK=1` was set
|
|
48
|
+
* explicitly (suitable for CI deploy jobs).
|
|
49
|
+
*
|
|
50
|
+
* When `KIT_PROD_OK=1` authorizes the read, a one-time stderr warning is
|
|
51
|
+
* emitted at the call site (not at the eventual secrets-resolve step) and an
|
|
52
|
+
* audit event is appended. This closes the previous gap where the warning
|
|
53
|
+
* only printed AFTER the prod credential had already been materialized.
|
|
54
|
+
*/
|
|
55
|
+
let warnedAboutProdOk = false;
|
|
56
|
+
function warnProdOkOnce(cwd) {
|
|
57
|
+
if (warnedAboutProdOk)
|
|
58
|
+
return;
|
|
59
|
+
warnedAboutProdOk = true;
|
|
60
|
+
console.error("[kit] WARNING: KIT_PROD_OK=1 active — prod credentials authorized for read in this process.");
|
|
61
|
+
void appendAuditEventDirect({
|
|
62
|
+
operation: "prod-key-bypass",
|
|
63
|
+
environment: "prod",
|
|
64
|
+
success: true,
|
|
65
|
+
metadata: {
|
|
66
|
+
method: "KIT_PROD_OK=1",
|
|
67
|
+
granter: process.env.USER ?? "unknown",
|
|
68
|
+
},
|
|
69
|
+
}, { cwd });
|
|
70
|
+
}
|
|
71
|
+
export function prodReadAllowed(activeEnv, opts = {}) {
|
|
72
|
+
if (activeEnv !== "prod")
|
|
73
|
+
return false;
|
|
74
|
+
if (opts.explicitOk)
|
|
75
|
+
return true;
|
|
76
|
+
if (process.env.KIT_PROD_OK === "1") {
|
|
77
|
+
warnProdOkOnce(opts.cwd ?? process.cwd());
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Test-only: reset the module-scoped "warned-once" flag so tests can
|
|
84
|
+
* exercise the warning path deterministically.
|
|
85
|
+
*/
|
|
86
|
+
export function _resetProdOkWarningForTests() {
|
|
87
|
+
warnedAboutProdOk = false;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A key counts as prod-scoped when its `ref` / `name` / `vault_path` mentions
|
|
91
|
+
* a typical prod marker. Conservative — false positives just nudge the user
|
|
92
|
+
* to confirm; false negatives would defeat the gate.
|
|
93
|
+
*/
|
|
94
|
+
export function looksLikeProdKey(refOrName) {
|
|
95
|
+
if (!refOrName)
|
|
96
|
+
return false;
|
|
97
|
+
// Letter-boundary check: `\b` treats `_` as a word char (e.g. `PRD_DB`
|
|
98
|
+
// wouldn't match `\bPRD\b`). Use explicit letter-not-letter boundaries
|
|
99
|
+
// so `PRD_DB`, `stripe-live-key`, and `op://Prod/…` all trigger.
|
|
100
|
+
return /(?<![A-Za-z])(prod|production|live|prd)(?![A-Za-z])/i.test(refOrName);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=env-switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-switch.js","sourceRoot":"","sources":["../src/env-switch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GovernanceConfig, EnvironmentAccess } from "./config.js";
|
|
2
|
+
export type Environment = "dev" | "staging" | "prod";
|
|
3
|
+
export interface EnvironmentInfo {
|
|
4
|
+
environment: Environment;
|
|
5
|
+
source: "env" | "git" | "default";
|
|
6
|
+
access?: EnvironmentAccess;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Detect current environment based on:
|
|
10
|
+
* 1. NODE_ENV environment variable
|
|
11
|
+
* 2. Git branch name (main→prod, staging→staging, feature/*→dev)
|
|
12
|
+
* 3. Default to 'dev'
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectEnvironment(governance?: GovernanceConfig): EnvironmentInfo;
|
|
15
|
+
/**
|
|
16
|
+
* Check if an operation is allowed in the current environment
|
|
17
|
+
*/
|
|
18
|
+
export declare function isOperationAllowed(operation: "read" | "write" | "delete", envInfo: EnvironmentInfo): boolean;
|
|
19
|
+
export declare function isNonInteractive(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Test-only: reset the module-scoped warning flag.
|
|
22
|
+
*/
|
|
23
|
+
export declare function _resetNonInteractiveWarningForTests(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get a human-readable description of the environment
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatEnvironment(envInfo: EnvironmentInfo): string;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { appendAuditEventDirect } from "./audit.js";
|
|
3
|
+
/**
|
|
4
|
+
* Detect current environment based on:
|
|
5
|
+
* 1. NODE_ENV environment variable
|
|
6
|
+
* 2. Git branch name (main→prod, staging→staging, feature/*→dev)
|
|
7
|
+
* 3. Default to 'dev'
|
|
8
|
+
*/
|
|
9
|
+
export function detectEnvironment(governance) {
|
|
10
|
+
// 1. Check NODE_ENV
|
|
11
|
+
const nodeEnv = process.env.NODE_ENV?.toLowerCase();
|
|
12
|
+
if (nodeEnv === "production") {
|
|
13
|
+
return {
|
|
14
|
+
environment: "prod",
|
|
15
|
+
source: "env",
|
|
16
|
+
access: governance?.access?.prod,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (nodeEnv === "staging") {
|
|
20
|
+
return {
|
|
21
|
+
environment: "staging",
|
|
22
|
+
source: "env",
|
|
23
|
+
access: governance?.access?.staging,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (nodeEnv === "development" || nodeEnv === "dev") {
|
|
27
|
+
return {
|
|
28
|
+
environment: "dev",
|
|
29
|
+
source: "env",
|
|
30
|
+
access: governance?.access?.dev,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// 2. Fall back to git branch
|
|
34
|
+
try {
|
|
35
|
+
const branch = execSync("git rev-parse --abbrev-ref HEAD", {
|
|
36
|
+
encoding: "utf-8",
|
|
37
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
38
|
+
}).trim();
|
|
39
|
+
if (branch === "main" || branch === "master") {
|
|
40
|
+
return {
|
|
41
|
+
environment: "prod",
|
|
42
|
+
source: "git",
|
|
43
|
+
access: governance?.access?.prod,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (branch === "staging") {
|
|
47
|
+
return {
|
|
48
|
+
environment: "staging",
|
|
49
|
+
source: "git",
|
|
50
|
+
access: governance?.access?.staging,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Any other branch (feature/*, dev, etc.) → dev
|
|
54
|
+
return {
|
|
55
|
+
environment: "dev",
|
|
56
|
+
source: "git",
|
|
57
|
+
access: governance?.access?.dev,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// If git is not available or not in a git repo, default to dev
|
|
62
|
+
}
|
|
63
|
+
// 3. Default to dev
|
|
64
|
+
return {
|
|
65
|
+
environment: "dev",
|
|
66
|
+
source: "default",
|
|
67
|
+
access: governance?.access?.dev,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if an operation is allowed in the current environment
|
|
72
|
+
*/
|
|
73
|
+
export function isOperationAllowed(operation, envInfo) {
|
|
74
|
+
if (!envInfo.access) {
|
|
75
|
+
// No access config means allow everything (for backwards compatibility)
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
switch (operation) {
|
|
79
|
+
case "read":
|
|
80
|
+
return envInfo.access.read ?? false;
|
|
81
|
+
case "write":
|
|
82
|
+
return envInfo.access.write ?? false;
|
|
83
|
+
case "delete":
|
|
84
|
+
return envInfo.access.delete ?? false;
|
|
85
|
+
default:
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Returns true when running in a non-interactive context.
|
|
91
|
+
* Checks (in order):
|
|
92
|
+
* 1. --non-interactive flag in process.argv
|
|
93
|
+
* 2. KIT_NON_INTERACTIVE=1 (or =true)
|
|
94
|
+
* 3. CI=true (set by GitHub Actions, CircleCI, and most CI systems)
|
|
95
|
+
*
|
|
96
|
+
* When the env-var path (#2) triggers in a context where a TTY is
|
|
97
|
+
* available, emit a one-time stderr warning + audit event. Combined with
|
|
98
|
+
* `KIT_ELEVATED=1`, non-interactive mode lets destructive ops run with
|
|
99
|
+
* zero acknowledgement; surfacing the choice makes the bypass non-silent.
|
|
100
|
+
* CI=true (#3) is not warned about because that's the normal mode there.
|
|
101
|
+
*/
|
|
102
|
+
let warnedAboutNonInteractive = false;
|
|
103
|
+
function warnNonInteractiveOnce(source) {
|
|
104
|
+
if (warnedAboutNonInteractive)
|
|
105
|
+
return;
|
|
106
|
+
warnedAboutNonInteractive = true;
|
|
107
|
+
console.error(`[kit] WARNING: non-interactive mode active (via ${source}) — all confirmation prompts will be skipped.`);
|
|
108
|
+
void appendAuditEventDirect({
|
|
109
|
+
operation: "non-interactive-mode",
|
|
110
|
+
environment: process.env.NODE_ENV ?? "unknown",
|
|
111
|
+
success: true,
|
|
112
|
+
metadata: { source, granter: process.env.USER ?? "unknown" },
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
export function isNonInteractive() {
|
|
116
|
+
if (process.argv.includes("--non-interactive")) {
|
|
117
|
+
if (process.stdout.isTTY)
|
|
118
|
+
warnNonInteractiveOnce("flag");
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
const flag = process.env.KIT_NON_INTERACTIVE?.toLowerCase();
|
|
122
|
+
if (flag === "1" || flag === "true") {
|
|
123
|
+
if (process.stdout.isTTY)
|
|
124
|
+
warnNonInteractiveOnce("env-var");
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
if (process.env.CI === "true")
|
|
128
|
+
return true;
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Test-only: reset the module-scoped warning flag.
|
|
133
|
+
*/
|
|
134
|
+
export function _resetNonInteractiveWarningForTests() {
|
|
135
|
+
warnedAboutNonInteractive = false;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get a human-readable description of the environment
|
|
139
|
+
*/
|
|
140
|
+
export function formatEnvironment(envInfo) {
|
|
141
|
+
const sourceLabel = {
|
|
142
|
+
env: "NODE_ENV",
|
|
143
|
+
git: "git branch",
|
|
144
|
+
default: "default",
|
|
145
|
+
}[envInfo.source];
|
|
146
|
+
return `${envInfo.environment} (from ${sourceLabel})`;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export interface ErrorLog {
|
|
2
|
+
id: string;
|
|
3
|
+
message: string;
|
|
4
|
+
stack: string;
|
|
5
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
6
|
+
context: Record<string, unknown>;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
userId?: string;
|
|
9
|
+
sessionId?: string;
|
|
10
|
+
resolved: boolean;
|
|
11
|
+
resolvedAt?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ErrorMetrics {
|
|
14
|
+
totalErrors: number;
|
|
15
|
+
errorsBySeverity: Record<string, number>;
|
|
16
|
+
errorsByType: Record<string, number>;
|
|
17
|
+
errorTrend: Array<{
|
|
18
|
+
date: string;
|
|
19
|
+
count: number;
|
|
20
|
+
}>;
|
|
21
|
+
topErrors: Array<{
|
|
22
|
+
message: string;
|
|
23
|
+
count: number;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface ErrorGroup {
|
|
27
|
+
id: string;
|
|
28
|
+
message: string;
|
|
29
|
+
firstSeen: string;
|
|
30
|
+
lastSeen: string;
|
|
31
|
+
occurrences: number;
|
|
32
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
33
|
+
resolved: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare class ErrorTracker {
|
|
36
|
+
private errors;
|
|
37
|
+
private errorGroups;
|
|
38
|
+
private errorIndex;
|
|
39
|
+
/**
|
|
40
|
+
* Log an error.
|
|
41
|
+
*/
|
|
42
|
+
logError(message: string, stack: string, severity?: "critical" | "high" | "medium" | "low", context?: Record<string, unknown>, userId?: string, sessionId?: string): ErrorLog;
|
|
43
|
+
/**
|
|
44
|
+
* Get error by ID.
|
|
45
|
+
*/
|
|
46
|
+
getError(errorId: string): ErrorLog | null;
|
|
47
|
+
/**
|
|
48
|
+
* Resolve an error.
|
|
49
|
+
*/
|
|
50
|
+
resolveError(errorId: string): ErrorLog | null;
|
|
51
|
+
/**
|
|
52
|
+
* Get all unresolved errors.
|
|
53
|
+
*/
|
|
54
|
+
getUnresolvedErrors(): ErrorLog[];
|
|
55
|
+
/**
|
|
56
|
+
* Get errors by severity.
|
|
57
|
+
*/
|
|
58
|
+
getErrorsBySeverity(severity: string): ErrorLog[];
|
|
59
|
+
private indexError;
|
|
60
|
+
private groupError;
|
|
61
|
+
private findGroupForError;
|
|
62
|
+
/**
|
|
63
|
+
* Get all error groups.
|
|
64
|
+
*/
|
|
65
|
+
getAllErrorGroups(): ErrorGroup[];
|
|
66
|
+
/**
|
|
67
|
+
* Get errors in a group.
|
|
68
|
+
*/
|
|
69
|
+
getErrorsByGroup(groupId: string): ErrorLog[];
|
|
70
|
+
/**
|
|
71
|
+
* Get error metrics.
|
|
72
|
+
*/
|
|
73
|
+
getMetrics(): ErrorMetrics;
|
|
74
|
+
/**
|
|
75
|
+
* Get error rate (errors per minute).
|
|
76
|
+
*/
|
|
77
|
+
getErrorRate(): number;
|
|
78
|
+
/**
|
|
79
|
+
* Get most recent errors.
|
|
80
|
+
*/
|
|
81
|
+
getRecentErrors(limit?: number): ErrorLog[];
|
|
82
|
+
/**
|
|
83
|
+
* Clear old errors (older than days).
|
|
84
|
+
*/
|
|
85
|
+
clearOldErrors(days: number): number;
|
|
86
|
+
/**
|
|
87
|
+
* Clear resolved errors.
|
|
88
|
+
*/
|
|
89
|
+
clearResolvedErrors(): number;
|
|
90
|
+
getErrorCache(): Map<string, ErrorLog>;
|
|
91
|
+
getErrorGroupCache(): Map<string, ErrorGroup>;
|
|
92
|
+
}
|