@solidxai/core 0.1.10-beta.9 → 0.1.11-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1088) hide show
  1. package/CHANGELOG.md +415 -0
  2. package/MICROSOFT_ACTIVE_DIRECTORY_OAUTH_FLOW.md +616 -0
  3. package/ai-interaction-cleanup.sql +53 -0
  4. package/dist/commands/info.command.d.ts.map +1 -1
  5. package/dist/commands/info.command.js +0 -2
  6. package/dist/commands/info.command.js.map +1 -1
  7. package/dist/commands/refresh-model.command.d.ts +1 -7
  8. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  9. package/dist/commands/refresh-model.command.js +4 -49
  10. package/dist/commands/refresh-model.command.js.map +1 -1
  11. package/dist/commands/refresh-module.command.d.ts +0 -2
  12. package/dist/commands/refresh-module.command.d.ts.map +1 -1
  13. package/dist/commands/refresh-module.command.js +3 -16
  14. package/dist/commands/refresh-module.command.js.map +1 -1
  15. package/dist/commands/test-data.command.d.ts +2 -0
  16. package/dist/commands/test-data.command.d.ts.map +1 -1
  17. package/dist/commands/test-data.command.js +32 -6
  18. package/dist/commands/test-data.command.js.map +1 -1
  19. package/dist/constants/error-messages.d.ts +1 -0
  20. package/dist/constants/error-messages.d.ts.map +1 -1
  21. package/dist/constants/error-messages.js +1 -0
  22. package/dist/constants/error-messages.js.map +1 -1
  23. package/dist/controllers/action-metadata.controller.d.ts +1 -20
  24. package/dist/controllers/action-metadata.controller.d.ts.map +1 -1
  25. package/dist/controllers/agent-event.controller.d.ts +1 -20
  26. package/dist/controllers/agent-event.controller.d.ts.map +1 -1
  27. package/dist/controllers/agent-session.controller.d.ts +1 -20
  28. package/dist/controllers/agent-session.controller.d.ts.map +1 -1
  29. package/dist/controllers/chatter-message-details.controller.d.ts +1 -20
  30. package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
  31. package/dist/controllers/chatter-message.controller.d.ts +3 -20
  32. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  33. package/dist/controllers/chatter-message.controller.js +17 -0
  34. package/dist/controllers/chatter-message.controller.js.map +1 -1
  35. package/dist/controllers/dashboard-user-layout.controller.d.ts +24 -0
  36. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
  37. package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
  38. package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
  39. package/dist/controllers/dashboard.controller.d.ts +12 -42
  40. package/dist/controllers/dashboard.controller.d.ts.map +1 -1
  41. package/dist/controllers/dashboard.controller.js +71 -141
  42. package/dist/controllers/dashboard.controller.js.map +1 -1
  43. package/dist/controllers/datasource-introspection.controller.d.ts +234 -0
  44. package/dist/controllers/datasource-introspection.controller.d.ts.map +1 -0
  45. package/dist/controllers/datasource-introspection.controller.js +98 -0
  46. package/dist/controllers/datasource-introspection.controller.js.map +1 -0
  47. package/dist/controllers/datasource-management.controller.d.ts +18 -0
  48. package/dist/controllers/datasource-management.controller.d.ts.map +1 -0
  49. package/dist/controllers/datasource-management.controller.js +55 -0
  50. package/dist/controllers/datasource-management.controller.js.map +1 -0
  51. package/dist/controllers/email-template.controller.d.ts +1 -20
  52. package/dist/controllers/email-template.controller.d.ts.map +1 -1
  53. package/dist/controllers/export-template.controller.d.ts +1 -20
  54. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  55. package/dist/controllers/export-transaction.controller.d.ts +1 -20
  56. package/dist/controllers/export-transaction.controller.d.ts.map +1 -1
  57. package/dist/controllers/gupshup-webhook.controller.d.ts +11 -0
  58. package/dist/controllers/gupshup-webhook.controller.d.ts.map +1 -0
  59. package/dist/controllers/gupshup-webhook.controller.js +87 -0
  60. package/dist/controllers/gupshup-webhook.controller.js.map +1 -0
  61. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -20
  62. package/dist/controllers/import-transaction-error-log.controller.d.ts.map +1 -1
  63. package/dist/controllers/import-transaction.controller.d.ts +1 -20
  64. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  65. package/dist/controllers/list-of-values.controller.d.ts +1 -20
  66. package/dist/controllers/list-of-values.controller.d.ts.map +1 -1
  67. package/dist/controllers/locale.controller.d.ts +1 -20
  68. package/dist/controllers/locale.controller.d.ts.map +1 -1
  69. package/dist/controllers/mcp-audit-log.controller.d.ts +16 -0
  70. package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
  71. package/dist/controllers/{dashboard-question.controller.js → mcp-audit-log.controller.js} +44 -91
  72. package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
  73. package/dist/controllers/media.controller.d.ts +1 -20
  74. package/dist/controllers/media.controller.d.ts.map +1 -1
  75. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -20
  76. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  77. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts +16 -0
  78. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts.map +1 -0
  79. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js +133 -0
  80. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js.map +1 -0
  81. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts +28 -0
  82. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts.map +1 -0
  83. package/dist/controllers/microsoft-active-directory-authentication.controller.js +122 -0
  84. package/dist/controllers/microsoft-active-directory-authentication.controller.js.map +1 -0
  85. package/dist/controllers/model-metadata.controller.d.ts +11 -31
  86. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  87. package/dist/controllers/model-metadata.controller.js +4 -4
  88. package/dist/controllers/model-metadata.controller.js.map +1 -1
  89. package/dist/controllers/model-sequence.controller.d.ts +1 -20
  90. package/dist/controllers/model-sequence.controller.d.ts.map +1 -1
  91. package/dist/controllers/module-metadata-explorer.controller.d.ts +171 -0
  92. package/dist/controllers/module-metadata-explorer.controller.d.ts.map +1 -0
  93. package/dist/controllers/module-metadata-explorer.controller.js +143 -0
  94. package/dist/controllers/module-metadata-explorer.controller.js.map +1 -0
  95. package/dist/controllers/module-metadata.controller.d.ts +5 -0
  96. package/dist/controllers/module-metadata.controller.d.ts.map +1 -1
  97. package/dist/controllers/module-metadata.controller.js +13 -1
  98. package/dist/controllers/module-metadata.controller.js.map +1 -1
  99. package/dist/controllers/module-package.controller.d.ts +622 -0
  100. package/dist/controllers/module-package.controller.d.ts.map +1 -0
  101. package/dist/controllers/module-package.controller.js +150 -0
  102. package/dist/controllers/module-package.controller.js.map +1 -0
  103. package/dist/controllers/mq-message-queue.controller.d.ts +1 -20
  104. package/dist/controllers/mq-message-queue.controller.d.ts.map +1 -1
  105. package/dist/controllers/mq-message.controller.d.ts +1 -20
  106. package/dist/controllers/mq-message.controller.d.ts.map +1 -1
  107. package/dist/controllers/permission-metadata.controller.d.ts +1 -20
  108. package/dist/controllers/permission-metadata.controller.d.ts.map +1 -1
  109. package/dist/controllers/role-metadata.controller.d.ts +1 -20
  110. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  111. package/dist/controllers/saved-filters.controller.d.ts +1 -20
  112. package/dist/controllers/saved-filters.controller.d.ts.map +1 -1
  113. package/dist/controllers/scheduled-job.controller.d.ts +1 -20
  114. package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
  115. package/dist/controllers/security-rule.controller.d.ts +1 -20
  116. package/dist/controllers/security-rule.controller.d.ts.map +1 -1
  117. package/dist/controllers/service.controller.d.ts +1 -5
  118. package/dist/controllers/service.controller.d.ts.map +1 -1
  119. package/dist/controllers/service.controller.js +6 -11
  120. package/dist/controllers/service.controller.js.map +1 -1
  121. package/dist/controllers/sms-template.controller.d.ts +1 -20
  122. package/dist/controllers/sms-template.controller.d.ts.map +1 -1
  123. package/dist/controllers/test.controller.d.ts +1 -6
  124. package/dist/controllers/test.controller.d.ts.map +1 -1
  125. package/dist/controllers/test.controller.js +2 -20
  126. package/dist/controllers/test.controller.js.map +1 -1
  127. package/dist/controllers/user-activity-history.controller.d.ts +1 -20
  128. package/dist/controllers/user-activity-history.controller.d.ts.map +1 -1
  129. package/dist/controllers/user-view-metadata.controller.d.ts +1 -20
  130. package/dist/controllers/user-view-metadata.controller.d.ts.map +1 -1
  131. package/dist/controllers/user.controller.d.ts +1 -20
  132. package/dist/controllers/user.controller.d.ts.map +1 -1
  133. package/dist/controllers/view-metadata.controller.d.ts +1 -20
  134. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  135. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
  136. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
  137. package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
  138. package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
  139. package/dist/dtos/confirm-module-package-import.dto.d.ts +4 -0
  140. package/dist/dtos/confirm-module-package-import.dto.d.ts.map +1 -0
  141. package/dist/dtos/confirm-module-package-import.dto.js +34 -0
  142. package/dist/dtos/confirm-module-package-import.dto.js.map +1 -0
  143. package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
  144. package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
  145. package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
  146. package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
  147. package/dist/dtos/create-datasource-management.dto.d.ts +25 -0
  148. package/dist/dtos/create-datasource-management.dto.d.ts.map +1 -0
  149. package/dist/dtos/create-datasource-management.dto.js +169 -0
  150. package/dist/dtos/create-datasource-management.dto.js.map +1 -0
  151. package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
  152. package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
  153. package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
  154. package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
  155. package/dist/dtos/create-model-metadata.dto.d.ts +2 -2
  156. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  157. package/dist/dtos/create-model-metadata.dto.js +6 -11
  158. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  159. package/dist/dtos/create-permission-metadata.dto.d.ts.map +1 -1
  160. package/dist/dtos/create-permission-metadata.dto.js +2 -0
  161. package/dist/dtos/create-permission-metadata.dto.js.map +1 -1
  162. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  163. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  164. package/dist/dtos/create-role-metadata.dto.js +13 -1
  165. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  166. package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
  167. package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
  168. package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
  169. package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
  170. package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
  171. package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
  172. package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
  173. package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
  174. package/dist/dtos/datasource-introspection-mapping.dto.d.ts +45 -0
  175. package/dist/dtos/datasource-introspection-mapping.dto.d.ts.map +1 -0
  176. package/dist/dtos/datasource-introspection-mapping.dto.js +233 -0
  177. package/dist/dtos/datasource-introspection-mapping.dto.js.map +1 -0
  178. package/dist/dtos/import-instructions.dto.d.ts +2 -0
  179. package/dist/dtos/import-instructions.dto.d.ts.map +1 -1
  180. package/dist/dtos/import-instructions.dto.js +15 -1
  181. package/dist/dtos/import-instructions.dto.js.map +1 -1
  182. package/dist/dtos/metadata-explorer-references-query.dto.d.ts +10 -0
  183. package/dist/dtos/metadata-explorer-references-query.dto.d.ts.map +1 -0
  184. package/dist/dtos/metadata-explorer-references-query.dto.js +69 -0
  185. package/dist/dtos/metadata-explorer-references-query.dto.js.map +1 -0
  186. package/dist/dtos/metadata-explorer-search-query.dto.d.ts +8 -0
  187. package/dist/dtos/metadata-explorer-search-query.dto.d.ts.map +1 -0
  188. package/dist/dtos/metadata-explorer-search-query.dto.js +55 -0
  189. package/dist/dtos/metadata-explorer-search-query.dto.js.map +1 -0
  190. package/dist/dtos/metadata-explorer-write.dto.d.ts +4 -0
  191. package/dist/dtos/metadata-explorer-write.dto.d.ts.map +1 -0
  192. package/dist/dtos/{invoke-ai-prompt.dto.js → metadata-explorer-write.dto.js} +12 -12
  193. package/dist/dtos/metadata-explorer-write.dto.js.map +1 -0
  194. package/dist/dtos/run-module-package-build.dto.d.ts +5 -0
  195. package/dist/dtos/run-module-package-build.dto.d.ts.map +1 -0
  196. package/dist/dtos/run-module-package-build.dto.js +38 -0
  197. package/dist/dtos/run-module-package-build.dto.js.map +1 -0
  198. package/dist/dtos/run-module-package-seed.dto.d.ts +4 -0
  199. package/dist/dtos/run-module-package-seed.dto.d.ts.map +1 -0
  200. package/dist/dtos/run-module-package-seed.dto.js +34 -0
  201. package/dist/dtos/run-module-package-seed.dto.js.map +1 -0
  202. package/dist/dtos/update-chatter-note-message.dto.d.ts +5 -0
  203. package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -0
  204. package/dist/dtos/update-chatter-note-message.dto.js +34 -0
  205. package/dist/dtos/update-chatter-note-message.dto.js.map +1 -0
  206. package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
  207. package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
  208. package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
  209. package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
  210. package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
  211. package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
  212. package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
  213. package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
  214. package/dist/dtos/update-permission-metadata.dto.d.ts.map +1 -1
  215. package/dist/dtos/update-permission-metadata.dto.js +3 -1
  216. package/dist/dtos/update-permission-metadata.dto.js.map +1 -1
  217. package/dist/dtos/update-role-metadata.dto.d.ts +2 -0
  218. package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
  219. package/dist/dtos/update-role-metadata.dto.js +13 -1
  220. package/dist/dtos/update-role-metadata.dto.js.map +1 -1
  221. package/dist/entities/action-metadata.entity.d.ts.map +1 -1
  222. package/dist/entities/action-metadata.entity.js +1 -0
  223. package/dist/entities/action-metadata.entity.js.map +1 -1
  224. package/dist/entities/agent-event.entity.d.ts.map +1 -1
  225. package/dist/entities/agent-event.entity.js +1 -0
  226. package/dist/entities/agent-event.entity.js.map +1 -1
  227. package/dist/entities/agent-session.entity.d.ts.map +1 -1
  228. package/dist/entities/agent-session.entity.js +1 -0
  229. package/dist/entities/agent-session.entity.js.map +1 -1
  230. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  231. package/dist/entities/chatter-message.entity.js +2 -0
  232. package/dist/entities/chatter-message.entity.js.map +1 -1
  233. package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
  234. package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
  235. package/dist/entities/dashboard-user-layout.entity.js +52 -0
  236. package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
  237. package/dist/entities/email-template.entity.d.ts.map +1 -1
  238. package/dist/entities/email-template.entity.js +1 -0
  239. package/dist/entities/email-template.entity.js.map +1 -1
  240. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  241. package/dist/entities/field-metadata.entity.js +4 -0
  242. package/dist/entities/field-metadata.entity.js.map +1 -1
  243. package/dist/entities/legacy-common-with-id.entity.d.ts +2 -2
  244. package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -1
  245. package/dist/entities/legacy-common-with-id.entity.js +6 -6
  246. package/dist/entities/legacy-common-with-id.entity.js.map +1 -1
  247. package/dist/entities/legacy-common.entity.d.ts +1 -1
  248. package/dist/entities/legacy-common.entity.d.ts.map +1 -1
  249. package/dist/entities/legacy-common.entity.js +14 -14
  250. package/dist/entities/legacy-common.entity.js.map +1 -1
  251. package/dist/entities/list-of-values.entity.d.ts.map +1 -1
  252. package/dist/entities/list-of-values.entity.js +4 -0
  253. package/dist/entities/list-of-values.entity.js.map +1 -1
  254. package/dist/entities/locale.entity.d.ts.map +1 -1
  255. package/dist/entities/locale.entity.js +1 -0
  256. package/dist/entities/locale.entity.js.map +1 -1
  257. package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
  258. package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
  259. package/dist/entities/mcp-audit-log.entity.js +90 -0
  260. package/dist/entities/mcp-audit-log.entity.js.map +1 -0
  261. package/dist/entities/media.entity.d.ts.map +1 -1
  262. package/dist/entities/media.entity.js +1 -0
  263. package/dist/entities/media.entity.js.map +1 -1
  264. package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
  265. package/dist/entities/menu-item-metadata.entity.js +2 -0
  266. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  267. package/dist/entities/model-metadata.entity.d.ts +2 -2
  268. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  269. package/dist/entities/model-metadata.entity.js +8 -8
  270. package/dist/entities/model-metadata.entity.js.map +1 -1
  271. package/dist/entities/module-metadata.entity.d.ts.map +1 -1
  272. package/dist/entities/module-metadata.entity.js +2 -0
  273. package/dist/entities/module-metadata.entity.js.map +1 -1
  274. package/dist/entities/permission-metadata.entity.d.ts.map +1 -1
  275. package/dist/entities/permission-metadata.entity.js.map +1 -1
  276. package/dist/entities/role-metadata.entity.d.ts +2 -0
  277. package/dist/entities/role-metadata.entity.d.ts.map +1 -1
  278. package/dist/entities/role-metadata.entity.js +10 -2
  279. package/dist/entities/role-metadata.entity.js.map +1 -1
  280. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  281. package/dist/entities/saved-filters.entity.js +3 -0
  282. package/dist/entities/saved-filters.entity.js.map +1 -1
  283. package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
  284. package/dist/entities/scheduled-job.entity.js +2 -0
  285. package/dist/entities/scheduled-job.entity.js.map +1 -1
  286. package/dist/entities/security-rule.entity.d.ts.map +1 -1
  287. package/dist/entities/security-rule.entity.js +1 -0
  288. package/dist/entities/security-rule.entity.js.map +1 -1
  289. package/dist/entities/sms-template.entity.d.ts.map +1 -1
  290. package/dist/entities/sms-template.entity.js +2 -0
  291. package/dist/entities/sms-template.entity.js.map +1 -1
  292. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  293. package/dist/entities/user-activity-history.entity.js +1 -0
  294. package/dist/entities/user-activity-history.entity.js.map +1 -1
  295. package/dist/entities/user.entity.d.ts +3 -0
  296. package/dist/entities/user.entity.d.ts.map +1 -1
  297. package/dist/entities/user.entity.js +15 -1
  298. package/dist/entities/user.entity.js.map +1 -1
  299. package/dist/entities/view-metadata.entity.d.ts.map +1 -1
  300. package/dist/entities/view-metadata.entity.js +2 -0
  301. package/dist/entities/view-metadata.entity.js.map +1 -1
  302. package/dist/enums/legacy-table-type.enum.d.ts +6 -0
  303. package/dist/enums/legacy-table-type.enum.d.ts.map +1 -0
  304. package/dist/enums/legacy-table-type.enum.js +10 -0
  305. package/dist/enums/legacy-table-type.enum.js.map +1 -0
  306. package/dist/factories/whatsapp.factory.d.ts.map +1 -1
  307. package/dist/factories/whatsapp.factory.js +13 -11
  308. package/dist/factories/whatsapp.factory.js.map +1 -1
  309. package/dist/helpers/bootstrap.helper.d.ts +1 -0
  310. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  311. package/dist/helpers/bootstrap.helper.js +6 -3
  312. package/dist/helpers/bootstrap.helper.js.map +1 -1
  313. package/dist/helpers/command.service.d.ts +1 -0
  314. package/dist/helpers/command.service.d.ts.map +1 -1
  315. package/dist/helpers/command.service.js +2 -1
  316. package/dist/helpers/command.service.js.map +1 -1
  317. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts +34 -0
  318. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts.map +1 -0
  319. package/dist/helpers/microsoft-active-directory-oauth.helper.js +43 -0
  320. package/dist/helpers/microsoft-active-directory-oauth.helper.js.map +1 -0
  321. package/dist/helpers/model-metadata-helper.service.d.ts +2 -1
  322. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  323. package/dist/helpers/model-metadata-helper.service.js +4 -3
  324. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  325. package/dist/helpers/module-metadata-helper.service.d.ts +2 -0
  326. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  327. package/dist/helpers/module-metadata-helper.service.js +23 -10
  328. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  329. package/dist/helpers/module.helper.d.ts.map +1 -1
  330. package/dist/helpers/module.helper.js +6 -6
  331. package/dist/helpers/module.helper.js.map +1 -1
  332. package/dist/helpers/solid-registry.d.ts +5 -9
  333. package/dist/helpers/solid-registry.d.ts.map +1 -1
  334. package/dist/helpers/solid-registry.js +13 -28
  335. package/dist/helpers/solid-registry.js.map +1 -1
  336. package/dist/helpers/typeorm-migration-helpers.d.ts +12 -0
  337. package/dist/helpers/typeorm-migration-helpers.d.ts.map +1 -0
  338. package/dist/helpers/typeorm-migration-helpers.js +119 -0
  339. package/dist/helpers/typeorm-migration-helpers.js.map +1 -0
  340. package/dist/helpers/user-helper.d.ts.map +1 -1
  341. package/dist/helpers/user-helper.js +4 -0
  342. package/dist/helpers/user-helper.js.map +1 -1
  343. package/dist/index.d.ts +42 -10
  344. package/dist/index.d.ts.map +1 -1
  345. package/dist/index.js +42 -10
  346. package/dist/index.js.map +1 -1
  347. package/dist/interfaces/datasource-introspection-provider.interface.d.ts +26 -0
  348. package/dist/interfaces/datasource-introspection-provider.interface.d.ts.map +1 -0
  349. package/dist/interfaces/datasource-introspection-provider.interface.js +3 -0
  350. package/dist/interfaces/datasource-introspection-provider.interface.js.map +1 -0
  351. package/dist/interfaces.d.ts +23 -21
  352. package/dist/interfaces.d.ts.map +1 -1
  353. package/dist/interfaces.js.map +1 -1
  354. package/dist/listeners/user-registration.listener.d.ts +5 -2
  355. package/dist/listeners/user-registration.listener.d.ts.map +1 -1
  356. package/dist/listeners/user-registration.listener.js +37 -4
  357. package/dist/listeners/user-registration.listener.js.map +1 -1
  358. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts +14 -0
  359. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts.map +1 -0
  360. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js +67 -0
  361. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js.map +1 -0
  362. package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
  363. package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
  364. package/dist/{repository/dashboard-question-sql-dataset-config.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
  365. package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
  366. package/dist/repository/{ai-interaction.repository.d.ts → mcp-audit-log.repository.d.ts} +3 -3
  367. package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
  368. package/dist/repository/{ai-interaction.repository.js → mcp-audit-log.repository.js} +8 -8
  369. package/dist/repository/mcp-audit-log.repository.js.map +1 -0
  370. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -6
  371. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  372. package/dist/seeders/module-metadata-seeder.service.js +58 -98
  373. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  374. package/dist/seeders/module-test-data.service.d.ts +2 -0
  375. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  376. package/dist/seeders/module-test-data.service.js +62 -1
  377. package/dist/seeders/module-test-data.service.js.map +1 -1
  378. package/dist/seeders/seed-data/solid-core-metadata.json +5010 -4284
  379. package/dist/seeders/system-fields-seeder.service.js +1 -1
  380. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  381. package/dist/services/authentication.service.d.ts +18 -1
  382. package/dist/services/authentication.service.d.ts.map +1 -1
  383. package/dist/services/authentication.service.js +209 -15
  384. package/dist/services/authentication.service.js.map +1 -1
  385. package/dist/services/chatter-message.service.d.ts +7 -1
  386. package/dist/services/chatter-message.service.d.ts.map +1 -1
  387. package/dist/services/chatter-message.service.js +94 -2
  388. package/dist/services/chatter-message.service.js.map +1 -1
  389. package/dist/services/crud-helper.service.d.ts +18 -0
  390. package/dist/services/crud-helper.service.d.ts.map +1 -1
  391. package/dist/services/crud-helper.service.js +76 -2
  392. package/dist/services/crud-helper.service.js.map +1 -1
  393. package/dist/services/crud.service.d.ts +1 -21
  394. package/dist/services/crud.service.d.ts.map +1 -1
  395. package/dist/services/crud.service.js +23 -87
  396. package/dist/services/crud.service.js.map +1 -1
  397. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
  398. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
  399. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
  400. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
  401. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
  402. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
  403. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
  404. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
  405. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
  406. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
  407. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
  408. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
  409. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
  410. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
  411. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
  412. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
  413. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
  414. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
  415. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
  416. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
  417. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +20 -0
  418. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
  419. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +201 -0
  420. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
  421. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
  422. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
  423. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
  424. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
  425. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
  426. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
  427. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
  428. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
  429. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
  430. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
  431. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
  432. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
  433. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
  434. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
  435. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
  436. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
  437. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
  438. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
  439. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
  440. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
  441. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
  442. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
  443. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
  444. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
  445. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
  446. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
  447. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
  448. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
  449. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
  450. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
  451. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
  452. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
  453. package/dist/services/dashboard-runtime.service.d.ts +31 -0
  454. package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
  455. package/dist/services/dashboard-runtime.service.js +408 -0
  456. package/dist/services/dashboard-runtime.service.js.map +1 -0
  457. package/dist/services/dashboard-user-layout.service.d.ts +12 -0
  458. package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
  459. package/dist/services/{dashboard-question-sql-dataset-config.service.js → dashboard-user-layout.service.js} +10 -10
  460. package/dist/services/dashboard-user-layout.service.js.map +1 -0
  461. package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.d.ts +11 -0
  462. package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.d.ts.map +1 -0
  463. package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js +181 -0
  464. package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js.map +1 -0
  465. package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.d.ts +11 -0
  466. package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.d.ts.map +1 -0
  467. package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js +90 -0
  468. package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js.map +1 -0
  469. package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.d.ts +11 -0
  470. package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.d.ts.map +1 -0
  471. package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js +156 -0
  472. package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js.map +1 -0
  473. package/dist/services/datasource-introspection.service.d.ts +288 -0
  474. package/dist/services/datasource-introspection.service.d.ts.map +1 -0
  475. package/dist/services/datasource-introspection.service.js +1278 -0
  476. package/dist/services/datasource-introspection.service.js.map +1 -0
  477. package/dist/services/datasource-management.service.d.ts +60 -0
  478. package/dist/services/datasource-management.service.d.ts.map +1 -0
  479. package/dist/services/datasource-management.service.js +461 -0
  480. package/dist/services/datasource-management.service.js.map +1 -0
  481. package/dist/services/field-metadata.service.d.ts.map +1 -1
  482. package/dist/services/field-metadata.service.js +19 -0
  483. package/dist/services/field-metadata.service.js.map +1 -1
  484. package/dist/services/import-transaction.service.d.ts.map +1 -1
  485. package/dist/services/import-transaction.service.js +6 -0
  486. package/dist/services/import-transaction.service.js.map +1 -1
  487. package/dist/services/mcp-audit-log.service.d.ts +12 -0
  488. package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
  489. package/dist/services/{dashboard-variable.service.js → mcp-audit-log.service.js} +9 -10
  490. package/dist/services/mcp-audit-log.service.js.map +1 -0
  491. package/dist/services/media.service.d.ts +1 -20
  492. package/dist/services/media.service.d.ts.map +1 -1
  493. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +1 -0
  494. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  495. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +51 -11
  496. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  497. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +1 -0
  498. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  499. package/dist/services/mediaStorageProviders/file-storage-provider.js +11 -1
  500. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  501. package/dist/services/model-metadata.service.d.ts +20 -34
  502. package/dist/services/model-metadata.service.d.ts.map +1 -1
  503. package/dist/services/model-metadata.service.js +311 -50
  504. package/dist/services/model-metadata.service.js.map +1 -1
  505. package/dist/services/module-metadata-explorer.service.d.ts +161 -0
  506. package/dist/services/module-metadata-explorer.service.d.ts.map +1 -0
  507. package/dist/services/module-metadata-explorer.service.js +485 -0
  508. package/dist/services/module-metadata-explorer.service.js.map +1 -0
  509. package/dist/services/module-metadata.service.d.ts +11 -1
  510. package/dist/services/module-metadata.service.d.ts.map +1 -1
  511. package/dist/services/module-metadata.service.js +140 -4
  512. package/dist/services/module-metadata.service.js.map +1 -1
  513. package/dist/services/module-package.service.d.ts +266 -0
  514. package/dist/services/module-package.service.d.ts.map +1 -0
  515. package/dist/services/module-package.service.js +980 -0
  516. package/dist/services/module-package.service.js.map +1 -0
  517. package/dist/services/role-metadata.service.d.ts +1 -0
  518. package/dist/services/role-metadata.service.d.ts.map +1 -1
  519. package/dist/services/role-metadata.service.js +13 -0
  520. package/dist/services/role-metadata.service.js.map +1 -1
  521. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
  522. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
  523. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +58 -0
  524. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
  525. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
  526. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
  527. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +59 -0
  528. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
  529. package/dist/services/setting.service.d.ts +1 -0
  530. package/dist/services/setting.service.d.ts.map +1 -1
  531. package/dist/services/setting.service.js +32 -8
  532. package/dist/services/setting.service.js.map +1 -1
  533. package/dist/services/settings/default-settings-provider.service.d.ts +292 -0
  534. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  535. package/dist/services/settings/default-settings-provider.service.js +164 -0
  536. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  537. package/dist/services/solid-introspect.service.d.ts +1 -2
  538. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  539. package/dist/services/solid-introspect.service.js +12 -24
  540. package/dist/services/solid-introspect.service.js.map +1 -1
  541. package/dist/services/solid-ts-morph.service.d.ts +1 -1
  542. package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
  543. package/dist/services/solid-ts-morph.service.js.map +1 -1
  544. package/dist/services/user.service.d.ts +2 -0
  545. package/dist/services/user.service.d.ts.map +1 -1
  546. package/dist/services/user.service.js +47 -1
  547. package/dist/services/user.service.js.map +1 -1
  548. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts +11 -0
  549. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts.map +1 -0
  550. package/dist/services/whatsapp/GupshupOtpWhatsappService.js +127 -0
  551. package/dist/services/whatsapp/GupshupOtpWhatsappService.js.map +1 -0
  552. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts +17 -0
  553. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts.map +1 -0
  554. package/dist/services/whatsapp/MetaCloudWhatsappService.js +209 -0
  555. package/dist/services/whatsapp/MetaCloudWhatsappService.js.map +1 -0
  556. package/dist/solid-core.module.d.ts +2 -2
  557. package/dist/solid-core.module.d.ts.map +1 -1
  558. package/dist/solid-core.module.js +95 -103
  559. package/dist/solid-core.module.js.map +1 -1
  560. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
  561. package/dist/subscribers/model-metadata.subscriber.js +1 -3
  562. package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
  563. package/dist/subscribers/scheduled-job.subscriber.js +1 -1
  564. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  565. package/dist/subscribers/security-rule.subscriber.js +1 -1
  566. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  567. package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
  568. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  569. package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
  570. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  571. package/dist/testing/steps/ui/index.d.ts.map +1 -1
  572. package/dist/testing/steps/ui/index.js +2 -0
  573. package/dist/testing/steps/ui/index.js.map +1 -1
  574. package/dist/testing/steps/ui/manual.step.d.ts +3 -0
  575. package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
  576. package/dist/testing/steps/ui/manual.step.js +56 -0
  577. package/dist/testing/steps/ui/manual.step.js.map +1 -0
  578. package/dist/winston.logger.d.ts +5 -0
  579. package/dist/winston.logger.d.ts.map +1 -1
  580. package/dist/winston.logger.js +6 -4
  581. package/dist/winston.logger.js.map +1 -1
  582. package/package.json +5 -8
  583. package/src/commands/info.command.ts +0 -2
  584. package/src/commands/refresh-model.command.ts +6 -51
  585. package/src/commands/refresh-module.command.ts +3 -16
  586. package/src/commands/test-data.command.ts +29 -6
  587. package/src/constants/error-messages.ts +2 -1
  588. package/src/controllers/chatter-message.controller.ts +12 -0
  589. package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
  590. package/src/controllers/dashboard.controller.ts +70 -89
  591. package/src/controllers/datasource-introspection.controller.ts +58 -0
  592. package/src/controllers/datasource-management.controller.ts +24 -0
  593. package/src/controllers/gupshup-webhook.controller.ts +91 -0
  594. package/src/controllers/mcp-audit-log.controller.ts +70 -0
  595. package/src/controllers/meta-cloud-whatsapp-webhook.controller.ts +155 -0
  596. package/src/controllers/microsoft-active-directory-authentication.controller.ts +104 -0
  597. package/src/controllers/model-metadata.controller.ts +1 -1
  598. package/src/controllers/module-metadata-explorer.controller.ts +83 -0
  599. package/src/controllers/module-metadata.controller.ts +7 -1
  600. package/src/controllers/module-package.controller.ts +102 -0
  601. package/src/controllers/service.controller.ts +4 -7
  602. package/src/controllers/test.controller.ts +0 -9
  603. package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
  604. package/src/dtos/confirm-module-package-import.dto.ts +12 -0
  605. package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
  606. package/src/dtos/create-datasource-management.dto.ts +139 -0
  607. package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
  608. package/src/dtos/create-model-metadata.dto.ts +5 -9
  609. package/src/dtos/create-permission-metadata.dto.ts +3 -0
  610. package/src/dtos/create-role-metadata.dto.ts +11 -1
  611. package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
  612. package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
  613. package/src/dtos/datasource-introspection-mapping.dto.ts +182 -0
  614. package/src/dtos/import-instructions.dto.ts +11 -1
  615. package/src/dtos/metadata-explorer-references-query.dto.ts +39 -0
  616. package/src/dtos/metadata-explorer-search-query.dto.ts +28 -0
  617. package/src/dtos/metadata-explorer-write.dto.ts +11 -0
  618. package/src/dtos/run-module-package-build.dto.ts +14 -0
  619. package/src/dtos/run-module-package-seed.dto.ts +12 -0
  620. package/src/dtos/update-chatter-note-message.dto.ts +14 -0
  621. package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
  622. package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
  623. package/src/dtos/update-permission-metadata.dto.ts +4 -1
  624. package/src/dtos/update-role-metadata.dto.ts +21 -1
  625. package/src/entities/action-metadata.entity.ts +1 -0
  626. package/src/entities/agent-event.entity.ts +1 -0
  627. package/src/entities/agent-session.entity.ts +1 -0
  628. package/src/entities/chatter-message.entity.ts +2 -0
  629. package/src/entities/dashboard-user-layout.entity.ts +27 -0
  630. package/src/entities/email-template.entity.ts +1 -0
  631. package/src/entities/field-metadata.entity.ts +4 -1
  632. package/src/entities/legacy-common-with-id.entity.ts +2 -2
  633. package/src/entities/legacy-common.entity.ts +1 -1
  634. package/src/entities/list-of-values.entity.ts +5 -1
  635. package/src/entities/locale.entity.ts +1 -0
  636. package/src/entities/mcp-audit-log.entity.ts +55 -0
  637. package/src/entities/media.entity.ts +1 -0
  638. package/src/entities/menu-item-metadata.entity.ts +2 -0
  639. package/src/entities/model-metadata.entity.ts +6 -5
  640. package/src/entities/module-metadata.entity.ts +2 -0
  641. package/src/entities/permission-metadata.entity.ts +2 -2
  642. package/src/entities/role-metadata.entity.ts +11 -3
  643. package/src/entities/saved-filters.entity.ts +3 -0
  644. package/src/entities/scheduled-job.entity.ts +2 -0
  645. package/src/entities/security-rule.entity.ts +1 -0
  646. package/src/entities/sms-template.entity.ts +2 -0
  647. package/src/entities/user-activity-history.entity.ts +1 -0
  648. package/src/entities/user.entity.ts +15 -1
  649. package/src/entities/view-metadata.entity.ts +2 -0
  650. package/src/enums/legacy-table-type.enum.ts +5 -0
  651. package/src/factories/whatsapp.factory.ts +33 -32
  652. package/src/helpers/bootstrap.helper.ts +13 -6
  653. package/src/helpers/command.service.ts +3 -1
  654. package/src/helpers/field-crud-managers/field-quality-check-fixes.md +208 -0
  655. package/src/helpers/microsoft-active-directory-oauth.helper.ts +83 -0
  656. package/src/helpers/model-metadata-helper.service.ts +4 -3
  657. package/src/helpers/module-metadata-helper.service.ts +33 -20
  658. package/src/helpers/module.helper.ts +12 -9
  659. package/src/helpers/solid-registry.ts +15 -36
  660. package/src/helpers/typeorm-migration-helpers.ts +163 -0
  661. package/src/helpers/user-helper.ts +5 -1
  662. package/src/index.ts +42 -10
  663. package/src/interfaces/datasource-introspection-provider.interface.ts +28 -0
  664. package/src/interfaces.ts +32 -29
  665. package/src/listeners/user-registration.listener.ts +49 -6
  666. package/src/passport-strategies/microsoft-active-directory-oauth.strategy.ts +63 -0
  667. package/src/repositories/dashboard-user-layout.repository.ts +19 -0
  668. package/src/repository/mcp-audit-log.repository.ts +17 -0
  669. package/src/seeders/module-metadata-seeder.service.ts +63 -105
  670. package/src/seeders/module-test-data.service.ts +80 -3
  671. package/src/seeders/seed-data/solid-core-metadata.json +5011 -4285
  672. package/src/seeders/system-fields-seeder.service.ts +1 -1
  673. package/src/services/authentication.service.ts +360 -47
  674. package/src/services/chatter-message.service.ts +112 -2
  675. package/src/services/crud-helper.service.ts +86 -2
  676. package/src/services/crud.service.ts +26 -119
  677. package/src/services/dashboard-providers/README.md +603 -0
  678. package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
  679. package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
  680. package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
  681. package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +63 -0
  682. package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +84 -0
  683. package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +247 -0
  684. package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +161 -0
  685. package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
  686. package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
  687. package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
  688. package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
  689. package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
  690. package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
  691. package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
  692. package/src/services/dashboard-runtime.service.ts +488 -0
  693. package/src/services/dashboard-user-layout.service.ts +20 -0
  694. package/src/services/datasource-introspection/mssql-datasource-introspection-provider.service.ts +185 -0
  695. package/src/services/datasource-introspection/mysql-datasource-introspection-provider.service.ts +95 -0
  696. package/src/services/datasource-introspection/postgres-datasource-introspection-provider.service.ts +160 -0
  697. package/src/services/datasource-introspection.service.ts +1536 -0
  698. package/src/services/datasource-management.service.ts +566 -0
  699. package/src/services/field-metadata.service.ts +21 -1
  700. package/src/services/import-transaction.service.ts +11 -1
  701. package/src/services/mcp-audit-log.service.ts +19 -0
  702. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +60 -13
  703. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -2
  704. package/src/services/model-metadata.service.ts +362 -122
  705. package/src/services/module-metadata-explorer.service.ts +670 -0
  706. package/src/services/module-metadata.service.ts +148 -10
  707. package/src/services/module-package.service.ts +1171 -0
  708. package/src/services/role-metadata.service.ts +14 -0
  709. package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +50 -0
  710. package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +49 -0
  711. package/src/services/setting.service.ts +43 -12
  712. package/src/services/settings/default-settings-provider.service.ts +167 -0
  713. package/src/services/solid-introspect.service.ts +19 -34
  714. package/src/services/solid-ts-morph.service.ts +2 -2
  715. package/src/services/user.service.ts +62 -1
  716. package/src/services/whatsapp/GupshupOtpWhatsappService.ts +174 -0
  717. package/src/services/whatsapp/MetaCloudWhatsappService.ts +253 -0
  718. package/src/solid-core.module.ts +267 -282
  719. package/src/subscribers/model-metadata.subscriber.ts +1 -3
  720. package/src/subscribers/scheduled-job.subscriber.ts +1 -1
  721. package/src/subscribers/security-rule.subscriber.ts +1 -1
  722. package/src/testing/README.md +55 -2
  723. package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
  724. package/src/testing/steps/ui/index.ts +2 -0
  725. package/src/testing/steps/ui/manual.step.ts +80 -0
  726. package/src/winston.logger.ts +5 -7
  727. package/dist/commands/ingest.command.d.ts +0 -16
  728. package/dist/commands/ingest.command.d.ts.map +0 -1
  729. package/dist/commands/ingest.command.js +0 -50
  730. package/dist/commands/ingest.command.js.map +0 -1
  731. package/dist/controllers/ai-interaction.controller.d.ts +0 -48
  732. package/dist/controllers/ai-interaction.controller.d.ts.map +0 -1
  733. package/dist/controllers/ai-interaction.controller.js +0 -218
  734. package/dist/controllers/ai-interaction.controller.js.map +0 -1
  735. package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
  736. package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
  737. package/dist/controllers/dashboard-layout.controller.js +0 -204
  738. package/dist/controllers/dashboard-layout.controller.js.map +0 -1
  739. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
  740. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
  741. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
  742. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
  743. package/dist/controllers/dashboard-question.controller.d.ts +0 -45
  744. package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
  745. package/dist/controllers/dashboard-question.controller.js.map +0 -1
  746. package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
  747. package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
  748. package/dist/controllers/dashboard-variable.controller.js.map +0 -1
  749. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
  750. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
  751. package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
  752. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
  753. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
  754. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
  755. package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
  756. package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
  757. package/dist/dtos/create-ai-interaction.dto.d.ts +0 -23
  758. package/dist/dtos/create-ai-interaction.dto.d.ts.map +0 -1
  759. package/dist/dtos/create-ai-interaction.dto.js +0 -149
  760. package/dist/dtos/create-ai-interaction.dto.js.map +0 -1
  761. package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
  762. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
  763. package/dist/dtos/create-dashboard-layout.dto.js +0 -53
  764. package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
  765. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
  766. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  767. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
  768. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  769. package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
  770. package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
  771. package/dist/dtos/create-dashboard-question.dto.js +0 -105
  772. package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
  773. package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
  774. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
  775. package/dist/dtos/create-dashboard-variable.dto.js +0 -103
  776. package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
  777. package/dist/dtos/create-dashboard.dto.d.ts +0 -17
  778. package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
  779. package/dist/dtos/create-dashboard.dto.js +0 -102
  780. package/dist/dtos/create-dashboard.dto.js.map +0 -1
  781. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
  782. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
  783. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
  784. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
  785. package/dist/dtos/invoke-ai-prompt.dto.d.ts +0 -5
  786. package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +0 -1
  787. package/dist/dtos/invoke-ai-prompt.dto.js.map +0 -1
  788. package/dist/dtos/update-ai-interaction.dto.d.ts +0 -24
  789. package/dist/dtos/update-ai-interaction.dto.d.ts.map +0 -1
  790. package/dist/dtos/update-ai-interaction.dto.js +0 -150
  791. package/dist/dtos/update-ai-interaction.dto.js.map +0 -1
  792. package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
  793. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
  794. package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
  795. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
  796. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  797. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
  798. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  799. package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
  800. package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
  801. package/dist/dtos/update-dashboard-question.dto.js +0 -112
  802. package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
  803. package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
  804. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
  805. package/dist/dtos/update-dashboard-variable.dto.js +0 -101
  806. package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
  807. package/dist/dtos/update-dashboard.dto.d.ts +0 -18
  808. package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
  809. package/dist/dtos/update-dashboard.dto.js +0 -108
  810. package/dist/dtos/update-dashboard.dto.js.map +0 -1
  811. package/dist/entities/ai-interaction.entity.d.ts +0 -24
  812. package/dist/entities/ai-interaction.entity.d.ts.map +0 -1
  813. package/dist/entities/ai-interaction.entity.js +0 -116
  814. package/dist/entities/ai-interaction.entity.js.map +0 -1
  815. package/dist/entities/dashboard-layout.entity.d.ts +0 -9
  816. package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
  817. package/dist/entities/dashboard-layout.entity.js +0 -41
  818. package/dist/entities/dashboard-layout.entity.js.map +0 -1
  819. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
  820. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
  821. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
  822. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
  823. package/dist/entities/dashboard-question.entity.d.ts +0 -17
  824. package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
  825. package/dist/entities/dashboard-question.entity.js +0 -77
  826. package/dist/entities/dashboard-question.entity.js.map +0 -1
  827. package/dist/entities/dashboard-variable.entity.d.ts +0 -16
  828. package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
  829. package/dist/entities/dashboard-variable.entity.js +0 -79
  830. package/dist/entities/dashboard-variable.entity.js.map +0 -1
  831. package/dist/entities/dashboard.entity.d.ts +0 -16
  832. package/dist/entities/dashboard.entity.d.ts.map +0 -1
  833. package/dist/entities/dashboard.entity.js +0 -64
  834. package/dist/entities/dashboard.entity.js.map +0 -1
  835. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +0 -11
  836. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +0 -1
  837. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +0 -39
  838. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +0 -1
  839. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +0 -8
  840. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +0 -1
  841. package/dist/jobs/database/trigger-mcp-client-queue-options.js +0 -10
  842. package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +0 -1
  843. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +0 -27
  844. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +0 -1
  845. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +0 -245
  846. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +0 -1
  847. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +0 -11
  848. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +0 -1
  849. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js +0 -39
  850. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +0 -1
  851. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts +0 -8
  852. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +0 -1
  853. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js +0 -10
  854. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +0 -1
  855. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +0 -18
  856. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
  857. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js +0 -103
  858. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +0 -1
  859. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +0 -11
  860. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +0 -1
  861. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +0 -39
  862. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +0 -1
  863. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +0 -8
  864. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +0 -1
  865. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +0 -10
  866. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +0 -1
  867. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +0 -18
  868. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +0 -1
  869. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +0 -103
  870. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +0 -1
  871. package/dist/mappers/dashboard-mapper.d.ts +0 -6
  872. package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
  873. package/dist/mappers/dashboard-mapper.js +0 -62
  874. package/dist/mappers/dashboard-mapper.js.map +0 -1
  875. package/dist/repository/ai-interaction.repository.d.ts.map +0 -1
  876. package/dist/repository/ai-interaction.repository.js.map +0 -1
  877. package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
  878. package/dist/repository/dashboard-layout.repository.js +0 -34
  879. package/dist/repository/dashboard-layout.repository.js.map +0 -1
  880. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
  881. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
  882. package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
  883. package/dist/repository/dashboard-question.repository.d.ts +0 -12
  884. package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
  885. package/dist/repository/dashboard-question.repository.js +0 -34
  886. package/dist/repository/dashboard-question.repository.js.map +0 -1
  887. package/dist/repository/dashboard-variable.repository.d.ts +0 -12
  888. package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
  889. package/dist/repository/dashboard-variable.repository.js +0 -34
  890. package/dist/repository/dashboard-variable.repository.js.map +0 -1
  891. package/dist/repository/dashboard.repository.d.ts +0 -13
  892. package/dist/repository/dashboard.repository.d.ts.map +0 -1
  893. package/dist/repository/dashboard.repository.js +0 -104
  894. package/dist/repository/dashboard.repository.js.map +0 -1
  895. package/dist/services/ai-interaction.service.d.ts +0 -23
  896. package/dist/services/ai-interaction.service.d.ts.map +0 -1
  897. package/dist/services/ai-interaction.service.js +0 -217
  898. package/dist/services/ai-interaction.service.js.map +0 -1
  899. package/dist/services/dashboard-layout.service.d.ts +0 -20
  900. package/dist/services/dashboard-layout.service.d.ts.map +0 -1
  901. package/dist/services/dashboard-layout.service.js +0 -120
  902. package/dist/services/dashboard-layout.service.js.map +0 -1
  903. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
  904. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
  905. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
  906. package/dist/services/dashboard-question.service.d.ts +0 -23
  907. package/dist/services/dashboard-question.service.d.ts.map +0 -1
  908. package/dist/services/dashboard-question.service.js +0 -135
  909. package/dist/services/dashboard-question.service.js.map +0 -1
  910. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
  911. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
  912. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
  913. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
  914. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
  915. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
  916. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
  917. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
  918. package/dist/services/dashboard-variable.service.d.ts +0 -13
  919. package/dist/services/dashboard-variable.service.d.ts.map +0 -1
  920. package/dist/services/dashboard-variable.service.js.map +0 -1
  921. package/dist/services/dashboard.service.d.ts +0 -29
  922. package/dist/services/dashboard.service.d.ts.map +0 -1
  923. package/dist/services/dashboard.service.js +0 -171
  924. package/dist/services/dashboard.service.js.map +0 -1
  925. package/dist/services/database/database-bootstrap.service.d.ts +0 -12
  926. package/dist/services/database/database-bootstrap.service.d.ts.map +0 -1
  927. package/dist/services/database/database-bootstrap.service.js +0 -115
  928. package/dist/services/database/database-bootstrap.service.js.map +0 -1
  929. package/dist/services/genai/ingest-metadata.service.d.ts +0 -38
  930. package/dist/services/genai/ingest-metadata.service.d.ts.map +0 -1
  931. package/dist/services/genai/ingest-metadata.service.js +0 -542
  932. package/dist/services/genai/ingest-metadata.service.js.map +0 -1
  933. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +0 -9
  934. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +0 -1
  935. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +0 -39
  936. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +0 -1
  937. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
  938. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  939. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
  940. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
  941. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
  942. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  943. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
  944. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
  945. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
  946. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
  947. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
  948. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
  949. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
  950. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
  951. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
  952. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
  953. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
  954. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
  955. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
  956. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
  957. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
  958. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
  959. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
  960. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
  961. package/dist/services/genai/r2r-helper.service.d.ts +0 -9
  962. package/dist/services/genai/r2r-helper.service.d.ts.map +0 -1
  963. package/dist/services/genai/r2r-helper.service.js +0 -40
  964. package/dist/services/genai/r2r-helper.service.js.map +0 -1
  965. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
  966. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
  967. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
  968. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
  969. package/dist/services/question-data-providers/helpers.d.ts +0 -7
  970. package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
  971. package/dist/services/question-data-providers/helpers.js +0 -25
  972. package/dist/services/question-data-providers/helpers.js.map +0 -1
  973. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
  974. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
  975. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
  976. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
  977. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
  978. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
  979. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
  980. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
  981. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
  982. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
  983. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
  984. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
  985. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
  986. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
  987. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
  988. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
  989. package/dist/services/sql-expression-resolver.service.d.ts +0 -12
  990. package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
  991. package/dist/services/sql-expression-resolver.service.js +0 -121
  992. package/dist/services/sql-expression-resolver.service.js.map +0 -1
  993. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
  994. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
  995. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
  996. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
  997. package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
  998. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
  999. package/dist/subscribers/dashboard-question.subscriber.js +0 -72
  1000. package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
  1001. package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
  1002. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
  1003. package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
  1004. package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
  1005. package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
  1006. package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
  1007. package/dist/subscribers/dashboard.subscriber.js +0 -71
  1008. package/dist/subscribers/dashboard.subscriber.js.map +0 -1
  1009. package/sql/default/mariadb/proc_CleanupModelMetadata.sql +0 -153
  1010. package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +0 -56
  1011. package/sql/default/mssql/proc_CleanupModuleMetadata.sql +0 -78
  1012. package/sql/default/mysql/proc_CleanupModelMetadata.sql +0 -153
  1013. package/sql/default/mysql/proc_CleanupModuleMetadata.sql +0 -56
  1014. package/sql/default/postgres/proc_CleanupModelMetadata.sql +0 -148
  1015. package/sql/default/postgres/proc_CleanupModuleMetadata.sql +0 -50
  1016. package/sql/default/postgres/scratchpad.sql.txt +0 -12
  1017. package/src/commands/ingest.command.ts +0 -36
  1018. package/src/controllers/ai-interaction.controller.ts +0 -112
  1019. package/src/controllers/dashboard-layout.controller.ts +0 -106
  1020. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
  1021. package/src/controllers/dashboard-question.controller.ts +0 -104
  1022. package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
  1023. package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
  1024. package/src/dtos/create-ai-interaction.dto.ts +0 -89
  1025. package/src/dtos/create-dashboard-layout.dto.ts +0 -31
  1026. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
  1027. package/src/dtos/create-dashboard-question.dto.ts +0 -62
  1028. package/src/dtos/create-dashboard-variable.dto.ts +0 -60
  1029. package/src/dtos/create-dashboard.dto.ts +0 -61
  1030. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
  1031. package/src/dtos/invoke-ai-prompt.dto.ts +0 -10
  1032. package/src/dtos/update-ai-interaction.dto.ts +0 -93
  1033. package/src/dtos/update-dashboard-layout.dto.ts +0 -30
  1034. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
  1035. package/src/dtos/update-dashboard-question.dto.ts +0 -67
  1036. package/src/dtos/update-dashboard-variable.dto.ts +0 -58
  1037. package/src/dtos/update-dashboard.dto.ts +0 -65
  1038. package/src/entities/ai-interaction.entity.ts +0 -71
  1039. package/src/entities/dashboard-layout.entity.ts +0 -18
  1040. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
  1041. package/src/entities/dashboard-question.entity.ts +0 -46
  1042. package/src/entities/dashboard-variable.entity.ts +0 -44
  1043. package/src/entities/dashboard.entity.ts +0 -36
  1044. package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +0 -22
  1045. package/src/jobs/database/trigger-mcp-client-queue-options.ts +0 -9
  1046. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +0 -311
  1047. package/src/jobs/rabbitmq/trigger-mcp-client-publisher.service.ts +0 -22
  1048. package/src/jobs/rabbitmq/trigger-mcp-client-queue-options.ts +0 -9
  1049. package/src/jobs/rabbitmq/trigger-mcp-client-subscriber.service.ts +0 -104
  1050. package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +0 -23
  1051. package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +0 -9
  1052. package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +0 -98
  1053. package/src/mappers/dashboard-mapper.ts +0 -53
  1054. package/src/repository/ai-interaction.repository.ts +0 -17
  1055. package/src/repository/dashboard-layout.repository.ts +0 -17
  1056. package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
  1057. package/src/repository/dashboard-question.repository.ts +0 -17
  1058. package/src/repository/dashboard-variable.repository.ts +0 -17
  1059. package/src/repository/dashboard.repository.ts +0 -101
  1060. package/src/services/ai-interaction.service.ts +0 -239
  1061. package/src/services/dashboard-layout.service.ts +0 -111
  1062. package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
  1063. package/src/services/dashboard-question.service.ts +0 -150
  1064. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
  1065. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
  1066. package/src/services/dashboard-variable.service.ts +0 -27
  1067. package/src/services/dashboard.service.ts +0 -148
  1068. package/src/services/database/database-bootstrap.service.ts +0 -91
  1069. package/src/services/genai/ingest-metadata.service.ts +0 -798
  1070. package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +0 -33
  1071. package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
  1072. package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
  1073. package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
  1074. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
  1075. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
  1076. package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
  1077. package/src/services/genai/r2r-helper.service.ts +0 -37
  1078. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
  1079. package/src/services/question-data-providers/helpers.ts +0 -30
  1080. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
  1081. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
  1082. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
  1083. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
  1084. package/src/services/sql-expression-resolver.service.ts +0 -140
  1085. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
  1086. package/src/subscribers/dashboard-question.subscriber.ts +0 -62
  1087. package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
  1088. package/src/subscribers/dashboard.subscriber.ts +0 -62
@@ -1 +1 @@
1
- {"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BadRequestException,\n forwardRef,\n Inject,\n Injectable,\n} from \"@nestjs/common\";\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from \"@nestjs/typeorm\";\nimport { CRUDService } from \"src/services/crud.service\";\nimport { EntityManager, Repository } from \"typeorm\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nimport { OauthUserDto } from \"../dtos/oauth-user-dto\";\nimport { RoleMetadata } from \"../entities/role-metadata.entity\";\nimport { User } from \"../entities/user.entity\";\nimport { ActiveUserData } from \"../interfaces/active-user-data.interface\";\nimport { ERROR_MESSAGES } from \"src/constants/error-messages\";\nimport { UserRepository } from \"src/repository/user.repository\";\nimport { RoleMetadataRepository } from \"src/repository/role-metadata.repository\";\nimport { HashingService } from \"./hashing.service\";\n\n@Injectable()\nexport class UserService extends CRUDService<User> {\n private buildFacebookUsernameBase(name?: string): string {\n const normalized = (name || \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n return normalized || \"facebook_user\";\n }\n\n private async resolveUniqueUsername(\n preferredUsername: string,\n // fallbackUsername: string,\n ): Promise<string> {\n let candidate = preferredUsername;\n let suffix = 0;\n\n while (await this.repo.findOne({ where: { username: candidate } })) {\n suffix += 1;\n candidate = `${preferredUsername}_${suffix}`;\n }\n\n if (candidate) {\n return candidate;\n }\n\n // return fallbackUsername;\n }\n\n constructor(\n readonly hashingService: HashingService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(User, 'default')\n readonly repo: UserRepository,\n @InjectRepository(User, \"default\")\n readonly nonSecurityRuleAwareRepo: Repository<User>,\n // @InjectRepository(RoleMetadata)\n // private readonly roleRepository: Repository<RoleMetadata>,\n private readonly roleRepository: RoleMetadataRepository,\n readonly moduleRef: ModuleRef,\n ) {\n super(entityManager, repo, \"user\", \"solid-core\", moduleRef);\n }\n\n override async delete(id: number, solidRequestContext: any = {}) {\n // Prevent user from deleting themselves\n if (solidRequestContext?.activeUser?.sub === id) {\n throw new BadRequestException(ERROR_MESSAGES.DELETE_SELF_NOT_ALLOWED);\n }\n\n // ✅ Proceed with the default deletion logic\n return super.delete(id, solidRequestContext);\n }\n\n override async deleteMany(\n ids: number[],\n solidRequestContext: any = {},\n ): Promise<any> {\n if (!ids || ids.length === 0) {\n throw new Error(ERROR_MESSAGES.DELETE_IDS_REQUIRED);\n }\n\n // ❌ If the active user is trying to delete themselves\n if (\n solidRequestContext?.activeUser?.sub &&\n ids.includes(solidRequestContext.activeUser.id)\n ) {\n throw new BadRequestException(ERROR_MESSAGES.DELETE_SELF_NOT_ALLOWED);\n }\n\n return super.deleteMany(ids, solidRequestContext);\n }\n\n async findOneByEmail(email: string): Promise<User> {\n return await this.repo.findOne({\n where: {\n email: email,\n },\n relations: {},\n });\n // if (!entity) {\n // throw new NotFoundException(`user with email #${email} not found`);\n // }\n // return entity;\n }\n\n async findOneByAccessCode(accessCode: string): Promise<User> {\n return await this.repo.findOne({\n where: {\n accessCode: accessCode,\n },\n relations: {},\n });\n }\n\n async findOneByUsername(username: string): Promise<User> {\n return await this.repo.findOne({\n where: {\n username: username,\n },\n relations: {},\n });\n // if (!entity) {\n // throw new NotFoundException(`user with username ${username} not found`);\n // }\n // return entity;\n }\n\n async updateUser(id: any, updateDto, files, solidRequestContext: any = {}) {\n const user = await this.repo.findOne({\n where: { id: id },\n relations: {\n roles: true,\n },\n });\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);\n }\n if (updateDto.roles != null) {\n await this.addRolesToUser(user.username, updateDto.roles);\n }\n await this.update(id, updateDto, files, true);\n }\n\n async addRoleToUser(username: string, roleName: string): Promise<User> {\n // Find the role, find the user and populate the many 2 many table.\n const user = await this.repo.findOne({\n where: { username: username },\n relations: {\n roles: true,\n },\n });\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND_BY_USERNAME(username));\n }\n const role = await this.roleRepository.findOne({\n where: { name: roleName },\n });\n if (!role) {\n throw new Error(ERROR_MESSAGES.ROLE_NOT_FOUND(roleName));\n }\n\n if (user.roles && user.roles.length > 0) {\n user.roles.push(role);\n } else {\n user.roles = [role];\n }\n\n return await this.repo.save(user);\n }\n\n async addRolesToUser(username: string, roleNames: string[]): Promise<User> {\n const user = await this.nonSecurityRuleAwareRepo.findOne({\n where: { username: username },\n relations: { roles: true },\n });\n\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND_BY_USERNAME(username));\n }\n\n const roles = await this.roleRepository.find({\n where: roleNames.map((roleName) => ({ name: roleName })),\n });\n\n if (roles.length !== roleNames.length) {\n const foundRoleNames = roles.map((role) => role.name);\n const missingRoles = roleNames.filter(\n (roleName) => !foundRoleNames.includes(roleName),\n );\n throw new Error(ERROR_MESSAGES.ROLES_NOT_FOUND(missingRoles));\n }\n\n const currentRoles = user.roles.map((role) => role.name);\n\n const rolesToAdd = roles.filter(\n (role) => !currentRoles.includes(role.name),\n );\n\n const rolesToRemove = user.roles.filter(\n (role) => !roleNames.includes(role.name),\n );\n\n if (rolesToAdd.length > 0) {\n user.roles.push(...rolesToAdd);\n }\n\n if (rolesToRemove.length > 0) {\n user.roles = user.roles.filter((role) => !rolesToRemove.includes(role));\n }\n\n return await this.nonSecurityRuleAwareRepo.save(user);\n }\n\n async removeRoleFromUser(username: string, roleName: string): Promise<User> {\n // load the role with the respective permissions.\n const user = await this.repo.findOne({\n where: {\n username: username,\n },\n relations: {\n roles: true,\n },\n });\n\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND_BY_USERNAME(username));\n }\n\n // modify the permissions array.\n user.roles = user.roles.filter((role) => role.name !== roleName);\n\n return await this.repo.save(user);\n }\n\n // PROVIDER SPECIFIC CODE\n async resolveUserOnOauthGoogle(oauthUserDto: OauthUserDto): Promise<User> {\n const user = await this.repo.findOne({\n where: {\n email: oauthUserDto.email,\n },\n relations: {\n roles: true,\n },\n });\n\n // if we are unable to find a user then we need to create one.\n if (!user) {\n const user = new User();\n user.username = oauthUserDto.email;\n user.email = oauthUserDto.email;\n user.fullName = oauthUserDto.name;\n user.lastLoginProvider = oauthUserDto.provider;\n user.accessCode = oauthUserDto.accessCode;\n user.googleAccessToken = oauthUserDto.accessToken;\n user.googleId = oauthUserDto.providerId;\n user.googleProfilePicture = oauthUserDto.picture;\n\n const savedUser = await this.repo.save(user);\n\n // Initialize the user roles\n await this.initializeRolesForNewUser(\n [this.settingService.getConfigValue<SolidCoreSetting>(\"defaultRole\")],\n savedUser,\n );\n }\n // else we update the user and store the generated code & access token.\n else {\n const entity = await this.repo.preload({\n id: user.id,\n lastLoginProvider: oauthUserDto.provider,\n accessCode: oauthUserDto.accessCode,\n googleAccessToken: oauthUserDto.accessToken,\n googleId: oauthUserDto.providerId,\n googleProfilePicture: oauthUserDto.picture,\n });\n\n await this.repo.save(entity);\n }\n\n return user;\n }\n\n async resolveUserOnOauthFacebook(oauthUserDto: OauthUserDto): Promise<User> {\n const normalizedEmail = oauthUserDto.email?.trim().toLowerCase() || null;\n let user: User | null = null;\n\n if (oauthUserDto.providerId) {\n user = await this.repo.findOne({\n where: {\n facebookId: oauthUserDto.providerId,\n },\n relations: {\n roles: true,\n },\n });\n }\n\n if (!user) {\n const facebookProviderFallback = `facebook_${oauthUserDto.providerId}`;\n const facebookNameUsername = this.buildFacebookUsernameBase(\n oauthUserDto.name,\n );\n // let username = normalizedEmail || facebookNameUsername;\n let username = facebookNameUsername;\n\n let email = normalizedEmail;\n\n // Avoid clashing with local users that already own the same email/username.\n if (normalizedEmail) {\n const existingByEmail = await this.repo.findOne({\n where: { email: normalizedEmail },\n });\n if (existingByEmail) {\n username = facebookNameUsername;\n email = null;\n }\n }\n username = await this.resolveUniqueUsername(\n username,\n // facebookProviderFallback,\n );\n\n const newUser = new User();\n newUser.username = username;\n newUser.email = email;\n newUser.fullName = oauthUserDto.name;\n newUser.lastLoginProvider = oauthUserDto.provider;\n newUser.accessCode = oauthUserDto.accessCode;\n newUser.facebookAccessToken = oauthUserDto.accessToken;\n newUser.facebookId = oauthUserDto.providerId;\n newUser.facebookProfilePicture = oauthUserDto.picture;\n\n const savedUser = await this.repo.save(newUser);\n\n await this.initializeRolesForNewUser(\n [this.settingService.getConfigValue<SolidCoreSetting>(\"defaultRole\")],\n savedUser,\n );\n return savedUser;\n } else {\n const entity = await this.repo.preload({\n id: user.id,\n lastLoginProvider: oauthUserDto.provider,\n accessCode: oauthUserDto.accessCode,\n facebookAccessToken: oauthUserDto.accessToken,\n facebookId: oauthUserDto.providerId,\n facebookProfilePicture: oauthUserDto.picture,\n });\n await this.repo.save(entity);\n return entity;\n }\n }\n\n async resolveUserOnOauthMicrosoft(oauthUserDto: OauthUserDto): Promise<User> {\n const user = await this.repo.findOne({\n where: {\n email: oauthUserDto.email,\n },\n relations: {\n roles: true,\n },\n });\n\n if (!user) {\n const newUser = new User();\n newUser.username = oauthUserDto.email;\n newUser.email = oauthUserDto.email;\n newUser.fullName = oauthUserDto.name;\n newUser.lastLoginProvider = oauthUserDto.provider;\n newUser.accessCode = oauthUserDto.accessCode;\n newUser.microsoftAccessToken = oauthUserDto.accessToken;\n newUser.microsoftId = oauthUserDto.providerId;\n newUser.microsoftProfilePicture = oauthUserDto.picture;\n\n const savedUser = await this.repo.save(newUser);\n\n await this.initializeRolesForNewUser(\n [this.settingService.getConfigValue<SolidCoreSetting>(\"defaultRole\")],\n savedUser,\n );\n } else {\n const entity = await this.repo.preload({\n id: user.id,\n lastLoginProvider: oauthUserDto.provider,\n accessCode: oauthUserDto.accessCode,\n microsoftAccessToken: oauthUserDto.accessToken,\n microsoftId: oauthUserDto.providerId,\n microsoftProfilePicture: oauthUserDto.picture,\n });\n\n await this.repo.save(entity);\n }\n return user;\n }\n\n async findUsersByRole(\n roleName: string,\n relations: any = {},\n ): Promise<User[]> {\n return await this.repo.find({\n where: {\n roles: {\n name: roleName,\n },\n },\n relations: relations,\n });\n }\n\n async checkIfPermissionExists(query: any, activeUser: ActiveUserData) {\n const matchingPermssions = activeUser.permissions.filter((p) =>\n query.permissionNames.includes(p),\n );\n return matchingPermssions;\n }\n\n async initializeRolesForNewUser(roles: string[], user: User) {\n if (!user.id) {\n throw new BadRequestException(ERROR_MESSAGES.USER_MISSING_ID);\n }\n let userRoles = [];\n // Default Internal user role assigned\n userRoles.push(\"Internal User\");\n if (roles) {\n userRoles = [...userRoles, ...roles];\n }\n userRoles = Array.from(new Set([...userRoles]));\n if (userRoles.length > 0) {\n await this.addRolesToUser(user.username, userRoles);\n }\n }\n\n async hashPassword(password: string): Promise<{\n password: string;\n passwordScheme: string;\n passwordSchemeVersion: number;\n }> {\n const hashedPassword = await this.hashingService.hash(password);\n\n return {\n password: hashedPassword,\n passwordScheme: this.hashingService.name(),\n passwordSchemeVersion: this.hashingService.currentVersion(),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BadRequestException,\n forwardRef,\n Inject,\n Injectable,\n} from \"@nestjs/common\";\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from \"@nestjs/typeorm\";\nimport { CRUDService } from \"src/services/crud.service\";\nimport { EntityManager, Repository } from \"typeorm\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\nimport { OauthUserDto } from \"../dtos/oauth-user-dto\";\nimport { RoleMetadata } from \"../entities/role-metadata.entity\";\nimport { User } from \"../entities/user.entity\";\nimport { ActiveUserData } from \"../interfaces/active-user-data.interface\";\nimport { ERROR_MESSAGES } from \"src/constants/error-messages\";\nimport { UserRepository } from \"src/repository/user.repository\";\nimport { RoleMetadataRepository } from \"src/repository/role-metadata.repository\";\nimport { HashingService } from \"./hashing.service\";\n\n@Injectable()\nexport class UserService extends CRUDService<User> {\n private buildFacebookUsernameBase(name?: string): string {\n const normalized = (name || \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n return normalized || \"facebook_user\";\n }\n\n private buildMicrosoftActiveDirectoryUsernameBase(\n email?: string,\n providerId?: string,\n name?: string,\n ): string {\n const source =\n email ||\n name ||\n (providerId ? `microsoft_active_directory_${providerId}` : \"\");\n const normalized = source\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9@._-]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n return normalized || \"microsoft_active_directory_user\";\n }\n\n private async resolveUniqueUsername(\n preferredUsername: string,\n // fallbackUsername: string,\n ): Promise<string> {\n let candidate = preferredUsername;\n let suffix = 0;\n\n while (await this.repo.findOne({ where: { username: candidate } })) {\n suffix += 1;\n candidate = `${preferredUsername}_${suffix}`;\n }\n\n if (candidate) {\n return candidate;\n }\n\n // return fallbackUsername;\n }\n\n constructor(\n readonly hashingService: HashingService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(User, 'default')\n readonly repo: UserRepository,\n @InjectRepository(User, \"default\")\n readonly nonSecurityRuleAwareRepo: Repository<User>,\n // @InjectRepository(RoleMetadata)\n // private readonly roleRepository: Repository<RoleMetadata>,\n private readonly roleRepository: RoleMetadataRepository,\n readonly moduleRef: ModuleRef,\n ) {\n super(entityManager, repo, \"user\", \"solid-core\", moduleRef);\n }\n\n override async delete(id: number, solidRequestContext: any = {}) {\n // Prevent user from deleting themselves\n if (solidRequestContext?.activeUser?.sub === id) {\n throw new BadRequestException(ERROR_MESSAGES.DELETE_SELF_NOT_ALLOWED);\n }\n\n // ✅ Proceed with the default deletion logic\n return super.delete(id, solidRequestContext);\n }\n\n override async deleteMany(\n ids: number[],\n solidRequestContext: any = {},\n ): Promise<any> {\n if (!ids || ids.length === 0) {\n throw new Error(ERROR_MESSAGES.DELETE_IDS_REQUIRED);\n }\n\n // ❌ If the active user is trying to delete themselves\n if (\n solidRequestContext?.activeUser?.sub &&\n ids.includes(solidRequestContext.activeUser.id)\n ) {\n throw new BadRequestException(ERROR_MESSAGES.DELETE_SELF_NOT_ALLOWED);\n }\n\n return super.deleteMany(ids, solidRequestContext);\n }\n\n async findOneByEmail(email: string): Promise<User> {\n return await this.repo.findOne({\n where: {\n email: email,\n },\n relations: {},\n });\n // if (!entity) {\n // throw new NotFoundException(`user with email #${email} not found`);\n // }\n // return entity;\n }\n\n async findOneByAccessCode(accessCode: string): Promise<User> {\n return await this.repo.findOne({\n where: {\n accessCode: accessCode,\n },\n relations: {},\n });\n }\n\n async findOneByUsername(username: string): Promise<User> {\n return await this.repo.findOne({\n where: {\n username: username,\n },\n relations: {},\n });\n // if (!entity) {\n // throw new NotFoundException(`user with username ${username} not found`);\n // }\n // return entity;\n }\n\n async updateUser(id: any, updateDto, files, solidRequestContext: any = {}) {\n const user = await this.repo.findOne({\n where: { id: id },\n relations: {\n roles: true,\n },\n });\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);\n }\n if (updateDto.roles != null) {\n await this.addRolesToUser(user.username, updateDto.roles);\n }\n await this.update(id, updateDto, files, true);\n }\n\n async addRoleToUser(username: string, roleName: string): Promise<User> {\n // Find the role, find the user and populate the many 2 many table.\n const user = await this.repo.findOne({\n where: { username: username },\n relations: {\n roles: true,\n },\n });\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND_BY_USERNAME(username));\n }\n const role = await this.roleRepository.findOne({\n where: { name: roleName },\n });\n if (!role) {\n throw new Error(ERROR_MESSAGES.ROLE_NOT_FOUND(roleName));\n }\n\n if (user.roles && user.roles.length > 0) {\n user.roles.push(role);\n } else {\n user.roles = [role];\n }\n\n return await this.repo.save(user);\n }\n\n async addRolesToUser(username: string, roleNames: string[]): Promise<User> {\n const user = await this.nonSecurityRuleAwareRepo.findOne({\n where: { username: username },\n relations: { roles: true },\n });\n\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND_BY_USERNAME(username));\n }\n\n const roles = await this.roleRepository.find({\n where: roleNames.map((roleName) => ({ name: roleName })),\n });\n\n if (roles.length !== roleNames.length) {\n const foundRoleNames = roles.map((role) => role.name);\n const missingRoles = roleNames.filter(\n (roleName) => !foundRoleNames.includes(roleName),\n );\n throw new Error(ERROR_MESSAGES.ROLES_NOT_FOUND(missingRoles));\n }\n\n const currentRoles = user.roles.map((role) => role.name);\n\n const rolesToAdd = roles.filter(\n (role) => !currentRoles.includes(role.name),\n );\n\n const rolesToRemove = user.roles.filter(\n (role) => !roleNames.includes(role.name),\n );\n\n if (rolesToAdd.length > 0) {\n user.roles.push(...rolesToAdd);\n }\n\n if (rolesToRemove.length > 0) {\n user.roles = user.roles.filter((role) => !rolesToRemove.includes(role));\n }\n\n return await this.nonSecurityRuleAwareRepo.save(user);\n }\n\n async removeRoleFromUser(username: string, roleName: string): Promise<User> {\n // load the role with the respective permissions.\n const user = await this.repo.findOne({\n where: {\n username: username,\n },\n relations: {\n roles: true,\n },\n });\n\n if (!user) {\n throw new Error(ERROR_MESSAGES.USER_NOT_FOUND_BY_USERNAME(username));\n }\n\n // modify the permissions array.\n user.roles = user.roles.filter((role) => role.name !== roleName);\n\n return await this.repo.save(user);\n }\n\n // PROVIDER SPECIFIC CODE\n async resolveUserOnOauthGoogle(oauthUserDto: OauthUserDto): Promise<User> {\n const user = await this.repo.findOne({\n where: {\n email: oauthUserDto.email,\n },\n relations: {\n roles: true,\n },\n });\n\n // if we are unable to find a user then we need to create one.\n if (!user) {\n const user = new User();\n user.username = oauthUserDto.email;\n user.email = oauthUserDto.email;\n user.fullName = oauthUserDto.name;\n user.lastLoginProvider = oauthUserDto.provider;\n user.accessCode = oauthUserDto.accessCode;\n user.googleAccessToken = oauthUserDto.accessToken;\n user.googleId = oauthUserDto.providerId;\n user.googleProfilePicture = oauthUserDto.picture;\n\n const savedUser = await this.repo.save(user);\n\n // Initialize the user roles\n await this.initializeRolesForNewUser(\n [this.settingService.getConfigValue<SolidCoreSetting>(\"defaultRole\")],\n savedUser,\n );\n }\n // else we update the user and store the generated code & access token.\n else {\n const entity = await this.repo.preload({\n id: user.id,\n lastLoginProvider: oauthUserDto.provider,\n accessCode: oauthUserDto.accessCode,\n googleAccessToken: oauthUserDto.accessToken,\n googleId: oauthUserDto.providerId,\n googleProfilePicture: oauthUserDto.picture,\n });\n\n await this.repo.save(entity);\n }\n\n return user;\n }\n\n async resolveUserOnOauthFacebook(oauthUserDto: OauthUserDto): Promise<User> {\n const normalizedEmail = oauthUserDto.email?.trim().toLowerCase();\n let user: User | null = null;\n\n if (oauthUserDto.providerId) {\n user = await this.repo.findOne({\n where: {\n facebookId: oauthUserDto.providerId,\n },\n relations: {\n roles: true,\n },\n });\n }\n\n if (!user) {\n const facebookProviderFallback = `facebook_${oauthUserDto.providerId}`;\n const facebookNameUsername = this.buildFacebookUsernameBase(\n oauthUserDto.name,\n );\n // let username = normalizedEmail || facebookNameUsername;\n let username = facebookNameUsername;\n\n let email = normalizedEmail;\n\n // Avoid clashing with local users that already own the same email/username.\n if (normalizedEmail) {\n const existingByEmail = await this.repo.findOne({\n where: { email: normalizedEmail },\n });\n if (existingByEmail) {\n username = facebookNameUsername;\n email = null;\n }\n }\n username = await this.resolveUniqueUsername(\n username,\n // facebookProviderFallback,\n );\n\n const newUser = new User();\n newUser.username = username;\n newUser.email = email;\n newUser.fullName = oauthUserDto.name;\n newUser.lastLoginProvider = oauthUserDto.provider;\n newUser.accessCode = oauthUserDto.accessCode;\n newUser.facebookAccessToken = oauthUserDto.accessToken;\n newUser.facebookId = oauthUserDto.providerId;\n newUser.facebookProfilePicture = oauthUserDto.picture;\n\n const savedUser = await this.repo.save(newUser);\n\n await this.initializeRolesForNewUser(\n [this.settingService.getConfigValue<SolidCoreSetting>(\"defaultRole\")],\n savedUser,\n );\n return savedUser;\n } else {\n const entity = await this.repo.preload({\n id: user.id,\n lastLoginProvider: oauthUserDto.provider,\n accessCode: oauthUserDto.accessCode,\n facebookAccessToken: oauthUserDto.accessToken,\n facebookId: oauthUserDto.providerId,\n facebookProfilePicture: oauthUserDto.picture,\n });\n await this.repo.save(entity);\n return entity;\n }\n }\n\n async resolveUserOnOauthMicrosoft(oauthUserDto: OauthUserDto): Promise<User> {\n const user = await this.repo.findOne({\n where: {\n email: oauthUserDto.email,\n },\n relations: {\n roles: true,\n },\n });\n\n if (!user) {\n const newUser = new User();\n newUser.username = oauthUserDto.email;\n newUser.email = oauthUserDto.email;\n newUser.fullName = oauthUserDto.name;\n newUser.lastLoginProvider = oauthUserDto.provider;\n newUser.accessCode = oauthUserDto.accessCode;\n newUser.microsoftAccessToken = oauthUserDto.accessToken;\n newUser.microsoftId = oauthUserDto.providerId;\n newUser.microsoftProfilePicture = oauthUserDto.picture;\n\n const savedUser = await this.repo.save(newUser);\n\n await this.initializeRolesForNewUser(\n [this.settingService.getConfigValue<SolidCoreSetting>(\"defaultRole\")],\n savedUser,\n );\n } else {\n const entity = await this.repo.preload({\n id: user.id,\n lastLoginProvider: oauthUserDto.provider,\n accessCode: oauthUserDto.accessCode,\n microsoftAccessToken: oauthUserDto.accessToken,\n microsoftId: oauthUserDto.providerId,\n microsoftProfilePicture: oauthUserDto.picture,\n });\n\n await this.repo.save(entity);\n }\n return user;\n }\n\n async resolveUserOnOauthMicrosoftActiveDirectory(\n oauthUserDto: OauthUserDto,\n ): Promise<User> {\n const user = await this.repo.findOne({\n where: {\n email: oauthUserDto.email,\n },\n relations: {\n roles: true,\n },\n });\n\n if (!user) {\n const newUser = new User();\n newUser.username = oauthUserDto.email;\n newUser.email = oauthUserDto.email;\n newUser.fullName = oauthUserDto.name;\n newUser.lastLoginProvider = oauthUserDto.provider;\n newUser.accessCode = oauthUserDto.accessCode;\n newUser.microsoftActiveDirectoryAccessToken = oauthUserDto.accessToken;\n newUser.microsoftActiveDirectoryId = oauthUserDto.providerId;\n newUser.microsoftActiveDirectoryProfilePicture = oauthUserDto.picture;\n\n const savedUser = await this.repo.save(newUser);\n\n await this.initializeRolesForNewUser(\n [this.settingService.getConfigValue<SolidCoreSetting>(\"defaultRole\")],\n savedUser,\n );\n } else {\n const entity = await this.repo.preload({\n id: user.id,\n lastLoginProvider: oauthUserDto.provider,\n accessCode: oauthUserDto.accessCode,\n microsoftActiveDirectoryAccessToken: oauthUserDto.accessToken,\n microsoftActiveDirectoryId: oauthUserDto.providerId,\n microsoftActiveDirectoryProfilePicture: oauthUserDto.picture,\n });\n\n await this.repo.save(entity);\n }\n return user;\n }\n\n async findUsersByRole(\n roleName: string,\n relations: any = {},\n ): Promise<User[]> {\n return await this.repo.find({\n where: {\n roles: {\n name: roleName,\n },\n },\n relations: relations,\n });\n }\n\n async checkIfPermissionExists(query: any, activeUser: ActiveUserData) {\n const matchingPermssions = activeUser.permissions.filter((p) =>\n query.permissionNames.includes(p),\n );\n return matchingPermssions;\n }\n\n async initializeRolesForNewUser(roles: string[], user: User) {\n if (!user.id) {\n throw new BadRequestException(ERROR_MESSAGES.USER_MISSING_ID);\n }\n let userRoles = [];\n // Default Internal user role assigned\n userRoles.push(\"Internal User\");\n if (roles) {\n userRoles = [...userRoles, ...roles];\n }\n userRoles = Array.from(new Set([...userRoles]));\n if (userRoles.length > 0) {\n await this.addRolesToUser(user.username, userRoles);\n }\n }\n\n async hashPassword(password: string): Promise<{\n password: string;\n passwordScheme: string;\n passwordSchemeVersion: number;\n }> {\n const hashedPassword = await this.hashingService.hash(password);\n\n return {\n password: hashedPassword,\n passwordScheme: this.hashingService.name(),\n passwordSchemeVersion: this.hashingService.currentVersion(),\n };\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { HttpService } from "@nestjs/axios";
2
+ import { IWhatsAppTransport } from "../../interfaces";
3
+ export declare class GupshupOtpWhatsappService implements IWhatsAppTransport {
4
+ private readonly httpService;
5
+ private readonly logger;
6
+ constructor(httpService: HttpService);
7
+ sendWhatsAppMessage(to: string, templateId: string, parameters: any, parentEntity?: any, parentEntityId?: any): Promise<any>;
8
+ private sendTextMessage;
9
+ sendOtpTemplate(destination: string, templateId: string, bodyParams: string[]): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=GupshupOtpWhatsappService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GupshupOtpWhatsappService.d.ts","sourceRoot":"","sources":["../../../src/services/whatsapp/GupshupOtpWhatsappService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,qBAEa,yBAA0B,YAAW,kBAAkB;IAGtD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8C;gBAExC,WAAW,EAAE,WAAW;IAE/C,mBAAmB,CACvB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,EACf,YAAY,CAAC,EAAE,GAAG,EAClB,cAAc,CAAC,EAAE,GAAG,GACnB,OAAO,CAAC,GAAG,CAAC;YAmCD,eAAe;IAwCvB,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC;CA2EjB"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var GupshupOtpWhatsappService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.GupshupOtpWhatsappService = void 0;
14
+ const axios_1 = require("@nestjs/axios");
15
+ const common_1 = require("@nestjs/common");
16
+ const whatsapp_provider_decorator_1 = require("../../decorators/whatsapp-provider.decorator");
17
+ let GupshupOtpWhatsappService = GupshupOtpWhatsappService_1 = class GupshupOtpWhatsappService {
18
+ constructor(httpService) {
19
+ this.httpService = httpService;
20
+ this.logger = new common_1.Logger(GupshupOtpWhatsappService_1.name);
21
+ }
22
+ async sendWhatsAppMessage(to, templateId, parameters, parentEntity, parentEntityId) {
23
+ if (!to) {
24
+ throw new Error("WhatsApp destination number is required");
25
+ }
26
+ const payload = parameters?.payload;
27
+ if (payload?.message?.type === "text" && payload?.message?.text) {
28
+ await this.sendTextMessage(payload.destination || to, payload.message.text, payload.source, payload["src.name"]);
29
+ return { to, templateId, parameters, parentEntity, parentEntityId };
30
+ }
31
+ if (parameters?.type === "text" && parameters?.text) {
32
+ await this.sendTextMessage(to, parameters.text);
33
+ return { to, templateId, parameters, parentEntity, parentEntityId };
34
+ }
35
+ if (!templateId) {
36
+ throw new Error("WhatsApp templateId is required for template message");
37
+ }
38
+ const bodyParams = Array.isArray(parameters)
39
+ ? parameters
40
+ : Array.isArray(parameters?.body)
41
+ ? parameters.body
42
+ : [];
43
+ await this.sendOtpTemplate(to, templateId, bodyParams.map((x) => String(x)));
44
+ return { to, templateId, parameters, parentEntity, parentEntityId };
45
+ }
46
+ async sendTextMessage(destination, text, sourceOverride, appNameOverride) {
47
+ const apiKey = process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||
48
+ process.env.GUPSHUP_API_KEY;
49
+ const msgUrl = process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||
50
+ process.env.GUPSHUP_API_URL ||
51
+ "https://api.gupshup.io/wa/api/v1/msg";
52
+ const source = sourceOverride ||
53
+ process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||
54
+ process.env.GUPSHUP_SOURCE_NUMBER;
55
+ const appName = appNameOverride || process.env.COMMON_GUPSHUP_APP_NAME || "solidx";
56
+ if (!apiKey || !msgUrl || !source) {
57
+ throw new Error("Missing Gupshup WhatsApp configuration for text message");
58
+ }
59
+ const rawDestination = destination.replace(/\D/g, "");
60
+ const params = new URLSearchParams();
61
+ params.append("channel", "whatsapp");
62
+ params.append("source", source);
63
+ params.append("destination", rawDestination);
64
+ params.append("src.name", appName);
65
+ params.append("message", JSON.stringify({ type: "text", text }));
66
+ await this.httpService.axiosRef.post(msgUrl, params.toString(), {
67
+ headers: {
68
+ apikey: apiKey,
69
+ "Content-Type": "application/x-www-form-urlencoded",
70
+ },
71
+ });
72
+ }
73
+ async sendOtpTemplate(destination, templateId, bodyParams) {
74
+ const apiKey = process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||
75
+ process.env.GUPSHUP_API_KEY;
76
+ const baseUrl = process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||
77
+ process.env.GUPSHUP_API_URL ||
78
+ "https://api.gupshup.io/wa/api/v1/msg";
79
+ const templateUrl = process.env.COMMON_GUPSHUP_WHATSAPP_TEMPLATE_API_URL ||
80
+ baseUrl.replace(/\/msg$/, "/template/msg");
81
+ const source = process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||
82
+ process.env.GUPSHUP_SOURCE_NUMBER;
83
+ const appName = process.env.COMMON_GUPSHUP_APP_NAME || "solidx";
84
+ if (!apiKey || !templateUrl || !source) {
85
+ throw new Error("Missing Gupshup OTP WhatsApp configuration");
86
+ }
87
+ if (!destination || !String(destination).trim()) {
88
+ throw new Error("WhatsApp destination is empty");
89
+ }
90
+ try {
91
+ const rawDestination = destination.replace(/\D/g, "");
92
+ const params = new URLSearchParams();
93
+ params.append("channel", "whatsapp");
94
+ params.append("source", source);
95
+ params.append("destination", rawDestination);
96
+ params.append("to", rawDestination.startsWith("+")
97
+ ? rawDestination
98
+ : `+${rawDestination}`);
99
+ params.append("src.name", appName);
100
+ params.append("template", JSON.stringify({
101
+ id: templateId,
102
+ params: bodyParams,
103
+ }));
104
+ this.logger.debug(`Gupshup OTP outbound (template): endpoint=${templateUrl}, source=${source}, destination=${rawDestination}, to=${rawDestination.startsWith("+") ? rawDestination : `+${rawDestination}`}, templateId=${templateId}, params=${JSON.stringify(bodyParams)}`);
105
+ const response = await this.httpService.axiosRef.post(templateUrl, params.toString(), {
106
+ headers: {
107
+ apikey: apiKey,
108
+ "Content-Type": "application/x-www-form-urlencoded",
109
+ },
110
+ });
111
+ this.logger.debug(`Gupshup response: ${response.status}, data=${JSON.stringify(response.data)}`);
112
+ this.logger.debug(`Independent OTP WhatsApp sent to ${rawDestination} template=${templateId} via template endpoint`);
113
+ }
114
+ catch (error) {
115
+ const axiosError = error;
116
+ this.logger.error(`Independent OTP WhatsApp failed: destination=${destination}, templateId=${templateId}, status=${axiosError.response?.status ?? "unknown"}, response=${typeof axiosError.response?.data === "object" ? JSON.stringify(axiosError.response?.data) : axiosError.response?.data}, url=${templateUrl}`);
117
+ throw error;
118
+ }
119
+ }
120
+ };
121
+ exports.GupshupOtpWhatsappService = GupshupOtpWhatsappService;
122
+ exports.GupshupOtpWhatsappService = GupshupOtpWhatsappService = GupshupOtpWhatsappService_1 = __decorate([
123
+ (0, common_1.Injectable)(),
124
+ (0, whatsapp_provider_decorator_1.WhatsAppProvider)(),
125
+ __metadata("design:paramtypes", [axios_1.HttpService])
126
+ ], GupshupOtpWhatsappService);
127
+ //# sourceMappingURL=GupshupOtpWhatsappService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GupshupOtpWhatsappService.js","sourceRoot":"","sources":["../../../src/services/whatsapp/GupshupOtpWhatsappService.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpService } from \"@nestjs/axios\";\nimport { Injectable, Logger } from \"@nestjs/common\";\nimport { AxiosError } from \"axios\";\nimport { WhatsAppProvider } from \"src/decorators/whatsapp-provider.decorator\";\nimport { IWhatsAppTransport } from \"src/interfaces\";\n\n@Injectable()\n@WhatsAppProvider()\nexport class GupshupOtpWhatsappService implements IWhatsAppTransport {\n private readonly logger = new Logger(GupshupOtpWhatsappService.name);\n\n constructor(private readonly httpService: HttpService) {}\n\n async sendWhatsAppMessage(\n to: string,\n templateId: string,\n parameters: any,\n parentEntity?: any,\n parentEntityId?: any,\n ): Promise<any> {\n if (!to) {\n throw new Error(\"WhatsApp destination number is required\");\n }\n\n const payload = parameters?.payload;\n if (payload?.message?.type === \"text\" && payload?.message?.text) {\n await this.sendTextMessage(\n payload.destination || to,\n payload.message.text,\n payload.source,\n payload[\"src.name\"],\n );\n return { to, templateId, parameters, parentEntity, parentEntityId };\n }\n\n if (parameters?.type === \"text\" && parameters?.text) {\n await this.sendTextMessage(to, parameters.text);\n return { to, templateId, parameters, parentEntity, parentEntityId };\n }\n\n if (!templateId) {\n throw new Error(\"WhatsApp templateId is required for template message\");\n }\n\n const bodyParams = Array.isArray(parameters)\n ? parameters\n : Array.isArray(parameters?.body)\n ? parameters.body\n : [];\n\n await this.sendOtpTemplate(to, templateId, bodyParams.map((x) => String(x)));\n return { to, templateId, parameters, parentEntity, parentEntityId };\n }\n\n private async sendTextMessage(\n destination: string,\n text: string,\n sourceOverride?: string,\n appNameOverride?: string,\n ): Promise<void> {\n const apiKey =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||\n process.env.GUPSHUP_API_KEY;\n const msgUrl =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||\n process.env.GUPSHUP_API_URL ||\n \"https://api.gupshup.io/wa/api/v1/msg\";\n const source =\n sourceOverride ||\n process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||\n process.env.GUPSHUP_SOURCE_NUMBER;\n const appName =\n appNameOverride || process.env.COMMON_GUPSHUP_APP_NAME || \"solidx\";\n\n if (!apiKey || !msgUrl || !source) {\n throw new Error(\"Missing Gupshup WhatsApp configuration for text message\");\n }\n\n const rawDestination = destination.replace(/\\D/g, \"\");\n const params = new URLSearchParams();\n params.append(\"channel\", \"whatsapp\");\n params.append(\"source\", source);\n params.append(\"destination\", rawDestination);\n params.append(\"src.name\", appName);\n params.append(\"message\", JSON.stringify({ type: \"text\", text }));\n\n await this.httpService.axiosRef.post(msgUrl, params.toString(), {\n headers: {\n apikey: apiKey,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n });\n }\n\n async sendOtpTemplate(\n destination: string,\n templateId: string,\n bodyParams: string[],\n ): Promise<void> {\n const apiKey =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||\n process.env.GUPSHUP_API_KEY;\n const baseUrl =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||\n process.env.GUPSHUP_API_URL ||\n \"https://api.gupshup.io/wa/api/v1/msg\";\n const templateUrl =\n process.env.COMMON_GUPSHUP_WHATSAPP_TEMPLATE_API_URL ||\n baseUrl.replace(/\\/msg$/, \"/template/msg\");\n const source =\n process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||\n process.env.GUPSHUP_SOURCE_NUMBER;\n const appName = process.env.COMMON_GUPSHUP_APP_NAME || \"solidx\";\n\n if (!apiKey || !templateUrl || !source) {\n throw new Error(\"Missing Gupshup OTP WhatsApp configuration\");\n }\n\n if (!destination || !String(destination).trim()) {\n throw new Error(\"WhatsApp destination is empty\");\n }\n\n try {\n const rawDestination = destination.replace(/\\D/g, \"\");\n const params = new URLSearchParams();\n params.append(\"channel\", \"whatsapp\");\n params.append(\"source\", source);\n params.append(\"destination\", rawDestination);\n params.append(\n \"to\",\n rawDestination.startsWith(\"+\")\n ? rawDestination\n : `+${rawDestination}`,\n );\n params.append(\"src.name\", appName);\n params.append(\n \"template\",\n JSON.stringify({\n id: templateId,\n params: bodyParams,\n }),\n );\n\n this.logger.debug(\n `Gupshup OTP outbound (template): endpoint=${templateUrl}, source=${source}, destination=${rawDestination}, to=${rawDestination.startsWith(\"+\") ? rawDestination : `+${rawDestination}`}, templateId=${templateId}, params=${JSON.stringify(bodyParams)}`,\n );\n\n const response = await this.httpService.axiosRef.post(\n templateUrl,\n params.toString(),\n {\n headers: {\n apikey: apiKey,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n },\n );\n\n this.logger.debug(\n `Gupshup response: ${response.status}, data=${JSON.stringify(response.data)}`,\n );\n\n this.logger.debug(\n `Independent OTP WhatsApp sent to ${rawDestination} template=${templateId} via template endpoint`,\n );\n } catch (error) {\n const axiosError = error as AxiosError;\n this.logger.error(\n `Independent OTP WhatsApp failed: destination=${destination}, templateId=${templateId}, status=${axiosError.response?.status ?? \"unknown\"}, response=${typeof axiosError.response?.data === \"object\" ? JSON.stringify(axiosError.response?.data) : axiosError.response?.data}, url=${templateUrl}`,\n );\n throw error;\n }\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { HttpService } from "@nestjs/axios";
2
+ import { Logger } from "@nestjs/common";
3
+ import { IWhatsAppTransport } from "../../interfaces";
4
+ import { QueueMessage } from "../../interfaces/mq";
5
+ import { SettingService } from "../../services/setting.service";
6
+ export declare class MetaCloudWhatsappService implements IWhatsAppTransport {
7
+ private readonly httpService;
8
+ private readonly settingService;
9
+ readonly logger: Logger;
10
+ constructor(httpService: HttpService, settingService: SettingService);
11
+ sendWhatsAppMessage(to: string, templateId: string, parameters: any, parentEntity?: any, parentEntityId?: any): Promise<any>;
12
+ sendWhatsAppMessageSynchronously(message: QueueMessage<any>): Promise<void>;
13
+ private createWhatsappRequest;
14
+ private normalizeWrappedPayload;
15
+ private normalizePhone;
16
+ }
17
+ //# sourceMappingURL=MetaCloudWhatsappService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaCloudWhatsappService.d.ts","sourceRoot":"","sources":["../../../src/services/whatsapp/MetaCloudWhatsappService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAmB9D,qBAEa,wBAAyB,YAAW,kBAAkB;IAI/D,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,QAAQ,CAAC,MAAM,SAA6C;gBAGzC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc;IAG3C,mBAAmB,CACvB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,EACf,YAAY,CAAC,EAAE,GAAG,EAClB,cAAc,CAAC,EAAE,GAAG,GACnB,OAAO,CAAC,GAAG,CAAC;IAeT,gCAAgC,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CjF,OAAO,CAAC,qBAAqB;IAmF7B,OAAO,CAAC,uBAAuB;IA8D/B,OAAO,CAAC,cAAc;CAOvB"}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var MetaCloudWhatsappService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.MetaCloudWhatsappService = void 0;
14
+ const axios_1 = require("@nestjs/axios");
15
+ const common_1 = require("@nestjs/common");
16
+ const whatsapp_provider_decorator_1 = require("../../decorators/whatsapp-provider.decorator");
17
+ const setting_service_1 = require("../setting.service");
18
+ let MetaCloudWhatsappService = MetaCloudWhatsappService_1 = class MetaCloudWhatsappService {
19
+ constructor(httpService, settingService) {
20
+ this.httpService = httpService;
21
+ this.settingService = settingService;
22
+ this.logger = new common_1.Logger(MetaCloudWhatsappService_1.name);
23
+ }
24
+ async sendWhatsAppMessage(to, templateId, parameters, parentEntity, parentEntityId) {
25
+ const message = {
26
+ payload: {
27
+ to,
28
+ templateId,
29
+ ...parameters,
30
+ },
31
+ parentEntity,
32
+ parentEntityId,
33
+ };
34
+ await this.sendWhatsAppMessageSynchronously(message);
35
+ return message;
36
+ }
37
+ async sendWhatsAppMessageSynchronously(message) {
38
+ const phoneNumberId = this.settingService.getConfigValue("metaWhatsappPhoneNumberId");
39
+ const apiVersion = this.settingService.getConfigValue("metaWhatsappApiVersion");
40
+ const apiBaseUrl = this.settingService.getConfigValue("metaWhatsappApiUrl");
41
+ const accessToken = this.settingService.getConfigValue("metaWhatsappAccessToken");
42
+ if (!phoneNumberId || !apiVersion || !apiBaseUrl || !accessToken) {
43
+ throw new Error("Missing Meta WhatsApp configuration. Set metaWhatsappApiUrl, metaWhatsappApiVersion, metaWhatsappPhoneNumberId, metaWhatsappAccessToken.");
44
+ }
45
+ const requestBody = this.createWhatsappRequest(message);
46
+ const url = `${String(apiBaseUrl).replace(/\/$/, "")}/${apiVersion}/${phoneNumberId}/messages`;
47
+ try {
48
+ await this.httpService.axiosRef.post(url, requestBody, {
49
+ headers: {
50
+ Authorization: `Bearer ${accessToken}`,
51
+ "Content-Type": "application/json",
52
+ },
53
+ });
54
+ this.logger.debug(`Sent Meta WhatsApp message to ${message.payload?.to} with type ${requestBody.type}`);
55
+ }
56
+ catch (error) {
57
+ const axiosError = error;
58
+ const status = axiosError.response?.status;
59
+ const data = axiosError.response?.data;
60
+ this.logger.error(`Meta WhatsApp send failed: status=${status ?? "unknown"}, url=${url}, response=${typeof data === "object" ? JSON.stringify(data) : data}`);
61
+ throw error;
62
+ }
63
+ }
64
+ createWhatsappRequest(message) {
65
+ const payload = message?.payload ?? {};
66
+ if (payload?.payload) {
67
+ const normalizedFromWrappedPayload = this.normalizeWrappedPayload(payload.payload);
68
+ if (normalizedFromWrappedPayload) {
69
+ return normalizedFromWrappedPayload;
70
+ }
71
+ return payload.payload;
72
+ }
73
+ const to = this.normalizePhone(payload.to);
74
+ const templatePayload = payload;
75
+ const textPayload = payload;
76
+ if (textPayload.type === "text" || textPayload.text) {
77
+ return {
78
+ messaging_product: "whatsapp",
79
+ recipient_type: "individual",
80
+ to,
81
+ type: "text",
82
+ text: {
83
+ body: textPayload.text ?? "",
84
+ preview_url: Boolean(textPayload.previewUrl),
85
+ },
86
+ };
87
+ }
88
+ const templateName = payload.templateId || templatePayload.templateId || templatePayload.templateName;
89
+ if (!templateName) {
90
+ throw new Error("Meta WhatsApp template name is missing. Provide templateId or parameters.templateName.");
91
+ }
92
+ const components = [];
93
+ if (templatePayload.headerText) {
94
+ components.push({
95
+ type: "header",
96
+ parameters: [
97
+ {
98
+ type: "text",
99
+ text: templatePayload.headerText,
100
+ },
101
+ ],
102
+ });
103
+ }
104
+ else if (templatePayload.imageLink) {
105
+ components.push({
106
+ type: "header",
107
+ parameters: [
108
+ {
109
+ type: "image",
110
+ image: { link: templatePayload.imageLink },
111
+ },
112
+ ],
113
+ });
114
+ }
115
+ if (Array.isArray(templatePayload.body) && templatePayload.body.length > 0) {
116
+ components.push({
117
+ type: "body",
118
+ parameters: templatePayload.body.map((entry) => ({
119
+ type: "text",
120
+ text: String(entry),
121
+ })),
122
+ });
123
+ }
124
+ return {
125
+ messaging_product: "whatsapp",
126
+ recipient_type: "individual",
127
+ to,
128
+ type: "template",
129
+ template: {
130
+ name: templateName,
131
+ language: {
132
+ code: templatePayload.languageCode || "en",
133
+ },
134
+ ...(components.length > 0 ? { components } : {}),
135
+ },
136
+ };
137
+ }
138
+ normalizeWrappedPayload(payload) {
139
+ if (!payload || typeof payload !== "object") {
140
+ return null;
141
+ }
142
+ if (payload.messaging_product && payload.to && payload.type) {
143
+ return payload;
144
+ }
145
+ const destination = payload.destination || payload.to;
146
+ const message = payload.message || {};
147
+ if (!destination || !message.type) {
148
+ return null;
149
+ }
150
+ if (message.type === "text" && message.text) {
151
+ return {
152
+ messaging_product: "whatsapp",
153
+ recipient_type: "individual",
154
+ to: this.normalizePhone(destination),
155
+ type: "text",
156
+ text: {
157
+ body: String(message.text),
158
+ preview_url: false,
159
+ },
160
+ };
161
+ }
162
+ if (message.type === "template" && message.template?.id) {
163
+ const params = Array.isArray(message.template?.params)
164
+ ? message.template.params
165
+ : [];
166
+ return {
167
+ messaging_product: "whatsapp",
168
+ recipient_type: "individual",
169
+ to: this.normalizePhone(destination),
170
+ type: "template",
171
+ template: {
172
+ name: String(message.template.id),
173
+ language: {
174
+ code: "en",
175
+ },
176
+ ...(params.length > 0
177
+ ? {
178
+ components: [
179
+ {
180
+ type: "body",
181
+ parameters: params.map((entry) => ({
182
+ type: "text",
183
+ text: String(entry),
184
+ })),
185
+ },
186
+ ],
187
+ }
188
+ : {}),
189
+ },
190
+ };
191
+ }
192
+ return null;
193
+ }
194
+ normalizePhone(phone) {
195
+ const digits = String(phone || "").replace(/\D/g, "");
196
+ if (!digits) {
197
+ throw new Error("Destination phone number is required for WhatsApp message.");
198
+ }
199
+ return digits;
200
+ }
201
+ };
202
+ exports.MetaCloudWhatsappService = MetaCloudWhatsappService;
203
+ exports.MetaCloudWhatsappService = MetaCloudWhatsappService = MetaCloudWhatsappService_1 = __decorate([
204
+ (0, common_1.Injectable)(),
205
+ (0, whatsapp_provider_decorator_1.WhatsAppProvider)(),
206
+ __metadata("design:paramtypes", [axios_1.HttpService,
207
+ setting_service_1.SettingService])
208
+ ], MetaCloudWhatsappService);
209
+ //# sourceMappingURL=MetaCloudWhatsappService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaCloudWhatsappService.js","sourceRoot":"","sources":["../../../src/services/whatsapp/MetaCloudWhatsappService.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpService } from \"@nestjs/axios\";\nimport { Injectable, Logger } from \"@nestjs/common\";\nimport { AxiosError } from \"axios\";\nimport { WhatsAppProvider } from \"src/decorators/whatsapp-provider.decorator\";\nimport { IWhatsAppTransport } from \"src/interfaces\";\nimport { QueueMessage } from \"src/interfaces/mq\";\nimport { SettingService } from \"src/services/setting.service\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\ntype MetaTemplatePayload = {\n type?: \"template\";\n templateName?: string;\n templateId?: string;\n languageCode?: string;\n body?: string[];\n headerText?: string;\n imageLink?: string;\n};\n\ntype MetaTextPayload = {\n type?: \"text\";\n text?: string;\n previewUrl?: boolean;\n};\n\n@Injectable()\n@WhatsAppProvider()\nexport class MetaCloudWhatsappService implements IWhatsAppTransport {\n readonly logger = new Logger(MetaCloudWhatsappService.name);\n\n constructor(\n private readonly httpService: HttpService,\n private readonly settingService: SettingService,\n ) {}\n\n async sendWhatsAppMessage(\n to: string,\n templateId: string,\n parameters: any,\n parentEntity?: any,\n parentEntityId?: any,\n ): Promise<any> {\n const message: QueueMessage<any> = {\n payload: {\n to,\n templateId,\n ...parameters,\n },\n parentEntity,\n parentEntityId,\n };\n\n await this.sendWhatsAppMessageSynchronously(message);\n return message;\n }\n\n async sendWhatsAppMessageSynchronously(message: QueueMessage<any>): Promise<void> {\n const phoneNumberId = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappPhoneNumberId\",\n );\n const apiVersion = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappApiVersion\",\n );\n const apiBaseUrl = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappApiUrl\",\n );\n const accessToken = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappAccessToken\",\n );\n\n if (!phoneNumberId || !apiVersion || !apiBaseUrl || !accessToken) {\n throw new Error(\n \"Missing Meta WhatsApp configuration. Set metaWhatsappApiUrl, metaWhatsappApiVersion, metaWhatsappPhoneNumberId, metaWhatsappAccessToken.\",\n );\n }\n\n const requestBody = this.createWhatsappRequest(message);\n const url = `${String(apiBaseUrl).replace(/\\/$/, \"\")}/${apiVersion}/${phoneNumberId}/messages`;\n\n try {\n await this.httpService.axiosRef.post(url, requestBody, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n });\n this.logger.debug(\n `Sent Meta WhatsApp message to ${message.payload?.to} with type ${requestBody.type}`,\n );\n } catch (error) {\n const axiosError = error as AxiosError;\n const status = axiosError.response?.status;\n const data = axiosError.response?.data;\n this.logger.error(\n `Meta WhatsApp send failed: status=${status ?? \"unknown\"}, url=${url}, response=${typeof data === \"object\" ? JSON.stringify(data) : data}`,\n );\n throw error;\n }\n }\n\n private createWhatsappRequest(message: QueueMessage<any>): any {\n const payload = message?.payload ?? {};\n\n if (payload?.payload) {\n const normalizedFromWrappedPayload = this.normalizeWrappedPayload(payload.payload);\n if (normalizedFromWrappedPayload) {\n return normalizedFromWrappedPayload;\n }\n return payload.payload;\n }\n\n const to = this.normalizePhone(payload.to);\n const templatePayload: MetaTemplatePayload = payload;\n const textPayload: MetaTextPayload = payload;\n\n if (textPayload.type === \"text\" || textPayload.text) {\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to,\n type: \"text\",\n text: {\n body: textPayload.text ?? \"\",\n preview_url: Boolean(textPayload.previewUrl),\n },\n };\n }\n\n const templateName = payload.templateId || templatePayload.templateId || templatePayload.templateName;\n if (!templateName) {\n throw new Error(\n \"Meta WhatsApp template name is missing. Provide templateId or parameters.templateName.\",\n );\n }\n\n const components: any[] = [];\n if (templatePayload.headerText) {\n components.push({\n type: \"header\",\n parameters: [\n {\n type: \"text\",\n text: templatePayload.headerText,\n },\n ],\n });\n } else if (templatePayload.imageLink) {\n components.push({\n type: \"header\",\n parameters: [\n {\n type: \"image\",\n image: { link: templatePayload.imageLink },\n },\n ],\n });\n }\n\n if (Array.isArray(templatePayload.body) && templatePayload.body.length > 0) {\n components.push({\n type: \"body\",\n parameters: templatePayload.body.map((entry) => ({\n type: \"text\",\n text: String(entry),\n })),\n });\n }\n\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to,\n type: \"template\",\n template: {\n name: templateName,\n language: {\n code: templatePayload.languageCode || \"en\",\n },\n ...(components.length > 0 ? { components } : {}),\n },\n };\n }\n\n private normalizeWrappedPayload(payload: any): any | null {\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n\n if (payload.messaging_product && payload.to && payload.type) {\n return payload;\n }\n\n const destination = payload.destination || payload.to;\n const message = payload.message || {};\n if (!destination || !message.type) {\n return null;\n }\n\n if (message.type === \"text\" && message.text) {\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to: this.normalizePhone(destination),\n type: \"text\",\n text: {\n body: String(message.text),\n preview_url: false,\n },\n };\n }\n\n if (message.type === \"template\" && message.template?.id) {\n const params = Array.isArray(message.template?.params)\n ? message.template.params\n : [];\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to: this.normalizePhone(destination),\n type: \"template\",\n template: {\n name: String(message.template.id),\n language: {\n code: \"en\",\n },\n ...(params.length > 0\n ? {\n components: [\n {\n type: \"body\",\n parameters: params.map((entry: any) => ({\n type: \"text\",\n text: String(entry),\n })),\n },\n ],\n }\n : {}),\n },\n };\n }\n\n return null;\n }\n\n private normalizePhone(phone: string): string {\n const digits = String(phone || \"\").replace(/\\D/g, \"\");\n if (!digits) {\n throw new Error(\"Destination phone number is required for WhatsApp message.\");\n }\n return digits;\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import 'multer';
2
- import { MiddlewareConsumer, NestModule } from '@nestjs/common';
1
+ import "multer";
2
+ import { MiddlewareConsumer, NestModule } from "@nestjs/common";
3
3
  export declare class SolidCoreModule implements NestModule {
4
4
  configure(consumer: MiddlewareConsumer): void;
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAChB,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAyYhF,qBA6ea,eAAgB,YAAW,UAAU;IAChD,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAQvC"}
1
+ {"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAChB,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAoYhF,qBAmea,eAAgB,YAAW,UAAU;IAChD,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAQvC"}