@opengis/fastify-table 2.3.6 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/dist/errors.d.ts +38 -0
  2. package/dist/errors.d.ts.map +1 -0
  3. package/dist/errors.js +10 -0
  4. package/dist/index.js +3 -3
  5. package/dist/server/plugins/access/funcs/getAdminAccess.d.ts +1 -4
  6. package/dist/server/plugins/access/funcs/getAdminAccess.d.ts.map +1 -1
  7. package/dist/server/plugins/access/funcs/getAdminAccess.js +3 -2
  8. package/dist/server/plugins/auth/funcs/getQuery.d.ts.map +1 -1
  9. package/dist/server/plugins/auth/funcs/getQuery.js +2 -1
  10. package/dist/server/plugins/auth/funcs/loginFile.d.ts +1 -4
  11. package/dist/server/plugins/auth/funcs/loginFile.d.ts.map +1 -1
  12. package/dist/server/plugins/auth/funcs/loginFile.js +10 -5
  13. package/dist/server/plugins/auth/funcs/loginUser.d.ts.map +1 -1
  14. package/dist/server/plugins/auth/funcs/loginUser.js +25 -18
  15. package/dist/server/plugins/auth/index.d.ts.map +1 -1
  16. package/dist/server/plugins/auth/index.js +3 -4
  17. package/dist/server/plugins/crud/funcs/dataInsert.js +1 -1
  18. package/dist/server/plugins/extra/extraData.d.ts.map +1 -1
  19. package/dist/server/plugins/extra/extraData.js +3 -2
  20. package/dist/server/plugins/extra/extraDataGet.d.ts +1 -4
  21. package/dist/server/plugins/extra/extraDataGet.d.ts.map +1 -1
  22. package/dist/server/plugins/extra/extraDataGet.js +4 -6
  23. package/dist/server/plugins/file/uploadMultiPart.js +1 -1
  24. package/dist/server/plugins/grpc/utils/html2doc.d.ts +0 -6
  25. package/dist/server/plugins/grpc/utils/html2doc.d.ts.map +1 -1
  26. package/dist/server/plugins/grpc/utils/html2doc.js +3 -8
  27. package/dist/server/plugins/grpc/utils/html2img.d.ts +0 -6
  28. package/dist/server/plugins/grpc/utils/html2img.d.ts.map +1 -1
  29. package/dist/server/plugins/grpc/utils/html2img.js +3 -8
  30. package/dist/server/plugins/grpc/utils/html2pdf.d.ts +0 -6
  31. package/dist/server/plugins/grpc/utils/html2pdf.d.ts.map +1 -1
  32. package/dist/server/plugins/grpc/utils/html2pdf.js +7 -12
  33. package/dist/server/plugins/grpc/utils/mergePdf.d.ts +0 -7
  34. package/dist/server/plugins/grpc/utils/mergePdf.d.ts.map +1 -1
  35. package/dist/server/plugins/grpc/utils/mergePdf.js +4 -9
  36. package/dist/server/plugins/logger/checkUserAccess.d.ts +1 -4
  37. package/dist/server/plugins/logger/checkUserAccess.d.ts.map +1 -1
  38. package/dist/server/plugins/logger/checkUserAccess.js +4 -6
  39. package/dist/server/plugins/logger/errorMessage.d.ts +1 -1
  40. package/dist/server/plugins/logger/errorMessage.d.ts.map +1 -1
  41. package/dist/server/plugins/logger/errorMessage.js +7 -8
  42. package/dist/server/plugins/logger/errorStatus.d.ts.map +1 -1
  43. package/dist/server/plugins/logger/errorStatus.js +6 -0
  44. package/dist/server/plugins/logger/index.d.ts +2 -2
  45. package/dist/server/plugins/logger/index.d.ts.map +1 -1
  46. package/dist/server/plugins/logger/index.js +16 -18
  47. package/dist/server/plugins/pg/funcs/getMeta.d.ts.map +1 -1
  48. package/dist/server/plugins/pg/funcs/getMeta.js +5 -3
  49. package/dist/server/plugins/policy/funcs/checkJWT.d.ts +0 -9
  50. package/dist/server/plugins/policy/funcs/checkJWT.d.ts.map +1 -1
  51. package/dist/server/plugins/policy/funcs/checkJWT.js +6 -5
  52. package/dist/server/plugins/policy/funcs/checkPermissions.d.ts +1 -4
  53. package/dist/server/plugins/policy/funcs/checkPermissions.d.ts.map +1 -1
  54. package/dist/server/plugins/policy/funcs/checkPermissions.js +2 -1
  55. package/dist/server/plugins/policy/funcs/checkPolicy.d.ts +1 -4
  56. package/dist/server/plugins/policy/funcs/checkPolicy.d.ts.map +1 -1
  57. package/dist/server/plugins/policy/funcs/checkPolicy.js +8 -7
  58. package/dist/server/plugins/policy/index.d.ts.map +1 -1
  59. package/dist/server/plugins/policy/index.js +2 -11
  60. package/dist/server/plugins/table/funcs/getFilterSQL/index.d.ts +1 -15
  61. package/dist/server/plugins/table/funcs/getFilterSQL/index.d.ts.map +1 -1
  62. package/dist/server/plugins/table/funcs/getFilterSQL/index.js +6 -4
  63. package/dist/server/plugins/table/funcs/gisIRColumn.d.ts +0 -22
  64. package/dist/server/plugins/table/funcs/gisIRColumn.d.ts.map +1 -1
  65. package/dist/server/plugins/table/funcs/gisIRColumn.js +5 -3
  66. package/dist/server/plugins/upload/index.d.ts.map +1 -1
  67. package/dist/server/plugins/upload/index.js +7 -0
  68. package/dist/server/plugins/upload/s3.d.ts +7 -1
  69. package/dist/server/plugins/upload/s3.d.ts.map +1 -1
  70. package/dist/server/plugins/upload/s3.js +54 -10
  71. package/dist/server/plugins/upload/s3minio.d.ts +59 -0
  72. package/dist/server/plugins/upload/s3minio.d.ts.map +1 -0
  73. package/dist/server/plugins/upload/s3minio.js +199 -0
  74. package/dist/server/plugins/upload/startUpload.d.ts.map +1 -1
  75. package/dist/server/plugins/upload/startUpload.js +2 -4
  76. package/dist/server/plugins/upload/uploadChunk.d.ts.map +1 -1
  77. package/dist/server/plugins/upload/uploadChunk.js +9 -8
  78. package/dist/server/plugins/usercls/index.js +1 -1
  79. package/dist/server/routes/access/controllers/access.group.d.ts.map +1 -1
  80. package/dist/server/routes/access/controllers/access.group.js +3 -5
  81. package/dist/server/routes/access/controllers/access.group.post.d.ts.map +1 -1
  82. package/dist/server/routes/access/controllers/access.group.post.js +3 -5
  83. package/dist/server/routes/access/controllers/access.interface.d.ts.map +1 -1
  84. package/dist/server/routes/access/controllers/access.interface.js +1 -4
  85. package/dist/server/routes/access/controllers/access.user.d.ts +5 -1
  86. package/dist/server/routes/access/controllers/access.user.d.ts.map +1 -1
  87. package/dist/server/routes/access/controllers/access.user.js +4 -5
  88. package/dist/server/routes/access/controllers/access.user.post.d.ts.map +1 -1
  89. package/dist/server/routes/access/controllers/access.user.post.js +4 -5
  90. package/dist/server/routes/auth/controllers/2factor/providers/totp.d.ts.map +1 -1
  91. package/dist/server/routes/auth/controllers/2factor/providers/totp.js +4 -3
  92. package/dist/server/routes/auth/controllers/2factor/qrcode.d.ts.map +1 -1
  93. package/dist/server/routes/auth/controllers/2factor/qrcode.js +6 -10
  94. package/dist/server/routes/auth/controllers/2factor/recovery.d.ts.map +1 -1
  95. package/dist/server/routes/auth/controllers/2factor/recovery.js +14 -23
  96. package/dist/server/routes/auth/controllers/2factor/reset.d.ts.map +1 -1
  97. package/dist/server/routes/auth/controllers/2factor/reset.js +3 -5
  98. package/dist/server/routes/auth/controllers/2factor/verify.d.ts.map +1 -1
  99. package/dist/server/routes/auth/controllers/2factor/verify.js +30 -43
  100. package/dist/server/routes/auth/controllers/core/login.d.ts +1 -4
  101. package/dist/server/routes/auth/controllers/core/login.d.ts.map +1 -1
  102. package/dist/server/routes/auth/controllers/core/passwordRecovery.d.ts.map +1 -1
  103. package/dist/server/routes/auth/controllers/core/passwordRecovery.js +7 -8
  104. package/dist/server/routes/auth/controllers/core/registration.d.ts +1 -4
  105. package/dist/server/routes/auth/controllers/core/registration.d.ts.map +1 -1
  106. package/dist/server/routes/auth/controllers/core/registration.js +10 -24
  107. package/dist/server/routes/auth/controllers/core/updateUserInfo.d.ts +1 -2
  108. package/dist/server/routes/auth/controllers/core/updateUserInfo.d.ts.map +1 -1
  109. package/dist/server/routes/auth/controllers/core/updateUserInfo.js +3 -2
  110. package/dist/server/routes/auth/controllers/euSign/authByData.d.ts.map +1 -1
  111. package/dist/server/routes/auth/controllers/euSign/authByData.js +4 -7
  112. package/dist/server/routes/auth/controllers/jwt/authorize.d.ts.map +1 -1
  113. package/dist/server/routes/auth/controllers/jwt/authorize.js +6 -9
  114. package/dist/server/routes/auth/controllers/jwt/token.d.ts.map +1 -1
  115. package/dist/server/routes/auth/controllers/jwt/token.js +9 -12
  116. package/dist/server/routes/auth/controllers/page/login2faTemplate.d.ts.map +1 -1
  117. package/dist/server/routes/auth/controllers/page/login2faTemplate.js +3 -2
  118. package/dist/server/routes/cron/controllers/cronApi.d.ts.map +1 -1
  119. package/dist/server/routes/cron/controllers/cronApi.js +3 -4
  120. package/dist/server/routes/crud/controllers/deleteCrud.d.ts.map +1 -1
  121. package/dist/server/routes/crud/controllers/deleteCrud.js +11 -33
  122. package/dist/server/routes/crud/controllers/insert.d.ts +1 -1
  123. package/dist/server/routes/crud/controllers/insert.d.ts.map +1 -1
  124. package/dist/server/routes/crud/controllers/insert.js +17 -31
  125. package/dist/server/routes/crud/controllers/table.d.ts.map +1 -1
  126. package/dist/server/routes/crud/controllers/table.js +14 -18
  127. package/dist/server/routes/crud/controllers/update.d.ts.map +1 -1
  128. package/dist/server/routes/crud/controllers/update.js +16 -28
  129. package/dist/server/routes/dblist/controllers/setItem.d.ts +0 -6
  130. package/dist/server/routes/dblist/controllers/setItem.d.ts.map +1 -1
  131. package/dist/server/routes/dblist/controllers/setItem.js +3 -2
  132. package/dist/server/routes/file/controllers/delete.d.ts +4 -1
  133. package/dist/server/routes/file/controllers/delete.d.ts.map +1 -1
  134. package/dist/server/routes/file/controllers/delete.js +8 -8
  135. package/dist/server/routes/file/controllers/download.d.ts.map +1 -1
  136. package/dist/server/routes/file/controllers/download.js +5 -8
  137. package/dist/server/routes/file/controllers/export.d.ts.map +1 -1
  138. package/dist/server/routes/file/controllers/export.js +8 -8
  139. package/dist/server/routes/file/controllers/files.d.ts.map +1 -1
  140. package/dist/server/routes/file/controllers/files.js +6 -8
  141. package/dist/server/routes/file/controllers/resize.d.ts.map +1 -1
  142. package/dist/server/routes/file/controllers/resize.js +4 -12
  143. package/dist/server/routes/grpc/controllers/file2geojson.d.ts.map +1 -1
  144. package/dist/server/routes/grpc/controllers/file2geojson.js +7 -7
  145. package/dist/server/routes/grpc/controllers/filePreview.d.ts.map +1 -1
  146. package/dist/server/routes/grpc/controllers/filePreview.js +5 -4
  147. package/dist/server/routes/logger/controllers/logger.file.d.ts +1 -1
  148. package/dist/server/routes/logger/controllers/logger.file.d.ts.map +1 -1
  149. package/dist/server/routes/logger/controllers/logger.file.js +4 -5
  150. package/dist/server/routes/logger/controllers/logger.metrics.d.ts.map +1 -1
  151. package/dist/server/routes/logger/controllers/logger.metrics.js +1 -4
  152. package/dist/server/routes/menu/controllers/getMenu.d.ts.map +1 -1
  153. package/dist/server/routes/menu/controllers/getMenu.js +2 -1
  154. package/dist/server/routes/notifications/controllers/addUserNotification.d.ts +1 -2
  155. package/dist/server/routes/notifications/controllers/addUserNotification.d.ts.map +1 -1
  156. package/dist/server/routes/notifications/controllers/addUserNotification.js +5 -6
  157. package/dist/server/routes/notifications/controllers/deleteUserNotification.d.ts +1 -2
  158. package/dist/server/routes/notifications/controllers/deleteUserNotification.d.ts.map +1 -1
  159. package/dist/server/routes/notifications/controllers/deleteUserNotification.js +5 -6
  160. package/dist/server/routes/notifications/controllers/editUserNotification.d.ts +1 -2
  161. package/dist/server/routes/notifications/controllers/editUserNotification.d.ts.map +1 -1
  162. package/dist/server/routes/notifications/controllers/editUserNotification.js +6 -9
  163. package/dist/server/routes/notifications/controllers/readNotifications.d.ts +4 -2
  164. package/dist/server/routes/notifications/controllers/readNotifications.d.ts.map +1 -1
  165. package/dist/server/routes/notifications/controllers/readNotifications.js +4 -3
  166. package/dist/server/routes/notifications/controllers/userNotifications.d.ts +5 -2
  167. package/dist/server/routes/notifications/controllers/userNotifications.d.ts.map +1 -1
  168. package/dist/server/routes/notifications/controllers/userNotifications.js +4 -5
  169. package/dist/server/routes/properties/controllers/properties.get.d.ts +5 -2
  170. package/dist/server/routes/properties/controllers/properties.get.d.ts.map +1 -1
  171. package/dist/server/routes/properties/controllers/properties.get.js +6 -5
  172. package/dist/server/routes/properties/controllers/properties.post.d.ts +1 -1
  173. package/dist/server/routes/properties/controllers/properties.post.d.ts.map +1 -1
  174. package/dist/server/routes/properties/controllers/properties.post.js +7 -6
  175. package/dist/server/routes/table/controllers/card.d.ts +1 -1
  176. package/dist/server/routes/table/controllers/card.d.ts.map +1 -1
  177. package/dist/server/routes/table/controllers/card.js +9 -7
  178. package/dist/server/routes/table/controllers/cardData.d.ts.map +1 -1
  179. package/dist/server/routes/table/controllers/cardData.js +4 -6
  180. package/dist/server/routes/table/controllers/cardTabData.d.ts.map +1 -1
  181. package/dist/server/routes/table/controllers/cardTabData.js +3 -2
  182. package/dist/server/routes/table/controllers/dataInfo.d.ts.map +1 -1
  183. package/dist/server/routes/table/controllers/dataInfo.js +4 -3
  184. package/dist/server/routes/table/controllers/filter.d.ts.map +1 -1
  185. package/dist/server/routes/table/controllers/filter.js +3 -2
  186. package/dist/server/routes/table/controllers/form.d.ts +1 -1
  187. package/dist/server/routes/table/controllers/form.d.ts.map +1 -1
  188. package/dist/server/routes/table/controllers/form.js +7 -5
  189. package/dist/server/routes/table/controllers/getFormByTable.d.ts.map +1 -1
  190. package/dist/server/routes/table/controllers/getFormByTable.js +12 -12
  191. package/dist/server/routes/table/controllers/suggest.d.ts +1 -1
  192. package/dist/server/routes/table/controllers/suggest.d.ts.map +1 -1
  193. package/dist/server/routes/table/controllers/suggest.js +14 -29
  194. package/dist/server/routes/table/controllers/tableInfo.d.ts +1 -2
  195. package/dist/server/routes/table/controllers/tableInfo.d.ts.map +1 -1
  196. package/dist/server/routes/table/controllers/tableInfo.js +9 -8
  197. package/dist/server/routes/table/controllers/tokenInfo.d.ts.map +1 -1
  198. package/dist/server/routes/table/controllers/tokenInfo.js +2 -1
  199. package/dist/server/routes/table/functions/getData.d.ts.map +1 -1
  200. package/dist/server/routes/table/functions/getData.js +19 -25
  201. package/dist/server/routes/templates/controllers/getTemplate.d.ts.map +1 -1
  202. package/dist/server/routes/templates/controllers/getTemplate.js +9 -5
  203. package/dist/server/routes/upload/index.d.ts.map +1 -1
  204. package/dist/server/routes/upload/index.js +8 -15
  205. package/dist/server/routes/usercls/controllers/addUserCls.d.ts.map +1 -1
  206. package/dist/server/routes/usercls/controllers/addUserCls.js +2 -1
  207. package/dist/server/routes/usercls/controllers/deleteUserCls.d.ts.map +1 -1
  208. package/dist/server/routes/usercls/controllers/deleteUserCls.js +2 -1
  209. package/dist/server/routes/usercls/controllers/editUserCls.d.ts.map +1 -1
  210. package/dist/server/routes/usercls/controllers/editUserCls.js +2 -1
  211. package/dist/server/routes/usercls/controllers/getUserCls.d.ts +1 -1
  212. package/dist/server/routes/usercls/controllers/getUserCls.d.ts.map +1 -1
  213. package/dist/server/routes/usercls/controllers/getUserCls.js +4 -3
  214. package/dist/server/routes/util/controllers/code.generator.d.ts.map +1 -1
  215. package/dist/server/routes/util/controllers/code.generator.js +7 -6
  216. package/dist/server/routes/util/controllers/user.tokens.d.ts +1 -2
  217. package/dist/server/routes/util/controllers/user.tokens.d.ts.map +1 -1
  218. package/dist/server/routes/util/controllers/user.tokens.js +6 -5
  219. package/dist/server/routes/widget/controllers/file.edit.d.ts.map +1 -1
  220. package/dist/server/routes/widget/controllers/file.edit.js +5 -4
  221. package/dist/server/routes/widget/controllers/widget.del.d.ts.map +1 -1
  222. package/dist/server/routes/widget/controllers/widget.del.js +6 -7
  223. package/dist/server/routes/widget/controllers/widget.get.d.ts.map +1 -1
  224. package/dist/server/routes/widget/controllers/widget.get.js +4 -3
  225. package/dist/server/routes/widget/controllers/widget.set.d.ts.map +1 -1
  226. package/dist/server/routes/widget/controllers/widget.set.js +5 -4
  227. package/package.json +3 -1
  228. package/dist/module/core/cls/constraint_type.json +0 -14
  229. package/dist/module/core/cls/constraint_type_table.json +0 -18
  230. package/dist/server/migrations/oauth.sql.sql +0 -77
  231. package/dist/server/plugins/auth/funcs/getUserPermissions.d.ts +0 -2
  232. package/dist/server/plugins/auth/funcs/getUserPermissions.d.ts.map +0 -1
  233. package/dist/server/plugins/auth/funcs/getUserPermissions.js +0 -24
  234. package/dist/server/plugins/auth/onRequest.d.ts +0 -4
  235. package/dist/server/plugins/auth/onRequest.d.ts.map +0 -1
  236. package/dist/server/plugins/auth/onRequest.js +0 -104
  237. package/dist/server/plugins/migration/index.d.ts +0 -3
  238. package/dist/server/plugins/migration/index.d.ts.map +0 -1
  239. package/dist/server/plugins/migration/index.js +0 -5
  240. package/dist/server/plugins/policy/funcs/checkAuth.d.ts +0 -4
  241. package/dist/server/plugins/policy/funcs/checkAuth.d.ts.map +0 -1
  242. package/dist/server/plugins/policy/funcs/checkAuth.js +0 -104
  243. package/dist/server/routes/access/controllers/access.resources.d.ts +0 -6
  244. package/dist/server/routes/access/controllers/access.resources.d.ts.map +0 -1
  245. package/dist/server/routes/access/controllers/access.resources.js +0 -14
  246. package/dist/server/routes/access/controllers/resources.d.ts +0 -11
  247. package/dist/server/routes/access/controllers/resources.d.ts.map +0 -1
  248. package/dist/server/routes/access/controllers/resources.js +0 -14
  249. package/dist/server/routes/access/functions/resources.d.ts +0 -6
  250. package/dist/server/routes/access/functions/resources.d.ts.map +0 -1
  251. package/dist/server/routes/access/functions/resources.js +0 -11
  252. package/dist/server/types/errors.d.ts +0 -14
  253. package/dist/server/types/errors.d.ts.map +0 -1
  254. package/dist/server/types/errors.js +0 -4
@@ -1,8 +1,9 @@
1
+ import { ForbiddenError } from "../../../../errors.js";
1
2
  import { getOpt, getToken } from "../../../../utils.js";
2
3
  export default async function tokenInfo(req, reply) {
3
4
  const { params = {}, user } = req;
4
5
  if (user.user_type !== "admin") {
5
- return reply.status(403).send("access restricted");
6
+ throw ForbiddenError("access restricted");
6
7
  }
7
8
  const tokenData = (await getToken({ uid: user.uid, token: params.token })) ||
8
9
  (await getOpt(params.token, user.uid));
@@ -1 +1 @@
1
- {"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkFzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,KAAK,EACL,EAAE,EACF,OAAY,EACZ,KAAU,EACV,IAAS,EACT,YAAY,EACZ,YAAY,EACZ,KAAY,EACZ,UAAU,EACV,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,YAAY,EACrB,QAAgB,GACjB,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,MAAM,CAAC,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,GAAG,gBA23Bb"}
1
+ {"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAwFzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,KAAK,EACL,EAAE,EACF,OAAY,EACZ,KAAU,EACV,IAAS,EACT,YAAY,EACZ,YAAY,EACZ,KAAY,EACZ,UAAU,EACV,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,YAAY,EACrB,QAAgB,GACjB,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,MAAM,CAAC,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,GAAG,gBAq3Bb"}
@@ -19,6 +19,7 @@ import extraDataGet from "../../../plugins/extra/extraDataGet.js";
19
19
  import locales from "../controllers/utils/locales.js";
20
20
  import conditions from "../controllers/utils/conditions.js";
21
21
  import { resources } from "../../../plugins/access/funcs/getResources.js";
22
+ import { BadRequestError, ForbiddenError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
22
23
  const components = {
23
24
  "vs-widget-file": "select 'vs-widget-file' as component, count(*) from crm.files where entity_id=$1 and file_status<>3",
24
25
  "vs-widget-comments": "select 'vs-widget-comments' as component, count(*) from crm.communications where entity_id=$1",
@@ -62,9 +63,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
62
63
  const checkQuery = (item) => user?.user_type === "superadmin" ? !item.includes("{{uid}}") : true;
63
64
  const paramsTable = params?.table || table;
64
65
  if (!paramsTable) {
65
- return reply
66
- .status(400)
67
- .send({ error: "not enough params: table", code: 400 });
66
+ throw BadRequestError("not enough params: table");
68
67
  }
69
68
  const hookData = (await applyHook("preData", {
70
69
  pg,
@@ -72,11 +71,12 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
72
71
  id: params?.id || id,
73
72
  user,
74
73
  }));
74
+ // hooks should throw custom errors instead, this is temp solution to avoid breaking changes in hooks
75
75
  if (hookData?.message && hookData?.status) {
76
- const response = hookData.status >= 400
77
- ? { error: hookData.message, code: hookData.status }
78
- : hookData.message;
79
- return reply.status(hookData.status).send(response);
76
+ if (hookData.status >= 400) {
77
+ throw new Error(hookData.message);
78
+ }
79
+ return hookData.message;
80
80
  }
81
81
  /* from tableData START */
82
82
  const tokenData1 = await getOpt(paramsTable, uid);
@@ -126,15 +126,18 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
126
126
  if (query?.sql === "0")
127
127
  return loadTable;
128
128
  if (!pg) {
129
- return reply.status(500).send("empty pg");
129
+ throw Error("empty pg");
130
130
  }
131
131
  const pkey = pg.pk?.[resources[paramsTable] || paramsTable] ||
132
132
  pg.pk?.[resources[paramsTable] || paramsTable.replace(/"/g, "")] ||
133
- (await getMeta({ pg, table: resources[paramsTable] || paramsTable }))?.pk;
133
+ (await getMeta({
134
+ pg,
135
+ table: resources[paramsTable] || loadTable?.table || paramsTable,
136
+ }))?.pk;
134
137
  if (!loadTable &&
135
138
  !(tokenData?.table && pg.pk?.[tokenData?.table]) &&
136
139
  !(called && pkey)) {
137
- return reply.status(404).send("template not found");
140
+ throw NotFoundError("template not found");
138
141
  }
139
142
  const objectId = tokenData?.id || hookData?.id || params?.id || id;
140
143
  const { actions = [], query: accessQuery, message: accessMessage, } = actionsParam
@@ -151,10 +154,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
151
154
  method,
152
155
  }, pg)) || {};
153
156
  if (accessMessage) {
154
- return reply.status(403).send({
155
- error: accessMessage,
156
- code: 403,
157
- });
157
+ throw ForbiddenError(accessMessage);
158
158
  }
159
159
  // const body = loadTable || hookData || tokenData;
160
160
  const { table: table1, columns = [], sql, cardSql, form, meta, sqlColumns, editable = false, } = loadTable || hookData || tokenData || params || { table };
@@ -168,10 +168,10 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
168
168
  !called &&
169
169
  !accessQueryParam &&
170
170
  !actionsParam) {
171
- return reply.status(401).send({ error: "unauthorized", code: 401 });
171
+ throw UnauthorizedError("unauthorized");
172
172
  }
173
173
  if (!ispublic && !actions.includes("view") && !config?.local && !called) {
174
- return reply.status(403).send({ error: "access restricted", code: 403 });
174
+ throw ForbiddenError("access restricted");
175
175
  }
176
176
  const { list: filters = [] } = objectId
177
177
  ? {}
@@ -185,9 +185,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
185
185
  timeArr.push(Date.now());
186
186
  if (tableMeta?.view) {
187
187
  if (!loadTable?.key && !tokenData?.key) {
188
- return reply
189
- .status(404)
190
- .send({ error: `key not found: ${table1}`, code: 404 });
188
+ throw NotFoundError(`key not found: ${table1}`);
191
189
  }
192
190
  Object.assign(tableMeta, { pk: loadTable?.key || tokenData?.key });
193
191
  }
@@ -204,9 +202,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
204
202
  Object.assign(col, locales[`${table1 || paramsTable}.${col.name}`] || {});
205
203
  });
206
204
  if (!pk) {
207
- return reply
208
- .status(404)
209
- .send({ error: `table not found: ${table1}`, code: 404 });
205
+ throw NotFoundError(`table not found: ${table1}`);
210
206
  }
211
207
  const columnList = dbColumns.map((el) => el.name || el).join(",");
212
208
  const sqlTable = sql
@@ -371,9 +367,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
371
367
  if (!rows.length &&
372
368
  headers?.referer?.includes?.("/card/") &&
373
369
  headers?.referer?.includes?.(templateName)) {
374
- return reply
375
- .status(403)
376
- .send({ error: "access restricted: empty rows", code: 403 });
370
+ throw ForbiddenError("access restricted: empty rows");
377
371
  }
378
372
  timeArr.push(Date.now());
379
373
  if (uid &&
@@ -1 +1 @@
1
- {"version":3,"file":"getTemplate.d.ts","sourceRoot":"","sources":["../../../../../server/routes/templates/controllers/getTemplate.ts"],"names":[],"mappings":"AAyCA,wBAA8B,cAAc,CAAC,GAAG,EAAE,GAAG,gBAgDpD"}
1
+ {"version":3,"file":"getTemplate.d.ts","sourceRoot":"","sources":["../../../../../server/routes/templates/controllers/getTemplate.ts"],"names":[],"mappings":"AAyCA,wBAA8B,cAAc,CAAC,GAAG,EAAE,GAAG,gBAsDpD"}
@@ -32,17 +32,21 @@ function formatSchema(schema, user, opt) {
32
32
  .forEach(parseDataTables);
33
33
  }
34
34
  export default async function getTemplateApi(req) {
35
- const { user } = req || {};
36
- const { params = {} } = req;
37
- const { type, name } = params;
35
+ const { params, user } = req || {};
36
+ const { type, name } = params || {};
38
37
  const tokenData = (await getToken({ token: name, uid: user?.uid, json: 1 })) || {};
39
38
  const hookData = (await applyHook("preTemplate", {
40
39
  name: tokenData.name || name,
41
40
  type,
42
41
  user,
43
42
  }));
44
- if (hookData?.message && hookData?.status)
45
- return hookData;
43
+ // hooks should throw custom errors instead, this is temp solution to avoid breaking changes in hooks
44
+ if (hookData?.message && hookData?.status) {
45
+ if (hookData.status >= 400) {
46
+ throw new Error(hookData.message);
47
+ }
48
+ return hookData.message;
49
+ }
46
50
  const data = await getTemplate(type, hookData?.name || tokenData.form || name);
47
51
  if (data && tokenData.obj) {
48
52
  const obj = tokenData.obj.split("#").reduce((p, el) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/upload/index.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAG,EAAE,GAAG,QA2GtC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/upload/index.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAG,EAAE,GAAG,QAmGtC"}
@@ -4,6 +4,7 @@ import { prefix } from "../../plugins/upload/index.js";
4
4
  import startUpload from "../../plugins/upload/startUpload.js";
5
5
  import uploadChunk from "../../plugins/upload/uploadChunk.js";
6
6
  import getUploadStatus from "../../plugins/upload/getUploadStatus.js";
7
+ import { BadRequestError, LengthRequiredError } from "../../../errors.js";
7
8
  const policy = "L0"; // public
8
9
  const tags = ["core", "upload"];
9
10
  export default function plugin(app) {
@@ -13,15 +14,11 @@ export default function plugin(app) {
13
14
  }, async (req, reply) => {
14
15
  const { fileName, size, subdir, id } = req.body || {};
15
16
  if (!fileName || !size) {
16
- return reply
17
- .code(400)
18
- .send({ error: "fileName and size required", code: 400 });
17
+ throw BadRequestError("fileName and size are required");
19
18
  }
20
19
  const result = await startUpload({ fileName, size, subdir, id });
21
- if (result.code) {
22
- return reply
23
- .status(result.code)
24
- .send({ error: result.error, code: result.code });
20
+ if (result.error) {
21
+ throw new Error(result.error);
25
22
  }
26
23
  return result;
27
24
  });
@@ -47,13 +44,11 @@ export default function plugin(app) {
47
44
  },
48
45
  }, async (req, reply) => {
49
46
  if (!req.headers["content-range"]) {
50
- return reply
51
- .status(411)
52
- .send({ error: "Content-Range required", code: 411 });
47
+ throw LengthRequiredError("Content-Range required");
53
48
  }
54
49
  const match = req.headers["content-range"].match(/bytes (\d+)-(\d+)\/(\d+)/);
55
50
  if (!match) {
56
- return { error: "Invalid Content-Range", code: 400 };
51
+ throw BadRequestError("Invalid Content-Range");
57
52
  }
58
53
  const offset = parseInt(match[1], 10);
59
54
  const end = parseInt(match[2], 10);
@@ -65,10 +60,8 @@ export default function plugin(app) {
65
60
  end,
66
61
  size,
67
62
  });
68
- if (result.code) {
69
- return reply
70
- .status(result.code)
71
- .send({ error: result.error, code: result.code });
63
+ if (result.error) {
64
+ throw new Error(result.error);
72
65
  }
73
66
  return result;
74
67
  });
@@ -1 +1 @@
1
- {"version":3,"file":"addUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/addUserCls.ts"],"names":[],"mappings":"AAUA,wBAA8B,aAAa,CACzC,EAAE,EAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAC1C,KAAK,EAAE,GAAG,gBAqCX"}
1
+ {"version":3,"file":"addUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/addUserCls.ts"],"names":[],"mappings":"AAWA,wBAA8B,aAAa,CACzC,EAAE,EAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAC1C,KAAK,EAAE,GAAG,gBAqCX"}
@@ -1,3 +1,4 @@
1
+ import { UnauthorizedError } from "../../../../errors.js";
1
2
  import pgClients from "../../../plugins/pg/pgClients.js";
2
3
  import getSelectMeta from "../../../plugins/table/funcs/getSelectMeta.js";
3
4
  import { addUserCls, addCustomCls, editUserCls, getUserCls, } from "../../../plugins/usercls/index.js";
@@ -5,7 +6,7 @@ export default async function addUserClsApi({ pg = pgClients.client, body, user
5
6
  const { name, description, alias, data, table } = body;
6
7
  const t1 = Date.now();
7
8
  if (!user?.uid) {
8
- return reply.status(401).send({ error: "unauthorized", code: 401 });
9
+ throw UnauthorizedError("unauthorized");
9
10
  }
10
11
  if (table) {
11
12
  await addCustomCls({ name, description, alias, table, uid: user.uid, data }, pg);
@@ -1 +1 @@
1
- {"version":3,"file":"deleteUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/deleteUserCls.ts"],"names":[],"mappings":"AAIA,wBAA8B,gBAAgB,CAC5C,EAAE,EAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAC5C,KAAK,EAAE,GAAG,gBAkBX"}
1
+ {"version":3,"file":"deleteUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/deleteUserCls.ts"],"names":[],"mappings":"AAKA,wBAA8B,gBAAgB,CAC5C,EAAE,EAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAC5C,KAAK,EAAE,GAAG,gBAkBX"}
@@ -1,3 +1,4 @@
1
+ import { UnauthorizedError } from "../../../../errors.js";
1
2
  import pgClients from "../../../plugins/pg/pgClients.js";
2
3
  import getSelectMeta from "../../../plugins/table/funcs/getSelectMeta.js";
3
4
  import { deleteUserCls } from "../../../plugins/usercls/index.js";
@@ -5,7 +6,7 @@ export default async function deleteUserClsApi({ pg = pgClients.client, params,
5
6
  const { name, code } = params;
6
7
  const t1 = Date.now();
7
8
  if (!user?.uid) {
8
- return reply.status(401).send({ error: "unauthorized", code: 401 });
9
+ throw UnauthorizedError("unauthorized");
9
10
  }
10
11
  await getSelectMeta({
11
12
  pg,
@@ -1 +1 @@
1
- {"version":3,"file":"editUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/editUserCls.ts"],"names":[],"mappings":"AAUA,wBAA8B,cAAc,CAC1C,EAAE,EAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAClD,KAAK,EAAE,GAAG,gBAsCX"}
1
+ {"version":3,"file":"editUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/editUserCls.ts"],"names":[],"mappings":"AAWA,wBAA8B,cAAc,CAC1C,EAAE,EAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAClD,KAAK,EAAE,GAAG,gBAsCX"}
@@ -1,3 +1,4 @@
1
+ import { UnauthorizedError } from "../../../../errors.js";
1
2
  import pgClients from "../../../plugins/pg/pgClients.js";
2
3
  import getSelectMeta from "../../../plugins/table/funcs/getSelectMeta.js";
3
4
  import { addUserCls, addCustomCls, editUserCls, getUserCls, } from "../../../plugins/usercls/index.js";
@@ -6,7 +7,7 @@ export default async function editUserClsApi({ pg = pgClients.client, body, para
6
7
  const { data, table, description, alias } = body;
7
8
  const t1 = Date.now();
8
9
  if (!user?.uid) {
9
- return reply.status(401).send({ error: "unauthorized", code: 401 });
10
+ throw UnauthorizedError("unauthorized");
10
11
  }
11
12
  if (table) {
12
13
  await addCustomCls({ name, data, description, alias, table, uid: user.uid }, pg);
@@ -1,2 +1,2 @@
1
- export default function getUserClsListApi({ query, user, pg }: any, reply: any): Promise<any>;
1
+ export default function getUserClsListApi({ query, user, pg, }: any): Promise<any>;
2
2
  //# sourceMappingURL=getUserCls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/getUserCls.ts"],"names":[],"mappings":"AAQA,wBAA8B,iBAAiB,CAC7C,EAAE,KAAK,EAAE,IAAI,EAAE,EAAqB,EAAE,EAAE,GAAG,EAC3C,KAAK,EAAE,GAAG,gBA0BX"}
1
+ {"version":3,"file":"getUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/getUserCls.ts"],"names":[],"mappings":"AASA,wBAA8B,iBAAiB,CAAC,EAC9C,KAAK,EACL,IAAI,EACJ,EAAqB,GACtB,EAAE,GAAG,gBAyBL"}
@@ -1,15 +1,16 @@
1
1
  import config from "../../../../config.js";
2
+ import { UnauthorizedError } from "../../../../errors.js";
2
3
  import pgClients from "../../../plugins/pg/pgClients.js";
3
4
  import { getUserClsList } from "../../../plugins/usercls/index.js";
4
5
  // query.name = cls1,cls2,cls3
5
6
  // query.search = substring of cls name
6
7
  // data[idx].count - should not depend on either query.name or query.search
7
- export default async function getUserClsListApi({ query, user, pg = pgClients.client }, reply) {
8
+ export default async function getUserClsListApi({ query, user, pg = pgClients.client, }) {
8
9
  if (!user?.uid && !config.local) {
9
- return reply.status(401).send({ error: "unauthorized", code: 401 });
10
+ throw UnauthorizedError("unauthorized");
10
11
  }
11
12
  if (!pg) {
12
- return reply.status(400).send({ error: "empty pg", code: 400 });
13
+ throw Error("empty pg");
13
14
  }
14
15
  const t1 = Date.now();
15
16
  const result = await getUserClsList({
@@ -1 +1 @@
1
- {"version":3,"file":"code.generator.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/code.generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA0EzD,wBAA8B,aAAa,CACzC,EACE,EAAqB,EACrB,MAAW,EACX,IAAS,EACT,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;CAC7B,EACD,KAAK,EAAE,YAAY,kBA+GpB"}
1
+ {"version":3,"file":"code.generator.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/code.generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgFzD,wBAA8B,aAAa,CACzC,EACE,EAAqB,EACrB,MAAW,EACX,IAAS,EACT,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;CAC7B,EACD,KAAK,EAAE,YAAY,kBA+GpB"}
@@ -2,6 +2,7 @@ import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
2
2
  import pgClients from "../../../plugins/pg/pgClients.js";
3
3
  import getToken from "../../../plugins/crud/funcs/getToken.js";
4
4
  import { handlebarsSync } from "../../../../utils.js";
5
+ import { BadRequestError, ForbiddenError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
5
6
  function dayOfTheYear(date) {
6
7
  const start = new Date(date.getFullYear(), 0, 0);
7
8
  const diff = date -
@@ -63,10 +64,10 @@ export default async function codeGenerator({ pg = pgClients.client, params = {}
63
64
  const { token, column } = params;
64
65
  const data = query.data?.split?.(";") || [];
65
66
  if (!token || !column) {
66
- return reply.status(400).send("not enough params: token / column");
67
+ throw BadRequestError("not enough params: token / column");
67
68
  }
68
69
  if (!user?.uid) {
69
- return reply.status(401).send("unauthorized");
70
+ throw UnauthorizedError("unauthorized");
70
71
  }
71
72
  const tokenData = (await getToken({ token, uid: user?.uid, json: 1 })) || {};
72
73
  const currentYear = new Date().getFullYear();
@@ -94,15 +95,15 @@ export default async function codeGenerator({ pg = pgClients.client, params = {}
94
95
  return reply.status(200).send(result);
95
96
  }
96
97
  if (!tokenData?.form || !tokenData?.table) {
97
- return reply.status(401).send("token not allow");
98
+ throw new ForbiddenError("token not allow");
98
99
  }
99
100
  const loadTemplate = await getTemplate("form", tokenData.form);
100
101
  const schema = loadTemplate?.schema || loadTemplate;
101
102
  if (!schema) {
102
- return reply.status(404).send("form not found");
103
+ throw NotFoundError("form not found");
103
104
  }
104
105
  if (!schema?.[column]?.template) {
105
- return reply.status(400).send("template not specified");
106
+ throw BadRequestError("template not specified");
106
107
  }
107
108
  const columnValue = data
108
109
  .find((el) => el.startsWith(column))
@@ -111,7 +112,7 @@ export default async function codeGenerator({ pg = pgClients.client, params = {}
111
112
  const loadTable = await getTemplate("table", tokenData.table);
112
113
  const table = loadTable?.table || tokenData.table;
113
114
  if (!pg.pk?.[table]) {
114
- return reply.status(404).send("table pk not found");
115
+ throw NotFoundError("table pk not found");
115
116
  }
116
117
  const count = pg
117
118
  ? await pg
@@ -1,8 +1,7 @@
1
- import type { FastifyReply } from "fastify";
2
1
  export default function userTokensAPI({ params, user, }: {
3
2
  params: {
4
3
  token: string;
5
4
  };
6
5
  user?: Record<string, any>;
7
- }, reply: FastifyReply): Promise<any>;
6
+ }): Promise<any>;
8
7
  //# sourceMappingURL=user.tokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user.tokens.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/user.tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAU5C,wBAA8B,aAAa,CACzC,EACE,MAAM,EACN,IAAS,GACV,EAAE;IAAE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,EAC5D,KAAK,EAAE,YAAY,gBA4CpB"}
1
+ {"version":3,"file":"user.tokens.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/user.tokens.ts"],"names":[],"mappings":"AAeA,wBAA8B,aAAa,CAAC,EAC1C,MAAM,EACN,IAAS,GACV,EAAE;IACD,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,gBA2CA"}
@@ -1,16 +1,17 @@
1
1
  import { customTokens, userTokens, handlebarsSync, setOpt, getOpt, config, } from "../../../../utils.js";
2
- export default async function userTokensAPI({ params, user = {}, }, reply) {
2
+ import { BadRequestError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
3
+ export default async function userTokensAPI({ params, user = {}, }) {
3
4
  if (!user?.uid) {
4
- return reply.status(403).send("access restricted: user");
5
+ throw UnauthorizedError("unauthorized");
5
6
  }
6
7
  if (!params?.token) {
7
- return reply.status(400).send("not enough params: token");
8
+ throw BadRequestError("not enough params: token");
8
9
  }
9
10
  if (!config.redis) {
10
- return reply.status(500).send("empty redis");
11
+ throw new Error("empty redis");
11
12
  }
12
13
  if (!customTokens[params.token]) {
13
- return reply.status(404).send("token not found");
14
+ throw NotFoundError("token not found");
14
15
  }
15
16
  // return from cache
16
17
  if (userTokens[user.uid]?.[params.token]) {
@@ -1 +1 @@
1
- {"version":3,"file":"file.edit.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/file.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBAsDpE"}
1
+ {"version":3,"file":"file.edit.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/file.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAS5C,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBAsDpE"}
@@ -2,16 +2,17 @@ import path from "node:path";
2
2
  import dataUpdate from "../../../plugins/crud/funcs/dataUpdate.js";
3
3
  import pgClients from "../../../plugins/pg/pgClients.js";
4
4
  import uploadMultiPart from "../../../plugins/file/uploadMultiPart.js";
5
+ import { BadRequestError, NotFoundError } from "../../../../errors.js";
5
6
  export default async function widgetSet(req, reply) {
6
7
  const { pg = pgClients.client, headers = {}, user = {}, params = {} } = req;
7
8
  if (!params?.id) {
8
- return reply.status(400).send("not enough params: id");
9
+ throw BadRequestError("not enough params: id");
9
10
  }
10
11
  if (!pg.pk?.["crm.files"]) {
11
- return reply.status(404).send("table not found");
12
+ throw NotFoundError("table not found");
12
13
  }
13
14
  if (headers["content-type"]?.split?.(";")?.shift?.() !== "multipart/form-data") {
14
- return reply.status(400).send("invalid payload content type");
15
+ throw BadRequestError("invalid payload content type");
15
16
  }
16
17
  const file = await uploadMultiPart(req);
17
18
  const extName = path
@@ -36,7 +37,7 @@ export default async function widgetSet(req, reply) {
36
37
  uid: user?.uid,
37
38
  });
38
39
  if (!result?.file_id) {
39
- return reply.status(404).send("file not found");
40
+ throw NotFoundError("file not found");
40
41
  }
41
42
  return reply.status(200).send({
42
43
  rowCount: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"widget.del.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.del.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAmB5C;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBAiFpE"}
1
+ {"version":3,"file":"widget.del.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.del.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAwB5C;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBA+EpE"}
@@ -2,6 +2,7 @@ import config from "../../../../config.js";
2
2
  import isFileExists from "../../../plugins/file/isFileExists.js";
3
3
  import logChanges from "../../../plugins/crud/funcs/utils/logChanges.js";
4
4
  import pgClients from "../../../plugins/pg/pgClients.js";
5
+ import { BadRequestError, ForbiddenError, UnauthorizedError, } from "../../../../errors.js";
5
6
  const isAdmin = (req) => process.env.NODE_ENV === "admin" ||
6
7
  config.admin ||
7
8
  req?.hostname?.split?.(":")?.shift?.() === config.adminDomain ||
@@ -33,23 +34,21 @@ async function checkAccess(pg, objectid, id) {
33
34
  export default async function widgetDel(req, reply) {
34
35
  const { pg = pgClients.client, params, user = {}, } = req;
35
36
  if (!user?.uid) {
36
- return reply.status(401).send("access restricted: user not authorized");
37
+ throw UnauthorizedError("unauthorized");
37
38
  }
38
39
  const { type, objectid, id } = params || {};
39
40
  if (!objectid) {
40
- return reply.status(400).send("not enough params: object id");
41
+ throw BadRequestError("not enough params: object id");
41
42
  }
42
43
  if (!id && type !== "reaction") {
43
- return reply.status(400).send("not enough params: id");
44
+ throw BadRequestError("not enough params: id");
44
45
  }
45
46
  // force delete db entry if file not exists
46
47
  const { exists, uid } = ["file", "gallery"].includes(type)
47
48
  ? await checkAccess(pg, objectid, id)
48
49
  : {};
49
50
  if (exists && !isAdmin(req) && uid && user?.uid !== uid) {
50
- return reply
51
- .status(403)
52
- .send("access restricted: file exists, not an author");
51
+ throw ForbiddenError("access restricted: file exists, not an author");
53
52
  }
54
53
  const sqls = {
55
54
  comment: `delete from crm.communications where entity_id=$1 and ${isAdmin(req) ? "$2=$2" : "uid=$2"} and communication_id=$3`,
@@ -67,7 +66,7 @@ export default async function widgetDel(req, reply) {
67
66
  reaction: "crm.reactions",
68
67
  }[type];
69
68
  if (!sql || !table) {
70
- return reply.status(400).send("invalid widget type");
69
+ throw BadRequestError("invalid widget type");
71
70
  }
72
71
  const { rows = [] } = await pg.query(sql, [objectid, user.uid, id || ""]);
73
72
  await logChanges({
@@ -1 +1 @@
1
- {"version":3,"file":"widget.get.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.get.ts"],"names":[],"mappings":"AAyBA;;;GAGG;AAEH,wBAA8B,SAAS,CACrC,EAAE,EAAqB,EAAE,IAAS,EAAE,MAAW,EAAE,KAAU,EAAE,EAAE,GAAG,EAClE,KAAK,EAAE,GAAG,gBAyLX"}
1
+ {"version":3,"file":"widget.get.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.get.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AAEH,wBAA8B,SAAS,CACrC,EAAE,EAAqB,EAAE,IAAS,EAAE,MAAW,EAAE,KAAU,EAAE,EAAE,GAAG,EAClE,KAAK,EAAE,GAAG,gBAyLX"}
@@ -1,6 +1,7 @@
1
1
  import getMeta from "../../../plugins/pg/funcs/getMeta.js";
2
2
  import getToken from "../../../plugins/crud/funcs/getToken.js";
3
3
  import pgClients from "../../../plugins/pg/pgClients.js";
4
+ import { BadRequestError, NotFoundError } from "../../../../errors.js";
4
5
  const galleryExtList = [
5
6
  "png",
6
7
  "svg",
@@ -34,7 +35,7 @@ export default async function widgetGet({ pg = pgClients.client, user = {}, para
34
35
  : null;
35
36
  const objectid = param ? JSON.parse(param)?.id : params.objectid;
36
37
  if (!objectid) {
37
- return reply.status(400).send("not enough params: id");
38
+ throw BadRequestError("not enough params: id");
38
39
  }
39
40
  const sqls = {
40
41
  comment: pg.pk["admin.users"]
@@ -86,7 +87,7 @@ export default async function widgetGet({ pg = pgClients.client, user = {}, para
86
87
  };
87
88
  const q = sqls[params.type];
88
89
  if (!q) {
89
- return reply.status(400).send("invalid widget type");
90
+ throw BadRequestError("invalid widget type");
90
91
  }
91
92
  /* rows */
92
93
  const rows = await pg
@@ -122,7 +123,7 @@ export default async function widgetGet({ pg = pgClients.client, user = {}, para
122
123
  params.type === "history" &&
123
124
  process.env.NODE_ENV !== "test" &&
124
125
  !process.env.VITEST) {
125
- return reply.status(404).send("log table not found");
126
+ throw NotFoundError("log table not found");
126
127
  }
127
128
  const cdateColumn = columns.find((col) => ["cdate", "created_at"].includes(col.name))?.name;
128
129
  const editorDateColumn = columns.find((col) => ["editor_date", "updated_at"].includes(col.name))?.name;
@@ -1 +1 @@
1
- {"version":3,"file":"widget.set.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.set.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAoC5C,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY;;;;;;GAqHpE"}
1
+ {"version":3,"file":"widget.set.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.set.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAqC5C,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY;;;;;;GAqHpE"}
@@ -4,6 +4,7 @@ import dataInsert from "../../../plugins/crud/funcs/dataInsert.js";
4
4
  import dataUpdate from "../../../plugins/crud/funcs/dataUpdate.js";
5
5
  import { applyHook } from "../../../../utils.js";
6
6
  import uploadMultiPart from "../../../plugins/file/uploadMultiPart.js";
7
+ import { BadRequestError, NotFoundError } from "../../../../errors.js";
7
8
  const tableList = {
8
9
  comment: "crm.communications",
9
10
  gallery: "crm.files",
@@ -32,10 +33,10 @@ export default async function widgetSet(req, reply) {
32
33
  const { pg, params, headers = {}, body = {}, user = {}, } = req;
33
34
  const { type, id, objectid } = params || {};
34
35
  if (!pkList[type] || !tableList[type]) {
35
- return reply.status(400).send("param type not valid");
36
+ throw BadRequestError("param type not valid");
36
37
  }
37
38
  if (!objectid) {
38
- return reply.status(400).send("not enough params: id");
39
+ throw BadRequestError("not enough params: id");
39
40
  }
40
41
  const table = tableList[type];
41
42
  // dsadasdad
@@ -58,7 +59,7 @@ export default async function widgetSet(req, reply) {
58
59
  entity_id: objectid,
59
60
  };
60
61
  if (type === "gallery" && !galleryExtList.includes(extName.toLowerCase())) {
61
- return reply.status(400).send("invalid file extension");
62
+ throw BadRequestError("invalid file extension");
62
63
  }
63
64
  const { rows = [] } = await dataInsert({
64
65
  pg,
@@ -82,7 +83,7 @@ export default async function widgetSet(req, reply) {
82
83
  }
83
84
  const { pk } = await getMeta({ pg, table });
84
85
  if (!pk) {
85
- return reply.status(404).send("table not found");
86
+ throw NotFoundError("table not found");
86
87
  }
87
88
  const data = { ...body, uid: user?.uid, entity_id: objectid };
88
89
  await applyHook("onWidgetSet", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.3.6",
3
+ "version": "2.4.0",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [
@@ -15,6 +15,7 @@
15
15
  "exports": {
16
16
  ".": "./dist/index.js",
17
17
  "./index.js": "./dist/index.js",
18
+ "./errors.js": "./dist/errors.js",
18
19
  "./utils.js": "./dist/utils.js",
19
20
  "./package.json": "./package.json"
20
21
  },
@@ -62,6 +63,7 @@
62
63
  "ioredis": "5.10.1",
63
64
  "js-yaml": "4.1.1",
64
65
  "markdown-it": "14.1.1",
66
+ "minio": "^8.0.7",
65
67
  "nodemailer": "8.0.4",
66
68
  "otplib": "13.4.0",
67
69
  "pg": "8.20.0",