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,46 @@
|
|
|
1
|
+
function normalize(key) {
|
|
2
|
+
return typeof key === "string" ? { env: key } : key;
|
|
3
|
+
}
|
|
4
|
+
function isPresent(env, key) {
|
|
5
|
+
const value = env[key.env];
|
|
6
|
+
return !!value && (!key.prefix || value.startsWith(key.prefix));
|
|
7
|
+
}
|
|
8
|
+
export function apiKeyAdapter(spec) {
|
|
9
|
+
const required = spec.required.map(normalize);
|
|
10
|
+
return {
|
|
11
|
+
name: spec.name,
|
|
12
|
+
description: spec.description,
|
|
13
|
+
getRequiredTools() {
|
|
14
|
+
return []; // API-based, no CLI needed
|
|
15
|
+
},
|
|
16
|
+
async check(context) {
|
|
17
|
+
return required.every((k) => isPresent(context.existingEnv, k));
|
|
18
|
+
},
|
|
19
|
+
async provision(context) {
|
|
20
|
+
const env = context.existingEnv;
|
|
21
|
+
if (required.every((k) => isPresent(env, k))) {
|
|
22
|
+
const secrets = {};
|
|
23
|
+
for (const k of required)
|
|
24
|
+
secrets[k.env] = env[k.env];
|
|
25
|
+
for (const o of spec.optional ?? []) {
|
|
26
|
+
if (env[o.env] !== undefined)
|
|
27
|
+
secrets[o.env] = env[o.env];
|
|
28
|
+
else if (o.default !== undefined)
|
|
29
|
+
secrets[o.env] = o.default;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
success: true,
|
|
33
|
+
message: `${spec.name} already configured — keys present in environment`,
|
|
34
|
+
secrets,
|
|
35
|
+
config: { service: spec.name, existing: true },
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const absent = required.filter((k) => !isPresent(env, k)).map((k) => k.env);
|
|
39
|
+
const error = required.length === 1
|
|
40
|
+
? `Missing ${required[0].env}`
|
|
41
|
+
: `Missing ${spec.name} credentials: ${absent.join(", ")}`;
|
|
42
|
+
return { success: false, error, message: spec.steps.join("\n") };
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=api-key-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key-adapter.js","sourceRoot":"","sources":["../../src/adapters/api-key-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clerk — authentication and user management.
|
|
3
|
+
* No programmatic app creation without an account API key, so provisioning
|
|
4
|
+
* reuses both the secret and publishable keys or returns dashboard steps.
|
|
5
|
+
*/
|
|
6
|
+
export declare const clerkAuthAdapter: import("sandstream-kit-adapter-sdk").ServiceAdapter;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { apiKeyAdapter } from "./api-key-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Clerk — authentication and user management.
|
|
4
|
+
* No programmatic app creation without an account API key, so provisioning
|
|
5
|
+
* reuses both the secret and publishable keys or returns dashboard steps.
|
|
6
|
+
*/
|
|
7
|
+
export const clerkAuthAdapter = apiKeyAdapter({
|
|
8
|
+
name: "clerk/auth",
|
|
9
|
+
description: "Clerk authentication and user management",
|
|
10
|
+
required: ["CLERK_SECRET_KEY", "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY"],
|
|
11
|
+
steps: [
|
|
12
|
+
"Clerk requires manual key retrieval from the dashboard.",
|
|
13
|
+
"1. Go to https://dashboard.clerk.com and create a new application",
|
|
14
|
+
"2. Copy 'Publishable key' → NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY",
|
|
15
|
+
"3. Copy 'Secret keys' → CLERK_SECRET_KEY",
|
|
16
|
+
"4. Optionally copy webhook secret → CLERK_WEBHOOK_SECRET",
|
|
17
|
+
"5. Re-run: kit add clerk/auth (or kit secrets) to write the keys",
|
|
18
|
+
],
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=clerk-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clerk-auth.js","sourceRoot":"","sources":["../../src/adapters/clerk-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC5C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,0CAA0C;IACvD,QAAQ,EAAE,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;IACnE,KAAK,EAAE;QACL,yDAAyD;QACzD,mEAAmE;QACnE,+DAA+D;QAC/D,0CAA0C;QAC1C,0DAA0D;QAC1D,kEAAkE;KACnE;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { exec } from "../utils/exec.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cloudflare R2 Object Storage Adapter
|
|
4
|
+
* Provisions an R2 bucket and writes S3-compatible credentials
|
|
5
|
+
*/
|
|
6
|
+
export const cloudflareR2Adapter = {
|
|
7
|
+
name: "cloudflare/r2",
|
|
8
|
+
description: "Cloudflare R2 object storage (S3-compatible)",
|
|
9
|
+
getRequiredTools() {
|
|
10
|
+
return ["wrangler"];
|
|
11
|
+
},
|
|
12
|
+
async check(context) {
|
|
13
|
+
return !!(context.existingEnv.R2_ACCESS_KEY_ID &&
|
|
14
|
+
context.existingEnv.R2_SECRET_ACCESS_KEY &&
|
|
15
|
+
context.existingEnv.R2_BUCKET_NAME);
|
|
16
|
+
},
|
|
17
|
+
async provision(context) {
|
|
18
|
+
// Check wrangler CLI
|
|
19
|
+
try {
|
|
20
|
+
await exec("wrangler", ["--version"], { timeout: 5_000 });
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {
|
|
24
|
+
success: false,
|
|
25
|
+
error: "Wrangler CLI not installed",
|
|
26
|
+
message: "Install Wrangler: npm install -g wrangler",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Check authentication
|
|
30
|
+
const accountId = context.existingEnv.CLOUDFLARE_ACCOUNT_ID;
|
|
31
|
+
if (!accountId) {
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
error: "CLOUDFLARE_ACCOUNT_ID not set",
|
|
35
|
+
message: [
|
|
36
|
+
"Set CLOUDFLARE_ACCOUNT_ID in your environment, then re-run.",
|
|
37
|
+
"Find it at: https://dash.cloudflare.com (right sidebar)",
|
|
38
|
+
].join("\n"),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Return existing if already configured
|
|
42
|
+
if (context.existingEnv.R2_ACCESS_KEY_ID &&
|
|
43
|
+
context.existingEnv.R2_SECRET_ACCESS_KEY) {
|
|
44
|
+
return {
|
|
45
|
+
success: true,
|
|
46
|
+
message: "Cloudflare R2 already configured — keys present in environment",
|
|
47
|
+
secrets: {
|
|
48
|
+
R2_ACCESS_KEY_ID: context.existingEnv.R2_ACCESS_KEY_ID,
|
|
49
|
+
R2_SECRET_ACCESS_KEY: context.existingEnv.R2_SECRET_ACCESS_KEY,
|
|
50
|
+
R2_BUCKET_NAME: context.existingEnv.R2_BUCKET_NAME ?? "",
|
|
51
|
+
R2_ENDPOINT: context.existingEnv.R2_ENDPOINT ?? `https://${accountId}.r2.cloudflarestorage.com`,
|
|
52
|
+
CLOUDFLARE_ACCOUNT_ID: accountId,
|
|
53
|
+
},
|
|
54
|
+
config: { service: "cloudflare/r2", existing: true },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const bucketName = (context.projectName ?? context.projectPath.split("/").pop() ?? "kit-bucket")
|
|
58
|
+
.toLowerCase()
|
|
59
|
+
.replace(/[^a-z0-9-]/g, "-");
|
|
60
|
+
// Create bucket
|
|
61
|
+
try {
|
|
62
|
+
await exec("wrangler", ["r2", "bucket", "create", bucketName], {
|
|
63
|
+
timeout: 30_000,
|
|
64
|
+
env: { ...process.env, CLOUDFLARE_ACCOUNT_ID: accountId },
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
69
|
+
// Bucket may already exist — that's fine
|
|
70
|
+
if (!msg.includes("already exists")) {
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
error: msg,
|
|
74
|
+
message: "Failed to create R2 bucket",
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const endpoint = `https://${accountId}.r2.cloudflarestorage.com`;
|
|
79
|
+
// R2 API tokens must be created via the Cloudflare dashboard or REST API
|
|
80
|
+
// (wrangler does not expose token creation). Return what we can + manual steps.
|
|
81
|
+
const cfApiToken = context.existingEnv.CF_API_TOKEN;
|
|
82
|
+
if (cfApiToken) {
|
|
83
|
+
// Try to create R2 API token via Cloudflare API
|
|
84
|
+
try {
|
|
85
|
+
const resp = await fetch(`https://api.cloudflare.com/client/v4/accounts/${accountId}/r2/tokens`, {
|
|
86
|
+
method: "POST",
|
|
87
|
+
headers: {
|
|
88
|
+
Authorization: `Bearer ${cfApiToken}`,
|
|
89
|
+
"Content-Type": "application/json",
|
|
90
|
+
},
|
|
91
|
+
body: JSON.stringify({
|
|
92
|
+
name: `${bucketName}-kit`,
|
|
93
|
+
permissions: ["admin:read", "admin:write"],
|
|
94
|
+
buckets: [bucketName],
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
if (resp.ok) {
|
|
98
|
+
const data = (await resp.json());
|
|
99
|
+
const { accessKeyId, secretAccessKey } = data.result;
|
|
100
|
+
return {
|
|
101
|
+
success: true,
|
|
102
|
+
message: `R2 bucket '${bucketName}' created with API token`,
|
|
103
|
+
secrets: {
|
|
104
|
+
R2_ACCESS_KEY_ID: accessKeyId,
|
|
105
|
+
R2_SECRET_ACCESS_KEY: secretAccessKey,
|
|
106
|
+
R2_BUCKET_NAME: bucketName,
|
|
107
|
+
R2_ENDPOINT: endpoint,
|
|
108
|
+
CLOUDFLARE_ACCOUNT_ID: accountId,
|
|
109
|
+
},
|
|
110
|
+
config: { service: "cloudflare/r2", bucketName, accountId },
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Fall through to manual steps
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Return bucket created + manual steps for API token
|
|
119
|
+
return {
|
|
120
|
+
success: true,
|
|
121
|
+
message: [
|
|
122
|
+
`R2 bucket '${bucketName}' created.`,
|
|
123
|
+
"To get R2 API credentials (Access Key ID + Secret), create an API token manually:",
|
|
124
|
+
` https://dash.cloudflare.com/${accountId}/r2/api-tokens`,
|
|
125
|
+
"Then set R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_NAME, R2_ENDPOINT in your environment.",
|
|
126
|
+
].join("\n"),
|
|
127
|
+
secrets: {
|
|
128
|
+
R2_BUCKET_NAME: bucketName,
|
|
129
|
+
R2_ENDPOINT: endpoint,
|
|
130
|
+
CLOUDFLARE_ACCOUNT_ID: accountId,
|
|
131
|
+
},
|
|
132
|
+
config: { service: "cloudflare/r2", bucketName, accountId, tokenRequired: true },
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=cloudflare-r2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-r2.js","sourceRoot":"","sources":["../../src/adapters/cloudflare-r2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { exec } from "../utils/exec.js";
|
|
2
|
+
/**
|
|
3
|
+
* Expo EAS Adapter
|
|
4
|
+
* Sets up Expo Application Services with robot account authentication
|
|
5
|
+
*/
|
|
6
|
+
export const expoEasAdapter = {
|
|
7
|
+
name: "expo/eas",
|
|
8
|
+
description: "Expo Application Services (EAS) with robot account authentication",
|
|
9
|
+
getRequiredTools() {
|
|
10
|
+
return ["eas"];
|
|
11
|
+
},
|
|
12
|
+
async check(context) {
|
|
13
|
+
try {
|
|
14
|
+
// Check if EXPO_TOKEN exists in env
|
|
15
|
+
if (context.existingEnv.EXPO_TOKEN) {
|
|
16
|
+
// Verify the token is valid
|
|
17
|
+
try {
|
|
18
|
+
await exec("eas", ["whoami"], {
|
|
19
|
+
timeout: 10_000,
|
|
20
|
+
env: { ...process.env, EXPO_TOKEN: context.existingEnv.EXPO_TOKEN },
|
|
21
|
+
});
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Token exists but is invalid
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
async provision(context) {
|
|
36
|
+
try {
|
|
37
|
+
// Step 1: Check if EAS CLI is installed
|
|
38
|
+
try {
|
|
39
|
+
await exec("eas", ["--version"], {
|
|
40
|
+
timeout: 5_000,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
error: "EAS CLI not installed",
|
|
47
|
+
message: "Install EAS CLI: npm install -g eas-cli",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Step 2: Check if EXPO_TOKEN is already set
|
|
51
|
+
let expoToken = context.existingEnv.EXPO_TOKEN;
|
|
52
|
+
if (!expoToken) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
error: "EXPO_TOKEN not configured",
|
|
56
|
+
message: `To provision EAS:
|
|
57
|
+
1. Create a robot account at https://expo.dev/settings/accounts
|
|
58
|
+
2. Generate an access token for the robot account
|
|
59
|
+
3. Set EXPO_TOKEN=<your_token> and run 'kit add expo/eas' again
|
|
60
|
+
Or provide EXPO_TOKEN in .env.local`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Step 3: Verify the token by running 'eas whoami'
|
|
64
|
+
try {
|
|
65
|
+
const { stdout: whoamiOutput } = await exec("eas", ["whoami"], {
|
|
66
|
+
timeout: 10_000,
|
|
67
|
+
env: { ...process.env, EXPO_TOKEN: expoToken },
|
|
68
|
+
});
|
|
69
|
+
if (!whoamiOutput || whoamiOutput.includes("Not authenticated")) {
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
error: "EXPO_TOKEN is invalid or expired",
|
|
73
|
+
message: "The provided EXPO_TOKEN does not authenticate successfully. Generate a new token.",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
error: "Failed to verify EXPO_TOKEN",
|
|
81
|
+
message: `Error: ${error instanceof Error ? error.message : "Unknown error"}. Ensure EXPO_TOKEN is valid.`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Step 4: Check project credentials
|
|
85
|
+
try {
|
|
86
|
+
await exec("eas", ["credentials"], {
|
|
87
|
+
cwd: context.projectPath,
|
|
88
|
+
timeout: 15_000,
|
|
89
|
+
env: { ...process.env, EXPO_TOKEN: expoToken },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Credentials check may fail for new projects, that's OK
|
|
94
|
+
// The project will use provisioning certificates if available
|
|
95
|
+
}
|
|
96
|
+
// Step 5: Verify project structure (optional but helpful)
|
|
97
|
+
try {
|
|
98
|
+
await exec("eas", ["build", "--list", "--limit", "1"], {
|
|
99
|
+
cwd: context.projectPath,
|
|
100
|
+
timeout: 15_000,
|
|
101
|
+
env: { ...process.env, EXPO_TOKEN: expoToken },
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Project may have no builds yet, that's fine
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
success: true,
|
|
109
|
+
message: "Expo EAS provisioned successfully with robot account token",
|
|
110
|
+
secrets: {
|
|
111
|
+
EXPO_TOKEN: expoToken,
|
|
112
|
+
},
|
|
113
|
+
config: {
|
|
114
|
+
service: "expo/eas",
|
|
115
|
+
authenticated: true,
|
|
116
|
+
robotAccount: true,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
124
|
+
message: "Failed to provision Expo EAS",
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=expo-eas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expo-eas.js","sourceRoot":"","sources":["../../src/adapters/expo-eas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,mEAAmE;IAEhF,gBAAgB;QACd,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAI,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBACnC,4BAA4B;gBAC5B,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;wBAC5B,OAAO,EAAE,MAAM;wBACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE;qBACpE,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;oBAC9B,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAuB;QACrC,IAAI,CAAC;YACH,wCAAwC;YACxC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE;oBAC/B,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uBAAuB;oBAC9B,OAAO,EAAE,yCAAyC;iBACnD,CAAC;YACJ,CAAC;YAED,6CAA6C;YAC7C,IAAI,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;YAE/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,2BAA2B;oBAClC,OAAO,EAAE;;;;oCAIiB;iBAC3B,CAAC;YACJ,CAAC;YAED,mDAAmD;YACnD,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;oBAC7D,OAAO,EAAE,MAAM;oBACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE;iBAC/C,CAAC,CAAC;gBAEH,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAChE,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,kCAAkC;wBACzC,OAAO,EAAE,mFAAmF;qBAC7F,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,6BAA6B;oBACpC,OAAO,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,+BAA+B;iBAC3G,CAAC;YACJ,CAAC;YAED,oCAAoC;YACpC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE;oBACjC,GAAG,EAAE,OAAO,CAAC,WAAW;oBACxB,OAAO,EAAE,MAAM;oBACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE;iBAC/C,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,yDAAyD;gBACzD,8DAA8D;YAChE,CAAC;YAED,0DAA0D;YAC1D,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE;oBACrD,GAAG,EAAE,OAAO,CAAC,WAAW;oBACxB,OAAO,EAAE,MAAM;oBACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE;iBAC/C,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,4DAA4D;gBACrE,OAAO,EAAE;oBACP,UAAU,EAAE,SAAS;iBACtB;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,UAAU;oBACnB,aAAa,EAAE,IAAI;oBACnB,YAAY,EAAE,IAAI;iBACnB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBAC/D,OAAO,EAAE,8BAA8B;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { apiKeyAdapter } from "./api-key-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Flagsmith — feature flags and remote config (SaaS or self-hosted).
|
|
4
|
+
* API-based; reuses FLAGSMITH_ENVIRONMENT_KEY and carries an optional API URL.
|
|
5
|
+
*/
|
|
6
|
+
export const flagsmithFlagsAdapter = apiKeyAdapter({
|
|
7
|
+
name: "flagsmith/flags",
|
|
8
|
+
description: "Flagsmith feature flags and remote config (SaaS or self-hosted)",
|
|
9
|
+
required: ["FLAGSMITH_ENVIRONMENT_KEY"],
|
|
10
|
+
optional: [{ env: "FLAGSMITH_API_URL", default: "https://edge.api.flagsmith.com/api/v1/" }],
|
|
11
|
+
steps: [
|
|
12
|
+
"Set FLAGSMITH_ENVIRONMENT_KEY before running kit add flagsmith/flags:",
|
|
13
|
+
" 1. Go to https://app.flagsmith.com and create a project and environment",
|
|
14
|
+
" 2. Navigate to SDK Keys → copy the Client-Side environment key",
|
|
15
|
+
" 3. Export it: export FLAGSMITH_ENVIRONMENT_KEY=<your-key>",
|
|
16
|
+
" 4. Re-run: kit add flagsmith/flags",
|
|
17
|
+
" (Self-hosted: also set FLAGSMITH_API_URL to your instance URL)",
|
|
18
|
+
],
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=flagsmith-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flagsmith-flags.js","sourceRoot":"","sources":["../../src/adapters/flagsmith-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;IACjD,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iEAAiE;IAC9E,QAAQ,EAAE,CAAC,2BAA2B,CAAC;IACvC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;IAC3F,KAAK,EAAE;QACL,uEAAuE;QACvE,2EAA2E;QAC3E,kEAAkE;QAClE,6DAA6D;QAC7D,sCAAsC;QACtC,kEAAkE;KACnE;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { exec } from "../utils/exec.js";
|
|
2
|
+
async function runFly(args, cwd, env) {
|
|
3
|
+
try {
|
|
4
|
+
const { stdout, stderr } = await exec("fly", args, {
|
|
5
|
+
cwd,
|
|
6
|
+
timeout: 120_000,
|
|
7
|
+
env: { ...process.env, ...env },
|
|
8
|
+
});
|
|
9
|
+
return { ok: true, stdout: stdout.trim(), stderr: stderr.trim() };
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const e = err;
|
|
13
|
+
return {
|
|
14
|
+
ok: false,
|
|
15
|
+
stdout: e.stdout?.trim() ?? "",
|
|
16
|
+
stderr: (e.stderr ?? e.message ?? String(err)).trim(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export const flyioHostingAdapter = {
|
|
21
|
+
name: "flyio/hosting",
|
|
22
|
+
description: "Fly.io — Container deployment platform",
|
|
23
|
+
getRequiredTools() {
|
|
24
|
+
return ["fly"];
|
|
25
|
+
},
|
|
26
|
+
async check(context) {
|
|
27
|
+
const token = context.existingEnv["FLY_API_TOKEN"];
|
|
28
|
+
const appName = context.existingEnv["FLY_APP_NAME"];
|
|
29
|
+
// If token and app name exist, consider it configured
|
|
30
|
+
if (token && appName)
|
|
31
|
+
return true;
|
|
32
|
+
// Otherwise check if fly CLI is authenticated
|
|
33
|
+
const { ok } = await runFly(["auth", "whoami"], context.projectPath);
|
|
34
|
+
return ok;
|
|
35
|
+
},
|
|
36
|
+
async provision(context) {
|
|
37
|
+
// Key-reuse: if we already have credentials, return them
|
|
38
|
+
const existingToken = context.existingEnv["FLY_API_TOKEN"];
|
|
39
|
+
const existingAppName = context.existingEnv["FLY_APP_NAME"];
|
|
40
|
+
const existingOrgSlug = context.existingEnv["FLY_ORG_SLUG"];
|
|
41
|
+
if (existingToken && existingAppName && existingOrgSlug) {
|
|
42
|
+
return {
|
|
43
|
+
success: true,
|
|
44
|
+
message: "Fly.io app already configured",
|
|
45
|
+
secrets: {
|
|
46
|
+
FLY_API_TOKEN: existingToken,
|
|
47
|
+
FLY_APP_NAME: existingAppName,
|
|
48
|
+
FLY_ORG_SLUG: existingOrgSlug,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Step 1: Check if fly CLI is installed and available
|
|
53
|
+
const versionResult = await runFly(["version"], context.projectPath);
|
|
54
|
+
if (!versionResult.ok) {
|
|
55
|
+
return {
|
|
56
|
+
success: false,
|
|
57
|
+
message: "Fly CLI (flyctl) not found. Install with: brew install flyctl",
|
|
58
|
+
error: "fly CLI not installed",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Step 2: Ensure user is authenticated
|
|
62
|
+
// In headless mode, token should be set via FLY_API_TOKEN env var or via fly auth login --access-token
|
|
63
|
+
const whoamiResult = await runFly(["auth", "whoami"], context.projectPath);
|
|
64
|
+
if (!whoamiResult.ok && !existingToken) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
message: "Not authenticated with Fly.io. Login with: fly auth login",
|
|
68
|
+
error: "not authenticated",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Step 3: Create a new app if needed
|
|
72
|
+
// Parse project name from package.json or use directory name
|
|
73
|
+
let appName = existingAppName;
|
|
74
|
+
if (!appName) {
|
|
75
|
+
// Generate app name from project name or use a default
|
|
76
|
+
const projectName = context.projectName || "kit-app";
|
|
77
|
+
appName = projectName.toLowerCase().replace(/[^a-z0-9-]/g, "-").substring(0, 30);
|
|
78
|
+
// Create the app
|
|
79
|
+
const createResult = await runFly(["apps", "create", appName], context.projectPath);
|
|
80
|
+
if (!createResult.ok) {
|
|
81
|
+
// App might already exist, that's fine
|
|
82
|
+
if (!createResult.stderr.includes("already exists")) {
|
|
83
|
+
return {
|
|
84
|
+
success: false,
|
|
85
|
+
message: `Failed to create Fly.io app: ${createResult.stderr}`,
|
|
86
|
+
error: "failed to create app",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Step 4: Get organization slug
|
|
92
|
+
let orgSlug = existingOrgSlug;
|
|
93
|
+
if (!orgSlug) {
|
|
94
|
+
const statusResult = await runFly(["status", "-a", appName], context.projectPath);
|
|
95
|
+
if (statusResult.ok) {
|
|
96
|
+
// Try to extract org from status output
|
|
97
|
+
// Expected format includes: Organization: <org-slug>
|
|
98
|
+
const orgMatch = statusResult.stdout.match(/Organization:\s+(\S+)/);
|
|
99
|
+
orgSlug = orgMatch?.[1] || "personal";
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
orgSlug = "personal";
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Step 5: Get or create API token
|
|
106
|
+
let token = existingToken;
|
|
107
|
+
if (!token) {
|
|
108
|
+
// Create a deploy token
|
|
109
|
+
const tokenResult = await runFly(["tokens", "create", "deploy", "-x", "720h"], context.projectPath);
|
|
110
|
+
if (tokenResult.ok) {
|
|
111
|
+
// Extract token from output
|
|
112
|
+
// Expected format: Token: <token-value>
|
|
113
|
+
const match = tokenResult.stdout.match(/Token:\s+(\S+)/);
|
|
114
|
+
token = match?.[1] || "";
|
|
115
|
+
if (!token) {
|
|
116
|
+
return {
|
|
117
|
+
success: false,
|
|
118
|
+
message: "Could not parse Fly.io API token",
|
|
119
|
+
error: "failed to parse token",
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Fall back to reading current token
|
|
125
|
+
return {
|
|
126
|
+
success: false,
|
|
127
|
+
message: "Could not create Fly.io deploy token",
|
|
128
|
+
error: "failed to create token",
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
success: true,
|
|
134
|
+
message: `Fly.io app configured: ${appName}`,
|
|
135
|
+
secrets: {
|
|
136
|
+
FLY_API_TOKEN: token,
|
|
137
|
+
FLY_APP_NAME: appName,
|
|
138
|
+
FLY_ORG_SLUG: orgSlug,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=flyio-hosting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flyio-hosting.js","sourceRoot":"","sources":["../../src/adapters/flyio-hosting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service provisioning adapters registry
|
|
3
|
+
*/
|
|
4
|
+
import { stripePaymentsAdapter } from "./stripe-payments.js";
|
|
5
|
+
import { supabaseDbAdapter } from "./supabase-db.js";
|
|
6
|
+
import { vercelHostingAdapter } from "./vercel-hosting.js";
|
|
7
|
+
import { expoEasAdapter } from "./expo-eas.js";
|
|
8
|
+
import { searxngInstanceAdapter } from "./searxng-instance.js";
|
|
9
|
+
import { neonDbAdapter } from "./neon-db.js";
|
|
10
|
+
import { clerkAuthAdapter } from "./clerk-auth.js";
|
|
11
|
+
import { upstashRedisAdapter } from "./upstash-redis.js";
|
|
12
|
+
import { cloudflareR2Adapter } from "./cloudflare-r2.js";
|
|
13
|
+
import { resendEmailAdapter } from "./resend-email.js";
|
|
14
|
+
import { planetscaleDbAdapter } from "./planetscale-db.js";
|
|
15
|
+
import { loopsEmailAdapter } from "./loops-email.js";
|
|
16
|
+
import { liveblocksRealtimeAdapter } from "./liveblocks-realtime.js";
|
|
17
|
+
import { triggerBackgroundAdapter } from "./trigger-background.js";
|
|
18
|
+
import { inngestBackgroundAdapter } from "./inngest-background.js";
|
|
19
|
+
import { flagsmithFlagsAdapter } from "./flagsmith-flags.js";
|
|
20
|
+
import { sentryMonitoringAdapter } from "./sentry-monitoring.js";
|
|
21
|
+
import { tinybirdAnalyticsAdapter } from "./tinybird-analytics.js";
|
|
22
|
+
import { posthogAnalyticsAdapter } from "./posthog-analytics.js";
|
|
23
|
+
import { railwayHostingAdapter } from "./railway-hosting.js";
|
|
24
|
+
import { flyioHostingAdapter } from "./flyio-hosting.js";
|
|
25
|
+
export const adapters = {
|
|
26
|
+
"stripe/payments": stripePaymentsAdapter,
|
|
27
|
+
"supabase/db": supabaseDbAdapter,
|
|
28
|
+
"vercel/hosting": vercelHostingAdapter,
|
|
29
|
+
"expo/eas": expoEasAdapter,
|
|
30
|
+
"searxng/instance": searxngInstanceAdapter,
|
|
31
|
+
"neon/db": neonDbAdapter,
|
|
32
|
+
"clerk/auth": clerkAuthAdapter,
|
|
33
|
+
"upstash/redis": upstashRedisAdapter,
|
|
34
|
+
"cloudflare/r2": cloudflareR2Adapter,
|
|
35
|
+
"resend/email": resendEmailAdapter,
|
|
36
|
+
"planetscale/db": planetscaleDbAdapter,
|
|
37
|
+
"loops/email": loopsEmailAdapter,
|
|
38
|
+
"liveblocks/realtime": liveblocksRealtimeAdapter,
|
|
39
|
+
"trigger/background": triggerBackgroundAdapter,
|
|
40
|
+
"inngest/background": inngestBackgroundAdapter,
|
|
41
|
+
"flagsmith/flags": flagsmithFlagsAdapter,
|
|
42
|
+
"sentry/monitoring": sentryMonitoringAdapter,
|
|
43
|
+
"tinybird/analytics": tinybirdAnalyticsAdapter,
|
|
44
|
+
"posthog/analytics": posthogAnalyticsAdapter,
|
|
45
|
+
"railway/hosting": railwayHostingAdapter,
|
|
46
|
+
"flyio/hosting": flyioHostingAdapter,
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACvC,iBAAiB,EAAE,qBAAqB;IACxC,aAAa,EAAE,iBAAiB;IAChC,gBAAgB,EAAE,oBAAoB;IACtC,UAAU,EAAE,cAAc;IAC1B,kBAAkB,EAAE,sBAAsB;IAC1C,SAAS,EAAE,aAAa;IACxB,YAAY,EAAE,gBAAgB;IAC9B,eAAe,EAAE,mBAAmB;IACpC,eAAe,EAAE,mBAAmB;IACpC,cAAc,EAAE,kBAAkB;IAClC,gBAAgB,EAAE,oBAAoB;IACtC,aAAa,EAAE,iBAAiB;IAChC,qBAAqB,EAAE,yBAAyB;IAChD,oBAAoB,EAAE,wBAAwB;IAC9C,oBAAoB,EAAE,wBAAwB;IAC9C,iBAAiB,EAAE,qBAAqB;IACxC,mBAAmB,EAAE,uBAAuB;IAC5C,oBAAoB,EAAE,wBAAwB;IAC9C,mBAAmB,EAAE,uBAAuB;IAC5C,iBAAiB,EAAE,qBAAqB;IACxC,eAAe,EAAE,mBAAmB;CACrC,CAAC"}
|