@ductape/sdk 0.0.4-v51 → 0.0.4-v52

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 (868) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/agent-context.d.ts +98 -0
  3. package/dist/agents/agent-context.js +588 -0
  4. package/dist/agents/agent-context.js.map +1 -0
  5. package/dist/agents/agent-executor.d.ts +180 -0
  6. package/dist/agents/agent-executor.js +715 -0
  7. package/dist/agents/agent-executor.js.map +1 -0
  8. package/dist/agents/agents.service.d.ts +304 -0
  9. package/dist/agents/agents.service.js +1244 -0
  10. package/dist/agents/agents.service.js.map +1 -0
  11. package/dist/agents/index.d.ts +55 -0
  12. package/dist/agents/index.js +110 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/memory-manager.d.ts +182 -0
  15. package/dist/agents/memory-manager.js +383 -0
  16. package/dist/agents/memory-manager.js.map +1 -0
  17. package/dist/agents/tool-registry.d.ts +141 -0
  18. package/dist/agents/tool-registry.js +355 -0
  19. package/dist/agents/tool-registry.js.map +1 -0
  20. package/dist/agents/types/agents.types.d.ts +1225 -0
  21. package/dist/agents/types/agents.types.js +12 -0
  22. package/dist/agents/types/agents.types.js.map +1 -0
  23. package/dist/agents/types/index.d.ts +6 -0
  24. package/dist/agents/types/index.js +23 -0
  25. package/dist/agents/types/index.js.map +1 -0
  26. package/dist/agents/vector-store-adapter.d.ts +108 -0
  27. package/dist/agents/vector-store-adapter.js +213 -0
  28. package/dist/agents/vector-store-adapter.js.map +1 -0
  29. package/dist/api/services/appApi.service.js +4 -5
  30. package/dist/api/services/appApi.service.js.map +1 -1
  31. package/dist/api/services/processorApi.service.d.ts +322 -0
  32. package/dist/api/services/processorApi.service.js +252 -0
  33. package/dist/api/services/processorApi.service.js.map +1 -1
  34. package/dist/api/services/productsApi.service.d.ts +69 -1
  35. package/dist/api/services/productsApi.service.js +67 -31
  36. package/dist/api/services/productsApi.service.js.map +1 -1
  37. package/dist/api/services/resilienceApi.service.d.ts +106 -0
  38. package/dist/api/services/resilienceApi.service.js +224 -0
  39. package/dist/api/services/resilienceApi.service.js.map +1 -0
  40. package/dist/api/services/secretsApi.service.d.ts +38 -0
  41. package/dist/api/services/secretsApi.service.js +96 -0
  42. package/dist/api/services/secretsApi.service.js.map +1 -0
  43. package/dist/api/services/userApi.service.js +0 -1
  44. package/dist/api/services/userApi.service.js.map +1 -1
  45. package/dist/api/services/workflowApi.service.d.ts +199 -0
  46. package/dist/api/services/workflowApi.service.js +183 -0
  47. package/dist/api/services/workflowApi.service.js.map +1 -0
  48. package/dist/api/services/workspaceApi.service.js +0 -1
  49. package/dist/api/services/workspaceApi.service.js.map +1 -1
  50. package/dist/api/urls.d.ts +57 -0
  51. package/dist/api/urls.js +68 -1
  52. package/dist/api/urls.js.map +1 -1
  53. package/dist/api/utils/cache.utils.js +4 -10
  54. package/dist/api/utils/cache.utils.js.map +1 -1
  55. package/dist/apps/services/app.service.d.ts +0 -10
  56. package/dist/apps/services/app.service.js +74 -30
  57. package/dist/apps/services/app.service.js.map +1 -1
  58. package/dist/apps/utils/auth-context-manager.d.ts +137 -0
  59. package/dist/apps/utils/auth-context-manager.js +248 -0
  60. package/dist/apps/utils/auth-context-manager.js.map +1 -0
  61. package/dist/apps/utils/credential-manager.d.ts +128 -0
  62. package/dist/apps/utils/credential-manager.js +199 -0
  63. package/dist/apps/utils/credential-manager.js.map +1 -0
  64. package/dist/apps/utils/index.d.ts +10 -0
  65. package/dist/apps/utils/index.js +54 -0
  66. package/dist/apps/utils/index.js.map +1 -0
  67. package/dist/apps/utils/input-helpers.d.ts +67 -0
  68. package/dist/apps/utils/input-helpers.js +185 -0
  69. package/dist/apps/utils/input-helpers.js.map +1 -0
  70. package/dist/apps/utils/input-resolver.d.ts +165 -0
  71. package/dist/apps/utils/input-resolver.js +477 -0
  72. package/dist/apps/utils/input-resolver.js.map +1 -0
  73. package/dist/apps/utils/oauth-manager.d.ts +196 -0
  74. package/dist/apps/utils/oauth-manager.js +405 -0
  75. package/dist/apps/utils/oauth-manager.js.map +1 -0
  76. package/dist/apps/validators/joi-validators/create.appWebhook.validator.d.ts +2 -1
  77. package/dist/apps/validators/joi-validators/create.appWebhook.validator.js +15 -2
  78. package/dist/apps/validators/joi-validators/create.appWebhook.validator.js.map +1 -1
  79. package/dist/apps/validators/joi-validators/update.appWebhook.validator.d.ts +2 -1
  80. package/dist/apps/validators/joi-validators/update.appWebhook.validator.js +14 -2
  81. package/dist/apps/validators/joi-validators/update.appWebhook.validator.js.map +1 -1
  82. package/dist/bin.d.ts +26 -0
  83. package/dist/bin.js +28 -0
  84. package/dist/bin.js.map +1 -0
  85. package/dist/brokers/brokers.service.d.ts +257 -0
  86. package/dist/brokers/brokers.service.js +604 -0
  87. package/dist/brokers/brokers.service.js.map +1 -0
  88. package/dist/brokers/index.d.ts +46 -0
  89. package/dist/brokers/index.js +83 -0
  90. package/dist/brokers/index.js.map +1 -0
  91. package/dist/brokers/types/index.d.ts +288 -0
  92. package/dist/brokers/types/index.js +8 -0
  93. package/dist/brokers/types/index.js.map +1 -0
  94. package/dist/brokers/utils/broker.util.d.ts +33 -0
  95. package/dist/brokers/utils/broker.util.js +125 -0
  96. package/dist/brokers/utils/broker.util.js.map +1 -0
  97. package/dist/brokers/utils/providers/aws-sqs.service.d.ts +16 -0
  98. package/dist/brokers/utils/providers/aws-sqs.service.js +71 -0
  99. package/dist/brokers/utils/providers/aws-sqs.service.js.map +1 -0
  100. package/dist/brokers/utils/providers/google-pubsub.service.d.ts +16 -0
  101. package/dist/brokers/utils/providers/google-pubsub.service.js +43 -0
  102. package/dist/brokers/utils/providers/google-pubsub.service.js.map +1 -0
  103. package/dist/brokers/utils/providers/index.d.ts +6 -0
  104. package/dist/brokers/utils/providers/index.js +16 -0
  105. package/dist/brokers/utils/providers/index.js.map +1 -0
  106. package/dist/brokers/utils/providers/kafka.service.d.ts +16 -0
  107. package/dist/brokers/utils/providers/kafka.service.js +52 -0
  108. package/dist/brokers/utils/providers/kafka.service.js.map +1 -0
  109. package/dist/brokers/utils/providers/nats.service.d.ts +18 -0
  110. package/dist/brokers/utils/providers/nats.service.js +63 -0
  111. package/dist/brokers/utils/providers/nats.service.js.map +1 -0
  112. package/dist/brokers/utils/providers/rabbitmq.service.d.ts +14 -0
  113. package/dist/brokers/utils/providers/rabbitmq.service.js +67 -0
  114. package/dist/brokers/utils/providers/rabbitmq.service.js.map +1 -0
  115. package/dist/brokers/utils/providers/redis.service.d.ts +18 -0
  116. package/dist/brokers/utils/providers/redis.service.js +93 -0
  117. package/dist/brokers/utils/providers/redis.service.js.map +1 -0
  118. package/dist/cache/cache.manager.d.ts +159 -0
  119. package/dist/cache/cache.manager.js +265 -0
  120. package/dist/cache/cache.manager.js.map +1 -0
  121. package/dist/cache/cache.service.d.ts +186 -0
  122. package/dist/cache/cache.service.js +437 -0
  123. package/dist/cache/cache.service.js.map +1 -0
  124. package/dist/cache/index.d.ts +52 -0
  125. package/dist/cache/index.js +79 -0
  126. package/dist/cache/index.js.map +1 -0
  127. package/dist/cache/types/index.d.ts +106 -0
  128. package/dist/cache/types/index.js +6 -0
  129. package/dist/cache/types/index.js.map +1 -0
  130. package/dist/database/actions/action-manager.d.ts +170 -0
  131. package/dist/database/actions/action-manager.js +465 -0
  132. package/dist/database/actions/action-manager.js.map +1 -0
  133. package/dist/database/actions/index.d.ts +6 -0
  134. package/dist/database/actions/index.js +13 -0
  135. package/dist/database/actions/index.js.map +1 -0
  136. package/dist/database/adapters/adapter.factory.d.ts +62 -0
  137. package/dist/database/adapters/adapter.factory.js +97 -0
  138. package/dist/database/adapters/adapter.factory.js.map +1 -0
  139. package/dist/database/adapters/base.adapter.d.ts +307 -90
  140. package/dist/database/adapters/base.adapter.js +139 -20
  141. package/dist/database/adapters/base.adapter.js.map +1 -1
  142. package/dist/database/adapters/cassandra.adapter.d.ts +90 -0
  143. package/dist/database/adapters/cassandra.adapter.js +1019 -0
  144. package/dist/database/adapters/cassandra.adapter.js.map +1 -0
  145. package/dist/database/adapters/dynamodb.adapter.d.ts +94 -77
  146. package/dist/database/adapters/dynamodb.adapter.js +1162 -1305
  147. package/dist/database/adapters/dynamodb.adapter.js.map +1 -1
  148. package/dist/database/adapters/index.d.ts +11 -0
  149. package/dist/database/adapters/index.js +27 -0
  150. package/dist/database/adapters/index.js.map +1 -0
  151. package/dist/database/adapters/mariadb.adapter.d.ts +100 -0
  152. package/dist/database/adapters/mariadb.adapter.js +247 -0
  153. package/dist/database/adapters/mariadb.adapter.js.map +1 -0
  154. package/dist/database/adapters/mongodb.adapter.d.ts +105 -57
  155. package/dist/database/adapters/mongodb.adapter.js +941 -838
  156. package/dist/database/adapters/mongodb.adapter.js.map +1 -1
  157. package/dist/database/adapters/mysql.adapter.d.ts +76 -138
  158. package/dist/database/adapters/mysql.adapter.js +990 -1246
  159. package/dist/database/adapters/mysql.adapter.js.map +1 -1
  160. package/dist/database/adapters/postgresql.adapter.d.ts +75 -139
  161. package/dist/database/adapters/postgresql.adapter.js +1076 -1346
  162. package/dist/database/adapters/postgresql.adapter.js.map +1 -1
  163. package/dist/database/databases.service.d.ts +1374 -0
  164. package/dist/database/databases.service.js +2680 -0
  165. package/dist/database/databases.service.js.map +1 -0
  166. package/dist/database/index.d.ts +41 -13
  167. package/dist/database/index.js +97 -86
  168. package/dist/database/index.js.map +1 -1
  169. package/dist/database/migrations/index.d.ts +6 -0
  170. package/dist/database/migrations/index.js +12 -0
  171. package/dist/database/migrations/index.js.map +1 -0
  172. package/dist/database/migrations/migration-engine.d.ts +132 -0
  173. package/dist/database/migrations/migration-engine.js +1356 -0
  174. package/dist/database/migrations/migration-engine.js.map +1 -0
  175. package/dist/database/operators/aggregation-builder.d.ts +64 -0
  176. package/dist/database/operators/aggregation-builder.js +746 -0
  177. package/dist/database/operators/aggregation-builder.js.map +1 -0
  178. package/dist/database/operators/index.d.ts +7 -0
  179. package/dist/database/operators/index.js +15 -0
  180. package/dist/database/operators/index.js.map +1 -0
  181. package/dist/database/operators/query-builder.d.ts +55 -0
  182. package/dist/database/operators/query-builder.js +365 -0
  183. package/dist/database/operators/query-builder.js.map +1 -0
  184. package/dist/database/presave/decrypt.d.ts +25 -0
  185. package/dist/database/presave/decrypt.js +146 -0
  186. package/dist/database/presave/decrypt.js.map +1 -0
  187. package/dist/database/presave/index.d.ts +9 -0
  188. package/dist/database/presave/index.js +18 -0
  189. package/dist/database/presave/index.js.map +1 -0
  190. package/dist/database/presave/presave-processor.d.ts +148 -0
  191. package/dist/database/presave/presave-processor.js +702 -0
  192. package/dist/database/presave/presave-processor.js.map +1 -0
  193. package/dist/database/schema/index.d.ts +7 -0
  194. package/dist/database/schema/index.js +13 -0
  195. package/dist/database/schema/index.js.map +1 -0
  196. package/dist/database/schema/schema-manager.d.ts +258 -0
  197. package/dist/database/schema/schema-manager.js +637 -0
  198. package/dist/database/schema/schema-manager.js.map +1 -0
  199. package/dist/database/transactions/index.d.ts +6 -0
  200. package/dist/database/transactions/index.js +13 -0
  201. package/dist/database/transactions/index.js.map +1 -0
  202. package/dist/database/transactions/transaction-manager.d.ts +113 -0
  203. package/dist/database/transactions/transaction-manager.js +344 -0
  204. package/dist/database/transactions/transaction-manager.js.map +1 -0
  205. package/dist/database/triggers/index.d.ts +7 -0
  206. package/dist/database/triggers/index.js +14 -0
  207. package/dist/database/triggers/index.js.map +1 -0
  208. package/dist/database/triggers/trigger-processor.d.ts +239 -0
  209. package/dist/database/triggers/trigger-processor.js +1034 -0
  210. package/dist/database/triggers/trigger-processor.js.map +1 -0
  211. package/dist/database/types/action.interface.d.ts +148 -0
  212. package/dist/database/types/action.interface.js +6 -0
  213. package/dist/database/types/action.interface.js.map +1 -0
  214. package/dist/database/types/aggregation.interface.d.ts +179 -0
  215. package/dist/database/types/aggregation.interface.js +6 -0
  216. package/dist/database/types/aggregation.interface.js.map +1 -0
  217. package/dist/database/types/connection.interface.d.ts +137 -0
  218. package/dist/database/types/connection.interface.js +6 -0
  219. package/dist/database/types/connection.interface.js.map +1 -0
  220. package/dist/database/types/enums.d.ts +195 -0
  221. package/dist/database/types/enums.js +244 -0
  222. package/dist/database/types/enums.js.map +1 -0
  223. package/dist/database/types/index.d.ts +12 -10
  224. package/dist/database/types/index.js +26 -32
  225. package/dist/database/types/index.js.map +1 -1
  226. package/dist/database/types/migration.interface.d.ts +686 -0
  227. package/dist/database/types/migration.interface.js +9 -0
  228. package/dist/database/types/migration.interface.js.map +1 -0
  229. package/dist/database/types/presave.interface.d.ts +292 -0
  230. package/dist/database/types/presave.interface.js +60 -0
  231. package/dist/database/types/presave.interface.js.map +1 -0
  232. package/dist/database/types/query.interface.d.ts +199 -0
  233. package/dist/database/types/query.interface.js +6 -0
  234. package/dist/database/types/query.interface.js.map +1 -0
  235. package/dist/database/types/schema.interface.d.ts +398 -0
  236. package/dist/database/types/schema.interface.js +6 -0
  237. package/dist/database/types/schema.interface.js.map +1 -0
  238. package/dist/database/types/transaction.interface.d.ts +84 -0
  239. package/dist/database/types/transaction.interface.js +6 -0
  240. package/dist/database/types/transaction.interface.js.map +1 -0
  241. package/dist/database/types/trigger.interface.d.ts +612 -0
  242. package/dist/database/types/trigger.interface.js +121 -0
  243. package/dist/database/types/trigger.interface.js.map +1 -0
  244. package/dist/database/types/write.interface.d.ts +208 -0
  245. package/dist/database/types/write.interface.js +6 -0
  246. package/dist/database/types/write.interface.js.map +1 -0
  247. package/dist/database/utils/database-error.d.ts +96 -0
  248. package/dist/database/utils/database-error.js +221 -0
  249. package/dist/database/utils/database-error.js.map +1 -0
  250. package/dist/database/utils/index.d.ts +6 -0
  251. package/dist/database/utils/index.js +11 -0
  252. package/dist/database/utils/index.js.map +1 -0
  253. package/dist/graph/adapters/adapter.factory.d.ts +47 -0
  254. package/dist/graph/adapters/adapter.factory.js +77 -0
  255. package/dist/graph/adapters/adapter.factory.js.map +1 -0
  256. package/dist/graph/adapters/arangodb.adapter.d.ts +78 -72
  257. package/dist/graph/adapters/arangodb.adapter.js +1310 -1220
  258. package/dist/graph/adapters/arangodb.adapter.js.map +1 -1
  259. package/dist/graph/adapters/base.adapter.d.ts +135 -118
  260. package/dist/graph/adapters/base.adapter.js +46 -20
  261. package/dist/graph/adapters/base.adapter.js.map +1 -1
  262. package/dist/graph/adapters/index.d.ts +5 -4
  263. package/dist/graph/adapters/index.js +6 -8
  264. package/dist/graph/adapters/index.js.map +1 -1
  265. package/dist/graph/adapters/memgraph.adapter.d.ts +98 -73
  266. package/dist/graph/adapters/memgraph.adapter.js +1050 -1202
  267. package/dist/graph/adapters/memgraph.adapter.js.map +1 -1
  268. package/dist/graph/adapters/neo4j.adapter.d.ts +71 -78
  269. package/dist/graph/adapters/neo4j.adapter.js +912 -1605
  270. package/dist/graph/adapters/neo4j.adapter.js.map +1 -1
  271. package/dist/graph/adapters/neptune.adapter.d.ts +76 -81
  272. package/dist/graph/adapters/neptune.adapter.js +1095 -1228
  273. package/dist/graph/adapters/neptune.adapter.js.map +1 -1
  274. package/dist/graph/graphs.service.d.ts +524 -0
  275. package/dist/graph/graphs.service.js +1683 -0
  276. package/dist/graph/graphs.service.js.map +1 -0
  277. package/dist/graph/index.d.ts +54 -8
  278. package/dist/graph/index.js +67 -32
  279. package/dist/graph/index.js.map +1 -1
  280. package/dist/graph/transactions/index.d.ts +4 -0
  281. package/dist/graph/transactions/index.js +9 -0
  282. package/dist/graph/transactions/index.js.map +1 -0
  283. package/dist/graph/transactions/transaction-manager.d.ts +61 -0
  284. package/dist/graph/transactions/transaction-manager.js +126 -0
  285. package/dist/graph/transactions/transaction-manager.js.map +1 -0
  286. package/dist/graph/types/connection.interface.d.ts +141 -0
  287. package/dist/graph/types/connection.interface.js +9 -0
  288. package/dist/graph/types/connection.interface.js.map +1 -0
  289. package/dist/graph/types/enums.d.ts +101 -0
  290. package/dist/graph/types/enums.js +114 -0
  291. package/dist/graph/types/enums.js.map +1 -0
  292. package/dist/graph/types/index.d.ts +11 -9
  293. package/dist/graph/types/index.js +15 -30
  294. package/dist/graph/types/index.js.map +1 -1
  295. package/dist/graph/types/node.interface.d.ts +248 -0
  296. package/dist/graph/types/node.interface.js +9 -0
  297. package/dist/graph/types/node.interface.js.map +1 -0
  298. package/dist/graph/types/query.interface.d.ts +168 -0
  299. package/dist/graph/types/query.interface.js +9 -0
  300. package/dist/graph/types/query.interface.js.map +1 -0
  301. package/dist/graph/types/relationship.interface.d.ts +207 -0
  302. package/dist/graph/types/relationship.interface.js +9 -0
  303. package/dist/graph/types/relationship.interface.js.map +1 -0
  304. package/dist/graph/types/schema.interface.d.ts +295 -0
  305. package/dist/graph/types/schema.interface.js +9 -0
  306. package/dist/graph/types/schema.interface.js.map +1 -0
  307. package/dist/graph/types/transaction.interface.d.ts +55 -0
  308. package/dist/graph/types/transaction.interface.js +9 -0
  309. package/dist/graph/types/transaction.interface.js.map +1 -0
  310. package/dist/graph/types/traversal.interface.d.ts +181 -0
  311. package/dist/graph/types/traversal.interface.js +9 -0
  312. package/dist/graph/types/traversal.interface.js.map +1 -0
  313. package/dist/graph/utils/graph-error.d.ts +71 -0
  314. package/dist/graph/utils/graph-error.js +142 -0
  315. package/dist/graph/utils/graph-error.js.map +1 -0
  316. package/dist/graph/utils/index.d.ts +4 -0
  317. package/dist/graph/utils/index.js +9 -0
  318. package/dist/graph/utils/index.js.map +1 -0
  319. package/dist/index.d.ts +1905 -875
  320. package/dist/index.js +3063 -1282
  321. package/dist/index.js.map +1 -1
  322. package/dist/init.interface.d.ts +407 -0
  323. package/dist/init.interface.js +3 -0
  324. package/dist/init.interface.js.map +1 -0
  325. package/dist/jobs/index.d.ts +38 -0
  326. package/dist/jobs/index.js +50 -0
  327. package/dist/jobs/index.js.map +1 -0
  328. package/dist/jobs/jobs.service.d.ts +154 -0
  329. package/dist/jobs/jobs.service.js +491 -0
  330. package/dist/jobs/jobs.service.js.map +1 -0
  331. package/dist/jobs/jobs.state.d.ts +113 -0
  332. package/dist/jobs/jobs.state.js +447 -0
  333. package/dist/jobs/jobs.state.js.map +1 -0
  334. package/dist/jobs/types.d.ts +449 -0
  335. package/dist/jobs/types.js +74 -0
  336. package/dist/jobs/types.js.map +1 -0
  337. package/dist/logs/logs.types.d.ts +12 -2
  338. package/dist/logs/logs.types.js +5 -1
  339. package/dist/logs/logs.types.js.map +1 -1
  340. package/dist/models/index.d.ts +6 -0
  341. package/dist/models/index.js +11 -0
  342. package/dist/models/index.js.map +1 -0
  343. package/dist/models/models.service.d.ts +137 -0
  344. package/dist/models/models.service.js +195 -0
  345. package/dist/models/models.service.js.map +1 -0
  346. package/dist/notifications/index.d.ts +13 -0
  347. package/dist/notifications/index.js +26 -0
  348. package/dist/notifications/index.js.map +1 -0
  349. package/dist/notifications/notifications.service.d.ts +252 -0
  350. package/dist/notifications/notifications.service.js +654 -0
  351. package/dist/notifications/notifications.service.js.map +1 -0
  352. package/dist/notifications/types/index.d.ts +4 -0
  353. package/dist/notifications/types/index.js +21 -0
  354. package/dist/notifications/types/index.js.map +1 -0
  355. package/dist/notifications/types/notifications.types.d.ts +400 -0
  356. package/dist/notifications/types/notifications.types.js +49 -0
  357. package/dist/notifications/types/notifications.types.js.map +1 -0
  358. package/dist/processor/services/messagebrokers/kafka.service.js +2 -0
  359. package/dist/processor/services/messagebrokers/kafka.service.js.map +1 -1
  360. package/dist/processor/services/messagebrokers/rabbitmq.service.d.ts +1 -9
  361. package/dist/processor/services/messagebrokers/rabbitmq.service.js +11 -40
  362. package/dist/processor/services/messagebrokers/rabbitmq.service.js.map +1 -1
  363. package/dist/processor/services/processor.service.d.ts +86 -70
  364. package/dist/processor/services/processor.service.js +1353 -1259
  365. package/dist/processor/services/processor.service.js.map +1 -1
  366. package/dist/processor/utils/processor.utils.js +5 -1
  367. package/dist/processor/utils/processor.utils.js.map +1 -1
  368. package/dist/products/services/products.service.d.ts +167 -25
  369. package/dist/products/services/products.service.js +1248 -412
  370. package/dist/products/services/products.service.js.map +1 -1
  371. package/dist/products/validators/index.d.ts +6 -3
  372. package/dist/products/validators/index.js +14 -5
  373. package/dist/products/validators/index.js.map +1 -1
  374. package/dist/products/validators/joi-validators/create.productAgent.validator.d.ts +3 -0
  375. package/dist/products/validators/joi-validators/create.productAgent.validator.js +218 -0
  376. package/dist/products/validators/joi-validators/create.productAgent.validator.js.map +1 -0
  377. package/dist/products/validators/joi-validators/create.productDatabase.validator.js +5 -0
  378. package/dist/products/validators/joi-validators/create.productDatabase.validator.js.map +1 -1
  379. package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.d.ts +4 -15
  380. package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.js +109 -501
  381. package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.js.map +1 -1
  382. package/dist/products/validators/joi-validators/create.productGraph.validator.js +14 -9
  383. package/dist/products/validators/joi-validators/create.productGraph.validator.js.map +1 -1
  384. package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js +0 -1
  385. package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js.map +1 -1
  386. package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js +87 -30
  387. package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js.map +1 -1
  388. package/dist/products/validators/joi-validators/create.productModel.validator.d.ts +3 -0
  389. package/dist/products/validators/joi-validators/create.productModel.validator.js +132 -0
  390. package/dist/products/validators/joi-validators/create.productModel.validator.js.map +1 -0
  391. package/dist/products/validators/joi-validators/create.productNotification.validator.js +135 -50
  392. package/dist/products/validators/joi-validators/create.productNotification.validator.js.map +1 -1
  393. package/dist/products/validators/joi-validators/create.productStorage.validator.js +77 -18
  394. package/dist/products/validators/joi-validators/create.productStorage.validator.js.map +1 -1
  395. package/dist/products/validators/joi-validators/create.productVector.validator.d.ts +3 -0
  396. package/dist/products/validators/joi-validators/create.productVector.validator.js +135 -0
  397. package/dist/products/validators/joi-validators/create.productVector.validator.js.map +1 -0
  398. package/dist/products/validators/joi-validators/update.productDatabase.validator.js +5 -0
  399. package/dist/products/validators/joi-validators/update.productDatabase.validator.js.map +1 -1
  400. package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.d.ts +0 -6
  401. package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.js +26 -28
  402. package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.js.map +1 -1
  403. package/dist/products/validators/joi-validators/update.productGraph.validator.js +11 -12
  404. package/dist/products/validators/joi-validators/update.productGraph.validator.js.map +1 -1
  405. package/dist/products/validators/joi-validators/update.productMessageBrokerTopic.validator.js +0 -1
  406. package/dist/products/validators/joi-validators/update.productMessageBrokerTopic.validator.js.map +1 -1
  407. package/dist/resilience/fallback.service.d.ts +88 -0
  408. package/dist/resilience/fallback.service.js +511 -0
  409. package/dist/resilience/fallback.service.js.map +1 -0
  410. package/dist/resilience/healthcheck.service.d.ts +106 -0
  411. package/dist/resilience/healthcheck.service.js +379 -0
  412. package/dist/resilience/healthcheck.service.js.map +1 -0
  413. package/dist/resilience/index.d.ts +104 -0
  414. package/dist/resilience/index.js +140 -0
  415. package/dist/resilience/index.js.map +1 -0
  416. package/dist/resilience/quota.service.d.ts +90 -0
  417. package/dist/resilience/quota.service.js +519 -0
  418. package/dist/resilience/quota.service.js.map +1 -0
  419. package/dist/resilience/resilience.service.d.ts +95 -0
  420. package/dist/resilience/resilience.service.js +525 -0
  421. package/dist/resilience/resilience.service.js.map +1 -0
  422. package/dist/resilience/types/index.d.ts +479 -0
  423. package/dist/resilience/types/index.js +26 -0
  424. package/dist/resilience/types/index.js.map +1 -0
  425. package/dist/secrets/index.d.ts +10 -0
  426. package/dist/secrets/index.js +33 -0
  427. package/dist/secrets/index.js.map +1 -0
  428. package/dist/secrets/secrets.resolver.d.ts +52 -0
  429. package/dist/secrets/secrets.resolver.js +233 -0
  430. package/dist/secrets/secrets.resolver.js.map +1 -0
  431. package/dist/secrets/secrets.service.d.ts +83 -0
  432. package/dist/secrets/secrets.service.js +159 -0
  433. package/dist/secrets/secrets.service.js.map +1 -0
  434. package/dist/secrets/secrets.types.d.ts +188 -0
  435. package/dist/secrets/secrets.types.js +87 -0
  436. package/dist/secrets/secrets.types.js.map +1 -0
  437. package/dist/sessions/index.d.ts +50 -0
  438. package/dist/sessions/index.js +93 -0
  439. package/dist/sessions/index.js.map +1 -0
  440. package/dist/sessions/sessions.helper.d.ts +68 -0
  441. package/dist/sessions/sessions.helper.js +116 -0
  442. package/dist/sessions/sessions.helper.js.map +1 -0
  443. package/dist/sessions/sessions.resolver.d.ts +150 -0
  444. package/dist/sessions/sessions.resolver.js +356 -0
  445. package/dist/sessions/sessions.resolver.js.map +1 -0
  446. package/dist/sessions/sessions.service.d.ts +170 -0
  447. package/dist/sessions/sessions.service.js +736 -0
  448. package/dist/sessions/sessions.service.js.map +1 -0
  449. package/dist/sessions/types/index.d.ts +290 -0
  450. package/dist/sessions/types/index.js +6 -0
  451. package/dist/sessions/types/index.js.map +1 -0
  452. package/dist/storage/index.d.ts +66 -0
  453. package/dist/storage/index.js +98 -0
  454. package/dist/storage/index.js.map +1 -0
  455. package/dist/storage/storage.service.d.ts +123 -0
  456. package/dist/storage/storage.service.js +478 -0
  457. package/dist/storage/storage.service.js.map +1 -0
  458. package/dist/storage/types/index.d.ts +207 -0
  459. package/dist/storage/types/index.js +6 -0
  460. package/dist/storage/types/index.js.map +1 -0
  461. package/dist/storage/utils/storage.util.d.ts +51 -0
  462. package/dist/storage/utils/storage.util.js +402 -0
  463. package/dist/storage/utils/storage.util.js.map +1 -0
  464. package/dist/test/index.d.ts +3 -0
  465. package/dist/test/index.js +13 -0
  466. package/dist/test/index.js.map +1 -0
  467. package/dist/test/test.appBuilder.d.ts +0 -1
  468. package/dist/test/test.appBuilder.js +0 -15
  469. package/dist/test/test.appBuilder.js.map +1 -1
  470. package/dist/test/test.database.js +140 -0
  471. package/dist/test/test.database.js.map +1 -0
  472. package/dist/test/test.health.d.ts +0 -1
  473. package/dist/test/test.health.js +0 -48
  474. package/dist/test/test.health.js.map +1 -1
  475. package/dist/test/test.import.d.ts +0 -1
  476. package/dist/test/test.import.js +0 -1506
  477. package/dist/test/test.import.js.map +1 -1
  478. package/dist/test/test.import.openapi.d.ts +0 -1
  479. package/dist/test/test.import.openapi.js +0 -75
  480. package/dist/test/test.import.openapi.js.map +1 -1
  481. package/dist/test/test.imports.d.ts +0 -1
  482. package/dist/test/test.imports.js +0 -76
  483. package/dist/test/test.imports.js.map +1 -1
  484. package/dist/test/test.logs.d.ts +0 -1
  485. package/dist/test/test.logs.js +0 -17
  486. package/dist/test/test.logs.js.map +1 -1
  487. package/dist/test/test.notifiers.d.ts +0 -1
  488. package/dist/test/test.notifiers.js +0 -84
  489. package/dist/test/test.notifiers.js.map +1 -1
  490. package/dist/test/test.processor.d.ts +0 -1
  491. package/dist/test/test.processor.js +0 -37
  492. package/dist/test/test.processor.js.map +1 -1
  493. package/dist/test/test.productBuilder.d.ts +0 -1
  494. package/dist/test/test.productBuilder.js +0 -660
  495. package/dist/test/test.productBuilder.js.map +1 -1
  496. package/dist/test/test.products.d.ts +0 -1
  497. package/dist/test/test.products.js +0 -48
  498. package/dist/test/test.products.js.map +1 -1
  499. package/dist/test/test.storage.js +332 -0
  500. package/dist/test/test.storage.js.map +1 -0
  501. package/dist/test/test.triggers.js +314 -0
  502. package/dist/test/test.triggers.js.map +1 -0
  503. package/dist/types/appBuilder.types.d.ts +1 -1
  504. package/dist/types/enums.d.ts +6 -1
  505. package/dist/types/enums.js +5 -0
  506. package/dist/types/enums.js.map +1 -1
  507. package/dist/types/processor.types.d.ts +197 -35
  508. package/dist/types/processor.types.js +9 -1
  509. package/dist/types/processor.types.js.map +1 -1
  510. package/dist/types/productsBuilder.types.d.ts +837 -75
  511. package/dist/types/productsBuilder.types.js +168 -62
  512. package/dist/types/productsBuilder.types.js.map +1 -1
  513. package/dist/utils/index.d.ts +0 -2
  514. package/dist/utils/index.js +2 -49
  515. package/dist/utils/index.js.map +1 -1
  516. package/dist/vector/adapters/base.adapter.d.ts +152 -0
  517. package/dist/vector/adapters/base.adapter.js +137 -0
  518. package/dist/vector/adapters/base.adapter.js.map +1 -0
  519. package/dist/vector/adapters/index.d.ts +10 -0
  520. package/dist/vector/adapters/index.js +19 -0
  521. package/dist/vector/adapters/index.js.map +1 -0
  522. package/dist/vector/adapters/memory.adapter.d.ts +85 -0
  523. package/dist/vector/adapters/memory.adapter.js +505 -0
  524. package/dist/vector/adapters/memory.adapter.js.map +1 -0
  525. package/dist/vector/adapters/pinecone.adapter.d.ts +52 -0
  526. package/dist/vector/adapters/pinecone.adapter.js +400 -0
  527. package/dist/vector/adapters/pinecone.adapter.js.map +1 -0
  528. package/dist/vector/adapters/qdrant.adapter.d.ts +56 -0
  529. package/dist/vector/adapters/qdrant.adapter.js +392 -0
  530. package/dist/vector/adapters/qdrant.adapter.js.map +1 -0
  531. package/dist/vector/adapters/weaviate.adapter.d.ts +64 -0
  532. package/dist/vector/adapters/weaviate.adapter.js +478 -0
  533. package/dist/vector/adapters/weaviate.adapter.js.map +1 -0
  534. package/dist/vector/index.d.ts +47 -0
  535. package/dist/vector/index.js +72 -0
  536. package/dist/vector/index.js.map +1 -0
  537. package/dist/vector/types/connection.interface.d.ts +151 -0
  538. package/dist/vector/types/connection.interface.js +8 -0
  539. package/dist/vector/types/connection.interface.js.map +1 -0
  540. package/dist/vector/types/embedding.interface.d.ts +144 -0
  541. package/dist/vector/types/embedding.interface.js +8 -0
  542. package/dist/vector/types/embedding.interface.js.map +1 -0
  543. package/dist/vector/types/enums.d.ts +104 -0
  544. package/dist/vector/types/enums.js +113 -0
  545. package/dist/vector/types/enums.js.map +1 -0
  546. package/dist/vector/types/index.d.ts +9 -0
  547. package/dist/vector/types/index.js +16 -0
  548. package/dist/vector/types/index.js.map +1 -0
  549. package/dist/vector/types/vector.interface.d.ts +315 -0
  550. package/dist/vector/types/vector.interface.js +8 -0
  551. package/dist/vector/types/vector.interface.js.map +1 -0
  552. package/dist/vector/utils/index.d.ts +6 -0
  553. package/dist/vector/utils/index.js +11 -0
  554. package/dist/vector/utils/index.js.map +1 -0
  555. package/dist/vector/utils/vector-error.d.ts +69 -0
  556. package/dist/vector/utils/vector-error.js +117 -0
  557. package/dist/vector/utils/vector-error.js.map +1 -0
  558. package/dist/vector/vector-database.service.d.ts +405 -0
  559. package/dist/vector/vector-database.service.js +544 -0
  560. package/dist/vector/vector-database.service.js.map +1 -0
  561. package/dist/vector/vector.service.d.ts +245 -0
  562. package/dist/vector/vector.service.js +381 -0
  563. package/dist/vector/vector.service.js.map +1 -0
  564. package/dist/workflows/index.d.ts +30 -0
  565. package/dist/workflows/index.js +64 -0
  566. package/dist/workflows/index.js.map +1 -0
  567. package/dist/workflows/types/index.d.ts +6 -0
  568. package/dist/workflows/types/index.js +23 -0
  569. package/dist/workflows/types/index.js.map +1 -0
  570. package/dist/workflows/types/workflows.types.d.ts +1035 -0
  571. package/dist/workflows/types/workflows.types.js +13 -0
  572. package/dist/workflows/types/workflows.types.js.map +1 -0
  573. package/dist/workflows/workflow-builder.d.ts +70 -0
  574. package/dist/workflows/workflow-builder.js +338 -0
  575. package/dist/workflows/workflow-builder.js.map +1 -0
  576. package/dist/workflows/workflow-executor.d.ts +205 -0
  577. package/dist/workflows/workflow-executor.js +1186 -0
  578. package/dist/workflows/workflow-executor.js.map +1 -0
  579. package/dist/workflows/workflows.service.d.ts +398 -0
  580. package/dist/workflows/workflows.service.js +1595 -0
  581. package/dist/workflows/workflows.service.js.map +1 -0
  582. package/package.json +16 -13
  583. package/dist/actions/actions.repo.d.ts +0 -0
  584. package/dist/actions/actions.repo.js +0 -13
  585. package/dist/actions/actions.repo.js.map +0 -1
  586. package/dist/actions/actions.service.d.ts +0 -0
  587. package/dist/actions/actions.service.js +0 -24
  588. package/dist/actions/actions.service.js.map +0 -1
  589. package/dist/actions/utils/actions.util.read.d.ts +0 -0
  590. package/dist/actions/utils/actions.util.read.js +0 -427
  591. package/dist/actions/utils/actions.util.read.js.map +0 -1
  592. package/dist/api/services/integrationsApi.service.d.ts +0 -18
  593. package/dist/api/services/integrationsApi.service.js +0 -80
  594. package/dist/api/services/integrationsApi.service.js.map +0 -1
  595. package/dist/api/services/workspaceSecretsApi.service.d.ts +0 -75
  596. package/dist/api/services/workspaceSecretsApi.service.js +0 -62
  597. package/dist/api/services/workspaceSecretsApi.service.js.map +0 -1
  598. package/dist/appBuilder/services/app.service.d.ts +0 -111
  599. package/dist/appBuilder/services/app.service.js +0 -737
  600. package/dist/appBuilder/services/app.service.js.map +0 -1
  601. package/dist/appBuilder/services/appBuilder.service.d.ts +0 -111
  602. package/dist/appBuilder/services/appBuilder.service.js +0 -662
  603. package/dist/appBuilder/services/appBuilder.service.js.map +0 -1
  604. package/dist/appBuilder/utils/objects.utils.d.ts +0 -3
  605. package/dist/appBuilder/utils/objects.utils.js +0 -9
  606. package/dist/appBuilder/utils/objects.utils.js.map +0 -1
  607. package/dist/appBuilder/utils/string.utils.d.ts +0 -2
  608. package/dist/appBuilder/utils/string.utils.js +0 -57
  609. package/dist/appBuilder/utils/string.utils.js.map +0 -1
  610. package/dist/appBuilder/validators/index.d.ts +0 -19
  611. package/dist/appBuilder/validators/index.js +0 -40
  612. package/dist/appBuilder/validators/index.js.map +0 -1
  613. package/dist/appBuilder/validators/joi-validators/create.app.validator.d.ts +0 -3
  614. package/dist/appBuilder/validators/joi-validators/create.app.validator.js +0 -10
  615. package/dist/appBuilder/validators/joi-validators/create.app.validator.js.map +0 -1
  616. package/dist/appBuilder/validators/joi-validators/create.appAction.validator.d.ts +0 -4
  617. package/dist/appBuilder/validators/joi-validators/create.appAction.validator.js +0 -20
  618. package/dist/appBuilder/validators/joi-validators/create.appAction.validator.js.map +0 -1
  619. package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.d.ts +0 -7
  620. package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.js +0 -44
  621. package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.js.map +0 -1
  622. package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.d.ts +0 -3
  623. package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.js +0 -31
  624. package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.js.map +0 -1
  625. package/dist/appBuilder/validators/joi-validators/create.appBody.validators.d.ts +0 -4
  626. package/dist/appBuilder/validators/joi-validators/create.appBody.validators.js +0 -11
  627. package/dist/appBuilder/validators/joi-validators/create.appBody.validators.js.map +0 -1
  628. package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.d.ts +0 -4
  629. package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.js +0 -12
  630. package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.js.map +0 -1
  631. package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.d.ts +0 -4
  632. package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.js +0 -17
  633. package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.js.map +0 -1
  634. package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.d.ts +0 -5
  635. package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.js +0 -30
  636. package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.js.map +0 -1
  637. package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.d.ts +0 -4
  638. package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.js +0 -14
  639. package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.js.map +0 -1
  640. package/dist/appBuilder/validators/joi-validators/sample.validator.d.ts +0 -5
  641. package/dist/appBuilder/validators/joi-validators/sample.validator.js +0 -26
  642. package/dist/appBuilder/validators/joi-validators/sample.validator.js.map +0 -1
  643. package/dist/appBuilder/validators/joi-validators/update.app.validator.d.ts +0 -4
  644. package/dist/appBuilder/validators/joi-validators/update.app.validator.js +0 -34
  645. package/dist/appBuilder/validators/joi-validators/update.app.validator.js.map +0 -1
  646. package/dist/appBuilder/validators/joi-validators/update.appAction.validator.d.ts +0 -4
  647. package/dist/appBuilder/validators/joi-validators/update.appAction.validator.js +0 -23
  648. package/dist/appBuilder/validators/joi-validators/update.appAction.validator.js.map +0 -1
  649. package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.d.ts +0 -3
  650. package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.js +0 -21
  651. package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.js.map +0 -1
  652. package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.d.ts +0 -4
  653. package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.js +0 -19
  654. package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.js.map +0 -1
  655. package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.d.ts +0 -4
  656. package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.js +0 -12
  657. package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.js.map +0 -1
  658. package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.d.ts +0 -4
  659. package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.js +0 -17
  660. package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.js.map +0 -1
  661. package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.d.ts +0 -4
  662. package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.js +0 -16
  663. package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.js.map +0 -1
  664. package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.d.ts +0 -4
  665. package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.js +0 -14
  666. package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.js.map +0 -1
  667. package/dist/appBuilder/validators/joi-validators/update.validation.entityData.validator.d.ts +0 -3
  668. package/dist/appBuilder/validators/joi-validators/update.validation.entityData.validator.js +0 -27
  669. package/dist/appBuilder/validators/joi-validators/update.validation.entityData.validator.js.map +0 -1
  670. package/dist/apps/validators/joi-validators/create.appEvent.validator.d.ts +0 -5
  671. package/dist/apps/validators/joi-validators/create.appEvent.validator.js +0 -30
  672. package/dist/apps/validators/joi-validators/create.appEvent.validator.js.map +0 -1
  673. package/dist/apps/validators/joi-validators/update.appEvent.validator.d.ts +0 -4
  674. package/dist/apps/validators/joi-validators/update.appEvent.validator.js +0 -16
  675. package/dist/apps/validators/joi-validators/update.appEvent.validator.js.map +0 -1
  676. package/dist/clients/integrations.client.d.ts +0 -2
  677. package/dist/clients/integrations.client.js +0 -26
  678. package/dist/clients/integrations.client.js.map +0 -1
  679. package/dist/database/database.service.d.ts +0 -232
  680. package/dist/database/database.service.js +0 -802
  681. package/dist/database/database.service.js.map +0 -1
  682. package/dist/database/types/aggregation.types.d.ts +0 -261
  683. package/dist/database/types/aggregation.types.js +0 -21
  684. package/dist/database/types/aggregation.types.js.map +0 -1
  685. package/dist/database/types/connection.types.d.ts +0 -132
  686. package/dist/database/types/connection.types.js +0 -6
  687. package/dist/database/types/connection.types.js.map +0 -1
  688. package/dist/database/types/database.types.d.ts +0 -175
  689. package/dist/database/types/database.types.js +0 -75
  690. package/dist/database/types/database.types.js.map +0 -1
  691. package/dist/database/types/index.types.d.ts +0 -220
  692. package/dist/database/types/index.types.js +0 -27
  693. package/dist/database/types/index.types.js.map +0 -1
  694. package/dist/database/types/migration.types.d.ts +0 -205
  695. package/dist/database/types/migration.types.js +0 -44
  696. package/dist/database/types/migration.types.js.map +0 -1
  697. package/dist/database/types/query.types.d.ts +0 -305
  698. package/dist/database/types/query.types.js +0 -57
  699. package/dist/database/types/query.types.js.map +0 -1
  700. package/dist/database/types/result.types.d.ts +0 -220
  701. package/dist/database/types/result.types.js +0 -6
  702. package/dist/database/types/result.types.js.map +0 -1
  703. package/dist/database/types/schema.types.d.ts +0 -190
  704. package/dist/database/types/schema.types.js +0 -69
  705. package/dist/database/types/schema.types.js.map +0 -1
  706. package/dist/database/utils/helpers.d.ts +0 -66
  707. package/dist/database/utils/helpers.js +0 -501
  708. package/dist/database/utils/helpers.js.map +0 -1
  709. package/dist/database/utils/migration.utils.d.ts +0 -151
  710. package/dist/database/utils/migration.utils.js +0 -476
  711. package/dist/database/utils/migration.utils.js.map +0 -1
  712. package/dist/database/utils/transaction.d.ts +0 -64
  713. package/dist/database/utils/transaction.js +0 -130
  714. package/dist/database/utils/transaction.js.map +0 -1
  715. package/dist/database/validators/connection.validator.d.ts +0 -20
  716. package/dist/database/validators/connection.validator.js +0 -267
  717. package/dist/database/validators/connection.validator.js.map +0 -1
  718. package/dist/database/validators/query.validator.d.ts +0 -31
  719. package/dist/database/validators/query.validator.js +0 -305
  720. package/dist/database/validators/query.validator.js.map +0 -1
  721. package/dist/database/validators/schema.validator.d.ts +0 -31
  722. package/dist/database/validators/schema.validator.js +0 -334
  723. package/dist/database/validators/schema.validator.js.map +0 -1
  724. package/dist/graph/graph.service.d.ts +0 -278
  725. package/dist/graph/graph.service.js +0 -687
  726. package/dist/graph/graph.service.js.map +0 -1
  727. package/dist/graph/types/connection.types.d.ts +0 -158
  728. package/dist/graph/types/connection.types.js +0 -43
  729. package/dist/graph/types/connection.types.js.map +0 -1
  730. package/dist/graph/types/graph.types.d.ts +0 -144
  731. package/dist/graph/types/graph.types.js +0 -84
  732. package/dist/graph/types/graph.types.js.map +0 -1
  733. package/dist/graph/types/node.types.d.ts +0 -193
  734. package/dist/graph/types/node.types.js +0 -49
  735. package/dist/graph/types/node.types.js.map +0 -1
  736. package/dist/graph/types/path.types.d.ts +0 -224
  737. package/dist/graph/types/path.types.js +0 -38
  738. package/dist/graph/types/path.types.js.map +0 -1
  739. package/dist/graph/types/query.types.d.ts +0 -247
  740. package/dist/graph/types/query.types.js +0 -23
  741. package/dist/graph/types/query.types.js.map +0 -1
  742. package/dist/graph/types/relationship.types.d.ts +0 -224
  743. package/dist/graph/types/relationship.types.js +0 -35
  744. package/dist/graph/types/relationship.types.js.map +0 -1
  745. package/dist/graph/types/result.types.d.ts +0 -237
  746. package/dist/graph/types/result.types.js +0 -7
  747. package/dist/graph/types/result.types.js.map +0 -1
  748. package/dist/graph/validators/index.d.ts +0 -81
  749. package/dist/graph/validators/index.js +0 -243
  750. package/dist/graph/validators/index.js.map +0 -1
  751. package/dist/integrationsBuilder/services/integration.service.d.ts +0 -138
  752. package/dist/integrationsBuilder/services/integration.service.js +0 -1148
  753. package/dist/integrationsBuilder/services/integration.service.js.map +0 -1
  754. package/dist/integrationsBuilder/services/integrationBuilder.service.d.ts +0 -130
  755. package/dist/integrationsBuilder/services/integrationBuilder.service.js +0 -1017
  756. package/dist/integrationsBuilder/services/integrationBuilder.service.js.map +0 -1
  757. package/dist/integrationsBuilder/utils/objects.utils.d.ts +0 -2
  758. package/dist/integrationsBuilder/utils/objects.utils.js +0 -48
  759. package/dist/integrationsBuilder/utils/objects.utils.js.map +0 -1
  760. package/dist/integrationsBuilder/utils/string.utils.d.ts +0 -1
  761. package/dist/integrationsBuilder/utils/string.utils.js +0 -9
  762. package/dist/integrationsBuilder/utils/string.utils.js.map +0 -1
  763. package/dist/integrationsBuilder/validators/index.d.ts +0 -18
  764. package/dist/integrationsBuilder/validators/index.js +0 -38
  765. package/dist/integrationsBuilder/validators/index.js.map +0 -1
  766. package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.d.ts +0 -3
  767. package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.js +0 -10
  768. package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.js.map +0 -1
  769. package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.d.ts +0 -4
  770. package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.js +0 -26
  771. package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.js.map +0 -1
  772. package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.d.ts +0 -3
  773. package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.js +0 -8
  774. package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.js.map +0 -1
  775. package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.d.ts +0 -3
  776. package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.js +0 -8
  777. package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.js.map +0 -1
  778. package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.d.ts +0 -3
  779. package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.js +0 -10
  780. package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.js.map +0 -1
  781. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.d.ts +0 -3
  782. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.js +0 -60
  783. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.js.map +0 -1
  784. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.d.ts +0 -3
  785. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.js +0 -8
  786. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.js.map +0 -1
  787. package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.d.ts +0 -3
  788. package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.js +0 -8
  789. package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.js.map +0 -1
  790. package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.d.ts +0 -3
  791. package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.js +0 -8
  792. package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.js.map +0 -1
  793. package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.d.ts +0 -3
  794. package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.js +0 -9
  795. package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.js.map +0 -1
  796. package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.d.ts +0 -3
  797. package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.js +0 -8
  798. package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.js.map +0 -1
  799. package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.d.ts +0 -3
  800. package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.js +0 -8
  801. package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.js.map +0 -1
  802. package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.d.ts +0 -3
  803. package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.js +0 -8
  804. package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.js.map +0 -1
  805. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.d.ts +0 -3
  806. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.js +0 -8
  807. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.js.map +0 -1
  808. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.d.ts +0 -3
  809. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.js +0 -8
  810. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.js.map +0 -1
  811. package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.d.ts +0 -3
  812. package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.js +0 -8
  813. package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.js.map +0 -1
  814. package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.d.ts +0 -3
  815. package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.js +0 -8
  816. package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.js.map +0 -1
  817. package/dist/postman.d.ts +0 -1
  818. package/dist/postman.js +0 -21674
  819. package/dist/postman.js.map +0 -1
  820. package/dist/processor/utils/mongo.util.d.ts +0 -0
  821. package/dist/processor/utils/mongo.util.js +0 -152
  822. package/dist/processor/utils/mongo.util.js.map +0 -1
  823. package/dist/processor/utils/postgres.util.d.ts +0 -14
  824. package/dist/processor/utils/postgres.util.js +0 -83
  825. package/dist/processor/utils/postgres.util.js.map +0 -1
  826. package/dist/products/services/utils/crypt.utils.d.ts +0 -1
  827. package/dist/products/services/utils/crypt.utils.js +0 -17
  828. package/dist/products/services/utils/crypt.utils.js.map +0 -1
  829. package/dist/products/services/utils/functions.utils.d.ts +0 -13
  830. package/dist/products/services/utils/functions.utils.js +0 -289
  831. package/dist/products/services/utils/functions.utils.js.map +0 -1
  832. package/dist/products/services/utils/objects.utils.d.ts +0 -13
  833. package/dist/products/services/utils/objects.utils.js +0 -89
  834. package/dist/products/services/utils/objects.utils.js.map +0 -1
  835. package/dist/products/services/utils/string.utils.d.ts +0 -12
  836. package/dist/products/services/utils/string.utils.js +0 -168
  837. package/dist/products/services/utils/string.utils.js.map +0 -1
  838. package/dist/products/validators/joi-validators/create.product.validator.d.ts +0 -3
  839. package/dist/products/validators/joi-validators/create.product.validator.js +0 -10
  840. package/dist/products/validators/joi-validators/create.product.validator.js.map +0 -1
  841. package/dist/products/validators/joi-validators/create.productGraphAction.validator.d.ts +0 -14
  842. package/dist/products/validators/joi-validators/create.productGraphAction.validator.js +0 -696
  843. package/dist/products/validators/joi-validators/create.productGraphAction.validator.js.map +0 -1
  844. package/dist/products/validators/joi-validators/update.productGraphAction.validator.d.ts +0 -7
  845. package/dist/products/validators/joi-validators/update.productGraphAction.validator.js +0 -72
  846. package/dist/products/validators/joi-validators/update.productGraphAction.validator.js.map +0 -1
  847. package/dist/test.appBuilder.js +0 -14
  848. package/dist/test.appBuilder.js.map +0 -1
  849. package/dist/test.import.d.ts +0 -0
  850. package/dist/test.import.js +0 -24
  851. package/dist/test.import.js.map +0 -1
  852. package/dist/test.imports.js +0 -28
  853. package/dist/test.imports.js.map +0 -1
  854. package/dist/test.integrationBuilder.js +0 -276
  855. package/dist/test.integrationBuilder.js.map +0 -1
  856. package/dist/test.processor.d.ts +0 -1
  857. package/dist/test.processor.js +0 -23
  858. package/dist/test.processor.js.map +0 -1
  859. package/dist/test.utils.d.ts +0 -1
  860. package/dist/test.utils.js +0 -25
  861. package/dist/test.utils.js.map +0 -1
  862. package/dist/tsconfig.tsbuildinfo +0 -1
  863. package/dist/types/integrationsBuilder.types.d.ts +0 -276
  864. package/dist/types/integrationsBuilder.types.js +0 -51
  865. package/dist/types/integrationsBuilder.types.js.map +0 -1
  866. /package/dist/{test.appBuilder.d.ts → test/test.database.d.ts} +0 -0
  867. /package/dist/{test.imports.d.ts → test/test.storage.d.ts} +0 -0
  868. /package/dist/{test.integrationBuilder.d.ts → test/test.triggers.d.ts} +0 -0
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
2
  /**
3
- * MongoDB Database Adapter
4
- * Implements database operations for MongoDB
3
+ * MongoDB Adapter
4
+ *
5
+ * Database adapter for MongoDB databases using the 'mongodb' driver.
6
+ * Implements all methods from BaseAdapter with MongoDB-specific operations.
7
+ *
8
+ * Note: MongoDB uses collections instead of tables, and documents instead of rows.
9
+ * The adapter translates SQL-like operations to MongoDB operations.
5
10
  */
6
11
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
12
  if (k2 === undefined) k2 = k;
@@ -36,1036 +41,1134 @@ var __importStar = (this && this.__importStar) || (function () {
36
41
  return result;
37
42
  };
38
43
  })();
39
- var __rest = (this && this.__rest) || function (s, e) {
40
- var t = {};
41
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
42
- t[p] = s[p];
43
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
44
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
45
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
46
- t[p[i]] = s[p[i]];
47
- }
48
- return t;
49
- };
50
44
  Object.defineProperty(exports, "__esModule", { value: true });
51
45
  exports.MongoDBAdapter = void 0;
52
46
  const base_adapter_1 = require("./base.adapter");
53
- const database_types_1 = require("../types/database.types");
54
- const uuid_1 = require("uuid");
55
- const query_types_1 = require("../types/query.types");
47
+ const enums_1 = require("../types/enums");
48
+ const database_error_1 = require("../utils/database-error");
56
49
  /**
57
- * MongoDB Connection wrapper
50
+ * MongoDB database adapter
51
+ * Provides MongoDB-specific implementations for all database operations
58
52
  */
59
- class MongoDBConnection {
60
- constructor(id, client, db) {
61
- this.id = id;
62
- this.type = database_types_1.DatabaseType.MONGODB;
63
- this.status = database_types_1.ConnectionStatus.CONNECTED;
64
- this.client = client;
65
- this.db = db;
66
- }
67
- async connect() {
68
- var _a;
69
- if (this.client && !((_a = this.client.topology) === null || _a === void 0 ? void 0 : _a.isConnected())) {
70
- await this.client.connect();
71
- this.status = database_types_1.ConnectionStatus.CONNECTED;
72
- }
73
- }
74
- async disconnect() {
75
- if (this.client) {
76
- await this.client.close();
77
- this.status = database_types_1.ConnectionStatus.DISCONNECTED;
78
- }
79
- }
80
- isConnected() {
81
- var _a, _b;
82
- return this.status === database_types_1.ConnectionStatus.CONNECTED && ((_b = (_a = this.client) === null || _a === void 0 ? void 0 : _a.topology) === null || _b === void 0 ? void 0 : _b.isConnected());
83
- }
84
- getClient() {
85
- return this.db;
86
- }
87
- getMongoClient() {
88
- return this.client;
89
- }
90
- }
91
- /**
92
- * MongoDB Transaction implementation
93
- * Note: MongoDB uses sessions for transactions and does NOT support savepoints
94
- */
95
- class MongoDBTransaction {
96
- constructor(connection, session, options) {
97
- this.id = (0, uuid_1.v4)();
98
- this.connection = connection;
99
- this.status = database_types_1.TransactionStatus.ACTIVE;
100
- this.isolationLevel = options === null || options === void 0 ? void 0 : options.isolationLevel;
101
- this.createdAt = new Date();
102
- this.session = session;
103
- this.native = session;
104
- }
105
- async commit() {
106
- if (this.status !== database_types_1.TransactionStatus.ACTIVE) {
107
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.TRANSACTION_ERROR, `Cannot commit transaction: status is ${this.status}`);
108
- }
109
- await this.session.commitTransaction();
110
- await this.session.endSession();
111
- this.status = database_types_1.TransactionStatus.COMMITTED;
112
- }
113
- async rollback() {
114
- if (this.status !== database_types_1.TransactionStatus.ACTIVE) {
115
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.TRANSACTION_ERROR, `Cannot rollback transaction: status is ${this.status}`);
116
- }
117
- await this.session.abortTransaction();
118
- await this.session.endSession();
119
- this.status = database_types_1.TransactionStatus.ROLLED_BACK;
120
- }
121
- async savepoint(_name) {
122
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.NOT_SUPPORTED, 'MongoDB does not support savepoints. Transactions are atomic - either all changes commit or all rollback.');
123
- }
124
- isActive() {
125
- return this.status === database_types_1.TransactionStatus.ACTIVE;
126
- }
127
- getSession() {
128
- return this.session;
129
- }
130
- }
131
- /**
132
- * MongoDB Adapter
133
- */
134
- class MongoDBAdapter extends base_adapter_1.BaseDatabaseAdapter {
53
+ class MongoDBAdapter extends base_adapter_1.BaseAdapter {
135
54
  constructor() {
136
55
  super(...arguments);
137
- this.type = database_types_1.DatabaseType.MONGODB;
138
- this.connectionPool = new Map();
56
+ this.databaseType = enums_1.DatabaseType.MONGODB;
57
+ this.mongoClient = null;
58
+ this.db = null;
59
+ this.databaseName = '';
139
60
  }
140
- // ==================== Connection Methods ====================
141
- async connect(config) {
61
+ // ==================== CONNECTION METHODS ====================
62
+ async connect(options) {
142
63
  try {
143
- // Dynamic import of mongodb library
144
- // @ts-ignore - mongodb is an optional peer dependency
64
+ // Dynamic import of mongodb to avoid bundling issues
145
65
  const { MongoClient } = await Promise.resolve().then(() => __importStar(require('mongodb')));
146
- const options = config.options || {};
147
- // Build connection URI
148
- let uri;
149
- if (options.connectionString || options.uri) {
150
- uri = options.connectionString || options.uri;
151
- }
152
- else {
153
- const host = options.host || 'localhost';
154
- const port = options.port || 27017;
155
- const username = options.username || options.user;
156
- const password = options.password;
157
- const authSource = options.authSource || 'admin';
158
- if (username && password) {
159
- uri = `mongodb://${encodeURIComponent(username)}:${encodeURIComponent(password)}@${host}:${port}/${config.database}?authSource=${authSource}`;
160
- }
161
- else {
162
- uri = `mongodb://${host}:${port}/${config.database}`;
163
- }
164
- }
165
- // Create MongoDB client with options
166
- const clientOptions = {
66
+ this.connectionUrl = options.connectionUrl;
67
+ // Parse connection URL to extract database name
68
+ const url = new URL(options.connectionUrl);
69
+ this.databaseName = url.pathname.slice(1) || 'test';
70
+ this.mongoClient = new MongoClient(options.connectionUrl, {
167
71
  maxPoolSize: options.poolSize || 10,
168
- minPoolSize: options.minPoolSize || 2,
169
72
  connectTimeoutMS: options.connectionTimeout || 10000,
170
- socketTimeoutMS: options.idleTimeout || 30000,
171
- retryWrites: options.retryWrites !== false,
172
- retryReads: options.retryReads !== false,
73
+ serverSelectionTimeoutMS: options.connectionTimeout || 10000,
74
+ });
75
+ await this.mongoClient.connect();
76
+ this.db = this.mongoClient.db(this.databaseName);
77
+ // Get server info
78
+ const adminDb = this.mongoClient.db('admin');
79
+ const serverInfo = await adminDb.command({ buildInfo: 1 });
80
+ this.client = this.mongoClient;
81
+ this.connected = true;
82
+ return {
83
+ connected: true,
84
+ version: serverInfo.version,
173
85
  };
174
- // Add SSL/TLS options if specified
175
- if (options.ssl || options.tls) {
176
- clientOptions.tls = true;
177
- if (options.tlsCAFile)
178
- clientOptions.tlsCAFile = options.tlsCAFile;
179
- if (options.tlsCertificateKeyFile)
180
- clientOptions.tlsCertificateKeyFile = options.tlsCertificateKeyFile;
181
- clientOptions.tlsAllowInvalidCertificates = options.tlsAllowInvalidCertificates || false;
182
- }
183
- // Add replica set options if specified
184
- if (options.replicaSet) {
185
- clientOptions.replicaSet = options.replicaSet;
186
- }
187
- const client = new MongoClient(uri, clientOptions);
188
- // Connect to MongoDB
189
- await client.connect();
190
- // Test connection
191
- await client.db(config.database).command({ ping: 1 });
192
- // Get database
193
- const db = client.db(config.database);
194
- // Create connection wrapper
195
- const connectionId = `mongodb-${config.database}-${Date.now()}`;
196
- const connection = new MongoDBConnection(connectionId, client, db);
197
- // Store in pool map
198
- this.connectionPool.set(connectionId, connection);
199
- return connection;
200
86
  }
201
87
  catch (error) {
202
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.CONNECTION_ERROR, `Failed to connect to MongoDB: ${error.message}`, error);
88
+ throw database_error_1.DatabaseError.connectionError(`Failed to connect to MongoDB: ${error.message}`, error);
203
89
  }
204
90
  }
205
- async disconnect(connection) {
206
- await connection.disconnect();
207
- this.connectionPool.delete(connection.id);
208
- }
209
- async testConnection(connection) {
210
- const startTime = Date.now();
91
+ async testConnection(options) {
211
92
  try {
212
- const db = connection.getClient();
213
- // Test with a simple ping command
214
- await db.admin().ping();
215
- const responseTime = Date.now() - startTime;
93
+ const { MongoClient } = await Promise.resolve().then(() => __importStar(require('mongodb')));
94
+ const client = new MongoClient(options.connectionUrl, {
95
+ connectTimeoutMS: options.connectionTimeout || 5000,
96
+ serverSelectionTimeoutMS: options.connectionTimeout || 5000,
97
+ });
98
+ await client.connect();
99
+ const adminDb = client.db('admin');
100
+ const serverInfo = await adminDb.command({ buildInfo: 1 });
101
+ await client.close();
216
102
  return {
217
103
  connected: true,
218
- message: 'Successfully connected to MongoDB',
219
- databaseType: 'mongodb',
220
- responseTime,
104
+ version: serverInfo.version,
221
105
  };
222
106
  }
223
107
  catch (error) {
224
108
  return {
225
109
  connected: false,
226
- message: 'Failed to connect to MongoDB',
227
- databaseType: 'mongodb',
228
- responseTime: Date.now() - startTime,
229
- error: error.message,
230
110
  };
231
111
  }
232
112
  }
233
- // ==================== Transaction Methods ====================
234
- async beginTransaction(connection, options) {
113
+ async disconnect() {
114
+ if (this.mongoClient) {
115
+ await this.mongoClient.close();
116
+ this.mongoClient = null;
117
+ this.db = null;
118
+ this.client = null;
119
+ this.connected = false;
120
+ }
121
+ }
122
+ // ==================== QUERY METHODS ====================
123
+ async query(query) {
124
+ var _a;
125
+ this.ensureConnected();
235
126
  try {
236
- // MongoDB needs to access the MongoClient for sessions, not just the db
237
- const mongoConnection = connection;
238
- const client = mongoConnection.getMongoClient();
239
- const session = client.startSession();
240
- // Build transaction options
241
- const txnOptions = {
242
- writeConcern: { w: 'majority' },
243
- };
244
- // Map isolation level to MongoDB read concern
245
- if (options === null || options === void 0 ? void 0 : options.isolationLevel) {
246
- switch (options.isolationLevel) {
247
- case database_types_1.TransactionIsolationLevel.READ_UNCOMMITTED:
248
- case database_types_1.TransactionIsolationLevel.READ_COMMITTED:
249
- txnOptions.readConcern = { level: 'local' };
250
- break;
251
- case database_types_1.TransactionIsolationLevel.REPEATABLE_READ:
252
- txnOptions.readConcern = { level: 'snapshot' };
253
- break;
254
- case database_types_1.TransactionIsolationLevel.SERIALIZABLE:
255
- txnOptions.readConcern = { level: 'linearizable' };
256
- break;
257
- default:
258
- txnOptions.readConcern = { level: 'snapshot' };
127
+ const collection = this.db.collection(query.options.table);
128
+ const session = (_a = query.options.transaction) === null || _a === void 0 ? void 0 : _a.client;
129
+ // Build MongoDB filter from where clause
130
+ const filter = this.buildMongoFilter(query.options.where || {});
131
+ // Build options
132
+ const findOptions = { session };
133
+ // Select specific fields
134
+ if (query.options.select) {
135
+ findOptions.projection = {};
136
+ for (const field of query.options.select) {
137
+ findOptions.projection[field] = 1;
259
138
  }
260
139
  }
261
- else {
262
- txnOptions.readConcern = { level: 'snapshot' };
140
+ // Sorting
141
+ if (query.options.orderBy) {
142
+ findOptions.sort = {};
143
+ const orderByArray = Array.isArray(query.options.orderBy)
144
+ ? query.options.orderBy
145
+ : [query.options.orderBy];
146
+ for (const order of orderByArray) {
147
+ findOptions.sort[order.column] = order.order === 'DESC' ? -1 : 1;
148
+ }
149
+ }
150
+ // Pagination
151
+ if (query.options.limit) {
152
+ findOptions.limit = query.options.limit;
153
+ }
154
+ if (query.options.offset) {
155
+ findOptions.skip = query.options.offset;
263
156
  }
264
- session.startTransaction(txnOptions);
265
- return new MongoDBTransaction(connection, session, options);
157
+ const cursor = collection.find(filter, findOptions);
158
+ const data = await cursor.toArray();
159
+ // Get total count for pagination
160
+ const count = await collection.countDocuments(filter, { session });
161
+ return {
162
+ data: data,
163
+ count,
164
+ };
266
165
  }
267
166
  catch (error) {
268
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.TRANSACTION_ERROR, `Failed to begin MongoDB transaction: ${error.message}. Note: MongoDB transactions require a replica set or sharded cluster.`, error);
167
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
269
168
  }
270
169
  }
271
- async commitTransaction(connection, transaction) {
272
- await transaction.commit();
273
- }
274
- async rollbackTransaction(connection, transaction) {
275
- await transaction.rollback();
276
- }
277
- async createSavepoint(_connection, _transaction, _savepointName) {
278
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.NOT_SUPPORTED, 'MongoDB does not support savepoints. Transactions are atomic - either all changes commit or all rollback.');
279
- }
280
- async rollbackToSavepoint(_connection, _transaction, _savepoint) {
281
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.NOT_SUPPORTED, 'MongoDB does not support savepoints.');
282
- }
283
- async releaseSavepoint(_connection, _transaction, _savepoint) {
284
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.NOT_SUPPORTED, 'MongoDB does not support savepoints.');
285
- }
286
- // ==================== Query Methods ====================
287
- async query(connection, options) {
288
- const startTime = Date.now();
170
+ async raw(options) {
171
+ var _a, _b;
172
+ this.ensureConnected();
289
173
  try {
290
- const db = connection.getClient();
291
- const collection = db.collection(options.table);
292
- // Build MongoDB filter from where clause
293
- const filter = this.buildMongoFilter(options.where);
294
- // Build MongoDB query
295
- let query = collection.find(filter);
296
- // Apply projection (select)
297
- if (options.select && options.select.length > 0) {
298
- const projection = {};
299
- options.select.forEach((field) => {
300
- projection[field] = 1;
301
- });
302
- query = query.project(projection);
303
- }
304
- // Apply sorting
305
- if (options.orderBy) {
306
- const sort = {};
307
- const orderByArray = Array.isArray(options.orderBy) ? options.orderBy : [options.orderBy];
308
- orderByArray.forEach((order) => {
309
- sort[order.column] = order.order === query_types_1.SortOrder.DESC ? -1 : 1;
310
- });
311
- query = query.sort(sort);
312
- }
313
- // Apply limit and offset
314
- if (options.limit) {
315
- query = query.limit(options.limit);
316
- }
317
- if (options.offset) {
318
- query = query.skip(options.offset);
174
+ const query = options.query;
175
+ // If query is an object with MongoDB command keys, run it as a database command
176
+ if (query && typeof query === 'object' && !Array.isArray(query)) {
177
+ const commandKeys = ['create', 'drop', 'findAndModify', 'createIndexes', 'dropIndexes',
178
+ 'collMod', 'shardCollection', 'update', 'insert', 'delete', 'aggregate', 'count',
179
+ 'distinct', 'mapReduce', 'validate', 'listCollections', 'listIndexes'];
180
+ const isCommand = commandKeys.some(key => key in query);
181
+ if (isCommand) {
182
+ // Run as a database command
183
+ const result = await this.db.command(query);
184
+ return {
185
+ data: result.value ? [result.value] : (((_a = result.cursor) === null || _a === void 0 ? void 0 : _a.firstBatch) || [result]),
186
+ count: result.n || result.ok || 1,
187
+ };
188
+ }
319
189
  }
320
- const data = await query.toArray();
321
- const executionTime = Date.now() - startTime;
190
+ // Otherwise, treat as a find query on a collection
191
+ const collection = this.db.collection(options.collection || options.table || '');
192
+ const session = (_b = options.transaction) === null || _b === void 0 ? void 0 : _b.client;
193
+ // For MongoDB, 'query' is the filter object
194
+ const filter = query;
195
+ const cursor = collection.find(filter, { session });
196
+ const data = await cursor.toArray();
322
197
  return {
323
- data,
198
+ data: data,
324
199
  count: data.length,
325
- executionTime,
326
- databaseType: 'mongodb',
327
200
  };
328
201
  }
329
202
  catch (error) {
330
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB query failed: ${error.message}`, error);
203
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
331
204
  }
332
205
  }
333
- async insert(connection, options) {
334
- const startTime = Date.now();
206
+ // ==================== WRITE METHODS ====================
207
+ async insert(options) {
208
+ var _a;
209
+ this.ensureConnected();
335
210
  try {
336
- const db = connection.getClient();
337
- const collection = db.collection(options.table);
338
- const dataArray = Array.isArray(options.data) ? options.data : [options.data];
339
- const result = await collection.insertMany(dataArray);
340
- const executionTime = Date.now() - startTime;
211
+ const collection = this.db.collection(options.table);
212
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
213
+ const data = Array.isArray(options.data) ? options.data : [options.data];
214
+ if (data.length === 0) {
215
+ return { data: [], count: 0, insertedIds: [] };
216
+ }
217
+ // Get auto-increment fields for this collection
218
+ const autoIncrementFields = await this.getAutoIncrementFields(options.table);
219
+ // Get schema metadata for default values
220
+ const schemaColumns = await this.getSchemaMetadata(options.table);
221
+ // Process each document and assign auto-increment values and defaults
222
+ const processedData = await Promise.all(data.map(async (doc) => {
223
+ const processedDoc = Object.assign({}, doc);
224
+ // Apply default values for missing fields
225
+ for (const column of schemaColumns) {
226
+ if (column.defaultValue !== undefined && column.defaultValue !== null) {
227
+ if (processedDoc[column.name] === undefined || processedDoc[column.name] === null) {
228
+ processedDoc[column.name] = this.resolveDefaultValue(column.defaultValue, column.type);
229
+ }
230
+ }
231
+ }
232
+ // For each auto-increment field, get the next value if not already set
233
+ for (const field of autoIncrementFields) {
234
+ if (processedDoc[field] === undefined || processedDoc[field] === null) {
235
+ processedDoc[field] = await this.getNextAutoIncrementValue(options.table, field);
236
+ }
237
+ }
238
+ return processedDoc;
239
+ }));
240
+ const result = await collection.insertMany(processedData, { session });
241
+ // Get inserted documents if returning is requested
242
+ let returnedData = [];
243
+ if (options.returning) {
244
+ const insertedIds = Object.values(result.insertedIds);
245
+ returnedData = await collection.find({ _id: { $in: insertedIds } }, { session }).toArray();
246
+ }
341
247
  return {
342
- insertedCount: result.insertedCount,
343
- insertedIds: Object.values(result.insertedIds).map((id) => id.toString()),
344
- data: options.returning ? dataArray : undefined,
345
- executionTime,
346
- success: true,
248
+ data: returnedData,
249
+ count: result.insertedCount,
250
+ insertedIds: Object.values(result.insertedIds),
347
251
  };
348
252
  }
349
253
  catch (error) {
350
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB insert failed: ${error.message}`, error);
254
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
351
255
  }
352
256
  }
353
- async update(connection, options) {
354
- const startTime = Date.now();
257
+ async update(options) {
258
+ var _a;
259
+ this.ensureConnected();
355
260
  try {
356
- const db = connection.getClient();
357
- const collection = db.collection(options.table);
358
- const filter = this.buildMongoFilter(options.where);
359
- const update = { $set: options.data };
360
- const result = await collection.updateMany(filter, update);
361
- const executionTime = Date.now() - startTime;
261
+ const collection = this.db.collection(options.table);
262
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
263
+ // Build MongoDB filter
264
+ const filter = this.buildMongoFilter(options.where || {});
265
+ // Build update document
266
+ const updateDoc = { $set: {} };
267
+ for (const [key, value] of Object.entries(options.data)) {
268
+ if (value && typeof value === 'object' && this.isUpdateOperator(value)) {
269
+ // Handle update operators - MongoDB has native support
270
+ if ('$INC' in value) {
271
+ if (!updateDoc.$inc)
272
+ updateDoc.$inc = {};
273
+ updateDoc.$inc[key] = value.$INC;
274
+ }
275
+ else if ('$DEC' in value) {
276
+ // MongoDB uses $inc with negative value for decrement
277
+ if (!updateDoc.$inc)
278
+ updateDoc.$inc = {};
279
+ updateDoc.$inc[key] = -value.$DEC;
280
+ }
281
+ else if ('$MUL' in value) {
282
+ if (!updateDoc.$mul)
283
+ updateDoc.$mul = {};
284
+ updateDoc.$mul[key] = value.$MUL;
285
+ }
286
+ else if ('$MIN' in value) {
287
+ if (!updateDoc.$min)
288
+ updateDoc.$min = {};
289
+ updateDoc.$min[key] = value.$MIN;
290
+ }
291
+ else if ('$MAX' in value) {
292
+ if (!updateDoc.$max)
293
+ updateDoc.$max = {};
294
+ updateDoc.$max[key] = value.$MAX;
295
+ }
296
+ else if ('$SET' in value) {
297
+ updateDoc.$set[key] = value.$SET;
298
+ }
299
+ else if ('$UNSET' in value && value.$UNSET) {
300
+ if (!updateDoc.$unset)
301
+ updateDoc.$unset = {};
302
+ updateDoc.$unset[key] = '';
303
+ }
304
+ else if ('$PUSH' in value) {
305
+ if (!updateDoc.$push)
306
+ updateDoc.$push = {};
307
+ updateDoc.$push[key] = value.$PUSH;
308
+ }
309
+ else if ('$PULL' in value) {
310
+ if (!updateDoc.$pull)
311
+ updateDoc.$pull = {};
312
+ updateDoc.$pull[key] = value.$PULL;
313
+ }
314
+ else if ('$ADDTOSET' in value) {
315
+ if (!updateDoc.$addToSet)
316
+ updateDoc.$addToSet = {};
317
+ updateDoc.$addToSet[key] = value.$ADDTOSET;
318
+ }
319
+ }
320
+ else {
321
+ updateDoc.$set[key] = value;
322
+ }
323
+ }
324
+ // Remove empty $set
325
+ if (Object.keys(updateDoc.$set).length === 0) {
326
+ delete updateDoc.$set;
327
+ }
328
+ const result = await collection.updateMany(filter, updateDoc, { session });
329
+ // Get updated documents if returning is requested
330
+ let returnedData = [];
331
+ if (options.returning) {
332
+ returnedData = await collection.find(filter, { session }).toArray();
333
+ }
362
334
  return {
363
- updatedCount: result.modifiedCount,
364
- matchedCount: result.matchedCount,
365
- executionTime,
366
- success: true,
335
+ data: returnedData,
336
+ count: result.modifiedCount,
367
337
  };
368
338
  }
369
339
  catch (error) {
370
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB update failed: ${error.message}`, error);
340
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
371
341
  }
372
342
  }
373
- async delete(connection, options) {
374
- const startTime = Date.now();
343
+ async delete(options) {
344
+ var _a;
345
+ this.ensureConnected();
375
346
  try {
376
- const db = connection.getClient();
377
- const collection = db.collection(options.table);
378
- const filter = this.buildMongoFilter(options.where);
379
- const result = await collection.deleteMany(filter);
380
- const executionTime = Date.now() - startTime;
347
+ const collection = this.db.collection(options.table);
348
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
349
+ // Build MongoDB filter
350
+ const filter = this.buildMongoFilter(options.where || {});
351
+ // Get documents before delete if returning is requested
352
+ let deletedData;
353
+ if (options.returning) {
354
+ deletedData = await collection.find(filter, { session }).toArray();
355
+ }
356
+ const result = await collection.deleteMany(filter, { session });
381
357
  return {
382
- deletedCount: result.deletedCount,
383
- executionTime,
384
- success: true,
358
+ count: result.deletedCount,
359
+ data: deletedData,
385
360
  };
386
361
  }
387
362
  catch (error) {
388
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB delete failed: ${error.message}`, error);
363
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
389
364
  }
390
365
  }
391
- async upsert(connection, options) {
392
- const startTime = Date.now();
366
+ async upsert(options) {
367
+ var _a, _b;
368
+ this.ensureConnected();
393
369
  try {
394
- const db = connection.getClient();
395
- const collection = db.collection(options.table);
396
- // Upsert only works with single records
397
- const data = Array.isArray(options.data) ? options.data[0] : options.data;
398
- // Build conflict filter
370
+ const collection = this.db.collection(options.table);
371
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
372
+ // Build filter from conflict keys
399
373
  const filter = {};
400
- options.uniqueColumns.forEach((col) => {
401
- if (data[col] !== undefined) {
402
- filter[col] = data[col];
403
- }
374
+ for (const key of options.conflictKeys) {
375
+ filter[key] = options.data[key];
376
+ }
377
+ // Build update document
378
+ const updateDoc = { $set: options.data };
379
+ const result = await collection.findOneAndUpdate(filter, updateDoc, {
380
+ upsert: true,
381
+ returnDocument: 'after',
382
+ session,
404
383
  });
405
- const update = { $set: data };
406
- const result = await collection.updateOne(filter, update, { upsert: true });
407
- const executionTime = Date.now() - startTime;
408
384
  return {
409
- insertedCount: result.upsertedCount || 0,
410
- updatedCount: result.modifiedCount,
411
- affectedCount: result.upsertedCount + result.modifiedCount,
412
- executionTime,
413
- success: true,
385
+ data: result.value ? [result.value] : [],
386
+ count: 1,
387
+ operation: ((_b = result.lastErrorObject) === null || _b === void 0 ? void 0 : _b.updatedExisting) ? 'updated' : 'inserted',
414
388
  };
415
389
  }
416
390
  catch (error) {
417
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB upsert failed: ${error.message}`, error);
391
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
418
392
  }
419
393
  }
420
- async executeRaw(connection, options) {
421
- const startTime = Date.now();
394
+ // ==================== AGGREGATION METHODS ====================
395
+ async count(options) {
396
+ var _a, _b;
397
+ this.ensureConnected();
422
398
  try {
423
- const db = connection.getClient();
424
- // For MongoDB, raw queries might be aggregation pipelines or commands
425
- // This is a simplified implementation
426
- const result = await db.command(options.query);
427
- const executionTime = Date.now() - startTime;
428
- return {
429
- rows: Array.isArray(result) ? result : [result],
430
- rowCount: Array.isArray(result) ? result.length : 1,
431
- executionTime,
432
- };
399
+ const collection = this.db.collection(options.table);
400
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
401
+ const filter = this.buildMongoFilter(options.where || {});
402
+ if (options.distinct && options.column) {
403
+ // For distinct count, use aggregation
404
+ const result = await collection.aggregate([
405
+ { $match: filter },
406
+ { $group: { _id: `$${options.column}` } },
407
+ { $count: 'count' },
408
+ ], { session }).toArray();
409
+ return ((_b = result[0]) === null || _b === void 0 ? void 0 : _b.count) || 0;
410
+ }
411
+ return await collection.countDocuments(filter, { session });
433
412
  }
434
413
  catch (error) {
435
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB raw query failed: ${error.message}`, error);
414
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
436
415
  }
437
416
  }
438
- // ==================== Aggregation Methods ====================
439
- async count(connection, options) {
417
+ async sum(options) {
418
+ var _a, _b;
419
+ this.ensureConnected();
440
420
  try {
441
- const db = connection.getClient();
442
- const collection = db.collection(options.table);
443
- const filter = this.buildMongoFilter(options.where);
444
- return await collection.countDocuments(filter);
421
+ const collection = this.db.collection(options.table);
422
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
423
+ const filter = this.buildMongoFilter(options.where || {});
424
+ const result = await collection.aggregate([
425
+ { $match: filter },
426
+ { $group: { _id: null, sum: { $sum: `$${options.column}` } } },
427
+ ], { session }).toArray();
428
+ return ((_b = result[0]) === null || _b === void 0 ? void 0 : _b.sum) || 0;
445
429
  }
446
430
  catch (error) {
447
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB count failed: ${error.message}`, error);
431
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
448
432
  }
449
433
  }
450
- async sum(connection, options) {
451
- var _a;
434
+ async avg(options) {
435
+ var _a, _b;
436
+ this.ensureConnected();
452
437
  try {
453
- const db = connection.getClient();
454
- const collection = db.collection(options.table);
455
- const matchStage = this.buildMongoFilter(options.where);
456
- const pipeline = [
457
- { $match: matchStage },
458
- {
459
- $group: {
460
- _id: null,
461
- total: { $sum: `$${options.column}` },
462
- },
463
- },
464
- ];
465
- const result = await collection.aggregate(pipeline).toArray();
466
- return ((_a = result[0]) === null || _a === void 0 ? void 0 : _a.total) || 0;
438
+ const collection = this.db.collection(options.table);
439
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
440
+ const filter = this.buildMongoFilter(options.where || {});
441
+ const result = await collection.aggregate([
442
+ { $match: filter },
443
+ { $group: { _id: null, avg: { $avg: `$${options.column}` } } },
444
+ ], { session }).toArray();
445
+ return ((_b = result[0]) === null || _b === void 0 ? void 0 : _b.avg) || 0;
467
446
  }
468
447
  catch (error) {
469
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB sum failed: ${error.message}`, error);
448
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
470
449
  }
471
450
  }
472
- async avg(connection, options) {
473
- var _a;
451
+ async min(options) {
452
+ var _a, _b;
453
+ this.ensureConnected();
474
454
  try {
475
- const db = connection.getClient();
476
- const collection = db.collection(options.table);
477
- const matchStage = this.buildMongoFilter(options.where);
478
- const pipeline = [
479
- { $match: matchStage },
480
- {
481
- $group: {
482
- _id: null,
483
- average: { $avg: `$${options.column}` },
484
- },
485
- },
486
- ];
487
- const result = await collection.aggregate(pipeline).toArray();
488
- return ((_a = result[0]) === null || _a === void 0 ? void 0 : _a.average) || 0;
455
+ const collection = this.db.collection(options.table);
456
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
457
+ const filter = this.buildMongoFilter(options.where || {});
458
+ const result = await collection.aggregate([
459
+ { $match: filter },
460
+ { $group: { _id: null, min: { $min: `$${options.column}` } } },
461
+ ], { session }).toArray();
462
+ return (_b = result[0]) === null || _b === void 0 ? void 0 : _b.min;
489
463
  }
490
464
  catch (error) {
491
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB avg failed: ${error.message}`, error);
465
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
492
466
  }
493
467
  }
494
- async min(connection, options) {
495
- var _a;
468
+ async max(options) {
469
+ var _a, _b;
470
+ this.ensureConnected();
496
471
  try {
497
- const db = connection.getClient();
498
- const collection = db.collection(options.table);
499
- const matchStage = this.buildMongoFilter(options.where);
500
- const pipeline = [
501
- { $match: matchStage },
502
- {
503
- $group: {
504
- _id: null,
505
- minimum: { $min: `$${options.column}` },
506
- },
507
- },
508
- ];
509
- const result = await collection.aggregate(pipeline).toArray();
510
- return ((_a = result[0]) === null || _a === void 0 ? void 0 : _a.minimum) || 0;
472
+ const collection = this.db.collection(options.table);
473
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
474
+ const filter = this.buildMongoFilter(options.where || {});
475
+ const result = await collection.aggregate([
476
+ { $match: filter },
477
+ { $group: { _id: null, max: { $max: `$${options.column}` } } },
478
+ ], { session }).toArray();
479
+ return (_b = result[0]) === null || _b === void 0 ? void 0 : _b.max;
511
480
  }
512
481
  catch (error) {
513
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB min failed: ${error.message}`, error);
482
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
514
483
  }
515
484
  }
516
- async max(connection, options) {
485
+ async aggregate(builtAggregation) {
517
486
  var _a;
487
+ this.ensureConnected();
518
488
  try {
519
- const db = connection.getClient();
520
- const collection = db.collection(options.table);
521
- const matchStage = this.buildMongoFilter(options.where);
522
- const pipeline = [
523
- { $match: matchStage },
524
- {
525
- $group: {
526
- _id: null,
527
- maximum: { $max: `$${options.column}` },
528
- },
529
- },
530
- ];
531
- const result = await collection.aggregate(pipeline).toArray();
532
- return ((_a = result[0]) === null || _a === void 0 ? void 0 : _a.maximum) || 0;
489
+ const options = builtAggregation.options;
490
+ const collection = this.db.collection(options.table);
491
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
492
+ // Use the pre-built pipeline
493
+ const result = await collection.aggregate(builtAggregation.pipeline || [], { session }).toArray();
494
+ // Remove _id from result
495
+ if (result[0]) {
496
+ delete result[0]._id;
497
+ }
498
+ return result[0] || {};
533
499
  }
534
500
  catch (error) {
535
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB max failed: ${error.message}`, error);
501
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
536
502
  }
537
503
  }
538
- async groupBy(connection, options) {
504
+ async groupBy(builtGroupBy) {
505
+ var _a;
506
+ this.ensureConnected();
539
507
  try {
540
- const db = connection.getClient();
541
- const collection = db.collection(options.table);
542
- const matchStage = this.buildMongoFilter(options.where);
543
- // Build group ID from columns
544
- const groupId = {};
545
- options.groupBy.forEach((col) => {
546
- groupId[col] = `$${col}`;
547
- });
548
- // Build aggregations
549
- const aggregations = {};
550
- if (options.aggregate) {
551
- Object.entries(options.aggregate).forEach(([alias, agg]) => {
552
- const aggObj = agg;
553
- if (aggObj.$COUNT !== undefined) {
554
- aggregations[alias] = { $sum: 1 };
555
- }
556
- else if (aggObj.$SUM !== undefined) {
557
- aggregations[alias] = { $sum: `$${aggObj.$SUM}` };
558
- }
559
- else if (aggObj.$AVG !== undefined) {
560
- aggregations[alias] = { $avg: `$${aggObj.$AVG}` };
561
- }
562
- else if (aggObj.$MIN !== undefined) {
563
- aggregations[alias] = { $min: `$${aggObj.$MIN}` };
564
- }
565
- else if (aggObj.$MAX !== undefined) {
566
- aggregations[alias] = { $max: `$${aggObj.$MAX}` };
567
- }
568
- else if (aggObj.$ARRAY_AGG !== undefined) {
569
- aggregations[alias] = { $push: `$${aggObj.$ARRAY_AGG}` };
508
+ const options = builtGroupBy.options;
509
+ const collection = this.db.collection(options.table);
510
+ const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
511
+ // Use the pre-built pipeline
512
+ const results = await collection.aggregate(builtGroupBy.pipeline || [], { session }).toArray();
513
+ return results.map((row) => {
514
+ var _a;
515
+ const group = {};
516
+ const aggregates = {};
517
+ // _id contains the group keys
518
+ if (row._id && typeof row._id === 'object') {
519
+ Object.assign(group, row._id);
520
+ }
521
+ else if (((_a = options.groupBy) === null || _a === void 0 ? void 0 : _a.length) === 1) {
522
+ group[options.groupBy[0]] = row._id;
523
+ }
524
+ // Everything else is aggregates
525
+ for (const key of Object.keys(row)) {
526
+ if (key !== '_id') {
527
+ aggregates[key] = row[key];
570
528
  }
571
- });
572
- }
573
- const pipeline = [
574
- { $match: matchStage },
575
- {
576
- $group: Object.assign({ _id: groupId }, aggregations),
577
- },
578
- ];
579
- // Add having clause (filter after grouping)
580
- if (options.having) {
581
- pipeline.push({ $match: this.buildMongoFilter(options.having) });
582
- }
583
- // Add sorting
584
- if (options.orderBy) {
585
- const sortSpec = {};
586
- const orderByArray = Array.isArray(options.orderBy) ? options.orderBy : [options.orderBy];
587
- orderByArray.forEach((order) => {
588
- sortSpec[order.column] = order.order.toLowerCase() === query_types_1.SortOrder.DESC ? -1 : 1;
589
- });
590
- pipeline.push({ $sort: sortSpec });
529
+ }
530
+ return { group, aggregates: aggregates };
531
+ });
532
+ }
533
+ catch (error) {
534
+ throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
535
+ }
536
+ }
537
+ // ==================== TRANSACTION METHODS ====================
538
+ async beginTransaction(isolationLevel, readOnly, timeout) {
539
+ this.ensureConnected();
540
+ try {
541
+ const session = this.mongoClient.startSession();
542
+ const id = `mongo_txn_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
543
+ const transactionOptions = {};
544
+ // MongoDB supports read concern and write concern instead of isolation levels
545
+ if (isolationLevel === enums_1.IsolationLevel.SERIALIZABLE) {
546
+ transactionOptions.readConcern = { level: 'snapshot' };
547
+ transactionOptions.writeConcern = { w: 'majority' };
591
548
  }
592
- // Add limit and offset
593
- if (options.offset) {
594
- pipeline.push({ $skip: options.offset });
549
+ else {
550
+ transactionOptions.readConcern = { level: 'majority' };
551
+ transactionOptions.writeConcern = { w: 'majority' };
595
552
  }
596
- if (options.limit) {
597
- pipeline.push({ $limit: options.limit });
553
+ if (timeout) {
554
+ transactionOptions.maxCommitTimeMS = timeout;
598
555
  }
599
- const result = await collection.aggregate(pipeline).toArray();
600
- // Transform result to expected format
601
- return result.map((doc) => {
602
- const { _id } = doc, rest = __rest(doc, ["_id"]);
603
- return Object.assign(Object.assign({}, _id), rest);
604
- });
556
+ session.startTransaction(transactionOptions);
557
+ return {
558
+ id,
559
+ databaseType: 'mongodb',
560
+ isolationLevel: isolationLevel || enums_1.IsolationLevel.READ_COMMITTED,
561
+ readOnly: readOnly || false,
562
+ timeout,
563
+ startedAt: new Date(),
564
+ client: session,
565
+ savepoints: new Map(),
566
+ status: 'active',
567
+ };
605
568
  }
606
569
  catch (error) {
607
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB groupBy failed: ${error.message}`, error);
570
+ throw database_error_1.DatabaseError.transactionError(`Failed to begin transaction: ${error.message}`, error);
608
571
  }
609
572
  }
610
- async aggregate(connection, options) {
573
+ async commitTransaction(context) {
611
574
  try {
612
- const db = connection.getClient();
613
- const collection = db.collection(options.table);
614
- const matchStage = this.buildMongoFilter(options.where);
615
- // Build aggregations
616
- const aggregations = {};
617
- Object.entries(options.operations).forEach(([alias, agg]) => {
618
- const aggObj = agg;
619
- if (aggObj.$COUNT !== undefined) {
620
- aggregations[alias] = { $sum: 1 };
621
- }
622
- else if (aggObj.$SUM !== undefined) {
623
- aggregations[alias] = { $sum: `$${aggObj.$SUM}` };
624
- }
625
- else if (aggObj.$AVG !== undefined) {
626
- aggregations[alias] = { $avg: `$${aggObj.$AVG}` };
627
- }
628
- else if (aggObj.$MIN !== undefined) {
629
- aggregations[alias] = { $min: `$${aggObj.$MIN}` };
575
+ await context.client.commitTransaction();
576
+ await context.client.endSession();
577
+ context.status = 'committed';
578
+ }
579
+ catch (error) {
580
+ context.status = 'error';
581
+ await context.client.endSession();
582
+ throw database_error_1.DatabaseError.transactionError(`Failed to commit transaction: ${error.message}`, error);
583
+ }
584
+ }
585
+ async rollbackTransaction(context) {
586
+ try {
587
+ await context.client.abortTransaction();
588
+ await context.client.endSession();
589
+ context.status = 'rolled_back';
590
+ }
591
+ catch (error) {
592
+ context.status = 'error';
593
+ await context.client.endSession();
594
+ throw database_error_1.DatabaseError.transactionError(`Failed to rollback transaction: ${error.message}`, error);
595
+ }
596
+ }
597
+ async createSavepoint(context, name) {
598
+ // MongoDB does not support savepoints
599
+ throw new database_error_1.DatabaseError('MongoDB does not support savepoints. Savepoints are only available in PostgreSQL and MySQL.', enums_1.DatabaseErrorType.NOT_SUPPORTED);
600
+ }
601
+ async releaseSavepoint(context, savepoint) {
602
+ // MongoDB does not support savepoints
603
+ throw new database_error_1.DatabaseError('MongoDB does not support savepoints. Savepoints are only available in PostgreSQL and MySQL.', enums_1.DatabaseErrorType.NOT_SUPPORTED);
604
+ }
605
+ async rollbackToSavepoint(context, savepoint) {
606
+ // MongoDB does not support savepoints
607
+ throw new database_error_1.DatabaseError('MongoDB does not support savepoints. Savepoints are only available in PostgreSQL and MySQL.', enums_1.DatabaseErrorType.NOT_SUPPORTED);
608
+ }
609
+ supportsSavepoints() {
610
+ return false;
611
+ }
612
+ // ==================== SCHEMA METHODS ====================
613
+ async createTable(definition, options) {
614
+ this.ensureConnected();
615
+ try {
616
+ // In MongoDB, creating a collection is optional as it's created on first insert
617
+ // But we can explicitly create it for validation
618
+ await this.db.createCollection(definition.name);
619
+ // Create indexes
620
+ if (definition.indexes) {
621
+ for (const index of definition.indexes) {
622
+ await this.createIndex(index);
630
623
  }
631
- else if (aggObj.$MAX !== undefined) {
632
- aggregations[alias] = { $max: `$${aggObj.$MAX}` };
624
+ }
625
+ // Create unique constraints as unique indexes and register auto-increment fields
626
+ for (const column of definition.columns) {
627
+ if (column.unique && column.name !== '_id') {
628
+ await this.db.collection(definition.name).createIndex({ [column.name]: 1 }, { unique: true });
633
629
  }
634
- else if (aggObj.$ARRAY_AGG !== undefined) {
635
- aggregations[alias] = { $push: `$${aggObj.$ARRAY_AGG}` };
630
+ // Register auto-increment fields in the counters collection
631
+ if (column.autoIncrement) {
632
+ await this.registerAutoIncrementField(definition.name, column.name);
636
633
  }
637
- });
638
- // Build group stage
639
- let groupId = null;
640
- if (options.groupBy && options.groupBy.length > 0) {
641
- groupId = {};
642
- options.groupBy.forEach((col) => {
643
- groupId[col] = `$${col}`;
644
- });
645
634
  }
646
- const pipeline = [
647
- { $match: matchStage },
648
- {
649
- $group: Object.assign({ _id: groupId }, aggregations),
650
- },
651
- ];
652
- // Add having clause (filter after grouping)
653
- if (options.having) {
654
- pipeline.push({ $match: this.buildMongoFilter(options.having) });
635
+ // Store schema metadata for default values and other app-level features
636
+ await this.storeSchemaMetadata(definition.name, definition.columns);
637
+ }
638
+ catch (error) {
639
+ // Ignore "collection already exists" error if ifNotExists is true
640
+ if ((options === null || options === void 0 ? void 0 : options.ifNotExists) && error.code === 48) {
641
+ return;
655
642
  }
656
- const result = await collection.aggregate(pipeline).toArray();
657
- if (groupId) {
658
- // Return all grouped results
659
- return result.map((doc) => {
660
- const { _id } = doc, rest = __rest(doc, ["_id"]);
661
- return Object.assign(Object.assign({}, _id), rest);
662
- });
643
+ throw database_error_1.DatabaseError.schemaError(`Failed to create collection: ${error.message}`, error);
644
+ }
645
+ }
646
+ /**
647
+ * Register an auto-increment field in the counters collection.
648
+ * This creates/updates the counter document for the given collection and field.
649
+ */
650
+ async registerAutoIncrementField(collectionName, fieldName) {
651
+ const countersCollection = this.db.collection('_ductape_counters');
652
+ // Initialize the counter for this collection/field combination
653
+ await countersCollection.updateOne({ _id: `${collectionName}.${fieldName}` }, {
654
+ $setOnInsert: {
655
+ collection: collectionName,
656
+ field: fieldName,
657
+ currentValue: 0
663
658
  }
664
- else {
665
- // Return single aggregate result
666
- const _a = result[0] || {}, { _id } = _a, aggregateResult = __rest(_a, ["_id"]);
667
- return aggregateResult;
659
+ }, { upsert: true });
660
+ }
661
+ /**
662
+ * Get the next auto-increment value atomically.
663
+ * Uses findOneAndUpdate with $inc to ensure atomic increment even under high concurrency.
664
+ */
665
+ async getNextAutoIncrementValue(collectionName, fieldName) {
666
+ const countersCollection = this.db.collection('_ductape_counters');
667
+ const result = await countersCollection.findOneAndUpdate({ _id: `${collectionName}.${fieldName}` }, { $inc: { currentValue: 1 } }, { returnDocument: 'after', upsert: true });
668
+ return result.currentValue;
669
+ }
670
+ /**
671
+ * Get all auto-increment fields for a collection from the counters collection.
672
+ */
673
+ async getAutoIncrementFields(collectionName) {
674
+ const countersCollection = this.db.collection('_ductape_counters');
675
+ const counters = await countersCollection.find({ collection: collectionName }).toArray();
676
+ return counters.map((c) => c.field);
677
+ }
678
+ /**
679
+ * Store schema metadata for a collection (including default values).
680
+ * MongoDB doesn't have native schema enforcement, so we store this for application-level use.
681
+ */
682
+ async storeSchemaMetadata(collectionName, columns) {
683
+ const metadataCollection = this.db.collection('_ductape_schema');
684
+ await metadataCollection.updateOne({ _id: collectionName }, {
685
+ $set: {
686
+ collection: collectionName,
687
+ columns: columns.map(col => ({
688
+ name: col.name,
689
+ type: col.type,
690
+ defaultValue: col.defaultValue,
691
+ nullable: col.nullable,
692
+ unique: col.unique,
693
+ primaryKey: col.primaryKey,
694
+ autoIncrement: col.autoIncrement,
695
+ })),
696
+ updatedAt: new Date()
668
697
  }
698
+ }, { upsert: true });
699
+ }
700
+ /**
701
+ * Get schema metadata for a collection to apply defaults during insert.
702
+ */
703
+ async getSchemaMetadata(collectionName) {
704
+ const metadataCollection = this.db.collection('_ductape_schema');
705
+ const schema = await metadataCollection.findOne({ _id: collectionName });
706
+ return (schema === null || schema === void 0 ? void 0 : schema.columns) || [];
707
+ }
708
+ /**
709
+ * Resolve a default value to its actual value.
710
+ * Handles special values like 'now', 'NOW()', true, false, etc.
711
+ */
712
+ resolveDefaultValue(defaultValue, fieldType) {
713
+ if (defaultValue === undefined || defaultValue === null) {
714
+ return undefined;
669
715
  }
670
- catch (error) {
671
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `MongoDB aggregate failed: ${error.message}`, error);
716
+ // Handle string-based special defaults
717
+ if (typeof defaultValue === 'string') {
718
+ const lowerDefault = defaultValue.toLowerCase();
719
+ // Date/time defaults
720
+ if (lowerDefault === 'now' || lowerDefault === 'now()' || lowerDefault === 'current_timestamp') {
721
+ return new Date();
722
+ }
723
+ // Boolean defaults (for string representations)
724
+ if (lowerDefault === 'true')
725
+ return true;
726
+ if (lowerDefault === 'false')
727
+ return false;
728
+ // UUID defaults
729
+ if (lowerDefault === 'uuid' || lowerDefault === 'uuid()' || lowerDefault === 'gen_random_uuid()') {
730
+ return this.generateUUID();
731
+ }
672
732
  }
733
+ // Return as-is for other values (numbers, booleans, objects, etc.)
734
+ return defaultValue;
735
+ }
736
+ /**
737
+ * Generate a UUID v4.
738
+ */
739
+ generateUUID() {
740
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
741
+ const r = Math.random() * 16 | 0;
742
+ const v = c === 'x' ? r : (r & 0x3 | 0x8);
743
+ return v.toString(16);
744
+ });
673
745
  }
674
- // ==================== Schema Methods ====================
675
- async createTable(connection, schema, options) {
676
- const startTime = Date.now();
746
+ async alterTable(tableName, operations) {
747
+ this.ensureConnected();
748
+ // MongoDB is schemaless, so we don't need to alter the schema
749
+ // However, we can handle index and constraint operations
677
750
  try {
678
- const db = connection.getClient();
679
- // MongoDB creates collections automatically, but we can create it explicitly
680
- await db.createCollection(schema.name);
681
- // Create indexes if specified
682
- if (schema.indexes && schema.indexes.length > 0) {
683
- const collection = db.collection(schema.name);
684
- for (const index of schema.indexes) {
751
+ for (const op of operations) {
752
+ if (op.type === 'ADD' && op.constraint && op.constraint.type === 'UNIQUE') {
753
+ // Add unique index
685
754
  const indexSpec = {};
686
- index.columns.forEach((col) => {
687
- indexSpec[col.name] = col.order === 'DESC' ? -1 : 1;
688
- });
689
- await collection.createIndex(indexSpec, { unique: index.unique });
755
+ for (const col of op.constraint.columns) {
756
+ indexSpec[col] = 1;
757
+ }
758
+ await this.db.collection(tableName).createIndex(indexSpec, { unique: true });
759
+ }
760
+ else if (op.type === 'DROP' && op.constraintName) {
761
+ // Drop index
762
+ await this.db.collection(tableName).dropIndex(op.constraintName);
763
+ }
764
+ else if (op.type === 'RENAME' && op.oldName && op.newName) {
765
+ // Rename field in all documents
766
+ await this.db.collection(tableName).updateMany({}, { $rename: { [op.oldName]: op.newName } });
690
767
  }
691
768
  }
692
- const executionTime = Date.now() - startTime;
693
- return {
694
- success: true,
695
- operation: 'create',
696
- table: schema.name,
697
- executionTime,
698
- };
699
769
  }
700
770
  catch (error) {
701
- return {
702
- success: false,
703
- operation: 'create',
704
- table: schema.name,
705
- error: error.message,
706
- executionTime: Date.now() - startTime,
707
- };
771
+ throw database_error_1.DatabaseError.schemaError(`Failed to alter collection: ${error.message}`, error);
708
772
  }
709
773
  }
710
- async dropTable(connection, tableName) {
711
- const startTime = Date.now();
774
+ async dropTable(tableName, ifExists, cascade) {
775
+ this.ensureConnected();
712
776
  try {
713
- const db = connection.getClient();
714
- await db.dropCollection(tableName);
715
- return {
716
- success: true,
717
- operation: 'drop',
718
- table: tableName,
719
- executionTime: Date.now() - startTime,
720
- };
777
+ await this.db.collection(tableName).drop();
721
778
  }
722
779
  catch (error) {
723
- return {
724
- success: false,
725
- operation: 'drop',
726
- table: tableName,
727
- error: error.message,
728
- executionTime: Date.now() - startTime,
729
- };
780
+ // Ignore "collection doesn't exist" error if ifExists is true
781
+ if (ifExists && error.code === 26) {
782
+ return;
783
+ }
784
+ throw database_error_1.DatabaseError.schemaError(`Failed to drop collection: ${error.message}`, error);
730
785
  }
731
786
  }
732
- async alterTable(connection, tableName, alterations, options) {
733
- // MongoDB doesn't have a schema alteration concept like SQL databases
734
- // Schema changes happen implicitly when documents are inserted
735
- return {
736
- success: true,
737
- operation: 'alter',
738
- table: tableName,
739
- executionTime: 0,
740
- };
741
- }
742
- async getTableSchema(connection, tableName) {
787
+ async listTables() {
788
+ this.ensureConnected();
743
789
  try {
744
- const db = connection.getClient();
745
- const collection = db.collection(tableName);
746
- // Get a sample document to infer schema
747
- const sampleDoc = await collection.findOne({});
748
- // TODO: Infer column definitions from sample document
749
- // This is a simplified implementation
750
- const columns = sampleDoc
751
- ? Object.keys(sampleDoc).map((key) => ({
752
- name: key,
753
- type: typeof sampleDoc[key],
754
- }))
755
- : [];
756
- return {
757
- name: tableName,
758
- columns,
759
- };
790
+ const collections = await this.db.listCollections().toArray();
791
+ return collections.map((c) => c.name);
760
792
  }
761
793
  catch (error) {
762
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.SCHEMA_ERROR, `Failed to get MongoDB collection schema: ${error.message}`, error);
794
+ throw database_error_1.DatabaseError.schemaError(`Failed to list collections: ${error.message}`, error);
763
795
  }
764
796
  }
765
- async listTables(connection) {
797
+ async tableExists(tableName) {
798
+ this.ensureConnected();
766
799
  try {
767
- const db = connection.getClient();
768
- const collections = await db.listCollections().toArray();
769
- return collections.map((col) => col.name);
800
+ const collections = await this.db.listCollections({ name: tableName }).toArray();
801
+ return collections.length > 0;
770
802
  }
771
803
  catch (error) {
772
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.QUERY_ERROR, `Failed to list MongoDB collections: ${error.message}`, error);
804
+ throw database_error_1.DatabaseError.schemaError(`Failed to check collection existence: ${error.message}`, error);
773
805
  }
774
806
  }
775
- async tableExists(connection, tableName) {
807
+ async getTableSchema(tableName) {
808
+ this.ensureConnected();
776
809
  try {
777
- const tables = await this.listTables(connection);
778
- return tables.includes(tableName);
810
+ const collection = this.db.collection(tableName);
811
+ // Sample documents to infer schema
812
+ const sampleDocs = await collection.find().limit(100).toArray();
813
+ // Infer columns from sample documents
814
+ const fieldTypes = new Map();
815
+ for (const doc of sampleDocs) {
816
+ this.extractFieldTypes(doc, '', fieldTypes);
817
+ }
818
+ const columns = Array.from(fieldTypes.entries()).map(([name, types]) => ({
819
+ name,
820
+ type: Array.from(types).join('|'),
821
+ nullable: true, // MongoDB is schemaless
822
+ isPrimaryKey: name === '_id',
823
+ isUnique: name === '_id',
824
+ isAutoIncrement: false,
825
+ }));
826
+ // Get indexes
827
+ const indexes = await this.listIndexes(tableName);
828
+ // Get estimated document count
829
+ const estimatedCount = await collection.estimatedDocumentCount();
830
+ return {
831
+ name: tableName,
832
+ columns,
833
+ indexes,
834
+ constraints: [],
835
+ primaryKey: ['_id'],
836
+ estimatedRowCount: estimatedCount,
837
+ };
779
838
  }
780
839
  catch (error) {
781
- return false;
840
+ throw database_error_1.DatabaseError.schemaError(`Failed to get collection schema: ${error.message}`, error);
782
841
  }
783
842
  }
784
- // ==================== Index Methods ====================
785
- async createIndex(connection, options) {
786
- const startTime = Date.now();
843
+ async createIndex(index, ifNotExists, concurrent) {
844
+ this.ensureConnected();
787
845
  try {
788
- const db = connection.getClient();
789
- const collection = db.collection(options.table);
846
+ const collection = this.db.collection(index.table);
847
+ // Build index specification
790
848
  const indexSpec = {};
791
- options.index.columns.forEach((col) => {
849
+ for (const col of index.columns) {
792
850
  indexSpec[col.name] = col.order === 'DESC' ? -1 : 1;
793
- });
794
- await collection.createIndex(indexSpec, {
795
- name: options.index.name,
796
- unique: options.index.unique,
797
- });
798
- return {
799
- success: true,
800
- operation: 'create',
801
- indexName: options.index.name,
802
- table: options.table,
803
- executionTime: Date.now() - startTime,
851
+ }
852
+ // Build index options
853
+ const indexOptions = {
854
+ name: index.name,
855
+ unique: index.unique || false,
856
+ background: true, // Always create in background
804
857
  };
858
+ // Partial index
859
+ if (index.where) {
860
+ // Parse the where clause to a MongoDB filter
861
+ // This is simplified - a real implementation would parse the expression
862
+ indexOptions.partialFilterExpression = {};
863
+ }
864
+ await collection.createIndex(indexSpec, indexOptions);
805
865
  }
806
866
  catch (error) {
807
- return {
808
- success: false,
809
- operation: 'create',
810
- indexName: options.index.name,
811
- table: options.table,
812
- error: error.message,
813
- executionTime: Date.now() - startTime,
814
- };
867
+ // Ignore if index already exists and ifNotExists is true
868
+ if (ifNotExists && error.code === 85) {
869
+ return;
870
+ }
871
+ throw database_error_1.DatabaseError.schemaError(`Failed to create index: ${error.message}`, error);
815
872
  }
816
873
  }
817
- async dropIndex(connection, options) {
818
- const startTime = Date.now();
874
+ async dropIndex(tableName, indexName, ifExists, concurrent, cascade) {
875
+ this.ensureConnected();
819
876
  try {
820
- const db = connection.getClient();
821
- const collection = db.collection(options.table);
822
- await collection.dropIndex(options.indexName);
823
- return {
824
- success: true,
825
- operation: 'drop',
826
- indexName: options.indexName,
827
- table: options.table,
828
- executionTime: Date.now() - startTime,
829
- };
877
+ await this.db.collection(tableName).dropIndex(indexName);
830
878
  }
831
879
  catch (error) {
832
- return {
833
- success: false,
834
- operation: 'drop',
835
- indexName: options.indexName,
836
- table: options.table,
837
- error: error.message,
838
- executionTime: Date.now() - startTime,
839
- };
880
+ // Ignore if index doesn't exist and ifExists is true
881
+ if (ifExists && error.code === 27) {
882
+ return;
883
+ }
884
+ throw database_error_1.DatabaseError.schemaError(`Failed to drop index: ${error.message}`, error);
840
885
  }
841
886
  }
842
- async listIndexes(connection, options) {
887
+ async listIndexes(tableName, includeSystem) {
888
+ this.ensureConnected();
843
889
  try {
844
- const db = connection.getClient();
845
- const collection = db.collection(options.table);
846
- const indexes = await collection.listIndexes().toArray();
847
- return indexes.map((index) => ({
848
- name: index.name,
849
- table: options.table,
850
- columns: Object.keys(index.key),
851
- unique: index.unique || false,
852
- type: index.type || 'BTREE',
890
+ const collection = this.db.collection(tableName);
891
+ const indexes = await collection.indexes();
892
+ return indexes
893
+ .filter((idx) => includeSystem || idx.name !== '_id_')
894
+ .map((idx) => ({
895
+ name: idx.name,
896
+ table: tableName,
897
+ columns: Object.keys(idx.key),
898
+ unique: idx.unique || false,
899
+ primaryKey: idx.name === '_id_',
900
+ type: 'BTREE', // MongoDB uses B-tree by default
853
901
  }));
854
902
  }
855
903
  catch (error) {
856
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.INDEX_ERROR, `Failed to list MongoDB indexes: ${error.message}`, error);
904
+ throw database_error_1.DatabaseError.schemaError(`Failed to list indexes: ${error.message}`, error);
857
905
  }
858
906
  }
859
- async getIndexStatistics(connection, tableName, indexName) {
907
+ async getIndexStatistics(tableName, indexName) {
908
+ var _a, _b;
909
+ this.ensureConnected();
860
910
  try {
861
- const db = connection.getClient();
862
- const collection = db.collection(tableName);
863
- const stats = await collection.stats();
864
- // TODO: Parse and return index statistics
865
- // This is a simplified implementation
866
- return [];
911
+ const collection = this.db.collection(tableName);
912
+ const stats = await collection.aggregate([
913
+ { $collStats: { storageStats: {} } },
914
+ ]).toArray();
915
+ const indexStats = ((_b = (_a = stats[0]) === null || _a === void 0 ? void 0 : _a.storageStats) === null || _b === void 0 ? void 0 : _b.indexSizes) || {};
916
+ const results = [];
917
+ for (const [name, size] of Object.entries(indexStats)) {
918
+ if (indexName && name !== indexName)
919
+ continue;
920
+ results.push({
921
+ indexName: name,
922
+ tableName,
923
+ scans: 0, // MongoDB doesn't expose this easily
924
+ tuplesRead: 0,
925
+ sizeBytes: size,
926
+ sizeFormatted: this.formatBytes(size),
927
+ });
928
+ }
929
+ return results;
867
930
  }
868
931
  catch (error) {
869
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.INDEX_ERROR, `Failed to get MongoDB index statistics: ${error.message}`, error);
932
+ throw database_error_1.DatabaseError.schemaError(`Failed to get index statistics: ${error.message}`, error);
870
933
  }
871
934
  }
872
- // ==================== Migration Methods ====================
873
- async runMigration(connection, migration, options) {
874
- // TODO: Implement migration logic
875
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.MIGRATION_ERROR, 'MongoDB migration not implemented yet');
876
- }
877
- async rollbackMigration(connection, migration, options) {
878
- // TODO: Implement rollback logic
879
- throw new database_types_1.DatabaseError(database_types_1.DatabaseErrorType.MIGRATION_ERROR, 'MongoDB migration rollback not implemented yet');
935
+ // ==================== UTILITY METHODS ====================
936
+ escapeIdentifier(identifier) {
937
+ // MongoDB doesn't need identifier escaping in the same way SQL databases do
938
+ return identifier;
880
939
  }
881
- async getMigrationHistory(connection, options) {
882
- // TODO: Implement migration history
883
- return [];
940
+ escapeValue(value) {
941
+ // MongoDB uses BSON, no escaping needed
942
+ return JSON.stringify(value);
884
943
  }
885
- // ==================== Helper Methods ====================
886
944
  /**
887
- * Build MongoDB filter from where clause
888
- * Supports both simplified syntax (GT, LT, AND, OR, etc.) and legacy $ prefix operators
945
+ * Check if value is an update operator object
889
946
  */
890
- buildMongoFilter(where) {
891
- if (!where) {
892
- return {};
947
+ isUpdateOperator(value) {
948
+ if (!value || typeof value !== 'object')
949
+ return false;
950
+ const operators = ['$INC', '$DEC', '$MUL', '$MIN', '$MAX', '$SET', '$UNSET', '$PUSH', '$PULL', '$ADDTOSET'];
951
+ return operators.some(op => op in value);
952
+ }
953
+ getParameterPlaceholder(index) {
954
+ // MongoDB doesn't use parameter placeholders like SQL
955
+ return '';
956
+ }
957
+ getColumnTypeString(columnType, options) {
958
+ // MongoDB is schemaless, but we can map to BSON types
959
+ const typeMap = {
960
+ [enums_1.ColumnType.INTEGER]: 'int',
961
+ [enums_1.ColumnType.BIGINT]: 'long',
962
+ [enums_1.ColumnType.FLOAT]: 'double',
963
+ [enums_1.ColumnType.DOUBLE]: 'double',
964
+ [enums_1.ColumnType.DECIMAL]: 'decimal',
965
+ [enums_1.ColumnType.STRING]: 'string',
966
+ [enums_1.ColumnType.TEXT]: 'string',
967
+ [enums_1.ColumnType.BOOLEAN]: 'bool',
968
+ [enums_1.ColumnType.DATE]: 'date',
969
+ [enums_1.ColumnType.DATETIME]: 'date',
970
+ [enums_1.ColumnType.TIMESTAMP]: 'date',
971
+ [enums_1.ColumnType.JSON]: 'object',
972
+ [enums_1.ColumnType.JSONB]: 'object',
973
+ [enums_1.ColumnType.UUID]: 'string',
974
+ [enums_1.ColumnType.BINARY]: 'binData',
975
+ [enums_1.ColumnType.ARRAY]: 'array',
976
+ };
977
+ return typeMap[columnType] || columnType;
978
+ }
979
+ getSupportedFeatures() {
980
+ return [
981
+ base_adapter_1.DatabaseFeature.TRANSACTIONS,
982
+ base_adapter_1.DatabaseFeature.JSON,
983
+ base_adapter_1.DatabaseFeature.ARRAYS,
984
+ base_adapter_1.DatabaseFeature.TTL,
985
+ base_adapter_1.DatabaseFeature.CHANGE_STREAMS,
986
+ base_adapter_1.DatabaseFeature.SECONDARY_INDEXES,
987
+ base_adapter_1.DatabaseFeature.AGGREGATION_PIPELINE,
988
+ base_adapter_1.DatabaseFeature.ATOMIC_COUNTERS,
989
+ base_adapter_1.DatabaseFeature.BATCH_OPERATIONS,
990
+ base_adapter_1.DatabaseFeature.REGEX,
991
+ ];
992
+ }
993
+ parseError(error) {
994
+ const code = error.code;
995
+ let type = enums_1.DatabaseErrorType.UNKNOWN_ERROR;
996
+ // Map MongoDB error codes
997
+ switch (code) {
998
+ case 11000: // Duplicate key
999
+ type = enums_1.DatabaseErrorType.UNIQUE_VIOLATION;
1000
+ break;
1001
+ case 18: // Authentication failed
1002
+ type = enums_1.DatabaseErrorType.AUTHENTICATION_ERROR;
1003
+ break;
1004
+ case 26: // Namespace not found
1005
+ type = enums_1.DatabaseErrorType.NOT_FOUND;
1006
+ break;
1007
+ case 48: // Namespace already exists
1008
+ type = enums_1.DatabaseErrorType.SCHEMA_ERROR;
1009
+ break;
1010
+ default:
1011
+ if (error.name === 'MongoNetworkError') {
1012
+ type = enums_1.DatabaseErrorType.CONNECTION_ERROR;
1013
+ }
893
1014
  }
894
- if (typeof where !== 'object' || where === null) {
895
- return where;
1015
+ return {
1016
+ type,
1017
+ message: error.message || 'Unknown database error',
1018
+ code: String(code),
1019
+ details: {
1020
+ codeName: error.codeName,
1021
+ keyPattern: error.keyPattern,
1022
+ keyValue: error.keyValue,
1023
+ },
1024
+ };
1025
+ }
1026
+ // ==================== PRIVATE HELPER METHODS ====================
1027
+ ensureConnected() {
1028
+ if (!this.connected || !this.db) {
1029
+ throw new database_error_1.DatabaseError('Not connected to MongoDB database', enums_1.DatabaseErrorType.CONNECTION_ERROR);
896
1030
  }
897
- const buildCondition = (condition) => {
898
- if (typeof condition !== 'object' || condition === null) {
899
- return condition;
1031
+ }
1032
+ buildMongoFilter(where) {
1033
+ const filter = {};
1034
+ for (const [key, value] of Object.entries(where)) {
1035
+ if (key === '$AND') {
1036
+ filter.$and = Object.entries(value).map(([k, v]) => this.buildMongoFilter({ [k]: v }));
900
1037
  }
901
- // Handle logical operators (supports $AND, AND, and legacy $and)
902
- if (condition.$AND || condition.AND || condition.$and) {
903
- const andConditions = condition.$AND || condition.AND || condition.$and;
904
- if (typeof andConditions === 'object' && !Array.isArray(andConditions)) {
905
- // New syntax: { $AND: { col1: val1, col2: val2 } }
906
- return buildCondition(andConditions);
907
- }
908
- else {
909
- // Array syntax: { $AND: [cond1, cond2] }
910
- return { $and: andConditions.map(buildCondition) };
911
- }
1038
+ else if (key === '$OR') {
1039
+ filter.$or = Object.entries(value).map(([k, v]) => this.buildMongoFilter({ [k]: v }));
912
1040
  }
913
- if (condition.$OR || condition.OR || condition.$or) {
914
- const orConditions = condition.$OR || condition.OR || condition.$or;
915
- if (typeof orConditions === 'object' && !Array.isArray(orConditions)) {
916
- // New syntax: { $OR: { col1: val1, col2: val2 } }
917
- const subConditions = [];
918
- for (const [key, value] of Object.entries(orConditions)) {
919
- if (key === '$AND' || key === 'AND' || key === '$and' || key === '$OR' || key === 'OR' || key === '$or') {
920
- subConditions.push(buildCondition({ [key]: value }));
921
- }
922
- else {
923
- subConditions.push(buildCondition({ [key]: value }));
924
- }
925
- }
926
- return { $or: subConditions };
927
- }
928
- else {
929
- // Array syntax: { $OR: [cond1, cond2] }
930
- return { $or: orConditions.map(buildCondition) };
931
- }
1041
+ else if (key === '$NOT') {
1042
+ filter.$nor = [this.buildMongoFilter(value)];
932
1043
  }
933
- // Handle column conditions
934
- const filter = {};
935
- for (const [key, value] of Object.entries(condition)) {
936
- // Skip logical operators at this level
937
- if (key === '$AND' || key === 'AND' || key === '$and' || key === '$OR' || key === 'OR' || key === '$or') {
938
- continue;
939
- }
940
- if (typeof value === 'object' && value !== null && !Array.isArray(value) && !(value instanceof Date)) {
941
- // Handle comparison operators
942
- const operators = {};
943
- for (const [op, opValue] of Object.entries(value)) {
944
- switch (op) {
945
- // Preferred $-prefixed syntax - map to MongoDB operators
946
- case '$GT':
947
- case 'GT':
948
- operators.$gt = opValue;
949
- break;
950
- case '$GTE':
951
- case 'GTE':
952
- operators.$gte = opValue;
953
- break;
954
- case '$LT':
955
- case 'LT':
956
- operators.$lt = opValue;
957
- break;
958
- case '$LTE':
959
- case 'LTE':
960
- operators.$lte = opValue;
961
- break;
962
- case '$NE':
963
- case '$NOT':
964
- case 'NE':
965
- case 'NOT':
966
- operators.$ne = opValue;
967
- break;
968
- case '$IN':
969
- case 'IN':
970
- operators.$in = opValue;
971
- break;
972
- case '$NOT_IN':
973
- case 'NOT_IN':
974
- operators.$nin = opValue;
975
- break;
976
- case '$LIKE':
977
- case 'LIKE':
978
- // MongoDB uses regex for pattern matching
979
- operators.$regex = opValue.replace(/%/g, '.*').replace(/_/g, '.');
980
- operators.$options = 'i';
981
- break;
982
- case '$IS_NULL':
983
- case 'IS_NULL':
984
- operators.$eq = null;
985
- break;
986
- case '$IS_NOT_NULL':
987
- case 'IS_NOT_NULL':
988
- operators.$ne = null;
989
- break;
990
- case '$BETWEEN':
991
- case 'BETWEEN':
992
- if (Array.isArray(opValue) && opValue.length === 2) {
993
- operators.$gte = opValue[0];
994
- operators.$lte = opValue[1];
995
- }
996
- break;
997
- // Legacy lowercase $ operators - pass through
998
- case '$gt':
999
- case '$gte':
1000
- case '$lt':
1001
- case '$lte':
1002
- case '$ne':
1003
- case '$in':
1004
- case '$nin':
1005
- case '$regex':
1006
- case '$options':
1007
- case '$exists':
1008
- case '$type':
1009
- case '$eq':
1010
- case '$elemMatch':
1011
- case '$size':
1012
- case '$all':
1013
- operators[op] = opValue;
1014
- break;
1015
- }
1044
+ else if (value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
1045
+ // Handle operators
1046
+ const fieldFilter = {};
1047
+ for (const [op, opValue] of Object.entries(value)) {
1048
+ switch (op) {
1049
+ case '$EQ':
1050
+ fieldFilter.$eq = opValue;
1051
+ break;
1052
+ case '$NE':
1053
+ case '$NOT':
1054
+ fieldFilter.$ne = opValue;
1055
+ break;
1056
+ case '$GT':
1057
+ fieldFilter.$gt = opValue;
1058
+ break;
1059
+ case '$GTE':
1060
+ fieldFilter.$gte = opValue;
1061
+ break;
1062
+ case '$LT':
1063
+ fieldFilter.$lt = opValue;
1064
+ break;
1065
+ case '$LTE':
1066
+ fieldFilter.$lte = opValue;
1067
+ break;
1068
+ case '$IN':
1069
+ fieldFilter.$in = opValue;
1070
+ break;
1071
+ case '$NOT_IN':
1072
+ fieldFilter.$nin = opValue;
1073
+ break;
1074
+ case '$LIKE':
1075
+ // Convert SQL LIKE pattern to regex (case-sensitive)
1076
+ // 1. Escape regex special characters first (except % and _)
1077
+ // 2. Replace SQL wildcards with regex equivalents
1078
+ // 3. Anchor pattern to match full string
1079
+ const likePattern = '^' + opValue
1080
+ .replace(/[.*+?^${}()|[\]\\]/g, (char) => {
1081
+ // Don't escape % and _ - they are SQL wildcards
1082
+ if (char === '%' || char === '_')
1083
+ return char;
1084
+ return '\\' + char;
1085
+ })
1086
+ .replace(/%/g, '.*')
1087
+ .replace(/_/g, '.') + '$';
1088
+ fieldFilter.$regex = new RegExp(likePattern);
1089
+ break;
1090
+ case '$ILIKE':
1091
+ // Convert SQL ILIKE pattern to regex (case-insensitive)
1092
+ const ilikePattern = '^' + opValue
1093
+ .replace(/[.*+?^${}()|[\]\\]/g, (char) => {
1094
+ if (char === '%' || char === '_')
1095
+ return char;
1096
+ return '\\' + char;
1097
+ })
1098
+ .replace(/%/g, '.*')
1099
+ .replace(/_/g, '.') + '$';
1100
+ fieldFilter.$regex = new RegExp(ilikePattern, 'i');
1101
+ break;
1102
+ case '$IS_NULL':
1103
+ if (opValue) {
1104
+ fieldFilter.$eq = null;
1105
+ }
1106
+ else {
1107
+ fieldFilter.$ne = null;
1108
+ }
1109
+ break;
1110
+ case '$IS_NOT_NULL':
1111
+ if (opValue) {
1112
+ fieldFilter.$ne = null;
1113
+ }
1114
+ else {
1115
+ fieldFilter.$eq = null;
1116
+ }
1117
+ break;
1118
+ case '$BETWEEN':
1119
+ const [min, max] = opValue;
1120
+ fieldFilter.$gte = min;
1121
+ fieldFilter.$lte = max;
1122
+ break;
1123
+ case '$CONTAINS':
1124
+ fieldFilter.$elemMatch = { $eq: opValue };
1125
+ break;
1126
+ case '$OVERLAPS':
1127
+ fieldFilter.$elemMatch = { $in: opValue };
1128
+ break;
1016
1129
  }
1017
- filter[key] = operators;
1018
- }
1019
- else {
1020
- // Simple equality
1021
- filter[key] = value;
1022
1130
  }
1131
+ filter[key] = fieldFilter;
1023
1132
  }
1024
- return filter;
1025
- };
1026
- return buildCondition(where);
1133
+ else {
1134
+ // Simple equality
1135
+ filter[key] = value;
1136
+ }
1137
+ }
1138
+ return filter;
1027
1139
  }
1028
- // ==================== Utility Methods ====================
1029
- /**
1030
- * Escape identifier (collection/field name)
1031
- */
1032
- escapeIdentifier(identifier) {
1033
- // MongoDB doesn't require escaping in the same way as SQL
1034
- // But we can sanitize the identifier
1035
- return identifier.replace(/[.$]/g, '_');
1140
+ extractFieldTypes(obj, prefix, fieldTypes) {
1141
+ for (const [key, value] of Object.entries(obj)) {
1142
+ const fieldName = prefix ? `${prefix}.${key}` : key;
1143
+ const type = this.getJsType(value);
1144
+ if (!fieldTypes.has(fieldName)) {
1145
+ fieldTypes.set(fieldName, new Set());
1146
+ }
1147
+ fieldTypes.get(fieldName).add(type);
1148
+ // Recurse into nested objects (but not arrays)
1149
+ if (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
1150
+ this.extractFieldTypes(value, fieldName, fieldTypes);
1151
+ }
1152
+ }
1036
1153
  }
1037
- /**
1038
- * Escape value
1039
- */
1040
- escapeValue(value) {
1041
- // MongoDB uses BSON, not SQL, so escaping is different
1042
- // This is mainly for display/logging purposes
1043
- if (value === null || value === undefined) {
1154
+ getJsType(value) {
1155
+ if (value === null)
1044
1156
  return 'null';
1045
- }
1046
- if (typeof value === 'string') {
1047
- return `"${value.replace(/"/g, '\\"')}"`;
1048
- }
1049
- if (value instanceof Date) {
1050
- return value.toISOString();
1051
- }
1052
- if (typeof value === 'object') {
1053
- return JSON.stringify(value);
1054
- }
1055
- return String(value);
1157
+ if (Array.isArray(value))
1158
+ return 'array';
1159
+ if (value instanceof Date)
1160
+ return 'date';
1161
+ if (value && value._bsontype === 'ObjectId')
1162
+ return 'ObjectId';
1163
+ return typeof value;
1056
1164
  }
1057
- /**
1058
- * Get database version
1059
- */
1060
- async getDatabaseVersion(connection) {
1061
- try {
1062
- const db = connection.getClient();
1063
- const info = await db.admin().serverInfo();
1064
- return info.version || 'Unknown';
1065
- }
1066
- catch (error) {
1067
- return 'Unknown';
1068
- }
1165
+ formatBytes(bytes) {
1166
+ if (bytes === 0)
1167
+ return '0 B';
1168
+ const k = 1024;
1169
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
1170
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
1171
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
1069
1172
  }
1070
1173
  }
1071
1174
  exports.MongoDBAdapter = MongoDBAdapter;