@solidxai/core 0.1.2 → 0.1.5-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 (469) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/dist/commands/run-tests.command.d.ts +37 -0
  3. package/dist/commands/run-tests.command.d.ts.map +1 -0
  4. package/dist/commands/run-tests.command.js +345 -0
  5. package/dist/commands/run-tests.command.js.map +1 -0
  6. package/dist/commands/test-data.command.d.ts +6 -6
  7. package/dist/commands/test-data.command.d.ts.map +1 -1
  8. package/dist/commands/test-data.command.js +25 -25
  9. package/dist/commands/test-data.command.js.map +1 -1
  10. package/dist/commands/test.command.d.ts +5 -0
  11. package/dist/commands/test.command.d.ts.map +1 -0
  12. package/dist/commands/test.command.js +26 -0
  13. package/dist/commands/test.command.js.map +1 -0
  14. package/dist/constants/error-messages.d.ts +1 -0
  15. package/dist/constants/error-messages.d.ts.map +1 -1
  16. package/dist/constants/error-messages.js +1 -0
  17. package/dist/constants/error-messages.js.map +1 -1
  18. package/dist/constants.d.ts +3 -3
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +12 -12
  21. package/dist/constants.js.map +1 -1
  22. package/dist/controllers/otp-authentication.controller.d.ts +1 -4
  23. package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
  24. package/dist/controllers/otp-authentication.controller.js +1 -1
  25. package/dist/controllers/role-metadata.controller.d.ts +1 -0
  26. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  27. package/dist/controllers/role-metadata.controller.js +15 -0
  28. package/dist/controllers/role-metadata.controller.js.map +1 -1
  29. package/dist/controllers/service.controller.d.ts +0 -9
  30. package/dist/controllers/service.controller.d.ts.map +1 -1
  31. package/dist/controllers/service.controller.js +0 -45
  32. package/dist/controllers/service.controller.js.map +1 -1
  33. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  34. package/dist/dtos/basic-filters.dto.js.map +1 -1
  35. package/dist/dtos/create-email-template.dto.d.ts.map +1 -1
  36. package/dist/dtos/create-email-template.dto.js.map +1 -1
  37. package/dist/dtos/create-list-of-values.dto.d.ts.map +1 -1
  38. package/dist/dtos/create-list-of-values.dto.js.map +1 -1
  39. package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
  40. package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
  41. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  42. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  43. package/dist/dtos/create-scheduled-job.dto.d.ts.map +1 -1
  44. package/dist/dtos/create-scheduled-job.dto.js.map +1 -1
  45. package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
  46. package/dist/dtos/create-security-rule.dto.js.map +1 -1
  47. package/dist/dtos/create-sms-template.dto.d.ts.map +1 -1
  48. package/dist/dtos/create-sms-template.dto.js.map +1 -1
  49. package/dist/dtos/create-user.dto.d.ts +1 -0
  50. package/dist/dtos/create-user.dto.d.ts.map +1 -1
  51. package/dist/dtos/create-user.dto.js +2 -1
  52. package/dist/dtos/create-user.dto.js.map +1 -1
  53. package/dist/dtos/create-view-metadata.dto.d.ts.map +1 -1
  54. package/dist/dtos/create-view-metadata.dto.js.map +1 -1
  55. package/dist/dtos/otp-sign-in.dto.d.ts +1 -1
  56. package/dist/dtos/otp-sign-in.dto.d.ts.map +1 -1
  57. package/dist/dtos/otp-sign-in.dto.js +2 -2
  58. package/dist/dtos/otp-sign-in.dto.js.map +1 -1
  59. package/dist/dtos/otp-sign-up.dto.d.ts +2 -2
  60. package/dist/dtos/otp-sign-up.dto.d.ts.map +1 -1
  61. package/dist/dtos/otp-sign-up.dto.js +2 -2
  62. package/dist/dtos/otp-sign-up.dto.js.map +1 -1
  63. package/dist/dtos/resolve-s3-url.dto.d.ts +2 -5
  64. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
  65. package/dist/dtos/resolve-s3-url.dto.js +1 -13
  66. package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
  67. package/dist/dtos/sign-up.dto.d.ts.map +1 -1
  68. package/dist/dtos/sign-up.dto.js.map +1 -1
  69. package/dist/dtos/update-email-template.dto.d.ts.map +1 -1
  70. package/dist/dtos/update-email-template.dto.js.map +1 -1
  71. package/dist/dtos/update-list-of-values.dto.d.ts.map +1 -1
  72. package/dist/dtos/update-list-of-values.dto.js.map +1 -1
  73. package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
  74. package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
  75. package/dist/dtos/update-scheduled-job.dto.d.ts.map +1 -1
  76. package/dist/dtos/update-scheduled-job.dto.js.map +1 -1
  77. package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
  78. package/dist/dtos/update-security-rule.dto.js.map +1 -1
  79. package/dist/dtos/update-sms-template.dto.d.ts.map +1 -1
  80. package/dist/dtos/update-sms-template.dto.js.map +1 -1
  81. package/dist/dtos/update-view-metadata.dto.d.ts.map +1 -1
  82. package/dist/dtos/update-view-metadata.dto.js.map +1 -1
  83. package/dist/entities/user.entity.d.ts +1 -0
  84. package/dist/entities/user.entity.d.ts.map +1 -1
  85. package/dist/entities/user.entity.js +6 -1
  86. package/dist/entities/user.entity.js.map +1 -1
  87. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -0
  88. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  89. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +33 -23
  90. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  91. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +3 -0
  92. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  93. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +36 -23
  94. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  95. package/dist/helpers/security.helper.js +1 -0
  96. package/dist/helpers/security.helper.js.map +1 -1
  97. package/dist/index.d.ts +3 -4
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +3 -4
  100. package/dist/index.js.map +1 -1
  101. package/dist/repository/solid-base.repository.d.ts +10 -1
  102. package/dist/repository/solid-base.repository.d.ts.map +1 -1
  103. package/dist/repository/solid-base.repository.js +109 -0
  104. package/dist/repository/solid-base.repository.js.map +1 -1
  105. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -0
  106. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  107. package/dist/seeders/module-metadata-seeder.service.js +142 -91
  108. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  109. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  110. package/dist/seeders/module-test-data.service.js +3 -3
  111. package/dist/seeders/module-test-data.service.js.map +1 -1
  112. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -1
  113. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  114. package/dist/seeders/permission-metadata-seeder.service.js +1 -1
  115. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  116. package/dist/seeders/seed-data/solid-core-metadata.json +12 -25
  117. package/dist/services/authentication.service.d.ts +22 -8
  118. package/dist/services/authentication.service.d.ts.map +1 -1
  119. package/dist/services/authentication.service.js +228 -214
  120. package/dist/services/authentication.service.js.map +1 -1
  121. package/dist/services/chatter-message.service.d.ts +2 -0
  122. package/dist/services/chatter-message.service.d.ts.map +1 -1
  123. package/dist/services/chatter-message.service.js +18 -2
  124. package/dist/services/chatter-message.service.js.map +1 -1
  125. package/dist/services/crud-helper.service.d.ts +4 -0
  126. package/dist/services/crud-helper.service.d.ts.map +1 -1
  127. package/dist/services/crud-helper.service.js +66 -32
  128. package/dist/services/crud-helper.service.js.map +1 -1
  129. package/dist/services/crud.service.d.ts.map +1 -1
  130. package/dist/services/crud.service.js +7 -4
  131. package/dist/services/crud.service.js.map +1 -1
  132. package/dist/services/field-metadata.service.d.ts.map +1 -1
  133. package/dist/services/field-metadata.service.js.map +1 -1
  134. package/dist/services/file/disk-file.service.d.ts +0 -2
  135. package/dist/services/file/disk-file.service.d.ts.map +1 -1
  136. package/dist/services/file/disk-file.service.js +7 -16
  137. package/dist/services/file/disk-file.service.js.map +1 -1
  138. package/dist/services/file/index.d.ts +1 -0
  139. package/dist/services/file/index.d.ts.map +1 -1
  140. package/dist/services/file/index.js +1 -0
  141. package/dist/services/file/index.js.map +1 -1
  142. package/dist/services/file/storage-path-builder.d.ts +17 -0
  143. package/dist/services/file/storage-path-builder.d.ts.map +1 -0
  144. package/dist/{seeders/sms-template-seeder.service.js → services/file/storage-path-builder.js} +45 -35
  145. package/dist/services/file/storage-path-builder.js.map +1 -0
  146. package/dist/services/media.service.d.ts +1 -1
  147. package/dist/services/media.service.d.ts.map +1 -1
  148. package/dist/services/media.service.js +45 -6
  149. package/dist/services/media.service.js.map +1 -1
  150. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  151. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  152. package/dist/services/mediaStorageProviders/file-storage-provider.js +46 -7
  153. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  154. package/dist/services/module-metadata.service.d.ts +4 -6
  155. package/dist/services/module-metadata.service.d.ts.map +1 -1
  156. package/dist/services/module-metadata.service.js +16 -14
  157. package/dist/services/module-metadata.service.js.map +1 -1
  158. package/dist/services/queues/common.d.ts +3 -0
  159. package/dist/services/queues/common.d.ts.map +1 -0
  160. package/dist/services/queues/common.js +39 -0
  161. package/dist/services/queues/common.js.map +1 -0
  162. package/dist/services/queues/database-publisher.service.d.ts.map +1 -1
  163. package/dist/services/queues/database-publisher.service.js +3 -1
  164. package/dist/services/queues/database-publisher.service.js.map +1 -1
  165. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  166. package/dist/services/queues/database-subscriber.service.js +5 -2
  167. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  168. package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
  169. package/dist/services/queues/rabbitmq-publisher.service.js +13 -6
  170. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
  171. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  172. package/dist/services/queues/rabbitmq-subscriber.service.js +9 -5
  173. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  174. package/dist/services/setting.service.d.ts +3 -2
  175. package/dist/services/setting.service.d.ts.map +1 -1
  176. package/dist/services/setting.service.js +7 -4
  177. package/dist/services/setting.service.js.map +1 -1
  178. package/dist/services/settings/default-settings-provider.service.d.ts +24 -2
  179. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  180. package/dist/services/settings/default-settings-provider.service.js +8 -6
  181. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  182. package/dist/solid-core.module.d.ts +3 -1
  183. package/dist/solid-core.module.d.ts.map +1 -1
  184. package/dist/solid-core.module.js +49 -9
  185. package/dist/solid-core.module.js.map +1 -1
  186. package/dist/testing/__examples__/register-example-specs.d.ts +3 -0
  187. package/dist/testing/__examples__/register-example-specs.d.ts.map +1 -0
  188. package/dist/testing/__examples__/register-example-specs.js +8 -0
  189. package/dist/testing/__examples__/register-example-specs.js.map +1 -0
  190. package/dist/testing/__examples__/specs/custom-health.spec.d.ts +17 -0
  191. package/dist/testing/__examples__/specs/custom-health.spec.d.ts.map +1 -0
  192. package/dist/testing/__examples__/specs/custom-health.spec.js +30 -0
  193. package/dist/testing/__examples__/specs/custom-health.spec.js.map +1 -0
  194. package/dist/testing/adapters/api/api-adapter.d.ts +9 -0
  195. package/dist/testing/adapters/api/api-adapter.d.ts.map +1 -0
  196. package/dist/testing/adapters/api/api-adapter.js +76 -0
  197. package/dist/testing/adapters/api/api-adapter.js.map +1 -0
  198. package/dist/testing/adapters/api/api.types.d.ts +14 -0
  199. package/dist/testing/adapters/api/api.types.d.ts.map +1 -0
  200. package/dist/testing/adapters/api/api.types.js +3 -0
  201. package/dist/testing/adapters/api/api.types.js.map +1 -0
  202. package/dist/testing/adapters/ui/playwright-adapter.d.ts +14 -0
  203. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -0
  204. package/dist/testing/adapters/ui/playwright-adapter.js +80 -0
  205. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -0
  206. package/dist/testing/adapters/ui/ui.types.d.ts +5 -0
  207. package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -0
  208. package/dist/testing/adapters/ui/ui.types.js +3 -0
  209. package/dist/testing/adapters/ui/ui.types.js.map +1 -0
  210. package/dist/testing/contracts/runtime-context.types.d.ts +35 -0
  211. package/dist/testing/contracts/runtime-context.types.d.ts.map +1 -0
  212. package/dist/testing/contracts/runtime-context.types.js +3 -0
  213. package/dist/testing/contracts/runtime-context.types.js.map +1 -0
  214. package/dist/testing/contracts/test-spec.types.d.ts +21 -0
  215. package/dist/testing/contracts/test-spec.types.d.ts.map +1 -0
  216. package/dist/testing/contracts/test-spec.types.js +3 -0
  217. package/dist/testing/contracts/test-spec.types.js.map +1 -0
  218. package/dist/testing/contracts/testing-metadata.types.d.ts +41 -0
  219. package/dist/testing/contracts/testing-metadata.types.d.ts.map +1 -0
  220. package/dist/testing/contracts/testing-metadata.types.js +3 -0
  221. package/dist/testing/contracts/testing-metadata.types.js.map +1 -0
  222. package/dist/testing/core/interpolation.d.ts +4 -0
  223. package/dist/testing/core/interpolation.d.ts.map +1 -0
  224. package/dist/testing/core/interpolation.js +180 -0
  225. package/dist/testing/core/interpolation.js.map +1 -0
  226. package/dist/testing/core/normalize-steps.d.ts +7 -0
  227. package/dist/testing/core/normalize-steps.d.ts.map +1 -0
  228. package/dist/testing/core/normalize-steps.js +20 -0
  229. package/dist/testing/core/normalize-steps.js.map +1 -0
  230. package/dist/testing/core/resource-store.d.ts +8 -0
  231. package/dist/testing/core/resource-store.d.ts.map +1 -0
  232. package/dist/testing/core/resource-store.js +41 -0
  233. package/dist/testing/core/resource-store.js.map +1 -0
  234. package/dist/testing/core/spec-registry.d.ts +10 -0
  235. package/dist/testing/core/spec-registry.d.ts.map +1 -0
  236. package/dist/testing/core/spec-registry.js +32 -0
  237. package/dist/testing/core/spec-registry.js.map +1 -0
  238. package/dist/testing/core/step-registry.d.ts +10 -0
  239. package/dist/testing/core/step-registry.d.ts.map +1 -0
  240. package/dist/testing/core/step-registry.js +26 -0
  241. package/dist/testing/core/step-registry.js.map +1 -0
  242. package/dist/testing/core/testing-engine.d.ts +14 -0
  243. package/dist/testing/core/testing-engine.d.ts.map +1 -0
  244. package/dist/testing/core/testing-engine.js +97 -0
  245. package/dist/testing/core/testing-engine.js.map +1 -0
  246. package/dist/testing/core/timeout.d.ts +2 -0
  247. package/dist/testing/core/timeout.d.ts.map +1 -0
  248. package/dist/testing/core/timeout.js +18 -0
  249. package/dist/testing/core/timeout.js.map +1 -0
  250. package/dist/testing/reporter/attachments.d.ts +4 -0
  251. package/dist/testing/reporter/attachments.d.ts.map +1 -0
  252. package/dist/testing/reporter/attachments.js +25 -0
  253. package/dist/testing/reporter/attachments.js.map +1 -0
  254. package/dist/testing/reporter/console-reporter.d.ts +45 -0
  255. package/dist/testing/reporter/console-reporter.d.ts.map +1 -0
  256. package/dist/testing/reporter/console-reporter.js +189 -0
  257. package/dist/testing/reporter/console-reporter.js.map +1 -0
  258. package/dist/testing/reporter/reporter.types.d.ts +37 -0
  259. package/dist/testing/reporter/reporter.types.d.ts.map +1 -0
  260. package/dist/testing/reporter/reporter.types.js +3 -0
  261. package/dist/testing/reporter/reporter.types.js.map +1 -0
  262. package/dist/testing/runner/lifecycle.d.ts +9 -0
  263. package/dist/testing/runner/lifecycle.d.ts.map +1 -0
  264. package/dist/testing/runner/lifecycle.js +33 -0
  265. package/dist/testing/runner/lifecycle.js.map +1 -0
  266. package/dist/testing/runner/run-from-metadata.d.ts +24 -0
  267. package/dist/testing/runner/run-from-metadata.d.ts.map +1 -0
  268. package/dist/testing/runner/run-from-metadata.js +70 -0
  269. package/dist/testing/runner/run-from-metadata.js.map +1 -0
  270. package/dist/testing/runner/scenario-filter.d.ts +9 -0
  271. package/dist/testing/runner/scenario-filter.d.ts.map +1 -0
  272. package/dist/testing/runner/scenario-filter.js +22 -0
  273. package/dist/testing/runner/scenario-filter.js.map +1 -0
  274. package/dist/testing/steps/api/auth.step.d.ts +3 -0
  275. package/dist/testing/steps/api/auth.step.d.ts.map +1 -0
  276. package/dist/testing/steps/api/auth.step.js +38 -0
  277. package/dist/testing/steps/api/auth.step.js.map +1 -0
  278. package/dist/testing/steps/api/index.d.ts +3 -0
  279. package/dist/testing/steps/api/index.d.ts.map +1 -0
  280. package/dist/testing/steps/api/index.js +10 -0
  281. package/dist/testing/steps/api/index.js.map +1 -0
  282. package/dist/testing/steps/api/request.step.d.ts +3 -0
  283. package/dist/testing/steps/api/request.step.d.ts.map +1 -0
  284. package/dist/testing/steps/api/request.step.js +281 -0
  285. package/dist/testing/steps/api/request.step.js.map +1 -0
  286. package/dist/testing/steps/assert/http.step.d.ts +3 -0
  287. package/dist/testing/steps/assert/http.step.d.ts.map +1 -0
  288. package/dist/testing/steps/assert/http.step.js +27 -0
  289. package/dist/testing/steps/assert/http.step.js.map +1 -0
  290. package/dist/testing/steps/assert/index.d.ts +3 -0
  291. package/dist/testing/steps/assert/index.d.ts.map +1 -0
  292. package/dist/testing/steps/assert/index.js +12 -0
  293. package/dist/testing/steps/assert/index.js.map +1 -0
  294. package/dist/testing/steps/assert/jsonpath.step.d.ts +3 -0
  295. package/dist/testing/steps/assert/jsonpath.step.d.ts.map +1 -0
  296. package/dist/testing/steps/assert/jsonpath.step.js +40 -0
  297. package/dist/testing/steps/assert/jsonpath.step.js.map +1 -0
  298. package/dist/testing/steps/assert/primitives.step.d.ts +3 -0
  299. package/dist/testing/steps/assert/primitives.step.d.ts.map +1 -0
  300. package/dist/testing/steps/assert/primitives.step.js +43 -0
  301. package/dist/testing/steps/assert/primitives.step.js.map +1 -0
  302. package/dist/testing/steps/test/index.d.ts +3 -0
  303. package/dist/testing/steps/test/index.d.ts.map +1 -0
  304. package/dist/testing/steps/test/index.js +8 -0
  305. package/dist/testing/steps/test/index.js.map +1 -0
  306. package/dist/testing/steps/test/test-spec.step.d.ts +3 -0
  307. package/dist/testing/steps/test/test-spec.step.d.ts.map +1 -0
  308. package/dist/testing/steps/test/test-spec.step.js +41 -0
  309. package/dist/testing/steps/test/test-spec.step.js.map +1 -0
  310. package/dist/testing/steps/ui/actions.step.d.ts +3 -0
  311. package/dist/testing/steps/ui/actions.step.d.ts.map +1 -0
  312. package/dist/testing/steps/ui/actions.step.js +31 -0
  313. package/dist/testing/steps/ui/actions.step.js.map +1 -0
  314. package/dist/testing/steps/ui/assertions.step.d.ts +3 -0
  315. package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -0
  316. package/dist/testing/steps/ui/assertions.step.js +41 -0
  317. package/dist/testing/steps/ui/assertions.step.js.map +1 -0
  318. package/dist/testing/steps/ui/form.step.d.ts +3 -0
  319. package/dist/testing/steps/ui/form.step.d.ts.map +1 -0
  320. package/dist/testing/steps/ui/form.step.js +34 -0
  321. package/dist/testing/steps/ui/form.step.js.map +1 -0
  322. package/dist/testing/steps/ui/index.d.ts +3 -0
  323. package/dist/testing/steps/ui/index.d.ts.map +1 -0
  324. package/dist/testing/steps/ui/index.js +14 -0
  325. package/dist/testing/steps/ui/index.js.map +1 -0
  326. package/dist/testing/steps/ui/navigation.step.d.ts +3 -0
  327. package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -0
  328. package/dist/testing/steps/ui/navigation.step.js +39 -0
  329. package/dist/testing/steps/ui/navigation.step.js.map +1 -0
  330. package/dist/testing/steps/util/index.d.ts +3 -0
  331. package/dist/testing/steps/util/index.d.ts.map +1 -0
  332. package/dist/testing/steps/util/index.js +12 -0
  333. package/dist/testing/steps/util/index.js.map +1 -0
  334. package/dist/testing/steps/util/log.step.d.ts +3 -0
  335. package/dist/testing/steps/util/log.step.d.ts.map +1 -0
  336. package/dist/testing/steps/util/log.step.js +18 -0
  337. package/dist/testing/steps/util/log.step.js.map +1 -0
  338. package/dist/testing/steps/util/require.step.d.ts +3 -0
  339. package/dist/testing/steps/util/require.step.d.ts.map +1 -0
  340. package/dist/testing/steps/util/require.step.js +16 -0
  341. package/dist/testing/steps/util/require.step.js.map +1 -0
  342. package/dist/testing/steps/util/sleep.step.d.ts +3 -0
  343. package/dist/testing/steps/util/sleep.step.d.ts.map +1 -0
  344. package/dist/testing/steps/util/sleep.step.js +13 -0
  345. package/dist/testing/steps/util/sleep.step.js.map +1 -0
  346. package/docs/test-data-workflow.md +51 -11
  347. package/package.json +10 -2
  348. package/src/commands/run-tests.command.ts +278 -0
  349. package/src/commands/test-data.command.ts +26 -26
  350. package/src/commands/test.command.ts +14 -0
  351. package/src/constants/error-messages.ts +1 -0
  352. package/src/constants.ts +3 -3
  353. package/src/controllers/role-metadata.controller.ts +26 -18
  354. package/src/controllers/service.controller.ts +58 -59
  355. package/src/dtos/basic-filters.dto.ts +0 -2
  356. package/src/dtos/create-email-template.dto.ts +7 -0
  357. package/src/dtos/create-list-of-values.dto.ts +7 -0
  358. package/src/dtos/create-menu-item-metadata.dto.ts +12 -1
  359. package/src/dtos/create-role-metadata.dto.ts +9 -0
  360. package/src/dtos/create-scheduled-job.dto.ts +14 -0
  361. package/src/dtos/create-security-rule.dto.ts +6 -0
  362. package/src/dtos/create-sms-template.dto.ts +6 -0
  363. package/src/dtos/create-user.dto.ts +1 -0
  364. package/src/dtos/create-view-metadata.dto.ts +11 -0
  365. package/src/dtos/otp-sign-in.dto.ts +3 -3
  366. package/src/dtos/otp-sign-up.dto.ts +3 -3
  367. package/src/dtos/resolve-s3-url.dto.ts +2 -12
  368. package/src/dtos/sign-up.dto.ts +0 -2
  369. package/src/dtos/update-email-template.dto.ts +6 -0
  370. package/src/dtos/update-list-of-values.dto.ts +8 -0
  371. package/src/dtos/update-menu-item-metadata.dto.ts +12 -0
  372. package/src/dtos/update-scheduled-job.dto.ts +15 -0
  373. package/src/dtos/update-security-rule.dto.ts +7 -0
  374. package/src/dtos/update-sms-template.dto.ts +32 -32
  375. package/src/dtos/update-view-metadata.dto.ts +12 -0
  376. package/src/entities/user.entity.ts +3 -0
  377. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +43 -32
  378. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +45 -33
  379. package/src/helpers/security.helper.ts +1 -1
  380. package/src/index.ts +3 -4
  381. package/src/repository/solid-base.repository.ts +172 -1
  382. package/src/seeders/module-metadata-seeder.service.ts +191 -150
  383. package/src/seeders/module-test-data.service.ts +5 -3
  384. package/src/seeders/permission-metadata-seeder.service.ts +1 -4
  385. package/src/seeders/seed-data/solid-core-metadata.json +12 -25
  386. package/src/services/authentication.service.ts +268 -266
  387. package/src/services/chatter-message.service.ts +18 -1
  388. package/src/services/crud-helper.service.ts +79 -36
  389. package/src/services/crud.service.ts +10 -4
  390. package/src/services/field-metadata.service.ts +0 -71
  391. package/src/services/file/disk-file.service.ts +8 -18
  392. package/src/services/file/index.ts +1 -0
  393. package/src/services/file/storage-path-builder.ts +56 -0
  394. package/src/services/media.service.ts +13 -7
  395. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +1 -1
  396. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -8
  397. package/src/services/module-metadata.service.ts +18 -15
  398. package/src/services/queues/common.ts +75 -0
  399. package/src/services/queues/database-publisher.service.ts +4 -1
  400. package/src/services/queues/database-subscriber.service.ts +5 -3
  401. package/src/services/queues/rabbitmq-publisher.service.ts +17 -7
  402. package/src/services/queues/rabbitmq-subscriber.service.ts +9 -5
  403. package/src/services/setting.service.ts +5 -3
  404. package/src/services/settings/default-settings-provider.service.ts +5 -3
  405. package/src/solid-core.module.ts +20 -12
  406. package/src/testing/README.md +364 -0
  407. package/src/testing/__examples__/register-example-specs.ts +6 -0
  408. package/src/testing/__examples__/specs/custom-health.spec.ts +29 -0
  409. package/src/testing/__examples__/testing.sample.json +82 -0
  410. package/src/testing/adapters/api/api-adapter.ts +85 -0
  411. package/src/testing/adapters/api/api.types.ts +15 -0
  412. package/src/testing/adapters/ui/playwright-adapter.ts +54 -0
  413. package/src/testing/adapters/ui/ui.types.ts +4 -0
  414. package/src/testing/contracts/runtime-context.types.ts +36 -0
  415. package/src/testing/contracts/test-spec.types.ts +24 -0
  416. package/src/testing/contracts/testing-metadata.types.ts +46 -0
  417. package/src/testing/core/interpolation.ts +189 -0
  418. package/src/testing/core/normalize-steps.ts +21 -0
  419. package/src/testing/core/resource-store.ts +38 -0
  420. package/src/testing/core/spec-registry.ts +33 -0
  421. package/src/testing/core/step-registry.ts +27 -0
  422. package/src/testing/core/testing-engine.ts +127 -0
  423. package/src/testing/core/timeout.ts +19 -0
  424. package/src/testing/reporter/attachments.ts +25 -0
  425. package/src/testing/reporter/console-reporter.ts +229 -0
  426. package/src/testing/reporter/reporter.types.ts +36 -0
  427. package/src/testing/runner/lifecycle.ts +31 -0
  428. package/src/testing/runner/run-from-metadata.ts +87 -0
  429. package/src/testing/runner/scenario-filter.ts +33 -0
  430. package/src/testing/steps/api/auth.step.ts +66 -0
  431. package/src/testing/steps/api/index.ts +10 -0
  432. package/src/testing/steps/api/request.step.ts +358 -0
  433. package/src/testing/steps/assert/http.step.ts +33 -0
  434. package/src/testing/steps/assert/index.ts +12 -0
  435. package/src/testing/steps/assert/jsonpath.step.ts +50 -0
  436. package/src/testing/steps/assert/primitives.step.ts +69 -0
  437. package/src/testing/steps/test/index.ts +8 -0
  438. package/src/testing/steps/test/test-spec.step.ts +52 -0
  439. package/src/testing/steps/ui/actions.step.ts +36 -0
  440. package/src/testing/steps/ui/assertions.step.ts +54 -0
  441. package/src/testing/steps/ui/form.step.ts +39 -0
  442. package/src/testing/steps/ui/index.ts +12 -0
  443. package/src/testing/steps/ui/navigation.step.ts +53 -0
  444. package/src/testing/steps/util/index.ts +10 -0
  445. package/src/testing/steps/util/log.step.ts +19 -0
  446. package/src/testing/steps/util/require.step.ts +16 -0
  447. package/src/testing/steps/util/sleep.step.ts +15 -0
  448. package/tsconfig.json +35 -25
  449. package/tsconfig.tests.json +14 -0
  450. package/dist/passport-strategies/local.strategy.d.ts +0 -15
  451. package/dist/passport-strategies/local.strategy.d.ts.map +0 -1
  452. package/dist/passport-strategies/local.strategy.js +0 -44
  453. package/dist/passport-strategies/local.strategy.js.map +0 -1
  454. package/dist/seeders/email-template-seeder.service.d.ts +0 -10
  455. package/dist/seeders/email-template-seeder.service.d.ts.map +0 -1
  456. package/dist/seeders/email-template-seeder.service.js +0 -84
  457. package/dist/seeders/email-template-seeder.service.js.map +0 -1
  458. package/dist/seeders/sms-template-seeder.service.d.ts +0 -10
  459. package/dist/seeders/sms-template-seeder.service.d.ts.map +0 -1
  460. package/dist/seeders/sms-template-seeder.service.js.map +0 -1
  461. package/dist/seeders/user-seeder.service.d.ts +0 -10
  462. package/dist/seeders/user-seeder.service.d.ts.map +0 -1
  463. package/dist/seeders/user-seeder.service.js +0 -44
  464. package/dist/seeders/user-seeder.service.js.map +0 -1
  465. package/dist/tsconfig.tsbuildinfo +0 -1
  466. package/src/passport-strategies/local.strategy.ts +0 -28
  467. package/src/seeders/email-template-seeder.service.ts +0 -49
  468. package/src/seeders/sms-template-seeder.service.ts +0 -50
  469. package/src/seeders/user-seeder.service.ts +0 -33
@@ -0,0 +1,278 @@
1
+ import { Logger } from '@nestjs/common';
2
+ import { SubCommand, CommandRunner, Option } from 'nest-commander';
3
+ import * as path from 'path';
4
+ import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
5
+ import { ConsoleReporter } from 'src/testing/reporter/console-reporter';
6
+ import { runFromMetadata } from 'src/testing/runner/run-from-metadata';
7
+ import type { TestingMetadata } from 'src/testing/contracts/testing-metadata.types';
8
+ import { SpecRegistry } from 'src/testing/core/spec-registry';
9
+
10
+ interface TestRunCommandOptions {
11
+ module?: string;
12
+ moduleName?: string;
13
+ scenarioIds?: string;
14
+ includeTags?: string;
15
+ skipScenarioIds?: string;
16
+ reporter?: string;
17
+ apiBaseUrl?: string;
18
+ uiBaseUrl?: string;
19
+ headless?: boolean;
20
+ timeoutMs?: number;
21
+ retries?: number;
22
+ listSpecs?: boolean;
23
+ printApiLogs?: boolean;
24
+ }
25
+
26
+ @SubCommand({
27
+ name: 'run',
28
+ description: 'Run testing scenarios from module metadata.',
29
+ })
30
+ export class TestRunCommand extends CommandRunner {
31
+ private readonly logger = new Logger(TestRunCommand.name);
32
+
33
+ constructor(
34
+ private readonly moduleMetadataHelperService: ModuleMetadataHelperService,
35
+ ) {
36
+ super();
37
+ }
38
+
39
+ async run(passedParam: string[], options?: TestRunCommandOptions): Promise<void> {
40
+ try {
41
+ const moduleName = options?.moduleName ?? options?.module ?? passedParam?.[0];
42
+ if (!moduleName) {
43
+ this.logger.error('Module name is required. Use --module or pass it as the first argument.');
44
+ return;
45
+ }
46
+
47
+ const metadataPath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
48
+ if (!metadataPath) {
49
+ this.logger.error(`Unable to resolve metadata path for module: ${moduleName}`);
50
+ return;
51
+ }
52
+
53
+ const metadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(metadataPath);
54
+ if (!metadata?.testing) {
55
+ this.logger.error(`No testing configuration found in metadata: ${metadataPath}`);
56
+ return;
57
+ }
58
+
59
+ const listSpecs = options?.listSpecs ?? false;
60
+ const specEntries = Array.isArray(metadata.testing?.specs)
61
+ ? metadata.testing.specs
62
+ : [];
63
+
64
+ if (listSpecs) {
65
+ const registry = new SpecRegistry();
66
+ if (specEntries.length) {
67
+ loadSpecRegistrations(specEntries, metadataPath, registry);
68
+ }
69
+ printSpecList(registry.list());
70
+ return;
71
+ }
72
+ if (!metadata?.testing?.scenarios || !Array.isArray(metadata.testing.scenarios)) {
73
+ this.logger.error(`No testing.scenarios found in metadata: ${metadataPath}`);
74
+ return;
75
+ }
76
+
77
+ const scenarioIds = splitCsv(options?.scenarioIds);
78
+ const includeTags = splitCsv(options?.includeTags);
79
+ const skipScenarioIds = splitCsv(options?.skipScenarioIds);
80
+
81
+ const reporterName = options?.reporter ?? 'console';
82
+ if (reporterName !== 'console') {
83
+ this.logger.error(`Unsupported reporter: ${reporterName}. Use "console".`);
84
+ return;
85
+ }
86
+
87
+ const apiBaseUrl = options?.apiBaseUrl ?? process.env.BASE_URL;
88
+ const uiBaseUrl = options?.uiBaseUrl ?? process.env.FRONTEND_BASE_URL;
89
+ const headless = options?.headless ?? true;
90
+ const printApiLogs = options?.printApiLogs ?? false;
91
+
92
+ await runFromMetadata({
93
+ metadata: metadata as TestingMetadata,
94
+ scenarioIds,
95
+ includeTags,
96
+ skipScenarioIds,
97
+ reporter: new ConsoleReporter(),
98
+ api: apiBaseUrl ? { baseUrl: apiBaseUrl } : undefined,
99
+ ui: { baseUrl: uiBaseUrl, headless },
100
+ defaults: {
101
+ timeoutMs: options?.timeoutMs,
102
+ retries: options?.retries,
103
+ },
104
+ options: { printApiLogs },
105
+ specs: specEntries.length
106
+ ? (registry) => loadSpecRegistrations(specEntries, metadataPath, registry)
107
+ : undefined,
108
+ });
109
+ } catch (err: any) {
110
+ this.logger.error('Run tests command failed');
111
+ console.error('Run tests command failed');
112
+ process.exitCode = 1;
113
+ return;
114
+ }
115
+ }
116
+
117
+ @Option({
118
+ flags: '-m, --module [module name]',
119
+ description: 'Module name to load metadata from.',
120
+ required: false,
121
+ })
122
+ parseModule(val: string): string {
123
+ return val;
124
+ }
125
+
126
+ @Option({
127
+ flags: '--scenario-ids [ids]',
128
+ description: 'Comma-separated list of scenario ids to run.',
129
+ required: false,
130
+ })
131
+ parseScenarioIds(val: string): string {
132
+ return val;
133
+ }
134
+
135
+ @Option({
136
+ flags: '--include-tags [tags]',
137
+ description: 'Comma-separated list of tags; scenario must include all.',
138
+ required: false,
139
+ })
140
+ parseIncludeTags(val: string): string {
141
+ return val;
142
+ }
143
+
144
+ @Option({
145
+ flags: '--skip-scenario-ids [ids]',
146
+ description: 'Comma-separated list of scenario ids to skip.',
147
+ required: false,
148
+ })
149
+ parseSkipScenarioIds(val: string): string {
150
+ return val;
151
+ }
152
+
153
+ @Option({
154
+ flags: '--reporter [name]',
155
+ description: 'Reporter name (currently only "console").',
156
+ required: false,
157
+ })
158
+ parseReporter(val: string): string {
159
+ return val;
160
+ }
161
+
162
+ @Option({
163
+ flags: '--list-specs [true|false]',
164
+ description: 'List registered test specs and exit.',
165
+ required: false,
166
+ })
167
+ parseListSpecs(val?: string): boolean {
168
+ if (val === undefined) return true;
169
+ return val === 'false' ? false : true;
170
+ }
171
+
172
+ @Option({
173
+ flags: '--print-api-logs [true|false]',
174
+ description: 'Print full API request/response logs for api.request steps.',
175
+ required: false,
176
+ })
177
+ parsePrintApiLogs(val?: string): boolean {
178
+ if (val === undefined) return true;
179
+ return val === 'false' ? false : true;
180
+ }
181
+
182
+ @Option({
183
+ flags: '--api-base-url [url]',
184
+ description: 'API base URL (defaults to process.env.BASE_URL).',
185
+ required: false,
186
+ })
187
+ parseApiBaseUrl(val: string): string {
188
+ return val;
189
+ }
190
+
191
+ @Option({
192
+ flags: '--ui-base-url [url]',
193
+ description: 'UI base URL (defaults to process.env.FRONTEND_BASE_URL).',
194
+ required: false,
195
+ })
196
+ parseUiBaseUrl(val: string): string {
197
+ return val;
198
+ }
199
+
200
+ @Option({
201
+ flags: '--headless [true|false]',
202
+ description: 'Run UI browser in headless mode (default: true).',
203
+ required: false,
204
+ })
205
+ parseHeadless(val: string): boolean {
206
+ return val === 'false' ? false : true;
207
+ }
208
+
209
+ @Option({
210
+ flags: '--timeout-ms [number]',
211
+ description: 'Default scenario timeout in milliseconds.',
212
+ required: false,
213
+ })
214
+ parseTimeoutMs(val: string): number {
215
+ return Number(val);
216
+ }
217
+
218
+ @Option({
219
+ flags: '--retries [number]',
220
+ description: 'Default scenario retries.',
221
+ required: false,
222
+ })
223
+ parseRetries(val: string): number {
224
+ return Number(val);
225
+ }
226
+ }
227
+
228
+ function splitCsv(value?: string): string[] | undefined {
229
+ if (!value) return undefined;
230
+ const items = value
231
+ .split(',')
232
+ .map((item) => item.trim())
233
+ .filter(Boolean);
234
+ return items.length ? items : undefined;
235
+ }
236
+
237
+ function resolveSpecPath(entry: string, metadataPath: string): string {
238
+ if (path.isAbsolute(entry)) {
239
+ return entry;
240
+ }
241
+ if (entry.startsWith('.')) {
242
+ return path.resolve(path.dirname(metadataPath), entry);
243
+ }
244
+ return path.resolve(process.cwd(), entry);
245
+ }
246
+
247
+ function loadSpecRegistrations(entries: string[], metadataPath: string, registry: SpecRegistry): void {
248
+ for (const entry of entries) {
249
+ const resolved = resolveSpecPath(entry, metadataPath);
250
+ let mod: any;
251
+ try {
252
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
253
+ mod = require(resolved);
254
+ } catch (err: any) {
255
+ const message = err?.message ?? String(err);
256
+ throw new Error(
257
+ `Failed to load test spec module "${entry}" resolved to "${resolved}": ${message}`,
258
+ );
259
+ }
260
+ const register = mod?.registerTestSpecs ?? mod?.default ?? mod;
261
+ if (typeof register !== 'function') {
262
+ throw new Error(
263
+ `Test spec module "${entry}" did not export a register function (expected "registerTestSpecs" or default export).`,
264
+ );
265
+ }
266
+ register(registry);
267
+ }
268
+ }
269
+ function printSpecList(specIds: string[]): void {
270
+ if (!specIds.length) {
271
+ console.log('No test specs registered.');
272
+ return;
273
+ }
274
+ console.log('Registered test specs:');
275
+ for (const id of specIds) {
276
+ console.log(`- ${id}`);
277
+ }
278
+ }
@@ -1,17 +1,17 @@
1
1
  import { Logger } from '@nestjs/common';
2
- import { Command, CommandRunner, Option } from 'nest-commander';
2
+ import { SubCommand, CommandRunner, Option } from 'nest-commander';
3
3
  import { ModuleTestDataService } from 'src/seeders/module-test-data.service';
4
4
 
5
5
  interface TestDataCommandOptions {
6
- loadData?: boolean;
6
+ load?: boolean;
7
7
  modulesToTest?: string;
8
- createDatasources?: boolean;
9
- deleteDatasources?: boolean;
8
+ setup?: boolean;
9
+ teardown?: boolean;
10
10
  }
11
11
 
12
- @Command({
13
- name: 'test-data',
14
- description: 'Seed test data from testData sections',
12
+ @SubCommand({
13
+ name: 'data',
14
+ description: 'Seed test data from testing.data sections',
15
15
  })
16
16
  export class TestDataCommand extends CommandRunner {
17
17
  private readonly logger = new Logger(TestDataCommand.name);
@@ -22,38 +22,38 @@ export class TestDataCommand extends CommandRunner {
22
22
 
23
23
  async run(_passedParam: string[], options?: TestDataCommandOptions): Promise<void> {
24
24
  try {
25
- const loadData = Boolean(options?.loadData);
26
- const createDatasources = Boolean(options?.createDatasources);
27
- const deleteDatasources = Boolean(options?.deleteDatasources);
25
+ const load = Boolean(options?.load);
26
+ const setup = Boolean(options?.setup);
27
+ const teardown = Boolean(options?.teardown);
28
28
 
29
- const selectedModes = [loadData, createDatasources, deleteDatasources].filter(Boolean).length;
29
+ const selectedModes = [load, setup, teardown].filter(Boolean).length;
30
30
  if (selectedModes > 1) {
31
- this.logger.error('Please specify only one of --load-data, --create-datasources, or --delete-datasources.');
32
- console.log('Please specify only one of --load-data, --create-datasources, or --delete-datasources.');
31
+ this.logger.error('Please specify only one of --load, --setup, or --teardown.');
32
+ console.log('Please specify only one of --load, --setup, or --teardown.');
33
33
  return;
34
34
  }
35
35
 
36
- if (!loadData && !createDatasources && !deleteDatasources) {
37
- this.logger.error('Please specify one of --load-data, --create-datasources, or --delete-datasources.');
38
- console.log('Please specify one of --load-data, --create-datasources, or --delete-datasources.');
36
+ if (!load && !setup && !teardown) {
37
+ this.logger.error('Please specify one of --load, --setup, or --teardown.');
38
+ console.log('Please specify one of --load, --setup, or --teardown.');
39
39
  return;
40
40
  }
41
41
 
42
- if (deleteDatasources) {
42
+ if (teardown) {
43
43
  this.logger.log('Deleting test datasource environment and databases.');
44
44
  console.log('Deleting test datasource environment and databases.');
45
45
  await this.testDataService.deleteTestDatasources();
46
46
  return;
47
47
  }
48
48
 
49
- if (createDatasources) {
49
+ if (setup) {
50
50
  this.logger.log('Creating test datasource environment file and manifest.');
51
51
  console.log('Creating test datasource environment file and manifest.');
52
52
  await this.testDataService.createTestDatasources();
53
53
  return;
54
54
  }
55
55
 
56
- if (loadData) {
56
+ if (load) {
57
57
  const modulesToTest = options?.modulesToTest ? options.modulesToTest.split(',').map((m) => m.trim()).filter(Boolean) : null;
58
58
  if (modulesToTest?.length) {
59
59
  this.logger.log(`Test data setup for modules: ${modulesToTest.join(', ')}`);
@@ -77,26 +77,26 @@ export class TestDataCommand extends CommandRunner {
77
77
  }
78
78
 
79
79
  @Option({
80
- flags: '--load-data',
81
- description: 'Seed test data from testData sections',
80
+ flags: '--load',
81
+ description: 'Seed test data from testing.data sections',
82
82
  })
83
- parseLoadData(): boolean {
83
+ parseLoad(): boolean {
84
84
  return true;
85
85
  }
86
86
 
87
87
  @Option({
88
- flags: '--create-datasources',
88
+ flags: '--setup',
89
89
  description: 'Create a new .env.<dbRunName> and test datasource manifest',
90
90
  })
91
- parseCreateDatasources(): boolean {
91
+ parseSetup(): boolean {
92
92
  return true;
93
93
  }
94
94
 
95
95
  @Option({
96
- flags: '--delete-datasources',
96
+ flags: '--teardown',
97
97
  description: 'Delete test datasource env/manifest and drop test databases',
98
98
  })
99
- parseDeleteDatasources(): boolean {
99
+ parseTeardown(): boolean {
100
100
  return true;
101
101
  }
102
102
 
@@ -0,0 +1,14 @@
1
+ import { Command, CommandRunner } from 'nest-commander';
2
+ import { TestDataCommand } from './test-data.command';
3
+ import { TestRunCommand } from './run-tests.command';
4
+
5
+ @Command({
6
+ name: 'test',
7
+ description: 'Testing utilities.',
8
+ subCommands: [TestRunCommand, TestDataCommand],
9
+ })
10
+ export class TestCommand extends CommandRunner {
11
+ async run(): Promise<void> {
12
+ console.log('Usage: solidctl test <run|data> [options]');
13
+ }
14
+ }
@@ -5,6 +5,7 @@ export const ERROR_MESSAGES = {
5
5
  USER_NOT_FOUND: 'User does not exist.',
6
6
  USER_NOT_ACTIVE: 'User profile is not activated.',
7
7
  USER_INACTIVE: 'User is inactive.',
8
+ ACCOUNT_BLOCKED: 'Your account has been blocked due to multiple failed login attempts.',
8
9
  PASSWORD_INCORRECT: 'Password does not match.',
9
10
  PUBLIC_REGISTRATION_DISABLED: 'Public registrations are disabled.',
10
11
  UNIQUE_CONSTRAINT_VIOLATION: 'A unique constraint violation occurred.',
package/src/constants.ts CHANGED
@@ -9,13 +9,13 @@ export const {
9
9
  } = new ConfigurableModuleBuilder<QueuesModuleOptions>().build();
10
10
  export const REQUEST_USER_KEY = 'user';
11
11
 
12
- export enum RegistrationValidationSource {
12
+ export enum PasswordlessLoginValidateWhatSources {
13
13
  EMAIL = 'email',
14
14
  MOBILE = 'mobile',
15
- TRANSACTIONAL = 'transactional',
15
+ SELECTABLE = 'selectable',
16
16
  }
17
17
 
18
- export enum TransactionalRegistrationValidationSource {
18
+ export enum PasswordlessRegistrationValidateWhatSources {
19
19
  EMAIL = 'email',
20
20
  MOBILE = 'mobile',
21
21
  }
@@ -1,4 +1,4 @@
1
- import { Controller, Post, Body, Param, UploadedFiles, UseInterceptors, Put, Get, Query, Delete } from '@nestjs/common';
1
+ import { Controller, Post, Body, Param, UploadedFiles, UseInterceptors, Put, Get, Query, Delete, Patch } from '@nestjs/common';
2
2
  import { AnyFilesInterceptor } from "@nestjs/platform-express";
3
3
  import { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';
4
4
  import { RoleMetadataService } from '../services/role-metadata.service';
@@ -7,31 +7,39 @@ import { UpdateRoleMetadataDto } from '../dtos/update-role-metadata.dto';
7
7
  import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
8
8
  import { SolidRequestContextDecorator } from 'src/decorators/solid-request-context.decorator';
9
9
 
10
- @ApiTags('Solid Core')
10
+ @ApiTags('Solid Core')
11
11
  @Controller('role-metadata') //FIXME: Change this to the model plural name
12
12
  export class RoleMetadataController {
13
- constructor(private readonly service: RoleMetadataService) {}
13
+ constructor(private readonly service: RoleMetadataService) { }
14
14
 
15
15
  @ApiBearerAuth("jwt")
16
16
  @Post()
17
17
  @UseInterceptors(AnyFilesInterceptor())
18
- create(@Body() createDto: CreateRoleMetadataDto, @UploadedFiles() files: Array<Express.Multer.File>,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
19
- return this.service.create(createDto, files,solidRequestContext);
18
+ create(@Body() createDto: CreateRoleMetadataDto, @UploadedFiles() files: Array<Express.Multer.File>, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
19
+ return this.service.create(createDto, files, solidRequestContext);
20
20
  }
21
21
 
22
22
  @ApiBearerAuth("jwt")
23
23
  @Post('/bulk')
24
24
  @UseInterceptors(AnyFilesInterceptor())
25
- insertMany(@Body() createDtos: CreateRoleMetadataDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = [],@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
26
- return this.service.insertMany(createDtos, filesArray,solidRequestContext);
25
+ insertMany(@Body() createDtos: CreateRoleMetadataDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = [], @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
26
+ return this.service.insertMany(createDtos, filesArray, solidRequestContext);
27
27
  }
28
28
 
29
29
 
30
30
  @ApiBearerAuth("jwt")
31
31
  @Put(':id')
32
32
  @UseInterceptors(AnyFilesInterceptor())
33
- update(@Param('id') id: number, @Body() updateDto: UpdateRoleMetadataDto, @UploadedFiles() files: Array<Express.Multer.File>,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
34
- return this.service.update(id, updateDto, files,false,solidRequestContext);
33
+ update(@Param('id') id: number, @Body() updateDto: UpdateRoleMetadataDto, @UploadedFiles() files: Array<Express.Multer.File>, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
34
+ return this.service.update(id, updateDto, files, false, solidRequestContext);
35
+ }
36
+
37
+
38
+ @ApiBearerAuth("jwt")
39
+ @Patch(':id')
40
+ @UseInterceptors(AnyFilesInterceptor())
41
+ partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateRoleMetadataDto, @UploadedFiles() files: Array<Express.Multer.File>) {
42
+ return this.service.update(id, updateDto, files, true);
35
43
  }
36
44
 
37
45
  @ApiBearerAuth("jwt")
@@ -40,31 +48,31 @@ export class RoleMetadataController {
40
48
  @ApiQuery({ name: 'limit', required: false, type: Number })
41
49
  @ApiQuery({ name: 'offset', required: false, type: Number })
42
50
  @ApiQuery({ name: 'fields', required: false, type: Array })
43
- @ApiQuery({ name: 'sort', required: false, type: Array })
51
+ @ApiQuery({ name: 'sort', required: false, type: Array })
44
52
  @ApiQuery({ name: 'groupBy', required: false, type: Array })
45
53
  @ApiQuery({ name: 'populate', required: false, type: Array })
46
54
  @ApiQuery({ name: 'populateMedia', required: false, type: Array })
47
55
  @ApiQuery({ name: 'filters', required: false, type: Array })
48
56
  @Get()
49
- async findMany(@Query() query: any,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
50
- return this.service.find(query,solidRequestContext);
57
+ async findMany(@Query() query: any, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
58
+ return this.service.find(query, solidRequestContext);
51
59
  }
52
60
 
53
61
  @ApiBearerAuth("jwt")
54
62
  @Get(':id')
55
- async findOne(@Param('id') id: string, @Query() query: any,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
56
- return this.service.findOne(+id, query,solidRequestContext);
63
+ async findOne(@Param('id') id: string, @Query() query: any, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
64
+ return this.service.findOne(+id, query, solidRequestContext);
57
65
  }
58
66
 
59
67
  @Delete('/bulk')
60
- async deleteMany(@Body() ids: number[],@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
61
- return this.service.deleteMany(ids,solidRequestContext);
68
+ async deleteMany(@Body() ids: number[], @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
69
+ return this.service.deleteMany(ids, solidRequestContext);
62
70
  }
63
71
 
64
72
  @ApiBearerAuth("jwt")
65
73
  @Delete(':id')
66
- async delete (@Param('id') id: number,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
67
- return this.service.delete(id,solidRequestContext);
74
+ async delete(@Param('id') id: number, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
75
+ return this.service.delete(id, solidRequestContext);
68
76
  }
69
77
 
70
78
 
@@ -26,7 +26,6 @@ export class ServiceController {
26
26
  private readonly mqMessageService: MqMessageService,
27
27
  private readonly errorMapper: ErrorMapperService,
28
28
  private readonly ingestMetadataService: IngestMetadataService,
29
-
30
29
  ) { }
31
30
 
32
31
  @Public()
@@ -35,64 +34,64 @@ export class ServiceController {
35
34
  return { pong: 'v1.0.2' };
36
35
  }
37
36
 
38
- @ApiBearerAuth("jwt")
39
- @Get('mcp/ping')
40
- async mcpPingPong(@ActiveUser() activeUser: ActiveUserData) {
41
- // TODO: do a MCP client invocation, wait for response and return.
42
- // If failure then decide shape to return.
43
-
44
- const threadId = `pingPongTxn-${activeUser.sub}`;
45
- const dto ={prompt:"Can you do 1 + 1", moduleName:"solidCoreModule"}
46
- const { queueMessageId, aiInteractionId } = await this.aiInteractionService.triggerMcpClientJob(
47
- dto,
48
- activeUser.sub,
49
- true,
50
- threadId
51
- );
52
-
53
- this.logger.debug(`mcp ping pong job triggered: queueMessageId=${queueMessageId}, aiInteractionId=${aiInteractionId}`);
54
-
55
- // Wait up to 2 minutes, start at 500ms poll, back off to max 2s, throw if failed:
56
- const result = await this.mqMessageService.waitForTerminalStatus(queueMessageId, {
57
- timeoutMs: 2 * 60 * 1000,
58
- intervalMs: 500,
59
- maxIntervalMs: 2000,
60
- throwOnFailure: false,
61
- });
62
-
63
- this.logger.debug(`mcp ping pong job finished with stage=${result.stage}`)
64
-
65
- this.logger.debug(`mcp ping pong trying to find genai (child) interaction for aiInteraction for id=${aiInteractionId}`)
66
-
67
- // @ts-ignore
68
- const genAiInteractions = await this.aiInteractionService.find({
69
- filters: {
70
- parentInteraction: {
71
- id: {
72
- $eq: aiInteractionId
73
- }
74
- }
75
- }
76
- });
77
-
78
- const genAiInteraction = genAiInteractions['records'][0];
79
- this.logger.debug(genAiInteraction.message);
80
-
81
- this.logger.debug(`identified gen-ai interaction with id=${genAiInteraction.id}`);
82
- this.logger.debug(`proceeding with applying the gen-ai interaction`)
83
-
84
- return {
85
- mcpPong: 'v1.0.2',
86
- genAiInteraction: {
87
- status: genAiInteraction.status,
88
- errorCode: genAiInteraction.status === 'failed' ? this.errorMapper.mapMessage(genAiInteraction.errorMessage, genAiInteraction.metadata) : '',
89
- errorMessage: genAiInteraction.errorMessage,
90
- }
91
- };
92
- }
37
+ // @ApiBearerAuth("jwt")
38
+ // @Get('mcp/ping')
39
+ // async mcpPingPong(@ActiveUser() activeUser: ActiveUserData) {
40
+ // // TODO: do a MCP client invocation, wait for response and return.
41
+ // // If failure then decide shape to return.
42
+
43
+ // const threadId = `pingPongTxn-${activeUser.sub}`;
44
+ // const dto = { prompt: "Can you do 1 + 1", moduleName: "solidCoreModule" }
45
+ // const { queueMessageId, aiInteractionId } = await this.aiInteractionService.triggerMcpClientJob(
46
+ // dto,
47
+ // activeUser.sub,
48
+ // true,
49
+ // threadId
50
+ // );
51
+
52
+ // this.logger.debug(`mcp ping pong job triggered: queueMessageId=${queueMessageId}, aiInteractionId=${aiInteractionId}`);
53
+
54
+ // // Wait up to 2 minutes, start at 500ms poll, back off to max 2s, throw if failed:
55
+ // const result = await this.mqMessageService.waitForTerminalStatus(queueMessageId, {
56
+ // timeoutMs: 2 * 60 * 1000,
57
+ // intervalMs: 500,
58
+ // maxIntervalMs: 2000,
59
+ // throwOnFailure: false,
60
+ // });
61
+
62
+ // this.logger.debug(`mcp ping pong job finished with stage=${result.stage}`)
63
+
64
+ // this.logger.debug(`mcp ping pong trying to find genai (child) interaction for aiInteraction for id=${aiInteractionId}`)
65
+
66
+ // // @ts-ignore
67
+ // const genAiInteractions = await this.aiInteractionService.find({
68
+ // filters: {
69
+ // parentInteraction: {
70
+ // id: {
71
+ // $eq: aiInteractionId
72
+ // }
73
+ // }
74
+ // }
75
+ // });
76
+
77
+ // const genAiInteraction = genAiInteractions['records'][0];
78
+ // this.logger.debug(genAiInteraction.message);
79
+
80
+ // this.logger.debug(`identified gen-ai interaction with id=${genAiInteraction.id}`);
81
+ // this.logger.debug(`proceeding with applying the gen-ai interaction`)
82
+
83
+ // return {
84
+ // mcpPong: 'v1.0.2',
85
+ // genAiInteraction: {
86
+ // status: genAiInteraction.status,
87
+ // errorCode: genAiInteraction.status === 'failed' ? this.errorMapper.mapMessage(genAiInteraction.errorMessage, genAiInteraction.metadata) : '',
88
+ // errorMessage: genAiInteraction.errorMessage,
89
+ // }
90
+ // };
91
+ // }
93
92
 
94
- @Public()
95
93
  // @SkipThrottle({ short: false, login: true, burst: true, sustained: true }) //Enable the short throttle only
94
+ @ApiBearerAuth("jwt")
96
95
  @Post('seed')
97
96
  async seedData(@Body() seedData: any) {
98
97
  const seeder = this.solidRegistry
@@ -111,7 +110,7 @@ export class ServiceController {
111
110
 
112
111
  @ApiBearerAuth("jwt")
113
112
  @Post('code-generation/post-process')
114
- async postProcessCodeGeneration(@Body() config : PostProcessCodeGenConfig) {
113
+ async postProcessCodeGeneration(@Body() config: PostProcessCodeGenConfig) {
115
114
  // Set defaults if not provided
116
115
  config.runModuleMetadataSeeder = config.runModuleMetadataSeeder ?? true;
117
116
  config.runSolidIngestion = config.runSolidIngestion ?? true;
@@ -132,7 +131,7 @@ export class ServiceController {
132
131
  } else {
133
132
  this.logger.debug(`Skipping the Module Metadata Seeder Service as part of post-process code generation`);
134
133
  }
135
-
134
+
136
135
  // Run the Solid ingestion command
137
136
  if (config.runSolidIngestion) {
138
137
  this.logger.debug(`Running the Solid ingestion command as part of post-process code generation`);