@stackmemoryai/stackmemory 0.2.7 → 0.2.9

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 (346) hide show
  1. package/README.md +25 -8
  2. package/dist/scripts/cancel-duplicate-tasks.js +2 -1
  3. package/dist/scripts/cancel-duplicate-tasks.js.map +1 -1
  4. package/dist/scripts/list-linear-tasks.js +3 -4
  5. package/dist/scripts/list-linear-tasks.js.map +1 -1
  6. package/dist/scripts/merge-linear-duplicates-safe.js +4 -2
  7. package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -1
  8. package/dist/scripts/show-linear-summary.js +4 -1
  9. package/dist/scripts/show-linear-summary.js.map +1 -1
  10. package/dist/scripts/status.js +6 -2
  11. package/dist/scripts/status.js.map +1 -1
  12. package/dist/src/cli/auto-detect.js.map +1 -1
  13. package/dist/src/cli/claude-sm.js.map +1 -1
  14. package/dist/src/cli/commands/config.d.ts +6 -0
  15. package/dist/src/cli/commands/config.d.ts.map +1 -0
  16. package/dist/src/cli/commands/config.js +224 -0
  17. package/dist/src/cli/commands/config.js.map +1 -0
  18. package/dist/src/cli/commands/linear.d.ts.map +1 -1
  19. package/dist/src/cli/commands/linear.js +123 -47
  20. package/dist/src/cli/commands/linear.js.map +1 -1
  21. package/dist/src/cli/index.d.ts.map +1 -1
  22. package/dist/src/cli/index.js +48 -1
  23. package/dist/src/cli/index.js.map +1 -1
  24. package/dist/src/core/config/config-manager.d.ts +95 -0
  25. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  26. package/dist/src/core/config/config-manager.js +359 -0
  27. package/dist/src/core/config/config-manager.js.map +1 -0
  28. package/dist/src/core/config/types.d.ts +72 -0
  29. package/dist/src/core/config/types.d.ts.map +1 -0
  30. package/dist/src/core/config/types.js +127 -0
  31. package/dist/src/core/config/types.js.map +1 -0
  32. package/dist/src/core/context/compaction-handler.d.ts +119 -0
  33. package/dist/src/core/context/compaction-handler.d.ts.map +1 -0
  34. package/dist/src/core/context/compaction-handler.js +306 -0
  35. package/dist/src/core/context/compaction-handler.js.map +1 -0
  36. package/dist/src/core/context/model-aware-compaction.d.ts +101 -0
  37. package/dist/src/core/context/model-aware-compaction.d.ts.map +1 -0
  38. package/dist/src/core/context/model-aware-compaction.js +616 -0
  39. package/dist/src/core/context/model-aware-compaction.js.map +1 -0
  40. package/dist/src/core/digest/hybrid-digest-generator.d.ts +76 -0
  41. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +1 -0
  42. package/dist/src/core/digest/hybrid-digest-generator.js +629 -0
  43. package/dist/src/core/digest/hybrid-digest-generator.js.map +1 -0
  44. package/dist/src/core/digest/index.d.ts +7 -0
  45. package/dist/src/core/digest/index.d.ts.map +1 -0
  46. package/dist/src/core/digest/index.js +7 -0
  47. package/dist/src/core/digest/index.js.map +1 -0
  48. package/dist/src/core/digest/types.d.ts +154 -0
  49. package/dist/src/core/digest/types.d.ts.map +1 -0
  50. package/dist/src/core/digest/types.js +18 -0
  51. package/dist/src/core/digest/types.js.map +1 -0
  52. package/dist/src/core/monitoring/logger.d.ts +2 -2
  53. package/dist/src/core/monitoring/logger.d.ts.map +1 -1
  54. package/dist/src/core/monitoring/logger.js +10 -5
  55. package/dist/src/core/monitoring/logger.js.map +1 -1
  56. package/dist/src/core/monitoring/metrics.d.ts +3 -0
  57. package/dist/src/core/monitoring/metrics.d.ts.map +1 -1
  58. package/dist/src/core/monitoring/metrics.js +142 -3
  59. package/dist/src/core/monitoring/metrics.js.map +1 -1
  60. package/dist/src/core/persistence/postgres-adapter.d.ts +31 -0
  61. package/dist/src/core/persistence/postgres-adapter.d.ts.map +1 -0
  62. package/dist/src/core/persistence/postgres-adapter.js +316 -0
  63. package/dist/src/core/persistence/postgres-adapter.js.map +1 -0
  64. package/dist/src/core/query/query-parser.d.ts +104 -0
  65. package/dist/src/core/query/query-parser.d.ts.map +1 -0
  66. package/dist/src/core/query/query-parser.js +347 -0
  67. package/dist/src/core/query/query-parser.js.map +1 -0
  68. package/dist/src/core/retrieval/index.d.ts +8 -0
  69. package/dist/src/core/retrieval/index.d.ts.map +1 -0
  70. package/dist/src/core/retrieval/index.js +8 -0
  71. package/dist/src/core/retrieval/index.js.map +1 -0
  72. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +71 -0
  73. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -0
  74. package/dist/src/core/retrieval/llm-context-retrieval.js +545 -0
  75. package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -0
  76. package/dist/src/core/retrieval/summary-generator.d.ts +63 -0
  77. package/dist/src/core/retrieval/summary-generator.d.ts.map +1 -0
  78. package/dist/src/core/retrieval/summary-generator.js +622 -0
  79. package/dist/src/core/retrieval/summary-generator.js.map +1 -0
  80. package/dist/src/core/retrieval/types.d.ts +257 -0
  81. package/dist/src/core/retrieval/types.d.ts.map +1 -0
  82. package/dist/src/core/retrieval/types.js +18 -0
  83. package/dist/src/core/retrieval/types.js.map +1 -0
  84. package/dist/src/core/trace/trace-detector.d.ts +108 -0
  85. package/dist/src/core/trace/trace-detector.d.ts.map +1 -0
  86. package/dist/src/core/trace/trace-detector.demo.d.ts +5 -0
  87. package/dist/src/core/trace/trace-detector.demo.d.ts.map +1 -0
  88. package/dist/src/core/trace/trace-detector.demo.js +145 -0
  89. package/dist/src/core/trace/trace-detector.demo.js.map +1 -0
  90. package/dist/src/core/trace/trace-detector.js +425 -0
  91. package/dist/src/core/trace/trace-detector.js.map +1 -0
  92. package/dist/src/core/trace/trace-store.d.ts +60 -0
  93. package/dist/src/core/trace/trace-store.d.ts.map +1 -0
  94. package/dist/src/core/trace/trace-store.js +323 -0
  95. package/dist/src/core/trace/trace-store.js.map +1 -0
  96. package/dist/src/core/trace/types.d.ts +81 -0
  97. package/dist/src/core/trace/types.d.ts.map +1 -0
  98. package/dist/src/core/trace/types.js +70 -0
  99. package/dist/src/core/trace/types.js.map +1 -0
  100. package/dist/src/core/types.d.ts +35 -0
  101. package/dist/src/core/types.d.ts.map +1 -0
  102. package/dist/src/core/types.js +2 -0
  103. package/dist/src/core/types.js.map +1 -0
  104. package/dist/src/integrations/linear/sync-manager.d.ts +76 -0
  105. package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -0
  106. package/dist/src/integrations/linear/sync-manager.js +223 -0
  107. package/dist/src/integrations/linear/sync-manager.js.map +1 -0
  108. package/dist/src/integrations/mcp/server.d.ts +8 -0
  109. package/dist/src/integrations/mcp/server.d.ts.map +1 -1
  110. package/dist/src/integrations/mcp/server.js +369 -17
  111. package/dist/src/integrations/mcp/server.js.map +1 -1
  112. package/dist/src/integrations/mcp/trace-test.d.ts +5 -0
  113. package/dist/src/integrations/mcp/trace-test.d.ts.map +1 -0
  114. package/dist/src/integrations/mcp/trace-test.js +54 -0
  115. package/dist/src/integrations/mcp/trace-test.js.map +1 -0
  116. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +48 -0
  117. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +1 -0
  118. package/dist/src/integrations/pg-aiguide/embedding-provider.js +190 -0
  119. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +1 -0
  120. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +34 -0
  121. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +1 -0
  122. package/dist/src/integrations/pg-aiguide/semantic-search.js +154 -0
  123. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +1 -0
  124. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +44 -0
  125. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +1 -0
  126. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +215 -0
  127. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +1 -0
  128. package/dist/src/models/user.model.d.ts +55 -0
  129. package/dist/src/models/user.model.d.ts.map +1 -0
  130. package/dist/src/models/user.model.js +263 -0
  131. package/dist/src/models/user.model.js.map +1 -0
  132. package/dist/src/servers/production/auth-middleware.d.ts +7 -0
  133. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -1
  134. package/dist/src/servers/production/auth-middleware.js +201 -26
  135. package/dist/src/servers/production/auth-middleware.js.map +1 -1
  136. package/dist/src/servers/railway/index.js.map +1 -1
  137. package/dist/src/services/config-service.d.ts +1 -1
  138. package/dist/src/services/config-service.d.ts.map +1 -1
  139. package/dist/src/services/config-service.js.map +1 -1
  140. package/dist/src/types/task.d.ts +11 -1
  141. package/dist/src/types/task.d.ts.map +1 -1
  142. package/dist/src/utils/logger.d.ts +4 -4
  143. package/dist/src/utils/logger.d.ts.map +1 -1
  144. package/dist/src/utils/logger.js.map +1 -1
  145. package/package.json +14 -8
  146. package/dist/attention-scoring/src/attention-tracker.d.ts +0 -79
  147. package/dist/attention-scoring/src/attention-tracker.d.ts.map +0 -1
  148. package/dist/attention-scoring/src/attention-tracker.js +0 -488
  149. package/dist/attention-scoring/src/attention-tracker.js.map +0 -1
  150. package/dist/attention-scoring/src/mcp-integration.d.ts +0 -56
  151. package/dist/attention-scoring/src/mcp-integration.d.ts.map +0 -1
  152. package/dist/attention-scoring/src/mcp-integration.js +0 -369
  153. package/dist/attention-scoring/src/mcp-integration.js.map +0 -1
  154. package/dist/index.js +0 -382
  155. package/dist/p2p-sync/src/p2p-sync.d.ts +0 -81
  156. package/dist/p2p-sync/src/p2p-sync.d.ts.map +0 -1
  157. package/dist/p2p-sync/src/p2p-sync.js +0 -457
  158. package/dist/p2p-sync/src/p2p-sync.js.map +0 -1
  159. package/dist/p2p-sync/src/team-context-sync.d.ts +0 -99
  160. package/dist/p2p-sync/src/team-context-sync.d.ts.map +0 -1
  161. package/dist/p2p-sync/src/team-context-sync.js +0 -491
  162. package/dist/p2p-sync/src/team-context-sync.js.map +0 -1
  163. package/dist/scripts/merge-linear-duplicates.d.ts +0 -7
  164. package/dist/scripts/merge-linear-duplicates.d.ts.map +0 -1
  165. package/dist/scripts/merge-linear-duplicates.js +0 -126
  166. package/dist/scripts/merge-linear-duplicates.js.map +0 -1
  167. package/dist/src/analytics/api/analytics-api.d.ts +0 -24
  168. package/dist/src/analytics/api/analytics-api.d.ts.map +0 -1
  169. package/dist/src/analytics/api/analytics-api.js +0 -279
  170. package/dist/src/analytics/api/analytics-api.js.map +0 -1
  171. package/dist/src/analytics/core/analytics-service.d.ts +0 -23
  172. package/dist/src/analytics/core/analytics-service.d.ts.map +0 -1
  173. package/dist/src/analytics/core/analytics-service.js +0 -160
  174. package/dist/src/analytics/core/analytics-service.js.map +0 -1
  175. package/dist/src/analytics/index.d.ts +0 -12
  176. package/dist/src/analytics/index.d.ts.map +0 -1
  177. package/dist/src/analytics/index.js +0 -11
  178. package/dist/src/analytics/index.js.map +0 -1
  179. package/dist/src/analytics/queries/metrics-queries.d.ts +0 -11
  180. package/dist/src/analytics/queries/metrics-queries.d.ts.map +0 -1
  181. package/dist/src/analytics/queries/metrics-queries.js +0 -179
  182. package/dist/src/analytics/queries/metrics-queries.js.map +0 -1
  183. package/dist/src/analytics/types/metrics.d.ts +0 -60
  184. package/dist/src/analytics/types/metrics.d.ts.map +0 -1
  185. package/dist/src/analytics/types/metrics.js +0 -2
  186. package/dist/src/analytics/types/metrics.js.map +0 -1
  187. package/dist/src/beads/beads-task-store.d.ts +0 -117
  188. package/dist/src/beads/beads-task-store.d.ts.map +0 -1
  189. package/dist/src/beads/beads-task-store.js +0 -318
  190. package/dist/src/beads/beads-task-store.js.map +0 -1
  191. package/dist/src/beads/task-aware-context.d.ts +0 -103
  192. package/dist/src/beads/task-aware-context.d.ts.map +0 -1
  193. package/dist/src/beads/task-aware-context.js +0 -395
  194. package/dist/src/beads/task-aware-context.js.map +0 -1
  195. package/dist/src/beads-task-store.d.ts +0 -117
  196. package/dist/src/beads-task-store.d.ts.map +0 -1
  197. package/dist/src/beads-task-store.js +0 -318
  198. package/dist/src/beads-task-store.js.map +0 -1
  199. package/dist/src/cli/__tests__/index.test.d.ts +0 -5
  200. package/dist/src/cli/__tests__/index.test.d.ts.map +0 -1
  201. package/dist/src/cli/__tests__/index.test.js +0 -726
  202. package/dist/src/cli/__tests__/index.test.js.map +0 -1
  203. package/dist/src/cli/analytics-viewer.d.ts +0 -3
  204. package/dist/src/cli/analytics-viewer.d.ts.map +0 -1
  205. package/dist/src/cli/analytics-viewer.js +0 -89
  206. package/dist/src/cli/analytics-viewer.js.map +0 -1
  207. package/dist/src/cli/cli.d.ts +0 -7
  208. package/dist/src/cli/cli.d.ts.map +0 -1
  209. package/dist/src/cli/cli.js +0 -704
  210. package/dist/src/cli/cli.js.map +0 -1
  211. package/dist/src/cli/project-commands.d.ts +0 -8
  212. package/dist/src/cli/project-commands.d.ts.map +0 -1
  213. package/dist/src/cli/project-commands.js +0 -212
  214. package/dist/src/cli/project-commands.js.map +0 -1
  215. package/dist/src/cli.d.ts +0 -7
  216. package/dist/src/cli.d.ts.map +0 -1
  217. package/dist/src/cli.js +0 -73
  218. package/dist/src/cli.js.map +0 -1
  219. package/dist/src/core/context/__tests__/frame-manager.test.d.ts +0 -5
  220. package/dist/src/core/context/__tests__/frame-manager.test.d.ts.map +0 -1
  221. package/dist/src/core/context/__tests__/frame-manager.test.js +0 -892
  222. package/dist/src/core/context/__tests__/frame-manager.test.js.map +0 -1
  223. package/dist/src/core/error-handler.d.ts +0 -46
  224. package/dist/src/core/error-handler.d.ts.map +0 -1
  225. package/dist/src/core/error-handler.js +0 -212
  226. package/dist/src/core/error-handler.js.map +0 -1
  227. package/dist/src/core/errors/__tests__/error-handling.test.d.ts +0 -5
  228. package/dist/src/core/errors/__tests__/error-handling.test.d.ts.map +0 -1
  229. package/dist/src/core/errors/__tests__/error-handling.test.js +0 -239
  230. package/dist/src/core/errors/__tests__/error-handling.test.js.map +0 -1
  231. package/dist/src/core/frame-manager.d.ts +0 -106
  232. package/dist/src/core/frame-manager.d.ts.map +0 -1
  233. package/dist/src/core/frame-manager.js +0 -387
  234. package/dist/src/core/frame-manager.js.map +0 -1
  235. package/dist/src/core/logger.d.ts +0 -24
  236. package/dist/src/core/logger.d.ts.map +0 -1
  237. package/dist/src/core/logger.js +0 -121
  238. package/dist/src/core/logger.js.map +0 -1
  239. package/dist/src/core/logger.test.d.ts +0 -2
  240. package/dist/src/core/logger.test.d.ts.map +0 -1
  241. package/dist/src/core/logger.test.js +0 -31
  242. package/dist/src/core/logger.test.js.map +0 -1
  243. package/dist/src/core/progress-tracker.d.ts +0 -95
  244. package/dist/src/core/progress-tracker.d.ts.map +0 -1
  245. package/dist/src/core/progress-tracker.js +0 -178
  246. package/dist/src/core/progress-tracker.js.map +0 -1
  247. package/dist/src/core/project-manager.d.ts +0 -130
  248. package/dist/src/core/project-manager.d.ts.map +0 -1
  249. package/dist/src/core/project-manager.js +0 -582
  250. package/dist/src/core/project-manager.js.map +0 -1
  251. package/dist/src/core/update-checker.d.ts +0 -38
  252. package/dist/src/core/update-checker.d.ts.map +0 -1
  253. package/dist/src/core/update-checker.js +0 -156
  254. package/dist/src/core/update-checker.js.map +0 -1
  255. package/dist/src/error-handler.d.ts +0 -42
  256. package/dist/src/error-handler.d.ts.map +0 -1
  257. package/dist/src/error-handler.js +0 -155
  258. package/dist/src/error-handler.js.map +0 -1
  259. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts +0 -5
  260. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts.map +0 -1
  261. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js +0 -712
  262. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -1
  263. package/dist/src/frame-manager.d.ts +0 -106
  264. package/dist/src/frame-manager.d.ts.map +0 -1
  265. package/dist/src/frame-manager.js +0 -361
  266. package/dist/src/frame-manager.js.map +0 -1
  267. package/dist/src/integrations/browser-mcp.d.ts +0 -94
  268. package/dist/src/integrations/browser-mcp.d.ts.map +0 -1
  269. package/dist/src/integrations/browser-mcp.js +0 -431
  270. package/dist/src/integrations/browser-mcp.js.map +0 -1
  271. package/dist/src/integrations/linear/__tests__/auth.test.d.ts +0 -5
  272. package/dist/src/integrations/linear/__tests__/auth.test.d.ts.map +0 -1
  273. package/dist/src/integrations/linear/__tests__/auth.test.js +0 -517
  274. package/dist/src/integrations/linear/__tests__/auth.test.js.map +0 -1
  275. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts +0 -5
  276. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts.map +0 -1
  277. package/dist/src/integrations/linear/__tests__/sync-service.test.js +0 -700
  278. package/dist/src/integrations/linear/__tests__/sync-service.test.js.map +0 -1
  279. package/dist/src/integrations/linear-auth.d.ts +0 -99
  280. package/dist/src/integrations/linear-auth.d.ts.map +0 -1
  281. package/dist/src/integrations/linear-auth.js +0 -319
  282. package/dist/src/integrations/linear-auth.js.map +0 -1
  283. package/dist/src/integrations/linear-auto-sync.d.ts +0 -77
  284. package/dist/src/integrations/linear-auto-sync.d.ts.map +0 -1
  285. package/dist/src/integrations/linear-auto-sync.js +0 -268
  286. package/dist/src/integrations/linear-auto-sync.js.map +0 -1
  287. package/dist/src/integrations/linear-client.d.ts +0 -86
  288. package/dist/src/integrations/linear-client.d.ts.map +0 -1
  289. package/dist/src/integrations/linear-client.js +0 -277
  290. package/dist/src/integrations/linear-client.js.map +0 -1
  291. package/dist/src/integrations/linear-config.d.ts +0 -51
  292. package/dist/src/integrations/linear-config.d.ts.map +0 -1
  293. package/dist/src/integrations/linear-config.js +0 -103
  294. package/dist/src/integrations/linear-config.js.map +0 -1
  295. package/dist/src/integrations/linear-sync.d.ts +0 -97
  296. package/dist/src/integrations/linear-sync.d.ts.map +0 -1
  297. package/dist/src/integrations/linear-sync.js +0 -391
  298. package/dist/src/integrations/linear-sync.js.map +0 -1
  299. package/dist/src/integrations/mcp/__tests__/server.test.d.ts +0 -5
  300. package/dist/src/integrations/mcp/__tests__/server.test.d.ts.map +0 -1
  301. package/dist/src/integrations/mcp/__tests__/server.test.js +0 -790
  302. package/dist/src/integrations/mcp/__tests__/server.test.js.map +0 -1
  303. package/dist/src/logger.d.ts +0 -24
  304. package/dist/src/logger.d.ts.map +0 -1
  305. package/dist/src/logger.js +0 -120
  306. package/dist/src/logger.js.map +0 -1
  307. package/dist/src/mcp/mcp-server.d.ts +0 -40
  308. package/dist/src/mcp/mcp-server.d.ts.map +0 -1
  309. package/dist/src/mcp/mcp-server.js +0 -828
  310. package/dist/src/mcp/mcp-server.js.map +0 -1
  311. package/dist/src/mcp-server.d.ts +0 -32
  312. package/dist/src/mcp-server.d.ts.map +0 -1
  313. package/dist/src/mcp-server.js +0 -441
  314. package/dist/src/mcp-server.js.map +0 -1
  315. package/dist/src/pebbles/pebbles-task-store.d.ts +0 -117
  316. package/dist/src/pebbles/pebbles-task-store.d.ts.map +0 -1
  317. package/dist/src/pebbles/pebbles-task-store.js +0 -335
  318. package/dist/src/pebbles/pebbles-task-store.js.map +0 -1
  319. package/dist/src/pebbles/task-aware-context.d.ts +0 -103
  320. package/dist/src/pebbles/task-aware-context.d.ts.map +0 -1
  321. package/dist/src/pebbles/task-aware-context.js +0 -412
  322. package/dist/src/pebbles/task-aware-context.js.map +0 -1
  323. package/dist/src/railway/index.d.ts +0 -7
  324. package/dist/src/railway/index.d.ts.map +0 -1
  325. package/dist/src/railway/index.js +0 -401
  326. package/dist/src/railway/index.js.map +0 -1
  327. package/dist/src/runway/auth/auth-middleware.d.ts +0 -66
  328. package/dist/src/runway/auth/auth-middleware.d.ts.map +0 -1
  329. package/dist/src/runway/auth/auth-middleware.js +0 -337
  330. package/dist/src/runway/auth/auth-middleware.js.map +0 -1
  331. package/dist/src/runway/server/runway-mcp-server.d.ts +0 -46
  332. package/dist/src/runway/server/runway-mcp-server.d.ts.map +0 -1
  333. package/dist/src/runway/server/runway-mcp-server.js +0 -601
  334. package/dist/src/runway/server/runway-mcp-server.js.map +0 -1
  335. package/dist/src/runway.bak/auth/auth-middleware.d.ts +0 -66
  336. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +0 -1
  337. package/dist/src/runway.bak/auth/auth-middleware.js +0 -337
  338. package/dist/src/runway.bak/auth/auth-middleware.js.map +0 -1
  339. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +0 -46
  340. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +0 -1
  341. package/dist/src/runway.bak/server/runway-mcp-server.js +0 -601
  342. package/dist/src/runway.bak/server/runway-mcp-server.js.map +0 -1
  343. package/dist/src/task-aware-context.d.ts +0 -103
  344. package/dist/src/task-aware-context.d.ts.map +0 -1
  345. package/dist/src/task-aware-context.js +0 -395
  346. package/dist/src/task-aware-context.js.map +0 -1
@@ -0,0 +1,215 @@
1
+ import { logger } from '../../core/monitoring/logger.js';
2
+ export class TimescaleAnalytics {
3
+ pool;
4
+ config;
5
+ constructor(config) {
6
+ this.pool = config.pool;
7
+ this.config = config;
8
+ }
9
+ async createContinuousAggregate(name, interval, columns) {
10
+ const aggregates = columns
11
+ .map((col) => `
12
+ AVG(${col}) as avg_${col},
13
+ MIN(${col}) as min_${col},
14
+ MAX(${col}) as max_${col},
15
+ SUM(${col}) as sum_${col}
16
+ `)
17
+ .join(',\n ');
18
+ const query = `
19
+ CREATE MATERIALIZED VIEW IF NOT EXISTS ${name}
20
+ WITH (timescaledb.continuous) AS
21
+ SELECT
22
+ time_bucket('${interval}', ${this.config.timeColumn}) as bucket,
23
+ COUNT(*) as count,
24
+ ${aggregates}
25
+ FROM ${this.config.tableName}
26
+ GROUP BY bucket
27
+ WITH NO DATA
28
+ `;
29
+ await this.pool.query(query);
30
+ // Add refresh policy
31
+ await this.pool.query(`
32
+ SELECT add_continuous_aggregate_policy('${name}',
33
+ start_offset => INTERVAL '1 month',
34
+ end_offset => INTERVAL '1 hour',
35
+ schedule_interval => INTERVAL '1 hour',
36
+ if_not_exists => TRUE
37
+ )
38
+ `);
39
+ logger.info(`Created continuous aggregate: ${name}`);
40
+ }
41
+ async getTimeSeries(startTime, endTime, interval, columns) {
42
+ const selectedColumns = columns || this.config.valueColumns;
43
+ const aggregates = selectedColumns
44
+ .map((col) => `
45
+ AVG(${col})::float as avg_${col},
46
+ MIN(${col})::float as min_${col},
47
+ MAX(${col})::float as max_${col},
48
+ SUM(${col})::float as sum_${col}
49
+ `)
50
+ .join(',\n ');
51
+ const query = `
52
+ SELECT
53
+ time_bucket($1, ${this.config.timeColumn}) as period,
54
+ COUNT(*)::int as count,
55
+ ${aggregates}
56
+ FROM ${this.config.tableName}
57
+ WHERE ${this.config.timeColumn} >= $2
58
+ AND ${this.config.timeColumn} <= $3
59
+ GROUP BY period
60
+ ORDER BY period
61
+ `;
62
+ const result = await this.pool.query(query, [interval, startTime, endTime]);
63
+ return result.rows.map((row) => {
64
+ const avg = {};
65
+ const min = {};
66
+ const max = {};
67
+ const sum = {};
68
+ selectedColumns.forEach((col) => {
69
+ avg[col] = row[`avg_${col}`];
70
+ min[col] = row[`min_${col}`];
71
+ max[col] = row[`max_${col}`];
72
+ sum[col] = row[`sum_${col}`];
73
+ });
74
+ return {
75
+ period: row.period,
76
+ count: row.count,
77
+ avg,
78
+ min,
79
+ max,
80
+ sum,
81
+ };
82
+ });
83
+ }
84
+ async detectAnomalies(column, sensitivity = 2.5, lookback = '7 days') {
85
+ const query = `
86
+ WITH stats AS (
87
+ SELECT
88
+ AVG(${column})::float as mean,
89
+ STDDEV(${column})::float as stddev
90
+ FROM ${this.config.tableName}
91
+ WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '${lookback}'
92
+ ),
93
+ anomalies AS (
94
+ SELECT
95
+ ${this.config.timeColumn} as timestamp,
96
+ ${column} as value,
97
+ metadata,
98
+ ABS(${column} - stats.mean) / NULLIF(stats.stddev, 0) as z_score
99
+ FROM ${this.config.tableName}, stats
100
+ WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '${lookback}'
101
+ AND ABS(${column} - stats.mean) / NULLIF(stats.stddev, 0) > $1
102
+ )
103
+ SELECT * FROM anomalies
104
+ ORDER BY z_score DESC
105
+ `;
106
+ const result = await this.pool.query(query, [sensitivity]);
107
+ return result.rows.map((row) => ({
108
+ timestamp: row.timestamp,
109
+ values: { [column]: row.value, z_score: row.z_score },
110
+ metadata: row.metadata,
111
+ }));
112
+ }
113
+ async forecast(column, periods, method = 'linear') {
114
+ // Simple linear regression forecast
115
+ if (method === 'linear') {
116
+ const query = `
117
+ WITH regression AS (
118
+ SELECT
119
+ regr_slope(${column}, EXTRACT(EPOCH FROM ${this.config.timeColumn}))::float as slope,
120
+ regr_intercept(${column}, EXTRACT(EPOCH FROM ${this.config.timeColumn}))::float as intercept,
121
+ MAX(${this.config.timeColumn}) as last_time,
122
+ EXTRACT(EPOCH FROM MAX(${this.config.timeColumn})) as last_epoch
123
+ FROM ${this.config.tableName}
124
+ WHERE ${this.config.timeColumn} >= NOW() - INTERVAL '30 days'
125
+ ),
126
+ forecast_times AS (
127
+ SELECT
128
+ last_time + (INTERVAL '1 hour' * generate_series(1, $1)) as forecast_time
129
+ FROM regression
130
+ )
131
+ SELECT
132
+ forecast_time as timestamp,
133
+ (intercept + slope * EXTRACT(EPOCH FROM forecast_time))::float as forecast_value
134
+ FROM forecast_times, regression
135
+ `;
136
+ const result = await this.pool.query(query, [periods]);
137
+ return result.rows.map((row) => ({
138
+ timestamp: row.timestamp,
139
+ values: { [column]: row.forecast_value, forecast: true },
140
+ }));
141
+ }
142
+ // Seasonal decomposition would require more complex logic
143
+ logger.warn('Seasonal forecasting not yet implemented');
144
+ return [];
145
+ }
146
+ async getRetentionPolicy() {
147
+ const query = `
148
+ SELECT
149
+ hypertable_name as table_name,
150
+ drop_after::text as retention_period,
151
+ schedule_interval IS NOT NULL as is_enabled
152
+ FROM timescaledb_information.retention_policies
153
+ WHERE hypertable_name = $1
154
+ `;
155
+ const result = await this.pool.query(query, [this.config.tableName]);
156
+ return result.rows.map((row) => ({
157
+ tableName: row.table_name,
158
+ retentionPeriod: row.retention_period,
159
+ isEnabled: row.is_enabled,
160
+ }));
161
+ }
162
+ async setRetentionPolicy(retentionPeriod) {
163
+ const query = `
164
+ SELECT add_retention_policy($1,
165
+ drop_after => INTERVAL '${retentionPeriod}',
166
+ if_not_exists => TRUE
167
+ )
168
+ `;
169
+ await this.pool.query(query, [this.config.tableName]);
170
+ logger.info(`Set retention policy for ${this.config.tableName}: ${retentionPeriod}`);
171
+ }
172
+ async compress(olderThan) {
173
+ // Enable compression
174
+ await this.pool.query(`
175
+ ALTER TABLE ${this.config.tableName}
176
+ SET (timescaledb.compress,
177
+ timescaledb.compress_segmentby = 'type',
178
+ timescaledb.compress_orderby = '${this.config.timeColumn} DESC')
179
+ `);
180
+ // Add compression policy
181
+ await this.pool.query(`
182
+ SELECT add_compression_policy($1,
183
+ compress_after => INTERVAL '${olderThan}',
184
+ if_not_exists => TRUE
185
+ )
186
+ `, [this.config.tableName]);
187
+ logger.info(`Enabled compression for ${this.config.tableName} older than ${olderThan}`);
188
+ }
189
+ async getChunkStats() {
190
+ const query = `
191
+ SELECT
192
+ COUNT(*) as total_chunks,
193
+ COUNT(*) FILTER (WHERE is_compressed) as compressed_chunks,
194
+ pg_size_pretty(SUM(total_bytes)) as total_size,
195
+ pg_size_pretty(SUM(total_bytes) FILTER (WHERE is_compressed)) as compressed_size,
196
+ CASE
197
+ WHEN SUM(uncompressed_total_bytes) > 0
198
+ THEN (1 - SUM(total_bytes)::float / SUM(uncompressed_total_bytes))::numeric(4,2)
199
+ ELSE 0
200
+ END as compression_ratio
201
+ FROM timescaledb_information.chunks
202
+ WHERE hypertable_name = $1
203
+ `;
204
+ const result = await this.pool.query(query, [this.config.tableName]);
205
+ const row = result.rows[0];
206
+ return {
207
+ totalChunks: parseInt(row.total_chunks) || 0,
208
+ compressedChunks: parseInt(row.compressed_chunks) || 0,
209
+ totalSize: row.total_size || '0 bytes',
210
+ compressedSize: row.compressed_size || '0 bytes',
211
+ compressionRatio: parseFloat(row.compression_ratio) || 0,
212
+ };
213
+ }
214
+ }
215
+ //# sourceMappingURL=timescale-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timescale-analytics.js","sourceRoot":"","sources":["../../../../src/integrations/pg-aiguide/timescale-analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import BetterSqlite3 from 'better-sqlite3';
2
+ type Database = BetterSqlite3.Database;
3
+ export interface User {
4
+ id: string;
5
+ sub: string;
6
+ email: string;
7
+ name?: string;
8
+ avatar?: string;
9
+ tier: 'free' | 'pro' | 'enterprise';
10
+ permissions: string[];
11
+ organizations: Array<{
12
+ id: string;
13
+ name: string;
14
+ role: string;
15
+ }>;
16
+ apiKeys?: string[];
17
+ createdAt: Date;
18
+ updatedAt: Date;
19
+ lastLoginAt?: Date;
20
+ metadata?: Record<string, any>;
21
+ }
22
+ export interface UserSession {
23
+ id: string;
24
+ userId: string;
25
+ token: string;
26
+ expiresAt: Date;
27
+ createdAt: Date;
28
+ metadata?: Record<string, any>;
29
+ }
30
+ export declare class UserModel {
31
+ private db;
32
+ constructor(db: Database);
33
+ private initialize;
34
+ createUser(userData: Partial<User>): Promise<User>;
35
+ findUserBySub(sub: string): Promise<User | null>;
36
+ findUserByEmail(email: string): Promise<User | null>;
37
+ findUserById(id: string): Promise<User | null>;
38
+ updateUser(id: string, updates: Partial<User>): Promise<User | null>;
39
+ deleteUser(id: string): Promise<boolean>;
40
+ updateLastLogin(id: string): Promise<void>;
41
+ createSession(userId: string, expiresIn?: number): Promise<UserSession>;
42
+ findSessionByToken(token: string): Promise<UserSession | null>;
43
+ validateSession(token: string): Promise<User | null>;
44
+ deleteSession(id: string): Promise<boolean>;
45
+ deleteExpiredSessions(): Promise<number>;
46
+ generateApiKey(userId: string): Promise<string>;
47
+ validateApiKey(apiKey: string): Promise<User | null>;
48
+ private rowToUser;
49
+ private rowToSession;
50
+ private generateSessionToken;
51
+ private generateToken;
52
+ }
53
+ export declare function getUserModel(db: BetterSqlite3.Database): UserModel;
54
+ export {};
55
+ //# sourceMappingURL=user.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.model.d.ts","sourceRoot":"","sources":["../../../src/models/user.model.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAK3C,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAEvC,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,KAAK,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAW;gBAET,EAAE,EAAE,QAAQ;IAKxB,OAAO,CAAC,UAAU;IA6CZ,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0ClD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAWhD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAWpD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAW9C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAsCpE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYxC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;IA4BtE,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAW9D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAiBpD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAcxC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB/C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAuB1D,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,aAAa;CAStB;AAKD,wBAAgB,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC,QAAQ,GAAG,SAAS,CAKlE"}
@@ -0,0 +1,263 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import * as bcrypt from 'bcryptjs';
3
+ import { logger } from '../core/monitoring/logger.js';
4
+ export class UserModel {
5
+ db;
6
+ constructor(db) {
7
+ this.db = db;
8
+ this.initialize();
9
+ }
10
+ initialize() {
11
+ // Create users table
12
+ this.db.exec(`
13
+ CREATE TABLE IF NOT EXISTS users (
14
+ id TEXT PRIMARY KEY,
15
+ sub TEXT UNIQUE NOT NULL,
16
+ email TEXT UNIQUE NOT NULL,
17
+ name TEXT,
18
+ avatar TEXT,
19
+ tier TEXT DEFAULT 'free',
20
+ permissions TEXT DEFAULT '["read", "write"]',
21
+ organizations TEXT DEFAULT '[]',
22
+ api_keys TEXT DEFAULT '[]',
23
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
24
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
25
+ last_login_at DATETIME,
26
+ metadata TEXT DEFAULT '{}'
27
+ )
28
+ `);
29
+ // Create sessions table
30
+ this.db.exec(`
31
+ CREATE TABLE IF NOT EXISTS user_sessions (
32
+ id TEXT PRIMARY KEY,
33
+ user_id TEXT NOT NULL,
34
+ token TEXT UNIQUE NOT NULL,
35
+ expires_at DATETIME NOT NULL,
36
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
37
+ metadata TEXT DEFAULT '{}',
38
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
39
+ )
40
+ `);
41
+ // Create indexes
42
+ this.db.exec(`
43
+ CREATE INDEX IF NOT EXISTS idx_users_sub ON users(sub);
44
+ CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
45
+ CREATE INDEX IF NOT EXISTS idx_sessions_token ON user_sessions(token);
46
+ CREATE INDEX IF NOT EXISTS idx_sessions_user ON user_sessions(user_id);
47
+ CREATE INDEX IF NOT EXISTS idx_sessions_expires ON user_sessions(expires_at);
48
+ `);
49
+ logger.info('User database schema initialized');
50
+ }
51
+ async createUser(userData) {
52
+ const user = {
53
+ id: userData.id || uuidv4(),
54
+ sub: userData.sub,
55
+ email: userData.email,
56
+ name: userData.name,
57
+ avatar: userData.avatar,
58
+ tier: userData.tier || 'free',
59
+ permissions: userData.permissions || ['read', 'write'],
60
+ organizations: userData.organizations || [],
61
+ apiKeys: userData.apiKeys || [],
62
+ createdAt: new Date(),
63
+ updatedAt: new Date(),
64
+ metadata: userData.metadata || {},
65
+ };
66
+ const stmt = this.db.prepare(`
67
+ INSERT INTO users (
68
+ id, sub, email, name, avatar, tier, permissions,
69
+ organizations, api_keys, created_at, updated_at, metadata
70
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
71
+ `);
72
+ stmt.run(user.id, user.sub, user.email, user.name, user.avatar, user.tier, JSON.stringify(user.permissions), JSON.stringify(user.organizations), JSON.stringify(user.apiKeys), user.createdAt.toISOString(), user.updatedAt.toISOString(), JSON.stringify(user.metadata));
73
+ logger.info('User created', { userId: user.id, email: user.email });
74
+ return user;
75
+ }
76
+ async findUserBySub(sub) {
77
+ const stmt = this.db.prepare('SELECT * FROM users WHERE sub = ?');
78
+ const row = stmt.get(sub);
79
+ if (!row) {
80
+ return null;
81
+ }
82
+ return this.rowToUser(row);
83
+ }
84
+ async findUserByEmail(email) {
85
+ const stmt = this.db.prepare('SELECT * FROM users WHERE email = ?');
86
+ const row = stmt.get(email);
87
+ if (!row) {
88
+ return null;
89
+ }
90
+ return this.rowToUser(row);
91
+ }
92
+ async findUserById(id) {
93
+ const stmt = this.db.prepare('SELECT * FROM users WHERE id = ?');
94
+ const row = stmt.get(id);
95
+ if (!row) {
96
+ return null;
97
+ }
98
+ return this.rowToUser(row);
99
+ }
100
+ async updateUser(id, updates) {
101
+ const user = await this.findUserById(id);
102
+ if (!user) {
103
+ return null;
104
+ }
105
+ const updatedUser = {
106
+ ...user,
107
+ ...updates,
108
+ updatedAt: new Date(),
109
+ };
110
+ const stmt = this.db.prepare(`
111
+ UPDATE users SET
112
+ email = ?, name = ?, avatar = ?, tier = ?,
113
+ permissions = ?, organizations = ?, api_keys = ?,
114
+ updated_at = ?, last_login_at = ?, metadata = ?
115
+ WHERE id = ?
116
+ `);
117
+ stmt.run(updatedUser.email, updatedUser.name, updatedUser.avatar, updatedUser.tier, JSON.stringify(updatedUser.permissions), JSON.stringify(updatedUser.organizations), JSON.stringify(updatedUser.apiKeys), updatedUser.updatedAt.toISOString(), updatedUser.lastLoginAt?.toISOString(), JSON.stringify(updatedUser.metadata), id);
118
+ logger.info('User updated', { userId: id });
119
+ return updatedUser;
120
+ }
121
+ async deleteUser(id) {
122
+ const stmt = this.db.prepare('DELETE FROM users WHERE id = ?');
123
+ const result = stmt.run(id);
124
+ if (result.changes > 0) {
125
+ logger.info('User deleted', { userId: id });
126
+ return true;
127
+ }
128
+ return false;
129
+ }
130
+ async updateLastLogin(id) {
131
+ const stmt = this.db.prepare('UPDATE users SET last_login_at = ? WHERE id = ?');
132
+ stmt.run(new Date().toISOString(), id);
133
+ }
134
+ // Session management
135
+ async createSession(userId, expiresIn = 86400) {
136
+ const session = {
137
+ id: uuidv4(),
138
+ userId,
139
+ token: this.generateSessionToken(),
140
+ expiresAt: new Date(Date.now() + expiresIn * 1000),
141
+ createdAt: new Date(),
142
+ metadata: {},
143
+ };
144
+ const stmt = this.db.prepare(`
145
+ INSERT INTO user_sessions (id, user_id, token, expires_at, created_at, metadata)
146
+ VALUES (?, ?, ?, ?, ?, ?)
147
+ `);
148
+ stmt.run(session.id, session.userId, session.token, session.expiresAt.toISOString(), session.createdAt.toISOString(), JSON.stringify(session.metadata));
149
+ logger.info('Session created', { sessionId: session.id, userId });
150
+ return session;
151
+ }
152
+ async findSessionByToken(token) {
153
+ const stmt = this.db.prepare('SELECT * FROM user_sessions WHERE token = ?');
154
+ const row = stmt.get(token);
155
+ if (!row) {
156
+ return null;
157
+ }
158
+ return this.rowToSession(row);
159
+ }
160
+ async validateSession(token) {
161
+ const session = await this.findSessionByToken(token);
162
+ if (!session) {
163
+ return null;
164
+ }
165
+ // Check if session is expired
166
+ if (new Date(session.expiresAt) < new Date()) {
167
+ await this.deleteSession(session.id);
168
+ return null;
169
+ }
170
+ // Get the user
171
+ return await this.findUserById(session.userId);
172
+ }
173
+ async deleteSession(id) {
174
+ const stmt = this.db.prepare('DELETE FROM user_sessions WHERE id = ?');
175
+ const result = stmt.run(id);
176
+ return result.changes > 0;
177
+ }
178
+ async deleteExpiredSessions() {
179
+ const stmt = this.db.prepare('DELETE FROM user_sessions WHERE expires_at < ?');
180
+ const result = stmt.run(new Date().toISOString());
181
+ if (result.changes > 0) {
182
+ logger.info('Expired sessions deleted', { count: result.changes });
183
+ }
184
+ return result.changes;
185
+ }
186
+ // API Key management
187
+ async generateApiKey(userId) {
188
+ const apiKey = `sk-${this.generateToken(32)}`;
189
+ const user = await this.findUserById(userId);
190
+ if (!user) {
191
+ throw new Error('User not found');
192
+ }
193
+ const hashedKey = await bcrypt.hash(apiKey, 10);
194
+ const apiKeys = [...(user.apiKeys || []), hashedKey];
195
+ await this.updateUser(userId, { apiKeys });
196
+ logger.info('API key generated', { userId });
197
+ return apiKey;
198
+ }
199
+ async validateApiKey(apiKey) {
200
+ // This is inefficient for large scale, but works for small deployments
201
+ // For production, consider a separate api_keys table
202
+ const stmt = this.db.prepare('SELECT * FROM users WHERE api_keys IS NOT NULL');
203
+ const rows = stmt.all();
204
+ for (const row of rows) {
205
+ const user = this.rowToUser(row);
206
+ const apiKeys = user.apiKeys || [];
207
+ for (const hashedKey of apiKeys) {
208
+ if (await bcrypt.compare(apiKey, hashedKey)) {
209
+ return user;
210
+ }
211
+ }
212
+ }
213
+ return null;
214
+ }
215
+ // Helper methods
216
+ rowToUser(row) {
217
+ return {
218
+ id: row.id,
219
+ sub: row.sub,
220
+ email: row.email,
221
+ name: row.name,
222
+ avatar: row.avatar,
223
+ tier: row.tier,
224
+ permissions: JSON.parse(row.permissions),
225
+ organizations: JSON.parse(row.organizations),
226
+ apiKeys: JSON.parse(row.api_keys || '[]'),
227
+ createdAt: new Date(row.created_at),
228
+ updatedAt: new Date(row.updated_at),
229
+ lastLoginAt: row.last_login_at ? new Date(row.last_login_at) : undefined,
230
+ metadata: JSON.parse(row.metadata || '{}'),
231
+ };
232
+ }
233
+ rowToSession(row) {
234
+ return {
235
+ id: row.id,
236
+ userId: row.user_id,
237
+ token: row.token,
238
+ expiresAt: new Date(row.expires_at),
239
+ createdAt: new Date(row.created_at),
240
+ metadata: JSON.parse(row.metadata || '{}'),
241
+ };
242
+ }
243
+ generateSessionToken() {
244
+ return this.generateToken(48);
245
+ }
246
+ generateToken(length) {
247
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
248
+ let token = '';
249
+ for (let i = 0; i < length; i++) {
250
+ token += chars.charAt(Math.floor(Math.random() * chars.length));
251
+ }
252
+ return token;
253
+ }
254
+ }
255
+ // Singleton instance management
256
+ let userModelInstance = null;
257
+ export function getUserModel(db) {
258
+ if (!userModelInstance) {
259
+ userModelInstance = new UserModel(db);
260
+ }
261
+ return userModelInstance;
262
+ }
263
+ //# sourceMappingURL=user.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.model.js","sourceRoot":"","sources":["../../../src/models/user.model.ts"],"names":[],"mappings":"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"}
@@ -25,12 +25,15 @@ export declare class AuthMiddleware {
25
25
  private redis;
26
26
  private rateLimiters;
27
27
  private blacklistedTokens;
28
+ private userModel;
29
+ private db;
28
30
  constructor(config: {
29
31
  auth0Domain: string;
30
32
  auth0Audience: string;
31
33
  redisUrl: string;
32
34
  jwtSecret?: string;
33
35
  bypassAuth?: boolean;
36
+ dbPath?: string;
34
37
  });
35
38
  private initializeRateLimiters;
36
39
  private setupTokenBlacklistSync;
@@ -51,8 +54,12 @@ export declare class AuthMiddleware {
51
54
  * Organization access middleware
52
55
  */
53
56
  requireOrganization: (req: AuthRequest, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
57
+ private extractApiKey;
54
58
  private extractToken;
55
59
  private loadUser;
60
+ private determineTier;
61
+ private determinePermissions;
62
+ private extractOrganizations;
56
63
  private getMockUser;
57
64
  /**
58
65
  * Revoke a token (add to blacklist)
@@ -1 +1 @@
1
- {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../../../src/servers/production/auth-middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAoB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKzE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,qBAAa,cAAc;IAOvB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,iBAAiB,CAA0B;gBAGzC,MAAM,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB;IAeH,OAAO,CAAC,sBAAsB;IAgD9B,OAAO,CAAC,uBAAuB;YAgBjB,aAAa;IAiB3B;;OAEG;IACI,YAAY,GACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,GAAG,CAAC,CA0Ib;IAEF;;OAEG;IACI,qBAAqB,GAC1B,OAAO,MAAM,KACZ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsBzB;IAEF;;OAEG;IACI,iBAAiB,GAAI,YAAY,MAAM,MACpC,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,oDAmB3D;IAEF;;OAEG;IACI,mBAAmB,GACxB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,MAAM,YAAY,oDAmBlB;IAEF,OAAO,CAAC,YAAY;YAUN,QAAQ;IAwBtB,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActD;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
1
+ {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../../../src/servers/production/auth-middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAoB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOzE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,qBAAa,cAAc;IASvB,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,EAAE,CAAyB;gBAGzB,MAAM,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAsBH,OAAO,CAAC,sBAAsB;IAgD9B,OAAO,CAAC,uBAAuB;YAgBjB,aAAa;IAiB3B;;OAEG;IACI,YAAY,GACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,GAAG,CAAC,CAkLb;IAEF;;OAEG;IACI,qBAAqB,GAC1B,OAAO,MAAM,KACZ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsBzB;IAEF;;OAEG;IACI,iBAAiB,GAAI,YAAY,MAAM,MACpC,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,oDAmB3D;IAEF;;OAEG;IACI,mBAAmB,GACxB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,MAAM,YAAY,oDAmBlB;IAEF,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,YAAY;YAaN,QAAQ;IAkEtB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,WAAW;IAsCnB;;OAEG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActD;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}