aws-service-stack 0.18.419 → 0.18.421

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 (294) hide show
  1. package/dist/_examples/controller/profile/profile.config.js +1 -1
  2. package/dist/_examples/controller/profile/profile.config.js.map +1 -1
  3. package/dist/_examples/controller/profile/profile.controller.d.ts +1 -1
  4. package/dist/_examples/controller/profile/profile.controller.js +1 -0
  5. package/dist/_examples/controller/profile/profile.controller.js.map +1 -1
  6. package/dist/_examples/model-shared/example.model.d.ts +0 -12
  7. package/dist/_examples/model-shared/example.model.js.map +1 -1
  8. package/dist/controller/base-controller.js +5 -2
  9. package/dist/controller/base-controller.js.map +1 -1
  10. package/dist/controller/controller-api.d.ts +2 -2
  11. package/dist/controller/controller-api.js +10 -12
  12. package/dist/controller/controller-api.js.map +1 -1
  13. package/dist/controller/controller-request.d.ts +2 -2
  14. package/dist/controller/controller-request.js +7 -7
  15. package/dist/controller/controller-request.js.map +1 -1
  16. package/dist/exception/errors.d.ts +5 -5
  17. package/dist/exception/errors.js +9 -5
  18. package/dist/exception/errors.js.map +1 -1
  19. package/dist/exception/exception-handler.d.ts +62 -60
  20. package/dist/exception/exception-handler.js +87 -98
  21. package/dist/exception/exception-handler.js.map +1 -1
  22. package/dist/service/crud.service.d.ts +7 -0
  23. package/dist/service/crud.service.interface.d.ts +15 -0
  24. package/dist/service/crud.service.interface.js.map +1 -1
  25. package/dist/service/crud.service.js +34 -0
  26. package/dist/service/crud.service.js.map +1 -1
  27. package/package.json +6 -6
  28. package/dist/_examples/controller/branch/branch-config.d.ts +0 -6
  29. package/dist/_examples/controller/branch/branch-config.js +0 -47
  30. package/dist/_examples/controller/branch/branch-config.js.map +0 -1
  31. package/dist/_examples/controller/branch/branch-controller.d.ts +0 -16
  32. package/dist/_examples/controller/branch/branch-controller.js +0 -77
  33. package/dist/_examples/controller/branch/branch-controller.js.map +0 -1
  34. package/dist/_examples/controller/branch/branch-crud.d.ts +0 -4
  35. package/dist/_examples/controller/branch/branch-crud.js +0 -57
  36. package/dist/_examples/controller/branch/branch-crud.js.map +0 -1
  37. package/dist/_examples/controller/commission/commission-controller.d.ts +0 -9
  38. package/dist/_examples/controller/commission/commission-controller.js +0 -66
  39. package/dist/_examples/controller/commission/commission-controller.js.map +0 -1
  40. package/dist/_examples/controller/commission/commission-crud.d.ts +0 -4
  41. package/dist/_examples/controller/commission/commission-crud.js +0 -57
  42. package/dist/_examples/controller/commission/commission-crud.js.map +0 -1
  43. package/dist/_examples/controller/commission/commission.config.d.ts +0 -6
  44. package/dist/_examples/controller/commission/commission.config.js +0 -46
  45. package/dist/_examples/controller/commission/commission.config.js.map +0 -1
  46. package/dist/_examples/controller/e-order/e-order-crud-simple.d.ts +0 -2
  47. package/dist/_examples/controller/e-order/e-order-crud-simple.js +0 -294
  48. package/dist/_examples/controller/e-order/e-order-crud-simple.js.map +0 -1
  49. package/dist/_examples/controller/e-order/e-order-crud.d.ts +0 -4
  50. package/dist/_examples/controller/e-order/e-order-crud.js +0 -58
  51. package/dist/_examples/controller/e-order/e-order-crud.js.map +0 -1
  52. package/dist/_examples/controller/e-order/e-order.config.d.ts +0 -10
  53. package/dist/_examples/controller/e-order/e-order.config.js +0 -53
  54. package/dist/_examples/controller/e-order/e-order.config.js.map +0 -1
  55. package/dist/_examples/controller/e-order/e-order.controller.d.ts +0 -13
  56. package/dist/_examples/controller/e-order/e-order.controller.js +0 -68
  57. package/dist/_examples/controller/e-order/e-order.controller.js.map +0 -1
  58. package/dist/_examples/controller/entity/entity-config.d.ts +0 -10
  59. package/dist/_examples/controller/entity/entity-config.js +0 -49
  60. package/dist/_examples/controller/entity/entity-config.js.map +0 -1
  61. package/dist/_examples/controller/entity/entity-controller.d.ts +0 -13
  62. package/dist/_examples/controller/entity/entity-controller.js +0 -74
  63. package/dist/_examples/controller/entity/entity-controller.js.map +0 -1
  64. package/dist/_examples/controller/entity/entity-crud.d.ts +0 -4
  65. package/dist/_examples/controller/entity/entity-crud.js +0 -60
  66. package/dist/_examples/controller/entity/entity-crud.js.map +0 -1
  67. package/dist/_examples/controller/index.d.ts +0 -3
  68. package/dist/_examples/controller/index.js +0 -74
  69. package/dist/_examples/controller/index.js.map +0 -1
  70. package/dist/_examples/controller/local-task-controller.d.ts +0 -2
  71. package/dist/_examples/controller/local-task-controller.js +0 -23
  72. package/dist/_examples/controller/local-task-controller.js.map +0 -1
  73. package/dist/_examples/controller/product/product.config.d.ts +0 -12
  74. package/dist/_examples/controller/product/product.config.js +0 -33
  75. package/dist/_examples/controller/product/product.config.js.map +0 -1
  76. package/dist/_examples/controller/properties/properties-crud.d.ts +0 -4
  77. package/dist/_examples/controller/properties/properties-crud.js +0 -58
  78. package/dist/_examples/controller/properties/properties-crud.js.map +0 -1
  79. package/dist/_examples/controller/properties/property.config.d.ts +0 -10
  80. package/dist/_examples/controller/properties/property.config.js +0 -51
  81. package/dist/_examples/controller/properties/property.config.js.map +0 -1
  82. package/dist/_examples/controller/properties/property.controller.d.ts +0 -13
  83. package/dist/_examples/controller/properties/property.controller.js +0 -68
  84. package/dist/_examples/controller/properties/property.controller.js.map +0 -1
  85. package/dist/_examples/controller/raccount/raccount-config.d.ts +0 -6
  86. package/dist/_examples/controller/raccount/raccount-config.js +0 -60
  87. package/dist/_examples/controller/raccount/raccount-config.js.map +0 -1
  88. package/dist/_examples/controller/raccount/raccount-controller.d.ts +0 -14
  89. package/dist/_examples/controller/raccount/raccount-controller.js +0 -73
  90. package/dist/_examples/controller/raccount/raccount-controller.js.map +0 -1
  91. package/dist/_examples/controller/raccount/raccount-crud.d.ts +0 -4
  92. package/dist/_examples/controller/raccount/raccount-crud.js +0 -57
  93. package/dist/_examples/controller/raccount/raccount-crud.js.map +0 -1
  94. package/dist/_examples/controller/rorder/order-config.d.ts +0 -6
  95. package/dist/_examples/controller/rorder/order-config.js +0 -48
  96. package/dist/_examples/controller/rorder/order-config.js.map +0 -1
  97. package/dist/_examples/controller/rorder/order-controller.d.ts +0 -9
  98. package/dist/_examples/controller/rorder/order-controller.js +0 -66
  99. package/dist/_examples/controller/rorder/order-controller.js.map +0 -1
  100. package/dist/_examples/controller/rorder/order-crud.d.ts +0 -4
  101. package/dist/_examples/controller/rorder/order-crud.js +0 -57
  102. package/dist/_examples/controller/rorder/order-crud.js.map +0 -1
  103. package/dist/_examples/controller/supplier/supplier-config.d.ts +0 -10
  104. package/dist/_examples/controller/supplier/supplier-config.js +0 -70
  105. package/dist/_examples/controller/supplier/supplier-config.js.map +0 -1
  106. package/dist/_examples/controller/supplier/supplier-controller-api.d.ts +0 -9
  107. package/dist/_examples/controller/supplier/supplier-controller-api.js +0 -69
  108. package/dist/_examples/controller/supplier/supplier-controller-api.js.map +0 -1
  109. package/dist/_examples/controller/supplier/supplier-controller-stream.d.ts +0 -12
  110. package/dist/_examples/controller/supplier/supplier-controller-stream.js +0 -67
  111. package/dist/_examples/controller/supplier/supplier-controller-stream.js.map +0 -1
  112. package/dist/_examples/controller/supplier/supplier-crud.d.ts +0 -4
  113. package/dist/_examples/controller/supplier/supplier-crud.js +0 -60
  114. package/dist/_examples/controller/supplier/supplier-crud.js.map +0 -1
  115. package/dist/_examples/controller/supplier/supplier-streamer.d.ts +0 -4
  116. package/dist/_examples/controller/supplier/supplier-streamer.js +0 -58
  117. package/dist/_examples/controller/supplier/supplier-streamer.js.map +0 -1
  118. package/dist/_examples/controller/user/user.config.d.ts +0 -12
  119. package/dist/_examples/controller/user/user.config.js +0 -30
  120. package/dist/_examples/controller/user/user.config.js.map +0 -1
  121. package/dist/_examples/controller/user.controller.d.ts +0 -15
  122. package/dist/_examples/controller/user.controller.js +0 -30
  123. package/dist/_examples/controller/user.controller.js.map +0 -1
  124. package/dist/_examples/controller/users/users-crud.d.ts +0 -4
  125. package/dist/_examples/controller/users/users-crud.js +0 -58
  126. package/dist/_examples/controller/users/users-crud.js.map +0 -1
  127. package/dist/_examples/controller/users/users.config.d.ts +0 -10
  128. package/dist/_examples/controller/users/users.config.js +0 -51
  129. package/dist/_examples/controller/users/users.config.js.map +0 -1
  130. package/dist/_examples/controller/users/users.controller.d.ts +0 -13
  131. package/dist/_examples/controller/users/users.controller.js +0 -68
  132. package/dist/_examples/controller/users/users.controller.js.map +0 -1
  133. package/dist/_examples/model/user.model.d.ts +0 -1
  134. package/dist/_examples/model/user.model.js +0 -3
  135. package/dist/_examples/model/user.model.js.map +0 -1
  136. package/dist/_examples/model-shared/address.model.d.ts +0 -18
  137. package/dist/_examples/model-shared/address.model.js +0 -3
  138. package/dist/_examples/model-shared/address.model.js.map +0 -1
  139. package/dist/_examples/model-shared/branch.model.d.ts +0 -72
  140. package/dist/_examples/model-shared/branch.model.js +0 -64
  141. package/dist/_examples/model-shared/branch.model.js.map +0 -1
  142. package/dist/_examples/model-shared/commission.model.d.ts +0 -30
  143. package/dist/_examples/model-shared/commission.model.js +0 -38
  144. package/dist/_examples/model-shared/commission.model.js.map +0 -1
  145. package/dist/_examples/model-shared/raccount.model.d.ts +0 -134
  146. package/dist/_examples/model-shared/raccount.model.js +0 -187
  147. package/dist/_examples/model-shared/raccount.model.js.map +0 -1
  148. package/dist/_examples/model-shared/suppler.model-to-remove.d.ts +0 -119
  149. package/dist/_examples/model-shared/suppler.model-to-remove.js +0 -103
  150. package/dist/_examples/model-shared/suppler.model-to-remove.js.map +0 -1
  151. package/dist/_examples/model-shared/supplier-portal.model.d.ts +0 -22862
  152. package/dist/_examples/model-shared/supplier-portal.model.js +0 -1035
  153. package/dist/_examples/model-shared/supplier-portal.model.js.map +0 -1
  154. package/dist/_examples/model-shared/supplier.model.d.ts +0 -77
  155. package/dist/_examples/model-shared/supplier.model.js +0 -124
  156. package/dist/_examples/model-shared/supplier.model.js.map +0 -1
  157. package/dist/_examples/repositories/branch/branch-db.repo.d.ts +0 -6
  158. package/dist/_examples/repositories/branch/branch-db.repo.interface.d.ts +0 -4
  159. package/dist/_examples/repositories/branch/branch-db.repo.interface.js +0 -3
  160. package/dist/_examples/repositories/branch/branch-db.repo.interface.js.map +0 -1
  161. package/dist/_examples/repositories/branch/branch-db.repo.js +0 -19
  162. package/dist/_examples/repositories/branch/branch-db.repo.js.map +0 -1
  163. package/dist/_examples/repositories/commission/commission-repo-db.d.ts +0 -5
  164. package/dist/_examples/repositories/commission/commission-repo-db.interface.d.ts +0 -4
  165. package/dist/_examples/repositories/commission/commission-repo-db.interface.js +0 -3
  166. package/dist/_examples/repositories/commission/commission-repo-db.interface.js.map +0 -1
  167. package/dist/_examples/repositories/commission/commission-repo-db.js +0 -18
  168. package/dist/_examples/repositories/commission/commission-repo-db.js.map +0 -1
  169. package/dist/_examples/repositories/entity/entity-repo-db.d.ts +0 -6
  170. package/dist/_examples/repositories/entity/entity-repo-db.interface.d.ts +0 -4
  171. package/dist/_examples/repositories/entity/entity-repo-db.interface.js +0 -3
  172. package/dist/_examples/repositories/entity/entity-repo-db.interface.js.map +0 -1
  173. package/dist/_examples/repositories/entity/entity-repo-db.js +0 -19
  174. package/dist/_examples/repositories/entity/entity-repo-db.js.map +0 -1
  175. package/dist/_examples/repositories/entity/entity-repo-erp-acs.interface.d.ts +0 -3
  176. package/dist/_examples/repositories/entity/entity-repo-erp-acs.interface.js +0 -3
  177. package/dist/_examples/repositories/entity/entity-repo-erp-acs.interface.js.map +0 -1
  178. package/dist/_examples/repositories/entity/entity-repo-erp-coremind.d.ts +0 -0
  179. package/dist/_examples/repositories/entity/entity-repo-erp-coremind.js +0 -2
  180. package/dist/_examples/repositories/entity/entity-repo-erp-coremind.js.map +0 -1
  181. package/dist/_examples/repositories/entity/entity-repo-es.d.ts +0 -6
  182. package/dist/_examples/repositories/entity/entity-repo-es.interface.d.ts +0 -4
  183. package/dist/_examples/repositories/entity/entity-repo-es.interface.js +0 -3
  184. package/dist/_examples/repositories/entity/entity-repo-es.interface.js.map +0 -1
  185. package/dist/_examples/repositories/entity/entity-repo-es.js +0 -19
  186. package/dist/_examples/repositories/entity/entity-repo-es.js.map +0 -1
  187. package/dist/_examples/repositories/order/order-es.repo.d.ts +0 -12
  188. package/dist/_examples/repositories/order/order-es.repo.interface.d.ts +0 -7
  189. package/dist/_examples/repositories/order/order-es.repo.interface.js +0 -3
  190. package/dist/_examples/repositories/order/order-es.repo.interface.js.map +0 -1
  191. package/dist/_examples/repositories/order/order-es.repo.js +0 -64
  192. package/dist/_examples/repositories/order/order-es.repo.js.map +0 -1
  193. package/dist/_examples/repositories/order/order-repo-db.d.ts +0 -6
  194. package/dist/_examples/repositories/order/order-repo-db.interface.d.ts +0 -17
  195. package/dist/_examples/repositories/order/order-repo-db.interface.js +0 -22
  196. package/dist/_examples/repositories/order/order-repo-db.interface.js.map +0 -1
  197. package/dist/_examples/repositories/order/order-repo-db.js +0 -19
  198. package/dist/_examples/repositories/order/order-repo-db.js.map +0 -1
  199. package/dist/_examples/repositories/raccount/raccount-db.repo.d.ts +0 -5
  200. package/dist/_examples/repositories/raccount/raccount-db.repo.interface.d.ts +0 -4
  201. package/dist/_examples/repositories/raccount/raccount-db.repo.interface.js +0 -3
  202. package/dist/_examples/repositories/raccount/raccount-db.repo.interface.js.map +0 -1
  203. package/dist/_examples/repositories/raccount/raccount-db.repo.js +0 -18
  204. package/dist/_examples/repositories/raccount/raccount-db.repo.js.map +0 -1
  205. package/dist/_examples/repositories/raccount/raccount-es.repo.d.ts +0 -6
  206. package/dist/_examples/repositories/raccount/raccount-es.repo.interface.d.ts +0 -4
  207. package/dist/_examples/repositories/raccount/raccount-es.repo.interface.js +0 -3
  208. package/dist/_examples/repositories/raccount/raccount-es.repo.interface.js.map +0 -1
  209. package/dist/_examples/repositories/raccount/raccount-es.repo.js +0 -19
  210. package/dist/_examples/repositories/raccount/raccount-es.repo.js.map +0 -1
  211. package/dist/_examples/repositories/rorder/rorder-db.repo.d.ts +0 -5
  212. package/dist/_examples/repositories/rorder/rorder-db.repo.interface.d.ts +0 -4
  213. package/dist/_examples/repositories/rorder/rorder-db.repo.interface.js +0 -3
  214. package/dist/_examples/repositories/rorder/rorder-db.repo.interface.js.map +0 -1
  215. package/dist/_examples/repositories/rorder/rorder-db.repo.js +0 -18
  216. package/dist/_examples/repositories/rorder/rorder-db.repo.js.map +0 -1
  217. package/dist/_examples/repositories/rorder/rorder-es.repo.d.ts +0 -7
  218. package/dist/_examples/repositories/rorder/rorder-es.repo.interface.d.ts +0 -5
  219. package/dist/_examples/repositories/rorder/rorder-es.repo.interface.js +0 -3
  220. package/dist/_examples/repositories/rorder/rorder-es.repo.interface.js.map +0 -1
  221. package/dist/_examples/repositories/rorder/rorder-es.repo.js +0 -22
  222. package/dist/_examples/repositories/rorder/rorder-es.repo.js.map +0 -1
  223. package/dist/_examples/repositories/supplier/supplier-repo-db.d.ts +0 -6
  224. package/dist/_examples/repositories/supplier/supplier-repo-db.interface.d.ts +0 -4
  225. package/dist/_examples/repositories/supplier/supplier-repo-db.interface.js +0 -3
  226. package/dist/_examples/repositories/supplier/supplier-repo-db.interface.js.map +0 -1
  227. package/dist/_examples/repositories/supplier/supplier-repo-db.js +0 -19
  228. package/dist/_examples/repositories/supplier/supplier-repo-db.js.map +0 -1
  229. package/dist/_examples/repositories/supplier/supplier-repo-es.d.ts +0 -6
  230. package/dist/_examples/repositories/supplier/supplier-repo-es.interface.d.ts +0 -4
  231. package/dist/_examples/repositories/supplier/supplier-repo-es.interface.js +0 -3
  232. package/dist/_examples/repositories/supplier/supplier-repo-es.interface.js.map +0 -1
  233. package/dist/_examples/repositories/supplier/supplier-repo-es.js +0 -19
  234. package/dist/_examples/repositories/supplier/supplier-repo-es.js.map +0 -1
  235. package/dist/_examples/repositories/user-repo-db.d.ts +0 -7
  236. package/dist/_examples/repositories/user-repo-db.interface.d.ts +0 -5
  237. package/dist/_examples/repositories/user-repo-db.interface.js +0 -3
  238. package/dist/_examples/repositories/user-repo-db.interface.js.map +0 -1
  239. package/dist/_examples/repositories/user-repo-db.js +0 -24
  240. package/dist/_examples/repositories/user-repo-db.js.map +0 -1
  241. package/dist/_examples/service/branch/branch-service.d.ts +0 -13
  242. package/dist/_examples/service/branch/branch-service.interface.d.ts +0 -4
  243. package/dist/_examples/service/branch/branch-service.interface.js +0 -3
  244. package/dist/_examples/service/branch/branch-service.interface.js.map +0 -1
  245. package/dist/_examples/service/branch/branch-service.js +0 -70
  246. package/dist/_examples/service/branch/branch-service.js.map +0 -1
  247. package/dist/_examples/service/commission/commission-service.d.ts +0 -15
  248. package/dist/_examples/service/commission/commission-service.interface.d.ts +0 -6
  249. package/dist/_examples/service/commission/commission-service.interface.js +0 -3
  250. package/dist/_examples/service/commission/commission-service.interface.js.map +0 -1
  251. package/dist/_examples/service/commission/commission-service.js +0 -116
  252. package/dist/_examples/service/commission/commission-service.js.map +0 -1
  253. package/dist/_examples/service/entity/entity-service.d.ts +0 -13
  254. package/dist/_examples/service/entity/entity-service.interface.d.ts +0 -5
  255. package/dist/_examples/service/entity/entity-service.interface.js +0 -3
  256. package/dist/_examples/service/entity/entity-service.interface.js.map +0 -1
  257. package/dist/_examples/service/entity/entity-service.js +0 -92
  258. package/dist/_examples/service/entity/entity-service.js.map +0 -1
  259. package/dist/_examples/service/order-service.d.ts +0 -12
  260. package/dist/_examples/service/order-service.interface.d.ts +0 -5
  261. package/dist/_examples/service/order-service.interface.js +0 -4
  262. package/dist/_examples/service/order-service.interface.js.map +0 -1
  263. package/dist/_examples/service/order-service.js +0 -31
  264. package/dist/_examples/service/order-service.js.map +0 -1
  265. package/dist/_examples/service/raccount/raccount-service.d.ts +0 -10
  266. package/dist/_examples/service/raccount/raccount-service.interface.d.ts +0 -4
  267. package/dist/_examples/service/raccount/raccount-service.interface.js +0 -3
  268. package/dist/_examples/service/raccount/raccount-service.interface.js.map +0 -1
  269. package/dist/_examples/service/raccount/raccount-service.js +0 -64
  270. package/dist/_examples/service/raccount/raccount-service.js.map +0 -1
  271. package/dist/_examples/service/rorder/rorder-service.d.ts +0 -11
  272. package/dist/_examples/service/rorder/rorder-service.interface.d.ts +0 -10
  273. package/dist/_examples/service/rorder/rorder-service.interface.js +0 -3
  274. package/dist/_examples/service/rorder/rorder-service.interface.js.map +0 -1
  275. package/dist/_examples/service/rorder/rorder-service.js +0 -65
  276. package/dist/_examples/service/rorder/rorder-service.js.map +0 -1
  277. package/dist/_examples/service/supplier/supplier-service-crud.d.ts +0 -25
  278. package/dist/_examples/service/supplier/supplier-service-crud.interface.d.ts +0 -14
  279. package/dist/_examples/service/supplier/supplier-service-crud.interface.js +0 -3
  280. package/dist/_examples/service/supplier/supplier-service-crud.interface.js.map +0 -1
  281. package/dist/_examples/service/supplier/supplier-service-crud.js +0 -129
  282. package/dist/_examples/service/supplier/supplier-service-crud.js.map +0 -1
  283. package/dist/_examples/service/supplier/supplier-service-stream.d.ts +0 -13
  284. package/dist/_examples/service/supplier/supplier-service-stream.interface.d.ts +0 -5
  285. package/dist/_examples/service/supplier/supplier-service-stream.interface.js +0 -4
  286. package/dist/_examples/service/supplier/supplier-service-stream.interface.js.map +0 -1
  287. package/dist/_examples/service/supplier/supplier-service-stream.js +0 -72
  288. package/dist/_examples/service/supplier/supplier-service-stream.js.map +0 -1
  289. package/dist/_examples/service/user-service.d.ts +0 -11
  290. package/dist/_examples/service/user-service.interface.d.ts +0 -5
  291. package/dist/_examples/service/user-service.interface.js +0 -3
  292. package/dist/_examples/service/user-service.interface.js.map +0 -1
  293. package/dist/_examples/service/user-service.js +0 -41
  294. package/dist/_examples/service/user-service.js.map +0 -1
@@ -21,7 +21,7 @@ class ProfileConfig extends base_config_1.EntityConfigImpl {
21
21
  * INDEX_MAP
22
22
  * */
23
23
  const indexMap = new core_1.DynamoIndexMap()
24
- .setFields("profileId")
24
+ // .setFields("profileId")
25
25
  .set("byPhone", { field: "phone", rFields: ["phone"] })
26
26
  .set("byVerifyPhone", { field: "toVerifyPhone", rFields: ["toVerifyPhone"] })
27
27
  .set("byEmail", { field: "email", rFields: ["email"] })
@@ -1 +1 @@
1
- {"version":3,"file":"profile.config.js","sourceRoot":"","sources":["../../../../src/_examples/controller/profile/profile.config.ts"],"names":[],"mappings":"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","sourcesContent":["import { Access, DynamoIndexMap, HttpMethod } from \"@chinggis/core\";\nimport { EntityConfigImpl } from \"../../../model/base.config\";\nimport { z } from \"zod\";\n\n/**\n * Profile-specific configuration extending generic EntityConfig\n */\nexport class ProfileConfig extends EntityConfigImpl {\n constructor() {\n /**\n * BASE\n * */\n const tableName = \"Profile-s4ph7chlarhupiqw7ml47pmehq-dev\";\n const opensearchIndex = \"profiles\"; // demo\n const basePath = \"profiles\"; // url path base\n const ownerFieldName = \"profileId\";\n const adminGroupNames = [\"admin\"];\n\n /**\n * INDEX_MAP\n * */\n const indexMap = new DynamoIndexMap()\n .setFields(\"profileId\")\n .set(\"byPhone\", { field: \"phone\", rFields: [\"phone\"] })\n .set(\"byVerifyPhone\", { field: \"toVerifyPhone\", rFields: [\"toVerifyPhone\"] })\n .set(\"byEmail\", { field: \"email\", rFields: [\"email\"] })\n .set(\"byCardNumber\", { field: \"cardNumber\", rFields: [\"cardNumber\"] });\n\n /**\n * PERMISSIONS\n * */\n const permissions = [\n {\n method: HttpMethod.GET,\n path: `/${basePath}`,\n access: [Access.PUBLIC, Access.USER, Access.OWNER, Access.ADMIN],\n },\n { method: HttpMethod.GET, path: `/${basePath}/{id}`, access: [Access.OWNER, Access.ADMIN] },\n { method: HttpMethod.POST, path: `/${basePath}`, access: [Access.ADMIN] },\n { method: HttpMethod.PUT, path: `/${basePath}/{id}`, access: [Access.OWNER, Access.ADMIN] },\n { method: HttpMethod.PATCH, path: `/${basePath}/{id}`, access: [Access.OWNER, Access.ADMIN] },\n { method: HttpMethod.DELETE, path: `/${basePath}/{id}`, access: [Access.ADMIN] },\n ];\n\n /**\n * VALIDATORS\n * */\n const createValidator = z.object({\n phone: z.string().min(10).max(15).optional(),\n email: z.string().email().optional(),\n cardNumber: z.string().min(16).max(19).optional(),\n firstName: z.string().min(1).max(50),\n lastName: z.string().min(1).max(50),\n dateOfBirth: z.string().datetime().optional(),\n });\n\n const updateValidator = z.object({\n phone: z.string().min(10).max(15).optional(),\n email: z.string().email().optional(),\n cardNumber: z.string().min(16).max(19).optional(),\n firstName: z.string().min(1).max(50).optional(),\n lastName: z.string().min(1).max(50).optional(),\n dateOfBirth: z.string().datetime().optional(),\n });\n\n super(basePath, adminGroupNames);\n\n this.setDynamoDB(tableName, ownerFieldName, indexMap)\n .setOpenSearch(opensearchIndex, \"profile\")\n .setPolicies(permissions);\n }\n}\n\n// Export default Profile configuration\nexport const CONFIG_PROFILE = new ProfileConfig();\n"]}
1
+ {"version":3,"file":"profile.config.js","sourceRoot":"","sources":["../../../../src/_examples/controller/profile/profile.config.ts"],"names":[],"mappings":"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","sourcesContent":["import { Access, DynamoIndexMap, HttpMethod } from \"@chinggis/core\";\nimport { EntityConfigImpl } from \"../../../model/base.config\";\nimport { z } from \"zod\";\n\n/**\n * Profile-specific configuration extending generic EntityConfig\n */\nexport class ProfileConfig extends EntityConfigImpl {\n constructor() {\n /**\n * BASE\n * */\n const tableName = \"Profile-s4ph7chlarhupiqw7ml47pmehq-dev\";\n const opensearchIndex = \"profiles\"; // demo\n const basePath = \"profiles\"; // url path base\n const ownerFieldName = \"profileId\";\n const adminGroupNames = [\"admin\"];\n\n /**\n * INDEX_MAP\n * */\n const indexMap = new DynamoIndexMap()\n // .setFields(\"profileId\")\n .set(\"byPhone\", { field: \"phone\", rFields: [\"phone\"] })\n .set(\"byVerifyPhone\", { field: \"toVerifyPhone\", rFields: [\"toVerifyPhone\"] })\n .set(\"byEmail\", { field: \"email\", rFields: [\"email\"] })\n .set(\"byCardNumber\", { field: \"cardNumber\", rFields: [\"cardNumber\"] });\n\n /**\n * PERMISSIONS\n * */\n const permissions = [\n {\n method: HttpMethod.GET,\n path: `/${basePath}`,\n access: [Access.PUBLIC, Access.USER, Access.OWNER, Access.ADMIN],\n },\n { method: HttpMethod.GET, path: `/${basePath}/{id}`, access: [Access.OWNER, Access.ADMIN] },\n { method: HttpMethod.POST, path: `/${basePath}`, access: [Access.ADMIN] },\n { method: HttpMethod.PUT, path: `/${basePath}/{id}`, access: [Access.OWNER, Access.ADMIN] },\n { method: HttpMethod.PATCH, path: `/${basePath}/{id}`, access: [Access.OWNER, Access.ADMIN] },\n { method: HttpMethod.DELETE, path: `/${basePath}/{id}`, access: [Access.ADMIN] },\n ];\n\n /**\n * VALIDATORS\n * */\n const createValidator = z.object({\n phone: z.string().min(10).max(15).optional(),\n email: z.string().email().optional(),\n cardNumber: z.string().min(16).max(19).optional(),\n firstName: z.string().min(1).max(50),\n lastName: z.string().min(1).max(50),\n dateOfBirth: z.string().datetime().optional(),\n });\n\n const updateValidator = z.object({\n phone: z.string().min(10).max(15).optional(),\n email: z.string().email().optional(),\n cardNumber: z.string().min(16).max(19).optional(),\n firstName: z.string().min(1).max(50).optional(),\n lastName: z.string().min(1).max(50).optional(),\n dateOfBirth: z.string().datetime().optional(),\n });\n\n super(basePath, adminGroupNames);\n\n this.setDynamoDB(tableName, ownerFieldName, indexMap)\n .setOpenSearch(opensearchIndex, \"profile\")\n .setPolicies(permissions);\n }\n}\n\n// Export default Profile configuration\nexport const CONFIG_PROFILE = new ProfileConfig();\n"]}
@@ -2,7 +2,7 @@ import { ProfileService } from "../../service/profile-service.interface";
2
2
  import "../../service/profile-service";
3
3
  import { ControllerApi } from "../../../controller/controller-api";
4
4
  import { HttpRequest } from "../../../index.js";
5
- import { Profile } from "src/_examples/model-shared/example.model";
5
+ import { Profile } from "../../model-shared/example.model";
6
6
  /**
7
7
  * Example Controller for Profile: Validator (Zod) is set centrally.
8
8
  * This automatically validates POST/PUT/PATCH requests.
@@ -57,6 +57,7 @@ let ProfileController = class ProfileController extends controller_api_1.Control
57
57
  super(service, profile_config_1.CONFIG_PROFILE.toObject());
58
58
  }
59
59
  async processCrudRequest(req) {
60
+ log.info("Processing profile request...");
60
61
  return undefined;
61
62
  }
62
63
  };
@@ -1 +1 @@
1
- {"version":3,"file":"profile.controller.js","sourceRoot":"","sources":["../../../../src/_examples/controller/profile/profile.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,yCAAuC;AACvC,qDAAkD;AAClD,uEAAmE;AAInE;;;GAGG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,8BAAsC;IAC3E;QACE,MAAM,OAAO,GAAmB,gBAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChE,KAAK,CAAC,OAAO,EAAE,+BAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,GAAgB;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AATY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,gBAAO,EAAC,mBAAmB,CAAC;;GAChB,iBAAiB,CAS7B","sourcesContent":["import Container, { Service } from \"typedi\";\nimport { ProfileService } from \"../../service/profile-service.interface\";\nimport \"../../service/profile-service\";\nimport { CONFIG_PROFILE } from \"./profile.config\";\nimport { ControllerApi } from \"../../../controller/controller-api\";\nimport { HttpRequest } from \"@chinggis/core\";\nimport { Profile } from \"src/_examples/model-shared/example.model\";\n\n/**\n * Example Controller for Profile: Validator (Zod) is set centrally.\n * This automatically validates POST/PUT/PATCH requests.\n */\n@Service(\"ProfileController\")\nexport class ProfileController extends ControllerApi<Profile, ProfileService> {\n constructor() {\n const service: ProfileService = Container.get(\"ProfileService\");\n super(service, CONFIG_PROFILE.toObject());\n }\n\n protected async processCrudRequest(req: HttpRequest): Promise<any> {\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"profile.controller.js","sourceRoot":"","sources":["../../../../src/_examples/controller/profile/profile.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,yCAAuC;AACvC,qDAAkD;AAClD,uEAAmE;AAInE;;;GAGG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,8BAAsC;IAC3E;QACE,MAAM,OAAO,GAAmB,gBAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChE,KAAK,CAAC,OAAO,EAAE,+BAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,GAAgB;QACjD,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AAVY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,gBAAO,EAAC,mBAAmB,CAAC;;GAChB,iBAAiB,CAU7B","sourcesContent":["import Container, { Service } from \"typedi\";\nimport { ProfileService } from \"../../service/profile-service.interface\";\nimport \"../../service/profile-service\";\nimport { CONFIG_PROFILE } from \"./profile.config\";\nimport { ControllerApi } from \"../../../controller/controller-api\";\nimport { HttpRequest } from \"@chinggis/core\";\nimport { Profile } from \"../../model-shared/example.model\";\n\n/**\n * Example Controller for Profile: Validator (Zod) is set centrally.\n * This automatically validates POST/PUT/PATCH requests.\n */\n@Service(\"ProfileController\")\nexport class ProfileController extends ControllerApi<Profile, ProfileService> {\n constructor() {\n const service: ProfileService = Container.get(\"ProfileService\");\n super(service, CONFIG_PROFILE.toObject());\n }\n\n protected async processCrudRequest(req: HttpRequest): Promise<any> {\n log.info(\"Processing profile request...\");\n return undefined;\n }\n}\n"]}
@@ -33,15 +33,3 @@ export interface Profile extends BaseEntity {
33
33
  oldPhoneNumbers?: Array<string | null> | null;
34
34
  note: string;
35
35
  }
36
- export interface User extends BaseEntity {
37
- firstName: string;
38
- lastName: string;
39
- email: string;
40
- }
41
- export interface Order extends BaseEntity {
42
- profileId: string;
43
- }
44
- export interface OrderItem extends BaseEntity {
45
- profileId: string;
46
- orderId: string;
47
- }
@@ -1 +1 @@
1
- {"version":3,"file":"example.model.js","sourceRoot":"","sources":["../../../src/_examples/model-shared/example.model.ts"],"names":[],"mappings":";;;AAEA,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,qBAAW,CAAA;IACX,uBAAa,CAAA;IACb,qCAA2B,CAAA;AAC7B,CAAC,EAJW,MAAM,sBAAN,MAAM,QAIjB","sourcesContent":["import { BaseEntity } from \"../../model/base.model\";\n\nexport enum Gender {\n boy = \"boy\",\n girl = \"girl\",\n unspecified = \"unspecified\",\n}\n\nexport interface Profile extends BaseEntity {\n email?: string | null;\n emailVerified?: boolean | null;\n phone?: string | null;\n toVerifyPhone?: string | null;\n phoneVerified?: boolean | null;\n phoneVerificationCode?: string | null;\n providerIds?: Array<string | null> | null;\n firstName?: string | null;\n lastName?: string | null;\n birthDate?: string | null;\n gender?: Gender | null;\n facebook?: string | null;\n google?: string | null;\n apple?: string | null;\n cardNumber?: string | null;\n cardIssued?: string | null;\n initialPurchaseAmount?: number | null;\n initialUsedPoint?: number | null;\n initialAvailablePoint?: number | null;\n availablePoint: number;\n cardPin?: string | null;\n cardPinVerified?: boolean | null;\n loyaltyPercentage?: number | null;\n devices?: Array<string | null> | null;\n boughtEntityIds?: Array<string | null> | null;\n oldPhoneNumbers?: Array<string | null> | null;\n note: string;\n}\n\nexport interface User extends BaseEntity {\n firstName: string;\n lastName: string;\n email: string;\n}\nexport interface Order extends BaseEntity {\n profileId: string;\n //todo\n}\n\nexport interface OrderItem extends BaseEntity {\n profileId: string;\n orderId: string;\n //todo\n}\n"]}
1
+ {"version":3,"file":"example.model.js","sourceRoot":"","sources":["../../../src/_examples/model-shared/example.model.ts"],"names":[],"mappings":";;;AAEA,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,qBAAW,CAAA;IACX,uBAAa,CAAA;IACb,qCAA2B,CAAA;AAC7B,CAAC,EAJW,MAAM,sBAAN,MAAM,QAIjB","sourcesContent":["import { BaseEntity } from \"../../model/base.model\";\n\nexport enum Gender {\n boy = \"boy\",\n girl = \"girl\",\n unspecified = \"unspecified\",\n}\n\nexport interface Profile extends BaseEntity {\n email?: string | null;\n emailVerified?: boolean | null;\n phone?: string | null;\n toVerifyPhone?: string | null;\n phoneVerified?: boolean | null;\n phoneVerificationCode?: string | null;\n providerIds?: Array<string | null> | null;\n firstName?: string | null;\n lastName?: string | null;\n birthDate?: string | null;\n gender?: Gender | null;\n facebook?: string | null;\n google?: string | null;\n apple?: string | null;\n cardNumber?: string | null;\n cardIssued?: string | null;\n initialPurchaseAmount?: number | null;\n initialUsedPoint?: number | null;\n initialAvailablePoint?: number | null;\n availablePoint: number;\n cardPin?: string | null;\n cardPinVerified?: boolean | null;\n loyaltyPercentage?: number | null;\n devices?: Array<string | null> | null;\n boughtEntityIds?: Array<string | null> | null;\n oldPhoneNumbers?: Array<string | null> | null;\n note: string;\n}\n"]}
@@ -54,8 +54,11 @@ class BaseController {
54
54
  return (0, index_1.createApiResponse)(200, filteredResponse);
55
55
  }
56
56
  catch (err) {
57
- const error = (0, exception_1.errorHandlerHttp)(err);
58
- log.error(error);
57
+ const error = (0, exception_1.refineHttpError)(err);
58
+ if (error.statusCode >= 500)
59
+ log.error(error);
60
+ else if (error.statusCode >= 400)
61
+ log.warn(error);
59
62
  return (0, index_1.createApiResponse)(error.statusCode, error.content);
60
63
  }
61
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-controller.js","sourceRoot":"","sources":["../../src/controller/base-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Access,\n APIResponse,\n BaseService,\n createApiResponse,\n EndpointPolicy,\n findMatchedPolicy,\n formatErrors,\n getTableName,\n HttpMethod,\n HttpRequest,\n parseEventToAction,\n parseHttpRequest,\n parseImage,\n removeFields,\n RequestType,\n ResponseFields,\n validateWithSchema,\n} from \"../index\";\nimport {\n APIGatewayProxyEvent,\n APIGatewayProxyWebsocketEventV2,\n CreateAuthChallengeTriggerEvent,\n DefineAuthChallengeTriggerEvent,\n DynamoDBStreamEvent,\n PostConfirmationTriggerEvent,\n PreSignUpTriggerEvent,\n ScheduledEvent,\n SQSEvent,\n VerifyAuthChallengeResponseTriggerEvent,\n} from \"aws-lambda\";\nimport { errorHandlerHttp, ErrorHttp } from \"../exception\";\nimport { EntityConfig } from \"@chinggis/types\";\nimport { normalizeLower, toArray, trimSpecialChar } from \"../utils/string.util\";\n\n/**\n * @deprecated Use `ControllerApi, ControllerSocket, ControllerStream` instead.\n */\nexport abstract class BaseController<T extends BaseService<any, any>> {\n protected resourcePath: string;\n protected userId: string;\n protected isAdmin: boolean;\n protected request: HttpRequest;\n protected readonly service: T;\n protected adminGroupNames: string[];\n protected requestBody: any;\n protected triggerEvent: any;\n protected eventAttr: any;\n protected event: APIGatewayProxyEvent;\n protected resource: string;\n protected entityId: string;\n protected methode: HttpMethod;\n protected groups: string[] = [];\n protected username: string;\n protected profileId: string;\n protected requestType: RequestType;\n protected config: EntityConfig;\n protected path: string;\n\n protected constructor(baseService: T, config: EntityConfig) {\n this.service = baseService;\n\n // Store config for use in subclasses\n if (!config) return;\n\n this.config = config;\n // Set adminGroupName from config if available\n if (config.ADMIN_GROUP_NAME) {\n this.adminGroupNames = config.ADMIN_GROUP_NAME;\n }\n\n this.service.setConfig(config);\n }\n\n async resolveCrudRequest(event: APIGatewayProxyEvent): Promise<APIResponse> {\n try {\n this.bootstrapRequest(event);\n\n const policy: EndpointPolicy | undefined = findMatchedPolicy(\n this.methode,\n this.path,\n this.config.ENDPOINT_POLICY,\n );\n\n this.checkPermission(policy?.access);\n this.validateRequest(policy?.validator);\n this.setUserFilter();\n\n const response: any = await this.handleCrudByMethod(event);\n\n if (!policy?.response) {\n return createApiResponse(200, response);\n }\n\n const filteredResponse = this.filterResponse(response, policy.response);\n\n return createApiResponse(200, filteredResponse);\n } catch (err) {\n const error = errorHandlerHttp(err);\n log.error(error);\n return createApiResponse(error.statusCode, error.content);\n }\n }\n\n async resolveSQSEvent(sqsEvent: SQSEvent): Promise<void> {\n try {\n await this.processSQSEvent(sqsEvent);\n } catch (error) {\n console.error(\"Error handling SQS event:\", error);\n }\n }\n\n async resolveStreamEvent(event: DynamoDBStreamEvent): Promise<void> {\n try {\n for (const record of event.Records) {\n const oldItem = parseImage(record.dynamodb.OldImage) as T;\n const newItem = parseImage(record.dynamodb.NewImage) as T;\n\n await this.service.processChanges(\n oldItem,\n newItem,\n parseEventToAction(record.eventName),\n getTableName(record.eventSourceARN),\n );\n }\n await this.processStreamEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n async resolveScheduledEvent(event: ScheduledEvent): Promise<void> {\n try {\n await this.processScheduledEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n async resolveWebSocketEvent(event: APIGatewayProxyWebsocketEventV2): Promise<void> {\n try {\n return await this.processWebSocketEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n async resolveTriggerEvent(\n event:\n | CreateAuthChallengeTriggerEvent\n | DefineAuthChallengeTriggerEvent\n | VerifyAuthChallengeResponseTriggerEvent\n | PostConfirmationTriggerEvent\n | PreSignUpTriggerEvent,\n ): Promise<void> {\n try {\n this.triggerEvent = event;\n this.eventAttr = this.triggerEvent.userAttributes;\n return await this.processTriggerEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n setConfig(config: EntityConfig): void {\n this.config = config;\n }\n\n protected async handleList(): Promise<any> {\n if (this.methode === \"GET\" && trimSpecialChar(this.path) === trimSpecialChar(this.config.BASE_PATH)) {\n return await this.service.find(this.request.filter || {});\n }\n\n if (this.methode === \"GET\" && trimSpecialChar(this.path) === trimSpecialChar(this.config.BASE_PATH) + \"/search\") {\n return await this.service.search(this.request.filter || {});\n }\n\n if (this.methode === \"GET\" && trimSpecialChar(this.path) === trimSpecialChar(this.config.BASE_PATH) + \"/scan\") {\n return await this.service.scan(this.request.filter || {});\n }\n }\n\n protected async handleUpdate(): Promise<any> {\n if (!this.entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot PATCH resource without id field\");\n\n const entity = this.parseEntity();\n\n if (Object.keys(entity).length === 0) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"No fields to update\");\n }\n\n // id change is forbidden\n if (\"id\" in entity) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot modify the id field\");\n }\n\n entity.id = this.entityId;\n return this.service.update(entity, this.profileId);\n }\n\n protected async handleDelete(): Promise<boolean> {\n if (!this.entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot delete resource without id field\");\n\n return this.service.remove(this.entityId, this.profileId);\n }\n\n protected async handleFetch(): Promise<any> {\n if (!this.entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot fetch resource without id field\");\n\n const result = await this.service.findById(this.entityId, this.profileId);\n\n if (result) return result;\n\n throw new ErrorHttp({ code: 404, error: \"NotFound\" }, `Resource with ID ${this.entityId} not found`);\n }\n\n protected async handleReplace() {\n if (!this.entityId) throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot PUT resource without id field\");\n\n const entity = this.parseEntity();\n\n if (!Object.keys(entity).length) {\n throw new ErrorHttp({ code: 400, error: \"Bad Request\" }, \"No entity provided for PUT update\");\n }\n\n if (!this.entityId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot PUT resource without id field\");\n }\n\n entity.id = this.entityId;\n\n return this.service.update(entity, this.profileId);\n }\n\n protected async handlePostCreate() {\n const entity = this.parseEntity();\n if (!Object.keys(entity).length) {\n throw new ErrorHttp({ code: 400, error: \"Bad Request\" }, \"No entity payload provided\");\n }\n\n if (!this.isAdmin) entity.profileId = this.profileId;\n else if (!entity.profileId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"No profileId provided\");\n }\n\n return await this.service.save(entity, this.profileId);\n }\n\n protected abstract processCrudRequest(event: APIGatewayProxyEvent): Promise<any>;\n\n /**\n * service дээр processChanges methode ажилсны дараа хийгдэх үйлдлүүд байна\n * @param event - DynamoDBStreamEvent\n * @returns Promise<void>\n * */\n protected abstract processStreamEvent(event: DynamoDBStreamEvent): Promise<void>;\n\n protected abstract processScheduledEvent(event: ScheduledEvent): Promise<void>;\n\n protected abstract processWebSocketEvent(event: APIGatewayProxyWebsocketEventV2): Promise<void>;\n\n protected processTriggerEvent?(\n event:\n | CreateAuthChallengeTriggerEvent\n | DefineAuthChallengeTriggerEvent\n | VerifyAuthChallengeResponseTriggerEvent\n | PostConfirmationTriggerEvent\n | PreSignUpTriggerEvent,\n ): Promise<void> {\n throw new Error(`Method not implemented. event: ${JSON.stringify(event, null, 2)}`);\n }\n\n protected abstract processSQSEvent(sqsEvent: SQSEvent): Promise<any>;\n\n protected isListRequest(): boolean {\n const basePath = trimSpecialChar(this.config.BASE_PATH);\n\n const allowedPaths = [basePath, `${basePath}/search`, `${basePath}/scan`];\n\n const isMethodGet = this.methode === \"GET\";\n const isAllowedPath = allowedPaths.includes(trimSpecialChar(this.path));\n\n return isMethodGet && isAllowedPath;\n }\n\n protected isUpdateRequest(): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodPatch = this.methode === \"PATCH\";\n const isExpectedPath = trimSpecialChar(this.path) === expectedPath;\n\n return isMethodPatch && isExpectedPath;\n }\n\n protected isDeleteRequest(): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodDelete = this.methode === \"DELETE\";\n const isExpectedPath = trimSpecialChar(this.path) === expectedPath;\n\n return isMethodDelete && isExpectedPath;\n }\n\n protected isFetchRequest(): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodGet = this.methode === \"GET\";\n const isExpectedPath = trimSpecialChar(this.path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n private async handleCrudByMethod(event: APIGatewayProxyEvent): Promise<any> {\n if (this.isUpdateRequest()) return this.handleUpdate();\n if (this.isDeleteRequest()) return this.handleDelete();\n if (this.isFetchRequest()) return this.handleFetch();\n if (this.methode === \"PUT\") return this.handleReplace();\n if (this.methode === \"POST\") return this.handlePostCreate();\n if (this.isListRequest()) return this.handleList();\n return this.processCrudRequest(event); // Custom Endpoints\n }\n\n private filterResponse(response: any, responsePolicy: ResponseFields): any {\n if (Array.isArray(response)) {\n return removeFields(response, responsePolicy.include, responsePolicy.exclude);\n }\n\n if (response?.items && Array.isArray(response.items)) {\n response.items = removeFields(response.items, responsePolicy.include, responsePolicy.exclude);\n return response;\n }\n\n return removeFields([response], responsePolicy.include, responsePolicy.exclude)[0];\n }\n\n /**\n * Map RequestType to Access for permission checking\n */\n private getUserAccessLevel(): Access {\n switch (this.requestType) {\n case RequestType.ADMIN:\n return Access.ADMIN;\n case RequestType.USER:\n return Access.USER;\n case RequestType.GUEST:\n return Access.PUBLIC;\n case RequestType.SYSTEM:\n return Access.SYSTEM;\n default:\n return Access.PUBLIC;\n }\n }\n\n /** Check if the user has permission for the current operation */\n private checkPermission(allowedAccess: Access[]) {\n const currentAccessLevel = this.getUserAccessLevel();\n\n // This means USER can access OWNER-level permissions, but the service will verify actual ownership\n const hasPermission =\n allowedAccess.includes(currentAccessLevel) ||\n (this.requestType === RequestType.USER && allowedAccess.includes(Access.OWNER));\n\n if (hasPermission) return;\n\n throw new ErrorHttp(\n { code: 403, error: \"PermissionDenied\" },\n `Access denied. Required: ${allowedAccess.join(\", \")}, Current: ${currentAccessLevel}`,\n );\n }\n\n private setUserFilter() {\n if (this.isAdmin && !this.profileId) return;\n const ownerIdFieldName = this.config.OWNER_ID_FIELD_NAME || \"ownerId\";\n this.request.filter[ownerIdFieldName] = this.profileId;\n }\n\n private bootstrapRequest(event: APIGatewayProxyEvent) {\n log.debug(\"event: \" + JSON.stringify(event, null, 2));\n\n this.event = event;\n this.resource = event.resource || undefined;\n\n this.methode = event.httpMethod as HttpMethod;\n this.path = event?.requestContext?.resourcePath;\n this.resourcePath = `${this.methode} ${this.path}`;\n\n this.request = parseHttpRequest(event, this.config);\n this.requestBody = this.request.body;\n this.entityId = event.pathParameters?.id || undefined;\n\n this.parserUserData(event.requestContext?.authorizer?.claims);\n }\n\n private parseEntity(): Record<string, unknown> {\n if (!this.requestBody) return {};\n return typeof this.requestBody === \"string\" ? JSON.parse(this.requestBody) : this.requestBody;\n }\n\n private validateRequest(schema: any) {\n if (!schema) return;\n\n try {\n validateWithSchema(schema, this.requestBody);\n } catch (error) {\n const formattedErrors = formatErrors(error);\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, formattedErrors);\n }\n }\n\n private parserUserData(claims: any) {\n // request user data\n this.groups = toArray(claims?.[\"cognito:groups\"]);\n this.username = claims?.[\"cognito:username\"] || \"\";\n this.userId = claims?.sub || \"\";\n this.profileId = claims?.[\"custom:profileId\"] || this.username;\n\n const adminGroups = new Set(normalizeLower(toArray(this.adminGroupNames)));\n const groups = normalizeLower(toArray(this.groups));\n this.isAdmin = groups.some((g) => adminGroups.has(g));\n\n if (this.isAdmin) {\n this.profileId = this.request.body?.ownerId || \"\";\n delete this.request.body?.ownerId;\n this.requestType = RequestType.ADMIN;\n } else if (this.profileId || this.userId) this.requestType = RequestType.USER;\n else this.requestType = RequestType.GUEST;\n\n log.debug(\"groups: \" + JSON.stringify(this.groups, null, 2));\n log.debug(`claims:${JSON.stringify(claims, null, 2)}`);\n log.debug(\n `groups:${this.groups}, isAdmin:${this.isAdmin}, userId:${this.userId}, profileId:${this.profileId}, username:${this.username}, requestType:${this.requestType}`,\n );\n }\n}\n"]}
1
+ {"version":3,"file":"base-controller.js","sourceRoot":"","sources":["../../src/controller/base-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Access,\n APIResponse,\n BaseService,\n createApiResponse,\n EndpointPolicy,\n findMatchedPolicy,\n formatErrors,\n getTableName,\n HttpMethod,\n HttpRequest,\n parseEventToAction,\n parseHttpRequest,\n parseImage,\n removeFields,\n RequestType,\n ResponseFields,\n validateWithSchema,\n} from \"../index\";\nimport {\n APIGatewayProxyEvent,\n APIGatewayProxyWebsocketEventV2,\n CreateAuthChallengeTriggerEvent,\n DefineAuthChallengeTriggerEvent,\n DynamoDBStreamEvent,\n PostConfirmationTriggerEvent,\n PreSignUpTriggerEvent,\n ScheduledEvent,\n SQSEvent,\n VerifyAuthChallengeResponseTriggerEvent,\n} from \"aws-lambda\";\nimport { ErrorHttp, refineHttpError } from \"../exception\";\nimport { EntityConfig } from \"@chinggis/types\";\nimport { normalizeLower, toArray, trimSpecialChar } from \"../utils/string.util\";\n\n/**\n * @deprecated Use `ControllerApi, ControllerSocket, ControllerStream` instead.\n */\nexport abstract class BaseController<T extends BaseService<any, any>> {\n protected resourcePath: string;\n protected userId: string;\n protected isAdmin: boolean;\n protected request: HttpRequest;\n protected readonly service: T;\n protected adminGroupNames: string[];\n protected requestBody: any;\n protected triggerEvent: any;\n protected eventAttr: any;\n protected event: APIGatewayProxyEvent;\n protected resource: string;\n protected entityId: string;\n protected methode: HttpMethod;\n protected groups: string[] = [];\n protected username: string;\n protected profileId: string;\n protected requestType: RequestType;\n protected config: EntityConfig;\n protected path: string;\n\n protected constructor(baseService: T, config: EntityConfig) {\n this.service = baseService;\n\n // Store config for use in subclasses\n if (!config) return;\n\n this.config = config;\n // Set adminGroupName from config if available\n if (config.ADMIN_GROUP_NAME) {\n this.adminGroupNames = config.ADMIN_GROUP_NAME;\n }\n\n this.service.setConfig(config);\n }\n\n async resolveCrudRequest(event: APIGatewayProxyEvent): Promise<APIResponse> {\n try {\n this.bootstrapRequest(event);\n\n const policy: EndpointPolicy | undefined = findMatchedPolicy(\n this.methode,\n this.path,\n this.config.ENDPOINT_POLICY,\n );\n\n this.checkPermission(policy?.access);\n this.validateRequest(policy?.validator);\n this.setUserFilter();\n\n const response: any = await this.handleCrudByMethod(event);\n\n if (!policy?.response) {\n return createApiResponse(200, response);\n }\n\n const filteredResponse = this.filterResponse(response, policy.response);\n\n return createApiResponse(200, filteredResponse);\n } catch (err) {\n const error = refineHttpError(err);\n if (error.statusCode >= 500) log.error(error);\n else if (error.statusCode >= 400) log.warn(error);\n return createApiResponse(error.statusCode, error.content);\n }\n }\n\n async resolveSQSEvent(sqsEvent: SQSEvent): Promise<void> {\n try {\n await this.processSQSEvent(sqsEvent);\n } catch (error) {\n console.error(\"Error handling SQS event:\", error);\n }\n }\n\n async resolveStreamEvent(event: DynamoDBStreamEvent): Promise<void> {\n try {\n for (const record of event.Records) {\n const oldItem = parseImage(record.dynamodb.OldImage) as T;\n const newItem = parseImage(record.dynamodb.NewImage) as T;\n\n await this.service.processChanges(\n oldItem,\n newItem,\n parseEventToAction(record.eventName),\n getTableName(record.eventSourceARN),\n );\n }\n await this.processStreamEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n async resolveScheduledEvent(event: ScheduledEvent): Promise<void> {\n try {\n await this.processScheduledEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n async resolveWebSocketEvent(event: APIGatewayProxyWebsocketEventV2): Promise<void> {\n try {\n return await this.processWebSocketEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n async resolveTriggerEvent(\n event:\n | CreateAuthChallengeTriggerEvent\n | DefineAuthChallengeTriggerEvent\n | VerifyAuthChallengeResponseTriggerEvent\n | PostConfirmationTriggerEvent\n | PreSignUpTriggerEvent,\n ): Promise<void> {\n try {\n this.triggerEvent = event;\n this.eventAttr = this.triggerEvent.userAttributes;\n return await this.processTriggerEvent(event);\n } catch (error) {\n console.error(\"Error handling request event:\", error);\n }\n }\n\n setConfig(config: EntityConfig): void {\n this.config = config;\n }\n\n protected async handleList(): Promise<any> {\n if (this.methode === \"GET\" && trimSpecialChar(this.path) === trimSpecialChar(this.config.BASE_PATH)) {\n return await this.service.find(this.request.filter || {});\n }\n\n if (this.methode === \"GET\" && trimSpecialChar(this.path) === trimSpecialChar(this.config.BASE_PATH) + \"/search\") {\n return await this.service.search(this.request.filter || {});\n }\n\n if (this.methode === \"GET\" && trimSpecialChar(this.path) === trimSpecialChar(this.config.BASE_PATH) + \"/scan\") {\n return await this.service.scan(this.request.filter || {});\n }\n }\n\n protected async handleUpdate(): Promise<any> {\n if (!this.entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot PATCH resource without id field\");\n\n const entity = this.parseEntity();\n\n if (Object.keys(entity).length === 0) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"No fields to update\");\n }\n\n // id change is forbidden\n if (\"id\" in entity) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot modify the id field\");\n }\n\n entity.id = this.entityId;\n return this.service.update(entity, this.profileId);\n }\n\n protected async handleDelete(): Promise<boolean> {\n if (!this.entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot delete resource without id field\");\n\n return this.service.remove(this.entityId, this.profileId);\n }\n\n protected async handleFetch(): Promise<any> {\n if (!this.entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot fetch resource without id field\");\n\n const result = await this.service.findById(this.entityId, this.profileId);\n\n if (result) return result;\n\n throw new ErrorHttp({ code: 404, error: \"NotFound\" }, `Resource with ID ${this.entityId} not found`);\n }\n\n protected async handleReplace() {\n if (!this.entityId) throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot PUT resource without id field\");\n\n const entity = this.parseEntity();\n\n if (!Object.keys(entity).length) {\n throw new ErrorHttp({ code: 400, error: \"Bad Request\" }, \"No entity provided for PUT update\");\n }\n\n if (!this.entityId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"Cannot PUT resource without id field\");\n }\n\n entity.id = this.entityId;\n\n return this.service.update(entity, this.profileId);\n }\n\n protected async handlePostCreate() {\n const entity = this.parseEntity();\n if (!Object.keys(entity).length) {\n throw new ErrorHttp({ code: 400, error: \"Bad Request\" }, \"No entity payload provided\");\n }\n\n if (!this.isAdmin) entity.profileId = this.profileId;\n else if (!entity.profileId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"No profileId provided\");\n }\n\n return await this.service.save(entity, this.profileId);\n }\n\n protected abstract processCrudRequest(event: APIGatewayProxyEvent): Promise<any>;\n\n /**\n * service дээр processChanges methode ажилсны дараа хийгдэх үйлдлүүд байна\n * @param event - DynamoDBStreamEvent\n * @returns Promise<void>\n * */\n protected abstract processStreamEvent(event: DynamoDBStreamEvent): Promise<void>;\n\n protected abstract processScheduledEvent(event: ScheduledEvent): Promise<void>;\n\n protected abstract processWebSocketEvent(event: APIGatewayProxyWebsocketEventV2): Promise<void>;\n\n protected processTriggerEvent?(\n event:\n | CreateAuthChallengeTriggerEvent\n | DefineAuthChallengeTriggerEvent\n | VerifyAuthChallengeResponseTriggerEvent\n | PostConfirmationTriggerEvent\n | PreSignUpTriggerEvent,\n ): Promise<void> {\n throw new Error(`Method not implemented. event: ${JSON.stringify(event, null, 2)}`);\n }\n\n protected abstract processSQSEvent(sqsEvent: SQSEvent): Promise<any>;\n\n protected isListRequest(): boolean {\n const basePath = trimSpecialChar(this.config.BASE_PATH);\n\n const allowedPaths = [basePath, `${basePath}/search`, `${basePath}/scan`];\n\n const isMethodGet = this.methode === \"GET\";\n const isAllowedPath = allowedPaths.includes(trimSpecialChar(this.path));\n\n return isMethodGet && isAllowedPath;\n }\n\n protected isUpdateRequest(): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodPatch = this.methode === \"PATCH\";\n const isExpectedPath = trimSpecialChar(this.path) === expectedPath;\n\n return isMethodPatch && isExpectedPath;\n }\n\n protected isDeleteRequest(): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodDelete = this.methode === \"DELETE\";\n const isExpectedPath = trimSpecialChar(this.path) === expectedPath;\n\n return isMethodDelete && isExpectedPath;\n }\n\n protected isFetchRequest(): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodGet = this.methode === \"GET\";\n const isExpectedPath = trimSpecialChar(this.path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n private async handleCrudByMethod(event: APIGatewayProxyEvent): Promise<any> {\n if (this.isUpdateRequest()) return this.handleUpdate();\n if (this.isDeleteRequest()) return this.handleDelete();\n if (this.isFetchRequest()) return this.handleFetch();\n if (this.methode === \"PUT\") return this.handleReplace();\n if (this.methode === \"POST\") return this.handlePostCreate();\n if (this.isListRequest()) return this.handleList();\n return this.processCrudRequest(event); // Custom Endpoints\n }\n\n private filterResponse(response: any, responsePolicy: ResponseFields): any {\n if (Array.isArray(response)) {\n return removeFields(response, responsePolicy.include, responsePolicy.exclude);\n }\n\n if (response?.items && Array.isArray(response.items)) {\n response.items = removeFields(response.items, responsePolicy.include, responsePolicy.exclude);\n return response;\n }\n\n return removeFields([response], responsePolicy.include, responsePolicy.exclude)[0];\n }\n\n /**\n * Map RequestType to Access for permission checking\n */\n private getUserAccessLevel(): Access {\n switch (this.requestType) {\n case RequestType.ADMIN:\n return Access.ADMIN;\n case RequestType.USER:\n return Access.USER;\n case RequestType.GUEST:\n return Access.PUBLIC;\n case RequestType.SYSTEM:\n return Access.SYSTEM;\n default:\n return Access.PUBLIC;\n }\n }\n\n /** Check if the user has permission for the current operation */\n private checkPermission(allowedAccess: Access[]) {\n const currentAccessLevel = this.getUserAccessLevel();\n\n // This means USER can access OWNER-level permissions, but the service will verify actual ownership\n const hasPermission =\n allowedAccess.includes(currentAccessLevel) ||\n (this.requestType === RequestType.USER && allowedAccess.includes(Access.OWNER));\n\n if (hasPermission) return;\n\n throw new ErrorHttp(\n { code: 403, error: \"PermissionDenied\" },\n `Access denied. Required: ${allowedAccess.join(\", \")}, Current: ${currentAccessLevel}`,\n );\n }\n\n private setUserFilter() {\n if (this.isAdmin && !this.profileId) return;\n const ownerIdFieldName = this.config.OWNER_ID_FIELD_NAME || \"ownerId\";\n this.request.filter[ownerIdFieldName] = this.profileId;\n }\n\n private bootstrapRequest(event: APIGatewayProxyEvent) {\n log.debug(\"event: \" + JSON.stringify(event, null, 2));\n\n this.event = event;\n this.resource = event.resource || undefined;\n\n this.methode = event.httpMethod as HttpMethod;\n this.path = event?.requestContext?.resourcePath;\n this.resourcePath = `${this.methode} ${this.path}`;\n\n this.request = parseHttpRequest(event, this.config);\n this.requestBody = this.request.body;\n this.entityId = event.pathParameters?.id || undefined;\n\n this.parserUserData(event.requestContext?.authorizer?.claims);\n }\n\n private parseEntity(): Record<string, unknown> {\n if (!this.requestBody) return {};\n return typeof this.requestBody === \"string\" ? JSON.parse(this.requestBody) : this.requestBody;\n }\n\n private validateRequest(schema: any) {\n if (!schema) return;\n\n try {\n validateWithSchema(schema, this.requestBody);\n } catch (error) {\n const formattedErrors = formatErrors(error);\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, formattedErrors);\n }\n }\n\n private parserUserData(claims: any) {\n // request user data\n this.groups = toArray(claims?.[\"cognito:groups\"]);\n this.username = claims?.[\"cognito:username\"] || \"\";\n this.userId = claims?.sub || \"\";\n this.profileId = claims?.[\"custom:profileId\"] || this.username;\n\n const adminGroups = new Set(normalizeLower(toArray(this.adminGroupNames)));\n const groups = normalizeLower(toArray(this.groups));\n this.isAdmin = groups.some((g) => adminGroups.has(g));\n\n if (this.isAdmin) {\n this.profileId = this.request.body?.ownerId || \"\";\n delete this.request.body?.ownerId;\n this.requestType = RequestType.ADMIN;\n } else if (this.profileId || this.userId) this.requestType = RequestType.USER;\n else this.requestType = RequestType.GUEST;\n\n log.debug(\"groups: \" + JSON.stringify(this.groups, null, 2));\n log.debug(`claims:${JSON.stringify(claims, null, 2)}`);\n log.debug(\n `groups:${this.groups}, isAdmin:${this.isAdmin}, userId:${this.userId}, profileId:${this.profileId}, username:${this.username}, requestType:${this.requestType}`,\n );\n }\n}\n"]}
@@ -8,12 +8,12 @@ export declare abstract class ControllerApi<R extends BaseEntity, T extends Crud
8
8
  protected adminGroupNames: string[];
9
9
  private roleController;
10
10
  protected constructor(baseService: T, config: EntityConfig);
11
- /** Return constructor-defined resource name */
12
- protected getResource(): string;
13
11
  resolveCrudRequest(event: APIGatewayProxyEvent): Promise<APIResponse>;
14
12
  setConfig(config: EntityConfig): void;
15
13
  processCrudRequestPre(req: HttpRequest): Promise<HttpRequest>;
16
14
  processCrudRequestPost(request: HttpRequest, response: R | List<R>): Promise<R | List<R>>;
15
+ /** Return constructor-defined resource name */
16
+ protected getResource(): string;
17
17
  protected handleList(methode: HttpMethod, path: string, request: HttpRequest): Promise<any>;
18
18
  protected handlePermission(req: HttpRequest, path: string): Promise<any>;
19
19
  protected handleUpdate(entityId: string, requestBody: any, requestedUser?: CognitoUser): Promise<R>;
@@ -23,10 +23,6 @@ class ControllerApi {
23
23
  }
24
24
  this.service.setConfig(config);
25
25
  }
26
- /** Return constructor-defined resource name */
27
- getResource() {
28
- return this.config.BASE_PATH.replace("/", "");
29
- }
30
26
  async resolveCrudRequest(event) {
31
27
  try {
32
28
  let req = (0, index_1.parseHttpRequest)(event, this.config);
@@ -50,25 +46,23 @@ class ControllerApi {
50
46
  log.debug(`claims:${JSON.stringify(req.identity, null, 2)}`);
51
47
  log.debug(`groups:${req.identity.groups}, isAdmin:${req.identity.isAdmin}, userId:${req.identity.sub}, profileId:${req.identity.profile}, username:${req.identity.username}, requestType:${req.requestType}`);
52
48
  }
53
- // if (req.isAdmin) {
54
- // delete req.filter["profileId"];
55
- // delete req.filter["ownerParentId"];
56
- // }
57
49
  req = await this.processCrudRequestPre(req);
58
50
  let response = await this.handleCrudByMethod(req);
59
51
  if (response)
60
52
  response = await this.processCrudRequestPost(req, response);
61
53
  else
62
54
  response = await this.processCrudRequest(req); // Custom Endpoints
63
- if (!req.policy.response) {
55
+ if (!req.policy.response)
64
56
  return (0, index_1.createApiResponse)(200, response);
65
- }
66
57
  const filteredResponse = this.filterResponse(response, req.policy.response);
67
58
  return (0, index_1.createApiResponse)(200, filteredResponse);
68
59
  }
69
60
  catch (err) {
70
- const error = (0, exception_1.errorHandlerHttp)(err);
71
- log.error(error);
61
+ const error = (0, exception_1.refineHttpError)(err);
62
+ if (error.statusCode >= 500)
63
+ log.error(error);
64
+ else if (error.statusCode >= 400)
65
+ log.warn(error);
72
66
  return (0, index_1.createApiResponse)(error.statusCode, error.content);
73
67
  }
74
68
  }
@@ -81,6 +75,10 @@ class ControllerApi {
81
75
  async processCrudRequestPost(request, response) {
82
76
  return response;
83
77
  }
78
+ /** Return constructor-defined resource name */
79
+ getResource() {
80
+ return this.config.BASE_PATH.replace("/", "");
81
+ }
84
82
  async handleList(methode, path, request) {
85
83
  if (methode === "GET" && (0, string_util_1.trimSpecialChar)(path) === (0, string_util_1.trimSpecialChar)(this.config.BASE_PATH)) {
86
84
  return await this.service.find(request?.filter || {});
@@ -1 +1 @@
1
- {"version":3,"file":"controller-api.js","sourceRoot":"","sources":["../../src/controller/controller-api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Access,\n APIResponse,\n BaseEntity,\n createApiResponse,\n EndpointPolicy,\n findMatchedPolicy,\n formatErrors,\n HttpMethod,\n HttpRequest,\n List,\n parseHttpRequest,\n removeFields,\n RequestType,\n ResponseFields,\n validateWithSchema,\n} from \"../index\";\nimport { APIGatewayProxyEvent } from \"aws-lambda\";\nimport { errorHandlerHttp, ErrorHttp } from \"../exception\";\nimport { CognitoUser, EntityConfig } from \"@chinggis/types\";\nimport { trimSpecialChar } from \"../utils/string.util\";\nimport { CrudService } from \"../service\";\nimport { ControllerRole } from \"./controller-role\";\n\nexport abstract class ControllerApi<R extends BaseEntity, T extends CrudService<R>> {\n protected readonly service: T;\n protected config: EntityConfig;\n protected adminGroupNames: string[];\n\n private roleController: ControllerRole;\n\n protected constructor(baseService: T, config: EntityConfig) {\n this.service = baseService;\n\n if (!config) return;\n\n this.config = config;\n\n if (config.ADMIN_GROUP_NAME) {\n this.adminGroupNames = config.ADMIN_GROUP_NAME;\n }\n\n if (config.PERMISSION_MAP) {\n this.roleController = new ControllerRole(config.PERMISSION_MAP.roleTable);\n }\n\n this.service.setConfig(config);\n }\n\n /** Return constructor-defined resource name */\n protected getResource(): string {\n return this.config.BASE_PATH.replace(\"/\", \"\");\n }\n\n async resolveCrudRequest(event: APIGatewayProxyEvent): Promise<APIResponse> {\n try {\n let req = parseHttpRequest(event, this.config);\n\n if (req.policy.access?.length) {\n if (req.identity) req.identity.isScope = false;\n this.checkPermission(req.policy.access, req);\n } else if (this.config.PERMISSION_MAP && this.roleController) {\n if (req.identity) req.identity.isScope = true;\n const resource = this.getResource();\n await this.roleController.checkAccess(\n req,\n resource,\n this.config.PERMISSION_MAP.scopeMap,\n this.adminGroupNames,\n (id: string) => this.service.findById(id),\n );\n } else {\n throw new ErrorHttp({ code: 403, error: \"PermissionDenied\" }, \"Access denied\");\n }\n\n this.validateRequest(req.policy.validator, req.body);\n\n if (req.identity) {\n log.debug(\"groups: \" + JSON.stringify(req.identity.groups, null, 2));\n log.debug(`claims:${JSON.stringify(req.identity, null, 2)}`);\n log.debug(\n `groups:${req.identity.groups}, isAdmin:${req.identity.isAdmin}, userId:${req.identity.sub}, profileId:${req.identity.profile}, username:${req.identity.username}, requestType:${req.requestType}`,\n );\n }\n\n // if (req.isAdmin) {\n // delete req.filter[\"profileId\"];\n // delete req.filter[\"ownerParentId\"];\n // }\n\n req = await this.processCrudRequestPre(req);\n\n let response: any = await this.handleCrudByMethod(req);\n\n if (response) response = await this.processCrudRequestPost(req, response);\n else response = await this.processCrudRequest(req); // Custom Endpoints\n\n if (!req.policy.response) {\n return createApiResponse(200, response);\n }\n\n const filteredResponse = this.filterResponse(response, req.policy.response);\n\n return createApiResponse(200, filteredResponse);\n } catch (err) {\n const error = errorHandlerHttp(err);\n log.error(error);\n return createApiResponse(error.statusCode, error.content);\n }\n }\n\n setConfig(config: EntityConfig): void {\n this.config = config;\n }\n\n async processCrudRequestPre(req: HttpRequest): Promise<HttpRequest> {\n return req;\n }\n\n async processCrudRequestPost(request: HttpRequest, response: R | List<R>): Promise<R | List<R>> {\n return response;\n }\n\n protected async handleList(methode: HttpMethod, path: string, request: HttpRequest): Promise<any> {\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH)) {\n return await this.service.find(request?.filter || {});\n }\n\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/search\") {\n return this.service.search(request?.filter || {});\n }\n\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/search/query\") {\n return this.service.searchQuery(request?.filter);\n }\n\n if (\n methode === \"GET\" &&\n trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/search/query/total-count\"\n ) {\n return this.service.searchQueryTotalCount(request?.filter);\n }\n\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/scan\") {\n return await this.service.scan(request?.filter || {});\n }\n }\n\n protected async handlePermission(req: HttpRequest, path: string) {\n return this.roleController.handlePermissionRequest(req, path, this.config.PERMISSION_MAP, this.adminGroupNames);\n }\n\n protected async handleUpdate(entityId: string, requestBody: any, requestedUser?: CognitoUser): Promise<R> {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot PATCH resource without id field\");\n\n const entity = this.parseEntity(requestBody);\n\n if (Object.keys(entity).length === 0) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] No fields to update\");\n }\n\n const fieldName = this.config.DYNAMO_DB?.MAP?.partitionKey ?? \"id\";\n\n // id change is forbidden\n if (entity[fieldName]) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot modify the id field\");\n }\n\n entity[fieldName] = entityId;\n return this.service.update(entity, requestedUser);\n }\n\n protected async handleDelete(entityId: string, requestedUser?: CognitoUser): Promise<boolean> {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot delete resource without id field\");\n\n return this.service.remove(entityId, requestedUser);\n }\n\n protected async handleFetch(entityId: string, requestedUser?: CognitoUser): Promise<R> {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot fetch resource without id field\");\n\n const result = await this.service.findById(entityId, requestedUser);\n\n if (result) return result;\n\n throw new ErrorHttp({ code: 404, error: \"NotFound\" }, `[CORE] Resource with ID ${entityId} not found`);\n }\n\n protected async handleReplace(entityId: string, entity: any, requestedUser?: CognitoUser) {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot PUT resource without id field\");\n\n if (!Object.keys(entity).length) {\n throw new ErrorHttp({ code: 400, error: \"Bad Request\" }, \"[CORE] No entity provided for PUT update\");\n }\n\n if (!entityId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot PUT resource without id field\");\n }\n\n entity.id = entityId;\n\n return this.service.update(entity, requestedUser);\n }\n\n protected async handlePostCreate(entity: R, cognitoUser: CognitoUser) {\n if (!entity || Object.keys(entity).length === 0) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] No entity payload provided\");\n }\n\n if (!entity.ownerId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] No ownerId provided\");\n }\n\n // Initialize IDs\n const { ownerId, ownerParentId: inputParentId } = entity;\n let profileId = ownerId;\n let parentId: string;\n\n // Determine parentId and profileId\n if (cognitoUser.isAdmin && inputParentId) {\n parentId = inputParentId;\n } else if (cognitoUser.isParent) {\n console.log(\"is parent becomming true\");\n\n parentId = cognitoUser.profile;\n } else {\n console.log(\"is parent not becomming true\");\n console.log(\"the value of isParent: \", cognitoUser.isParent, typeof cognitoUser.isParent);\n\n parentId = cognitoUser.parentId;\n profileId = cognitoUser.profile;\n }\n\n // Remove fields that shouldn't be saved directly\n delete entity.ownerParentId;\n delete entity.ownerId;\n\n // Save entity\n return this.service.save(entity, profileId, parentId, cognitoUser);\n }\n\n protected abstract processCrudRequest(event: HttpRequest): Promise<any>;\n\n protected isPermissionRequest(path: string): boolean {\n if (this.config.PERMISSION_MAP && this.roleController) {\n const rolePath = trimSpecialChar(this.config.PERMISSION_MAP.rolePath);\n const normalizedPath = trimSpecialChar(path);\n return normalizedPath.includes(rolePath);\n }\n\n return false;\n }\n\n protected isListRequest(methode: HttpMethod, path: string): boolean {\n const basePath = trimSpecialChar(this.config.BASE_PATH);\n\n const allowedPaths = [\n basePath,\n `${basePath}/search`,\n `${basePath}/scan`,\n `${basePath}/search/query`,\n `${basePath}/search/query/total-count`,\n ];\n\n const isMethodGet = methode === \"GET\";\n const isAllowedPath = allowedPaths.includes(trimSpecialChar(path));\n\n return isMethodGet && isAllowedPath;\n }\n\n protected isUpdateRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodPatch = methode === \"PATCH\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodPatch && isExpectedPath;\n }\n\n protected isDeleteRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodDelete = methode === \"DELETE\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodDelete && isExpectedPath;\n }\n\n protected isFetchRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodGet = methode === \"GET\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n protected isPostRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}`;\n const isMethodGet = methode === \"POST\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n protected isPutRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodGet = methode === \"PUT\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n private async handleCrudByMethod(req: HttpRequest): Promise<any> {\n const path = req.event?.requestContext?.resourcePath;\n\n const entity = this.parseEntity(req.body);\n\n if (this.isPermissionRequest(path)) return this.handlePermission(req, path);\n if (this.isUpdateRequest(req.methode, path)) return this.handleUpdate(req.entityId, entity, req.identity);\n if (this.isDeleteRequest(req.methode, path)) return this.handleDelete(req.entityId, req.identity);\n if (this.isFetchRequest(req.methode, path)) return this.handleFetch(req.entityId, req.identity);\n if (this.isPutRequest(req.methode, path)) return this.handleReplace(req.entityId, entity, req.identity);\n if (this.isPostRequest(req.methode, path)) return this.handlePostCreate(entity, req.identity);\n if (this.isListRequest(req.methode, path)) return this.handleList(req.methode, path, req);\n\n return null;\n }\n\n private filterResponse(response: any, responsePolicy: ResponseFields): any {\n if (Array.isArray(response)) {\n return removeFields(response, responsePolicy.include, responsePolicy.exclude);\n }\n\n if (response?.items && Array.isArray(response.items)) {\n response.items = removeFields(response.items, responsePolicy.include, responsePolicy.exclude);\n return response;\n }\n\n return removeFields([response], responsePolicy.include, responsePolicy.exclude)[0];\n }\n\n /** Map RequestType to Access for permission checking */\n private getUserAccessLevel(requestType: RequestType): Access {\n switch (requestType) {\n case RequestType.ADMIN:\n return Access.ADMIN;\n case RequestType.USER:\n return Access.USER;\n case RequestType.GUEST:\n return Access.PUBLIC;\n case RequestType.SYSTEM:\n return Access.SYSTEM;\n default:\n return Access.PUBLIC;\n }\n }\n\n /** Check if the user has permission for the current operation */\n private checkPermission(allowedAccess: Access[], req: HttpRequest): void {\n const currentAccessLevel = this.getUserAccessLevel(req.requestType);\n\n // This means USER can access OWNER-level permissions, but the service will verify actual ownership\n const hasPermission =\n allowedAccess.includes(currentAccessLevel) ||\n (req.requestType === RequestType.USER && allowedAccess.includes(Access.OWNER));\n\n if (hasPermission) return;\n\n throw new ErrorHttp(\n { code: 403, error: \"PermissionDenied\" },\n `Access denied. Required: ${allowedAccess.join(\", \")}, Current: ${currentAccessLevel}`,\n );\n }\n\n private setUserFilter(request: any, isAdmin: boolean, profileId: string) {\n if (isAdmin && !profileId) return;\n const ownerIdFieldName = this.config.OWNER_ID_FIELD_NAME || \"ownerId\";\n request.filterAndSort[ownerIdFieldName] = profileId;\n return request.filterAndSort;\n }\n\n private parseEntity(requestBody: any): R {\n if (!requestBody) return {} as R;\n return typeof requestBody === \"string\" ? JSON.parse(requestBody) : requestBody;\n }\n\n private validateRequest(schema: any, requestBody: any) {\n if (!schema) return;\n\n try {\n validateWithSchema(schema, requestBody);\n } catch (error) {\n const formattedErrors = formatErrors(error);\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, formattedErrors);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"controller-api.js","sourceRoot":"","sources":["../../src/controller/controller-api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Access,\n APIResponse,\n BaseEntity,\n createApiResponse,\n formatErrors,\n HttpMethod,\n HttpRequest,\n List,\n parseHttpRequest,\n removeFields,\n RequestType,\n ResponseFields,\n validateWithSchema,\n} from \"../index\";\nimport { APIGatewayProxyEvent } from \"aws-lambda\";\nimport { ErrorHttp, refineHttpError } from \"../exception\";\nimport { CognitoUser, EntityConfig } from \"@chinggis/types\";\nimport { trimSpecialChar } from \"../utils/string.util\";\nimport { CrudService } from \"../service\";\nimport { ControllerRole } from \"./controller-role\";\n\nexport abstract class ControllerApi<R extends BaseEntity, T extends CrudService<R>> {\n protected readonly service: T;\n protected config: EntityConfig;\n protected adminGroupNames: string[];\n\n private roleController: ControllerRole;\n\n protected constructor(baseService: T, config: EntityConfig) {\n this.service = baseService;\n\n if (!config) return;\n\n this.config = config;\n\n if (config.ADMIN_GROUP_NAME) {\n this.adminGroupNames = config.ADMIN_GROUP_NAME;\n }\n\n if (config.PERMISSION_MAP) {\n this.roleController = new ControllerRole(config.PERMISSION_MAP.roleTable);\n }\n\n this.service.setConfig(config);\n }\n\n async resolveCrudRequest(event: APIGatewayProxyEvent): Promise<APIResponse> {\n try {\n let req = parseHttpRequest(event, this.config);\n\n if (req.policy.access?.length) {\n if (req.identity) req.identity.isScope = false;\n this.checkPermission(req.policy.access, req);\n } else if (this.config.PERMISSION_MAP && this.roleController) {\n if (req.identity) req.identity.isScope = true;\n const resource = this.getResource();\n await this.roleController.checkAccess(\n req,\n resource,\n this.config.PERMISSION_MAP.scopeMap,\n this.adminGroupNames,\n (id: string) => this.service.findById(id),\n );\n } else {\n throw new ErrorHttp({ code: 403, error: \"PermissionDenied\" }, \"Access denied\");\n }\n\n this.validateRequest(req.policy.validator, req.body);\n\n if (req.identity) {\n log.debug(\"groups: \" + JSON.stringify(req.identity.groups, null, 2));\n log.debug(`claims:${JSON.stringify(req.identity, null, 2)}`);\n log.debug(\n `groups:${req.identity.groups}, isAdmin:${req.identity.isAdmin}, userId:${req.identity.sub}, profileId:${req.identity.profile}, username:${req.identity.username}, requestType:${req.requestType}`,\n );\n }\n\n req = await this.processCrudRequestPre(req);\n\n let response: any = await this.handleCrudByMethod(req);\n\n if (response) response = await this.processCrudRequestPost(req, response);\n else response = await this.processCrudRequest(req); // Custom Endpoints\n\n if (!req.policy.response) return createApiResponse(200, response);\n\n const filteredResponse = this.filterResponse(response, req.policy.response);\n\n return createApiResponse(200, filteredResponse);\n } catch (err) {\n const error = refineHttpError(err);\n\n if (error.statusCode >= 500) log.error(error);\n else if (error.statusCode >= 400) log.warn(error);\n\n return createApiResponse(error.statusCode, error.content);\n }\n }\n\n setConfig(config: EntityConfig): void {\n this.config = config;\n }\n\n async processCrudRequestPre(req: HttpRequest): Promise<HttpRequest> {\n return req;\n }\n\n async processCrudRequestPost(request: HttpRequest, response: R | List<R>): Promise<R | List<R>> {\n return response;\n }\n\n /** Return constructor-defined resource name */\n protected getResource(): string {\n return this.config.BASE_PATH.replace(\"/\", \"\");\n }\n\n protected async handleList(methode: HttpMethod, path: string, request: HttpRequest): Promise<any> {\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH)) {\n return await this.service.find(request?.filter || {});\n }\n\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/search\") {\n return this.service.search(request?.filter || {});\n }\n\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/search/query\") {\n return this.service.searchQuery(request?.filter);\n }\n\n if (\n methode === \"GET\" &&\n trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/search/query/total-count\"\n ) {\n return this.service.searchQueryTotalCount(request?.filter);\n }\n\n if (methode === \"GET\" && trimSpecialChar(path) === trimSpecialChar(this.config.BASE_PATH) + \"/scan\") {\n return await this.service.scan(request?.filter || {});\n }\n }\n\n protected async handlePermission(req: HttpRequest, path: string) {\n return this.roleController.handlePermissionRequest(req, path, this.config.PERMISSION_MAP, this.adminGroupNames);\n }\n\n protected async handleUpdate(entityId: string, requestBody: any, requestedUser?: CognitoUser): Promise<R> {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot PATCH resource without id field\");\n\n const entity = this.parseEntity(requestBody);\n\n if (Object.keys(entity).length === 0) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] No fields to update\");\n }\n\n const fieldName = this.config.DYNAMO_DB?.MAP?.partitionKey ?? \"id\";\n\n // id change is forbidden\n if (entity[fieldName]) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot modify the id field\");\n }\n\n entity[fieldName] = entityId;\n return this.service.update(entity, requestedUser);\n }\n\n protected async handleDelete(entityId: string, requestedUser?: CognitoUser): Promise<boolean> {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot delete resource without id field\");\n\n return this.service.remove(entityId, requestedUser);\n }\n\n protected async handleFetch(entityId: string, requestedUser?: CognitoUser): Promise<R> {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot fetch resource without id field\");\n\n const result = await this.service.findById(entityId, requestedUser);\n\n if (result) return result;\n\n throw new ErrorHttp({ code: 404, error: \"NotFound\" }, `[CORE] Resource with ID ${entityId} not found`);\n }\n\n protected async handleReplace(entityId: string, entity: any, requestedUser?: CognitoUser) {\n if (!entityId)\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot PUT resource without id field\");\n\n if (!Object.keys(entity).length) {\n throw new ErrorHttp({ code: 400, error: \"Bad Request\" }, \"[CORE] No entity provided for PUT update\");\n }\n\n if (!entityId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] Cannot PUT resource without id field\");\n }\n\n entity.id = entityId;\n\n return this.service.update(entity, requestedUser);\n }\n\n protected async handlePostCreate(entity: R, cognitoUser: CognitoUser) {\n if (!entity || Object.keys(entity).length === 0) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] No entity payload provided\");\n }\n\n if (!entity.ownerId) {\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, \"[CORE] No ownerId provided\");\n }\n\n // Initialize IDs\n const { ownerId, ownerParentId: inputParentId } = entity;\n let profileId = ownerId;\n let parentId: string;\n\n // Determine parentId and profileId\n if (cognitoUser.isAdmin && inputParentId) {\n parentId = inputParentId;\n } else if (cognitoUser.isParent) {\n console.log(\"is parent becomming true\");\n\n parentId = cognitoUser.profile;\n } else {\n console.log(\"is parent not becomming true\");\n console.log(\"the value of isParent: \", cognitoUser.isParent, typeof cognitoUser.isParent);\n\n parentId = cognitoUser.parentId;\n profileId = cognitoUser.profile;\n }\n\n // Remove fields that shouldn't be saved directly\n delete entity.ownerParentId;\n delete entity.ownerId;\n\n // Save entity\n return this.service.save(entity, profileId, parentId, cognitoUser);\n }\n\n protected abstract processCrudRequest(event: HttpRequest): Promise<any>;\n\n protected isPermissionRequest(path: string): boolean {\n if (this.config.PERMISSION_MAP && this.roleController) {\n const rolePath = trimSpecialChar(this.config.PERMISSION_MAP.rolePath);\n const normalizedPath = trimSpecialChar(path);\n return normalizedPath.includes(rolePath);\n }\n\n return false;\n }\n\n protected isListRequest(methode: HttpMethod, path: string): boolean {\n const basePath = trimSpecialChar(this.config.BASE_PATH);\n\n const allowedPaths = [\n basePath,\n `${basePath}/search`,\n `${basePath}/scan`,\n `${basePath}/search/query`,\n `${basePath}/search/query/total-count`,\n ];\n\n const isMethodGet = methode === \"GET\";\n const isAllowedPath = allowedPaths.includes(trimSpecialChar(path));\n\n return isMethodGet && isAllowedPath;\n }\n\n protected isUpdateRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodPatch = methode === \"PATCH\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodPatch && isExpectedPath;\n }\n\n protected isDeleteRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodDelete = methode === \"DELETE\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodDelete && isExpectedPath;\n }\n\n protected isFetchRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodGet = methode === \"GET\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n protected isPostRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}`;\n const isMethodGet = methode === \"POST\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n protected isPutRequest(methode: HttpMethod, path: string): boolean {\n const expectedPath = `${trimSpecialChar(this.config.BASE_PATH)}/{id}`;\n const isMethodGet = methode === \"PUT\";\n const isExpectedPath = trimSpecialChar(path) === expectedPath;\n\n return isMethodGet && isExpectedPath;\n }\n\n private async handleCrudByMethod(req: HttpRequest): Promise<any> {\n const path = req.event?.requestContext?.resourcePath;\n\n const entity = this.parseEntity(req.body);\n\n if (this.isPermissionRequest(path)) return this.handlePermission(req, path);\n if (this.isUpdateRequest(req.methode, path)) return this.handleUpdate(req.entityId, entity, req.identity);\n if (this.isDeleteRequest(req.methode, path)) return this.handleDelete(req.entityId, req.identity);\n if (this.isFetchRequest(req.methode, path)) return this.handleFetch(req.entityId, req.identity);\n if (this.isPutRequest(req.methode, path)) return this.handleReplace(req.entityId, entity, req.identity);\n if (this.isPostRequest(req.methode, path)) return this.handlePostCreate(entity, req.identity);\n if (this.isListRequest(req.methode, path)) return this.handleList(req.methode, path, req);\n\n return null;\n }\n\n private filterResponse(response: any, responsePolicy: ResponseFields): any {\n if (Array.isArray(response)) {\n return removeFields(response, responsePolicy.include, responsePolicy.exclude);\n }\n\n if (response?.items && Array.isArray(response.items)) {\n response.items = removeFields(response.items, responsePolicy.include, responsePolicy.exclude);\n return response;\n }\n\n return removeFields([response], responsePolicy.include, responsePolicy.exclude)[0];\n }\n\n /** Map RequestType to Access for permission checking */\n private getUserAccessLevel(requestType: RequestType): Access {\n switch (requestType) {\n case RequestType.ADMIN:\n return Access.ADMIN;\n case RequestType.USER:\n return Access.USER;\n case RequestType.GUEST:\n return Access.PUBLIC;\n case RequestType.SYSTEM:\n return Access.SYSTEM;\n default:\n return Access.PUBLIC;\n }\n }\n\n /** Check if the user has permission for the current operation */\n private checkPermission(allowedAccess: Access[], req: HttpRequest): void {\n const currentAccessLevel = this.getUserAccessLevel(req.requestType);\n\n // This means USER can access OWNER-level permissions, but the service will verify actual ownership\n const hasPermission =\n allowedAccess.includes(currentAccessLevel) ||\n (req.requestType === RequestType.USER && allowedAccess.includes(Access.OWNER));\n\n if (hasPermission) return;\n\n throw new ErrorHttp(\n { code: 403, error: \"PermissionDenied\" },\n `Access denied. Required: ${allowedAccess.join(\", \")}, Current: ${currentAccessLevel}`,\n );\n }\n\n private setUserFilter(request: any, isAdmin: boolean, profileId: string) {\n if (isAdmin && !profileId) return;\n const ownerIdFieldName = this.config.OWNER_ID_FIELD_NAME || \"ownerId\";\n request.filterAndSort[ownerIdFieldName] = profileId;\n return request.filterAndSort;\n }\n\n private parseEntity(requestBody: any): R {\n if (!requestBody) return {} as R;\n return typeof requestBody === \"string\" ? JSON.parse(requestBody) : requestBody;\n }\n\n private validateRequest(schema: any, requestBody: any) {\n if (!schema) return;\n\n try {\n validateWithSchema(schema, requestBody);\n } catch (error) {\n const formattedErrors = formatErrors(error);\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, formattedErrors);\n }\n }\n}\n"]}
@@ -8,9 +8,9 @@ export declare abstract class ControllerRequest<R = any> {
8
8
  constructor(policies: EndpointPolicy[]);
9
9
  resolveRequestRestApi(event: APIGatewayProxyEvent): Promise<APIResponse>;
10
10
  resolveRequestHttpApi(event: APIGatewayProxyEventV2): Promise<APIResponse>;
11
+ protected abstract processRequestRestApi(event: APIGatewayProxyEvent): Promise<any>;
12
+ protected abstract processRequestHttpApi(event: APIGatewayProxyEventV2): Promise<any>;
11
13
  private handleRequest;
12
14
  private validateRequest;
13
15
  private filterResponse;
14
- protected abstract processRequestRestApi(event: APIGatewayProxyEvent): Promise<any>;
15
- protected abstract processRequestHttpApi(event: APIGatewayProxyEventV2): Promise<any>;
16
16
  }
@@ -21,21 +21,21 @@ class ControllerRequest {
21
21
  try {
22
22
  if (!Array.isArray(this.policies) || this.policies.length === 0)
23
23
  throw new exception_1.ErrorHttp(exception_1.HTTP.INTERNAL_SERVER_ERROR, "No policies defined for this controller");
24
- const policy = this.policies.find((p) => p.method === method &&
25
- (0, string_util_1.trimSpecialChar)(p.path) === (0, string_util_1.trimSpecialChar)(path));
24
+ const policy = this.policies.find((p) => p.method === method && (0, string_util_1.trimSpecialChar)(p.path) === (0, string_util_1.trimSpecialChar)(path));
26
25
  if (!policy) {
27
26
  throw new exception_1.ErrorHttp({ code: 404, error: "NotFound" }, "No matching policy found for this endpoint");
28
27
  }
29
28
  this.validateRequest(validationTarget, policy);
30
29
  const response = await processor(event);
31
- const filteredResponse = response
32
- ? this.filterResponse(response, policy.response)
33
- : response;
30
+ const filteredResponse = response ? this.filterResponse(response, policy.response) : response;
34
31
  return (0, index_1.createApiResponse)(200, filteredResponse, this.options, this.responseHeaders);
35
32
  }
36
33
  catch (err) {
37
- const error = (0, exception_1.errorHandlerHttp)(err);
38
- log.error(error);
34
+ const error = (0, exception_1.refineHttpError)(err);
35
+ if (error.statusCode >= 500)
36
+ log.error(error);
37
+ else if (error.statusCode >= 400)
38
+ log.warn(error);
39
39
  return (0, index_1.createApiResponse)(error.statusCode, error.content);
40
40
  }
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"controller-request.js","sourceRoot":"","sources":["../../src/controller/controller-request.ts"],"names":[],"mappings":";;;AAAA,oCAOkB;AAElB,4CAAiE;AAEjE,sDAAuD;AAEvD,MAAsB,iBAAiB;IAC3B,QAAQ,CAAmB;IAC3B,OAAO,CAAqB;IAC5B,eAAe,CAAyB;IAElD,YAAY,QAA0B;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAA2B;QACrD,OAAO,IAAI,CAAC,aAAa,CACvB,KAAK,EACL,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAA6B;QACvD,OAAO,IAAI,CAAC,aAAa,CACvB,KAAK,EACL,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAChC,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,KAAU,EACV,MAAc,EACd,IAAY,EACZ,gBAAqB,EACrB,SAAuC;QAEvC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,qBAAS,CAAC,gBAAI,CAAC,qBAAqB,EAAE,yCAAyC,CAAC,CAAC;YAE5J,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,KAAK,MAAM;gBACnB,IAAA,6BAAe,EAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAA,6BAAe,EAAC,IAAI,CAAC,CACpD,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,qBAAS,CACjB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAChC,4CAA4C,CAC7C,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YAExC,MAAM,gBAAgB,GAAG,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAChD,CAAC,CAAC,QAAQ,CAAC;YAEb,OAAO,IAAA,yBAAiB,EAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC,GAAG,CAAC,CAAC;YACpC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,IAAA,yBAAiB,EAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,IAAS,EAAE,MAAsB;QACvD,IAAI,CAAC;YACH,IAAA,0BAAkB,EAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,IAAI,qBAAS,CACjB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,EAClC,eAAe,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,QAAa,EAAE,cAA8B;QAClE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAA,oBAAY,EACjB,QAAQ,EACR,cAAc,CAAC,OAAO,EACtB,cAAc,CAAC,OAAO,CACvB,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,QAAQ,CAAC,KAAK,GAAG,IAAA,oBAAY,EAC3B,QAAQ,CAAC,KAAK,EACd,cAAc,CAAC,OAAO,EACtB,cAAc,CAAC,OAAO,CACvB,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,IAAA,oBAAY,EACjB,CAAC,QAAQ,CAAC,EACV,cAAc,CAAC,OAAO,EACtB,cAAc,CAAC,OAAO,CACvB,CAAC,CAAC,CAAC,CAAC;IACP,CAAC;CAIF;AA3GD,8CA2GC","sourcesContent":["import {\n APIResponse,\n APIResponseOptions,\n createApiResponse,\n formatErrors,\n removeFields,\n validateWithSchema,\n} from \"../index\";\nimport { APIGatewayProxyEvent, APIGatewayProxyEventV2 } from \"aws-lambda\";\nimport { errorHandlerHttp, ErrorHttp, HTTP } from \"../exception\";\nimport { EndpointPolicy, ResponseFields } from \"@chinggis/types\";\nimport { trimSpecialChar } from \"../utils/string.util\";\n\nexport abstract class ControllerRequest<R = any> {\n protected policies: EndpointPolicy[];\n protected options: APIResponseOptions;\n protected responseHeaders: Record<string, string>;\n\n constructor(policies: EndpointPolicy[]) {\n this.policies = policies;\n }\n\n async resolveRequestRestApi(event: APIGatewayProxyEvent): Promise<APIResponse> {\n return this.handleRequest(\n event,\n event.httpMethod,\n event.resource,\n event.body,\n this.processRequestRestApi.bind(this)\n );\n }\n\n async resolveRequestHttpApi(event: APIGatewayProxyEventV2): Promise<APIResponse> {\n return this.handleRequest(\n event,\n event.requestContext.http.method,\n event.rawPath,\n event.body,\n this.processRequestHttpApi.bind(this)\n );\n }\n\n private async handleRequest(\n event: any,\n method: string,\n path: string,\n validationTarget: any,\n processor: (event: any) => Promise<any>\n ): Promise<APIResponse> {\n try {\n if (!Array.isArray(this.policies) || this.policies.length === 0) throw new ErrorHttp(HTTP.INTERNAL_SERVER_ERROR, \"No policies defined for this controller\");\n\n const policy = this.policies.find(\n (p) =>\n p.method === method &&\n trimSpecialChar(p.path) === trimSpecialChar(path)\n );\n\n if (!policy) {\n throw new ErrorHttp(\n { code: 404, error: \"NotFound\" },\n \"No matching policy found for this endpoint\"\n );\n }\n\n this.validateRequest(validationTarget, policy);\n\n const response = await processor(event);\n\n const filteredResponse = response\n ? this.filterResponse(response, policy.response)\n : response;\n\n return createApiResponse(200, filteredResponse, this.options, this.responseHeaders);\n } catch (err) {\n const error = errorHandlerHttp(err);\n log.error(error);\n return createApiResponse(error.statusCode, error.content);\n }\n }\n\n private validateRequest(body: any, policy: EndpointPolicy): void {\n try {\n validateWithSchema(policy.validator, body);\n } catch (error) {\n const formattedErrors = formatErrors(error);\n throw new ErrorHttp(\n { code: 400, error: \"BadRequest\" },\n formattedErrors\n );\n }\n }\n\n private filterResponse(response: any, responsePolicy: ResponseFields): any {\n if (Array.isArray(response)) {\n return removeFields(\n response,\n responsePolicy.include,\n responsePolicy.exclude\n );\n }\n\n if (response?.items && Array.isArray(response.items)) {\n response.items = removeFields(\n response.items,\n responsePolicy.include,\n responsePolicy.exclude\n );\n return response;\n }\n\n return removeFields(\n [response],\n responsePolicy.include,\n responsePolicy.exclude\n )[0];\n }\n\n protected abstract processRequestRestApi(event: APIGatewayProxyEvent): Promise<any>;\n protected abstract processRequestHttpApi(event: APIGatewayProxyEventV2): Promise<any>;\n}"]}
1
+ {"version":3,"file":"controller-request.js","sourceRoot":"","sources":["../../src/controller/controller-request.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n APIResponse,\n APIResponseOptions,\n createApiResponse,\n formatErrors,\n removeFields,\n validateWithSchema,\n} from \"../index\";\nimport { APIGatewayProxyEvent, APIGatewayProxyEventV2 } from \"aws-lambda\";\nimport { ErrorHttp, HTTP, refineHttpError } from \"../exception\";\nimport { EndpointPolicy, ResponseFields } from \"@chinggis/types\";\nimport { trimSpecialChar } from \"../utils/string.util\";\n\nexport abstract class ControllerRequest<R = any> {\n protected policies: EndpointPolicy[];\n protected options: APIResponseOptions;\n protected responseHeaders: Record<string, string>;\n\n constructor(policies: EndpointPolicy[]) {\n this.policies = policies;\n }\n\n async resolveRequestRestApi(event: APIGatewayProxyEvent): Promise<APIResponse> {\n return this.handleRequest(\n event,\n event.httpMethod,\n event.resource,\n event.body,\n this.processRequestRestApi.bind(this),\n );\n }\n\n async resolveRequestHttpApi(event: APIGatewayProxyEventV2): Promise<APIResponse> {\n return this.handleRequest(\n event,\n event.requestContext.http.method,\n event.rawPath,\n event.body,\n this.processRequestHttpApi.bind(this),\n );\n }\n\n protected abstract processRequestRestApi(event: APIGatewayProxyEvent): Promise<any>;\n\n protected abstract processRequestHttpApi(event: APIGatewayProxyEventV2): Promise<any>;\n\n private async handleRequest(\n event: any,\n method: string,\n path: string,\n validationTarget: any,\n processor: (event: any) => Promise<any>,\n ): Promise<APIResponse> {\n try {\n if (!Array.isArray(this.policies) || this.policies.length === 0)\n throw new ErrorHttp(HTTP.INTERNAL_SERVER_ERROR, \"No policies defined for this controller\");\n\n const policy = this.policies.find(\n (p) => p.method === method && trimSpecialChar(p.path) === trimSpecialChar(path),\n );\n\n if (!policy) {\n throw new ErrorHttp({ code: 404, error: \"NotFound\" }, \"No matching policy found for this endpoint\");\n }\n\n this.validateRequest(validationTarget, policy);\n\n const response = await processor(event);\n\n const filteredResponse = response ? this.filterResponse(response, policy.response) : response;\n\n return createApiResponse(200, filteredResponse, this.options, this.responseHeaders);\n } catch (err) {\n const error = refineHttpError(err);\n\n if (error.statusCode >= 500) log.error(error);\n else if (error.statusCode >= 400) log.warn(error);\n\n return createApiResponse(error.statusCode, error.content);\n }\n }\n\n private validateRequest(body: any, policy: EndpointPolicy): void {\n try {\n validateWithSchema(policy.validator, body);\n } catch (error) {\n const formattedErrors = formatErrors(error);\n throw new ErrorHttp({ code: 400, error: \"BadRequest\" }, formattedErrors);\n }\n }\n\n private filterResponse(response: any, responsePolicy: ResponseFields): any {\n if (Array.isArray(response)) {\n return removeFields(response, responsePolicy.include, responsePolicy.exclude);\n }\n\n if (response?.items && Array.isArray(response.items)) {\n response.items = removeFields(response.items, responsePolicy.include, responsePolicy.exclude);\n return response;\n }\n\n return removeFields([response], responsePolicy.include, responsePolicy.exclude)[0];\n }\n}\n"]}
@@ -1,8 +1,7 @@
1
1
  export declare class ErrorBase extends Error {
2
- code: number;
3
- message: string;
4
- error: any;
5
- constructor(code: number, message: string, errorContent?: any);
2
+ readonly code: number;
3
+ readonly error?: unknown;
4
+ constructor(code: number, message: string, error?: unknown);
6
5
  }
7
6
  export declare class ErrorDynamoDB extends Error {
8
7
  tableName: string;
@@ -11,7 +10,8 @@ export declare class ErrorDynamoDB extends Error {
11
10
  }
12
11
  export interface ErrorCodeMsg {
13
12
  code: number;
14
- error: string;
13
+ msg?: string;
14
+ error?: string;
15
15
  }
16
16
  export declare class ErrorHttp extends Error {
17
17
  statusCode: number;
@@ -3,12 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MissingParameterError = exports.ErrorValidation = exports.ErrorHttp = exports.ErrorDynamoDB = exports.ErrorBase = void 0;
4
4
  class ErrorBase extends Error {
5
5
  code;
6
- message;
7
6
  error;
8
- constructor(code, message, errorContent) {
9
- super(errorContent);
7
+ constructor(code, message, error) {
8
+ super(message);
10
9
  this.code = code;
11
- this.message = message;
10
+ this.error = error;
11
+ Object.setPrototypeOf(this, new.target.prototype);
12
+ this.name = this.constructor.name;
13
+ if (Error.captureStackTrace) {
14
+ Error.captureStackTrace(this, this.constructor);
15
+ }
12
16
  }
13
17
  }
14
18
  exports.ErrorBase = ErrorBase;
@@ -30,7 +34,7 @@ class ErrorHttp extends Error {
30
34
  constructor(errorCodeMsg, errorMessage, errorData) {
31
35
  super(errorData);
32
36
  this.statusCode = errorCodeMsg.code;
33
- this.error = errorCodeMsg.error;
37
+ this.error = errorCodeMsg.msg ?? errorCodeMsg.error ?? "";
34
38
  this.message = typeof errorMessage === "object" ? JSON.stringify(errorMessage) : errorMessage;
35
39
  this.data = errorData;
36
40
  }