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,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resend Email Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provisions a project-scoped Resend API key for transactional email.
|
|
5
|
+
* Requires a master RESEND_API_KEY in the environment (from the Resend dashboard).
|
|
6
|
+
*
|
|
7
|
+
* API reference: https://resend.com/docs/api-reference/api-keys/create-api-key
|
|
8
|
+
*/
|
|
9
|
+
export const resendEmailAdapter = {
|
|
10
|
+
name: "resend/email",
|
|
11
|
+
description: "Resend transactional email API with project-scoped key",
|
|
12
|
+
getRequiredTools() {
|
|
13
|
+
return []; // API-based, no CLI needed
|
|
14
|
+
},
|
|
15
|
+
async check(context) {
|
|
16
|
+
const key = context.existingEnv.RESEND_API_KEY;
|
|
17
|
+
return !!(key && key.startsWith("re_"));
|
|
18
|
+
},
|
|
19
|
+
async provision(context) {
|
|
20
|
+
const masterKey = context.existingEnv.RESEND_API_KEY;
|
|
21
|
+
// If a valid key is already set, re-use it
|
|
22
|
+
if (masterKey && masterKey.startsWith("re_")) {
|
|
23
|
+
const fromEmail = context.existingEnv.RESEND_FROM_EMAIL ?? "onboarding@resend.dev";
|
|
24
|
+
return {
|
|
25
|
+
success: true,
|
|
26
|
+
message: "Resend already configured — API key present in environment",
|
|
27
|
+
secrets: {
|
|
28
|
+
RESEND_API_KEY: masterKey,
|
|
29
|
+
RESEND_FROM_EMAIL: fromEmail,
|
|
30
|
+
},
|
|
31
|
+
config: { service: "resend/email", existing: true },
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// No key at all → guide the user to get one
|
|
35
|
+
if (!masterKey) {
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: "Missing RESEND_API_KEY",
|
|
39
|
+
message: [
|
|
40
|
+
"Set RESEND_API_KEY before running kit add resend/email:",
|
|
41
|
+
" 1. Go to https://resend.com/api-keys and create an API key",
|
|
42
|
+
" 2. Export it: export RESEND_API_KEY=re_...",
|
|
43
|
+
" 3. Re-run: kit add resend/email",
|
|
44
|
+
].join("\n"),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// We have a key but it doesn't look valid — treat it the same way
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
error: `RESEND_API_KEY does not look valid (expected prefix 're_', got: '${masterKey.slice(0, 6)}...')`,
|
|
51
|
+
message: "Check your RESEND_API_KEY — it should start with 're_'",
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Resend Email Provisioner — creates a scoped API key via the Resend API.
|
|
57
|
+
*
|
|
58
|
+
* Called by resendEmailAdapter.provision() when a master key is available
|
|
59
|
+
* and we want to create a project-scoped key instead of reusing the master.
|
|
60
|
+
*
|
|
61
|
+
* Exported separately so it can be tested without stubbing the adapter.
|
|
62
|
+
*/
|
|
63
|
+
export async function provisionResendApiKey(masterKey, keyName) {
|
|
64
|
+
try {
|
|
65
|
+
const resp = await fetch("https://api.resend.com/api-keys", {
|
|
66
|
+
method: "POST",
|
|
67
|
+
headers: {
|
|
68
|
+
Authorization: `Bearer ${masterKey}`,
|
|
69
|
+
"Content-Type": "application/json",
|
|
70
|
+
},
|
|
71
|
+
body: JSON.stringify({ name: keyName, permission: "sending_access" }),
|
|
72
|
+
});
|
|
73
|
+
if (!resp.ok) {
|
|
74
|
+
const body = await resp.text();
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: `Resend API error ${resp.status}: ${body}`,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const key = (await resp.json());
|
|
81
|
+
return { success: true, key };
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
error: error instanceof Error ? error.message : "Network error",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Fetch the first verified sending domain for the account.
|
|
92
|
+
* Returns null if none exist (use onboarding@resend.dev as fallback).
|
|
93
|
+
*/
|
|
94
|
+
export async function fetchFirstVerifiedDomain(apiKey) {
|
|
95
|
+
try {
|
|
96
|
+
const resp = await fetch("https://api.resend.com/domains", {
|
|
97
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
98
|
+
});
|
|
99
|
+
if (!resp.ok)
|
|
100
|
+
return null;
|
|
101
|
+
const data = (await resp.json());
|
|
102
|
+
const verified = data.data?.find((d) => d.status === "verified");
|
|
103
|
+
return verified ? verified.name : null;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=resend-email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resend-email.js","sourceRoot":"","sources":["../../src/adapters/resend-email.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { exec } from "../utils/exec.js";
|
|
2
|
+
/**
|
|
3
|
+
* Helper to fetch with timeout using AbortController
|
|
4
|
+
*/
|
|
5
|
+
async function fetchWithTimeout(url, timeoutMs = 5000) {
|
|
6
|
+
const controller = new AbortController();
|
|
7
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
8
|
+
try {
|
|
9
|
+
return await fetch(url, { signal: controller.signal });
|
|
10
|
+
}
|
|
11
|
+
finally {
|
|
12
|
+
clearTimeout(timeout);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* SearXNG Instance Adapter
|
|
17
|
+
* Sets up a self-hosted SearXNG search instance for agents
|
|
18
|
+
*/
|
|
19
|
+
export const searxngInstanceAdapter = {
|
|
20
|
+
name: "searxng/instance",
|
|
21
|
+
description: "Self-hosted SearXNG search engine",
|
|
22
|
+
getRequiredTools() {
|
|
23
|
+
return ["docker"];
|
|
24
|
+
},
|
|
25
|
+
async check(context) {
|
|
26
|
+
try {
|
|
27
|
+
// Check if SearXNG environment variables are configured
|
|
28
|
+
if (context.existingEnv.SEARXNG_URL) {
|
|
29
|
+
// Try to ping the health check endpoint
|
|
30
|
+
try {
|
|
31
|
+
const url = context.existingEnv.SEARXNG_URL;
|
|
32
|
+
const response = await fetchWithTimeout(`${url}/health`);
|
|
33
|
+
return response.ok;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// URL exists but endpoint unreachable
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Check if SearXNG is running in Docker on localhost:8080
|
|
41
|
+
try {
|
|
42
|
+
const { stdout } = await exec("docker", [
|
|
43
|
+
"ps",
|
|
44
|
+
"--filter",
|
|
45
|
+
"name=searxng",
|
|
46
|
+
"--format",
|
|
47
|
+
"{{.Status}}",
|
|
48
|
+
], {
|
|
49
|
+
timeout: 10_000,
|
|
50
|
+
});
|
|
51
|
+
if (stdout.includes("Up")) {
|
|
52
|
+
// Try to verify it's responding
|
|
53
|
+
try {
|
|
54
|
+
const response = await fetchWithTimeout("http://localhost:8080/health");
|
|
55
|
+
return response.ok;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Docker command failed
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
async provision(context) {
|
|
72
|
+
try {
|
|
73
|
+
// Check if Docker is installed
|
|
74
|
+
try {
|
|
75
|
+
await exec("docker", ["--version"], { timeout: 10_000 });
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
error: "Docker not installed",
|
|
81
|
+
message: "SearXNG requires Docker. Please install Docker and try again.",
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Check if SearXNG container already exists and is running
|
|
85
|
+
try {
|
|
86
|
+
const { stdout } = await exec("docker", [
|
|
87
|
+
"ps",
|
|
88
|
+
"-a",
|
|
89
|
+
"--filter",
|
|
90
|
+
"name=searxng",
|
|
91
|
+
"--format",
|
|
92
|
+
"{{.Names}}",
|
|
93
|
+
], {
|
|
94
|
+
timeout: 10_000,
|
|
95
|
+
});
|
|
96
|
+
if (stdout.includes("searxng")) {
|
|
97
|
+
// Container exists, check if it's running
|
|
98
|
+
const { stdout: statusOutput } = await exec("docker", [
|
|
99
|
+
"ps",
|
|
100
|
+
"--filter",
|
|
101
|
+
"name=searxng",
|
|
102
|
+
"--format",
|
|
103
|
+
"{{.Status}}",
|
|
104
|
+
], {
|
|
105
|
+
timeout: 10_000,
|
|
106
|
+
});
|
|
107
|
+
if (statusOutput.includes("Up")) {
|
|
108
|
+
// Already running, verify it's healthy
|
|
109
|
+
try {
|
|
110
|
+
const response = await fetchWithTimeout("http://localhost:8080/health");
|
|
111
|
+
if (response.ok) {
|
|
112
|
+
return {
|
|
113
|
+
success: true,
|
|
114
|
+
message: "SearXNG is already running",
|
|
115
|
+
secrets: {
|
|
116
|
+
SEARXNG_URL: "http://localhost:8080",
|
|
117
|
+
},
|
|
118
|
+
config: {
|
|
119
|
+
service: "searxng/instance",
|
|
120
|
+
container: "searxng",
|
|
121
|
+
port: 8080,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Container is running but not responding, will restart below
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Container exists but not running, start it
|
|
131
|
+
try {
|
|
132
|
+
await exec("docker", ["start", "searxng"], {
|
|
133
|
+
timeout: 30_000,
|
|
134
|
+
});
|
|
135
|
+
// Wait a bit for container to start
|
|
136
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
137
|
+
// Verify it's responding
|
|
138
|
+
try {
|
|
139
|
+
const response = await fetchWithTimeout("http://localhost:8080/health");
|
|
140
|
+
if (response.ok) {
|
|
141
|
+
return {
|
|
142
|
+
success: true,
|
|
143
|
+
message: "SearXNG container started successfully",
|
|
144
|
+
secrets: {
|
|
145
|
+
SEARXNG_URL: "http://localhost:8080",
|
|
146
|
+
},
|
|
147
|
+
config: {
|
|
148
|
+
service: "searxng/instance",
|
|
149
|
+
container: "searxng",
|
|
150
|
+
port: 8080,
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
return {
|
|
157
|
+
success: false,
|
|
158
|
+
error: "SearXNG container started but health check failed",
|
|
159
|
+
message: "Container is running but not responding to health checks",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
return {
|
|
165
|
+
success: false,
|
|
166
|
+
error: e instanceof Error ? e.message : "Failed to start container",
|
|
167
|
+
message: "Could not start existing SearXNG container",
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Container doesn't exist, continue to creation
|
|
174
|
+
}
|
|
175
|
+
// Create and start SearXNG container
|
|
176
|
+
try {
|
|
177
|
+
await exec("docker", [
|
|
178
|
+
"run",
|
|
179
|
+
"-d",
|
|
180
|
+
"--name",
|
|
181
|
+
"searxng",
|
|
182
|
+
"-p",
|
|
183
|
+
"8080:8080",
|
|
184
|
+
"-e",
|
|
185
|
+
"SEARXNG_PORT=8080",
|
|
186
|
+
"searxng/searxng:latest",
|
|
187
|
+
], {
|
|
188
|
+
timeout: 120_000, // 2 minutes for image pull and container creation
|
|
189
|
+
});
|
|
190
|
+
// Wait for container to be healthy
|
|
191
|
+
let attempts = 0;
|
|
192
|
+
const maxAttempts = 30;
|
|
193
|
+
while (attempts < maxAttempts) {
|
|
194
|
+
try {
|
|
195
|
+
const response = await fetchWithTimeout("http://localhost:8080/health");
|
|
196
|
+
if (response.ok) {
|
|
197
|
+
return {
|
|
198
|
+
success: true,
|
|
199
|
+
message: "SearXNG container created and started successfully",
|
|
200
|
+
secrets: {
|
|
201
|
+
SEARXNG_URL: "http://localhost:8080",
|
|
202
|
+
},
|
|
203
|
+
config: {
|
|
204
|
+
service: "searxng/instance",
|
|
205
|
+
container: "searxng",
|
|
206
|
+
port: 8080,
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Not ready yet, wait and retry
|
|
213
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
214
|
+
attempts++;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
success: false,
|
|
219
|
+
error: "SearXNG container started but health check failed after timeout",
|
|
220
|
+
message: "Container started but did not become healthy within timeout period",
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
return {
|
|
225
|
+
success: false,
|
|
226
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
227
|
+
message: "Failed to create and start SearXNG container",
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
return {
|
|
233
|
+
success: false,
|
|
234
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
235
|
+
message: "Failed to provision SearXNG instance",
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
//# sourceMappingURL=searxng-instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searxng-instance.js","sourceRoot":"","sources":["../../src/adapters/searxng-instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sentry — error tracking and performance monitoring.
|
|
3
|
+
* API-based; requires SENTRY_DSN (validated by its `https://` prefix) and
|
|
4
|
+
* carries optional org/project/auth-token (pass-through, needed for CI
|
|
5
|
+
* source-map uploads).
|
|
6
|
+
*/
|
|
7
|
+
export declare const sentryMonitoringAdapter: import("sandstream-kit-adapter-sdk").ServiceAdapter;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { apiKeyAdapter } from "./api-key-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Sentry — error tracking and performance monitoring.
|
|
4
|
+
* API-based; requires SENTRY_DSN (validated by its `https://` prefix) and
|
|
5
|
+
* carries optional org/project/auth-token (pass-through, needed for CI
|
|
6
|
+
* source-map uploads).
|
|
7
|
+
*/
|
|
8
|
+
export const sentryMonitoringAdapter = apiKeyAdapter({
|
|
9
|
+
name: "sentry/monitoring",
|
|
10
|
+
description: "Sentry error tracking and performance monitoring",
|
|
11
|
+
required: [{ env: "SENTRY_DSN", prefix: "https://" }],
|
|
12
|
+
optional: [
|
|
13
|
+
{ env: "SENTRY_ORG" },
|
|
14
|
+
{ env: "SENTRY_PROJECT" },
|
|
15
|
+
{ env: "SENTRY_AUTH_TOKEN" },
|
|
16
|
+
],
|
|
17
|
+
steps: [
|
|
18
|
+
"Set SENTRY_DSN before running kit add sentry/monitoring:",
|
|
19
|
+
" 1. Go to https://sentry.io and create a project",
|
|
20
|
+
" 2. Go to Settings → Projects → <project> → Client Keys (DSN)",
|
|
21
|
+
" 3. Copy the DSN → SENTRY_DSN",
|
|
22
|
+
" 4. Optionally set SENTRY_ORG, SENTRY_PROJECT, SENTRY_AUTH_TOKEN",
|
|
23
|
+
" (needed for source map uploads in CI)",
|
|
24
|
+
" 5. Re-run: kit add sentry/monitoring",
|
|
25
|
+
],
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=sentry-monitoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry-monitoring.js","sourceRoot":"","sources":["../../src/adapters/sentry-monitoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;IACnD,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,kDAAkD;IAC/D,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACrD,QAAQ,EAAE;QACR,EAAE,GAAG,EAAE,YAAY,EAAE;QACrB,EAAE,GAAG,EAAE,gBAAgB,EAAE;QACzB,EAAE,GAAG,EAAE,mBAAmB,EAAE;KAC7B;IACD,KAAK,EAAE;QACL,0DAA0D;QAC1D,mDAAmD;QACnD,gEAAgE;QAChE,gCAAgC;QAChC,mEAAmE;QACnE,4CAA4C;QAC5C,wCAAwC;KACzC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { exec } from "../utils/exec.js";
|
|
2
|
+
/**
|
|
3
|
+
* Stripe Payments Adapter
|
|
4
|
+
* Sets up Stripe for payment processing
|
|
5
|
+
*/
|
|
6
|
+
export const stripePaymentsAdapter = {
|
|
7
|
+
name: "stripe/payments",
|
|
8
|
+
description: "Stripe payment processing with products and price IDs",
|
|
9
|
+
getRequiredTools() {
|
|
10
|
+
return ["stripe"];
|
|
11
|
+
},
|
|
12
|
+
async check(context) {
|
|
13
|
+
try {
|
|
14
|
+
// Check if Stripe API key exists in env
|
|
15
|
+
if (context.existingEnv.STRIPE_SECRET_KEY && context.existingEnv.STRIPE_PUBLISHABLE_KEY) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
// Check if stripe CLI is authenticated
|
|
19
|
+
const { stdout } = await exec("stripe", ["config", "--list"], {
|
|
20
|
+
timeout: 10_000,
|
|
21
|
+
});
|
|
22
|
+
return stdout.includes("test_mode_api_key") || stdout.includes("live_mode_api_key");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
async provision(context) {
|
|
29
|
+
try {
|
|
30
|
+
// Step 1: Ensure Stripe CLI is authenticated
|
|
31
|
+
try {
|
|
32
|
+
const { stdout: configOutput } = await exec("stripe", ["config", "--list"], {
|
|
33
|
+
timeout: 10_000,
|
|
34
|
+
});
|
|
35
|
+
if (!configOutput.includes("test_mode_api_key") && !configOutput.includes("live_mode_api_key")) {
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: "Stripe CLI not authenticated. Run: stripe login",
|
|
39
|
+
message: "Please authenticate with Stripe CLI first",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
error: "Stripe CLI not installed or not authenticated",
|
|
47
|
+
message: "Install Stripe CLI and run: stripe login",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Step 2: Get API keys
|
|
51
|
+
const { stdout: apiKeysOutput } = await exec("stripe", ["config", "--list"], {
|
|
52
|
+
timeout: 10_000,
|
|
53
|
+
});
|
|
54
|
+
const testKeyMatch = apiKeysOutput.match(/test_mode_api_key\s*=\s*(\S+)/);
|
|
55
|
+
const publishableKeyMatch = apiKeysOutput.match(/test_mode_pub_key\s*=\s*(\S+)/);
|
|
56
|
+
if (!testKeyMatch) {
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
error: "Could not retrieve Stripe API keys",
|
|
60
|
+
message: "Failed to get Stripe API keys from CLI config",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const secretKey = testKeyMatch[1];
|
|
64
|
+
// Step 3: Get publishable key from API
|
|
65
|
+
let publishableKey = publishableKeyMatch?.[1];
|
|
66
|
+
if (!publishableKey) {
|
|
67
|
+
try {
|
|
68
|
+
await exec("stripe", [
|
|
69
|
+
"api",
|
|
70
|
+
"/v1/accounts",
|
|
71
|
+
"--method",
|
|
72
|
+
"get",
|
|
73
|
+
], {
|
|
74
|
+
timeout: 10_000,
|
|
75
|
+
});
|
|
76
|
+
// Parse to get publishable key (would need proper JSON parsing in production)
|
|
77
|
+
// For now, construct from secret key pattern
|
|
78
|
+
publishableKey = secretKey.replace("sk_test_", "pk_test_");
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
publishableKey = secretKey.replace("sk_test_", "pk_test_");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Step 4: Create a basic product (optional, can be skipped if products exist)
|
|
85
|
+
const projectName = context.projectName || "default";
|
|
86
|
+
try {
|
|
87
|
+
const { stdout: productsOutput } = await exec("stripe", [
|
|
88
|
+
"products",
|
|
89
|
+
"list",
|
|
90
|
+
"--limit",
|
|
91
|
+
"1",
|
|
92
|
+
], {
|
|
93
|
+
timeout: 10_000,
|
|
94
|
+
});
|
|
95
|
+
// If no products, create a sample one
|
|
96
|
+
if (!productsOutput.includes("prod_")) {
|
|
97
|
+
await exec("stripe", [
|
|
98
|
+
"products",
|
|
99
|
+
"create",
|
|
100
|
+
"--name",
|
|
101
|
+
`${projectName} Subscription`,
|
|
102
|
+
"--description",
|
|
103
|
+
"Auto-generated by kit",
|
|
104
|
+
], {
|
|
105
|
+
timeout: 10_000,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Product creation failed, but that's OK - keys are more important
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
success: true,
|
|
114
|
+
message: "Stripe payments configured successfully",
|
|
115
|
+
secrets: {
|
|
116
|
+
STRIPE_SECRET_KEY: secretKey,
|
|
117
|
+
STRIPE_PUBLISHABLE_KEY: publishableKey,
|
|
118
|
+
},
|
|
119
|
+
config: {
|
|
120
|
+
service: "stripe/payments",
|
|
121
|
+
mode: "test",
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
129
|
+
message: "Failed to provision Stripe payments",
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=stripe-payments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-payments.js","sourceRoot":"","sources":["../../src/adapters/stripe-payments.ts"],"names":[],"mappings":"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"}
|