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.
Files changed (519) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +617 -0
  3. package/dist/adapters/api-key-adapter.d.ts +35 -0
  4. package/dist/adapters/api-key-adapter.js +46 -0
  5. package/dist/adapters/api-key-adapter.js.map +1 -0
  6. package/dist/adapters/clerk-auth.d.ts +6 -0
  7. package/dist/adapters/clerk-auth.js +20 -0
  8. package/dist/adapters/clerk-auth.js.map +1 -0
  9. package/dist/adapters/cloudflare-r2.d.ts +6 -0
  10. package/dist/adapters/cloudflare-r2.js +136 -0
  11. package/dist/adapters/cloudflare-r2.js.map +1 -0
  12. package/dist/adapters/expo-eas.d.ts +6 -0
  13. package/dist/adapters/expo-eas.js +129 -0
  14. package/dist/adapters/expo-eas.js.map +1 -0
  15. package/dist/adapters/flagsmith-flags.d.ts +5 -0
  16. package/dist/adapters/flagsmith-flags.js +20 -0
  17. package/dist/adapters/flagsmith-flags.js.map +1 -0
  18. package/dist/adapters/flyio-hosting.d.ts +2 -0
  19. package/dist/adapters/flyio-hosting.js +143 -0
  20. package/dist/adapters/flyio-hosting.js.map +1 -0
  21. package/dist/adapters/index.d.ts +6 -0
  22. package/dist/adapters/index.js +48 -0
  23. package/dist/adapters/index.js.map +1 -0
  24. package/dist/adapters/inngest-background.d.ts +5 -0
  25. package/dist/adapters/inngest-background.js +19 -0
  26. package/dist/adapters/inngest-background.js.map +1 -0
  27. package/dist/adapters/liveblocks-realtime.d.ts +11 -0
  28. package/dist/adapters/liveblocks-realtime.js +62 -0
  29. package/dist/adapters/liveblocks-realtime.js.map +1 -0
  30. package/dist/adapters/loops-email.d.ts +6 -0
  31. package/dist/adapters/loops-email.js +18 -0
  32. package/dist/adapters/loops-email.js.map +1 -0
  33. package/dist/adapters/neon-db.d.ts +10 -0
  34. package/dist/adapters/neon-db.js +94 -0
  35. package/dist/adapters/neon-db.js.map +1 -0
  36. package/dist/adapters/planetscale-db.d.ts +11 -0
  37. package/dist/adapters/planetscale-db.js +134 -0
  38. package/dist/adapters/planetscale-db.js.map +1 -0
  39. package/dist/adapters/posthog-analytics.d.ts +6 -0
  40. package/dist/adapters/posthog-analytics.js +22 -0
  41. package/dist/adapters/posthog-analytics.js.map +1 -0
  42. package/dist/adapters/railway-hosting.d.ts +2 -0
  43. package/dist/adapters/railway-hosting.js +136 -0
  44. package/dist/adapters/railway-hosting.js.map +1 -0
  45. package/dist/adapters/resend-email.d.ts +35 -0
  46. package/dist/adapters/resend-email.js +109 -0
  47. package/dist/adapters/resend-email.js.map +1 -0
  48. package/dist/adapters/searxng-instance.d.ts +6 -0
  49. package/dist/adapters/searxng-instance.js +240 -0
  50. package/dist/adapters/searxng-instance.js.map +1 -0
  51. package/dist/adapters/sentry-monitoring.d.ts +7 -0
  52. package/dist/adapters/sentry-monitoring.js +27 -0
  53. package/dist/adapters/sentry-monitoring.js.map +1 -0
  54. package/dist/adapters/stripe-payments.d.ts +6 -0
  55. package/dist/adapters/stripe-payments.js +134 -0
  56. package/dist/adapters/stripe-payments.js.map +1 -0
  57. package/dist/adapters/supabase-db.d.ts +6 -0
  58. package/dist/adapters/supabase-db.js +130 -0
  59. package/dist/adapters/supabase-db.js.map +1 -0
  60. package/dist/adapters/tinybird-analytics.d.ts +5 -0
  61. package/dist/adapters/tinybird-analytics.js +20 -0
  62. package/dist/adapters/tinybird-analytics.js.map +1 -0
  63. package/dist/adapters/trigger-background.d.ts +6 -0
  64. package/dist/adapters/trigger-background.js +20 -0
  65. package/dist/adapters/trigger-background.js.map +1 -0
  66. package/dist/adapters/types.d.ts +7 -0
  67. package/dist/adapters/types.js +2 -0
  68. package/dist/adapters/types.js.map +1 -0
  69. package/dist/adapters/upstash-redis.d.ts +6 -0
  70. package/dist/adapters/upstash-redis.js +88 -0
  71. package/dist/adapters/upstash-redis.js.map +1 -0
  72. package/dist/adapters/vercel-hosting.d.ts +6 -0
  73. package/dist/adapters/vercel-hosting.js +112 -0
  74. package/dist/adapters/vercel-hosting.js.map +1 -0
  75. package/dist/agent-adapter-model.d.ts +108 -0
  76. package/dist/agent-adapter-model.js +6 -0
  77. package/dist/agent-adapter-model.js.map +1 -0
  78. package/dist/agent-adapter-service.d.ts +67 -0
  79. package/dist/agent-adapter-service.js +299 -0
  80. package/dist/agent-adapter-service.js.map +1 -0
  81. package/dist/agent-config.d.ts +56 -0
  82. package/dist/agent-config.js +129 -0
  83. package/dist/agent-config.js.map +1 -0
  84. package/dist/agent-governance-model.d.ts +128 -0
  85. package/dist/agent-governance-model.js +6 -0
  86. package/dist/agent-governance-model.js.map +1 -0
  87. package/dist/agent-governance-service.d.ts +101 -0
  88. package/dist/agent-governance-service.js +319 -0
  89. package/dist/agent-governance-service.js.map +1 -0
  90. package/dist/alert-rules-engine.d.ts +102 -0
  91. package/dist/alert-rules-engine.js +210 -0
  92. package/dist/alert-rules-engine.js.map +1 -0
  93. package/dist/analytics-service.d.ts +126 -0
  94. package/dist/analytics-service.js +318 -0
  95. package/dist/analytics-service.js.map +1 -0
  96. package/dist/analyze.d.ts +19 -0
  97. package/dist/analyze.js +311 -0
  98. package/dist/analyze.js.map +1 -0
  99. package/dist/apm-instrumentor.d.ts +119 -0
  100. package/dist/apm-instrumentor.js +225 -0
  101. package/dist/apm-instrumentor.js.map +1 -0
  102. package/dist/approval-model.d.ts +82 -0
  103. package/dist/approval-model.js +6 -0
  104. package/dist/approval-model.js.map +1 -0
  105. package/dist/approval-service.d.ts +39 -0
  106. package/dist/approval-service.js +236 -0
  107. package/dist/approval-service.js.map +1 -0
  108. package/dist/approval.d.ts +22 -0
  109. package/dist/approval.js +148 -0
  110. package/dist/approval.js.map +1 -0
  111. package/dist/audit-logging-model.d.ts +157 -0
  112. package/dist/audit-logging-model.js +6 -0
  113. package/dist/audit-logging-model.js.map +1 -0
  114. package/dist/audit-logging-service.d.ts +89 -0
  115. package/dist/audit-logging-service.js +367 -0
  116. package/dist/audit-logging-service.js.map +1 -0
  117. package/dist/audit-secrets.d.ts +42 -0
  118. package/dist/audit-secrets.js +126 -0
  119. package/dist/audit-secrets.js.map +1 -0
  120. package/dist/audit.d.ts +43 -0
  121. package/dist/audit.js +286 -0
  122. package/dist/audit.js.map +1 -0
  123. package/dist/author-dashboard.d.ts +84 -0
  124. package/dist/author-dashboard.js +204 -0
  125. package/dist/author-dashboard.js.map +1 -0
  126. package/dist/author-notifications.d.ts +130 -0
  127. package/dist/author-notifications.js +261 -0
  128. package/dist/author-notifications.js.map +1 -0
  129. package/dist/author-verification.d.ts +79 -0
  130. package/dist/author-verification.js +257 -0
  131. package/dist/author-verification.js.map +1 -0
  132. package/dist/autonomous-setup-model.d.ts +117 -0
  133. package/dist/autonomous-setup-model.js +6 -0
  134. package/dist/autonomous-setup-model.js.map +1 -0
  135. package/dist/autonomous-setup-service.d.ts +74 -0
  136. package/dist/autonomous-setup-service.js +325 -0
  137. package/dist/autonomous-setup-service.js.map +1 -0
  138. package/dist/badge-system.d.ts +70 -0
  139. package/dist/badge-system.js +210 -0
  140. package/dist/badge-system.js.map +1 -0
  141. package/dist/baseline.d.ts +34 -0
  142. package/dist/baseline.js +78 -0
  143. package/dist/baseline.js.map +1 -0
  144. package/dist/beta-program-service.d.ts +112 -0
  145. package/dist/beta-program-service.js +240 -0
  146. package/dist/beta-program-service.js.map +1 -0
  147. package/dist/budget.d.ts +34 -0
  148. package/dist/budget.js +159 -0
  149. package/dist/budget.js.map +1 -0
  150. package/dist/bumblebee.d.ts +143 -0
  151. package/dist/bumblebee.js +384 -0
  152. package/dist/bumblebee.js.map +1 -0
  153. package/dist/cache-manager.d.ts +97 -0
  154. package/dist/cache-manager.js +244 -0
  155. package/dist/cache-manager.js.map +1 -0
  156. package/dist/cdn-adapter.d.ts +64 -0
  157. package/dist/cdn-adapter.js +263 -0
  158. package/dist/cdn-adapter.js.map +1 -0
  159. package/dist/certification-workflow-model.d.ts +95 -0
  160. package/dist/certification-workflow-model.js +6 -0
  161. package/dist/certification-workflow-model.js.map +1 -0
  162. package/dist/certification-workflow-service.d.ts +72 -0
  163. package/dist/certification-workflow-service.js +305 -0
  164. package/dist/certification-workflow-service.js.map +1 -0
  165. package/dist/check-design.d.ts +38 -0
  166. package/dist/check-design.js +256 -0
  167. package/dist/check-design.js.map +1 -0
  168. package/dist/check-gitignore.d.ts +39 -0
  169. package/dist/check-gitignore.js +156 -0
  170. package/dist/check-gitignore.js.map +1 -0
  171. package/dist/check-hooks.d.ts +15 -0
  172. package/dist/check-hooks.js +72 -0
  173. package/dist/check-hooks.js.map +1 -0
  174. package/dist/check-lock.d.ts +16 -0
  175. package/dist/check-lock.js +94 -0
  176. package/dist/check-lock.js.map +1 -0
  177. package/dist/check-secrets.d.ts +11 -0
  178. package/dist/check-secrets.js +320 -0
  179. package/dist/check-secrets.js.map +1 -0
  180. package/dist/check-security.d.ts +13 -0
  181. package/dist/check-security.js +887 -0
  182. package/dist/check-security.js.map +1 -0
  183. package/dist/check-services.d.ts +10 -0
  184. package/dist/check-services.js +44 -0
  185. package/dist/check-services.js.map +1 -0
  186. package/dist/check-skills.d.ts +8 -0
  187. package/dist/check-skills.js +26 -0
  188. package/dist/check-skills.js.map +1 -0
  189. package/dist/check-tests.d.ts +43 -0
  190. package/dist/check-tests.js +175 -0
  191. package/dist/check-tests.js.map +1 -0
  192. package/dist/check-tools.d.ts +8 -0
  193. package/dist/check-tools.js +42 -0
  194. package/dist/check-tools.js.map +1 -0
  195. package/dist/check-web-search.d.ts +12 -0
  196. package/dist/check-web-search.js +168 -0
  197. package/dist/check-web-search.js.map +1 -0
  198. package/dist/ci-cd-publisher.d.ts +162 -0
  199. package/dist/ci-cd-publisher.js +319 -0
  200. package/dist/ci-cd-publisher.js.map +1 -0
  201. package/dist/cli.d.ts +2 -0
  202. package/dist/cli.js +4074 -0
  203. package/dist/cli.js.map +1 -0
  204. package/dist/clone.d.ts +25 -0
  205. package/dist/clone.js +73 -0
  206. package/dist/clone.js.map +1 -0
  207. package/dist/completions.d.ts +8 -0
  208. package/dist/completions.js +250 -0
  209. package/dist/completions.js.map +1 -0
  210. package/dist/compression-manager.d.ts +107 -0
  211. package/dist/compression-manager.js +250 -0
  212. package/dist/compression-manager.js.map +1 -0
  213. package/dist/config.d.ts +233 -0
  214. package/dist/config.js +255 -0
  215. package/dist/config.js.map +1 -0
  216. package/dist/context.d.ts +38 -0
  217. package/dist/context.js +86 -0
  218. package/dist/context.js.map +1 -0
  219. package/dist/cost-monitor.d.ts +72 -0
  220. package/dist/cost-monitor.js +218 -0
  221. package/dist/cost-monitor.js.map +1 -0
  222. package/dist/create-plugin.d.ts +22 -0
  223. package/dist/create-plugin.js +266 -0
  224. package/dist/create-plugin.js.map +1 -0
  225. package/dist/database.d.ts +123 -0
  226. package/dist/database.js +354 -0
  227. package/dist/database.js.map +1 -0
  228. package/dist/datadog-adapter.d.ts +60 -0
  229. package/dist/datadog-adapter.js +245 -0
  230. package/dist/datadog-adapter.js.map +1 -0
  231. package/dist/doctor.d.ts +15 -0
  232. package/dist/doctor.js +131 -0
  233. package/dist/doctor.js.map +1 -0
  234. package/dist/documentation-generator.d.ts +226 -0
  235. package/dist/documentation-generator.js +348 -0
  236. package/dist/documentation-generator.js.map +1 -0
  237. package/dist/elevation-scopes.d.ts +40 -0
  238. package/dist/elevation-scopes.js +110 -0
  239. package/dist/elevation-scopes.js.map +1 -0
  240. package/dist/elevation.d.ts +102 -0
  241. package/dist/elevation.js +449 -0
  242. package/dist/elevation.js.map +1 -0
  243. package/dist/env-diff.d.ts +27 -0
  244. package/dist/env-diff.js +104 -0
  245. package/dist/env-diff.js.map +1 -0
  246. package/dist/env-inspect.d.ts +28 -0
  247. package/dist/env-inspect.js +81 -0
  248. package/dist/env-inspect.js.map +1 -0
  249. package/dist/env-switch.d.ts +37 -0
  250. package/dist/env-switch.js +102 -0
  251. package/dist/env-switch.js.map +1 -0
  252. package/dist/environment.d.ts +27 -0
  253. package/dist/environment.js +148 -0
  254. package/dist/environment.js.map +1 -0
  255. package/dist/error-tracker.d.ts +92 -0
  256. package/dist/error-tracker.js +206 -0
  257. package/dist/error-tracker.js.map +1 -0
  258. package/dist/escalate.d.ts +11 -0
  259. package/dist/escalate.js +73 -0
  260. package/dist/escalate.js.map +1 -0
  261. package/dist/event-stream.d.ts +81 -0
  262. package/dist/event-stream.js +161 -0
  263. package/dist/event-stream.js.map +1 -0
  264. package/dist/fix.d.ts +42 -0
  265. package/dist/fix.js +419 -0
  266. package/dist/fix.js.map +1 -0
  267. package/dist/governance-middleware.d.ts +22 -0
  268. package/dist/governance-middleware.js +173 -0
  269. package/dist/governance-middleware.js.map +1 -0
  270. package/dist/governance.d.ts +44 -0
  271. package/dist/governance.js +236 -0
  272. package/dist/governance.js.map +1 -0
  273. package/dist/hooks.d.ts +25 -0
  274. package/dist/hooks.js +281 -0
  275. package/dist/hooks.js.map +1 -0
  276. package/dist/id-generator.d.ts +43 -0
  277. package/dist/id-generator.js +47 -0
  278. package/dist/id-generator.js.map +1 -0
  279. package/dist/image-optimizer.d.ts +92 -0
  280. package/dist/image-optimizer.js +202 -0
  281. package/dist/image-optimizer.js.map +1 -0
  282. package/dist/install.d.ts +15 -0
  283. package/dist/install.js +59 -0
  284. package/dist/install.js.map +1 -0
  285. package/dist/lock.d.ts +82 -0
  286. package/dist/lock.js +264 -0
  287. package/dist/lock.js.map +1 -0
  288. package/dist/login.d.ts +23 -0
  289. package/dist/login.js +132 -0
  290. package/dist/login.js.map +1 -0
  291. package/dist/mcp-kit-tools-model.d.ts +195 -0
  292. package/dist/mcp-kit-tools-model.js +6 -0
  293. package/dist/mcp-kit-tools-model.js.map +1 -0
  294. package/dist/mcp-kit-tools-service.d.ts +127 -0
  295. package/dist/mcp-kit-tools-service.js +943 -0
  296. package/dist/mcp-kit-tools-service.js.map +1 -0
  297. package/dist/mcp-orchestrator.d.ts +70 -0
  298. package/dist/mcp-orchestrator.js +175 -0
  299. package/dist/mcp-orchestrator.js.map +1 -0
  300. package/dist/mcp-server.d.ts +3 -0
  301. package/dist/mcp-server.js +722 -0
  302. package/dist/mcp-server.js.map +1 -0
  303. package/dist/middleware/rate-limiter.d.ts +74 -0
  304. package/dist/middleware/rate-limiter.js +342 -0
  305. package/dist/middleware/rate-limiter.js.map +1 -0
  306. package/dist/migration-runner.d.ts +66 -0
  307. package/dist/migration-runner.js +192 -0
  308. package/dist/migration-runner.js.map +1 -0
  309. package/dist/migrations.d.ts +25 -0
  310. package/dist/migrations.js +530 -0
  311. package/dist/migrations.js.map +1 -0
  312. package/dist/moderation-system.d.ts +153 -0
  313. package/dist/moderation-system.js +338 -0
  314. package/dist/moderation-system.js.map +1 -0
  315. package/dist/multi-agent-workflow-model.d.ts +125 -0
  316. package/dist/multi-agent-workflow-model.js +6 -0
  317. package/dist/multi-agent-workflow-model.js.map +1 -0
  318. package/dist/multi-agent-workflow-service.d.ts +102 -0
  319. package/dist/multi-agent-workflow-service.js +452 -0
  320. package/dist/multi-agent-workflow-service.js.map +1 -0
  321. package/dist/onepassword.d.ts +75 -0
  322. package/dist/onepassword.js +140 -0
  323. package/dist/onepassword.js.map +1 -0
  324. package/dist/open.d.ts +30 -0
  325. package/dist/open.js +166 -0
  326. package/dist/open.js.map +1 -0
  327. package/dist/output.d.ts +32 -0
  328. package/dist/output.js +295 -0
  329. package/dist/output.js.map +1 -0
  330. package/dist/partner-service.d.ts +101 -0
  331. package/dist/partner-service.js +191 -0
  332. package/dist/partner-service.js.map +1 -0
  333. package/dist/payout-service.d.ts +136 -0
  334. package/dist/payout-service.js +293 -0
  335. package/dist/payout-service.js.map +1 -0
  336. package/dist/pkg.d.ts +30 -0
  337. package/dist/pkg.js +162 -0
  338. package/dist/pkg.js.map +1 -0
  339. package/dist/plugin-loader.d.ts +16 -0
  340. package/dist/plugin-loader.js +124 -0
  341. package/dist/plugin-loader.js.map +1 -0
  342. package/dist/plugin-registry-model.d.ts +133 -0
  343. package/dist/plugin-registry-model.js +6 -0
  344. package/dist/plugin-registry-model.js.map +1 -0
  345. package/dist/plugin-registry-service.d.ts +109 -0
  346. package/dist/plugin-registry-service.js +361 -0
  347. package/dist/plugin-registry-service.js.map +1 -0
  348. package/dist/plugin-registry.d.ts +58 -0
  349. package/dist/plugin-registry.js +108 -0
  350. package/dist/plugin-registry.js.map +1 -0
  351. package/dist/plugin-updates.d.ts +135 -0
  352. package/dist/plugin-updates.js +326 -0
  353. package/dist/plugin-updates.js.map +1 -0
  354. package/dist/plugins-cli.d.ts +7 -0
  355. package/dist/plugins-cli.js +157 -0
  356. package/dist/plugins-cli.js.map +1 -0
  357. package/dist/plugins.d.ts +88 -0
  358. package/dist/plugins.js +251 -0
  359. package/dist/plugins.js.map +1 -0
  360. package/dist/policy.d.ts +66 -0
  361. package/dist/policy.js +160 -0
  362. package/dist/policy.js.map +1 -0
  363. package/dist/post-pull-audit.d.ts +39 -0
  364. package/dist/post-pull-audit.js +151 -0
  365. package/dist/post-pull-audit.js.map +1 -0
  366. package/dist/provision.d.ts +17 -0
  367. package/dist/provision.js +147 -0
  368. package/dist/provision.js.map +1 -0
  369. package/dist/query-optimizer.d.ts +102 -0
  370. package/dist/query-optimizer.js +199 -0
  371. package/dist/query-optimizer.js.map +1 -0
  372. package/dist/read-only-mode.d.ts +46 -0
  373. package/dist/read-only-mode.js +71 -0
  374. package/dist/read-only-mode.js.map +1 -0
  375. package/dist/redis-adapter.d.ts +71 -0
  376. package/dist/redis-adapter.js +278 -0
  377. package/dist/redis-adapter.js.map +1 -0
  378. package/dist/resilience-tests.d.ts +120 -0
  379. package/dist/resilience-tests.js +293 -0
  380. package/dist/resilience-tests.js.map +1 -0
  381. package/dist/revocation.d.ts +22 -0
  382. package/dist/revocation.js +100 -0
  383. package/dist/revocation.js.map +1 -0
  384. package/dist/run.d.ts +21 -0
  385. package/dist/run.js +80 -0
  386. package/dist/run.js.map +1 -0
  387. package/dist/scan-build.d.ts +18 -0
  388. package/dist/scan-build.js +100 -0
  389. package/dist/scan-build.js.map +1 -0
  390. package/dist/scan-plaintext.d.ts +24 -0
  391. package/dist/scan-plaintext.js +147 -0
  392. package/dist/scan-plaintext.js.map +1 -0
  393. package/dist/scan-staged.d.ts +15 -0
  394. package/dist/scan-staged.js +70 -0
  395. package/dist/scan-staged.js.map +1 -0
  396. package/dist/scan-transcripts.d.ts +23 -0
  397. package/dist/scan-transcripts.js +93 -0
  398. package/dist/scan-transcripts.js.map +1 -0
  399. package/dist/secret-backends.d.ts +50 -0
  400. package/dist/secret-backends.js +510 -0
  401. package/dist/secret-backends.js.map +1 -0
  402. package/dist/secret-expiration.d.ts +46 -0
  403. package/dist/secret-expiration.js +172 -0
  404. package/dist/secret-expiration.js.map +1 -0
  405. package/dist/secrets-migrate.d.ts +75 -0
  406. package/dist/secrets-migrate.js +185 -0
  407. package/dist/secrets-migrate.js.map +1 -0
  408. package/dist/secrets-model.d.ts +77 -0
  409. package/dist/secrets-model.js +6 -0
  410. package/dist/secrets-model.js.map +1 -0
  411. package/dist/secrets-onecli.d.ts +65 -0
  412. package/dist/secrets-onecli.js +113 -0
  413. package/dist/secrets-onecli.js.map +1 -0
  414. package/dist/secrets-propagate.d.ts +48 -0
  415. package/dist/secrets-propagate.js +201 -0
  416. package/dist/secrets-propagate.js.map +1 -0
  417. package/dist/secrets-pull.d.ts +34 -0
  418. package/dist/secrets-pull.js +118 -0
  419. package/dist/secrets-pull.js.map +1 -0
  420. package/dist/secrets-purge-history.d.ts +53 -0
  421. package/dist/secrets-purge-history.js +144 -0
  422. package/dist/secrets-purge-history.js.map +1 -0
  423. package/dist/secrets-rotate-cli.d.ts +54 -0
  424. package/dist/secrets-rotate-cli.js +438 -0
  425. package/dist/secrets-rotate-cli.js.map +1 -0
  426. package/dist/secrets-rotate.d.ts +38 -0
  427. package/dist/secrets-rotate.js +65 -0
  428. package/dist/secrets-rotate.js.map +1 -0
  429. package/dist/secrets-service.d.ts +73 -0
  430. package/dist/secrets-service.js +283 -0
  431. package/dist/secrets-service.js.map +1 -0
  432. package/dist/secrets-set.d.ts +25 -0
  433. package/dist/secrets-set.js +33 -0
  434. package/dist/secrets-set.js.map +1 -0
  435. package/dist/secrets-sync.d.ts +21 -0
  436. package/dist/secrets-sync.js +215 -0
  437. package/dist/secrets-sync.js.map +1 -0
  438. package/dist/secrets-validate.d.ts +41 -0
  439. package/dist/secrets-validate.js +126 -0
  440. package/dist/secrets-validate.js.map +1 -0
  441. package/dist/secrets-vault-migrate.d.ts +71 -0
  442. package/dist/secrets-vault-migrate.js +258 -0
  443. package/dist/secrets-vault-migrate.js.map +1 -0
  444. package/dist/secrets.d.ts +16 -0
  445. package/dist/secrets.js +72 -0
  446. package/dist/secrets.js.map +1 -0
  447. package/dist/security-hardening.d.ts +150 -0
  448. package/dist/security-hardening.js +275 -0
  449. package/dist/security-hardening.js.map +1 -0
  450. package/dist/security-policy.d.ts +89 -0
  451. package/dist/security-policy.js +174 -0
  452. package/dist/security-policy.js.map +1 -0
  453. package/dist/security-prescan.d.ts +117 -0
  454. package/dist/security-prescan.js +566 -0
  455. package/dist/security-prescan.js.map +1 -0
  456. package/dist/sentry-adapter.d.ts +49 -0
  457. package/dist/sentry-adapter.js +227 -0
  458. package/dist/sentry-adapter.js.map +1 -0
  459. package/dist/service-adapter.d.ts +94 -0
  460. package/dist/service-adapter.js +162 -0
  461. package/dist/service-adapter.js.map +1 -0
  462. package/dist/skills.d.ts +13 -0
  463. package/dist/skills.js +17 -0
  464. package/dist/skills.js.map +1 -0
  465. package/dist/sla-monitor.d.ts +107 -0
  466. package/dist/sla-monitor.js +233 -0
  467. package/dist/sla-monitor.js.map +1 -0
  468. package/dist/stack-detector.d.ts +12 -0
  469. package/dist/stack-detector.js +251 -0
  470. package/dist/stack-detector.js.map +1 -0
  471. package/dist/team-model.d.ts +58 -0
  472. package/dist/team-model.js +83 -0
  473. package/dist/team-model.js.map +1 -0
  474. package/dist/team-service.d.ts +54 -0
  475. package/dist/team-service.js +206 -0
  476. package/dist/team-service.js.map +1 -0
  477. package/dist/toml-generator.d.ts +8 -0
  478. package/dist/toml-generator.js +223 -0
  479. package/dist/toml-generator.js.map +1 -0
  480. package/dist/triage-sandbox.d.ts +34 -0
  481. package/dist/triage-sandbox.js +167 -0
  482. package/dist/triage-sandbox.js.map +1 -0
  483. package/dist/triage.d.ts +30 -0
  484. package/dist/triage.js +79 -0
  485. package/dist/triage.js.map +1 -0
  486. package/dist/update-check.d.ts +13 -0
  487. package/dist/update-check.js +91 -0
  488. package/dist/update-check.js.map +1 -0
  489. package/dist/utils/colors.d.ts +14 -0
  490. package/dist/utils/colors.js +15 -0
  491. package/dist/utils/colors.js.map +1 -0
  492. package/dist/utils/didYouMean.d.ts +15 -0
  493. package/dist/utils/didYouMean.js +47 -0
  494. package/dist/utils/didYouMean.js.map +1 -0
  495. package/dist/utils/exec.d.ts +21 -0
  496. package/dist/utils/exec.js +23 -0
  497. package/dist/utils/exec.js.map +1 -0
  498. package/dist/utils/execFileNoThrow.d.ts +14 -0
  499. package/dist/utils/execFileNoThrow.js +29 -0
  500. package/dist/utils/execFileNoThrow.js.map +1 -0
  501. package/dist/utils/flags.d.ts +19 -0
  502. package/dist/utils/flags.js +36 -0
  503. package/dist/utils/flags.js.map +1 -0
  504. package/dist/utils/parseCommand.d.ts +16 -0
  505. package/dist/utils/parseCommand.js +13 -0
  506. package/dist/utils/parseCommand.js.map +1 -0
  507. package/dist/utils/prompt.d.ts +13 -0
  508. package/dist/utils/prompt.js +35 -0
  509. package/dist/utils/prompt.js.map +1 -0
  510. package/dist/utils/promptSelect.d.ts +19 -0
  511. package/dist/utils/promptSelect.js +89 -0
  512. package/dist/utils/promptSelect.js.map +1 -0
  513. package/dist/utils/redactSecrets.d.ts +24 -0
  514. package/dist/utils/redactSecrets.js +134 -0
  515. package/dist/utils/redactSecrets.js.map +1 -0
  516. package/dist/validation/dynamic-schema.d.ts +29 -0
  517. package/dist/validation/dynamic-schema.js +76 -0
  518. package/dist/validation/dynamic-schema.js.map +1 -0
  519. package/package.json +52 -0
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Alert rules engine
3
+ * Evaluates conditions against event stream and triggers actions
4
+ */
5
+ import { IdGenerators } from "./id-generator.js";
6
+ export class AlertRulesEngine {
7
+ rules = new Map();
8
+ history = [];
9
+ stream;
10
+ onTrigger;
11
+ maxHistorySize = 10000;
12
+ constructor(stream) {
13
+ this.stream = stream;
14
+ }
15
+ /**
16
+ * Add or update alert rule
17
+ */
18
+ addRule(rule) {
19
+ const fullRule = {
20
+ ...rule,
21
+ id: IdGenerators.alert(),
22
+ createdAt: new Date().toISOString(),
23
+ updatedAt: new Date().toISOString(),
24
+ };
25
+ this.rules.set(fullRule.id, fullRule);
26
+ return fullRule;
27
+ }
28
+ /**
29
+ * Remove rule by ID
30
+ */
31
+ removeRule(ruleId) {
32
+ return this.rules.delete(ruleId);
33
+ }
34
+ /**
35
+ * Get rule by ID
36
+ */
37
+ getRule(ruleId) {
38
+ return this.rules.get(ruleId);
39
+ }
40
+ /**
41
+ * Get all rules
42
+ */
43
+ getAllRules() {
44
+ return Array.from(this.rules.values());
45
+ }
46
+ /**
47
+ * Get active (non-acknowledged) rules
48
+ */
49
+ getActiveAlerts(authorId) {
50
+ const now = Date.now();
51
+ return Array.from(this.rules.values()).filter((rule) => {
52
+ // Skip if acknowledged
53
+ if (rule.acknowledgedUntil && rule.acknowledgedUntil > now) {
54
+ return false;
55
+ }
56
+ // Filter by author if provided
57
+ return !authorId || rule.description.includes(authorId);
58
+ });
59
+ }
60
+ /**
61
+ * Evaluate rule against stream events
62
+ */
63
+ evaluateRule(rule) {
64
+ if (!rule.enabled) {
65
+ return { triggered: false, value: 0 };
66
+ }
67
+ const windowMs = rule.condition.window * 1000;
68
+ const events = this.stream.query(windowMs, (event) => this.matchesMetric(event, rule.condition.metric));
69
+ const value = this.aggregateValue(events, rule.condition);
70
+ const triggered = this.evaluateCondition(value, rule.condition.operator, rule.condition.threshold);
71
+ return { triggered, value };
72
+ }
73
+ /**
74
+ * Evaluate all rules and trigger actions
75
+ */
76
+ async evaluateAll() {
77
+ const triggered = [];
78
+ for (const rule of this.rules.values()) {
79
+ const { triggered: shouldTrigger, value } = this.evaluateRule(rule);
80
+ if (shouldTrigger) {
81
+ const windowMs = rule.condition.window * 1000;
82
+ const breachEvents = this.stream.query(windowMs, (event) => this.matchesMetric(event, rule.condition.metric));
83
+ const triggerEvent = {
84
+ ruleId: rule.id,
85
+ triggeredAt: Date.now(),
86
+ value,
87
+ threshold: rule.condition.threshold,
88
+ window: rule.condition.window,
89
+ breachEvents,
90
+ };
91
+ // Check if already triggered recently (within 5 minutes)
92
+ const recentTrigger = this.history.find((h) => h.ruleId === rule.id &&
93
+ Date.now() - h.triggeredAt < 5 * 60 * 1000);
94
+ if (!recentTrigger) {
95
+ triggered.push(triggerEvent);
96
+ this.recordTrigger(triggerEvent);
97
+ // Update rule
98
+ rule.lastTriggered = new Date().toISOString();
99
+ rule.evaluatedAt = new Date().toISOString();
100
+ // Dispatch actions
101
+ if (this.onTrigger) {
102
+ await this.onTrigger(triggerEvent);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ return triggered;
108
+ }
109
+ /**
110
+ * Acknowledge alert to suppress duplicates
111
+ */
112
+ acknowledgeAlert(ruleId, suppressMinutes = 60) {
113
+ const rule = this.rules.get(ruleId);
114
+ if (rule) {
115
+ rule.acknowledgedUntil = Date.now() + suppressMinutes * 60 * 1000;
116
+ }
117
+ }
118
+ /**
119
+ * Get alert trigger history
120
+ */
121
+ getHistory(ruleId, limit = 100, offset = 0) {
122
+ let results = this.history;
123
+ if (ruleId) {
124
+ results = results.filter((h) => h.ruleId === ruleId);
125
+ }
126
+ return results.slice(offset, offset + limit);
127
+ }
128
+ /**
129
+ * Clear history
130
+ */
131
+ clearHistory() {
132
+ this.history = [];
133
+ }
134
+ /**
135
+ * Set trigger callback
136
+ */
137
+ setTriggerCallback(callback) {
138
+ this.onTrigger = callback;
139
+ }
140
+ // ─── Private Helpers ────────────────────────────────────────────────────
141
+ recordTrigger(event) {
142
+ this.history.push(event);
143
+ if (this.history.length > this.maxHistorySize) {
144
+ this.history = this.history.slice(-this.maxHistorySize);
145
+ }
146
+ }
147
+ matchesMetric(event, metric) {
148
+ switch (metric) {
149
+ case "error_rate":
150
+ return (event.type === "metric" &&
151
+ event.data.metric === "error_rate");
152
+ case "response_time":
153
+ return (event.type === "metric" &&
154
+ event.data.metric === "response_time");
155
+ case "downloads":
156
+ return (event.type === "metric" &&
157
+ event.data.metric === "downloads");
158
+ case "revenue":
159
+ return (event.type === "metric" &&
160
+ event.data.metric === "revenue");
161
+ case "sla_breach":
162
+ return event.severity === "critical" && event.data.sla_breach === true;
163
+ case "payout_delay":
164
+ return (event.type === "alert" &&
165
+ event.data.alertType === "payout_delay");
166
+ case "abuse_score":
167
+ return (event.type === "metric" &&
168
+ event.data.metric === "abuse_score");
169
+ default:
170
+ return false;
171
+ }
172
+ }
173
+ aggregateValue(events, condition) {
174
+ if (events.length === 0)
175
+ return 0;
176
+ const values = events.map((e) => e.data.value || 0);
177
+ switch (condition.aggregation) {
178
+ case "avg":
179
+ return values.reduce((a, b) => a + b, 0) / values.length;
180
+ case "max":
181
+ return Math.max(...values);
182
+ case "min":
183
+ return Math.min(...values);
184
+ case "sum":
185
+ return values.reduce((a, b) => a + b, 0);
186
+ case "count":
187
+ return values.length;
188
+ default:
189
+ return 0;
190
+ }
191
+ }
192
+ evaluateCondition(value, operator, threshold) {
193
+ switch (operator) {
194
+ case ">":
195
+ return value > threshold;
196
+ case "<":
197
+ return value < threshold;
198
+ case "==":
199
+ return value === threshold;
200
+ case "!=":
201
+ return value !== threshold;
202
+ case "anomaly":
203
+ // Simplified: value is 2+ std devs above mean
204
+ return Math.abs(value - threshold) > threshold * 0.2;
205
+ default:
206
+ return false;
207
+ }
208
+ }
209
+ }
210
+ //# sourceMappingURL=alert-rules-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-rules-engine.js","sourceRoot":"","sources":["../src/alert-rules-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * kit Analytics Service
3
+ *
4
+ * Aggregates plugin downloads, installations, ratings, and revenue data
5
+ * for developer dashboards and marketplace insights.
6
+ */
7
+ export interface PluginAnalytics {
8
+ pluginId: string;
9
+ totalDownloads: number;
10
+ monthlyDownloads: {
11
+ month: string;
12
+ downloads: number;
13
+ }[];
14
+ totalInstallations: number;
15
+ monthlyInstallations: {
16
+ month: string;
17
+ installations: number;
18
+ }[];
19
+ rating: number;
20
+ reviewsCount: number;
21
+ trendingScore: number;
22
+ uniqueInstalls: number;
23
+ retentionRate: number;
24
+ lastUpdated: string;
25
+ }
26
+ export interface AuthorAnalytics {
27
+ authorId: string;
28
+ totalEarnings: number;
29
+ monthlyEarnings: {
30
+ month: string;
31
+ earnings: number;
32
+ }[];
33
+ topPlugins: string[];
34
+ totalDownloads: number;
35
+ totalInstallations: number;
36
+ averageRating: number;
37
+ totalGrants: number;
38
+ grantsFunded: number;
39
+ createdAt: string;
40
+ lastUpdated: string;
41
+ }
42
+ export interface RevenueMetrics {
43
+ pluginId: string;
44
+ period: string;
45
+ downloads: number;
46
+ conversions: number;
47
+ totalRevenue: number;
48
+ authorShare: number;
49
+ kitShare: number;
50
+ conversionRate: number;
51
+ }
52
+ export interface DashboardMetrics {
53
+ totalPlugins: number;
54
+ totalDownloads: number;
55
+ totalEarnings: number;
56
+ activeAuthors: number;
57
+ topPlugins: {
58
+ pluginId: string;
59
+ downloads: number;
60
+ rating: number;
61
+ }[];
62
+ revenueByMonth: {
63
+ month: string;
64
+ revenue: number;
65
+ }[];
66
+ downloadsByCategory: {
67
+ category: string;
68
+ downloads: number;
69
+ }[];
70
+ }
71
+ /**
72
+ * Analytics service for marketplace insights and revenue tracking
73
+ */
74
+ export declare class AnalyticsService {
75
+ private db;
76
+ constructor(db?: any);
77
+ /**
78
+ * Get plugin analytics
79
+ */
80
+ getPluginAnalytics(pluginId: string): Promise<PluginAnalytics | null>;
81
+ /**
82
+ * Get monthly downloads for plugin
83
+ */
84
+ private getMonthlyDownloads;
85
+ /**
86
+ * Get monthly installations for plugin
87
+ */
88
+ private getMonthlyInstallations;
89
+ /**
90
+ * Calculate retention rate (installations/downloads ratio)
91
+ */
92
+ private calculateRetentionRate;
93
+ /**
94
+ * Get author analytics
95
+ */
96
+ getAuthorAnalytics(authorId: string): Promise<AuthorAnalytics | null>;
97
+ /**
98
+ * Get author's top plugins by downloads
99
+ */
100
+ private getAuthorTopPlugins;
101
+ /**
102
+ * Get monthly earnings for author
103
+ */
104
+ private getMonthlyEarnings;
105
+ /**
106
+ * Get revenue metrics for plugin
107
+ */
108
+ getPluginRevenueMetrics(pluginId: string): Promise<RevenueMetrics[]>;
109
+ /**
110
+ * Get dashboard metrics (admin view)
111
+ */
112
+ getDashboardMetrics(): Promise<DashboardMetrics>;
113
+ /**
114
+ * Get trending plugins (by recent downloads)
115
+ */
116
+ getTrendingPlugins(limit?: number): Promise<PluginAnalytics[]>;
117
+ /**
118
+ * Search analytics by date range
119
+ */
120
+ getAnalyticsByDateRange(startDate: Date, endDate: Date): Promise<{
121
+ downloads: number;
122
+ installations: number;
123
+ revenue: number;
124
+ authors: number;
125
+ }>;
126
+ }
@@ -0,0 +1,318 @@
1
+ /**
2
+ * kit Analytics Service
3
+ *
4
+ * Aggregates plugin downloads, installations, ratings, and revenue data
5
+ * for developer dashboards and marketplace insights.
6
+ */
7
+ /**
8
+ * Analytics service for marketplace insights and revenue tracking
9
+ */
10
+ export class AnalyticsService {
11
+ db;
12
+ constructor(db) {
13
+ this.db = db;
14
+ }
15
+ /**
16
+ * Get plugin analytics
17
+ */
18
+ async getPluginAnalytics(pluginId) {
19
+ const result = await this.db.query(`
20
+ SELECT
21
+ p.id,
22
+ p.downloads,
23
+ p.rating,
24
+ p.reviews_count,
25
+ p.trending_score,
26
+ COUNT(DISTINCT pi.id) as unique_installs,
27
+ p.last_updated
28
+ FROM plugins p
29
+ LEFT JOIN plugin_installations pi ON p.id = pi.plugin_id
30
+ WHERE p.id = $1
31
+ GROUP BY p.id, p.downloads, p.rating, p.reviews_count, p.trending_score, p.last_updated
32
+ `, [pluginId]);
33
+ if (result.rows.length === 0) {
34
+ return null;
35
+ }
36
+ const plugin = result.rows[0];
37
+ // Get monthly downloads
38
+ const monthlyDownloads = await this.getMonthlyDownloads(pluginId);
39
+ // Get monthly installations
40
+ const monthlyInstallations = await this.getMonthlyInstallations(pluginId);
41
+ return {
42
+ pluginId: plugin.id,
43
+ totalDownloads: plugin.downloads || 0,
44
+ monthlyDownloads,
45
+ totalInstallations: plugin.unique_installs || 0,
46
+ monthlyInstallations,
47
+ rating: plugin.rating || 0,
48
+ reviewsCount: plugin.reviews_count || 0,
49
+ trendingScore: plugin.trending_score || 0,
50
+ uniqueInstalls: plugin.unique_installs || 0,
51
+ retentionRate: this.calculateRetentionRate(plugin.unique_installs, plugin.downloads),
52
+ lastUpdated: plugin.last_updated || new Date().toISOString(),
53
+ };
54
+ }
55
+ /**
56
+ * Get monthly downloads for plugin
57
+ */
58
+ async getMonthlyDownloads(pluginId) {
59
+ const result = await this.db.query(`
60
+ SELECT
61
+ DATE_TRUNC('month', downloaded_at)::text as month,
62
+ COUNT(*) as downloads
63
+ FROM plugin_downloads
64
+ WHERE plugin_id = $1
65
+ GROUP BY DATE_TRUNC('month', downloaded_at)
66
+ ORDER BY month DESC
67
+ LIMIT 12
68
+ `, [pluginId]);
69
+ return result.rows.map((row) => ({
70
+ month: row.month.split('T')[0],
71
+ downloads: row.downloads,
72
+ }));
73
+ }
74
+ /**
75
+ * Get monthly installations for plugin
76
+ */
77
+ async getMonthlyInstallations(pluginId) {
78
+ const result = await this.db.query(`
79
+ SELECT
80
+ DATE_TRUNC('month', installed_at)::text as month,
81
+ COUNT(*) as installations
82
+ FROM plugin_installations
83
+ WHERE plugin_id = $1
84
+ GROUP BY DATE_TRUNC('month', installed_at)
85
+ ORDER BY month DESC
86
+ LIMIT 12
87
+ `, [pluginId]);
88
+ return result.rows.map((row) => ({
89
+ month: row.month.split('T')[0],
90
+ installations: row.installations,
91
+ }));
92
+ }
93
+ /**
94
+ * Calculate retention rate (installations/downloads ratio)
95
+ */
96
+ calculateRetentionRate(installations, downloads) {
97
+ if (downloads === 0)
98
+ return 0;
99
+ return (installations / downloads) * 100;
100
+ }
101
+ /**
102
+ * Get author analytics
103
+ */
104
+ async getAuthorAnalytics(authorId) {
105
+ const result = await this.db.query(`
106
+ SELECT
107
+ a.id,
108
+ a.name,
109
+ COUNT(DISTINCT p.id) as total_plugins,
110
+ SUM(p.downloads) as total_downloads,
111
+ COUNT(DISTINCT pi.id) as total_installations,
112
+ AVG(p.rating) as avg_rating,
113
+ COALESCE(pr.total_earnings, 0) as total_earnings,
114
+ a.created_at
115
+ FROM authors a
116
+ LEFT JOIN plugins p ON a.id = p.author_id
117
+ LEFT JOIN plugin_installations pi ON p.id = pi.plugin_id
118
+ LEFT JOIN (
119
+ SELECT
120
+ author_id,
121
+ SUM(author_earnings) as total_earnings
122
+ FROM plugin_revenue
123
+ GROUP BY author_id
124
+ ) pr ON a.id = pr.author_id
125
+ WHERE a.id = $1
126
+ GROUP BY a.id, a.name, a.created_at, pr.total_earnings
127
+ `, [authorId]);
128
+ if (result.rows.length === 0) {
129
+ return null;
130
+ }
131
+ const author = result.rows[0];
132
+ // Get top plugins by downloads
133
+ const topPlugins = await this.getAuthorTopPlugins(authorId, 5);
134
+ // Get monthly earnings
135
+ const monthlyEarnings = await this.getMonthlyEarnings(authorId);
136
+ return {
137
+ authorId: author.id,
138
+ totalEarnings: parseFloat(author.total_earnings) || 0,
139
+ monthlyEarnings,
140
+ topPlugins,
141
+ totalDownloads: author.total_downloads || 0,
142
+ totalInstallations: author.total_installations || 0,
143
+ averageRating: parseFloat(author.avg_rating) || 0,
144
+ totalGrants: 0, // From grant_applications table
145
+ grantsFunded: 0, // From grant_applications where status='approved'
146
+ createdAt: author.created_at,
147
+ lastUpdated: new Date().toISOString(),
148
+ };
149
+ }
150
+ /**
151
+ * Get author's top plugins by downloads
152
+ */
153
+ async getAuthorTopPlugins(authorId, limit = 5) {
154
+ const result = await this.db.query(`
155
+ SELECT id FROM plugins
156
+ WHERE author_id = $1
157
+ ORDER BY downloads DESC
158
+ LIMIT $2
159
+ `, [authorId, limit]);
160
+ return result.rows.map((row) => row.id);
161
+ }
162
+ /**
163
+ * Get monthly earnings for author
164
+ */
165
+ async getMonthlyEarnings(authorId) {
166
+ const result = await this.db.query(`
167
+ SELECT
168
+ DATE_TRUNC('month', period)::text as month,
169
+ SUM(author_earnings) as earnings
170
+ FROM plugin_revenue
171
+ WHERE (
172
+ SELECT author_id FROM plugins WHERE id = plugin_id
173
+ ) = $1
174
+ GROUP BY DATE_TRUNC('month', period)
175
+ ORDER BY month DESC
176
+ LIMIT 12
177
+ `, [authorId]);
178
+ return result.rows.map((row) => ({
179
+ month: row.month.split('T')[0],
180
+ earnings: parseFloat(row.earnings) || 0,
181
+ }));
182
+ }
183
+ /**
184
+ * Get revenue metrics for plugin
185
+ */
186
+ async getPluginRevenueMetrics(pluginId) {
187
+ const result = await this.db.query(`
188
+ SELECT
189
+ plugin_id,
190
+ period,
191
+ downloads,
192
+ conversions,
193
+ (downloads * 0.5) as total_revenue,
194
+ (downloads * 0.5 * 0.8) as author_share,
195
+ (downloads * 0.5 * 0.2) as kit_share,
196
+ CASE WHEN downloads > 0 THEN (conversions::float / downloads) ELSE 0 END as conversion_rate
197
+ FROM plugin_revenue
198
+ WHERE plugin_id = $1
199
+ ORDER BY period DESC
200
+ LIMIT 12
201
+ `, [pluginId]);
202
+ return result.rows.map((row) => ({
203
+ pluginId: row.plugin_id,
204
+ period: row.period,
205
+ downloads: row.downloads,
206
+ conversions: row.conversions,
207
+ totalRevenue: parseFloat(row.total_revenue) || 0,
208
+ authorShare: parseFloat(row.author_share) || 0,
209
+ kitShare: parseFloat(row.kit_share) || 0,
210
+ conversionRate: parseFloat(row.conversion_rate) || 0,
211
+ }));
212
+ }
213
+ /**
214
+ * Get dashboard metrics (admin view)
215
+ */
216
+ async getDashboardMetrics() {
217
+ // Total plugins
218
+ const pluginsResult = await this.db.query(`SELECT COUNT(*) as count FROM plugins`);
219
+ const totalPlugins = pluginsResult.rows[0]?.count || 0;
220
+ // Total downloads
221
+ const downloadsResult = await this.db.query(`SELECT SUM(downloads) as total FROM plugins`);
222
+ const totalDownloads = parseInt(downloadsResult.rows[0]?.total) || 0;
223
+ // Total earnings
224
+ const earningsResult = await this.db.query(`SELECT SUM(author_earnings) as total FROM plugin_revenue`);
225
+ const totalEarnings = parseFloat(earningsResult.rows[0]?.total) || 0;
226
+ // Active authors
227
+ const authorsResult = await this.db.query(`SELECT COUNT(DISTINCT author_id) as count FROM plugins`);
228
+ const activeAuthors = authorsResult.rows[0]?.count || 0;
229
+ // Top plugins
230
+ const topPluginsResult = await this.db.query(`SELECT id, downloads, rating FROM plugins ORDER BY downloads DESC LIMIT 5`);
231
+ const topPlugins = topPluginsResult.rows || [];
232
+ // Revenue by month
233
+ const revenueResult = await this.db.query(`
234
+ SELECT
235
+ period as month,
236
+ SUM(author_earnings + kit_commission) as revenue
237
+ FROM plugin_revenue
238
+ GROUP BY period
239
+ ORDER BY month DESC
240
+ LIMIT 12
241
+ `);
242
+ const revenueByMonth = (revenueResult.rows || []).map((row) => ({
243
+ month: row.month,
244
+ revenue: parseFloat(row.revenue) || 0,
245
+ }));
246
+ // Downloads by category (from tags)
247
+ const categoryResult = await this.db.query(`
248
+ SELECT
249
+ tag,
250
+ SUM(downloads) as downloads
251
+ FROM plugin_tags pt
252
+ JOIN plugins p ON pt.plugin_id = p.id
253
+ GROUP BY tag
254
+ ORDER BY downloads DESC
255
+ LIMIT 10
256
+ `);
257
+ const downloadsByCategory = (categoryResult.rows || []).map((row) => ({
258
+ category: row.tag,
259
+ downloads: row.downloads,
260
+ }));
261
+ return {
262
+ totalPlugins,
263
+ totalDownloads,
264
+ totalEarnings,
265
+ activeAuthors,
266
+ topPlugins: topPlugins.map((p) => ({
267
+ pluginId: p.id,
268
+ downloads: p.downloads,
269
+ rating: p.rating,
270
+ })),
271
+ revenueByMonth,
272
+ downloadsByCategory,
273
+ };
274
+ }
275
+ /**
276
+ * Get trending plugins (by recent downloads)
277
+ */
278
+ async getTrendingPlugins(limit = 10) {
279
+ const result = await this.db.query(`
280
+ SELECT id FROM plugins
281
+ ORDER BY trending_score DESC, downloads DESC
282
+ LIMIT $1
283
+ `, [limit]);
284
+ const plugins = [];
285
+ for (const row of result.rows) {
286
+ const analytics = await this.getPluginAnalytics(row.id);
287
+ if (analytics) {
288
+ plugins.push(analytics);
289
+ }
290
+ }
291
+ return plugins;
292
+ }
293
+ /**
294
+ * Search analytics by date range
295
+ */
296
+ async getAnalyticsByDateRange(startDate, endDate) {
297
+ const result = await this.db.query(`
298
+ SELECT
299
+ COUNT(DISTINCT d.plugin_id) as unique_downloads,
300
+ COUNT(DISTINCT i.id) as unique_installations,
301
+ COALESCE(SUM(pr.total_earnings), 0) as total_revenue,
302
+ COUNT(DISTINCT p.author_id) as unique_authors
303
+ FROM plugin_downloads d
304
+ FULL OUTER JOIN plugin_installations i ON d.plugin_id = i.plugin_id
305
+ LEFT JOIN plugins p ON d.plugin_id = p.id OR i.plugin_id = p.id
306
+ LEFT JOIN plugin_revenue pr ON p.id = pr.plugin_id
307
+ WHERE (d.downloaded_at BETWEEN $1 AND $2 OR i.installed_at BETWEEN $1 AND $2)
308
+ `, [startDate.toISOString(), endDate.toISOString()]);
309
+ const row = result.rows[0];
310
+ return {
311
+ downloads: row.unique_downloads || 0,
312
+ installations: row.unique_installations || 0,
313
+ revenue: parseFloat(row.total_revenue) || 0,
314
+ authors: row.unique_authors || 0,
315
+ };
316
+ }
317
+ }
318
+ //# sourceMappingURL=analytics-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-service.js","sourceRoot":"","sources":["../src/analytics-service.ts"],"names":[],"mappings":"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"}