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,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost monitoring for the spend-cap policy declared in
|
|
3
|
+
* `.kit-allowlist.json` (see security-policy.ts).
|
|
4
|
+
*
|
|
5
|
+
* v1 scope: provider adapters that have a stable public usage / balance API
|
|
6
|
+
* accessible via the same key already in the env. Anything that requires
|
|
7
|
+
* paid analytics endpoints (Stripe Sigma) or a billing-dashboard scrape is
|
|
8
|
+
* out of scope — we don't want kit to need a separate API.
|
|
9
|
+
*
|
|
10
|
+
* Concretely supported today:
|
|
11
|
+
* - Stripe: `GET /v1/balance` (live + pending balance, all currencies)
|
|
12
|
+
*
|
|
13
|
+
* Stubbed (returns "not implemented" until a public API exists):
|
|
14
|
+
* - OpenAI / Anthropic — usage endpoints require dashboard scraping
|
|
15
|
+
* - Resend — no usage API
|
|
16
|
+
* - Vercel — usage endpoint exists but rate-limited per-account
|
|
17
|
+
*/
|
|
18
|
+
export interface CostSample {
|
|
19
|
+
provider: string;
|
|
20
|
+
/** Logical key the policy is attached to (e.g. STRIPE_SECRET_KEY) */
|
|
21
|
+
policyKey: string;
|
|
22
|
+
/** Current usage / balance figure */
|
|
23
|
+
current: number;
|
|
24
|
+
unit: "usd" | "eur" | "sek" | "tokens" | "requests";
|
|
25
|
+
/** Spend cap from policy, if declared */
|
|
26
|
+
capUsd?: number;
|
|
27
|
+
/** Plain-text status string suitable for table display */
|
|
28
|
+
status: "ok" | "warn" | "over-cap" | "no-cap" | "no-api" | "auth-failed" | "skipped";
|
|
29
|
+
detail: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function sampleCosts(opts: {
|
|
32
|
+
/** Per-key spend cap from policy, keyed by env-var name. */
|
|
33
|
+
caps: Record<string, number | undefined>;
|
|
34
|
+
/** Allow injection (used in tests) instead of reading process.env. */
|
|
35
|
+
env?: Record<string, string | undefined>;
|
|
36
|
+
}): Promise<CostSample[]>;
|
|
37
|
+
export interface CostBaseline {
|
|
38
|
+
/** Provider key (e.g. STRIPE_SECRET_KEY). */
|
|
39
|
+
policyKey: string;
|
|
40
|
+
/** Average daily spend over the last N samples. */
|
|
41
|
+
avgDailyUsd: number;
|
|
42
|
+
/** Most recent observation. */
|
|
43
|
+
lastSampleUsd: number;
|
|
44
|
+
/** When last updated (ISO). */
|
|
45
|
+
updatedAt: string;
|
|
46
|
+
/** Number of samples contributing to avgDailyUsd. */
|
|
47
|
+
sampleCount: number;
|
|
48
|
+
}
|
|
49
|
+
export interface AnomalyAlert {
|
|
50
|
+
policyKey: string;
|
|
51
|
+
provider: string;
|
|
52
|
+
currentUsd: number;
|
|
53
|
+
baselineUsd: number;
|
|
54
|
+
multiplier: number;
|
|
55
|
+
severity: "info" | "warn" | "critical";
|
|
56
|
+
detail: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Compare new samples against stored baselines. Returns alerts for any
|
|
60
|
+
* provider whose current reading exceeds the baseline by a configurable
|
|
61
|
+
* multiplier. Updates baselines in place so subsequent calls see the new
|
|
62
|
+
* average.
|
|
63
|
+
*
|
|
64
|
+
* warn ≥ 2× baseline
|
|
65
|
+
* critical ≥ 4× baseline OR > 1.5× capUsd if a cap is declared
|
|
66
|
+
*/
|
|
67
|
+
export declare function detectCostAnomalies(samples: CostSample[], opts?: {
|
|
68
|
+
cwd?: string;
|
|
69
|
+
warnMultiplier?: number;
|
|
70
|
+
criticalMultiplier?: number;
|
|
71
|
+
persist?: boolean;
|
|
72
|
+
}): Promise<AnomalyAlert[]>;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost monitoring for the spend-cap policy declared in
|
|
3
|
+
* `.kit-allowlist.json` (see security-policy.ts).
|
|
4
|
+
*
|
|
5
|
+
* v1 scope: provider adapters that have a stable public usage / balance API
|
|
6
|
+
* accessible via the same key already in the env. Anything that requires
|
|
7
|
+
* paid analytics endpoints (Stripe Sigma) or a billing-dashboard scrape is
|
|
8
|
+
* out of scope — we don't want kit to need a separate API.
|
|
9
|
+
*
|
|
10
|
+
* Concretely supported today:
|
|
11
|
+
* - Stripe: `GET /v1/balance` (live + pending balance, all currencies)
|
|
12
|
+
*
|
|
13
|
+
* Stubbed (returns "not implemented" until a public API exists):
|
|
14
|
+
* - OpenAI / Anthropic — usage endpoints require dashboard scraping
|
|
15
|
+
* - Resend — no usage API
|
|
16
|
+
* - Vercel — usage endpoint exists but rate-limited per-account
|
|
17
|
+
*/
|
|
18
|
+
async function stripeAdapter(key, opts) {
|
|
19
|
+
// `https://api.stripe.com/v1/balance` returns `{ available: [{amount, currency}], pending: [...] }`.
|
|
20
|
+
// Amounts are in the currency's smallest unit (cents). We sum availability
|
|
21
|
+
// across currencies and surface it as the dominant currency for clarity.
|
|
22
|
+
try {
|
|
23
|
+
const res = await fetch("https://api.stripe.com/v1/balance", {
|
|
24
|
+
headers: { Authorization: `Bearer ${key}` },
|
|
25
|
+
signal: AbortSignal.timeout(8000),
|
|
26
|
+
});
|
|
27
|
+
if (res.status === 401) {
|
|
28
|
+
return {
|
|
29
|
+
provider: "stripe",
|
|
30
|
+
policyKey: "STRIPE_SECRET_KEY",
|
|
31
|
+
current: 0,
|
|
32
|
+
unit: "usd",
|
|
33
|
+
capUsd: opts.capUsd,
|
|
34
|
+
status: "auth-failed",
|
|
35
|
+
detail: "Stripe key not authorized (rotate / re-check restricted scopes)",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (!res.ok) {
|
|
39
|
+
return {
|
|
40
|
+
provider: "stripe",
|
|
41
|
+
policyKey: "STRIPE_SECRET_KEY",
|
|
42
|
+
current: 0,
|
|
43
|
+
unit: "usd",
|
|
44
|
+
capUsd: opts.capUsd,
|
|
45
|
+
status: "no-api",
|
|
46
|
+
detail: `Stripe /v1/balance returned ${res.status}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const data = (await res.json());
|
|
50
|
+
const sumCents = [...data.available, ...data.pending].reduce((sum, b) => sum + b.amount, 0);
|
|
51
|
+
const usd = sumCents / 100;
|
|
52
|
+
const cap = opts.capUsd;
|
|
53
|
+
const status = cap === undefined
|
|
54
|
+
? "no-cap"
|
|
55
|
+
: usd > cap
|
|
56
|
+
? "over-cap"
|
|
57
|
+
: usd > cap * 0.8
|
|
58
|
+
? "warn"
|
|
59
|
+
: "ok";
|
|
60
|
+
return {
|
|
61
|
+
provider: "stripe",
|
|
62
|
+
policyKey: "STRIPE_SECRET_KEY",
|
|
63
|
+
current: usd,
|
|
64
|
+
unit: "usd",
|
|
65
|
+
capUsd: cap,
|
|
66
|
+
status,
|
|
67
|
+
detail: `available + pending across all currencies, converted at 1:1 (kit doesn't FX)`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
return {
|
|
72
|
+
provider: "stripe",
|
|
73
|
+
policyKey: "STRIPE_SECRET_KEY",
|
|
74
|
+
current: 0,
|
|
75
|
+
unit: "usd",
|
|
76
|
+
capUsd: opts.capUsd,
|
|
77
|
+
status: "no-api",
|
|
78
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const STUB_PROVIDERS = {
|
|
83
|
+
OPENAI_API_KEY: {
|
|
84
|
+
envKey: "OPENAI_API_KEY",
|
|
85
|
+
reason: "OpenAI usage endpoint requires dashboard auth; no key-bearable API yet",
|
|
86
|
+
},
|
|
87
|
+
ANTHROPIC_API_KEY: {
|
|
88
|
+
envKey: "ANTHROPIC_API_KEY",
|
|
89
|
+
reason: "Anthropic billing API is dashboard-only",
|
|
90
|
+
},
|
|
91
|
+
RESEND_API_KEY: {
|
|
92
|
+
envKey: "RESEND_API_KEY",
|
|
93
|
+
reason: "Resend exposes send-counts in the dashboard, not via key auth",
|
|
94
|
+
},
|
|
95
|
+
VERCEL_API_TOKEN: {
|
|
96
|
+
envKey: "VERCEL_API_TOKEN",
|
|
97
|
+
reason: "Vercel usage endpoint requires team-id + rate-limited",
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
const ADAPTERS = {
|
|
101
|
+
STRIPE_SECRET_KEY: stripeAdapter,
|
|
102
|
+
};
|
|
103
|
+
export async function sampleCosts(opts) {
|
|
104
|
+
const env = opts.env ?? process.env;
|
|
105
|
+
const samples = [];
|
|
106
|
+
for (const [keyName, adapter] of Object.entries(ADAPTERS)) {
|
|
107
|
+
const value = env[keyName];
|
|
108
|
+
if (!value)
|
|
109
|
+
continue;
|
|
110
|
+
samples.push(await adapter(value, { capUsd: opts.caps[keyName] }));
|
|
111
|
+
}
|
|
112
|
+
for (const [keyName, info] of Object.entries(STUB_PROVIDERS)) {
|
|
113
|
+
const value = env[info.envKey];
|
|
114
|
+
if (!value)
|
|
115
|
+
continue;
|
|
116
|
+
samples.push({
|
|
117
|
+
provider: keyName.replace("_API_KEY", "").toLowerCase(),
|
|
118
|
+
policyKey: keyName,
|
|
119
|
+
current: 0,
|
|
120
|
+
unit: "usd",
|
|
121
|
+
capUsd: opts.caps[keyName],
|
|
122
|
+
status: "no-api",
|
|
123
|
+
detail: info.reason,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return samples;
|
|
127
|
+
}
|
|
128
|
+
// ── Anomaly detection (P3.1 leak-detection layer) ──────────────────────────
|
|
129
|
+
//
|
|
130
|
+
// kit's existing cost-monitor surfaces CURRENT balance. For leak detection
|
|
131
|
+
// we need a BASELINE and a sliding window: a key that suddenly burns 3× its
|
|
132
|
+
// usual spend is the signal that matters. Baseline is stored locally
|
|
133
|
+
// (.kit-cost-baseline.json) and refreshed on a rolling window.
|
|
134
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
135
|
+
import { resolve } from "node:path";
|
|
136
|
+
const BASELINE_FILE = ".kit-cost-baseline.json";
|
|
137
|
+
async function loadBaselines(cwd) {
|
|
138
|
+
try {
|
|
139
|
+
const raw = await readFile(resolve(cwd, BASELINE_FILE), "utf-8");
|
|
140
|
+
return JSON.parse(raw);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return {};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async function saveBaselines(cwd, baselines) {
|
|
147
|
+
await writeFile(resolve(cwd, BASELINE_FILE), JSON.stringify(baselines, null, 2) + "\n", "utf-8");
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Update the rolling baseline for a sample. Simple exponential-moving-average
|
|
151
|
+
* with weight 0.2 on the new sample so a single spike doesn't anchor the
|
|
152
|
+
* baseline; instead, sustained-high readings raise the floor over time.
|
|
153
|
+
*/
|
|
154
|
+
function updateBaseline(prev, sample) {
|
|
155
|
+
const weight = 0.2;
|
|
156
|
+
const prevAvg = prev?.avgDailyUsd ?? sample.current;
|
|
157
|
+
const newAvg = prev ? prevAvg * (1 - weight) + sample.current * weight : sample.current;
|
|
158
|
+
return {
|
|
159
|
+
policyKey: sample.policyKey,
|
|
160
|
+
avgDailyUsd: newAvg,
|
|
161
|
+
lastSampleUsd: sample.current,
|
|
162
|
+
updatedAt: new Date().toISOString(),
|
|
163
|
+
sampleCount: (prev?.sampleCount ?? 0) + 1,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Compare new samples against stored baselines. Returns alerts for any
|
|
168
|
+
* provider whose current reading exceeds the baseline by a configurable
|
|
169
|
+
* multiplier. Updates baselines in place so subsequent calls see the new
|
|
170
|
+
* average.
|
|
171
|
+
*
|
|
172
|
+
* warn ≥ 2× baseline
|
|
173
|
+
* critical ≥ 4× baseline OR > 1.5× capUsd if a cap is declared
|
|
174
|
+
*/
|
|
175
|
+
export async function detectCostAnomalies(samples, opts = {}) {
|
|
176
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
177
|
+
const warnX = opts.warnMultiplier ?? 2;
|
|
178
|
+
const critX = opts.criticalMultiplier ?? 4;
|
|
179
|
+
const persist = opts.persist ?? true;
|
|
180
|
+
const baselines = await loadBaselines(cwd);
|
|
181
|
+
const alerts = [];
|
|
182
|
+
for (const sample of samples) {
|
|
183
|
+
if (sample.status === "auth-failed" || sample.status === "no-api")
|
|
184
|
+
continue;
|
|
185
|
+
const prev = baselines[sample.policyKey];
|
|
186
|
+
const baseline = prev?.avgDailyUsd ?? sample.current;
|
|
187
|
+
const multiplier = baseline > 0 ? sample.current / baseline : 1;
|
|
188
|
+
let severity = null;
|
|
189
|
+
if (sample.capUsd && sample.current > sample.capUsd * 1.5) {
|
|
190
|
+
severity = "critical";
|
|
191
|
+
}
|
|
192
|
+
else if (multiplier >= critX) {
|
|
193
|
+
severity = "critical";
|
|
194
|
+
}
|
|
195
|
+
else if (multiplier >= warnX) {
|
|
196
|
+
severity = "warn";
|
|
197
|
+
}
|
|
198
|
+
if (severity) {
|
|
199
|
+
alerts.push({
|
|
200
|
+
policyKey: sample.policyKey,
|
|
201
|
+
provider: sample.provider,
|
|
202
|
+
currentUsd: sample.current,
|
|
203
|
+
baselineUsd: baseline,
|
|
204
|
+
multiplier,
|
|
205
|
+
severity,
|
|
206
|
+
detail: sample.capUsd
|
|
207
|
+
? `current ${sample.current.toFixed(2)} USD vs baseline ${baseline.toFixed(2)} (${multiplier.toFixed(1)}×); cap ${sample.capUsd}`
|
|
208
|
+
: `current ${sample.current.toFixed(2)} USD vs baseline ${baseline.toFixed(2)} (${multiplier.toFixed(1)}×)`,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
baselines[sample.policyKey] = updateBaseline(prev, sample);
|
|
212
|
+
}
|
|
213
|
+
if (persist) {
|
|
214
|
+
await saveBaselines(cwd, baselines);
|
|
215
|
+
}
|
|
216
|
+
return alerts;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=cost-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-monitor.js","sourceRoot":"","sources":["../src/cost-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface CreatePluginOptions {
|
|
2
|
+
/** Plugin short name, e.g. "aws-s3" → package "sandstream-kit-plugin-aws-s3" */
|
|
3
|
+
name: string;
|
|
4
|
+
/** Directory to create the plugin in (defaults to cwd) */
|
|
5
|
+
cwd?: string;
|
|
6
|
+
/** Skip running npm install after scaffolding */
|
|
7
|
+
skipInstall?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface CreatePluginResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
pluginDir: string;
|
|
12
|
+
packageName: string;
|
|
13
|
+
message: string;
|
|
14
|
+
nextSteps: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Scaffold a new kit adapter plugin from the reference template.
|
|
18
|
+
*
|
|
19
|
+
* Creates `./kit-plugin-<name>/` with a working TypeScript adapter
|
|
20
|
+
* that builds and passes tests immediately.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createPlugin(opts: CreatePluginOptions): Promise<CreatePluginResult>;
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { resolve, join } from "node:path";
|
|
3
|
+
import { exec } from "./utils/exec.js";
|
|
4
|
+
/**
|
|
5
|
+
* Scaffold a new kit adapter plugin from the reference template.
|
|
6
|
+
*
|
|
7
|
+
* Creates `./kit-plugin-<name>/` with a working TypeScript adapter
|
|
8
|
+
* that builds and passes tests immediately.
|
|
9
|
+
*/
|
|
10
|
+
export async function createPlugin(opts) {
|
|
11
|
+
const { name } = opts;
|
|
12
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
13
|
+
// Normalise: strip "kit-plugin-" prefix if the user passed the full name.
|
|
14
|
+
// Community plugins use the unscoped `kit-plugin-<name>` convention (cf. eslint-plugin-*);
|
|
15
|
+
// only first-party packages live under the @sandstream scope.
|
|
16
|
+
const shortName = name.replace(/^kit-plugin-/, "");
|
|
17
|
+
const packageName = `kit-plugin-${shortName}`;
|
|
18
|
+
const pluginDir = resolve(cwd, packageName);
|
|
19
|
+
// Capitalise for class/export names: "aws-s3" → "AwsS3", "my-service" → "MyService"
|
|
20
|
+
const titleCase = shortName
|
|
21
|
+
.split(/[-_]/)
|
|
22
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
23
|
+
.join("");
|
|
24
|
+
const adapterName = `${titleCase.charAt(0).toLowerCase()}${titleCase.slice(1)}Adapter`;
|
|
25
|
+
const serviceName = shortName; // e.g. "aws-s3/deploy" — user can change
|
|
26
|
+
await mkdir(pluginDir, { recursive: true });
|
|
27
|
+
await mkdir(join(pluginDir, "src"), { recursive: true });
|
|
28
|
+
const typesDir = join(pluginDir, "src", "types");
|
|
29
|
+
await mkdir(typesDir, { recursive: true });
|
|
30
|
+
await writeFile(join(pluginDir, "package.json"), packageJsonTemplate(packageName), "utf-8");
|
|
31
|
+
await writeFile(join(pluginDir, "tsconfig.json"), tsconfigTemplate(), "utf-8");
|
|
32
|
+
await writeFile(join(pluginDir, "README.md"), readmeTemplate(packageName, shortName), "utf-8");
|
|
33
|
+
await writeFile(join(typesDir, "adapter-sdk.d.ts"), adapterSdkStub(), "utf-8");
|
|
34
|
+
await writeFile(join(pluginDir, "src", `${shortName}.ts`), adapterTemplate(adapterName, serviceName), "utf-8");
|
|
35
|
+
await writeFile(join(pluginDir, "src", `${shortName}.test.ts`), testTemplate(adapterName, serviceName), "utf-8");
|
|
36
|
+
await writeFile(join(pluginDir, "src", "index.ts"), indexTemplate(adapterName, shortName), "utf-8");
|
|
37
|
+
if (!opts.skipInstall) {
|
|
38
|
+
try {
|
|
39
|
+
await exec("npm", ["install"], { cwd: pluginDir, timeout: 60_000 });
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Non-fatal: user can run manually
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
success: true,
|
|
47
|
+
pluginDir,
|
|
48
|
+
packageName,
|
|
49
|
+
message: `Created ${packageName} in ./${packageName}/`,
|
|
50
|
+
nextSteps: [
|
|
51
|
+
`cd ${packageName}`,
|
|
52
|
+
`npm run build`,
|
|
53
|
+
`npm test`,
|
|
54
|
+
`# Edit src/${shortName}.ts to implement your adapter`,
|
|
55
|
+
`# Then publish: npm publish`,
|
|
56
|
+
`# And add to your project: { "kitPlugins": ["${packageName}"] }`,
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ─── templates ────────────────────────────────────────────────────────────────
|
|
61
|
+
function adapterSdkStub() {
|
|
62
|
+
return `/**
|
|
63
|
+
* Bundled type stub for sandstream-kit-adapter-sdk.
|
|
64
|
+
* This file lets the plugin build standalone without installing the SDK package.
|
|
65
|
+
*
|
|
66
|
+
* When sandstream-kit-adapter-sdk is published to npm, you can:
|
|
67
|
+
* 1. Run: npm install --save-dev sandstream-kit-adapter-sdk
|
|
68
|
+
* 2. Remove the paths alias from tsconfig.json
|
|
69
|
+
* 3. Delete this file
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
export interface ProvisionResult {
|
|
73
|
+
success: boolean;
|
|
74
|
+
message: string;
|
|
75
|
+
secrets?: Record<string, string>;
|
|
76
|
+
config?: Record<string, unknown>;
|
|
77
|
+
error?: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface AdapterContext {
|
|
81
|
+
projectName?: string;
|
|
82
|
+
projectPath: string;
|
|
83
|
+
existingEnv: Record<string, string>;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface ServiceAdapter {
|
|
87
|
+
name: string;
|
|
88
|
+
description: string;
|
|
89
|
+
check(context: AdapterContext): Promise<boolean>;
|
|
90
|
+
provision(context: AdapterContext): Promise<ProvisionResult>;
|
|
91
|
+
getRequiredTools(): string[];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface AdapterRegistry {
|
|
95
|
+
[key: string]: ServiceAdapter;
|
|
96
|
+
}
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
function packageJsonTemplate(packageName) {
|
|
100
|
+
return JSON.stringify({
|
|
101
|
+
name: packageName,
|
|
102
|
+
version: "0.1.0",
|
|
103
|
+
description: `kit adapter plugin for ${packageName}`,
|
|
104
|
+
type: "module",
|
|
105
|
+
exports: {
|
|
106
|
+
".": {
|
|
107
|
+
types: "./dist/index.d.ts",
|
|
108
|
+
default: "./dist/index.js",
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
files: ["dist", "!dist/**/*.test.*", "README.md"],
|
|
112
|
+
scripts: {
|
|
113
|
+
build: "tsc",
|
|
114
|
+
test: "node --test dist/*.test.js",
|
|
115
|
+
},
|
|
116
|
+
// sandstream-kit-adapter-sdk types are bundled in src/types/adapter-sdk.d.ts so this
|
|
117
|
+
// plugin builds without any registry dependencies. Once sandstream-kit-adapter-sdk is
|
|
118
|
+
// published, add it here: peerDependencies: { "sandstream-kit-adapter-sdk": ">=0.1.0" }
|
|
119
|
+
devDependencies: {
|
|
120
|
+
"@types/node": "^22.0.0",
|
|
121
|
+
typescript: "^5.9.3",
|
|
122
|
+
},
|
|
123
|
+
}, null, 2) + "\n";
|
|
124
|
+
}
|
|
125
|
+
function tsconfigTemplate() {
|
|
126
|
+
return JSON.stringify({
|
|
127
|
+
compilerOptions: {
|
|
128
|
+
target: "ES2022",
|
|
129
|
+
module: "Node16",
|
|
130
|
+
moduleResolution: "Node16",
|
|
131
|
+
outDir: "dist",
|
|
132
|
+
rootDir: "src",
|
|
133
|
+
strict: true,
|
|
134
|
+
declaration: true,
|
|
135
|
+
declarationMap: true,
|
|
136
|
+
sourceMap: true,
|
|
137
|
+
// baseUrl + paths: maps sandstream-kit-adapter-sdk to the bundled type stub so the
|
|
138
|
+
// plugin builds without installing the SDK package. Once sandstream-kit-adapter-sdk is
|
|
139
|
+
// published to npm, remove these two entries and install the real package.
|
|
140
|
+
baseUrl: "src",
|
|
141
|
+
paths: {
|
|
142
|
+
"sandstream-kit-adapter-sdk": ["types/adapter-sdk.d.ts"],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
include: ["src"],
|
|
146
|
+
}, null, 2) + "\n";
|
|
147
|
+
}
|
|
148
|
+
function adapterTemplate(adapterName, serviceName) {
|
|
149
|
+
return `import type { ServiceAdapter, AdapterContext, ProvisionResult } from "sandstream-kit-adapter-sdk";
|
|
150
|
+
|
|
151
|
+
export const ${adapterName}: ServiceAdapter = {
|
|
152
|
+
name: "${serviceName}/deploy",
|
|
153
|
+
description: "TODO: describe what this adapter provisions",
|
|
154
|
+
|
|
155
|
+
// Return CLI tool names required for this adapter.
|
|
156
|
+
// Return an empty array for API-based adapters (no CLI needed).
|
|
157
|
+
getRequiredTools(): string[] {
|
|
158
|
+
return [];
|
|
159
|
+
},
|
|
160
|
+
|
|
161
|
+
// Return true if the service is already provisioned.
|
|
162
|
+
async check(context: AdapterContext): Promise<boolean> {
|
|
163
|
+
return !!context.existingEnv["MY_SERVICE_KEY"];
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
// Provision the service. Should be idempotent.
|
|
167
|
+
async provision(context: AdapterContext): Promise<ProvisionResult> {
|
|
168
|
+
const key = context.existingEnv["MY_SERVICE_KEY"];
|
|
169
|
+
|
|
170
|
+
// Key-reuse pattern: return existing key if already set
|
|
171
|
+
if (key) {
|
|
172
|
+
return {
|
|
173
|
+
success: true,
|
|
174
|
+
message: "MY_SERVICE_KEY already configured",
|
|
175
|
+
secrets: { MY_SERVICE_KEY: key },
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// TODO: implement provisioning logic
|
|
180
|
+
return {
|
|
181
|
+
success: false,
|
|
182
|
+
error: "Missing MY_SERVICE_KEY",
|
|
183
|
+
message: [
|
|
184
|
+
"Set MY_SERVICE_KEY in .env.local:",
|
|
185
|
+
"1. Visit https://example.com/dashboard/api-keys",
|
|
186
|
+
"2. Create a new API key",
|
|
187
|
+
"3. Add to .env.local: MY_SERVICE_KEY=your_key_here",
|
|
188
|
+
].join("\\n"),
|
|
189
|
+
};
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
`;
|
|
193
|
+
}
|
|
194
|
+
function testTemplate(adapterName, serviceName) {
|
|
195
|
+
const importName = adapterName;
|
|
196
|
+
return `import { describe, it } from "node:test";
|
|
197
|
+
import assert from "node:assert/strict";
|
|
198
|
+
import { ${importName} } from "./${serviceName}.js";
|
|
199
|
+
|
|
200
|
+
const ctx = (env: Record<string, string> = {}) => ({
|
|
201
|
+
projectPath: "/tmp/test-project",
|
|
202
|
+
projectName: "test-project",
|
|
203
|
+
existingEnv: env,
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
describe("${importName}", () => {
|
|
207
|
+
it("has correct name", () => {
|
|
208
|
+
assert.equal(${importName}.name, "${serviceName}/deploy");
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("check returns false when key is absent", async () => {
|
|
212
|
+
assert.equal(await ${importName}.check(ctx()), false);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it("check returns true when key is present", async () => {
|
|
216
|
+
assert.equal(await ${importName}.check(ctx({ MY_SERVICE_KEY: "test" })), true);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it("provision returns error when key is missing", async () => {
|
|
220
|
+
const result = await ${importName}.provision(ctx());
|
|
221
|
+
assert.equal(result.success, false);
|
|
222
|
+
assert.ok(result.error);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it("provision returns existing key when already set", async () => {
|
|
226
|
+
const result = await ${importName}.provision(ctx({ MY_SERVICE_KEY: "sk_test" }));
|
|
227
|
+
assert.equal(result.success, true);
|
|
228
|
+
assert.equal(result.secrets?.["MY_SERVICE_KEY"], "sk_test");
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
`;
|
|
232
|
+
}
|
|
233
|
+
function indexTemplate(adapterName, shortName) {
|
|
234
|
+
return `export { ${adapterName} as adapter } from "./${shortName}.js";\n`;
|
|
235
|
+
}
|
|
236
|
+
function readmeTemplate(packageName, shortName) {
|
|
237
|
+
return `# ${packageName}
|
|
238
|
+
|
|
239
|
+
[kit](https://github.com/sandstream/kit) adapter plugin for ${shortName}.
|
|
240
|
+
|
|
241
|
+
## Installation
|
|
242
|
+
|
|
243
|
+
\`\`\`bash
|
|
244
|
+
npm install --save-dev ${packageName}
|
|
245
|
+
\`\`\`
|
|
246
|
+
|
|
247
|
+
Then register in your \`package.json\`:
|
|
248
|
+
|
|
249
|
+
\`\`\`json
|
|
250
|
+
{
|
|
251
|
+
"kitPlugins": ["${packageName}"]
|
|
252
|
+
}
|
|
253
|
+
\`\`\`
|
|
254
|
+
|
|
255
|
+
## Usage
|
|
256
|
+
|
|
257
|
+
\`\`\`bash
|
|
258
|
+
kit add ${shortName}/deploy
|
|
259
|
+
\`\`\`
|
|
260
|
+
|
|
261
|
+
## Development
|
|
262
|
+
|
|
263
|
+
See [PLUGIN_AUTHORING.md](https://github.com/sandstream/kit/blob/main/PLUGIN_AUTHORING.md) for the full plugin authoring guide.
|
|
264
|
+
`;
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=create-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-plugin.js","sourceRoot":"","sources":["../src/create-plugin.ts"],"names":[],"mappings":"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"}
|