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,530 @@
|
|
|
1
|
+
// ─── Database Migration Definitions ───────────────────────────────────────────
|
|
2
|
+
/**
|
|
3
|
+
* All database migrations for kit marketplace.
|
|
4
|
+
* Execute in order by version number.
|
|
5
|
+
*/
|
|
6
|
+
export const MIGRATIONS = [
|
|
7
|
+
// ─── Phase 1: Core Tables ──────────────────────────────────────────────
|
|
8
|
+
{
|
|
9
|
+
id: "001-create-plugins",
|
|
10
|
+
name: "Create plugins table",
|
|
11
|
+
version: "1.0.0",
|
|
12
|
+
sql: `
|
|
13
|
+
CREATE TABLE IF NOT EXISTS plugins (
|
|
14
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
15
|
+
name VARCHAR(255) NOT NULL,
|
|
16
|
+
description TEXT,
|
|
17
|
+
author VARCHAR(255) NOT NULL,
|
|
18
|
+
version VARCHAR(20) NOT NULL,
|
|
19
|
+
rating DECIMAL(3,1) DEFAULT 0,
|
|
20
|
+
downloads INTEGER DEFAULT 0,
|
|
21
|
+
verified BOOLEAN DEFAULT FALSE,
|
|
22
|
+
official BOOLEAN DEFAULT FALSE,
|
|
23
|
+
categories TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
24
|
+
tags TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
25
|
+
repository_url VARCHAR(255),
|
|
26
|
+
license VARCHAR(50),
|
|
27
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
28
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
29
|
+
INDEX idx_author (author),
|
|
30
|
+
INDEX idx_name (name),
|
|
31
|
+
INDEX idx_rating (rating)
|
|
32
|
+
)
|
|
33
|
+
`,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: "002-create-authors",
|
|
37
|
+
name: "Create authors table",
|
|
38
|
+
version: "1.0.0",
|
|
39
|
+
sql: `
|
|
40
|
+
CREATE TABLE IF NOT EXISTS authors (
|
|
41
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
42
|
+
name VARCHAR(255) NOT NULL,
|
|
43
|
+
email VARCHAR(255) UNIQUE,
|
|
44
|
+
bio TEXT,
|
|
45
|
+
avatar_url VARCHAR(255),
|
|
46
|
+
verified BOOLEAN DEFAULT FALSE,
|
|
47
|
+
plugin_count INTEGER DEFAULT 0,
|
|
48
|
+
total_downloads INTEGER DEFAULT 0,
|
|
49
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
50
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
51
|
+
INDEX idx_name (name),
|
|
52
|
+
INDEX idx_verified (verified)
|
|
53
|
+
)
|
|
54
|
+
`,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "003-create-reviews",
|
|
58
|
+
name: "Create reviews table",
|
|
59
|
+
version: "1.0.0",
|
|
60
|
+
sql: `
|
|
61
|
+
CREATE TABLE IF NOT EXISTS reviews (
|
|
62
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
63
|
+
plugin_id VARCHAR(255) NOT NULL,
|
|
64
|
+
author_id VARCHAR(255) NOT NULL,
|
|
65
|
+
rating INTEGER NOT NULL,
|
|
66
|
+
comment TEXT,
|
|
67
|
+
helpful_count INTEGER DEFAULT 0,
|
|
68
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
69
|
+
FOREIGN KEY (plugin_id) REFERENCES plugins(id),
|
|
70
|
+
FOREIGN KEY (author_id) REFERENCES authors(id),
|
|
71
|
+
INDEX idx_plugin_id (plugin_id),
|
|
72
|
+
INDEX idx_author_id (author_id),
|
|
73
|
+
INDEX idx_rating (rating)
|
|
74
|
+
)
|
|
75
|
+
`,
|
|
76
|
+
},
|
|
77
|
+
// ─── Phase 2: Analytics & Tracking ────────────────────────────────────
|
|
78
|
+
{
|
|
79
|
+
id: "004-create-plugin-analytics",
|
|
80
|
+
name: "Create plugin analytics table",
|
|
81
|
+
version: "1.1.0",
|
|
82
|
+
sql: `
|
|
83
|
+
CREATE TABLE IF NOT EXISTS plugin_analytics (
|
|
84
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
85
|
+
plugin_id VARCHAR(255) NOT NULL,
|
|
86
|
+
date DATE NOT NULL,
|
|
87
|
+
downloads INTEGER DEFAULT 0,
|
|
88
|
+
views INTEGER DEFAULT 0,
|
|
89
|
+
installs INTEGER DEFAULT 0,
|
|
90
|
+
uninstalls INTEGER DEFAULT 0,
|
|
91
|
+
average_rating DECIMAL(3,1),
|
|
92
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
93
|
+
FOREIGN KEY (plugin_id) REFERENCES plugins(id),
|
|
94
|
+
INDEX idx_plugin_date (plugin_id, date)
|
|
95
|
+
)
|
|
96
|
+
`,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "005-create-search-logs",
|
|
100
|
+
name: "Create search logs table",
|
|
101
|
+
version: "1.1.0",
|
|
102
|
+
sql: `
|
|
103
|
+
CREATE TABLE IF NOT EXISTS search_logs (
|
|
104
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
105
|
+
query VARCHAR(255) NOT NULL,
|
|
106
|
+
result_count INTEGER DEFAULT 0,
|
|
107
|
+
user_id VARCHAR(255),
|
|
108
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
109
|
+
INDEX idx_query (query),
|
|
110
|
+
INDEX idx_created_at (created_at)
|
|
111
|
+
)
|
|
112
|
+
`,
|
|
113
|
+
},
|
|
114
|
+
// ─── Phase 3: Publishing & CI/CD ───────────────────────────────────────
|
|
115
|
+
{
|
|
116
|
+
id: "006-create-publish-plans",
|
|
117
|
+
name: "Create publish plans table",
|
|
118
|
+
version: "1.2.0",
|
|
119
|
+
sql: `
|
|
120
|
+
CREATE TABLE IF NOT EXISTS publish_plans (
|
|
121
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
122
|
+
plugin_id VARCHAR(255) NOT NULL,
|
|
123
|
+
version VARCHAR(20) NOT NULL,
|
|
124
|
+
status VARCHAR(50) NOT NULL,
|
|
125
|
+
trigger_type VARCHAR(50),
|
|
126
|
+
requires_approval BOOLEAN DEFAULT FALSE,
|
|
127
|
+
changelog TEXT,
|
|
128
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
129
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
130
|
+
FOREIGN KEY (plugin_id) REFERENCES plugins(id),
|
|
131
|
+
INDEX idx_plugin_id (plugin_id),
|
|
132
|
+
INDEX idx_status (status)
|
|
133
|
+
)
|
|
134
|
+
`,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: "007-create-approvals",
|
|
138
|
+
name: "Create approvals table",
|
|
139
|
+
version: "1.2.0",
|
|
140
|
+
sql: `
|
|
141
|
+
CREATE TABLE IF NOT EXISTS approvals (
|
|
142
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
143
|
+
publish_plan_id VARCHAR(255) NOT NULL,
|
|
144
|
+
approved_by VARCHAR(255) NOT NULL,
|
|
145
|
+
approved_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
146
|
+
comment TEXT,
|
|
147
|
+
FOREIGN KEY (publish_plan_id) REFERENCES publish_plans(id),
|
|
148
|
+
INDEX idx_publish_plan_id (publish_plan_id)
|
|
149
|
+
)
|
|
150
|
+
`,
|
|
151
|
+
},
|
|
152
|
+
// ─── Phase 4: Security & Monitoring ────────────────────────────────────
|
|
153
|
+
{
|
|
154
|
+
id: "008-create-security-logs",
|
|
155
|
+
name: "Create security audit logs table",
|
|
156
|
+
version: "1.3.0",
|
|
157
|
+
sql: `
|
|
158
|
+
CREATE TABLE IF NOT EXISTS security_logs (
|
|
159
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
160
|
+
action VARCHAR(100) NOT NULL,
|
|
161
|
+
actor VARCHAR(255),
|
|
162
|
+
resource VARCHAR(255),
|
|
163
|
+
status VARCHAR(50) NOT NULL,
|
|
164
|
+
details JSONB,
|
|
165
|
+
ip_address INET,
|
|
166
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
167
|
+
INDEX idx_action (action),
|
|
168
|
+
INDEX idx_actor (actor),
|
|
169
|
+
INDEX idx_created_at (created_at)
|
|
170
|
+
)
|
|
171
|
+
`,
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: "009-create-error_logs",
|
|
175
|
+
name: "Create error logs table",
|
|
176
|
+
version: "1.3.0",
|
|
177
|
+
sql: `
|
|
178
|
+
CREATE TABLE IF NOT EXISTS error_logs (
|
|
179
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
180
|
+
message VARCHAR(255) NOT NULL,
|
|
181
|
+
stack TEXT,
|
|
182
|
+
severity VARCHAR(20) NOT NULL,
|
|
183
|
+
context JSONB,
|
|
184
|
+
user_id VARCHAR(255),
|
|
185
|
+
session_id VARCHAR(255),
|
|
186
|
+
resolved BOOLEAN DEFAULT FALSE,
|
|
187
|
+
resolved_at TIMESTAMP,
|
|
188
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
189
|
+
INDEX idx_message (message),
|
|
190
|
+
INDEX idx_severity (severity),
|
|
191
|
+
INDEX idx_created_at (created_at)
|
|
192
|
+
)
|
|
193
|
+
`,
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
id: "010-create-sla_objectives",
|
|
197
|
+
name: "Create SLA objectives table",
|
|
198
|
+
version: "1.3.0",
|
|
199
|
+
sql: `
|
|
200
|
+
CREATE TABLE IF NOT EXISTS sla_objectives (
|
|
201
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
202
|
+
name VARCHAR(255) NOT NULL,
|
|
203
|
+
metric VARCHAR(50) NOT NULL,
|
|
204
|
+
target DECIMAL(10,2) NOT NULL,
|
|
205
|
+
threshold DECIMAL(10,2) NOT NULL,
|
|
206
|
+
unit VARCHAR(20),
|
|
207
|
+
window VARCHAR(20) NOT NULL,
|
|
208
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
209
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
210
|
+
INDEX idx_name (name),
|
|
211
|
+
INDEX idx_metric (metric)
|
|
212
|
+
)
|
|
213
|
+
`,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
id: "011-create-sla_measurements",
|
|
217
|
+
name: "Create SLA measurements table",
|
|
218
|
+
version: "1.3.0",
|
|
219
|
+
sql: `
|
|
220
|
+
CREATE TABLE IF NOT EXISTS sla_measurements (
|
|
221
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
222
|
+
sla_id VARCHAR(255) NOT NULL,
|
|
223
|
+
value DECIMAL(10,2) NOT NULL,
|
|
224
|
+
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
225
|
+
FOREIGN KEY (sla_id) REFERENCES sla_objectives(id),
|
|
226
|
+
INDEX idx_sla_id (sla_id),
|
|
227
|
+
INDEX idx_timestamp (timestamp)
|
|
228
|
+
)
|
|
229
|
+
`,
|
|
230
|
+
},
|
|
231
|
+
// ─── Phase 5: Notifications & Communication ────────────────────────────
|
|
232
|
+
{
|
|
233
|
+
id: "012-create-notifications",
|
|
234
|
+
name: "Create notifications table",
|
|
235
|
+
version: "1.4.0",
|
|
236
|
+
sql: `
|
|
237
|
+
CREATE TABLE IF NOT EXISTS notifications (
|
|
238
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
239
|
+
author_id VARCHAR(255) NOT NULL,
|
|
240
|
+
type VARCHAR(50) NOT NULL,
|
|
241
|
+
subject VARCHAR(255),
|
|
242
|
+
message TEXT,
|
|
243
|
+
read BOOLEAN DEFAULT FALSE,
|
|
244
|
+
read_at TIMESTAMP,
|
|
245
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
246
|
+
FOREIGN KEY (author_id) REFERENCES authors(id),
|
|
247
|
+
INDEX idx_author_id (author_id),
|
|
248
|
+
INDEX idx_read (read),
|
|
249
|
+
INDEX idx_created_at (created_at)
|
|
250
|
+
)
|
|
251
|
+
`,
|
|
252
|
+
},
|
|
253
|
+
// ─── Phase 6: Caching & Performance ────────────────────────────────────
|
|
254
|
+
{
|
|
255
|
+
id: "013-create-cache_entries",
|
|
256
|
+
name: "Create cache entries table",
|
|
257
|
+
version: "1.5.0",
|
|
258
|
+
sql: `
|
|
259
|
+
CREATE TABLE IF NOT EXISTS cache_entries (
|
|
260
|
+
key VARCHAR(255) PRIMARY KEY,
|
|
261
|
+
value TEXT NOT NULL,
|
|
262
|
+
ttl INTEGER,
|
|
263
|
+
hits INTEGER DEFAULT 0,
|
|
264
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
265
|
+
expires_at TIMESTAMP,
|
|
266
|
+
INDEX idx_expires_at (expires_at),
|
|
267
|
+
INDEX idx_created_at (created_at)
|
|
268
|
+
)
|
|
269
|
+
`,
|
|
270
|
+
},
|
|
271
|
+
// ─── Performance Indexes ───────────────────────────────────────────────
|
|
272
|
+
{
|
|
273
|
+
id: "014-create-performance-indexes",
|
|
274
|
+
name: "Create performance indexes",
|
|
275
|
+
version: "1.5.0",
|
|
276
|
+
sql: `
|
|
277
|
+
CREATE INDEX IF NOT EXISTS idx_plugins_search ON plugins
|
|
278
|
+
USING GIN(to_tsvector('english', name || ' ' || description));
|
|
279
|
+
|
|
280
|
+
CREATE INDEX IF NOT EXISTS idx_reviews_plugin_rating
|
|
281
|
+
ON reviews(plugin_id, rating DESC);
|
|
282
|
+
|
|
283
|
+
CREATE INDEX IF NOT EXISTS idx_analytics_plugin_date
|
|
284
|
+
ON plugin_analytics(plugin_id, date DESC);
|
|
285
|
+
`,
|
|
286
|
+
},
|
|
287
|
+
// ─── Aggregate Views ───────────────────────────────────────────────────
|
|
288
|
+
{
|
|
289
|
+
id: "015-create-materialized-views",
|
|
290
|
+
name: "Create materialized views",
|
|
291
|
+
version: "1.5.0",
|
|
292
|
+
sql: `
|
|
293
|
+
CREATE MATERIALIZED VIEW IF NOT EXISTS plugin_stats AS
|
|
294
|
+
SELECT
|
|
295
|
+
p.id,
|
|
296
|
+
p.name,
|
|
297
|
+
COUNT(DISTINCT r.id) as review_count,
|
|
298
|
+
AVG(r.rating) as avg_rating,
|
|
299
|
+
COALESCE(SUM(pa.downloads), 0) as total_downloads,
|
|
300
|
+
MAX(pa.date) as last_tracked_date
|
|
301
|
+
FROM plugins p
|
|
302
|
+
LEFT JOIN reviews r ON p.id = r.plugin_id
|
|
303
|
+
LEFT JOIN plugin_analytics pa ON p.id = pa.plugin_id
|
|
304
|
+
GROUP BY p.id, p.name;
|
|
305
|
+
|
|
306
|
+
CREATE INDEX idx_plugin_stats_id ON plugin_stats(id);
|
|
307
|
+
`,
|
|
308
|
+
},
|
|
309
|
+
// ─── Phase 7: Payments & Monetization ──────────────────────────────────
|
|
310
|
+
{
|
|
311
|
+
id: "016-create-author-payout-accounts",
|
|
312
|
+
name: "Create author payout accounts table",
|
|
313
|
+
version: "2.0.0",
|
|
314
|
+
sql: `
|
|
315
|
+
CREATE TABLE IF NOT EXISTS author_payout_accounts (
|
|
316
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
317
|
+
author_id VARCHAR(255) NOT NULL UNIQUE,
|
|
318
|
+
stripe_account_id VARCHAR(255) UNIQUE,
|
|
319
|
+
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
320
|
+
kyc_status VARCHAR(50) DEFAULT 'pending',
|
|
321
|
+
tax_id TEXT,
|
|
322
|
+
bank_account_id VARCHAR(255),
|
|
323
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
324
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
325
|
+
FOREIGN KEY (author_id) REFERENCES authors(id),
|
|
326
|
+
INDEX idx_author_id (author_id),
|
|
327
|
+
INDEX idx_status (status),
|
|
328
|
+
INDEX idx_kyc_status (kyc_status)
|
|
329
|
+
)
|
|
330
|
+
`,
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
id: "017-create-plugin-revenue",
|
|
334
|
+
name: "Create plugin revenue tracking table",
|
|
335
|
+
version: "2.0.0",
|
|
336
|
+
sql: `
|
|
337
|
+
CREATE TABLE IF NOT EXISTS plugin_revenue (
|
|
338
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
339
|
+
plugin_id VARCHAR(255) NOT NULL UNIQUE,
|
|
340
|
+
author_id VARCHAR(255) NOT NULL,
|
|
341
|
+
gross_revenue DECIMAL(12,2) DEFAULT 0,
|
|
342
|
+
kit_commission DECIMAL(12,2) DEFAULT 0,
|
|
343
|
+
author_earnings DECIMAL(12,2) DEFAULT 0,
|
|
344
|
+
currency VARCHAR(3) DEFAULT 'USD',
|
|
345
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
346
|
+
FOREIGN KEY (plugin_id) REFERENCES plugins(id),
|
|
347
|
+
FOREIGN KEY (author_id) REFERENCES authors(id),
|
|
348
|
+
INDEX idx_author_id (author_id),
|
|
349
|
+
INDEX idx_plugin_id (plugin_id)
|
|
350
|
+
)
|
|
351
|
+
`,
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
id: "018-create-payment-transactions",
|
|
355
|
+
name: "Create payment transactions table",
|
|
356
|
+
version: "2.0.0",
|
|
357
|
+
sql: `
|
|
358
|
+
CREATE TABLE IF NOT EXISTS payment_transactions (
|
|
359
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
360
|
+
author_id VARCHAR(255) NOT NULL,
|
|
361
|
+
stripe_transfer_id VARCHAR(255),
|
|
362
|
+
amount DECIMAL(12,2) NOT NULL,
|
|
363
|
+
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
364
|
+
period_start DATE NOT NULL,
|
|
365
|
+
period_end DATE NOT NULL,
|
|
366
|
+
attempted_at TIMESTAMP,
|
|
367
|
+
completed_at TIMESTAMP,
|
|
368
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
369
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
370
|
+
FOREIGN KEY (author_id) REFERENCES authors(id),
|
|
371
|
+
INDEX idx_author_id (author_id),
|
|
372
|
+
INDEX idx_status (status),
|
|
373
|
+
INDEX idx_created_at (created_at)
|
|
374
|
+
)
|
|
375
|
+
`,
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
id: "019-create-grant-applications",
|
|
379
|
+
name: "Create grant applications table",
|
|
380
|
+
version: "2.0.0",
|
|
381
|
+
sql: `
|
|
382
|
+
CREATE TABLE IF NOT EXISTS grant_applications (
|
|
383
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
384
|
+
author_id VARCHAR(255) NOT NULL,
|
|
385
|
+
plugin_id VARCHAR(255) NOT NULL,
|
|
386
|
+
amount_requested DECIMAL(12,2) NOT NULL,
|
|
387
|
+
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
388
|
+
use_case TEXT NOT NULL,
|
|
389
|
+
approved_by VARCHAR(255),
|
|
390
|
+
approval_date TIMESTAMP,
|
|
391
|
+
paid_at TIMESTAMP,
|
|
392
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
393
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
394
|
+
FOREIGN KEY (author_id) REFERENCES authors(id),
|
|
395
|
+
FOREIGN KEY (plugin_id) REFERENCES plugins(id),
|
|
396
|
+
INDEX idx_author_id (author_id),
|
|
397
|
+
INDEX idx_plugin_id (plugin_id),
|
|
398
|
+
INDEX idx_status (status),
|
|
399
|
+
INDEX idx_created_at (created_at)
|
|
400
|
+
)
|
|
401
|
+
`,
|
|
402
|
+
},
|
|
403
|
+
// ─── Phase 8: Featured Plugins & Curation ────────────────────────────────
|
|
404
|
+
{
|
|
405
|
+
id: "020-extend-plugins-featured",
|
|
406
|
+
name: "Extend plugins table with featured rotation metadata",
|
|
407
|
+
version: "2.1.0",
|
|
408
|
+
sql: `
|
|
409
|
+
ALTER TABLE plugins ADD COLUMN IF NOT EXISTS
|
|
410
|
+
featured_at TIMESTAMP,
|
|
411
|
+
featured_until TIMESTAMP,
|
|
412
|
+
featured_rotation_slot INTEGER,
|
|
413
|
+
featured_selection_reason VARCHAR(50);
|
|
414
|
+
|
|
415
|
+
CREATE TABLE IF NOT EXISTS featured_plugins (
|
|
416
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
417
|
+
plugin_id VARCHAR(255) NOT NULL UNIQUE,
|
|
418
|
+
selected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
419
|
+
expires_at TIMESTAMP,
|
|
420
|
+
slot INTEGER NOT NULL,
|
|
421
|
+
selection_reason VARCHAR(50) NOT NULL,
|
|
422
|
+
selected_by VARCHAR(255),
|
|
423
|
+
views INTEGER DEFAULT 0,
|
|
424
|
+
clicks INTEGER DEFAULT 0,
|
|
425
|
+
conversions INTEGER DEFAULT 0,
|
|
426
|
+
performance_score DECIMAL(5,2),
|
|
427
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
428
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
429
|
+
FOREIGN KEY (plugin_id) REFERENCES plugins(id),
|
|
430
|
+
INDEX idx_slot (slot),
|
|
431
|
+
INDEX idx_expires_at (expires_at),
|
|
432
|
+
INDEX idx_selection_reason (selection_reason)
|
|
433
|
+
)
|
|
434
|
+
`,
|
|
435
|
+
},
|
|
436
|
+
// ─── Phase 9: Partner Integration ──────────────────────────────────────────
|
|
437
|
+
{
|
|
438
|
+
id: "021-extend-partners",
|
|
439
|
+
name: "Extend authors table with partner fields",
|
|
440
|
+
version: "2.2.0",
|
|
441
|
+
sql: `
|
|
442
|
+
ALTER TABLE authors ADD COLUMN IF NOT EXISTS
|
|
443
|
+
partner_tier VARCHAR(50),
|
|
444
|
+
partner_agreement_signed_at TIMESTAMP,
|
|
445
|
+
partner_agreement_version VARCHAR(20),
|
|
446
|
+
partner_organization_type VARCHAR(50),
|
|
447
|
+
partner_api_key VARCHAR(255) UNIQUE,
|
|
448
|
+
partner_webhook_url VARCHAR(255),
|
|
449
|
+
partner_rate_limit INTEGER DEFAULT 1000;
|
|
450
|
+
|
|
451
|
+
CREATE TABLE IF NOT EXISTS partner_api_keys (
|
|
452
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
453
|
+
author_id VARCHAR(255) NOT NULL UNIQUE,
|
|
454
|
+
api_key VARCHAR(255) UNIQUE NOT NULL,
|
|
455
|
+
secret_key TEXT NOT NULL,
|
|
456
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
457
|
+
rotated_at TIMESTAMP,
|
|
458
|
+
last_used_at TIMESTAMP,
|
|
459
|
+
INDEX idx_api_key (api_key),
|
|
460
|
+
INDEX idx_author_id (author_id),
|
|
461
|
+
FOREIGN KEY (author_id) REFERENCES authors(id)
|
|
462
|
+
);
|
|
463
|
+
|
|
464
|
+
CREATE TABLE IF NOT EXISTS co_developed_plugins (
|
|
465
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
466
|
+
plugin_id VARCHAR(255) NOT NULL UNIQUE,
|
|
467
|
+
partner_author_id VARCHAR(255) NOT NULL,
|
|
468
|
+
primary_author_id VARCHAR(255) NOT NULL,
|
|
469
|
+
revenue_split VARCHAR(50) NOT NULL,
|
|
470
|
+
approval_status VARCHAR(50) DEFAULT 'pending',
|
|
471
|
+
approved_by VARCHAR(255),
|
|
472
|
+
approval_date TIMESTAMP,
|
|
473
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
474
|
+
INDEX idx_partner_id (partner_author_id),
|
|
475
|
+
INDEX idx_primary_id (primary_author_id),
|
|
476
|
+
INDEX idx_status (approval_status),
|
|
477
|
+
FOREIGN KEY (plugin_id) REFERENCES plugins(id),
|
|
478
|
+
FOREIGN KEY (partner_author_id) REFERENCES authors(id),
|
|
479
|
+
FOREIGN KEY (primary_author_id) REFERENCES authors(id)
|
|
480
|
+
);
|
|
481
|
+
|
|
482
|
+
CREATE TABLE IF NOT EXISTS partnership_agreements (
|
|
483
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
484
|
+
author_id VARCHAR(255) NOT NULL,
|
|
485
|
+
tier VARCHAR(50) NOT NULL,
|
|
486
|
+
agreement_text TEXT,
|
|
487
|
+
version VARCHAR(20),
|
|
488
|
+
signed_at TIMESTAMP,
|
|
489
|
+
signed_by VARCHAR(255),
|
|
490
|
+
expires_at TIMESTAMP,
|
|
491
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
492
|
+
INDEX idx_author_id (author_id),
|
|
493
|
+
INDEX idx_tier (tier),
|
|
494
|
+
FOREIGN KEY (author_id) REFERENCES authors(id)
|
|
495
|
+
)
|
|
496
|
+
`,
|
|
497
|
+
},
|
|
498
|
+
];
|
|
499
|
+
/**
|
|
500
|
+
* Get migration by ID.
|
|
501
|
+
*/
|
|
502
|
+
export function getMigrationById(id) {
|
|
503
|
+
return MIGRATIONS.find((m) => m.id === id);
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Get all migrations after a specific version.
|
|
507
|
+
*/
|
|
508
|
+
export function getMigrationsAfter(version) {
|
|
509
|
+
return MIGRATIONS.filter((m) => m.version > version);
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Get total migration count.
|
|
513
|
+
*/
|
|
514
|
+
export function getMigrationCount() {
|
|
515
|
+
return MIGRATIONS.length;
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Generate migration summary.
|
|
519
|
+
*/
|
|
520
|
+
export function getMigrationSummary() {
|
|
521
|
+
const byVersion = {};
|
|
522
|
+
for (const migration of MIGRATIONS) {
|
|
523
|
+
byVersion[migration.version] = (byVersion[migration.version] || 0) + 1;
|
|
524
|
+
}
|
|
525
|
+
return {
|
|
526
|
+
total: MIGRATIONS.length,
|
|
527
|
+
byVersion,
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
export type ContentType = "plugin" | "review" | "comment" | "author";
|
|
2
|
+
export type ViolationType = "spam" | "abuse" | "misleading" | "copyright" | "malware" | "other";
|
|
3
|
+
export type ModerationStatus = "pending" | "approved" | "rejected" | "appealed" | "resolved";
|
|
4
|
+
export type AppealStatus = "pending" | "upheld" | "overturned" | "closed";
|
|
5
|
+
export interface ContentItem {
|
|
6
|
+
id: string;
|
|
7
|
+
type: ContentType;
|
|
8
|
+
pluginId?: string;
|
|
9
|
+
reviewId?: string;
|
|
10
|
+
commentId?: string;
|
|
11
|
+
authorId: string;
|
|
12
|
+
content: string;
|
|
13
|
+
metadata: Record<string, unknown>;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ModerationReport {
|
|
17
|
+
id: string;
|
|
18
|
+
contentId: string;
|
|
19
|
+
contentType: ContentType;
|
|
20
|
+
reportedBy: string;
|
|
21
|
+
reason: ViolationType;
|
|
22
|
+
description: string;
|
|
23
|
+
evidence: string[];
|
|
24
|
+
status: ModerationStatus;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
updatedAt: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ModerationAction {
|
|
29
|
+
id: string;
|
|
30
|
+
reportId: string;
|
|
31
|
+
contentId: string;
|
|
32
|
+
action: "warning" | "suspend_comment" | "unpublish" | "suspend_user" | "ban_user";
|
|
33
|
+
reason: string;
|
|
34
|
+
duration?: number;
|
|
35
|
+
appliedBy: string;
|
|
36
|
+
appliedAt: string;
|
|
37
|
+
metadata: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export interface Appeal {
|
|
40
|
+
id: string;
|
|
41
|
+
actionId: string;
|
|
42
|
+
reportId: string;
|
|
43
|
+
contentId: string;
|
|
44
|
+
appealedBy: string;
|
|
45
|
+
reason: string;
|
|
46
|
+
evidence: string[];
|
|
47
|
+
status: AppealStatus;
|
|
48
|
+
reviewedBy?: string;
|
|
49
|
+
reviewedAt?: string;
|
|
50
|
+
decision?: string;
|
|
51
|
+
createdAt: string;
|
|
52
|
+
updatedAt: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ModerationQueue {
|
|
55
|
+
reportId: string;
|
|
56
|
+
contentId: string;
|
|
57
|
+
contentType: ContentType;
|
|
58
|
+
reportCount: number;
|
|
59
|
+
priority: "low" | "medium" | "high" | "critical";
|
|
60
|
+
createdAt: string;
|
|
61
|
+
reason?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface SpamSignals {
|
|
64
|
+
hasMultipleReports: boolean;
|
|
65
|
+
hasAbusiveLanguage: boolean;
|
|
66
|
+
hasExcessiveLinks: boolean;
|
|
67
|
+
hasSuspiciousPatterns: boolean;
|
|
68
|
+
isNewAccount: boolean;
|
|
69
|
+
score: number;
|
|
70
|
+
}
|
|
71
|
+
export interface ModerationStats {
|
|
72
|
+
totalReports: number;
|
|
73
|
+
approvedCount: number;
|
|
74
|
+
rejectedCount: number;
|
|
75
|
+
pendingCount: number;
|
|
76
|
+
appealsCount: number;
|
|
77
|
+
suspensionsCount: number;
|
|
78
|
+
bansCount: number;
|
|
79
|
+
averageResolutionTimeMs: number;
|
|
80
|
+
}
|
|
81
|
+
export interface CommunityGuideline {
|
|
82
|
+
id: string;
|
|
83
|
+
title: string;
|
|
84
|
+
description: string;
|
|
85
|
+
examples: string[];
|
|
86
|
+
consequenceLevel: "warning" | "suspension" | "ban";
|
|
87
|
+
active: boolean;
|
|
88
|
+
createdAt: string;
|
|
89
|
+
updatedAt: string;
|
|
90
|
+
}
|
|
91
|
+
export declare class ModerationSystem {
|
|
92
|
+
private reports;
|
|
93
|
+
private actions;
|
|
94
|
+
private appeals;
|
|
95
|
+
private suspendedUsers;
|
|
96
|
+
private bannedUsers;
|
|
97
|
+
private guidelines;
|
|
98
|
+
private reportQueue;
|
|
99
|
+
/**
|
|
100
|
+
* File a moderation report against content (plugin, review, comment, author).
|
|
101
|
+
*/
|
|
102
|
+
fileReport(contentId: string, contentType: ContentType, reportedBy: string, reason: ViolationType, description: string, evidence?: string[]): ModerationReport;
|
|
103
|
+
getReport(reportId: string): ModerationReport | null;
|
|
104
|
+
getContentReports(contentId: string): ModerationReport[];
|
|
105
|
+
/**
|
|
106
|
+
* Update moderation queue with new report.
|
|
107
|
+
* Tracks priority based on report count and violation type.
|
|
108
|
+
*/
|
|
109
|
+
private updateQueue;
|
|
110
|
+
getQueue(limit?: number): ModerationQueue[];
|
|
111
|
+
getQueueStats(): {
|
|
112
|
+
total: number;
|
|
113
|
+
critical: number;
|
|
114
|
+
high: number;
|
|
115
|
+
medium: number;
|
|
116
|
+
low: number;
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Analyze content for spam signals.
|
|
120
|
+
* Returns a score 0-100 indicating spam likelihood.
|
|
121
|
+
*/
|
|
122
|
+
detectSpam(content: string, metadata: Record<string, unknown>): SpamSignals;
|
|
123
|
+
/**
|
|
124
|
+
* Take a moderation action: warning, suspend, or ban.
|
|
125
|
+
*/
|
|
126
|
+
takeAction(reportId: string, contentId: string, action: "warning" | "suspend_comment" | "unpublish" | "suspend_user" | "ban_user", reason: string, duration?: number, appliedBy?: string): ModerationAction;
|
|
127
|
+
getAction(actionId: string): ModerationAction | null;
|
|
128
|
+
getContentActions(contentId: string): ModerationAction[];
|
|
129
|
+
isSuspended(userId: string): boolean;
|
|
130
|
+
isBanned(userId: string): boolean;
|
|
131
|
+
getSuspensionStatus(userId: string): {
|
|
132
|
+
until: Date;
|
|
133
|
+
reason: string;
|
|
134
|
+
} | null;
|
|
135
|
+
/**
|
|
136
|
+
* File an appeal against a moderation action.
|
|
137
|
+
*/
|
|
138
|
+
fileAppeal(actionId: string, reportId: string, contentId: string, appealedBy: string, reason: string, evidence?: string[]): Appeal;
|
|
139
|
+
getAppeal(appealId: string): Appeal | null;
|
|
140
|
+
getPendingAppeals(limit?: number): Appeal[];
|
|
141
|
+
/**
|
|
142
|
+
* Review an appeal: uphold or overturn the original action.
|
|
143
|
+
*/
|
|
144
|
+
reviewAppeal(appealId: string, reviewedBy: string, decision: "upheld" | "overturned", reason: string): Appeal | null;
|
|
145
|
+
registerGuideline(title: string, description: string, examples: string[], consequenceLevel: "warning" | "suspension" | "ban"): CommunityGuideline;
|
|
146
|
+
getGuideline(id: string): CommunityGuideline | null;
|
|
147
|
+
getActiveGuidelines(): CommunityGuideline[];
|
|
148
|
+
deactivateGuideline(id: string): boolean;
|
|
149
|
+
getModerationStats(): ModerationStats;
|
|
150
|
+
getReportsCache(): Map<string, ModerationReport>;
|
|
151
|
+
getActionsCache(): Map<string, ModerationAction>;
|
|
152
|
+
getAppealCache(): Map<string, Appeal>;
|
|
153
|
+
}
|