@graphoria/server 0.1.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 (628) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +10 -0
  3. package/README.md +129 -0
  4. package/cli.ts +105 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/src/ai/agent/agent.d.ts +37 -0
  8. package/dist/src/ai/agent/agent.d.ts.map +1 -0
  9. package/dist/src/ai/agent/index.d.ts +3 -0
  10. package/dist/src/ai/agent/index.d.ts.map +1 -0
  11. package/dist/src/ai/agent/providers/anthropic.d.ts +10 -0
  12. package/dist/src/ai/agent/providers/anthropic.d.ts.map +1 -0
  13. package/dist/src/ai/agent/providers/index.d.ts +8 -0
  14. package/dist/src/ai/agent/providers/index.d.ts.map +1 -0
  15. package/dist/src/ai/agent/providers/ollama.d.ts +11 -0
  16. package/dist/src/ai/agent/providers/ollama.d.ts.map +1 -0
  17. package/dist/src/ai/agent/providers/openai.d.ts +14 -0
  18. package/dist/src/ai/agent/providers/openai.d.ts.map +1 -0
  19. package/dist/src/ai/agent/types.d.ts +51 -0
  20. package/dist/src/ai/agent/types.d.ts.map +1 -0
  21. package/dist/src/ai/ask-field.test.d.ts +2 -0
  22. package/dist/src/ai/ask-field.test.d.ts.map +1 -0
  23. package/dist/src/ai/index.d.ts +7 -0
  24. package/dist/src/ai/index.d.ts.map +1 -0
  25. package/dist/src/ai/mcp/create-server.d.ts +14 -0
  26. package/dist/src/ai/mcp/create-server.d.ts.map +1 -0
  27. package/dist/src/ai/mcp/create-server.test.d.ts +2 -0
  28. package/dist/src/ai/mcp/create-server.test.d.ts.map +1 -0
  29. package/dist/src/ai/mcp/index.d.ts +13 -0
  30. package/dist/src/ai/mcp/index.d.ts.map +1 -0
  31. package/dist/src/ai/mcp/index.test.d.ts +2 -0
  32. package/dist/src/ai/mcp/index.test.d.ts.map +1 -0
  33. package/dist/src/ai/mcp/instructions.d.ts +2 -0
  34. package/dist/src/ai/mcp/instructions.d.ts.map +1 -0
  35. package/dist/src/ai/tools/agent.d.ts +4 -0
  36. package/dist/src/ai/tools/agent.d.ts.map +1 -0
  37. package/dist/src/ai/tools/agent.test.d.ts +2 -0
  38. package/dist/src/ai/tools/agent.test.d.ts.map +1 -0
  39. package/dist/src/ai/tools/core.d.ts +75 -0
  40. package/dist/src/ai/tools/core.d.ts.map +1 -0
  41. package/dist/src/ai/tools/query-data.d.ts +35 -0
  42. package/dist/src/ai/tools/query-data.d.ts.map +1 -0
  43. package/dist/src/analyzeQuery/analyzers/fragmentAnalyzer.d.ts +5 -0
  44. package/dist/src/analyzeQuery/analyzers/fragmentAnalyzer.d.ts.map +1 -0
  45. package/dist/src/analyzeQuery/analyzers/operationAnalyzer.d.ts +6 -0
  46. package/dist/src/analyzeQuery/analyzers/operationAnalyzer.d.ts.map +1 -0
  47. package/dist/src/analyzeQuery/analyzers/selectionAnalyzer.d.ts +6 -0
  48. package/dist/src/analyzeQuery/analyzers/selectionAnalyzer.d.ts.map +1 -0
  49. package/dist/src/analyzeQuery/analyzers/variableAnalyzer.d.ts +4 -0
  50. package/dist/src/analyzeQuery/analyzers/variableAnalyzer.d.ts.map +1 -0
  51. package/dist/src/analyzeQuery/depthLimit.d.ts +16 -0
  52. package/dist/src/analyzeQuery/depthLimit.d.ts.map +1 -0
  53. package/dist/src/analyzeQuery/depthLimit.test.d.ts +2 -0
  54. package/dist/src/analyzeQuery/depthLimit.test.d.ts.map +1 -0
  55. package/dist/src/analyzeQuery/directiveUtils.d.ts +4 -0
  56. package/dist/src/analyzeQuery/directiveUtils.d.ts.map +1 -0
  57. package/dist/src/analyzeQuery/directiveUtils.test.d.ts +2 -0
  58. package/dist/src/analyzeQuery/directiveUtils.test.d.ts.map +1 -0
  59. package/dist/src/analyzeQuery/index.d.ts +5 -0
  60. package/dist/src/analyzeQuery/index.d.ts.map +1 -0
  61. package/dist/src/analyzeQuery/index.test.d.ts +2 -0
  62. package/dist/src/analyzeQuery/index.test.d.ts.map +1 -0
  63. package/dist/src/analyzeQuery/resolveVariables.d.ts +71 -0
  64. package/dist/src/analyzeQuery/resolveVariables.d.ts.map +1 -0
  65. package/dist/src/analyzeQuery/resolveVariables.test.d.ts +2 -0
  66. package/dist/src/analyzeQuery/resolveVariables.test.d.ts.map +1 -0
  67. package/dist/src/analyzeQuery/staticValues.test.d.ts +2 -0
  68. package/dist/src/analyzeQuery/staticValues.test.d.ts.map +1 -0
  69. package/dist/src/analyzeQuery/typeUtils.d.ts +9 -0
  70. package/dist/src/analyzeQuery/typeUtils.d.ts.map +1 -0
  71. package/dist/src/analyzeQuery/types.d.ts +54 -0
  72. package/dist/src/analyzeQuery/types.d.ts.map +1 -0
  73. package/dist/src/analyzeQuery/valueExtractors.d.ts +4 -0
  74. package/dist/src/analyzeQuery/valueExtractors.d.ts.map +1 -0
  75. package/dist/src/authentication/duration.d.ts +14 -0
  76. package/dist/src/authentication/duration.d.ts.map +1 -0
  77. package/dist/src/authentication/duration.test.d.ts +2 -0
  78. package/dist/src/authentication/duration.test.d.ts.map +1 -0
  79. package/dist/src/authentication/index.d.ts +4 -0
  80. package/dist/src/authentication/index.d.ts.map +1 -0
  81. package/dist/src/authentication/index.test.d.ts +2 -0
  82. package/dist/src/authentication/index.test.d.ts.map +1 -0
  83. package/dist/src/authentication/jwt.d.ts +10 -0
  84. package/dist/src/authentication/jwt.d.ts.map +1 -0
  85. package/dist/src/authentication/jwt.test.d.ts +2 -0
  86. package/dist/src/authentication/jwt.test.d.ts.map +1 -0
  87. package/dist/src/authentication/paseto.d.ts +7 -0
  88. package/dist/src/authentication/paseto.d.ts.map +1 -0
  89. package/dist/src/authentication/paseto.test.d.ts +2 -0
  90. package/dist/src/authentication/paseto.test.d.ts.map +1 -0
  91. package/dist/src/authentication/tokenRepository.d.ts +14 -0
  92. package/dist/src/authentication/tokenRepository.d.ts.map +1 -0
  93. package/dist/src/authentication/tokenRepository.test.d.ts +2 -0
  94. package/dist/src/authentication/tokenRepository.test.d.ts.map +1 -0
  95. package/dist/src/authentication/types.d.ts +42 -0
  96. package/dist/src/authentication/types.d.ts.map +1 -0
  97. package/dist/src/cli/seedAuth.d.ts +4 -0
  98. package/dist/src/cli/seedAuth.d.ts.map +1 -0
  99. package/dist/src/cli/seedAuth.test.d.ts +2 -0
  100. package/dist/src/cli/seedAuth.test.d.ts.map +1 -0
  101. package/dist/src/cli/seedAuthArgs.d.ts +9 -0
  102. package/dist/src/cli/seedAuthArgs.d.ts.map +1 -0
  103. package/dist/src/config/helpers/cronHelper.d.ts +21 -0
  104. package/dist/src/config/helpers/cronHelper.d.ts.map +1 -0
  105. package/dist/src/config/helpers/cronHelper.test.d.ts +2 -0
  106. package/dist/src/config/helpers/cronHelper.test.d.ts.map +1 -0
  107. package/dist/src/config/helpers/index.d.ts +4 -0
  108. package/dist/src/config/helpers/index.d.ts.map +1 -0
  109. package/dist/src/config/helpers/operationHelper.d.ts +44 -0
  110. package/dist/src/config/helpers/operationHelper.d.ts.map +1 -0
  111. package/dist/src/config/helpers/queueHelper.d.ts +20 -0
  112. package/dist/src/config/helpers/queueHelper.d.ts.map +1 -0
  113. package/dist/src/config/helpers/queueHelper.test.d.ts +2 -0
  114. package/dist/src/config/helpers/queueHelper.test.d.ts.map +1 -0
  115. package/dist/src/config/index.d.ts +236 -0
  116. package/dist/src/config/index.d.ts.map +1 -0
  117. package/dist/src/config/types/ai.d.ts +29 -0
  118. package/dist/src/config/types/ai.d.ts.map +1 -0
  119. package/dist/src/config/types/auth.d.ts +112 -0
  120. package/dist/src/config/types/auth.d.ts.map +1 -0
  121. package/dist/src/config/types/configuration.d.ts +61 -0
  122. package/dist/src/config/types/configuration.d.ts.map +1 -0
  123. package/dist/src/config/types/cron.d.ts +81 -0
  124. package/dist/src/config/types/cron.d.ts.map +1 -0
  125. package/dist/src/config/types/db.d.ts +210 -0
  126. package/dist/src/config/types/db.d.ts.map +1 -0
  127. package/dist/src/config/types/index.d.ts +17 -0
  128. package/dist/src/config/types/index.d.ts.map +1 -0
  129. package/dist/src/config/types/operation.d.ts +226 -0
  130. package/dist/src/config/types/operation.d.ts.map +1 -0
  131. package/dist/src/config/types/queue.d.ts +142 -0
  132. package/dist/src/config/types/queue.d.ts.map +1 -0
  133. package/dist/src/config/types/remote-rest.d.ts +18 -0
  134. package/dist/src/config/types/remote-rest.d.ts.map +1 -0
  135. package/dist/src/config/types/remote-schema.d.ts +27 -0
  136. package/dist/src/config/types/remote-schema.d.ts.map +1 -0
  137. package/dist/src/config/types/virtual-columns.d.ts +89 -0
  138. package/dist/src/config/types/virtual-columns.d.ts.map +1 -0
  139. package/dist/src/config/types/virtual-columns.test.d.ts +2 -0
  140. package/dist/src/config/types/virtual-columns.test.d.ts.map +1 -0
  141. package/dist/src/configuration/getSchemas/index.d.ts +867 -0
  142. package/dist/src/configuration/getSchemas/index.d.ts.map +1 -0
  143. package/dist/src/configuration/getSchemas/mergeEntities/index.d.ts +412 -0
  144. package/dist/src/configuration/getSchemas/mergeEntities/index.d.ts.map +1 -0
  145. package/dist/src/configuration/getSchemas/type-definition-generator/index.d.ts +16 -0
  146. package/dist/src/configuration/getSchemas/type-definition-generator/index.d.ts.map +1 -0
  147. package/dist/src/configuration/getSchemas/type-definition-generator/index.test.d.ts +2 -0
  148. package/dist/src/configuration/getSchemas/type-definition-generator/index.test.d.ts.map +1 -0
  149. package/dist/src/configuration/gql/buildExecute.d.ts +31 -0
  150. package/dist/src/configuration/gql/buildExecute.d.ts.map +1 -0
  151. package/dist/src/configuration/gql/buildExecute.test.d.ts +2 -0
  152. package/dist/src/configuration/gql/buildExecute.test.d.ts.map +1 -0
  153. package/dist/src/configuration/gql/gqlAuthOperations.d.ts +9 -0
  154. package/dist/src/configuration/gql/gqlAuthOperations.d.ts.map +1 -0
  155. package/dist/src/configuration/gql/gqlAuthOperations.test.d.ts +2 -0
  156. package/dist/src/configuration/gql/gqlAuthOperations.test.d.ts.map +1 -0
  157. package/dist/src/configuration/gql/handleGraphQLRequestFactory.d.ts +28 -0
  158. package/dist/src/configuration/gql/handleGraphQLRequestFactory.d.ts.map +1 -0
  159. package/dist/src/configuration/gql/handleGraphQLRequestFactory.test.d.ts +2 -0
  160. package/dist/src/configuration/gql/handleGraphQLRequestFactory.test.d.ts.map +1 -0
  161. package/dist/src/configuration/gql/handleGraphQLSubscriptionFactory.d.ts +19 -0
  162. package/dist/src/configuration/gql/handleGraphQLSubscriptionFactory.d.ts.map +1 -0
  163. package/dist/src/configuration/index.d.ts +719 -0
  164. package/dist/src/configuration/index.d.ts.map +1 -0
  165. package/dist/src/configuration/rest/generateOpenAPI.d.ts +19 -0
  166. package/dist/src/configuration/rest/generateOpenAPI.d.ts.map +1 -0
  167. package/dist/src/configuration/rest/handleRESTRequestFactory.d.ts +12 -0
  168. package/dist/src/configuration/rest/handleRESTRequestFactory.d.ts.map +1 -0
  169. package/dist/src/configuration/rest/handleRESTRequestFactory.test.d.ts +2 -0
  170. package/dist/src/configuration/rest/handleRESTRequestFactory.test.d.ts.map +1 -0
  171. package/dist/src/configuration/rest/index.d.ts +20 -0
  172. package/dist/src/configuration/rest/index.d.ts.map +1 -0
  173. package/dist/src/configuration/rest/openApiErrors.d.ts +71 -0
  174. package/dist/src/configuration/rest/openApiErrors.d.ts.map +1 -0
  175. package/dist/src/console/App.d.ts +3 -0
  176. package/dist/src/console/App.d.ts.map +1 -0
  177. package/dist/src/console/Login.d.ts +6 -0
  178. package/dist/src/console/Login.d.ts.map +1 -0
  179. package/dist/src/console/api.d.ts +17 -0
  180. package/dist/src/console/api.d.ts.map +1 -0
  181. package/dist/src/console/api.test.d.ts +2 -0
  182. package/dist/src/console/api.test.d.ts.map +1 -0
  183. package/dist/src/console/client.d.ts +67 -0
  184. package/dist/src/console/client.d.ts.map +1 -0
  185. package/dist/src/console/frontend.d.ts +8 -0
  186. package/dist/src/console/frontend.d.ts.map +1 -0
  187. package/dist/src/console/pages/ConfigPage.d.ts +2 -0
  188. package/dist/src/console/pages/ConfigPage.d.ts.map +1 -0
  189. package/dist/src/console/pages/RolesPage.d.ts +2 -0
  190. package/dist/src/console/pages/RolesPage.d.ts.map +1 -0
  191. package/dist/src/console/pages/StatusPage.d.ts +2 -0
  192. package/dist/src/console/pages/StatusPage.d.ts.map +1 -0
  193. package/dist/src/console/pages/TablesPage.d.ts +2 -0
  194. package/dist/src/console/pages/TablesPage.d.ts.map +1 -0
  195. package/dist/src/console/useApi.d.ts +8 -0
  196. package/dist/src/console/useApi.d.ts.map +1 -0
  197. package/dist/src/cron/index.d.ts +63 -0
  198. package/dist/src/cron/index.d.ts.map +1 -0
  199. package/dist/src/databases/auth/auth-operations.d.ts +11 -0
  200. package/dist/src/databases/auth/auth-operations.d.ts.map +1 -0
  201. package/dist/src/databases/auth/password.d.ts +3 -0
  202. package/dist/src/databases/auth/password.d.ts.map +1 -0
  203. package/dist/src/databases/auth/password.test.d.ts +2 -0
  204. package/dist/src/databases/auth/password.test.d.ts.map +1 -0
  205. package/dist/src/databases/common.d.ts +53 -0
  206. package/dist/src/databases/common.d.ts.map +1 -0
  207. package/dist/src/databases/common.test.d.ts +2 -0
  208. package/dist/src/databases/common.test.d.ts.map +1 -0
  209. package/dist/src/databases/core/executor.d.ts +10 -0
  210. package/dist/src/databases/core/executor.d.ts.map +1 -0
  211. package/dist/src/databases/core/executor.test.d.ts +2 -0
  212. package/dist/src/databases/core/executor.test.d.ts.map +1 -0
  213. package/dist/src/databases/core/function-mapping.d.ts +38 -0
  214. package/dist/src/databases/core/function-mapping.d.ts.map +1 -0
  215. package/dist/src/databases/core/identifier.d.ts +2 -0
  216. package/dist/src/databases/core/identifier.d.ts.map +1 -0
  217. package/dist/src/databases/core/identifier.test.d.ts +2 -0
  218. package/dist/src/databases/core/identifier.test.d.ts.map +1 -0
  219. package/dist/src/databases/core/query-builder.d.ts +64 -0
  220. package/dist/src/databases/core/query-builder.d.ts.map +1 -0
  221. package/dist/src/databases/core/query-builder.test.d.ts +2 -0
  222. package/dist/src/databases/core/query-builder.test.d.ts.map +1 -0
  223. package/dist/src/databases/directives.d.ts +16 -0
  224. package/dist/src/databases/directives.d.ts.map +1 -0
  225. package/dist/src/databases/directives.test.d.ts +2 -0
  226. package/dist/src/databases/directives.test.d.ts.map +1 -0
  227. package/dist/src/databases/engines/mssql/auth.d.ts +9 -0
  228. package/dist/src/databases/engines/mssql/auth.d.ts.map +1 -0
  229. package/dist/src/databases/engines/mssql/auth.test.d.ts +2 -0
  230. package/dist/src/databases/engines/mssql/auth.test.d.ts.map +1 -0
  231. package/dist/src/databases/engines/mssql/connection.d.ts +14 -0
  232. package/dist/src/databases/engines/mssql/connection.d.ts.map +1 -0
  233. package/dist/src/databases/engines/mssql/format.d.ts +5 -0
  234. package/dist/src/databases/engines/mssql/format.d.ts.map +1 -0
  235. package/dist/src/databases/engines/mssql/getStructure.d.ts +48 -0
  236. package/dist/src/databases/engines/mssql/getStructure.d.ts.map +1 -0
  237. package/dist/src/databases/engines/mssql/getViews.d.ts +7 -0
  238. package/dist/src/databases/engines/mssql/getViews.d.ts.map +1 -0
  239. package/dist/src/databases/engines/mssql/query/index.d.ts +7 -0
  240. package/dist/src/databases/engines/mssql/query/index.d.ts.map +1 -0
  241. package/dist/src/databases/engines/mssql/query/index.test.d.ts +2 -0
  242. package/dist/src/databases/engines/mssql/query/index.test.d.ts.map +1 -0
  243. package/dist/src/databases/engines/mysql/auth.d.ts +9 -0
  244. package/dist/src/databases/engines/mysql/auth.d.ts.map +1 -0
  245. package/dist/src/databases/engines/mysql/auth.test.d.ts +2 -0
  246. package/dist/src/databases/engines/mysql/auth.test.d.ts.map +1 -0
  247. package/dist/src/databases/engines/mysql/connection.d.ts +14 -0
  248. package/dist/src/databases/engines/mysql/connection.d.ts.map +1 -0
  249. package/dist/src/databases/engines/mysql/format.d.ts +5 -0
  250. package/dist/src/databases/engines/mysql/format.d.ts.map +1 -0
  251. package/dist/src/databases/engines/mysql/getStructure.d.ts +48 -0
  252. package/dist/src/databases/engines/mysql/getStructure.d.ts.map +1 -0
  253. package/dist/src/databases/engines/mysql/getViews.d.ts +7 -0
  254. package/dist/src/databases/engines/mysql/getViews.d.ts.map +1 -0
  255. package/dist/src/databases/engines/mysql/query/index.d.ts +7 -0
  256. package/dist/src/databases/engines/mysql/query/index.d.ts.map +1 -0
  257. package/dist/src/databases/engines/mysql/query/index.test.d.ts +2 -0
  258. package/dist/src/databases/engines/mysql/query/index.test.d.ts.map +1 -0
  259. package/dist/src/databases/engines/postgresql/auth.d.ts +9 -0
  260. package/dist/src/databases/engines/postgresql/auth.d.ts.map +1 -0
  261. package/dist/src/databases/engines/postgresql/auth.test.d.ts +2 -0
  262. package/dist/src/databases/engines/postgresql/auth.test.d.ts.map +1 -0
  263. package/dist/src/databases/engines/postgresql/connection.d.ts +14 -0
  264. package/dist/src/databases/engines/postgresql/connection.d.ts.map +1 -0
  265. package/dist/src/databases/engines/postgresql/format.d.ts +5 -0
  266. package/dist/src/databases/engines/postgresql/format.d.ts.map +1 -0
  267. package/dist/src/databases/engines/postgresql/getStructure.d.ts +48 -0
  268. package/dist/src/databases/engines/postgresql/getStructure.d.ts.map +1 -0
  269. package/dist/src/databases/engines/postgresql/getViews.d.ts +7 -0
  270. package/dist/src/databases/engines/postgresql/getViews.d.ts.map +1 -0
  271. package/dist/src/databases/engines/postgresql/query/index.d.ts +7 -0
  272. package/dist/src/databases/engines/postgresql/query/index.d.ts.map +1 -0
  273. package/dist/src/databases/engines/postgresql/query/index.test.d.ts +2 -0
  274. package/dist/src/databases/engines/postgresql/query/index.test.d.ts.map +1 -0
  275. package/dist/src/databases/engines/shared/claims.d.ts +2 -0
  276. package/dist/src/databases/engines/shared/claims.d.ts.map +1 -0
  277. package/dist/src/databases/engines/shared/types.d.ts +8 -0
  278. package/dist/src/databases/engines/shared/types.d.ts.map +1 -0
  279. package/dist/src/databases/high-level-operations.d.ts +146 -0
  280. package/dist/src/databases/high-level-operations.d.ts.map +1 -0
  281. package/dist/src/databases/high-level-operations.test.d.ts +2 -0
  282. package/dist/src/databases/high-level-operations.test.d.ts.map +1 -0
  283. package/dist/src/databases/index.d.ts +8 -0
  284. package/dist/src/databases/index.d.ts.map +1 -0
  285. package/dist/src/databases/metadata/structure.d.ts +56 -0
  286. package/dist/src/databases/metadata/structure.d.ts.map +1 -0
  287. package/dist/src/databases/schemaBuilder/convert.d.ts +2 -0
  288. package/dist/src/databases/schemaBuilder/convert.d.ts.map +1 -0
  289. package/dist/src/databases/schemaBuilder/generateCreateTable/index.d.ts +15 -0
  290. package/dist/src/databases/schemaBuilder/generateCreateTable/index.d.ts.map +1 -0
  291. package/dist/src/databases/schemaBuilder/generateCreateTable/index.test.d.ts +2 -0
  292. package/dist/src/databases/schemaBuilder/generateCreateTable/index.test.d.ts.map +1 -0
  293. package/dist/src/databases/schemaBuilder/generateCreateView/index.d.ts +18 -0
  294. package/dist/src/databases/schemaBuilder/generateCreateView/index.d.ts.map +1 -0
  295. package/dist/src/databases/schemaBuilder/generateInsert/index.d.ts +8 -0
  296. package/dist/src/databases/schemaBuilder/generateInsert/index.d.ts.map +1 -0
  297. package/dist/src/databases/schemaBuilder/generateInsert/index.test.d.ts +2 -0
  298. package/dist/src/databases/schemaBuilder/generateInsert/index.test.d.ts.map +1 -0
  299. package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.d.ts +7 -0
  300. package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.d.ts.map +1 -0
  301. package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.test.d.ts +2 -0
  302. package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.test.d.ts.map +1 -0
  303. package/dist/src/databases/schemaBuilder/mssqlToPostgres/convertView.d.ts +2 -0
  304. package/dist/src/databases/schemaBuilder/mssqlToPostgres/convertView.d.ts.map +1 -0
  305. package/dist/src/databases/schemaBuilder/utils.d.ts +8 -0
  306. package/dist/src/databases/schemaBuilder/utils.d.ts.map +1 -0
  307. package/dist/src/databases/sqlTypeUtils.d.ts +24 -0
  308. package/dist/src/databases/sqlTypeUtils.d.ts.map +1 -0
  309. package/dist/src/databases/sqlTypeUtils.test.d.ts +2 -0
  310. package/dist/src/databases/sqlTypeUtils.test.d.ts.map +1 -0
  311. package/dist/src/databases/transformers/data-transformers.d.ts +215 -0
  312. package/dist/src/databases/transformers/data-transformers.d.ts.map +1 -0
  313. package/dist/src/databases/transformers/data-transformers.test.d.ts +2 -0
  314. package/dist/src/databases/transformers/data-transformers.test.d.ts.map +1 -0
  315. package/dist/src/databases/transformers/genResolverName.d.ts +2 -0
  316. package/dist/src/databases/transformers/genResolverName.d.ts.map +1 -0
  317. package/dist/src/databases/transformers/genResolverName.test.d.ts +2 -0
  318. package/dist/src/databases/transformers/genResolverName.test.d.ts.map +1 -0
  319. package/dist/src/index.d.ts +139 -0
  320. package/dist/src/index.d.ts.map +1 -0
  321. package/dist/src/logging/index.d.ts +21 -0
  322. package/dist/src/logging/index.d.ts.map +1 -0
  323. package/dist/src/queues/kafka.d.ts +22 -0
  324. package/dist/src/queues/kafka.d.ts.map +1 -0
  325. package/dist/src/queues/rabbitmq.d.ts +34 -0
  326. package/dist/src/queues/rabbitmq.d.ts.map +1 -0
  327. package/dist/src/queues/rabbitmq.test.d.ts +2 -0
  328. package/dist/src/queues/rabbitmq.test.d.ts.map +1 -0
  329. package/dist/src/remoteREST/index.d.ts +13 -0
  330. package/dist/src/remoteREST/index.d.ts.map +1 -0
  331. package/dist/src/remoteREST/parse.d.ts +8 -0
  332. package/dist/src/remoteREST/parse.d.ts.map +1 -0
  333. package/dist/src/remoteREST/parse.test.d.ts +2 -0
  334. package/dist/src/remoteREST/parse.test.d.ts.map +1 -0
  335. package/dist/src/remoteREST/proxy.d.ts +6 -0
  336. package/dist/src/remoteREST/proxy.d.ts.map +1 -0
  337. package/dist/src/remoteREST/proxy.test.d.ts +2 -0
  338. package/dist/src/remoteREST/proxy.test.d.ts.map +1 -0
  339. package/dist/src/remoteREST/transform.d.ts +8 -0
  340. package/dist/src/remoteREST/transform.d.ts.map +1 -0
  341. package/dist/src/remoteREST/transform.test.d.ts +2 -0
  342. package/dist/src/remoteREST/transform.test.d.ts.map +1 -0
  343. package/dist/src/remoteREST/types.d.ts +37 -0
  344. package/dist/src/remoteREST/types.d.ts.map +1 -0
  345. package/dist/src/remoteSchemas/index.d.ts +13 -0
  346. package/dist/src/remoteSchemas/index.d.ts.map +1 -0
  347. package/dist/src/remoteSchemas/introspect.d.ts +7 -0
  348. package/dist/src/remoteSchemas/introspect.d.ts.map +1 -0
  349. package/dist/src/remoteSchemas/introspect.test.d.ts +2 -0
  350. package/dist/src/remoteSchemas/introspect.test.d.ts.map +1 -0
  351. package/dist/src/remoteSchemas/proxy.d.ts +7 -0
  352. package/dist/src/remoteSchemas/proxy.d.ts.map +1 -0
  353. package/dist/src/remoteSchemas/proxy.test.d.ts +2 -0
  354. package/dist/src/remoteSchemas/proxy.test.d.ts.map +1 -0
  355. package/dist/src/remoteSchemas/transform.d.ts +9 -0
  356. package/dist/src/remoteSchemas/transform.d.ts.map +1 -0
  357. package/dist/src/remoteSchemas/transform.test.d.ts +2 -0
  358. package/dist/src/remoteSchemas/transform.test.d.ts.map +1 -0
  359. package/dist/src/remoteSchemas/types.d.ts +41 -0
  360. package/dist/src/remoteSchemas/types.d.ts.map +1 -0
  361. package/dist/src/singletons/ai.d.ts +25 -0
  362. package/dist/src/singletons/ai.d.ts.map +1 -0
  363. package/dist/src/singletons/ai.test.d.ts +2 -0
  364. package/dist/src/singletons/ai.test.d.ts.map +1 -0
  365. package/dist/src/singletons/authentication.d.ts +4 -0
  366. package/dist/src/singletons/authentication.d.ts.map +1 -0
  367. package/dist/src/singletons/cache/index.d.ts +5 -0
  368. package/dist/src/singletons/cache/index.d.ts.map +1 -0
  369. package/dist/src/singletons/cache/lruCacheStore.d.ts +12 -0
  370. package/dist/src/singletons/cache/lruCacheStore.d.ts.map +1 -0
  371. package/dist/src/singletons/cache/lruCacheStore.test.d.ts +2 -0
  372. package/dist/src/singletons/cache/lruCacheStore.test.d.ts.map +1 -0
  373. package/dist/src/singletons/cache/redisCacheStore.d.ts +16 -0
  374. package/dist/src/singletons/cache/redisCacheStore.d.ts.map +1 -0
  375. package/dist/src/singletons/cache/redisClient.d.ts +3 -0
  376. package/dist/src/singletons/cache/redisClient.d.ts.map +1 -0
  377. package/dist/src/singletons/cache/registry.d.ts +7 -0
  378. package/dist/src/singletons/cache/registry.d.ts.map +1 -0
  379. package/dist/src/singletons/cache/registry.test.d.ts +2 -0
  380. package/dist/src/singletons/cache/registry.test.d.ts.map +1 -0
  381. package/dist/src/singletons/cache/types.d.ts +8 -0
  382. package/dist/src/singletons/cache/types.d.ts.map +1 -0
  383. package/dist/src/singletons/cron.d.ts +69 -0
  384. package/dist/src/singletons/cron.d.ts.map +1 -0
  385. package/dist/src/singletons/databases.d.ts +27 -0
  386. package/dist/src/singletons/databases.d.ts.map +1 -0
  387. package/dist/src/singletons/databases.test.d.ts +2 -0
  388. package/dist/src/singletons/databases.test.d.ts.map +1 -0
  389. package/dist/src/singletons/env.d.ts +494 -0
  390. package/dist/src/singletons/env.d.ts.map +1 -0
  391. package/dist/src/singletons/queues.d.ts +17 -0
  392. package/dist/src/singletons/queues.d.ts.map +1 -0
  393. package/dist/src/subscriptions/index.d.ts +4 -0
  394. package/dist/src/subscriptions/index.d.ts.map +1 -0
  395. package/dist/src/subscriptions/strategies/database.d.ts +12 -0
  396. package/dist/src/subscriptions/strategies/database.d.ts.map +1 -0
  397. package/dist/src/subscriptions/strategies/index.d.ts +12 -0
  398. package/dist/src/subscriptions/strategies/index.d.ts.map +1 -0
  399. package/dist/src/subscriptions/strategies/queue.d.ts +11 -0
  400. package/dist/src/subscriptions/strategies/queue.d.ts.map +1 -0
  401. package/dist/src/subscriptions/types.d.ts +67 -0
  402. package/dist/src/subscriptions/types.d.ts.map +1 -0
  403. package/dist/src/subscriptions/utils/polling.d.ts +17 -0
  404. package/dist/src/subscriptions/utils/polling.d.ts.map +1 -0
  405. package/dist/src/types/common.d.ts +44 -0
  406. package/dist/src/types/common.d.ts.map +1 -0
  407. package/dist/src/types/configuration.d.ts +28 -0
  408. package/dist/src/types/configuration.d.ts.map +1 -0
  409. package/dist/src/types/db.d.ts +43 -0
  410. package/dist/src/types/db.d.ts.map +1 -0
  411. package/dist/src/types/env.d.ts +2302 -0
  412. package/dist/src/types/env.d.ts.map +1 -0
  413. package/dist/src/types/env.test.d.ts +2 -0
  414. package/dist/src/types/env.test.d.ts.map +1 -0
  415. package/dist/src/types/resolver.d.ts +121 -0
  416. package/dist/src/types/resolver.d.ts.map +1 -0
  417. package/dist/src/types/zod/ai.d.ts +6 -0
  418. package/dist/src/types/zod/ai.d.ts.map +1 -0
  419. package/dist/src/types/zod/auth.d.ts +76 -0
  420. package/dist/src/types/zod/auth.d.ts.map +1 -0
  421. package/dist/src/types/zod/configuration.d.ts +1278 -0
  422. package/dist/src/types/zod/configuration.d.ts.map +1 -0
  423. package/dist/src/types/zod/configuration.test.d.ts +2 -0
  424. package/dist/src/types/zod/configuration.test.d.ts.map +1 -0
  425. package/dist/src/types/zod/cron.d.ts +32 -0
  426. package/dist/src/types/zod/cron.d.ts.map +1 -0
  427. package/dist/src/types/zod/db.d.ts +441 -0
  428. package/dist/src/types/zod/db.d.ts.map +1 -0
  429. package/dist/src/types/zod/db.test.d.ts +2 -0
  430. package/dist/src/types/zod/db.test.d.ts.map +1 -0
  431. package/dist/src/types/zod/mcp.d.ts +6 -0
  432. package/dist/src/types/zod/mcp.d.ts.map +1 -0
  433. package/dist/src/types/zod/operation.d.ts +9 -0
  434. package/dist/src/types/zod/operation.d.ts.map +1 -0
  435. package/dist/src/types/zod/queue.d.ts +656 -0
  436. package/dist/src/types/zod/queue.d.ts.map +1 -0
  437. package/dist/src/types/zod/queue.test.d.ts +2 -0
  438. package/dist/src/types/zod/queue.test.d.ts.map +1 -0
  439. package/dist/src/types/zod/remoteREST.d.ts +6 -0
  440. package/dist/src/types/zod/remoteREST.d.ts.map +1 -0
  441. package/dist/src/types/zod/remoteSchema.d.ts +6 -0
  442. package/dist/src/types/zod/remoteSchema.d.ts.map +1 -0
  443. package/dist/src/utils/benchmark.d.ts +2 -0
  444. package/dist/src/utils/benchmark.d.ts.map +1 -0
  445. package/dist/src/utils/event-emitter.d.ts +19 -0
  446. package/dist/src/utils/event-emitter.d.ts.map +1 -0
  447. package/dist/src/utils/responses.d.ts +19 -0
  448. package/dist/src/utils/responses.d.ts.map +1 -0
  449. package/dist/src/utils/responses.test.d.ts +2 -0
  450. package/dist/src/utils/responses.test.d.ts.map +1 -0
  451. package/dist/src/utils/safeJSONParse.d.ts +2 -0
  452. package/dist/src/utils/safeJSONParse.d.ts.map +1 -0
  453. package/dist/src/utils/selection.d.ts +3 -0
  454. package/dist/src/utils/selection.d.ts.map +1 -0
  455. package/dist/src/utils/selection.test.d.ts +2 -0
  456. package/dist/src/utils/selection.test.d.ts.map +1 -0
  457. package/dist/src/utils/sessionVariables.d.ts +47 -0
  458. package/dist/src/utils/sessionVariables.d.ts.map +1 -0
  459. package/dist/src/utils/sessionVariables.test.d.ts +2 -0
  460. package/dist/src/utils/sessionVariables.test.d.ts.map +1 -0
  461. package/dist/src/utils/writeSchema.d.ts +3 -0
  462. package/dist/src/utils/writeSchema.d.ts.map +1 -0
  463. package/dist/standalone.d.ts +3 -0
  464. package/dist/standalone.d.ts.map +1 -0
  465. package/dist/tsconfig.tsbuildinfo +1 -0
  466. package/package.json +119 -0
  467. package/playgrounds/console/index.html +25 -0
  468. package/playgrounds/graphiql/index.html +1144 -0
  469. package/playgrounds/scalar/index.html +19 -0
  470. package/src/ai/agent/agent.ts +222 -0
  471. package/src/ai/agent/index.ts +2 -0
  472. package/src/ai/agent/providers/anthropic.ts +113 -0
  473. package/src/ai/agent/providers/index.ts +62 -0
  474. package/src/ai/agent/providers/ollama.ts +128 -0
  475. package/src/ai/agent/providers/openai.ts +100 -0
  476. package/src/ai/agent/types.ts +65 -0
  477. package/src/ai/index.ts +8 -0
  478. package/src/ai/mcp/create-server.ts +444 -0
  479. package/src/ai/mcp/index.ts +80 -0
  480. package/src/ai/mcp/instructions.ts +103 -0
  481. package/src/ai/tools/agent.ts +111 -0
  482. package/src/ai/tools/core.ts +486 -0
  483. package/src/ai/tools/query-data.ts +109 -0
  484. package/src/analyzeQuery/analyzers/fragmentAnalyzer.ts +29 -0
  485. package/src/analyzeQuery/analyzers/operationAnalyzer.ts +50 -0
  486. package/src/analyzeQuery/analyzers/selectionAnalyzer.ts +135 -0
  487. package/src/analyzeQuery/analyzers/variableAnalyzer.ts +17 -0
  488. package/src/analyzeQuery/depthLimit.ts +124 -0
  489. package/src/analyzeQuery/directiveUtils.ts +99 -0
  490. package/src/analyzeQuery/index.ts +66 -0
  491. package/src/analyzeQuery/resolveVariables.ts +394 -0
  492. package/src/analyzeQuery/typeUtils.ts +47 -0
  493. package/src/analyzeQuery/types.ts +57 -0
  494. package/src/analyzeQuery/valueExtractors.ts +96 -0
  495. package/src/authentication/duration.ts +50 -0
  496. package/src/authentication/index.ts +34 -0
  497. package/src/authentication/jwt.ts +220 -0
  498. package/src/authentication/paseto.ts +256 -0
  499. package/src/authentication/tokenRepository.ts +75 -0
  500. package/src/authentication/types.ts +78 -0
  501. package/src/cli/seedAuth.ts +51 -0
  502. package/src/cli/seedAuthArgs.ts +50 -0
  503. package/src/config/helpers/cronHelper.ts +29 -0
  504. package/src/config/helpers/index.ts +8 -0
  505. package/src/config/helpers/operationHelper.ts +146 -0
  506. package/src/config/helpers/queueHelper.ts +27 -0
  507. package/src/config/index.ts +315 -0
  508. package/src/config/types/ai.ts +35 -0
  509. package/src/config/types/auth.ts +147 -0
  510. package/src/config/types/configuration.ts +69 -0
  511. package/src/config/types/cron.ts +140 -0
  512. package/src/config/types/db.ts +256 -0
  513. package/src/config/types/index.ts +129 -0
  514. package/src/config/types/operation.ts +253 -0
  515. package/src/config/types/queue.ts +172 -0
  516. package/src/config/types/remote-rest.ts +28 -0
  517. package/src/config/types/remote-schema.ts +39 -0
  518. package/src/config/types/virtual-columns.ts +157 -0
  519. package/src/configuration/getSchemas/index.ts +82 -0
  520. package/src/configuration/getSchemas/mergeEntities/index.ts +221 -0
  521. package/src/configuration/getSchemas/type-definition-generator/index.ts +511 -0
  522. package/src/configuration/gql/buildExecute.ts +54 -0
  523. package/src/configuration/gql/gqlAuthOperations.ts +150 -0
  524. package/src/configuration/gql/handleGraphQLRequestFactory.ts +415 -0
  525. package/src/configuration/gql/handleGraphQLSubscriptionFactory.ts +249 -0
  526. package/src/configuration/index.ts +138 -0
  527. package/src/configuration/rest/generateOpenAPI.ts +361 -0
  528. package/src/configuration/rest/handleRESTRequestFactory.ts +335 -0
  529. package/src/configuration/rest/index.ts +167 -0
  530. package/src/configuration/rest/openApiErrors.ts +106 -0
  531. package/src/console/api.ts +270 -0
  532. package/src/cron/index.ts +251 -0
  533. package/src/databases/auth/auth-operations.ts +36 -0
  534. package/src/databases/auth/password.ts +4 -0
  535. package/src/databases/common.ts +642 -0
  536. package/src/databases/core/executor.ts +97 -0
  537. package/src/databases/core/function-mapping.ts +176 -0
  538. package/src/databases/core/identifier.ts +8 -0
  539. package/src/databases/core/query-builder.ts +47 -0
  540. package/src/databases/directives.ts +112 -0
  541. package/src/databases/engines/mssql/auth.ts +112 -0
  542. package/src/databases/engines/mssql/connection.ts +151 -0
  543. package/src/databases/engines/mssql/format.ts +23 -0
  544. package/src/databases/engines/mssql/getStructure.ts +112 -0
  545. package/src/databases/engines/mssql/getViews.ts +17 -0
  546. package/src/databases/engines/mssql/query/index.ts +306 -0
  547. package/src/databases/engines/mysql/auth.ts +100 -0
  548. package/src/databases/engines/mysql/connection.ts +100 -0
  549. package/src/databases/engines/mysql/format.ts +23 -0
  550. package/src/databases/engines/mysql/getStructure.ts +116 -0
  551. package/src/databases/engines/mysql/getViews.ts +20 -0
  552. package/src/databases/engines/mysql/query/index.ts +291 -0
  553. package/src/databases/engines/postgresql/auth.ts +98 -0
  554. package/src/databases/engines/postgresql/connection.ts +99 -0
  555. package/src/databases/engines/postgresql/format.ts +23 -0
  556. package/src/databases/engines/postgresql/getStructure.ts +149 -0
  557. package/src/databases/engines/postgresql/getViews.ts +20 -0
  558. package/src/databases/engines/postgresql/query/index.ts +291 -0
  559. package/src/databases/engines/shared/claims.ts +26 -0
  560. package/src/databases/engines/shared/types.ts +7 -0
  561. package/src/databases/high-level-operations.ts +272 -0
  562. package/src/databases/index.ts +28 -0
  563. package/src/databases/metadata/structure.ts +12 -0
  564. package/src/databases/schemaBuilder/convert.ts +121 -0
  565. package/src/databases/schemaBuilder/generateCreateTable/index.ts +133 -0
  566. package/src/databases/schemaBuilder/generateCreateView/index.ts +101 -0
  567. package/src/databases/schemaBuilder/generateInsert/index.ts +47 -0
  568. package/src/databases/schemaBuilder/generateSchemaCreation/index.ts +29 -0
  569. package/src/databases/schemaBuilder/mssqlToPostgres/convertView.ts +47 -0
  570. package/src/databases/schemaBuilder/utils.ts +17 -0
  571. package/src/databases/sqlTypeUtils.ts +91 -0
  572. package/src/databases/transformers/data-transformers.ts +128 -0
  573. package/src/databases/transformers/genResolverName.ts +18 -0
  574. package/src/index.ts +461 -0
  575. package/src/logging/index.ts +69 -0
  576. package/src/queues/kafka.ts +409 -0
  577. package/src/queues/rabbitmq.ts +331 -0
  578. package/src/remoteREST/index.ts +46 -0
  579. package/src/remoteREST/parse.ts +68 -0
  580. package/src/remoteREST/proxy.ts +92 -0
  581. package/src/remoteREST/transform.ts +121 -0
  582. package/src/remoteREST/types.ts +38 -0
  583. package/src/remoteSchemas/index.ts +48 -0
  584. package/src/remoteSchemas/introspect.ts +44 -0
  585. package/src/remoteSchemas/proxy.ts +146 -0
  586. package/src/remoteSchemas/transform.ts +210 -0
  587. package/src/remoteSchemas/types.ts +43 -0
  588. package/src/singletons/ai.ts +91 -0
  589. package/src/singletons/authentication.ts +13 -0
  590. package/src/singletons/cache/index.ts +4 -0
  591. package/src/singletons/cache/lruCacheStore.ts +34 -0
  592. package/src/singletons/cache/redisCacheStore.ts +81 -0
  593. package/src/singletons/cache/redisClient.ts +12 -0
  594. package/src/singletons/cache/registry.ts +51 -0
  595. package/src/singletons/cache/types.ts +7 -0
  596. package/src/singletons/cron.ts +21 -0
  597. package/src/singletons/databases.ts +68 -0
  598. package/src/singletons/env.ts +3 -0
  599. package/src/singletons/queues.ts +101 -0
  600. package/src/subscriptions/index.ts +20 -0
  601. package/src/subscriptions/strategies/database.ts +68 -0
  602. package/src/subscriptions/strategies/index.ts +38 -0
  603. package/src/subscriptions/strategies/queue.ts +61 -0
  604. package/src/subscriptions/types.ts +74 -0
  605. package/src/subscriptions/utils/polling.ts +119 -0
  606. package/src/types/common.ts +57 -0
  607. package/src/types/configuration.ts +52 -0
  608. package/src/types/db.ts +87 -0
  609. package/src/types/env.ts +137 -0
  610. package/src/types/resolver.ts +181 -0
  611. package/src/types/zod/ai.ts +8 -0
  612. package/src/types/zod/auth.ts +96 -0
  613. package/src/types/zod/configuration.ts +46 -0
  614. package/src/types/zod/cron.ts +35 -0
  615. package/src/types/zod/db.ts +146 -0
  616. package/src/types/zod/mcp.ts +8 -0
  617. package/src/types/zod/operation.ts +37 -0
  618. package/src/types/zod/queue.ts +182 -0
  619. package/src/types/zod/remoteREST.ts +8 -0
  620. package/src/types/zod/remoteSchema.ts +11 -0
  621. package/src/utils/benchmark.ts +13 -0
  622. package/src/utils/event-emitter.ts +217 -0
  623. package/src/utils/responses.ts +42 -0
  624. package/src/utils/safeJSONParse.ts +10 -0
  625. package/src/utils/selection.ts +35 -0
  626. package/src/utils/sessionVariables.ts +131 -0
  627. package/src/utils/writeSchema.ts +13 -0
  628. package/standalone.ts +32 -0
@@ -0,0 +1,81 @@
1
+ import type { CacheStore } from "./types";
2
+
3
+ import { getCacheRedisClient } from "./redisClient";
4
+ import { logger } from "../../logging";
5
+
6
+ export class RedisCacheStore implements CacheStore {
7
+ private prefix: string;
8
+ private trackingKey: string;
9
+ private ttlSeconds: number | undefined;
10
+ private client: ReturnType<typeof getCacheRedisClient>;
11
+ private log = logger("redis-cache");
12
+
13
+ constructor(operationName: string, ttlMs?: number) {
14
+ this.prefix = `cache:${operationName}:`;
15
+ this.trackingKey = `${this.prefix}__keys`;
16
+ this.ttlSeconds = ttlMs ? Math.ceil(ttlMs / 1000) : undefined;
17
+ this.client = getCacheRedisClient();
18
+ }
19
+
20
+ private fullKey(key: string): string {
21
+ const hash = Bun.hash(key).toString(36);
22
+ return `${this.prefix}${hash}`;
23
+ }
24
+
25
+ async get(key: string): Promise<unknown | undefined> {
26
+ try {
27
+ const raw = await this.client.get(this.fullKey(key));
28
+ if (raw === null) return undefined;
29
+ return JSON.parse(raw);
30
+ } catch (error) {
31
+ this.log.error({ err: error, operation: "get" }, "cache get failed");
32
+ return undefined;
33
+ }
34
+ }
35
+
36
+ async set(key: string, value: unknown): Promise<void> {
37
+ try {
38
+ const redisKey = this.fullKey(key);
39
+ await this.client.set(redisKey, JSON.stringify(value));
40
+ if (this.ttlSeconds) {
41
+ await this.client.expire(redisKey, this.ttlSeconds);
42
+ }
43
+ await this.client.sadd(this.trackingKey, key);
44
+ } catch (error) {
45
+ this.log.error({ err: error, operation: "set" }, "cache set failed");
46
+ }
47
+ }
48
+
49
+ async delete(key: string): Promise<void> {
50
+ try {
51
+ await this.client.del(this.fullKey(key));
52
+ await this.client.srem(this.trackingKey, key);
53
+ } catch (error) {
54
+ this.log.error({ err: error, operation: "delete" }, "cache delete failed");
55
+ }
56
+ }
57
+
58
+ async clear(): Promise<void> {
59
+ try {
60
+ const originalKeys = await this.client.smembers(this.trackingKey);
61
+ if (originalKeys.length > 0) {
62
+ const redisKeys = originalKeys.map((k: string) => this.fullKey(k));
63
+ for (const redisKey of redisKeys) {
64
+ await this.client.del(redisKey);
65
+ }
66
+ }
67
+ await this.client.del(this.trackingKey);
68
+ } catch (error) {
69
+ this.log.error({ err: error, operation: "clear" }, "cache clear failed");
70
+ }
71
+ }
72
+
73
+ async keys(): Promise<string[]> {
74
+ try {
75
+ return await this.client.smembers(this.trackingKey);
76
+ } catch (error) {
77
+ this.log.error({ err: error, operation: "keys" }, "cache keys failed");
78
+ return [];
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,12 @@
1
+ import { RedisClient as ValkeyClient } from "bun";
2
+
3
+ import { env } from "../env";
4
+
5
+ let client: InstanceType<typeof ValkeyClient> | null = null;
6
+
7
+ export const getCacheRedisClient = (): InstanceType<typeof ValkeyClient> => {
8
+ if (!client) {
9
+ client = new ValkeyClient(env.cache.redisUrl);
10
+ }
11
+ return client;
12
+ };
@@ -0,0 +1,51 @@
1
+ import type { CacheStore } from "./types";
2
+
3
+ const cacheRegistry = new Map<string, CacheStore>();
4
+
5
+ export const registerCache = (name: string, cache: CacheStore) => {
6
+ cacheRegistry.set(name, cache);
7
+ };
8
+
9
+ export const getCache = (name: string): CacheStore | undefined => {
10
+ return cacheRegistry.get(name);
11
+ };
12
+
13
+ export const InvalidationHelper = {
14
+ invalidate: async (
15
+ operationName: string,
16
+ pattern?: Record<string, unknown>,
17
+ ): Promise<boolean> => {
18
+ const cache = cacheRegistry.get(operationName);
19
+ if (!cache) {
20
+ return false;
21
+ }
22
+
23
+ if (!pattern || Object.keys(pattern).length === 0) {
24
+ await cache.clear();
25
+ return true;
26
+ }
27
+
28
+ const allKeys = await cache.keys();
29
+ for (const key of allKeys) {
30
+ try {
31
+ const parsedKey = JSON.parse(key);
32
+ const cachedVariables = parsedKey.variables;
33
+
34
+ let match = true;
35
+ for (const [k, v] of Object.entries(pattern)) {
36
+ if (cachedVariables[k] !== v) {
37
+ match = false;
38
+ break;
39
+ }
40
+ }
41
+
42
+ if (match) {
43
+ await cache.delete(key);
44
+ }
45
+ } catch {
46
+ // Ignore parse errors
47
+ }
48
+ }
49
+ return true;
50
+ },
51
+ };
@@ -0,0 +1,7 @@
1
+ export interface CacheStore {
2
+ get(key: string): Promise<unknown | undefined>;
3
+ set(key: string, value: unknown): Promise<void>;
4
+ delete(key: string): Promise<void>;
5
+ clear(): Promise<void>;
6
+ keys(): Promise<string[]>;
7
+ }
@@ -0,0 +1,21 @@
1
+ import type { StartCronJobsReturn } from "../cron";
2
+ import type { GqlQueryFn } from "../types/common";
3
+ import type { CronJob } from "../types/configuration";
4
+
5
+ import { startCronJobs } from "../cron";
6
+
7
+ let cronJobs: StartCronJobsReturn | null = null;
8
+
9
+ export const instantiateCronJobs = async (jobs: CronJob[], gqlQuery: GqlQueryFn<true>) => {
10
+ if (!cronJobs) {
11
+ cronJobs = await startCronJobs(jobs, gqlQuery);
12
+ }
13
+
14
+ return cronJobs;
15
+ };
16
+
17
+ export const getCronJobs = () => cronJobs;
18
+
19
+ export const setCronJobs = (jobs: StartCronJobsReturn | null) => {
20
+ cronJobs = jobs;
21
+ };
@@ -0,0 +1,68 @@
1
+ import { SQL } from "bun";
2
+
3
+ import type { ConnectionPool } from "mssql";
4
+ import type { Database } from "../types/configuration.ts";
5
+
6
+ import { getPool as getPoolMSSQL } from "../databases/engines/mssql/connection.ts";
7
+ import { getPool as getPoolMySQL } from "../databases/engines/mysql/connection.ts";
8
+ import { getPool as getPoolPostgreSQL } from "../databases/engines/postgresql/connection.ts";
9
+
10
+ /**
11
+ * Type for database connections mapping
12
+ * Keys are database names from configuration, values are connection pools
13
+ */
14
+ export type DatabasesConnections = Record<string, SQL | ConnectionPool>;
15
+
16
+ /**
17
+ * Type for custom repository mapping
18
+ * Keys are database names from configuration, values are the result of repository factory
19
+ */
20
+ export type RepositoryMap<TRepository = unknown> = Record<string, TRepository>;
21
+
22
+ export const databasesConnections: DatabasesConnections = {};
23
+ export const repositoryMap: RepositoryMap = {};
24
+
25
+ export const instantiateDatabasesConnections = async (databases: Database[]) => {
26
+ for await (const db of databases) {
27
+ let connection: SQL | ConnectionPool | undefined;
28
+
29
+ if (db.type === "pg") {
30
+ connection = await getPoolPostgreSQL(db);
31
+ databasesConnections[db.name] = connection;
32
+ } else if (db.type === "mssql") {
33
+ connection = await getPoolMSSQL(db);
34
+ databasesConnections[db.name] = connection;
35
+ } else if (db.type === "mysql") {
36
+ connection = await getPoolMySQL(db);
37
+ databasesConnections[db.name] = connection;
38
+ }
39
+
40
+ if (connection && db.onConnect) {
41
+ await db.onConnect(connection, db);
42
+ }
43
+
44
+ // Initialize custom repository if factory is provided
45
+ if (connection && db.repository) {
46
+ repositoryMap[db.name] = db.repository(connection);
47
+ }
48
+ }
49
+
50
+ return { databasesConnections, repositoryMap };
51
+ };
52
+
53
+ /**
54
+ * Close every open database connection and clear the singleton maps. Bun's `SQL`
55
+ * and mssql's `ConnectionPool` both expose `close()`. Used by
56
+ * `createGraphQLEngine`'s `close()` so an in-process consumer can release
57
+ * connections without a running server.
58
+ */
59
+ export const disconnectDatabases = async () => {
60
+ await Promise.all(Object.values(databasesConnections).map((connection) => connection.close()));
61
+
62
+ for (const name of Object.keys(databasesConnections)) {
63
+ delete databasesConnections[name];
64
+ }
65
+ for (const name of Object.keys(repositoryMap)) {
66
+ delete repositoryMap[name];
67
+ }
68
+ };
@@ -0,0 +1,3 @@
1
+ import { EnvZod } from "../types/env";
2
+
3
+ export const env = EnvZod.parse(process.env);
@@ -0,0 +1,101 @@
1
+ import type { KafkaPublisher } from "../queues/kafka";
2
+ import type { RabbitMQPublisher } from "../queues/rabbitmq";
3
+ import type { QueueConfig } from "../types/zod/queue";
4
+
5
+ import { startKafkaConnections } from "../queues/kafka";
6
+ import { startRabbitMQConnections } from "../queues/rabbitmq";
7
+ import { logger } from "../logging";
8
+
9
+ export type QueueConnectionStatus = { type: "rabbitmq" | "kafka"; connected: boolean };
10
+
11
+ export type QueueManager = {
12
+ publisherMap: () => Record<string, RabbitMQPublisher | KafkaPublisher>;
13
+ sendMessage: (
14
+ publisherName: string,
15
+ message: string | object,
16
+ key?: string,
17
+ ) => Promise<boolean> | boolean;
18
+ connections: () => QueueConnectionStatus[];
19
+ cleanup?: () => Promise<void>;
20
+ };
21
+
22
+ export let queueManager: QueueManager | undefined;
23
+
24
+ export const setQueueManager = (manager: QueueManager | undefined) => {
25
+ queueManager = manager;
26
+ };
27
+
28
+ export const instantiateQueues = async (queues: QueueConfig[]) => {
29
+ // Separate RabbitMQ and Kafka queues
30
+ const rabbitMQQueues = queues.filter((queue) => queue.type === "rabbitmq");
31
+ const kafkaQueues = queues.filter((queue) => queue.type === "kafka");
32
+
33
+ const managers: QueueManager[] = [];
34
+
35
+ // Initialize RabbitMQ connections
36
+ if (rabbitMQQueues.length > 0) {
37
+ const rabbitMQManager = await startRabbitMQConnections(rabbitMQQueues);
38
+
39
+ managers.push({
40
+ publisherMap: rabbitMQManager.publisherMap,
41
+ sendMessage: rabbitMQManager.sendMessage,
42
+ connections: () =>
43
+ rabbitMQManager.managers.map((manager) => ({
44
+ type: "rabbitmq" as const,
45
+ connected: manager.isConnected(),
46
+ })),
47
+ });
48
+ }
49
+
50
+ // Initialize Kafka connections
51
+ if (kafkaQueues.length > 0) {
52
+ const kafkaManager = await startKafkaConnections(kafkaQueues);
53
+
54
+ managers.push({
55
+ publisherMap: kafkaManager.publisherMap,
56
+ sendMessage: kafkaManager.sendMessage,
57
+ connections: () =>
58
+ kafkaManager.managers.map((manager) => ({
59
+ type: "kafka" as const,
60
+ connected: manager.isConnected(),
61
+ })),
62
+ cleanup: kafkaManager.cleanup,
63
+ });
64
+ }
65
+
66
+ // Merge all publisher maps and create unified send function
67
+ const combinedPublisherMap = () =>
68
+ managers.reduce((acc, manager) => ({ ...acc, ...manager.publisherMap() }), {});
69
+
70
+ const combinedSendMessage = async (
71
+ publisherName: string,
72
+ message: string | object,
73
+ key?: string,
74
+ ) => {
75
+ // Find which manager has this publisher
76
+ for (const manager of managers) {
77
+ if (manager.publisherMap()[publisherName]) {
78
+ return await manager.sendMessage(publisherName, message, key);
79
+ }
80
+ }
81
+
82
+ logger("queues").error(
83
+ { publisher: publisherName },
84
+ "publisher not found in any queue manager",
85
+ );
86
+ return false;
87
+ };
88
+
89
+ const combinedCleanup = async () => {
90
+ await Promise.all(
91
+ managers.filter((manager) => manager.cleanup).map((manager) => manager.cleanup!()),
92
+ );
93
+ };
94
+
95
+ queueManager = {
96
+ publisherMap: combinedPublisherMap,
97
+ sendMessage: combinedSendMessage,
98
+ connections: () => managers.flatMap((manager) => manager.connections()),
99
+ cleanup: combinedCleanup,
100
+ };
101
+ };
@@ -0,0 +1,20 @@
1
+ // Types
2
+ export type {
3
+ SubscriptionContext,
4
+ SubscriptionResult,
5
+ SubscriptionStrategy,
6
+ SubscriptionStrategyRegistry,
7
+ QueryEventEmitter,
8
+ DatabasePoller,
9
+ } from "./types";
10
+
11
+ // Strategy registry
12
+ export {
13
+ createSubscriptionStrategyRegistry,
14
+ getStrategyForSource,
15
+ createDatabaseSubscriptionStrategy,
16
+ createQueueSubscriptionStrategy,
17
+ } from "./strategies";
18
+
19
+ // Polling utilities
20
+ export { createDatabasePoller, type DatabasePollerConfig } from "./utils/polling";
@@ -0,0 +1,68 @@
1
+ import type { SubscriptionContext, SubscriptionResult, SubscriptionStrategy } from "../types";
2
+ import { EntitySource } from "../../types/resolver";
3
+ import { createDatabasePoller } from "../utils/polling";
4
+
5
+ /**
6
+ * Database subscription strategy - polls database for changes using hash comparison
7
+ *
8
+ * This strategy:
9
+ * 1. Manages connection registration with the event emitter
10
+ * 2. Creates a poller that executes the query periodically
11
+ * 3. Uses hash comparison to detect data changes
12
+ * 4. Only broadcasts updates when data has actually changed
13
+ */
14
+ export const createDatabaseSubscriptionStrategy = (): SubscriptionStrategy => ({
15
+ source: EntitySource.TABLE,
16
+
17
+ getSubscriptionKey(context) {
18
+ const { analysis } = context;
19
+ const operation = analysis.operations[0];
20
+ // Use operation name as the base key (existing behavior)
21
+ return operation.name ?? operation.fields[0]?.name ?? "unknown";
22
+ },
23
+
24
+ async subscribe(context: SubscriptionContext): Promise<SubscriptionResult> {
25
+ const {
26
+ ws,
27
+ subscriptionId,
28
+ analysis,
29
+ variableDefinitions,
30
+ variables,
31
+ schemaEntity,
32
+ eventEmitter,
33
+ } = context;
34
+
35
+ const subscriptionKey = this.getSubscriptionKey(context);
36
+
37
+ // Check if connection already exists - join existing subscription
38
+ if (eventEmitter.hasConnection(subscriptionKey)) {
39
+ eventEmitter.sendDataByQueryNameToSingleClient(subscriptionKey, ws, subscriptionId);
40
+ eventEmitter.addConnection(subscriptionKey, subscriptionId, ws);
41
+ return { alreadyExists: true };
42
+ }
43
+
44
+ // Register new connection
45
+ eventEmitter.addConnection(subscriptionKey, subscriptionId, ws);
46
+
47
+ // Create and start the poller
48
+ const poller = await createDatabasePoller({
49
+ analysis,
50
+ variableDefinitions,
51
+ variables,
52
+ schemaEntity,
53
+ subscriptionKey,
54
+ eventEmitter,
55
+ pollIntervalMs: 1000,
56
+ });
57
+
58
+ // Store poll reference for cleanup by event emitter
59
+ eventEmitter.setPoll(subscriptionKey, poller);
60
+
61
+ // Start polling
62
+ poller.start();
63
+
64
+ return {
65
+ cleanup: () => poller.stop(),
66
+ };
67
+ },
68
+ });
@@ -0,0 +1,38 @@
1
+ import type { SubscriptionStrategy, SubscriptionStrategyRegistry } from "../types";
2
+ import { EntitySource } from "../../types/resolver";
3
+ import { createDatabaseSubscriptionStrategy } from "./database";
4
+ import { createQueueSubscriptionStrategy } from "./queue";
5
+
6
+ /**
7
+ * Create and populate the subscription strategy registry
8
+ */
9
+ export const createSubscriptionStrategyRegistry = (): SubscriptionStrategyRegistry => {
10
+ const registry: SubscriptionStrategyRegistry = new Map();
11
+
12
+ // Register built-in strategies
13
+ const databaseStrategy = createDatabaseSubscriptionStrategy();
14
+ const queueStrategy = createQueueSubscriptionStrategy();
15
+
16
+ registry.set(EntitySource.TABLE, databaseStrategy);
17
+ registry.set(EntitySource.QUEUE_PUBLISHER, queueStrategy);
18
+
19
+ return registry;
20
+ };
21
+
22
+ /**
23
+ * Helper to get strategy by source, with fallback to database strategy
24
+ */
25
+ export const getStrategyForSource = (
26
+ registry: SubscriptionStrategyRegistry,
27
+ source: string | undefined,
28
+ ): SubscriptionStrategy | undefined => {
29
+ if (!source) {
30
+ // Default to database strategy for backward compatibility
31
+ return registry.get(EntitySource.TABLE);
32
+ }
33
+ return registry.get(source);
34
+ };
35
+
36
+ // Re-export individual strategies for testing or custom registration
37
+ export { createDatabaseSubscriptionStrategy } from "./database";
38
+ export { createQueueSubscriptionStrategy } from "./queue";
@@ -0,0 +1,61 @@
1
+ import type { SubscriptionContext, SubscriptionResult, SubscriptionStrategy } from "../types";
2
+ import { EntitySource } from "../../types/resolver";
3
+ import { filterResultBySelection } from "../../utils/selection";
4
+
5
+ /**
6
+ * Builds a composite subscription key from the field name, alias, and
7
+ * selections. Clients with the exact same query (including alias and
8
+ * requested fields) share a single connection group; any difference
9
+ * produces a distinct key and therefore its own group with its own
10
+ * responseKey and dataTransform.
11
+ */
12
+ const buildCompositeKey = (context: SubscriptionContext): string => {
13
+ const { field } = context;
14
+ return `${field.name}:${field.alias ?? ""}:${JSON.stringify(field.selections)}`;
15
+ };
16
+
17
+ /**
18
+ * Queue subscription strategy - leverages existing queue consumer infrastructure
19
+ *
20
+ * Queue subscriptions are push-based, unlike database subscriptions:
21
+ * - No polling needed - messages are pushed via the queue consumer
22
+ * - The queue consumer (kafka.ts/rabbitmq.ts) already calls queryEventEmitter.sendDataUpdate()
23
+ * - This strategy manages connection registration with the event emitter
24
+ */
25
+ export const createQueueSubscriptionStrategy = (): SubscriptionStrategy => ({
26
+ source: EntitySource.QUEUE_PUBLISHER,
27
+
28
+ getSubscriptionKey(context) {
29
+ return buildCompositeKey(context);
30
+ },
31
+
32
+ async subscribe(context: SubscriptionContext): Promise<SubscriptionResult> {
33
+ const { ws, subscriptionId, eventEmitter, field } = context;
34
+ const subscriptionKey = this.getSubscriptionKey(context);
35
+ // The field key is what queue consumers broadcast on (e.g. "conn_queueName")
36
+ const fieldKey = field.name;
37
+
38
+ // Check if connection already exists - join existing subscription group
39
+ if (eventEmitter.hasConnection(subscriptionKey)) {
40
+ eventEmitter.sendDataByQueryNameToSingleClient(subscriptionKey, ws, subscriptionId);
41
+ eventEmitter.addConnection(subscriptionKey, subscriptionId, ws);
42
+ return { alreadyExists: true };
43
+ }
44
+
45
+ // Register new connection group
46
+ eventEmitter.addConnection(subscriptionKey, subscriptionId, ws);
47
+ // Tie the composite key to the field key so sendDataUpdate fan-out works
48
+ eventEmitter.registerFieldMapping(fieldKey, subscriptionKey);
49
+ // Top-level response key (handles field alias)
50
+ eventEmitter.setResponseKey(subscriptionKey, field.alias || field.name);
51
+ // Apply selection filtering and nested alias mapping to each message
52
+ eventEmitter.setDataTransform(subscriptionKey, (data) =>
53
+ filterResultBySelection(data, field.selections),
54
+ );
55
+
56
+ return {
57
+ // No cleanup needed - queue consumers manage their own lifecycle
58
+ cleanup: undefined,
59
+ };
60
+ },
61
+ });
@@ -0,0 +1,74 @@
1
+ import type { ServerWebSocket } from "bun";
2
+ import type { AnalysisResult, SelectionAnalysis, VariableDefinition } from "../analyzeQuery/types";
3
+ import type { GetSchemaReturn } from "../configuration/getSchemas";
4
+ import type { createQueryEventEmitter } from "../utils/event-emitter";
5
+
6
+ /**
7
+ * Type for the query event emitter instance
8
+ */
9
+ export type QueryEventEmitter = ReturnType<typeof createQueryEventEmitter>;
10
+
11
+ /**
12
+ * Database poller interface - controls polling lifecycle
13
+ */
14
+ export interface DatabasePoller {
15
+ start(): Timer | undefined;
16
+ stop(): void;
17
+ }
18
+
19
+ /**
20
+ * Context provided to subscription strategy handlers
21
+ */
22
+ export interface SubscriptionContext {
23
+ /** The WebSocket connection */
24
+ ws: ServerWebSocket<unknown>;
25
+ /** Unique subscription ID from the client */
26
+ subscriptionId: string;
27
+ /** Analyzed GraphQL query */
28
+ analysis: AnalysisResult;
29
+ /** The first field being subscribed to */
30
+ field: SelectionAnalysis;
31
+ /** Variable definitions from the query */
32
+ variableDefinitions: VariableDefinition[];
33
+ /** Resolved variable values (after object flattening and $session.* replacement) */
34
+ variables: Record<string, unknown>;
35
+ /** Schema and entity information for the current role */
36
+ schemaEntity: GetSchemaReturn;
37
+ /** Shared event emitter for broadcasting updates */
38
+ eventEmitter: QueryEventEmitter;
39
+ }
40
+
41
+ /**
42
+ * Result of starting a subscription
43
+ */
44
+ export interface SubscriptionResult {
45
+ /** Cleanup function called when subscription ends */
46
+ cleanup?: () => void | Promise<void>;
47
+ /** True if subscription was joined to an existing connection (no new poll/consumer needed) */
48
+ alreadyExists?: boolean;
49
+ }
50
+
51
+ /**
52
+ * Strategy interface for handling different subscription sources
53
+ */
54
+ export interface SubscriptionStrategy {
55
+ /**
56
+ * Unique identifier for this strategy (matches EntitySource enum value)
57
+ */
58
+ readonly source: string;
59
+
60
+ /**
61
+ * Start the subscription and return a cleanup function
62
+ */
63
+ subscribe(context: SubscriptionContext): Promise<SubscriptionResult>;
64
+
65
+ /**
66
+ * Generate the unique subscription key for this subscription
67
+ */
68
+ getSubscriptionKey(context: SubscriptionContext): string;
69
+ }
70
+
71
+ /**
72
+ * Registry type for subscription strategies
73
+ */
74
+ export type SubscriptionStrategyRegistry = Map<string, SubscriptionStrategy>;