@ductape/sdk 0.0.4-v51 → 0.0.4-v53

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
@@ -0,0 +1,2680 @@
1
+ "use strict";
2
+ /**
3
+ * DatabaseService - Main ORM Service Class
4
+ *
5
+ * This is the primary entry point for all database operations in the Ductape SDK.
6
+ * It provides a unified interface for querying, writing, transactions, schema management,
7
+ * migrations, and database actions across multiple database types.
8
+ *
9
+ * Supported databases: PostgreSQL, MySQL, MongoDB, DynamoDB, MariaDB, Cassandra
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.databaseService = exports.DatabaseConnection = exports.DatabaseService = void 0;
49
+ const enums_1 = require("./types/enums");
50
+ const presave_processor_1 = require("./presave/presave-processor");
51
+ const adapter_factory_1 = require("./adapters/adapter.factory");
52
+ const query_builder_1 = require("./operators/query-builder");
53
+ const aggregation_builder_1 = require("./operators/aggregation-builder");
54
+ const transaction_manager_1 = require("./transactions/transaction-manager");
55
+ const schema_manager_1 = require("./schema/schema-manager");
56
+ const migration_engine_1 = require("./migrations/migration-engine");
57
+ const action_manager_1 = require("./actions/action-manager");
58
+ const trigger_processor_1 = require("./triggers/trigger-processor");
59
+ const trigger_interface_1 = require("./types/trigger.interface");
60
+ const database_error_1 = require("./utils/database-error");
61
+ const products_service_1 = __importDefault(require("../products/services/products.service"));
62
+ const types_1 = require("../types");
63
+ const cache_manager_1 = require("../cache/cache.manager");
64
+ const processor_service_1 = __importDefault(require("../processor/services/processor.service"));
65
+ const crypto_1 = require("crypto");
66
+ const logs_service_1 = __importDefault(require("../logs/logs.service"));
67
+ const logs_types_1 = require("../logs/logs.types");
68
+ const processor_utils_1 = require("../processor/utils/processor.utils");
69
+ const secrets_1 = require("../secrets");
70
+ /**
71
+ * Main Database Service class
72
+ * Provides unified ORM interface for all supported databases
73
+ */
74
+ class DatabaseService {
75
+ /**
76
+ * Create a new DatabaseService instance
77
+ * @param config - Optional configuration for authentication and workspace context
78
+ */
79
+ constructor(config) {
80
+ this.adapters = new Map();
81
+ this.connectionContexts = new Map();
82
+ this.currentContext = null;
83
+ this.schemaManagers = new Map();
84
+ this.migrationEngines = new Map();
85
+ /** Service configuration */
86
+ this.config = null;
87
+ /** ProductBuilder instances cache (keyed by product tag) */
88
+ this.productBuilders = new Map();
89
+ /** LogService instance for logging operations */
90
+ this.logService = null;
91
+ /** Current product ID for logging */
92
+ this.productId = '';
93
+ /** CacheManager for two-tier caching (Redis + remote) */
94
+ this.cacheManager = null;
95
+ /** Private keys cache for products (keyed by product tag) */
96
+ this.privateKeys = new Map();
97
+ this.config = config || null;
98
+ this.adapterFactory = new adapter_factory_1.AdapterFactory();
99
+ this.transactionManager = new transaction_manager_1.TransactionManager();
100
+ this.actionManager = new action_manager_1.ActionManager(this);
101
+ // Initialize CacheManager if Redis client is provided
102
+ if (config === null || config === void 0 ? void 0 : config.redis_client) {
103
+ this.cacheManager = new cache_manager_1.CacheManager({
104
+ workspace_id: config.workspace_id,
105
+ public_key: config.public_key,
106
+ user_id: config.user_id,
107
+ token: config.token,
108
+ env_type: config.env_type,
109
+ redis_client: config.redis_client,
110
+ });
111
+ }
112
+ }
113
+ /**
114
+ * Get or create a SchemaManager for the given adapter key or current context
115
+ */
116
+ getSchemaManager(adapterKey) {
117
+ // If no key provided, use current context
118
+ if (!adapterKey) {
119
+ if (!this.currentContext) {
120
+ throw new database_error_1.DatabaseError('No active database connection. Please connect first.', enums_1.DatabaseErrorType.CONNECTION_ERROR);
121
+ }
122
+ adapterKey = this.buildContextKey(this.currentContext.database, this.currentContext.env);
123
+ }
124
+ let manager = this.schemaManagers.get(adapterKey);
125
+ if (!manager) {
126
+ const adapter = this.adapters.get(adapterKey);
127
+ if (!adapter) {
128
+ throw new database_error_1.DatabaseError(`No adapter found for key: ${adapterKey}`, enums_1.DatabaseErrorType.NOT_FOUND);
129
+ }
130
+ manager = new schema_manager_1.SchemaManager(adapter);
131
+ this.schemaManagers.set(adapterKey, manager);
132
+ }
133
+ return manager;
134
+ }
135
+ /**
136
+ * Get or create a MigrationEngine for the given adapter key or current context
137
+ */
138
+ getMigrationEngine(adapterKey) {
139
+ // If no key provided, use current context
140
+ if (!adapterKey) {
141
+ if (!this.currentContext) {
142
+ throw new database_error_1.DatabaseError('No active database connection. Please connect first.', enums_1.DatabaseErrorType.CONNECTION_ERROR);
143
+ }
144
+ adapterKey = this.buildContextKey(this.currentContext.database, this.currentContext.env);
145
+ }
146
+ let engine = this.migrationEngines.get(adapterKey);
147
+ if (!engine) {
148
+ const adapter = this.adapters.get(adapterKey);
149
+ if (!adapter) {
150
+ throw new database_error_1.DatabaseError(`No adapter found for key: ${adapterKey}`, enums_1.DatabaseErrorType.NOT_FOUND);
151
+ }
152
+ engine = new migration_engine_1.MigrationEngine(adapter);
153
+ this.migrationEngines.set(adapterKey, engine);
154
+ }
155
+ return engine;
156
+ }
157
+ // ==================== PRODUCT BUILDER MANAGEMENT ====================
158
+ /**
159
+ * Create a new ProductBuilder instance
160
+ */
161
+ createNewProductBuilder() {
162
+ if (!this.config) {
163
+ throw new database_error_1.DatabaseError('DatabaseService not configured. Please provide config when initializing.', enums_1.DatabaseErrorType.CONFIGURATION_ERROR);
164
+ }
165
+ return new products_service_1.default({
166
+ workspace_id: this.config.workspace_id,
167
+ public_key: this.config.public_key,
168
+ user_id: this.config.user_id,
169
+ token: this.config.token,
170
+ env_type: this.config.env_type,
171
+ });
172
+ }
173
+ /**
174
+ * Get or create a ProductBuilder instance for the given product tag
175
+ */
176
+ async getProductBuilder(productTag) {
177
+ let builder = this.productBuilders.get(productTag);
178
+ if (!builder) {
179
+ builder = this.createNewProductBuilder();
180
+ await builder.initializeProductByTag(productTag);
181
+ this.productBuilders.set(productTag, builder);
182
+ // Update productId for logging
183
+ this.productId = builder.fetchProductId() || '';
184
+ // Cache private key for caching operations
185
+ const privateKey = builder.fetchPrivateKey();
186
+ if (privateKey) {
187
+ this.privateKeys.set(productTag, privateKey);
188
+ }
189
+ }
190
+ return builder;
191
+ }
192
+ /**
193
+ * Initialize logging service
194
+ */
195
+ initializeLogService() {
196
+ if (!this.logService && this.config) {
197
+ this.logService = new logs_service_1.default({
198
+ product_id: this.productId,
199
+ workspace_id: this.config.workspace_id,
200
+ public_key: this.config.public_key,
201
+ user_id: this.config.user_id,
202
+ token: this.config.token,
203
+ env_type: this.config.env_type,
204
+ });
205
+ }
206
+ }
207
+ /**
208
+ * Create a new ProcessorService instance for job scheduling
209
+ */
210
+ createNewProcessor() {
211
+ if (!this.config) {
212
+ throw new database_error_1.DatabaseError('DatabaseService not configured. Please provide config when initializing.', enums_1.DatabaseErrorType.CONFIGURATION_ERROR);
213
+ }
214
+ return new processor_service_1.default({
215
+ workspace_id: this.config.workspace_id,
216
+ public_key: this.config.public_key,
217
+ user_id: this.config.user_id,
218
+ token: this.config.token,
219
+ env_type: this.config.env_type,
220
+ });
221
+ }
222
+ // ==================== DATABASE CRUD OPERATIONS ====================
223
+ /**
224
+ * Register a new database configuration for a product
225
+ * @param productTag - The product tag
226
+ * @param data - The database configuration data
227
+ */
228
+ async registerDatabase(productTag, data) {
229
+ const builder = await this.getProductBuilder(productTag);
230
+ return builder.createDatabase(data);
231
+ }
232
+ /**
233
+ * Fetch all databases for a product
234
+ * @param productTag - The product tag
235
+ * @returns Array of database configurations
236
+ */
237
+ async fetchAllDatabases(productTag) {
238
+ const builder = await this.getProductBuilder(productTag);
239
+ return builder.fetchDatabases();
240
+ }
241
+ /**
242
+ * Fetch a specific database by tag
243
+ * @param productTag - The product tag
244
+ * @param databaseTag - The database tag
245
+ * @returns The database configuration or null if not found
246
+ */
247
+ async fetchDatabase(productTag, databaseTag) {
248
+ const builder = await this.getProductBuilder(productTag);
249
+ return builder.fetchDatabase(databaseTag);
250
+ }
251
+ /**
252
+ * Update a database configuration
253
+ * @param productTag - The product tag
254
+ * @param databaseTag - The database tag
255
+ * @param data - The data to update
256
+ */
257
+ async updateDatabase(productTag, databaseTag, data) {
258
+ const builder = await this.getProductBuilder(productTag);
259
+ return builder.updateDatabase(databaseTag, data);
260
+ }
261
+ // ==================== DATABASE TRIGGER OPERATIONS ====================
262
+ /**
263
+ * Create a database trigger
264
+ * @param productTag - The product tag
265
+ * @param data - The trigger configuration
266
+ */
267
+ async createTrigger(productTag, data) {
268
+ const builder = await this.getProductBuilder(productTag);
269
+ return builder.createDatabaseTrigger(data);
270
+ }
271
+ /**
272
+ * Update a database trigger
273
+ * @param productTag - The product tag
274
+ * @param data - The trigger configuration
275
+ */
276
+ async updateTrigger(productTag, data) {
277
+ const builder = await this.getProductBuilder(productTag);
278
+ return builder.updateDatabaseTrigger(data);
279
+ }
280
+ /**
281
+ * Fetch a database trigger
282
+ * @param productTag - The product tag
283
+ * @param tag - The trigger tag (format: database_tag:trigger_tag)
284
+ */
285
+ async fetchTrigger(productTag, tag) {
286
+ const builder = await this.getProductBuilder(productTag);
287
+ return builder.fetchDatabaseTrigger(tag);
288
+ }
289
+ /**
290
+ * Fetch all triggers for a database
291
+ * @param productTag - The product tag
292
+ * @param databaseTag - The database tag
293
+ */
294
+ async fetchTriggers(productTag, databaseTag) {
295
+ const builder = await this.getProductBuilder(productTag);
296
+ return builder.fetchDatabaseTriggers(databaseTag);
297
+ }
298
+ /**
299
+ * Delete a database trigger
300
+ * @param productTag - The product tag
301
+ * @param tag - The trigger tag (format: database_tag:trigger_tag)
302
+ */
303
+ async deleteTrigger(productTag, tag) {
304
+ const builder = await this.getProductBuilder(productTag);
305
+ return builder.deleteDatabaseTrigger(tag);
306
+ }
307
+ /**
308
+ * Get the current service configuration
309
+ */
310
+ getConfig() {
311
+ return this.config;
312
+ }
313
+ /**
314
+ * Update the service configuration (used after auth is complete)
315
+ */
316
+ updateConfig(config) {
317
+ if (this.config) {
318
+ this.config = Object.assign(Object.assign({}, this.config), config);
319
+ }
320
+ else {
321
+ this.config = config;
322
+ }
323
+ }
324
+ /**
325
+ * Get workspace ID from config
326
+ */
327
+ getWorkspaceId() {
328
+ var _a;
329
+ return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || null;
330
+ }
331
+ /**
332
+ * Get user ID from config
333
+ */
334
+ getUserId() {
335
+ var _a;
336
+ return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.user_id) || null;
337
+ }
338
+ /**
339
+ * Get authentication token from config
340
+ */
341
+ getToken() {
342
+ var _a;
343
+ return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.token) || null;
344
+ }
345
+ /**
346
+ * Get environment type from config
347
+ */
348
+ getEnvType() {
349
+ var _a;
350
+ return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.env_type) || null;
351
+ }
352
+ // ==================== CONNECTION MANAGEMENT ====================
353
+ /**
354
+ * Create/register a new database configuration
355
+ *
356
+ * @example
357
+ * // Persist to product
358
+ * await ductape.database.create({
359
+ * product: 'my-product',
360
+ * name: 'User Database',
361
+ * tag: 'users-db',
362
+ * type: 'postgresql',
363
+ * description: 'Stores user accounts and profiles',
364
+ * envs: [
365
+ * { slug: 'dev', connection_url: 'postgresql://localhost:5432/myapp_dev' },
366
+ * { slug: 'prd', connection_url: 'postgresql://prod-host:5432/myapp_prod' },
367
+ * ],
368
+ * });
369
+ *
370
+ * // Local only (not persisted)
371
+ * await ductape.database.create({
372
+ * name: 'Temp Database',
373
+ * tag: 'temp-db',
374
+ * type: 'postgresql',
375
+ * envs: [{ slug: 'dev', connection_url: 'postgresql://localhost:5432/temp' }],
376
+ * });
377
+ */
378
+ async create(config) {
379
+ var _a;
380
+ // Validate required fields
381
+ if (!config.name || !config.tag || !config.type || !((_a = config.envs) === null || _a === void 0 ? void 0 : _a.length)) {
382
+ throw new database_error_1.DatabaseError('Missing required fields: name, tag, type, and envs are required', enums_1.DatabaseErrorType.VALIDATION_ERROR);
383
+ }
384
+ // Validate database type
385
+ if (!Object.values(enums_1.DatabaseType).includes(config.type)) {
386
+ throw new database_error_1.DatabaseError(`Unsupported database type: ${config.type}. Supported types: ${Object.values(enums_1.DatabaseType).join(', ')}`, enums_1.DatabaseErrorType.VALIDATION_ERROR);
387
+ }
388
+ // Persist to ProductBuilder if product is specified
389
+ if (config.product) {
390
+ const productBuilder = await this.getProductBuilder(config.product);
391
+ await productBuilder.createDatabase({
392
+ name: config.name,
393
+ tag: config.tag,
394
+ type: config.type, // DatabaseType maps to DatabaseTypes enum
395
+ description: config.description,
396
+ envs: config.envs.map(env => ({
397
+ slug: env.slug,
398
+ connection_url: env.connection_url,
399
+ description: env.description,
400
+ })),
401
+ });
402
+ }
403
+ // Store the configuration locally - prepare the adapter for each environment
404
+ for (const envConfig of config.envs) {
405
+ const contextKey = this.buildContextKey(config.tag, envConfig.slug);
406
+ const adapter = this.adapterFactory.create(config.type);
407
+ this.adapters.set(contextKey, adapter);
408
+ this.connectionContexts.set(contextKey, {
409
+ database: config.tag,
410
+ env: envConfig.slug,
411
+ type: config.type,
412
+ connectionUrl: envConfig.connection_url,
413
+ connected: false,
414
+ name: config.name,
415
+ description: config.description,
416
+ });
417
+ }
418
+ }
419
+ /**
420
+ * Connect to a database
421
+ *
422
+ * @example
423
+ * const result = await ductape.database.connect({
424
+ * env: 'dev',
425
+ * product: 'my-app',
426
+ * database: 'users-db',
427
+ * });
428
+ * console.log('Connected:', result.connected);
429
+ * console.log('Database Version:', result.version);
430
+ * console.log('Latency:', result.latency, 'ms');
431
+ *
432
+ * // With the returned connection object, you can use scoped operations:
433
+ * const db = await ductape.databases.connect({ env: 'dev', product: 'my-app', database: 'users-db' });
434
+ * await db.triggers.create({ tag: 'my-trigger', ... });
435
+ */
436
+ async connect(config) {
437
+ var _a, _b, _c, _d, _e, _f;
438
+ const process_id = (0, processor_utils_1.generateObjectId)();
439
+ const contextKey = this.buildContextKey(config.database, config.env);
440
+ let adapter = this.adapters.get(contextKey);
441
+ let context = this.connectionContexts.get(contextKey);
442
+ // If not found locally, fetch from the remote API
443
+ if (!adapter || !context) {
444
+ if (!config.product) {
445
+ throw new database_error_1.DatabaseError(`Database '${config.database}' not found locally. Please provide 'product' to fetch from remote.`, enums_1.DatabaseErrorType.NOT_FOUND);
446
+ }
447
+ // Initialize product builder to get productId for logging
448
+ await this.getProductBuilder(config.product);
449
+ // Fetch the database config from the API
450
+ const dbConfig = await this.fetchDatabase(config.product, config.database);
451
+ if (!dbConfig) {
452
+ throw new database_error_1.DatabaseError(`Database '${config.database}' not found for product '${config.product}'.`, enums_1.DatabaseErrorType.NOT_FOUND);
453
+ }
454
+ // Find the environment connection URL
455
+ const envConfig = dbConfig.envs.find((e) => e.slug === config.env);
456
+ if (!envConfig) {
457
+ throw new database_error_1.DatabaseError(`Environment '${config.env}' not found for database '${config.database}'. Available environments: ${dbConfig.envs.map(e => e.slug).join(', ')}`, enums_1.DatabaseErrorType.NOT_FOUND);
458
+ }
459
+ // Create and store the adapter and context
460
+ const databaseType = this.convertDatabaseType(dbConfig.type);
461
+ adapter = this.adapterFactory.create(databaseType);
462
+ // Resolve secret references in connection URL
463
+ let connectionUrl = envConfig.connection_url;
464
+ const secretCheck = (0, secrets_1.isSecretReference)(connectionUrl);
465
+ if (secretCheck.isSecret) {
466
+ const secretsService = (0, secrets_1.getSecretsService)();
467
+ if (secretsService) {
468
+ const resolved = await secretsService.resolve(connectionUrl, { env: config.env });
469
+ connectionUrl = resolved.value;
470
+ }
471
+ else {
472
+ throw new database_error_1.DatabaseError(`Connection URL contains secret reference '${connectionUrl}' but secrets service is not initialized. ` +
473
+ `Please ensure the Ductape client is properly initialized.`, enums_1.DatabaseErrorType.CONNECTION_ERROR);
474
+ }
475
+ }
476
+ context = {
477
+ database: config.database,
478
+ env: config.env,
479
+ type: databaseType,
480
+ connectionUrl,
481
+ connected: false,
482
+ name: dbConfig.name,
483
+ description: dbConfig.description,
484
+ };
485
+ this.adapters.set(contextKey, adapter);
486
+ this.connectionContexts.set(contextKey, context);
487
+ }
488
+ // Initialize logging
489
+ this.initializeLogService();
490
+ const baseLogs = {
491
+ product_tag: config.product || '',
492
+ workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '',
493
+ env: config.env,
494
+ process_id,
495
+ type: logs_types_1.LogEventTypes.DATABASE,
496
+ parent_tag: config.database,
497
+ data: { database: config.database, env: config.env },
498
+ };
499
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database connect - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
500
+ try {
501
+ await adapter.connect({
502
+ connectionUrl: context.connectionUrl,
503
+ });
504
+ context.connected = true;
505
+ context.product = config.product;
506
+ this.currentContext = context;
507
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database connect - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
508
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
509
+ // Return a DatabaseConnection object for scoped operations
510
+ return new DatabaseConnection(this, config.database, config.env, config.product || '');
511
+ }
512
+ catch (error) {
513
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database connect - failed', failed_execution: true, data: { database: config.database, env: config.env, error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
514
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
515
+ throw new database_error_1.DatabaseError(`Failed to connect to database: ${error.message}`, enums_1.DatabaseErrorType.CONNECTION_ERROR, error);
516
+ }
517
+ }
518
+ /**
519
+ * Test database connection without establishing persistent connection
520
+ *
521
+ * @example
522
+ * const result = await ductape.database.testConnection({
523
+ * env: 'dev',
524
+ * product: 'my-app',
525
+ * database: 'users-db',
526
+ * });
527
+ * if (result.connected) {
528
+ * console.log('Connection successful!');
529
+ * } else {
530
+ * console.error('Connection failed:', result.error);
531
+ * }
532
+ */
533
+ async testConnection(config) {
534
+ const contextKey = this.buildContextKey(config.database, config.env);
535
+ let adapter = this.adapters.get(contextKey);
536
+ let context = this.connectionContexts.get(contextKey);
537
+ if (!adapter || !context) {
538
+ return {
539
+ connected: false,
540
+ error: `Database '${config.database}' not found for environment '${config.env}'`,
541
+ };
542
+ }
543
+ const startTime = Date.now();
544
+ try {
545
+ const result = await adapter.testConnection({
546
+ connectionUrl: context.connectionUrl,
547
+ });
548
+ return {
549
+ connected: result.connected,
550
+ version: result.version,
551
+ latency: Date.now() - startTime,
552
+ };
553
+ }
554
+ catch (error) {
555
+ return {
556
+ connected: false,
557
+ error: error.message,
558
+ latency: Date.now() - startTime,
559
+ };
560
+ }
561
+ }
562
+ /**
563
+ * Disconnect from the current database
564
+ */
565
+ async disconnect() {
566
+ if (this.currentContext) {
567
+ const contextKey = this.buildContextKey(this.currentContext.database, this.currentContext.env);
568
+ const adapter = this.adapters.get(contextKey);
569
+ if (adapter) {
570
+ await adapter.disconnect();
571
+ this.currentContext.connected = false;
572
+ }
573
+ this.currentContext = null;
574
+ }
575
+ }
576
+ /**
577
+ * Close all database connections
578
+ *
579
+ * @example
580
+ * await ductape.database.closeAll();
581
+ */
582
+ async closeAll() {
583
+ const disconnectPromises = [];
584
+ for (const [key, adapter] of this.adapters) {
585
+ disconnectPromises.push(adapter.disconnect());
586
+ const context = this.connectionContexts.get(key);
587
+ if (context) {
588
+ context.connected = false;
589
+ }
590
+ }
591
+ await Promise.all(disconnectPromises);
592
+ this.currentContext = null;
593
+ }
594
+ /**
595
+ * Fetch all registered databases
596
+ *
597
+ * @example
598
+ * const databases = await ductape.database.fetchAll();
599
+ * databases.forEach((db) => {
600
+ * console.log(`${db.name} (${db.tag}): ${db.type}`);
601
+ * });
602
+ */
603
+ async fetchAll(product) {
604
+ const databases = new Map();
605
+ for (const [key, context] of this.connectionContexts) {
606
+ if (!databases.has(context.database)) {
607
+ databases.set(context.database, {
608
+ product,
609
+ name: context.name || context.database,
610
+ tag: context.database,
611
+ type: context.type,
612
+ description: context.description,
613
+ envs: [],
614
+ });
615
+ }
616
+ databases.get(context.database).envs.push({
617
+ slug: context.env,
618
+ connection_url: context.connectionUrl,
619
+ });
620
+ }
621
+ return Array.from(databases.values());
622
+ }
623
+ /**
624
+ * Fetch a specific database configuration
625
+ *
626
+ * @example
627
+ * const usersDb = await ductape.database.fetch('users-db');
628
+ * console.log('Database:', usersDb.name);
629
+ * console.log('Type:', usersDb.type);
630
+ * console.log('Environments:', usersDb.envs);
631
+ */
632
+ async fetch(product, database) {
633
+ const databases = await this.fetchAll(product);
634
+ return databases.find((db) => db.tag === database) || null;
635
+ }
636
+ /**
637
+ * Update a local database configuration
638
+ *
639
+ * @example
640
+ * await ductape.database.updateLocalConfig('users-db', {
641
+ * name: 'User Database v2',
642
+ * description: 'Updated user storage',
643
+ * envs: [
644
+ * { slug: 'dev', connection_url: 'postgresql://new-dev-host:5432/myapp' },
645
+ * ],
646
+ * });
647
+ */
648
+ async updateLocalConfig(tag, updates) {
649
+ for (const [key, context] of this.connectionContexts) {
650
+ if (context.database === tag) {
651
+ if (updates.name) {
652
+ context.name = updates.name;
653
+ }
654
+ if (updates.description) {
655
+ context.description = updates.description;
656
+ }
657
+ if (updates.envs) {
658
+ const envUpdate = updates.envs.find((e) => e.slug === context.env);
659
+ if (envUpdate) {
660
+ context.connectionUrl = envUpdate.connection_url;
661
+ }
662
+ }
663
+ }
664
+ }
665
+ }
666
+ // ==================== QUERY OPERATIONS ====================
667
+ /**
668
+ * Query records from a table
669
+ *
670
+ * @example
671
+ * // With established connection
672
+ * const result = await ductape.database.query({
673
+ * table: 'users',
674
+ * where: { status: 'active' },
675
+ * orderBy: { column: 'created_at', order: 'DESC' },
676
+ * limit: 10,
677
+ * });
678
+ *
679
+ * // With explicit connection params
680
+ * const result = await ductape.database.query({
681
+ * env: 'prd',
682
+ * product: 'my-app',
683
+ * database: 'main-db',
684
+ * table: 'users',
685
+ * });
686
+ */
687
+ async query(options) {
688
+ var _a, _b, _c, _d, _e, _f, _g, _h;
689
+ const process_id = (0, processor_utils_1.generateObjectId)();
690
+ this.initializeLogService();
691
+ // Session log fields (will be populated if session is provided)
692
+ let sessionLogFields = {};
693
+ let resolvedOptions = options;
694
+ // Process session if provided
695
+ if (options.session && options.product) {
696
+ const builder = await this.getProductBuilder(options.product);
697
+ const privateKey = builder.fetchPrivateKey();
698
+ if (privateKey) {
699
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
700
+ const sessionResult = await processSessionForExecution(options.session, privateKey, options, options.env);
701
+ if (sessionResult.error) {
702
+ throw new Error(`Session validation failed: ${sessionResult.error}`);
703
+ }
704
+ resolvedOptions = sessionResult.input;
705
+ sessionLogFields = sessionResult.logFields;
706
+ }
707
+ }
708
+ const baseLogs = Object.assign({ product_tag: options.product || '', workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '', env: options.env || '', process_id, type: logs_types_1.LogEventTypes.DATABASE, parent_tag: options.database || '', data: { table: options.table, operation: 'query' } }, sessionLogFields);
709
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database query - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
710
+ try {
711
+ // Check cache if cache tag is provided
712
+ const privateKey = options.product ? this.privateKeys.get(options.product) : undefined;
713
+ if (options.cache && this.cacheManager && privateKey) {
714
+ const cacheOptions = {
715
+ cache_tag: options.cache,
716
+ product_tag: options.product || '',
717
+ component_tag: options.database || '',
718
+ component_type: 'database',
719
+ input: { table: options.table, where: options.where, select: options.select, orderBy: options.orderBy, limit: options.limit, offset: options.offset },
720
+ privateKey,
721
+ };
722
+ const cached = await this.cacheManager.fetch(cacheOptions);
723
+ if (cached.hit && cached.data) {
724
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: `Database query - cache hit (${cached.source})`, successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
725
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
726
+ return cached.data;
727
+ }
728
+ }
729
+ const adapter = this.getAdapter(resolvedOptions);
730
+ const queryBuilder = new query_builder_1.QueryBuilder(adapter.getDatabaseType());
731
+ const builtQuery = queryBuilder.buildQuery(resolvedOptions);
732
+ const result = await adapter.query(builtQuery);
733
+ // Store in cache if cache tag is provided
734
+ if (options.cache && this.cacheManager && privateKey) {
735
+ const cacheOptions = {
736
+ cache_tag: options.cache,
737
+ product_tag: options.product || '',
738
+ component_tag: options.database || '',
739
+ component_type: 'database',
740
+ input: { table: options.table, where: options.where, select: options.select, orderBy: options.orderBy, limit: options.limit, offset: options.offset },
741
+ privateKey,
742
+ };
743
+ await this.cacheManager.store(cacheOptions, result);
744
+ }
745
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database query - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
746
+ (_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish();
747
+ return result;
748
+ }
749
+ catch (error) {
750
+ (_g = this.logService) === null || _g === void 0 ? void 0 : _g.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database query - failed', failed_execution: true, data: { table: options.table, operation: 'query', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
751
+ await ((_h = this.logService) === null || _h === void 0 ? void 0 : _h.publish());
752
+ throw error;
753
+ }
754
+ }
755
+ /**
756
+ * Execute a raw query
757
+ *
758
+ * @example
759
+ * // PostgreSQL
760
+ * const result = await ductape.database.raw({
761
+ * query: 'SELECT * FROM users WHERE created_at > $1 AND status = $2',
762
+ * params: [new Date('2024-01-01'), 'active'],
763
+ * });
764
+ *
765
+ * // MySQL
766
+ * const result = await ductape.database.raw({
767
+ * query: 'SELECT * FROM users WHERE created_at > ? AND status = ?',
768
+ * params: [new Date('2024-01-01'), 'active'],
769
+ * });
770
+ *
771
+ * // MongoDB
772
+ * const result = await ductape.database.raw({
773
+ * query: { status: 'active', created_at: { $gte: new Date('2024-01-01') } },
774
+ * collection: 'users',
775
+ * });
776
+ */
777
+ async raw(options) {
778
+ var _a, _b, _c, _d, _e, _f, _g, _h;
779
+ const process_id = (0, processor_utils_1.generateObjectId)();
780
+ this.initializeLogService();
781
+ const baseLogs = {
782
+ product_tag: options.product || '',
783
+ workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '',
784
+ env: options.env || '',
785
+ process_id,
786
+ type: logs_types_1.LogEventTypes.DATABASE,
787
+ parent_tag: options.database || '',
788
+ data: { operation: 'raw' },
789
+ };
790
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database raw query - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
791
+ try {
792
+ // Check cache if cache tag is provided
793
+ const privateKey = options.product ? this.privateKeys.get(options.product) : undefined;
794
+ if (options.cache && this.cacheManager && privateKey) {
795
+ const cacheOptions = {
796
+ cache_tag: options.cache,
797
+ product_tag: options.product || '',
798
+ component_tag: options.database || '',
799
+ component_type: 'database',
800
+ input: { query: options.query, params: options.params, collection: options.collection },
801
+ privateKey,
802
+ };
803
+ const cached = await this.cacheManager.fetch(cacheOptions);
804
+ if (cached.hit && cached.data) {
805
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: `Database raw query - cache hit (${cached.source})`, successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
806
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
807
+ return cached.data;
808
+ }
809
+ }
810
+ const adapter = this.getAdapter(options);
811
+ const result = await adapter.raw(options);
812
+ // Store in cache if cache tag is provided
813
+ if (options.cache && this.cacheManager && privateKey) {
814
+ const cacheOptions = {
815
+ cache_tag: options.cache,
816
+ product_tag: options.product || '',
817
+ component_tag: options.database || '',
818
+ component_type: 'database',
819
+ input: { query: options.query, params: options.params, collection: options.collection },
820
+ privateKey,
821
+ };
822
+ await this.cacheManager.store(cacheOptions, result);
823
+ }
824
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database raw query - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
825
+ (_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish();
826
+ return result;
827
+ }
828
+ catch (error) {
829
+ (_g = this.logService) === null || _g === void 0 ? void 0 : _g.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database raw query - failed', failed_execution: true, data: { operation: 'raw', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
830
+ await ((_h = this.logService) === null || _h === void 0 ? void 0 : _h.publish());
831
+ throw error;
832
+ }
833
+ }
834
+ // ==================== WRITE OPERATIONS ====================
835
+ /**
836
+ * Insert one or more records
837
+ *
838
+ * @example
839
+ * // Single record
840
+ * const result = await ductape.database.insert({
841
+ * table: 'users',
842
+ * data: {
843
+ * name: 'Jane Doe',
844
+ * email: 'jane@example.com',
845
+ * status: 'active',
846
+ * },
847
+ * returning: true,
848
+ * });
849
+ *
850
+ * // Multiple records
851
+ * const result = await ductape.database.insert({
852
+ * table: 'users',
853
+ * data: [
854
+ * { name: 'User 1', email: 'user1@example.com' },
855
+ * { name: 'User 2', email: 'user2@example.com' },
856
+ * ],
857
+ * });
858
+ *
859
+ * // With conflict handling (upsert)
860
+ * const result = await ductape.database.insert({
861
+ * table: 'users',
862
+ * data: { email: 'john@example.com', name: 'John' },
863
+ * onConflict: {
864
+ * columns: ['email'],
865
+ * action: 'update',
866
+ * update: ['name'],
867
+ * },
868
+ * });
869
+ */
870
+ async insert(options) {
871
+ var _a, _b, _c, _d, _e, _f;
872
+ const process_id = (0, processor_utils_1.generateObjectId)();
873
+ this.initializeLogService();
874
+ // Session log fields (will be populated if session is provided)
875
+ let sessionLogFields = {};
876
+ let resolvedOptions = options;
877
+ // Process session if provided
878
+ if (options.session && options.product) {
879
+ const builder = await this.getProductBuilder(options.product);
880
+ const privateKey = builder.fetchPrivateKey();
881
+ if (privateKey) {
882
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
883
+ const sessionResult = await processSessionForExecution(options.session, privateKey, options, options.env);
884
+ if (sessionResult.error) {
885
+ throw new Error(`Session validation failed: ${sessionResult.error}`);
886
+ }
887
+ resolvedOptions = sessionResult.input;
888
+ sessionLogFields = sessionResult.logFields;
889
+ }
890
+ }
891
+ const baseLogs = Object.assign({ product_tag: options.product || '', workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '', env: options.env || '', process_id, type: logs_types_1.LogEventTypes.DATABASE, parent_tag: options.database || '', data: { table: options.table, operation: 'insert' } }, sessionLogFields);
892
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database insert - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
893
+ try {
894
+ // Apply pre-save operations if specified
895
+ let processedData = resolvedOptions.data;
896
+ if (resolvedOptions.preSave && resolvedOptions.preSave.length > 0) {
897
+ const processor = new presave_processor_1.PreSaveProcessor(resolvedOptions.preSaveConfig);
898
+ const preSaveResult = await processor.process(resolvedOptions.data, resolvedOptions.preSave);
899
+ processedData = preSaveResult.data;
900
+ }
901
+ const adapter = this.getAdapter(resolvedOptions);
902
+ const result = await adapter.insert(Object.assign(Object.assign({}, resolvedOptions), { data: processedData }));
903
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database insert - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
904
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
905
+ return result;
906
+ }
907
+ catch (error) {
908
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database insert - failed', failed_execution: true, data: { table: options.table, operation: 'insert', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
909
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
910
+ throw error;
911
+ }
912
+ }
913
+ /**
914
+ * Update records matching conditions
915
+ *
916
+ * @example
917
+ * // Simple update
918
+ * const result = await ductape.database.update({
919
+ * table: 'users',
920
+ * data: { status: 'inactive' },
921
+ * where: { last_login: { $LT: new Date('2023-01-01') } },
922
+ * });
923
+ *
924
+ * // With increment/decrement
925
+ * await ductape.database.update({
926
+ * table: 'products',
927
+ * data: { stock: { $inc: 10 } },
928
+ * where: { id: productId },
929
+ * });
930
+ */
931
+ async update(options) {
932
+ var _a, _b, _c, _d, _e, _f;
933
+ const process_id = (0, processor_utils_1.generateObjectId)();
934
+ this.initializeLogService();
935
+ // Session log fields (will be populated if session is provided)
936
+ let sessionLogFields = {};
937
+ let resolvedOptions = options;
938
+ // Process session if provided
939
+ if (options.session && options.product) {
940
+ const builder = await this.getProductBuilder(options.product);
941
+ const privateKey = builder.fetchPrivateKey();
942
+ if (privateKey) {
943
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
944
+ const sessionResult = await processSessionForExecution(options.session, privateKey, options, options.env);
945
+ if (sessionResult.error) {
946
+ throw new Error(`Session validation failed: ${sessionResult.error}`);
947
+ }
948
+ resolvedOptions = sessionResult.input;
949
+ sessionLogFields = sessionResult.logFields;
950
+ }
951
+ }
952
+ const baseLogs = Object.assign({ product_tag: options.product || '', workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '', env: options.env || '', process_id, type: logs_types_1.LogEventTypes.DATABASE, parent_tag: options.database || '', data: { table: options.table, operation: 'update' } }, sessionLogFields);
953
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database update - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
954
+ try {
955
+ // Apply pre-save operations if specified
956
+ let processedData = resolvedOptions.data;
957
+ if (resolvedOptions.preSave && resolvedOptions.preSave.length > 0) {
958
+ const processor = new presave_processor_1.PreSaveProcessor(resolvedOptions.preSaveConfig);
959
+ const preSaveResult = await processor.process(resolvedOptions.data, resolvedOptions.preSave);
960
+ processedData = preSaveResult.data;
961
+ }
962
+ const adapter = this.getAdapter(resolvedOptions);
963
+ const result = await adapter.update(Object.assign(Object.assign({}, resolvedOptions), { data: processedData }));
964
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database update - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
965
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
966
+ return result;
967
+ }
968
+ catch (error) {
969
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database update - failed', failed_execution: true, data: { table: options.table, operation: 'update', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
970
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
971
+ throw error;
972
+ }
973
+ }
974
+ /**
975
+ * Delete records matching conditions
976
+ *
977
+ * @example
978
+ * const result = await ductape.database.delete({
979
+ * table: 'users',
980
+ * where: { status: 'deleted' },
981
+ * });
982
+ * console.log('Deleted count:', result.count);
983
+ */
984
+ async delete(options) {
985
+ var _a, _b, _c, _d, _e, _f;
986
+ const process_id = (0, processor_utils_1.generateObjectId)();
987
+ this.initializeLogService();
988
+ // Session log fields (will be populated if session is provided)
989
+ let sessionLogFields = {};
990
+ let resolvedOptions = options;
991
+ // Process session if provided
992
+ if (options.session && options.product) {
993
+ const builder = await this.getProductBuilder(options.product);
994
+ const privateKey = builder.fetchPrivateKey();
995
+ if (privateKey) {
996
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
997
+ const sessionResult = await processSessionForExecution(options.session, privateKey, options, options.env);
998
+ if (sessionResult.error) {
999
+ throw new Error(`Session validation failed: ${sessionResult.error}`);
1000
+ }
1001
+ resolvedOptions = sessionResult.input;
1002
+ sessionLogFields = sessionResult.logFields;
1003
+ }
1004
+ }
1005
+ const baseLogs = Object.assign({ product_tag: options.product || '', workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '', env: options.env || '', process_id, type: logs_types_1.LogEventTypes.DATABASE, parent_tag: options.database || '', data: { table: options.table, operation: 'delete' } }, sessionLogFields);
1006
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database delete - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
1007
+ try {
1008
+ const adapter = this.getAdapter(resolvedOptions);
1009
+ const result = await adapter.delete(resolvedOptions);
1010
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database delete - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
1011
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
1012
+ return result;
1013
+ }
1014
+ catch (error) {
1015
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database delete - failed', failed_execution: true, data: { table: options.table, operation: 'delete', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
1016
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
1017
+ throw error;
1018
+ }
1019
+ }
1020
+ /**
1021
+ * Insert or update a record based on conflict keys
1022
+ *
1023
+ * @example
1024
+ * const result = await ductape.database.upsert({
1025
+ * table: 'user_preferences',
1026
+ * data: {
1027
+ * user_id: 123,
1028
+ * theme: 'dark',
1029
+ * language: 'en',
1030
+ * },
1031
+ * conflictKeys: ['user_id'],
1032
+ * });
1033
+ * console.log('Operation:', result.operation); // 'inserted' or 'updated'
1034
+ */
1035
+ async upsert(options) {
1036
+ var _a, _b, _c, _d, _e, _f;
1037
+ const process_id = (0, processor_utils_1.generateObjectId)();
1038
+ this.initializeLogService();
1039
+ // Session log fields (will be populated if session is provided)
1040
+ let sessionLogFields = {};
1041
+ let resolvedOptions = options;
1042
+ // Process session if provided
1043
+ if (options.session && options.product) {
1044
+ const builder = await this.getProductBuilder(options.product);
1045
+ const privateKey = builder.fetchPrivateKey();
1046
+ if (privateKey) {
1047
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
1048
+ const sessionResult = await processSessionForExecution(options.session, privateKey, options, options.env);
1049
+ if (sessionResult.error) {
1050
+ throw new Error(`Session validation failed: ${sessionResult.error}`);
1051
+ }
1052
+ resolvedOptions = sessionResult.input;
1053
+ sessionLogFields = sessionResult.logFields;
1054
+ }
1055
+ }
1056
+ const baseLogs = Object.assign({ product_tag: options.product || '', workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '', env: options.env || '', process_id, type: logs_types_1.LogEventTypes.DATABASE, parent_tag: options.database || '', data: { table: options.table, operation: 'upsert' } }, sessionLogFields);
1057
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database upsert - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
1058
+ try {
1059
+ const adapter = this.getAdapter(resolvedOptions);
1060
+ const result = await adapter.upsert(resolvedOptions);
1061
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database upsert - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
1062
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
1063
+ return result;
1064
+ }
1065
+ catch (error) {
1066
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database upsert - failed', failed_execution: true, data: { table: options.table, operation: 'upsert', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
1067
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
1068
+ throw error;
1069
+ }
1070
+ }
1071
+ // ==================== AGGREGATION OPERATIONS ====================
1072
+ /**
1073
+ * Count records
1074
+ *
1075
+ * @example
1076
+ * const count = await ductape.database.count({
1077
+ * table: 'users',
1078
+ * where: { status: 'active' },
1079
+ * });
1080
+ */
1081
+ async count(options) {
1082
+ const adapter = this.getAdapter(options);
1083
+ return adapter.count(options);
1084
+ }
1085
+ /**
1086
+ * Sum values of a column
1087
+ *
1088
+ * @example
1089
+ * const totalRevenue = await ductape.database.sum({
1090
+ * table: 'orders',
1091
+ * column: 'total',
1092
+ * where: { status: 'completed' },
1093
+ * });
1094
+ */
1095
+ async sum(options) {
1096
+ const adapter = this.getAdapter(options);
1097
+ return adapter.sum(options);
1098
+ }
1099
+ /**
1100
+ * Calculate average of a column
1101
+ *
1102
+ * @example
1103
+ * const avgOrderValue = await ductape.database.avg({
1104
+ * table: 'orders',
1105
+ * column: 'total',
1106
+ * });
1107
+ */
1108
+ async avg(options) {
1109
+ const adapter = this.getAdapter(options);
1110
+ return adapter.avg(options);
1111
+ }
1112
+ /**
1113
+ * Get minimum value of a column
1114
+ *
1115
+ * @example
1116
+ * const minPrice = await ductape.database.min({
1117
+ * table: 'products',
1118
+ * column: 'price',
1119
+ * });
1120
+ */
1121
+ async min(options) {
1122
+ const adapter = this.getAdapter(options);
1123
+ return adapter.min(options);
1124
+ }
1125
+ /**
1126
+ * Get maximum value of a column
1127
+ *
1128
+ * @example
1129
+ * const maxPrice = await ductape.database.max({
1130
+ * table: 'products',
1131
+ * column: 'price',
1132
+ * });
1133
+ */
1134
+ async max(options) {
1135
+ const adapter = this.getAdapter(options);
1136
+ return adapter.max(options);
1137
+ }
1138
+ /**
1139
+ * Perform multiple aggregations in one query
1140
+ *
1141
+ * @example
1142
+ * const stats = await ductape.database.aggregate({
1143
+ * table: 'orders',
1144
+ * operations: {
1145
+ * total_revenue: { $SUM: 'total' },
1146
+ * order_count: { $COUNT: '*' },
1147
+ * avg_order_value: { $AVG: 'total' },
1148
+ * },
1149
+ * where: { status: 'completed' },
1150
+ * });
1151
+ */
1152
+ async aggregate(options) {
1153
+ const adapter = this.getAdapter(options);
1154
+ const aggregationBuilder = new aggregation_builder_1.AggregationBuilder(adapter.getDatabaseType());
1155
+ const builtAggregation = aggregationBuilder.buildAggregation(options);
1156
+ return adapter.aggregate(builtAggregation);
1157
+ }
1158
+ /**
1159
+ * Group records and perform aggregations
1160
+ *
1161
+ * @example
1162
+ * const salesByCategory = await ductape.database.groupBy({
1163
+ * table: 'products',
1164
+ * groupBy: ['category'],
1165
+ * operations: {
1166
+ * total_sales: { $SUM: 'sales_count' },
1167
+ * avg_price: { $AVG: 'price' },
1168
+ * },
1169
+ * having: {
1170
+ * total_sales: { $GT: 100 },
1171
+ * },
1172
+ * });
1173
+ */
1174
+ async groupBy(options) {
1175
+ const adapter = this.getAdapter(options);
1176
+ const aggregationBuilder = new aggregation_builder_1.AggregationBuilder(adapter.getDatabaseType());
1177
+ const builtGroupBy = aggregationBuilder.buildGroupBy(options);
1178
+ return adapter.groupBy(builtGroupBy);
1179
+ }
1180
+ // ==================== TRANSACTION OPERATIONS ====================
1181
+ /**
1182
+ * Execute operations within a transaction (callback API - recommended)
1183
+ *
1184
+ * @example
1185
+ * const order = await ductape.database.transaction({
1186
+ * env: 'prd',
1187
+ * product: 'my-app',
1188
+ * database: 'main-db',
1189
+ * }, async (transaction) => {
1190
+ * const order = await ductape.database.insert({
1191
+ * table: 'orders',
1192
+ * data: { customer_id: 123, total: 99.99 },
1193
+ * transaction,
1194
+ * });
1195
+ *
1196
+ * await ductape.database.insert({
1197
+ * table: 'order_items',
1198
+ * data: items.map(item => ({ order_id: order.insertedIds[0], ...item })),
1199
+ * transaction,
1200
+ * });
1201
+ *
1202
+ * return order;
1203
+ * });
1204
+ */
1205
+ async transaction(options, callback) {
1206
+ const adapter = this.getAdapter(options);
1207
+ return this.transactionManager.executeTransaction(adapter, options, callback);
1208
+ }
1209
+ /**
1210
+ * Begin a transaction manually
1211
+ *
1212
+ * @example
1213
+ * const transaction = await ductape.database.beginTransaction({
1214
+ * env: 'prd',
1215
+ * product: 'my-app',
1216
+ * database: 'main-db',
1217
+ * isolationLevel: 'REPEATABLE_READ',
1218
+ * });
1219
+ *
1220
+ * try {
1221
+ * await ductape.database.insert({ table: 'accounts', data: {...}, transaction });
1222
+ * await transaction.commit();
1223
+ * } catch (error) {
1224
+ * await transaction.rollback();
1225
+ * throw error;
1226
+ * }
1227
+ */
1228
+ async beginTransaction(options) {
1229
+ const adapter = this.getAdapter(options);
1230
+ return this.transactionManager.beginTransaction(adapter, options);
1231
+ }
1232
+ // ==================== SCHEMA OPERATIONS ====================
1233
+ /**
1234
+ * Create a new table
1235
+ *
1236
+ * @example
1237
+ * import { SchemaHelpers } from '@ductape/sdk';
1238
+ *
1239
+ * await ductape.database.createTable(
1240
+ * { env: 'dev', product: 'my-app', database: 'main-db' },
1241
+ * {
1242
+ * name: 'products',
1243
+ * columns: [
1244
+ * SchemaHelpers.id(),
1245
+ * SchemaHelpers.string('name', 255, false),
1246
+ * SchemaHelpers.decimal('price', 10, 2),
1247
+ * ...SchemaHelpers.timestamps(),
1248
+ * ],
1249
+ * },
1250
+ * { ifNotExists: true }
1251
+ * );
1252
+ */
1253
+ async createTable(connectionConfigOrDefinition, tableDefinitionOrOptions, options) {
1254
+ // Check if first arg is a table definition (no connectionConfig provided)
1255
+ if ('columns' in connectionConfigOrDefinition || 'name' in connectionConfigOrDefinition && !('env' in connectionConfigOrDefinition)) {
1256
+ // Using current context - connectionConfigOrDefinition is actually tableDefinition
1257
+ const adapter = this.getAdapter();
1258
+ return adapter.createTable(connectionConfigOrDefinition, tableDefinitionOrOptions);
1259
+ }
1260
+ // Using explicit connection config
1261
+ const adapter = this.getAdapter(connectionConfigOrDefinition);
1262
+ return adapter.createTable(tableDefinitionOrOptions, options);
1263
+ }
1264
+ /**
1265
+ * Alter an existing table
1266
+ *
1267
+ * @example
1268
+ * import { ColumnAlterationType, ColumnType } from '@ductape/sdk';
1269
+ *
1270
+ * // Add column
1271
+ * await ductape.database.alterTable(
1272
+ * { env: 'dev', product: 'my-app', database: 'main-db' },
1273
+ * 'products',
1274
+ * [{ type: ColumnAlterationType.ADD, column: { name: 'sku', type: ColumnType.STRING, length: 50 } }]
1275
+ * );
1276
+ *
1277
+ * // Drop column
1278
+ * await ductape.database.alterTable(
1279
+ * { env: 'dev', product: 'my-app', database: 'main-db' },
1280
+ * 'products',
1281
+ * [{ type: ColumnAlterationType.DROP, columnName: 'old_field' }]
1282
+ * );
1283
+ *
1284
+ * // Rename column
1285
+ * await ductape.database.alterTable(
1286
+ * { env: 'dev', product: 'my-app', database: 'main-db' },
1287
+ * 'products',
1288
+ * [{ type: ColumnAlterationType.RENAME, oldName: 'old_name', newName: 'new_name' }]
1289
+ * );
1290
+ */
1291
+ async alterTable(connectionConfigOrTableName, tableNameOrAlterations, alterations) {
1292
+ // Check if first arg is a string (tableName - no connectionConfig provided)
1293
+ if (typeof connectionConfigOrTableName === 'string') {
1294
+ const adapter = this.getAdapter();
1295
+ return adapter.alterTable(connectionConfigOrTableName, tableNameOrAlterations);
1296
+ }
1297
+ // Using explicit connection config
1298
+ const adapter = this.getAdapter(connectionConfigOrTableName);
1299
+ return adapter.alterTable(tableNameOrAlterations, alterations);
1300
+ }
1301
+ /**
1302
+ * Drop a table
1303
+ *
1304
+ * @example
1305
+ * await ductape.database.dropTable(
1306
+ * { env: 'dev', product: 'my-app', database: 'main-db' },
1307
+ * 'old_table'
1308
+ * );
1309
+ */
1310
+ async dropTable(connectionConfigOrTableName, tableName) {
1311
+ // Check if first arg is a string (tableName - no connectionConfig provided)
1312
+ if (typeof connectionConfigOrTableName === 'string') {
1313
+ const adapter = this.getAdapter();
1314
+ return adapter.dropTable(connectionConfigOrTableName, true);
1315
+ }
1316
+ // Using explicit connection config
1317
+ const adapter = this.getAdapter(connectionConfigOrTableName);
1318
+ return adapter.dropTable(tableName, true);
1319
+ }
1320
+ /**
1321
+ * List all tables in the database
1322
+ *
1323
+ * @example
1324
+ * const tables = await ductape.database.listTables({
1325
+ * env: 'dev',
1326
+ * product: 'my-app',
1327
+ * database: 'main-db',
1328
+ * });
1329
+ */
1330
+ async listTables(connectionConfig) {
1331
+ const adapter = this.getAdapter(connectionConfig);
1332
+ return adapter.listTables();
1333
+ }
1334
+ /**
1335
+ * Check if a table exists
1336
+ *
1337
+ * @example
1338
+ * const exists = await ductape.database.tableExists(
1339
+ * { env: 'dev', product: 'my-app', database: 'main-db' },
1340
+ * 'users'
1341
+ * );
1342
+ */
1343
+ async tableExists(connectionConfigOrTableName, tableName) {
1344
+ // Check if first arg is a string (tableName - no connectionConfig provided)
1345
+ if (typeof connectionConfigOrTableName === 'string') {
1346
+ const adapter = this.getAdapter();
1347
+ return adapter.tableExists(connectionConfigOrTableName);
1348
+ }
1349
+ // Using explicit connection config
1350
+ const adapter = this.getAdapter(connectionConfigOrTableName);
1351
+ return adapter.tableExists(tableName);
1352
+ }
1353
+ /**
1354
+ * Get the schema of a table
1355
+ *
1356
+ * @example
1357
+ * const schema = await ductape.database.getTableSchema(
1358
+ * { env: 'dev', product: 'my-app', database: 'main-db' },
1359
+ * 'users'
1360
+ * );
1361
+ * console.log('Table:', schema.name);
1362
+ * console.log('Columns:', schema.columns);
1363
+ * console.log('Indexes:', schema.indexes);
1364
+ */
1365
+ async getTableSchema(connectionConfigOrTableName, tableName) {
1366
+ // Check if first arg is a string (tableName - no connectionConfig provided)
1367
+ if (typeof connectionConfigOrTableName === 'string') {
1368
+ const adapter = this.getAdapter();
1369
+ return adapter.getTableSchema(connectionConfigOrTableName);
1370
+ }
1371
+ // Using explicit connection config
1372
+ const adapter = this.getAdapter(connectionConfigOrTableName);
1373
+ return adapter.getTableSchema(tableName);
1374
+ }
1375
+ /**
1376
+ * Create an index
1377
+ *
1378
+ * @example
1379
+ * await ductape.database.createIndex({
1380
+ * env: 'dev',
1381
+ * product: 'my-app',
1382
+ * database: 'main-db',
1383
+ * table: 'users',
1384
+ * index: {
1385
+ * name: 'idx_users_email',
1386
+ * table: 'users',
1387
+ * columns: [{ name: 'email' }],
1388
+ * unique: true,
1389
+ * },
1390
+ * ifNotExists: true,
1391
+ * concurrent: true, // PostgreSQL: create without locking
1392
+ * });
1393
+ */
1394
+ async createIndex(options) {
1395
+ const adapter = this.getAdapter(options);
1396
+ return adapter.createIndex(options.index, options.ifNotExists, options.concurrent);
1397
+ }
1398
+ /**
1399
+ * Drop an index
1400
+ *
1401
+ * @example
1402
+ * await ductape.database.dropIndex({
1403
+ * env: 'dev',
1404
+ * product: 'my-app',
1405
+ * database: 'main-db',
1406
+ * table: 'users',
1407
+ * indexName: 'idx_users_old',
1408
+ * ifExists: true,
1409
+ * concurrent: true,
1410
+ * });
1411
+ */
1412
+ async dropIndex(options) {
1413
+ const adapter = this.getAdapter(options);
1414
+ return adapter.dropIndex(options.table, options.indexName, options.ifExists, options.concurrent, options.cascade);
1415
+ }
1416
+ /**
1417
+ * List all indexes on a table
1418
+ *
1419
+ * @example
1420
+ * const indexes = await ductape.database.listIndexes({
1421
+ * env: 'dev',
1422
+ * product: 'my-app',
1423
+ * database: 'main-db',
1424
+ * table: 'users',
1425
+ * includeSystem: false,
1426
+ * });
1427
+ */
1428
+ async listIndexes(options) {
1429
+ const adapter = this.getAdapter(options);
1430
+ return adapter.listIndexes(options.table, options.includeSystem);
1431
+ }
1432
+ /**
1433
+ * Get index statistics
1434
+ *
1435
+ * @example
1436
+ * // All indexes on a table
1437
+ * const stats = await ductape.database.getIndexStatistics(
1438
+ * { env: 'prd', product: 'my-app', database: 'main-db' },
1439
+ * 'users'
1440
+ * );
1441
+ *
1442
+ * // Specific index
1443
+ * const emailStats = await ductape.database.getIndexStatistics(
1444
+ * { env: 'prd', product: 'my-app', database: 'main-db' },
1445
+ * 'users',
1446
+ * 'idx_users_email'
1447
+ * );
1448
+ */
1449
+ async getIndexStatistics(connectionConfig, tableName, indexName) {
1450
+ const adapter = this.getAdapter(connectionConfig);
1451
+ return adapter.getIndexStatistics(tableName, indexName);
1452
+ }
1453
+ // ==================== MIGRATION OPERATIONS ====================
1454
+ /**
1455
+ * Run a migration
1456
+ *
1457
+ * @example
1458
+ * const result = await ductape.database.runMigration([migration]);
1459
+ * console.log('Migrated:', result.size);
1460
+ */
1461
+ async runMigration(migrations, options) {
1462
+ const engine = this.getMigrationEngine();
1463
+ return engine.migrate(migrations, options);
1464
+ }
1465
+ /**
1466
+ * Rollback migrations
1467
+ *
1468
+ * @example
1469
+ * const result = await ductape.database.rollbackMigration([migration], 1);
1470
+ * console.log('Rolled back:', result.size);
1471
+ */
1472
+ async rollbackMigration(migrations, count = 1) {
1473
+ const engine = this.getMigrationEngine();
1474
+ return engine.rollback(migrations, count);
1475
+ }
1476
+ /**
1477
+ * Get migration history (applied migrations)
1478
+ *
1479
+ * @example
1480
+ * const history = await ductape.database.getMigrationHistory();
1481
+ * history.forEach((entry) => {
1482
+ * console.log('Tag:', entry.tag);
1483
+ * console.log('Applied at:', entry.appliedAt);
1484
+ * });
1485
+ */
1486
+ async getMigrationHistory() {
1487
+ const engine = this.getMigrationEngine();
1488
+ return engine.getAppliedMigrations();
1489
+ }
1490
+ /**
1491
+ * Get status of all migrations
1492
+ *
1493
+ * @example
1494
+ * const status = await ductape.database.getMigrationStatus(allMigrations);
1495
+ * console.log('Pending:', status.pending);
1496
+ */
1497
+ async getMigrationStatus(migrations) {
1498
+ const engine = this.getMigrationEngine();
1499
+ return engine.getStatus(migrations);
1500
+ }
1501
+ // ==================== MIGRATION CRUD OPERATIONS ====================
1502
+ /**
1503
+ * Migration management sub-object
1504
+ * Provides CRUD operations for database migrations via ProductBuilder
1505
+ */
1506
+ get migration() {
1507
+ return {
1508
+ /**
1509
+ * Create a new database migration
1510
+ *
1511
+ * @example
1512
+ * await ductape.database.migration.create({
1513
+ * product: 'my-product',
1514
+ * database: 'main-db',
1515
+ * data: {
1516
+ * name: 'Add users table',
1517
+ * tag: 'main-db:add-users-table',
1518
+ * value: {
1519
+ * up: ['CREATE TABLE users (id SERIAL PRIMARY KEY, email VARCHAR(255))'],
1520
+ * down: ['DROP TABLE users'],
1521
+ * },
1522
+ * },
1523
+ * });
1524
+ */
1525
+ create: async (options) => {
1526
+ const builder = await this.getProductBuilder(options.product);
1527
+ // Format tag as database:migration if not already formatted
1528
+ const tag = options.data.tag.includes(':')
1529
+ ? options.data.tag
1530
+ : `${options.database}:${options.data.tag}`;
1531
+ await builder.createDatabaseMigration({
1532
+ name: options.data.name,
1533
+ tag,
1534
+ description: options.data.description,
1535
+ value: options.data.value,
1536
+ });
1537
+ },
1538
+ /**
1539
+ * Update an existing database migration
1540
+ *
1541
+ * @example
1542
+ * await ductape.database.migration.update({
1543
+ * product: 'my-product',
1544
+ * tag: 'main-db:add-users-table',
1545
+ * data: {
1546
+ * description: 'Updated description',
1547
+ * },
1548
+ * });
1549
+ */
1550
+ update: async (options) => {
1551
+ const builder = await this.getProductBuilder(options.product);
1552
+ await builder.updateDatabaseMigration(Object.assign({ tag: options.tag }, options.data));
1553
+ },
1554
+ /**
1555
+ * Fetch a specific database migration
1556
+ *
1557
+ * @example
1558
+ * const migration = await ductape.database.migration.fetch({
1559
+ * product: 'my-product',
1560
+ * tag: 'main-db:add-users-table',
1561
+ * });
1562
+ */
1563
+ fetch: async (options) => {
1564
+ const builder = await this.getProductBuilder(options.product);
1565
+ return builder.fetchDatabaseMigration(options.tag);
1566
+ },
1567
+ /**
1568
+ * Fetch all database migrations for a database
1569
+ *
1570
+ * @example
1571
+ * const migrations = await ductape.database.migration.fetchAll({
1572
+ * product: 'my-product',
1573
+ * database: 'main-db',
1574
+ * });
1575
+ */
1576
+ fetchAll: async (options) => {
1577
+ const builder = await this.getProductBuilder(options.product);
1578
+ return builder.fetchDatabaseMigrations(options.database);
1579
+ },
1580
+ /**
1581
+ * Delete a database migration
1582
+ *
1583
+ * @example
1584
+ * await ductape.database.migration.delete({
1585
+ * product: 'my-product',
1586
+ * tag: 'main-db:add-users-table',
1587
+ * });
1588
+ */
1589
+ delete: async (options) => {
1590
+ const builder = await this.getProductBuilder(options.product);
1591
+ return builder.deleteDatabaseMigration(options.tag);
1592
+ },
1593
+ /**
1594
+ * Run a database migration (up)
1595
+ * @deprecated Migration execution has been deprecated
1596
+ */
1597
+ run: async (_options) => {
1598
+ throw new Error('Migration execution has been deprecated');
1599
+ },
1600
+ /**
1601
+ * Rollback a database migration (down)
1602
+ * @deprecated Migration execution has been deprecated
1603
+ */
1604
+ rollback: async (_options) => {
1605
+ throw new Error('Migration execution has been deprecated');
1606
+ },
1607
+ };
1608
+ }
1609
+ // ==================== ACTION OPERATIONS ====================
1610
+ /**
1611
+ * Action management sub-object
1612
+ */
1613
+ get action() {
1614
+ return {
1615
+ /**
1616
+ * Create a new database action
1617
+ *
1618
+ * @example
1619
+ * await ductape.database.action.create({
1620
+ * name: 'Get Users Paginated',
1621
+ * tag: 'postgresdb:get-users-paginated',
1622
+ * tableName: 'users',
1623
+ * operation: DatabaseActionTypes.QUERY,
1624
+ * template: {
1625
+ * where: { is_active: true },
1626
+ * limit: '{{limit}}',
1627
+ * offset: '{{offset}}',
1628
+ * },
1629
+ * });
1630
+ */
1631
+ create: async (options) => {
1632
+ return this.actionManager.create(options);
1633
+ },
1634
+ /**
1635
+ * Update an existing action
1636
+ *
1637
+ * @example
1638
+ * await ductape.database.action.update({
1639
+ * tag: 'postgresdb:get-users',
1640
+ * template: { where: { status: '{{status}}' } },
1641
+ * });
1642
+ */
1643
+ update: async (options) => {
1644
+ return this.actionManager.update(options);
1645
+ },
1646
+ /**
1647
+ * Fetch a specific action
1648
+ *
1649
+ * @example
1650
+ * const action = await ductape.database.action.fetch('postgresdb:get-users');
1651
+ */
1652
+ fetch: async (tag) => {
1653
+ return this.actionManager.fetch(tag);
1654
+ },
1655
+ /**
1656
+ * Fetch all actions for a database
1657
+ *
1658
+ * @example
1659
+ * const actions = await ductape.database.action.fetchAll('postgresdb');
1660
+ */
1661
+ fetchAll: async (databaseTag) => {
1662
+ return this.actionManager.fetchAll(databaseTag);
1663
+ },
1664
+ /**
1665
+ * Delete a database action
1666
+ *
1667
+ * @example
1668
+ * await ductape.database.action.delete('postgresdb:get-users');
1669
+ */
1670
+ delete: async (tag) => {
1671
+ return this.actionManager.delete(tag);
1672
+ },
1673
+ /**
1674
+ * Dispatches a database action to run as a scheduled job.
1675
+ * @param {IDBActionDispatchInput} data - The database action dispatch input.
1676
+ * @returns {Promise<IDispatchResult>} The dispatch result with job ID and status.
1677
+ * @example
1678
+ * // Schedule a database action to run in 1 hour
1679
+ * await ductape.databases.action.dispatch({
1680
+ * product: 'my-product',
1681
+ * env: 'production',
1682
+ * database: 'users-db',
1683
+ * event: 'cleanup-inactive',
1684
+ * input: { query: { inactive: true } },
1685
+ * schedule: { start_at: Date.now() + 3600000 }
1686
+ * });
1687
+ *
1688
+ * // Run on a cron schedule
1689
+ * await ductape.databases.action.dispatch({
1690
+ * product: 'my-product',
1691
+ * env: 'production',
1692
+ * database: 'analytics-db',
1693
+ * event: 'aggregate-daily',
1694
+ * input: { query: {} },
1695
+ * schedule: { cron: '0 0 * * *' } // Daily at midnight
1696
+ * });
1697
+ */
1698
+ dispatch: async (data) => {
1699
+ const processorService = this.createNewProcessor();
1700
+ const productBuilder = await this.getProductBuilder(data.product);
1701
+ const schedule = data.schedule || {};
1702
+ const startAt = typeof schedule.start_at === 'string'
1703
+ ? new Date(schedule.start_at).getTime()
1704
+ : schedule.start_at || Date.now();
1705
+ // Generate job tag based on type, database, and event
1706
+ const jobTag = `database:${data.database}:${data.event}`;
1707
+ // Check if job exists, if not create it
1708
+ const existingJob = await productBuilder.fetchJob(jobTag);
1709
+ if (!existingJob) {
1710
+ await productBuilder.createJob({
1711
+ tag: jobTag,
1712
+ name: `Database: ${data.database}/${data.event}`,
1713
+ description: `Auto-created job for database action ${data.event} on database ${data.database}`,
1714
+ type: types_1.JobEventTypes.DATABASE_ACTION,
1715
+ app: data.database,
1716
+ event: data.event,
1717
+ executions: 0,
1718
+ intervals: schedule.every || 0,
1719
+ start_at: startAt,
1720
+ });
1721
+ }
1722
+ const jobInput = {
1723
+ product: data.product,
1724
+ env: data.env,
1725
+ event: jobTag,
1726
+ input: data.input,
1727
+ retries: data.retries || 0,
1728
+ start_at: startAt,
1729
+ session: data.session,
1730
+ cache: data.cache,
1731
+ repeat: schedule.cron || schedule.every ? {
1732
+ cron: schedule.cron,
1733
+ every: schedule.every,
1734
+ limit: schedule.limit,
1735
+ endDate: schedule.endDate,
1736
+ tz: schedule.tz,
1737
+ } : undefined,
1738
+ };
1739
+ await processorService.processJob(jobInput);
1740
+ const isRecurring = !!(schedule.cron || schedule.every);
1741
+ let nextRunAt;
1742
+ if (isRecurring && schedule.every) {
1743
+ nextRunAt = startAt + schedule.every;
1744
+ }
1745
+ return {
1746
+ job_id: (0, crypto_1.randomUUID)(),
1747
+ status: startAt > Date.now() ? 'scheduled' : 'queued',
1748
+ scheduled_at: startAt,
1749
+ recurring: isRecurring,
1750
+ next_run_at: nextRunAt,
1751
+ };
1752
+ },
1753
+ };
1754
+ }
1755
+ /**
1756
+ * Execute a database action
1757
+ *
1758
+ * @example
1759
+ * const users = await ductape.database.execute({
1760
+ * product: 'my-product',
1761
+ * env: 'prd',
1762
+ * database: 'postgresdb',
1763
+ * action: 'get-users-paginated',
1764
+ * input: {
1765
+ * limit: 25,
1766
+ * offset: 0,
1767
+ * },
1768
+ * });
1769
+ */
1770
+ async execute(options) {
1771
+ var _a, _b, _c, _d, _e, _f;
1772
+ const process_id = (0, processor_utils_1.generateObjectId)();
1773
+ // Session log fields (will be populated if session is provided)
1774
+ let sessionLogFields = {};
1775
+ let resolvedOptions = options;
1776
+ // Initialize product builder and logging
1777
+ if (options.product) {
1778
+ const builder = await this.getProductBuilder(options.product);
1779
+ // Process session if provided
1780
+ if (options.session) {
1781
+ const privateKey = builder.fetchPrivateKey();
1782
+ if (privateKey) {
1783
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
1784
+ const sessionResult = await processSessionForExecution(options.session, privateKey, options, options.env);
1785
+ if (sessionResult.error) {
1786
+ throw new Error(`Session validation failed: ${sessionResult.error}`);
1787
+ }
1788
+ resolvedOptions = sessionResult.input;
1789
+ sessionLogFields = sessionResult.logFields;
1790
+ }
1791
+ }
1792
+ }
1793
+ this.initializeLogService();
1794
+ const baseLogs = Object.assign({ product_tag: options.product || '', workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '', env: options.env, process_id, type: logs_types_1.LogEventTypes.DB_ACTION, parent_tag: options.database, child_tag: options.action, data: { database: options.database, action: options.action } }, sessionLogFields);
1795
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database action execute - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
1796
+ try {
1797
+ const result = await this.actionManager.execute(resolvedOptions);
1798
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database action execute - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
1799
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
1800
+ return result;
1801
+ }
1802
+ catch (error) {
1803
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database action execute - failed', failed_execution: true, data: { database: options.database, action: options.action, error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
1804
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
1805
+ throw error;
1806
+ }
1807
+ }
1808
+ /**
1809
+ * Dispatches a database operation to run as a scheduled job.
1810
+ * Use this for direct database operations (query, insert, update, delete, etc.).
1811
+ * @param {IDBOperationDispatchInput} data - The database operation dispatch input.
1812
+ * @returns {Promise<IDispatchResult>} The dispatch result with job ID and status.
1813
+ * @example
1814
+ * // Schedule a database operation to run in 1 hour
1815
+ * await ductape.databases.dispatch({
1816
+ * product: 'my-product',
1817
+ * env: 'production',
1818
+ * database: 'users-db',
1819
+ * operation: 'deleteMany',
1820
+ * input: { filter: { inactive: true, lastLogin: { $lt: '2024-01-01' } } },
1821
+ * schedule: { start_at: Date.now() + 3600000 }
1822
+ * });
1823
+ *
1824
+ * // Run daily database cleanup
1825
+ * await ductape.databases.dispatch({
1826
+ * product: 'my-product',
1827
+ * env: 'production',
1828
+ * database: 'logs-db',
1829
+ * operation: 'deleteMany',
1830
+ * input: { filter: { createdAt: { $lt: '$DateAdd($Now(), -30, "days")' } } },
1831
+ * schedule: { cron: '0 3 * * *' } // Daily at 3 AM
1832
+ * });
1833
+ */
1834
+ async dispatch(data) {
1835
+ var _a, _b, _c, _d, _e, _f;
1836
+ const process_id = (0, processor_utils_1.generateObjectId)();
1837
+ const processorService = this.createNewProcessor();
1838
+ const productBuilder = await this.getProductBuilder(data.product);
1839
+ const schedule = data.schedule || {};
1840
+ const startAt = typeof schedule.start_at === 'string'
1841
+ ? new Date(schedule.start_at).getTime()
1842
+ : schedule.start_at || Date.now();
1843
+ // Generate job tag based on type, database, and operation
1844
+ const jobTag = `database-operation:${data.database}:${data.operation}`;
1845
+ // Initialize logging
1846
+ this.initializeLogService();
1847
+ const baseLogs = {
1848
+ product_tag: data.product,
1849
+ workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '',
1850
+ env: data.env,
1851
+ process_id,
1852
+ type: logs_types_1.LogEventTypes.DATABASE,
1853
+ parent_tag: data.database,
1854
+ child_tag: data.operation,
1855
+ data: { database: data.database, operation: data.operation },
1856
+ };
1857
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database dispatch - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
1858
+ try {
1859
+ // Check if job exists, if not create it
1860
+ const existingJob = await productBuilder.fetchJob(jobTag);
1861
+ if (!existingJob) {
1862
+ await productBuilder.createJob({
1863
+ tag: jobTag,
1864
+ name: `Database Operation: ${data.database}/${data.operation}`,
1865
+ description: `Auto-created job for database operation ${data.operation} on database ${data.database}`,
1866
+ type: types_1.JobEventTypes.DATABASE_OPERATION,
1867
+ app: data.database,
1868
+ event: data.operation,
1869
+ executions: 0,
1870
+ intervals: schedule.every || 0,
1871
+ start_at: startAt,
1872
+ });
1873
+ }
1874
+ const jobInput = {
1875
+ product: data.product,
1876
+ env: data.env,
1877
+ event: jobTag,
1878
+ input: data.input,
1879
+ retries: data.retries || 0,
1880
+ start_at: startAt,
1881
+ session: data.session,
1882
+ cache: data.cache,
1883
+ repeat: schedule.cron || schedule.every ? {
1884
+ cron: schedule.cron,
1885
+ every: schedule.every,
1886
+ limit: schedule.limit,
1887
+ endDate: schedule.endDate,
1888
+ tz: schedule.tz,
1889
+ } : undefined,
1890
+ };
1891
+ await processorService.processJob(jobInput);
1892
+ const isRecurring = !!(schedule.cron || schedule.every);
1893
+ let nextRunAt;
1894
+ if (isRecurring && schedule.every) {
1895
+ nextRunAt = startAt + schedule.every;
1896
+ }
1897
+ const job_id = (0, crypto_1.randomUUID)();
1898
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database dispatch - success', successful_execution: true, data: { database: data.database, operation: data.operation, job_id }, status: logs_types_1.LogEventStatus.SUCCESS }));
1899
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
1900
+ return {
1901
+ job_id,
1902
+ status: startAt > Date.now() ? 'scheduled' : 'queued',
1903
+ scheduled_at: startAt,
1904
+ recurring: isRecurring,
1905
+ next_run_at: nextRunAt,
1906
+ };
1907
+ }
1908
+ catch (error) {
1909
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Database dispatch - failed', failed_execution: true, data: { database: data.database, operation: data.operation, error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
1910
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
1911
+ throw error;
1912
+ }
1913
+ }
1914
+ // ==================== HELPER METHODS ====================
1915
+ /**
1916
+ * Get the appropriate adapter for the operation
1917
+ */
1918
+ getAdapter(options) {
1919
+ // If options specify env and database, use those
1920
+ if ((options === null || options === void 0 ? void 0 : options.env) && (options === null || options === void 0 ? void 0 : options.database)) {
1921
+ const contextKey = this.buildContextKey(options.database, options.env);
1922
+ const adapter = this.adapters.get(contextKey);
1923
+ if (!adapter) {
1924
+ throw new database_error_1.DatabaseError(`No adapter found for database '${options.database}' in environment '${options.env}'`, enums_1.DatabaseErrorType.NOT_FOUND);
1925
+ }
1926
+ return adapter;
1927
+ }
1928
+ // Otherwise use current context
1929
+ if (!this.currentContext) {
1930
+ throw new database_error_1.DatabaseError('No database connection established. Call connect() first or provide env and database options.', enums_1.DatabaseErrorType.CONNECTION_ERROR);
1931
+ }
1932
+ const contextKey = this.buildContextKey(this.currentContext.database, this.currentContext.env);
1933
+ const adapter = this.adapters.get(contextKey);
1934
+ if (!adapter) {
1935
+ throw new database_error_1.DatabaseError('No adapter found for current connection context', enums_1.DatabaseErrorType.CONNECTION_ERROR);
1936
+ }
1937
+ return adapter;
1938
+ }
1939
+ /**
1940
+ * Get the current connection context
1941
+ */
1942
+ getCurrentContext() {
1943
+ return this.currentContext;
1944
+ }
1945
+ /**
1946
+ * Get a connection-scoped interface for a specific database/environment.
1947
+ * This ensures schema operations are isolated to a specific connection.
1948
+ *
1949
+ * @example
1950
+ * const usersDb = db.connection('users-db', 'dev');
1951
+ * await usersDb.schema.create('users', { ... });
1952
+ *
1953
+ * const ordersDb = db.connection('orders-db', 'dev');
1954
+ * await ordersDb.schema.create('orders', { ... }); // Different connection
1955
+ */
1956
+ connection(database, env, product = '') {
1957
+ return new DatabaseConnection(this, database, env, product);
1958
+ }
1959
+ /**
1960
+ * Build a context key from database and environment
1961
+ */
1962
+ buildContextKey(database, env) {
1963
+ return `${database}:${env}`;
1964
+ }
1965
+ /**
1966
+ * Convert DatabaseTypes (from product API) to DatabaseType (ORM internal)
1967
+ */
1968
+ convertDatabaseType(type) {
1969
+ // Map from DatabaseTypes enum values to DatabaseType enum
1970
+ const typeMap = {
1971
+ 'postgresql': enums_1.DatabaseType.POSTGRESQL,
1972
+ 'mongodb': enums_1.DatabaseType.MONGODB,
1973
+ 'mysql': enums_1.DatabaseType.MYSQL,
1974
+ 'dynamodb': enums_1.DatabaseType.DYNAMODB,
1975
+ 'mariadb': enums_1.DatabaseType.MARIADB,
1976
+ 'cassandra': enums_1.DatabaseType.CASSANDRA,
1977
+ };
1978
+ const normalizedType = String(type).toLowerCase();
1979
+ const mappedType = typeMap[normalizedType];
1980
+ if (!mappedType) {
1981
+ throw new database_error_1.DatabaseError(`Unsupported database type: ${type}. Supported types: ${Object.keys(typeMap).join(', ')}`, enums_1.DatabaseErrorType.VALIDATION_ERROR);
1982
+ }
1983
+ return mappedType;
1984
+ }
1985
+ // ==================== SIMPLIFIED SCHEMA API ====================
1986
+ /**
1987
+ * Simplified schema operations API (Mongoose-style)
1988
+ *
1989
+ * @example
1990
+ * await db.connect({ env: 'dev', product: 'my-app', database: 'users-db' });
1991
+ *
1992
+ * // Create a table with Mongoose-style schema
1993
+ * await db.schema.create('users', {
1994
+ * id: { type: 'uuid', primaryKey: true },
1995
+ * email: { type: 'string', length: 255, required: true, unique: true },
1996
+ * name: { type: 'string', length: 100 },
1997
+ * age: 'integer', // Shorthand
1998
+ * status: { type: 'enum', enum: ['active', 'inactive'], default: 'active' },
1999
+ * }, { timestamps: true });
2000
+ */
2001
+ get schema() {
2002
+ return {
2003
+ /**
2004
+ * Create a collection/table with Mongoose-style schema definition
2005
+ */
2006
+ create: (name, definition, options) => this.schemaCreate(name, definition, options),
2007
+ /**
2008
+ * Drop a collection/table
2009
+ */
2010
+ drop: (name, options) => this.schemaDrop(name, options),
2011
+ /**
2012
+ * Add a field to a collection
2013
+ */
2014
+ addField: (collection, fieldName, definition) => this.schemaAddField(collection, fieldName, definition),
2015
+ /**
2016
+ * Drop a field from a collection
2017
+ */
2018
+ dropField: (collection, fieldName) => this.schemaDropField(collection, fieldName),
2019
+ /**
2020
+ * Rename a field in a collection
2021
+ */
2022
+ renameField: (collection, oldName, newName) => this.schemaRenameField(collection, oldName, newName),
2023
+ /**
2024
+ * Modify a field's definition
2025
+ */
2026
+ modifyField: (collection, fieldName, changes) => this.schemaModifyField(collection, fieldName, changes),
2027
+ /**
2028
+ * Create an index on a collection
2029
+ */
2030
+ createIndex: (collection, fields, options) => this.schemaCreateIndex(collection, fields, options),
2031
+ /**
2032
+ * Drop an index from a collection
2033
+ */
2034
+ dropIndex: (collection, indexName) => this.schemaDropIndex(collection, indexName),
2035
+ /**
2036
+ * Add a constraint (SQL databases only)
2037
+ */
2038
+ addConstraint: (collection, constraint) => this.schemaAddConstraint(collection, constraint),
2039
+ /**
2040
+ * Drop a constraint (SQL databases only)
2041
+ */
2042
+ dropConstraint: (collection, constraintName) => this.schemaDropConstraint(collection, constraintName),
2043
+ /**
2044
+ * Rename a collection/table
2045
+ */
2046
+ rename: (oldName, newName) => this.schemaRename(oldName, newName),
2047
+ /**
2048
+ * Check if a collection/table exists
2049
+ */
2050
+ exists: (name) => this.schemaExists(name),
2051
+ /**
2052
+ * List all collections/tables
2053
+ */
2054
+ list: (schemaName) => this.schemaList(schemaName),
2055
+ /**
2056
+ * Get detailed schema information for a collection
2057
+ */
2058
+ describe: (name) => this.schemaDescribe(name),
2059
+ /**
2060
+ * List indexes on a collection
2061
+ */
2062
+ indexes: (collection) => this.schemaListIndexes(collection),
2063
+ };
2064
+ }
2065
+ // ==================== PRIVATE SCHEMA IMPLEMENTATION ====================
2066
+ /**
2067
+ * Create a collection with Mongoose-style definition
2068
+ */
2069
+ async schemaCreate(name, definition, options) {
2070
+ var _a;
2071
+ const schemaManager = this.getSchemaManager();
2072
+ const fields = this.convertToFieldDefinitions(definition, options === null || options === void 0 ? void 0 : options.timestamps);
2073
+ // Convert simple index definitions to the expected format
2074
+ const indexes = (_a = options === null || options === void 0 ? void 0 : options.indexes) === null || _a === void 0 ? void 0 : _a.map(idx => ({
2075
+ name: idx.name || `idx_${name}_${Array.isArray(idx.fields) ? (typeof idx.fields[0] === 'string' ? idx.fields.join('_') : idx.fields.map((f) => f.name).join('_')) : idx.fields}`,
2076
+ fields: this.normalizeIndexFields(idx.fields),
2077
+ unique: idx.unique,
2078
+ }));
2079
+ return schemaManager.createCollection(name, fields, {
2080
+ autoApply: true,
2081
+ indexes,
2082
+ sqlOptions: options === null || options === void 0 ? void 0 : options.sqlOptions,
2083
+ mongoOptions: options === null || options === void 0 ? void 0 : options.mongoOptions,
2084
+ dynamoOptions: options === null || options === void 0 ? void 0 : options.dynamoOptions,
2085
+ cassandraOptions: options === null || options === void 0 ? void 0 : options.cassandraOptions,
2086
+ });
2087
+ }
2088
+ /**
2089
+ * Drop a collection
2090
+ */
2091
+ async schemaDrop(name, options) {
2092
+ const schemaManager = this.getSchemaManager();
2093
+ return schemaManager.dropCollection(name, {
2094
+ autoApply: true,
2095
+ ifExists: options === null || options === void 0 ? void 0 : options.ifExists,
2096
+ cascade: options === null || options === void 0 ? void 0 : options.cascade,
2097
+ });
2098
+ }
2099
+ /**
2100
+ * Add a field to a collection
2101
+ */
2102
+ async schemaAddField(collection, fieldName, definition) {
2103
+ const schemaManager = this.getSchemaManager();
2104
+ const field = this.convertFieldDefinition(fieldName, definition);
2105
+ return schemaManager.addField(collection, field, { autoApply: true });
2106
+ }
2107
+ /**
2108
+ * Drop a field from a collection
2109
+ */
2110
+ async schemaDropField(collection, fieldName) {
2111
+ const schemaManager = this.getSchemaManager();
2112
+ return schemaManager.dropField(collection, fieldName, { autoApply: true });
2113
+ }
2114
+ /**
2115
+ * Rename a field
2116
+ */
2117
+ async schemaRenameField(collection, oldName, newName) {
2118
+ const schemaManager = this.getSchemaManager();
2119
+ return schemaManager.renameField(collection, oldName, newName, { autoApply: true });
2120
+ }
2121
+ /**
2122
+ * Modify a field's definition
2123
+ */
2124
+ async schemaModifyField(collection, fieldName, changes) {
2125
+ const schemaManager = this.getSchemaManager();
2126
+ const fieldChanges = {};
2127
+ if (changes.type) {
2128
+ fieldChanges.type = this.normalizeFieldType(changes.type);
2129
+ }
2130
+ if (changes.minLength !== undefined) {
2131
+ fieldChanges.minLength = changes.minLength;
2132
+ }
2133
+ if (changes.maxLength !== undefined) {
2134
+ fieldChanges.maxLength = changes.maxLength;
2135
+ }
2136
+ if (changes.precision !== undefined) {
2137
+ fieldChanges.precision = changes.precision;
2138
+ }
2139
+ if (changes.scale !== undefined) {
2140
+ fieldChanges.scale = changes.scale;
2141
+ }
2142
+ if (changes.required !== undefined) {
2143
+ fieldChanges.nullable = !changes.required;
2144
+ }
2145
+ if (changes.unique !== undefined) {
2146
+ fieldChanges.unique = changes.unique;
2147
+ }
2148
+ if (changes.default !== undefined) {
2149
+ fieldChanges.defaultValue = changes.default;
2150
+ }
2151
+ if (changes.enum !== undefined) {
2152
+ fieldChanges.enumValues = changes.enum;
2153
+ }
2154
+ return schemaManager.modifyField(collection, fieldName, fieldChanges, { autoApply: true });
2155
+ }
2156
+ /**
2157
+ * Create an index
2158
+ */
2159
+ async schemaCreateIndex(collection, fields, options) {
2160
+ const schemaManager = this.getSchemaManager();
2161
+ const normalizedFields = this.normalizeIndexFields(fields);
2162
+ const indexName = (options === null || options === void 0 ? void 0 : options.name) || `idx_${collection}_${normalizedFields.map(f => f.name).join('_')}`;
2163
+ return schemaManager.createIndex(collection, indexName, normalizedFields, {
2164
+ autoApply: true,
2165
+ unique: options === null || options === void 0 ? void 0 : options.unique,
2166
+ sparse: options === null || options === void 0 ? void 0 : options.sparse,
2167
+ sqlOptions: (options === null || options === void 0 ? void 0 : options.where) ? { where: options.where } : undefined,
2168
+ mongoOptions: (options === null || options === void 0 ? void 0 : options.expireAfterSeconds) ? { expireAfterSeconds: options.expireAfterSeconds } : undefined,
2169
+ });
2170
+ }
2171
+ /**
2172
+ * Drop an index
2173
+ */
2174
+ async schemaDropIndex(collection, indexName) {
2175
+ const schemaManager = this.getSchemaManager();
2176
+ return schemaManager.dropIndex(collection, indexName, { autoApply: true, ifExists: true });
2177
+ }
2178
+ /**
2179
+ * Add a constraint (SQL only)
2180
+ */
2181
+ async schemaAddConstraint(collection, constraint) {
2182
+ const schemaManager = this.getSchemaManager();
2183
+ return schemaManager.addConstraint(collection, constraint, { autoApply: true });
2184
+ }
2185
+ /**
2186
+ * Drop a constraint (SQL only)
2187
+ */
2188
+ async schemaDropConstraint(collection, constraintName) {
2189
+ const schemaManager = this.getSchemaManager();
2190
+ return schemaManager.dropConstraint(collection, constraintName, { autoApply: true });
2191
+ }
2192
+ /**
2193
+ * Rename a collection
2194
+ */
2195
+ async schemaRename(oldName, newName) {
2196
+ const schemaManager = this.getSchemaManager();
2197
+ return schemaManager.renameCollection(oldName, newName, { autoApply: true });
2198
+ }
2199
+ /**
2200
+ * Check if collection exists
2201
+ */
2202
+ async schemaExists(name) {
2203
+ const schemaManager = this.getSchemaManager();
2204
+ return schemaManager.collectionExists(name);
2205
+ }
2206
+ /**
2207
+ * List all collections
2208
+ */
2209
+ async schemaList(schemaName) {
2210
+ const schemaManager = this.getSchemaManager();
2211
+ return schemaManager.listCollections(schemaName);
2212
+ }
2213
+ /**
2214
+ * Describe a collection's schema
2215
+ */
2216
+ async schemaDescribe(name) {
2217
+ const schemaManager = this.getSchemaManager();
2218
+ return schemaManager.getCollectionSchema(name);
2219
+ }
2220
+ /**
2221
+ * List indexes on a collection
2222
+ */
2223
+ async schemaListIndexes(collection) {
2224
+ const schemaManager = this.getSchemaManager();
2225
+ return schemaManager.listIndexes(collection);
2226
+ }
2227
+ // ==================== SCHEMA CONVERSION HELPERS ====================
2228
+ /**
2229
+ * Convert Mongoose-style schema definition to IFieldDefinition array
2230
+ */
2231
+ convertToFieldDefinitions(definition, timestamps) {
2232
+ const fields = [];
2233
+ for (const [name, config] of Object.entries(definition)) {
2234
+ fields.push(this.convertFieldDefinition(name, config));
2235
+ }
2236
+ if (timestamps) {
2237
+ fields.push({ name: 'created_at', type: 'timestamp', defaultValue: 'NOW()', nullable: false }, { name: 'updated_at', type: 'timestamp', defaultValue: 'NOW()', nullable: false });
2238
+ }
2239
+ return fields;
2240
+ }
2241
+ /**
2242
+ * Convert a single field definition
2243
+ */
2244
+ convertFieldDefinition(name, config) {
2245
+ // Handle shorthand: { name: 'string' }
2246
+ if (typeof config === 'string') {
2247
+ return { name, type: this.normalizeFieldType(config) };
2248
+ }
2249
+ // Validate autoIncrement only works with numeric types
2250
+ if (config.autoIncrement) {
2251
+ const normalizedType = this.normalizeFieldType(config.type);
2252
+ const numericTypes = ['integer', 'int', 'bigint', 'smallint', 'number', 'float', 'double', 'decimal'];
2253
+ if (!numericTypes.includes(normalizedType.toLowerCase())) {
2254
+ throw new database_error_1.DatabaseError(`autoIncrement can only be used with numeric types (integer, bigint, number, etc.), but field '${name}' has type '${config.type}'`, enums_1.DatabaseErrorType.VALIDATION_ERROR);
2255
+ }
2256
+ }
2257
+ // Handle full definition
2258
+ return {
2259
+ name,
2260
+ type: this.normalizeFieldType(config.type),
2261
+ nullable: config.required === undefined ? true : !config.required,
2262
+ unique: config.unique,
2263
+ primaryKey: config.primaryKey,
2264
+ autoGenerate: config.autoIncrement,
2265
+ defaultValue: config.default,
2266
+ minLength: config.minLength,
2267
+ maxLength: config.maxLength,
2268
+ precision: config.precision,
2269
+ scale: config.scale,
2270
+ enumValues: config.enum,
2271
+ comment: config.comment,
2272
+ };
2273
+ }
2274
+ /**
2275
+ * Normalize Mongoose-style type names to FieldType
2276
+ */
2277
+ normalizeFieldType(type) {
2278
+ const typeMap = {
2279
+ 'String': 'string',
2280
+ 'Number': 'integer',
2281
+ 'Boolean': 'boolean',
2282
+ 'Date': 'datetime',
2283
+ 'ObjectId': 'uuid',
2284
+ 'Array': 'array',
2285
+ 'Object': 'json',
2286
+ 'Mixed': 'json',
2287
+ };
2288
+ return typeMap[type] || type;
2289
+ }
2290
+ /**
2291
+ * Normalize index fields to IIndexFieldDefinition array
2292
+ */
2293
+ normalizeIndexFields(fields) {
2294
+ if (fields.length === 0) {
2295
+ return [];
2296
+ }
2297
+ // Check if first element is a string
2298
+ if (typeof fields[0] === 'string') {
2299
+ return fields.map(name => ({ name }));
2300
+ }
2301
+ return fields;
2302
+ }
2303
+ /**
2304
+ * Get adapter by context key (used by DatabaseConnection)
2305
+ * @internal
2306
+ */
2307
+ getAdapterByContextKey(contextKey) {
2308
+ const adapter = this.adapters.get(contextKey);
2309
+ if (!adapter) {
2310
+ throw new database_error_1.DatabaseError(`No adapter found for context '${contextKey}'. Call connect() first.`, enums_1.DatabaseErrorType.CONNECTION_ERROR);
2311
+ }
2312
+ return adapter;
2313
+ }
2314
+ }
2315
+ exports.DatabaseService = DatabaseService;
2316
+ /**
2317
+ * Connection-scoped database interface.
2318
+ * Provides isolated schema, query, and aggregation operations for a specific database/environment.
2319
+ */
2320
+ class DatabaseConnection {
2321
+ constructor(service, database, env, product) {
2322
+ this.service = service;
2323
+ this._database = database;
2324
+ this._env = env;
2325
+ this._product = product;
2326
+ this.contextKey = `${database}:${env}`;
2327
+ this.triggerProcessor = new trigger_processor_1.TriggerProcessor({}, null);
2328
+ }
2329
+ /** Database tag */
2330
+ get database() {
2331
+ return this._database;
2332
+ }
2333
+ /** Environment slug */
2334
+ get env() {
2335
+ return this._env;
2336
+ }
2337
+ /** Product tag */
2338
+ get product() {
2339
+ return this._product;
2340
+ }
2341
+ /** Get the adapter for this connection */
2342
+ getAdapter() {
2343
+ return this.service.getAdapterByContextKey(this.contextKey);
2344
+ }
2345
+ /**
2346
+ * Schema operations scoped to this connection
2347
+ */
2348
+ get schema() {
2349
+ const adapter = () => this.getAdapter();
2350
+ const service = this.service;
2351
+ return {
2352
+ create: async (name, definition, options) => {
2353
+ var _a;
2354
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2355
+ const fields = service.convertToFieldDefinitions(definition, options === null || options === void 0 ? void 0 : options.timestamps);
2356
+ const indexes = (_a = options === null || options === void 0 ? void 0 : options.indexes) === null || _a === void 0 ? void 0 : _a.map(idx => ({
2357
+ name: idx.name || `idx_${name}_${Array.isArray(idx.fields) ? (typeof idx.fields[0] === 'string' ? idx.fields.join('_') : idx.fields.map((f) => f.name).join('_')) : idx.fields}`,
2358
+ fields: service.normalizeIndexFields(idx.fields),
2359
+ unique: idx.unique,
2360
+ }));
2361
+ return schemaManager.createCollection(name, fields, {
2362
+ autoApply: true,
2363
+ indexes,
2364
+ sqlOptions: options === null || options === void 0 ? void 0 : options.sqlOptions,
2365
+ mongoOptions: options === null || options === void 0 ? void 0 : options.mongoOptions,
2366
+ dynamoOptions: options === null || options === void 0 ? void 0 : options.dynamoOptions,
2367
+ cassandraOptions: options === null || options === void 0 ? void 0 : options.cassandraOptions,
2368
+ });
2369
+ },
2370
+ drop: async (name, options) => {
2371
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2372
+ return schemaManager.dropCollection(name, {
2373
+ autoApply: true,
2374
+ ifExists: options === null || options === void 0 ? void 0 : options.ifExists,
2375
+ cascade: options === null || options === void 0 ? void 0 : options.cascade,
2376
+ });
2377
+ },
2378
+ addField: async (collection, fieldName, definition) => {
2379
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2380
+ const field = service.convertFieldDefinition(fieldName, definition);
2381
+ return schemaManager.addField(collection, field, { autoApply: true });
2382
+ },
2383
+ dropField: async (collection, fieldName) => {
2384
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2385
+ return schemaManager.dropField(collection, fieldName, { autoApply: true });
2386
+ },
2387
+ renameField: async (collection, oldName, newName) => {
2388
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2389
+ return schemaManager.renameField(collection, oldName, newName, { autoApply: true });
2390
+ },
2391
+ modifyField: async (collection, fieldName, changes) => {
2392
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2393
+ const fieldChanges = {};
2394
+ if (changes.type)
2395
+ fieldChanges.type = service.normalizeFieldType(changes.type);
2396
+ if (changes.minLength !== undefined)
2397
+ fieldChanges.minLength = changes.minLength;
2398
+ if (changes.maxLength !== undefined)
2399
+ fieldChanges.maxLength = changes.maxLength;
2400
+ if (changes.precision !== undefined)
2401
+ fieldChanges.precision = changes.precision;
2402
+ if (changes.scale !== undefined)
2403
+ fieldChanges.scale = changes.scale;
2404
+ if (changes.required !== undefined)
2405
+ fieldChanges.nullable = !changes.required;
2406
+ if (changes.unique !== undefined)
2407
+ fieldChanges.unique = changes.unique;
2408
+ if (changes.default !== undefined)
2409
+ fieldChanges.defaultValue = changes.default;
2410
+ if (changes.enum !== undefined)
2411
+ fieldChanges.enumValues = changes.enum;
2412
+ return schemaManager.modifyField(collection, fieldName, fieldChanges, { autoApply: true });
2413
+ },
2414
+ createIndex: async (collection, fields, options) => {
2415
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2416
+ const normalizedFields = service.normalizeIndexFields(fields);
2417
+ const indexName = (options === null || options === void 0 ? void 0 : options.name) || `idx_${collection}_${normalizedFields.map((f) => f.name).join('_')}`;
2418
+ return schemaManager.createIndex(collection, indexName, normalizedFields, {
2419
+ autoApply: true,
2420
+ unique: options === null || options === void 0 ? void 0 : options.unique,
2421
+ sparse: options === null || options === void 0 ? void 0 : options.sparse,
2422
+ sqlOptions: (options === null || options === void 0 ? void 0 : options.where) ? { where: options.where } : undefined,
2423
+ mongoOptions: (options === null || options === void 0 ? void 0 : options.expireAfterSeconds) ? { expireAfterSeconds: options.expireAfterSeconds } : undefined,
2424
+ });
2425
+ },
2426
+ dropIndex: async (collection, indexName) => {
2427
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2428
+ return schemaManager.dropIndex(collection, indexName, { autoApply: true, ifExists: true });
2429
+ },
2430
+ addConstraint: async (collection, constraint) => {
2431
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2432
+ return schemaManager.addConstraint(collection, constraint, { autoApply: true });
2433
+ },
2434
+ dropConstraint: async (collection, constraintName) => {
2435
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2436
+ return schemaManager.dropConstraint(collection, constraintName, { autoApply: true });
2437
+ },
2438
+ rename: async (oldName, newName) => {
2439
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2440
+ return schemaManager.renameCollection(oldName, newName, { autoApply: true });
2441
+ },
2442
+ exists: async (name) => {
2443
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2444
+ return schemaManager.collectionExists(name);
2445
+ },
2446
+ list: async (schemaName) => {
2447
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2448
+ return schemaManager.listCollections(schemaName);
2449
+ },
2450
+ describe: async (name) => {
2451
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2452
+ return schemaManager.getCollectionSchema(name);
2453
+ },
2454
+ indexes: async (collection) => {
2455
+ const schemaManager = new schema_manager_1.SchemaManager(adapter());
2456
+ return schemaManager.listIndexes(collection);
2457
+ },
2458
+ };
2459
+ }
2460
+ // Query operations scoped to this connection
2461
+ query(options) {
2462
+ return this.service.query(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2463
+ }
2464
+ insert(options) {
2465
+ return this.service.insert(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2466
+ }
2467
+ update(options) {
2468
+ return this.service.update(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2469
+ }
2470
+ delete(options) {
2471
+ return this.service.delete(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2472
+ }
2473
+ upsert(options) {
2474
+ return this.service.upsert(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2475
+ }
2476
+ raw(options) {
2477
+ return this.service.raw(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2478
+ }
2479
+ // Aggregation operations scoped to this connection
2480
+ count(options) {
2481
+ return this.service.count(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2482
+ }
2483
+ sum(options) {
2484
+ return this.service.sum(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2485
+ }
2486
+ avg(options) {
2487
+ return this.service.avg(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2488
+ }
2489
+ min(options) {
2490
+ return this.service.min(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2491
+ }
2492
+ max(options) {
2493
+ return this.service.max(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2494
+ }
2495
+ aggregate(options) {
2496
+ return this.service.aggregate(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2497
+ }
2498
+ groupBy(options) {
2499
+ return this.service.groupBy(Object.assign(Object.assign({}, options), { database: this._database, env: this._env }));
2500
+ }
2501
+ /**
2502
+ * Trigger operations scoped to this connection
2503
+ */
2504
+ get triggers() {
2505
+ const connection = this;
2506
+ return {
2507
+ /**
2508
+ * Create a trigger and store it on the backend
2509
+ * @param data - Trigger configuration (tag should be just the trigger name, database tag is added automatically)
2510
+ */
2511
+ create: async (data) => {
2512
+ var _a;
2513
+ if (!connection._product) {
2514
+ throw new Error('Product tag is required to create triggers. Use connect() with product parameter.');
2515
+ }
2516
+ // Auto-prefix with database tag if not already prefixed
2517
+ const tag = ((_a = data.tag) === null || _a === void 0 ? void 0 : _a.includes(':')) ? data.tag : `${connection._database}:${data.tag}`;
2518
+ return connection.service.createTrigger(connection._product, Object.assign(Object.assign({}, data), { tag }));
2519
+ },
2520
+ /**
2521
+ * Update an existing trigger on the backend
2522
+ * @param data - Trigger configuration
2523
+ */
2524
+ update: async (data) => {
2525
+ var _a;
2526
+ if (!connection._product) {
2527
+ throw new Error('Product tag is required to update triggers. Use connect() with product parameter.');
2528
+ }
2529
+ const tag = ((_a = data.tag) === null || _a === void 0 ? void 0 : _a.includes(':')) ? data.tag : `${connection._database}:${data.tag}`;
2530
+ return connection.service.updateTrigger(connection._product, Object.assign(Object.assign({}, data), { tag }));
2531
+ },
2532
+ /**
2533
+ * Fetch a specific trigger from the backend
2534
+ * @param triggerTag - The trigger tag (without database prefix)
2535
+ */
2536
+ fetch: async (triggerTag) => {
2537
+ if (!connection._product) {
2538
+ throw new Error('Product tag is required to fetch triggers. Use connect() with product parameter.');
2539
+ }
2540
+ const tag = triggerTag.includes(':') ? triggerTag : `${connection._database}:${triggerTag}`;
2541
+ return connection.service.fetchTrigger(connection._product, tag);
2542
+ },
2543
+ /**
2544
+ * Fetch all triggers for this database from the backend
2545
+ * @deprecated Use list() instead
2546
+ */
2547
+ fetchAll: async () => {
2548
+ if (!connection._product) {
2549
+ throw new Error('Product tag is required to fetch triggers. Use connect() with product parameter.');
2550
+ }
2551
+ return connection.service.fetchTriggers(connection._product, connection._database);
2552
+ },
2553
+ /**
2554
+ * List all triggers for this database from the backend
2555
+ * @param options - Optional filters (table, event, enabled)
2556
+ */
2557
+ list: async (options) => {
2558
+ if (!connection._product) {
2559
+ throw new Error('Product tag is required to list triggers. Use connect() with product parameter.');
2560
+ }
2561
+ let triggers = await connection.service.fetchTriggers(connection._product, connection._database);
2562
+ // Apply filters if provided
2563
+ if (options === null || options === void 0 ? void 0 : options.table) {
2564
+ triggers = triggers.filter(t => { var _a; return (_a = t.tables) === null || _a === void 0 ? void 0 : _a.includes(options.table); });
2565
+ }
2566
+ if (options === null || options === void 0 ? void 0 : options.event) {
2567
+ triggers = triggers.filter(t => { var _a; return (_a = t.events) === null || _a === void 0 ? void 0 : _a.includes(options.event); });
2568
+ }
2569
+ if ((options === null || options === void 0 ? void 0 : options.enabled) !== undefined) {
2570
+ triggers = triggers.filter(t => t.enabled === options.enabled);
2571
+ }
2572
+ return triggers;
2573
+ },
2574
+ /**
2575
+ * Delete a trigger from the backend
2576
+ * @param triggerTag - The trigger tag (without database prefix)
2577
+ */
2578
+ delete: async (triggerTag) => {
2579
+ if (!connection._product) {
2580
+ throw new Error('Product tag is required to delete triggers. Use connect() with product parameter.');
2581
+ }
2582
+ const tag = triggerTag.includes(':') ? triggerTag : `${connection._database}:${triggerTag}`;
2583
+ await connection.service.deleteTrigger(connection._product, tag);
2584
+ return true;
2585
+ },
2586
+ /**
2587
+ * Register a trigger in memory for the current session (does not persist to backend)
2588
+ * @deprecated Use create() for persistent triggers
2589
+ */
2590
+ register: (table, trigger) => {
2591
+ connection.triggerProcessor.register(table, trigger);
2592
+ },
2593
+ /**
2594
+ * Register multiple triggers in memory (does not persist to backend)
2595
+ * @deprecated Use create() for persistent triggers
2596
+ */
2597
+ registerAll: (triggers) => {
2598
+ connection.triggerProcessor.registerAll(triggers);
2599
+ },
2600
+ /**
2601
+ * Unregister a trigger from memory
2602
+ */
2603
+ unregister: (table, triggerName) => {
2604
+ return connection.triggerProcessor.unregister(table, triggerName);
2605
+ },
2606
+ /**
2607
+ * Get all triggers for a table and event
2608
+ */
2609
+ getTriggersForEvent: (table, event) => {
2610
+ return connection.triggerProcessor.getTriggersForEvent(table, event);
2611
+ },
2612
+ /**
2613
+ * Execute all triggers for an event
2614
+ */
2615
+ execute: async (event, context) => {
2616
+ return connection.triggerProcessor.executeTriggers(event, Object.assign(Object.assign({}, context), { database: connection._database, env: connection._env }));
2617
+ },
2618
+ /**
2619
+ * Load triggers from the backend and register them in memory
2620
+ */
2621
+ load: async () => {
2622
+ if (!connection._product) {
2623
+ throw new Error('Product tag is required to load triggers. Use connect() with product parameter.');
2624
+ }
2625
+ const backendTriggers = await connection.service.fetchTriggers(connection._product, connection._database);
2626
+ for (const trigger of backendTriggers) {
2627
+ // Convert backend trigger format to ITriggerDefinition
2628
+ const definition = {
2629
+ name: trigger.tag,
2630
+ description: trigger.description,
2631
+ events: trigger.events, // TriggerEventType maps to TriggerEvent
2632
+ tables: trigger.tables,
2633
+ condition: trigger.condition,
2634
+ actions: trigger.actions.map(action => (Object.assign(Object.assign({}, action.config), { type: action.type, name: action.name, condition: action.condition, timing: action.timing, retry: action.retry, timeout: action.timeout, continueOnError: action.continueOnError }))),
2635
+ enabled: trigger.enabled,
2636
+ priority: trigger.priority,
2637
+ tags: trigger.tags,
2638
+ };
2639
+ // Register for all tables specified, or use '*' for all
2640
+ const tables = trigger.tables && trigger.tables.length > 0 ? trigger.tables : ['*'];
2641
+ for (const table of tables) {
2642
+ connection.triggerProcessor.register(table, definition);
2643
+ }
2644
+ }
2645
+ },
2646
+ /**
2647
+ * Set the Ductape instance for trigger actions
2648
+ */
2649
+ setDuctapeInstance: (instance) => {
2650
+ connection.triggerProcessor.setDuctapeInstance(instance);
2651
+ },
2652
+ /**
2653
+ * Get the trigger processor instance
2654
+ */
2655
+ getProcessor: () => {
2656
+ return connection.triggerProcessor;
2657
+ },
2658
+ /**
2659
+ * Trigger action builders
2660
+ */
2661
+ Trigger: trigger_processor_1.Trigger,
2662
+ /**
2663
+ * Trigger events enum
2664
+ */
2665
+ TriggerEvent: trigger_interface_1.TriggerEvent,
2666
+ /**
2667
+ * Trigger timing enum
2668
+ */
2669
+ TriggerTiming: trigger_interface_1.TriggerTiming,
2670
+ /**
2671
+ * Trigger action types enum
2672
+ */
2673
+ TriggerActionType: trigger_interface_1.TriggerActionType,
2674
+ };
2675
+ }
2676
+ }
2677
+ exports.DatabaseConnection = DatabaseConnection;
2678
+ // Export singleton instance for convenience
2679
+ exports.databaseService = new DatabaseService();
2680
+ //# sourceMappingURL=databases.service.js.map