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,199 @@
1
+ // ─── Types ────────────────────────────────────────────────────────────────────
2
+ // ─── QueryOptimizer ───────────────────────────────────────────────────────────
3
+ export class QueryOptimizer {
4
+ queryCache = new Map();
5
+ indexes = new Map();
6
+ executionStats = [];
7
+ batchQueue = new Map();
8
+ // ─── Index Management ─────────────────────────────────────────────────────
9
+ /**
10
+ * Create an index for faster queries.
11
+ */
12
+ createIndex(indexDef) {
13
+ this.indexes.set(indexDef.name, indexDef);
14
+ }
15
+ /**
16
+ * Get index definition by name.
17
+ */
18
+ getIndex(indexName) {
19
+ return this.indexes.get(indexName) || null;
20
+ }
21
+ /**
22
+ * Get all indexes.
23
+ */
24
+ getAllIndexes() {
25
+ return [...this.indexes.values()];
26
+ }
27
+ /**
28
+ * Drop an index.
29
+ */
30
+ dropIndex(indexName) {
31
+ return this.indexes.delete(indexName);
32
+ }
33
+ // ─── Query Planning ───────────────────────────────────────────────────────
34
+ /**
35
+ * Generate optimized query plan.
36
+ */
37
+ planQuery(query, columns = []) {
38
+ // Check cache first
39
+ if (this.queryCache.has(query)) {
40
+ return this.queryCache.get(query);
41
+ }
42
+ // Analyze query and find applicable indexes
43
+ const indexesUsed = this.findApplicableIndexes(query, columns);
44
+ const estimatedCost = this.calculateQueryCost(query, indexesUsed);
45
+ const batchSize = this.recommendBatchSize(estimatedCost);
46
+ const useConnection = estimatedCost >= 1000;
47
+ const plan = {
48
+ query,
49
+ estimatedCost,
50
+ indexesUsed,
51
+ batchSize,
52
+ useConnection,
53
+ };
54
+ this.queryCache.set(query, plan);
55
+ return plan;
56
+ }
57
+ findApplicableIndexes(query, columns) {
58
+ const applicable = [];
59
+ for (const index of this.indexes.values()) {
60
+ // Check if index columns are referenced in query
61
+ if (index.columns.some((col) => query.includes(col) || columns.includes(col))) {
62
+ applicable.push(index.name);
63
+ }
64
+ }
65
+ return applicable;
66
+ }
67
+ calculateQueryCost(query, indexesUsed) {
68
+ // Simple cost calculation: base cost minus index benefits
69
+ let cost = 200;
70
+ // Penalize complex queries
71
+ if (query.includes("JOIN"))
72
+ cost += 400;
73
+ if (query.includes("GROUP BY"))
74
+ cost += 300;
75
+ if (query.includes("ORDER BY"))
76
+ cost += 200;
77
+ // Reward index usage
78
+ cost -= indexesUsed.length * 50;
79
+ return Math.max(10, cost);
80
+ }
81
+ recommendBatchSize(estimatedCost) {
82
+ if (estimatedCost < 50)
83
+ return 1000;
84
+ if (estimatedCost < 100)
85
+ return 500;
86
+ if (estimatedCost < 500)
87
+ return 100;
88
+ return 10;
89
+ }
90
+ /**
91
+ * Get cached query plan.
92
+ */
93
+ getCachedPlan(query) {
94
+ return this.queryCache.get(query) || null;
95
+ }
96
+ /**
97
+ * Clear query plan cache.
98
+ */
99
+ clearCache() {
100
+ this.queryCache.clear();
101
+ }
102
+ // ─── Query Execution ──────────────────────────────────────────────────────
103
+ /**
104
+ * Execute query with optimization.
105
+ */
106
+ executeQuery(query, columns = []) {
107
+ const startTime = Date.now();
108
+ const plan = this.planQuery(query, columns);
109
+ // Simulate query execution
110
+ const result = {
111
+ rows: [],
112
+ executionTime: Date.now() - startTime,
113
+ indexesUsed: plan.indexesUsed,
114
+ };
115
+ // Track statistics
116
+ this.executionStats.push({
117
+ query,
118
+ executionTime: result.executionTime,
119
+ timestamp: new Date().toISOString(),
120
+ });
121
+ return result;
122
+ }
123
+ /**
124
+ * Get query execution statistics.
125
+ */
126
+ getExecutionStats(limit = 100) {
127
+ return this.executionStats.slice(-limit);
128
+ }
129
+ /**
130
+ * Get average query execution time.
131
+ */
132
+ getAverageExecutionTime(query) {
133
+ const stats = query
134
+ ? this.executionStats.filter((s) => s.query === query)
135
+ : this.executionStats;
136
+ if (stats.length === 0)
137
+ return 0;
138
+ const total = stats.reduce((sum, s) => sum + s.executionTime, 0);
139
+ return total / stats.length;
140
+ }
141
+ // ─── Batch Operations ─────────────────────────────────────────────────────
142
+ /**
143
+ * Queue batch operation.
144
+ */
145
+ queueBatchOperation(id, operations) {
146
+ const batchOp = {
147
+ id,
148
+ operations,
149
+ status: "pending",
150
+ };
151
+ this.batchQueue.set(id, batchOp);
152
+ return batchOp;
153
+ }
154
+ /**
155
+ * Execute queued batch operation.
156
+ */
157
+ executeBatch(id) {
158
+ const batch = this.batchQueue.get(id);
159
+ if (!batch)
160
+ return null;
161
+ batch.status = "executing";
162
+ try {
163
+ // Simulate batch execution
164
+ batch.result = {
165
+ inserted: batch.operations.filter((op) => op.type === "insert").length,
166
+ updated: batch.operations.filter((op) => op.type === "update").length,
167
+ deleted: batch.operations.filter((op) => op.type === "delete").length,
168
+ };
169
+ batch.status = "completed";
170
+ }
171
+ catch {
172
+ batch.status = "failed";
173
+ }
174
+ return batch;
175
+ }
176
+ /**
177
+ * Get batch operation by ID.
178
+ */
179
+ getBatchOperation(id) {
180
+ return this.batchQueue.get(id) || null;
181
+ }
182
+ /**
183
+ * Get all pending batches.
184
+ */
185
+ getPendingBatches() {
186
+ return [...this.batchQueue.values()].filter((b) => b.status === "pending");
187
+ }
188
+ // ─── Cache helpers ────────────────────────────────────────────────────────
189
+ getIndexCache() {
190
+ return this.indexes;
191
+ }
192
+ getQueryCacheSize() {
193
+ return this.queryCache.size;
194
+ }
195
+ getBatchQueueSize() {
196
+ return this.batchQueue.size;
197
+ }
198
+ }
199
+ //# sourceMappingURL=query-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-optimizer.js","sourceRoot":"","sources":["../src/query-optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Per-session read-only mode.
3
+ *
4
+ * When kit is invoked with `--read-only` (or `.kit.toml [policy]
5
+ * .default_mode = "read-only"`), every write-capable code path refuses
6
+ * the mutation and audit-logs the refusal. The set of guarded operations
7
+ * includes: vault writes, env-var sets, hook installs, elevation grants,
8
+ * and every plugin's create/update/delete surface.
9
+ *
10
+ * Implementation choice: a single env var `KIT_READ_ONLY=1` is the
11
+ * source of truth so plugins running in the same process tree honor the
12
+ * flag without explicit coupling to a TypeScript module.
13
+ */
14
+ /**
15
+ * Returns true when the active process should refuse mutating operations.
16
+ * Honors:
17
+ * 1. Explicit `--read-only` flag (parsed by main(), sets env var)
18
+ * 2. `KIT_READ_ONLY=1` env var (for nested invocations)
19
+ * 3. `.kit.toml [policy].default_mode = "read-only"` (read at boot)
20
+ */
21
+ export declare function isReadOnlyMode(): boolean;
22
+ /**
23
+ * Activates read-only mode for this process and any child processes.
24
+ * Idempotent. Called from main() after argv parsing or from
25
+ * `.kit.toml`-policy loader.
26
+ */
27
+ export declare function activateReadOnlyMode(source: "flag" | "env" | "policy"): void;
28
+ /**
29
+ * Refuses a mutating operation. Returns a structured result that callers
30
+ * forward; also appends an audit-log entry. Never throws — callers handle
31
+ * the {ok: false} branch and surface the reason to the user.
32
+ *
33
+ * Pattern:
34
+ * if (isReadOnlyMode()) {
35
+ * const refusal = await refuseWrite("rotate-jwt", { vault: "supabase" });
36
+ * return { ok: false, detail: refusal.reason };
37
+ * }
38
+ */
39
+ export declare function refuseWrite(operation: string, metadata?: Record<string, unknown>): Promise<{
40
+ ok: false;
41
+ reason: string;
42
+ }>;
43
+ /**
44
+ * Test-only: reset env var so tests can exercise both modes.
45
+ */
46
+ export declare function _resetReadOnlyModeForTests(): void;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Per-session read-only mode.
3
+ *
4
+ * When kit is invoked with `--read-only` (or `.kit.toml [policy]
5
+ * .default_mode = "read-only"`), every write-capable code path refuses
6
+ * the mutation and audit-logs the refusal. The set of guarded operations
7
+ * includes: vault writes, env-var sets, hook installs, elevation grants,
8
+ * and every plugin's create/update/delete surface.
9
+ *
10
+ * Implementation choice: a single env var `KIT_READ_ONLY=1` is the
11
+ * source of truth so plugins running in the same process tree honor the
12
+ * flag without explicit coupling to a TypeScript module.
13
+ */
14
+ import { appendAuditEventDirect } from "./audit.js";
15
+ const READ_ONLY_ENV = "KIT_READ_ONLY";
16
+ /**
17
+ * Returns true when the active process should refuse mutating operations.
18
+ * Honors:
19
+ * 1. Explicit `--read-only` flag (parsed by main(), sets env var)
20
+ * 2. `KIT_READ_ONLY=1` env var (for nested invocations)
21
+ * 3. `.kit.toml [policy].default_mode = "read-only"` (read at boot)
22
+ */
23
+ export function isReadOnlyMode() {
24
+ const v = process.env[READ_ONLY_ENV];
25
+ return v === "1" || v === "true";
26
+ }
27
+ /**
28
+ * Activates read-only mode for this process and any child processes.
29
+ * Idempotent. Called from main() after argv parsing or from
30
+ * `.kit.toml`-policy loader.
31
+ */
32
+ export function activateReadOnlyMode(source) {
33
+ if (isReadOnlyMode())
34
+ return;
35
+ process.env[READ_ONLY_ENV] = "1";
36
+ process.stderr.write(`[kit] read-only mode active (source: ${source}) — all writes will be refused.\n`);
37
+ void appendAuditEventDirect({
38
+ operation: "read-only-mode-activated",
39
+ environment: process.env.NODE_ENV ?? "unknown",
40
+ success: true,
41
+ metadata: { source },
42
+ });
43
+ }
44
+ /**
45
+ * Refuses a mutating operation. Returns a structured result that callers
46
+ * forward; also appends an audit-log entry. Never throws — callers handle
47
+ * the {ok: false} branch and surface the reason to the user.
48
+ *
49
+ * Pattern:
50
+ * if (isReadOnlyMode()) {
51
+ * const refusal = await refuseWrite("rotate-jwt", { vault: "supabase" });
52
+ * return { ok: false, detail: refusal.reason };
53
+ * }
54
+ */
55
+ export async function refuseWrite(operation, metadata = {}) {
56
+ const reason = `read-only mode active — refusing "${operation}"`;
57
+ await appendAuditEventDirect({
58
+ operation: "read-only-mode-refusal",
59
+ environment: process.env.NODE_ENV ?? "unknown",
60
+ success: false,
61
+ metadata: { refused_operation: operation, ...metadata },
62
+ });
63
+ return { ok: false, reason };
64
+ }
65
+ /**
66
+ * Test-only: reset env var so tests can exercise both modes.
67
+ */
68
+ export function _resetReadOnlyModeForTests() {
69
+ delete process.env[READ_ONLY_ENV];
70
+ }
71
+ //# sourceMappingURL=read-only-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only-mode.js","sourceRoot":"","sources":["../src/read-only-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,aAAa,GAAG,eAAe,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiC;IACpE,IAAI,cAAc,EAAE;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wCAAwC,MAAM,mCAAmC,CAClF,CAAC;IACF,KAAK,sBAAsB,CAAC;QAC1B,SAAS,EAAE,0BAA0B;QACrC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS;QAC9C,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE,MAAM,EAAE;KACrB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,WAAoC,EAAE;IAEtC,MAAM,MAAM,GAAG,qCAAqC,SAAS,GAAG,CAAC;IACjE,MAAM,sBAAsB,CAAC;QAC3B,SAAS,EAAE,wBAAwB;QACnC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS;QAC9C,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE;KACxD,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { AbstractServiceAdapter, type ServiceConfig, type ServiceEvent, type ServiceHealth } from "./service-adapter.js";
2
+ /**
3
+ * Redis adapter for caching and session management.
4
+ */
5
+ export declare class RedisAdapter extends AbstractServiceAdapter {
6
+ private cache;
7
+ private lastHealthCheck;
8
+ private healthCheckErrors;
9
+ private stats;
10
+ constructor(config?: ServiceConfig);
11
+ connect(): Promise<void>;
12
+ disconnect(): Promise<void>;
13
+ getHealth(): Promise<ServiceHealth>;
14
+ protected sendEvent(event: ServiceEvent): Promise<void>;
15
+ /**
16
+ * Set a cache value.
17
+ */
18
+ set(key: string, value: unknown, ttl?: number): Promise<boolean>;
19
+ /**
20
+ * Get a cache value.
21
+ */
22
+ get(key: string): Promise<unknown>;
23
+ /**
24
+ * Delete a cache key.
25
+ */
26
+ delete(key: string): Promise<boolean>;
27
+ /**
28
+ * Check if key exists.
29
+ */
30
+ exists(key: string): Promise<boolean>;
31
+ /**
32
+ * Clear all cache.
33
+ */
34
+ clear(): Promise<boolean>;
35
+ /**
36
+ * Get all cache keys.
37
+ */
38
+ keys(): string[];
39
+ /**
40
+ * Get cache size.
41
+ */
42
+ size(): number;
43
+ /**
44
+ * Get cache statistics.
45
+ */
46
+ getCacheStats(): {
47
+ hits: number;
48
+ misses: number;
49
+ sets: number;
50
+ deletes: number;
51
+ hitRate: number;
52
+ size: number;
53
+ };
54
+ /**
55
+ * Flush all queued events.
56
+ */
57
+ private flushQueue;
58
+ /**
59
+ * Get Redis configuration info.
60
+ */
61
+ getInfo(): {
62
+ endpoint: string;
63
+ connected: boolean;
64
+ cacheSize: number;
65
+ keyCount: number;
66
+ };
67
+ }
68
+ /**
69
+ * Create a Redis adapter from environment variables.
70
+ */
71
+ export declare function createRedisAdapter(enabled?: boolean): RedisAdapter;
@@ -0,0 +1,278 @@
1
+ // ─── Redis Cache Adapter ─────────────────────────────────────────────────
2
+ import { AbstractServiceAdapter, simulatedFailuresEnabled, } from "./service-adapter.js";
3
+ /**
4
+ * Redis adapter for caching and session management.
5
+ */
6
+ export class RedisAdapter extends AbstractServiceAdapter {
7
+ cache = new Map();
8
+ lastHealthCheck = new Date().toISOString();
9
+ healthCheckErrors = 0;
10
+ stats = {
11
+ hits: 0,
12
+ misses: 0,
13
+ sets: 0,
14
+ deletes: 0,
15
+ };
16
+ constructor(config = { enabled: false }) {
17
+ super("redis", "1.0.0", config);
18
+ }
19
+ async connect() {
20
+ if (!this.config.enabled) {
21
+ this.connected = false;
22
+ return;
23
+ }
24
+ // Validate required config
25
+ if (!this.config.endpoint) {
26
+ throw new Error("Redis endpoint is required (host:port)");
27
+ }
28
+ // Basic endpoint format validation
29
+ const [host, port] = this.config.endpoint.split(":");
30
+ if (!host) {
31
+ throw new Error("Invalid Redis endpoint format");
32
+ }
33
+ if (port && isNaN(parseInt(port))) {
34
+ throw new Error("Invalid Redis port number");
35
+ }
36
+ // Simulate connection test
37
+ await new Promise((resolve) => setTimeout(resolve, 50));
38
+ this.connected = true;
39
+ // Flush queued events
40
+ await this.flushQueue();
41
+ }
42
+ async disconnect() {
43
+ if (this.healthCheckInterval) {
44
+ clearInterval(this.healthCheckInterval);
45
+ this.healthCheckInterval = null;
46
+ }
47
+ this.cache.clear();
48
+ this.connected = false;
49
+ }
50
+ async getHealth() {
51
+ const responseTime = Math.random() * 30;
52
+ try {
53
+ if (!this.connected) {
54
+ this.healthCheckErrors++;
55
+ }
56
+ this.lastHealthCheck = new Date().toISOString();
57
+ const status = this.healthCheckErrors < 3
58
+ ? this.connected
59
+ ? "healthy"
60
+ : "degraded"
61
+ : "unhealthy";
62
+ return {
63
+ status,
64
+ lastCheck: this.lastHealthCheck,
65
+ responseTime: Math.round(responseTime),
66
+ errorCount: this.healthCheckErrors,
67
+ };
68
+ }
69
+ catch {
70
+ this.healthCheckErrors++;
71
+ return {
72
+ status: "unhealthy",
73
+ lastCheck: new Date().toISOString(),
74
+ responseTime: -1,
75
+ errorCount: this.healthCheckErrors,
76
+ };
77
+ }
78
+ }
79
+ async sendEvent(event) {
80
+ if (!this.connected) {
81
+ throw new Error("Not connected to Redis");
82
+ }
83
+ // Validate event
84
+ if (!event.type || !event.data) {
85
+ throw new Error("Invalid event format");
86
+ }
87
+ // Simulate Redis operation
88
+ await new Promise((resolve) => setTimeout(resolve, Math.random() * 20));
89
+ // Simulate occasional failures (0.5% rate for Redis)
90
+ if (simulatedFailuresEnabled() && Math.random() < 0.005) {
91
+ throw new Error("Simulated Redis error");
92
+ }
93
+ }
94
+ /**
95
+ * Set a cache value.
96
+ */
97
+ async set(key, value, ttl) {
98
+ const expireAt = ttl ? Date.now() + ttl * 1000 : undefined;
99
+ const event = {
100
+ type: "event",
101
+ data: {
102
+ operation: "set",
103
+ key,
104
+ value,
105
+ ttl,
106
+ },
107
+ timestamp: new Date().toISOString(),
108
+ tags: {
109
+ operation: "set",
110
+ },
111
+ };
112
+ const success = await this.send(event);
113
+ if (success) {
114
+ this.cache.set(key, { value, expireAt });
115
+ this.stats.sets++;
116
+ }
117
+ return success;
118
+ }
119
+ /**
120
+ * Get a cache value.
121
+ */
122
+ async get(key) {
123
+ const event = {
124
+ type: "event",
125
+ data: {
126
+ operation: "get",
127
+ key,
128
+ },
129
+ timestamp: new Date().toISOString(),
130
+ tags: {
131
+ operation: "get",
132
+ },
133
+ };
134
+ await this.send(event);
135
+ const entry = this.cache.get(key);
136
+ if (!entry) {
137
+ this.stats.misses++;
138
+ return undefined;
139
+ }
140
+ // Check expiration
141
+ if (entry.expireAt && entry.expireAt < Date.now()) {
142
+ this.cache.delete(key);
143
+ this.stats.misses++;
144
+ return undefined;
145
+ }
146
+ this.stats.hits++;
147
+ return entry.value;
148
+ }
149
+ /**
150
+ * Delete a cache key.
151
+ */
152
+ async delete(key) {
153
+ const event = {
154
+ type: "event",
155
+ data: {
156
+ operation: "delete",
157
+ key,
158
+ },
159
+ timestamp: new Date().toISOString(),
160
+ tags: {
161
+ operation: "delete",
162
+ },
163
+ };
164
+ const success = await this.send(event);
165
+ if (success) {
166
+ const deleted = this.cache.delete(key);
167
+ if (deleted) {
168
+ this.stats.deletes++;
169
+ }
170
+ }
171
+ return success;
172
+ }
173
+ /**
174
+ * Check if key exists.
175
+ */
176
+ async exists(key) {
177
+ const entry = this.cache.get(key);
178
+ if (!entry) {
179
+ return false;
180
+ }
181
+ // Check expiration
182
+ if (entry.expireAt && entry.expireAt < Date.now()) {
183
+ this.cache.delete(key);
184
+ return false;
185
+ }
186
+ return true;
187
+ }
188
+ /**
189
+ * Clear all cache.
190
+ */
191
+ async clear() {
192
+ const event = {
193
+ type: "event",
194
+ data: {
195
+ operation: "clear",
196
+ },
197
+ timestamp: new Date().toISOString(),
198
+ tags: {
199
+ operation: "clear",
200
+ },
201
+ };
202
+ const success = await this.send(event);
203
+ if (success) {
204
+ this.cache.clear();
205
+ }
206
+ return success;
207
+ }
208
+ /**
209
+ * Get all cache keys.
210
+ */
211
+ keys() {
212
+ const now = Date.now();
213
+ const validKeys = [];
214
+ for (const [key, entry] of this.cache.entries()) {
215
+ // Skip expired keys
216
+ if (!entry.expireAt || entry.expireAt >= now) {
217
+ validKeys.push(key);
218
+ }
219
+ }
220
+ return validKeys;
221
+ }
222
+ /**
223
+ * Get cache size.
224
+ */
225
+ size() {
226
+ return this.cache.size;
227
+ }
228
+ /**
229
+ * Get cache statistics.
230
+ */
231
+ getCacheStats() {
232
+ const total = this.stats.hits + this.stats.misses;
233
+ const hitRate = total > 0 ? (this.stats.hits / total) * 100 : 0;
234
+ return {
235
+ ...this.stats,
236
+ hitRate: Math.round(hitRate * 100) / 100,
237
+ size: this.cache.size,
238
+ };
239
+ }
240
+ /**
241
+ * Flush all queued events.
242
+ */
243
+ async flushQueue() {
244
+ const queued = this.getQueuedEvents();
245
+ if (queued.length === 0)
246
+ return;
247
+ const { sent, failed } = await this.batch(queued);
248
+ if (sent > 0) {
249
+ this.clearQueue();
250
+ }
251
+ console.log(`Flushed Redis queue: ${sent} sent, ${failed} failed`);
252
+ }
253
+ /**
254
+ * Get Redis configuration info.
255
+ */
256
+ getInfo() {
257
+ return {
258
+ endpoint: this.config.endpoint || "",
259
+ connected: this.connected,
260
+ cacheSize: this.cache.size,
261
+ keyCount: this.keys().length,
262
+ };
263
+ }
264
+ }
265
+ /**
266
+ * Create a Redis adapter from environment variables.
267
+ */
268
+ export function createRedisAdapter(enabled = true) {
269
+ const endpoint = process.env.REDIS_URL || process.env.REDIS_ENDPOINT;
270
+ if (enabled && !endpoint) {
271
+ console.warn("Redis is enabled but REDIS_URL/REDIS_ENDPOINT environment variable is not set");
272
+ }
273
+ return new RedisAdapter({
274
+ enabled: enabled && !!endpoint,
275
+ endpoint,
276
+ });
277
+ }
278
+ //# sourceMappingURL=redis-adapter.js.map