@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
@@ -3,6 +3,7 @@ import providers from "../../../plugins/file/providers/index.js";
3
3
  import getMimeType from "../../../plugins/file/providers/mime/index.js";
4
4
  import logger from "../../../plugins/logger/getLogger.js";
5
5
  import applyHook from "../../../plugins/hook/applyHook.js";
6
+ import { BadRequestError, ForbiddenError, NotFoundError, } from "../../../../errors.js";
6
7
  const { downloadFile } = providers();
7
8
  /* const allowedPublicDirs = [
8
9
  'upload', 'page', 'site', 'maps', 'tmp', 'uploads', 'site_slider', 'module', 'product', 'image', 'geo_works_file',
@@ -26,18 +27,16 @@ const { downloadFile } = providers();
26
27
  */
27
28
  export default async function download({ params, user }, reply) {
28
29
  if (!params?.["*"]) {
29
- return reply.status(400).send({ error: "not enough params", code: 400 });
30
+ throw BadRequestError("not enough params");
30
31
  }
31
32
  const filename = params["*"].startsWith("/")
32
33
  ? params["*"].slice(1)
33
34
  : params["*"];
34
35
  if (!filename) {
35
- return reply
36
- .status(400)
37
- .send({ error: "required param 'filename'", code: 400 });
36
+ throw BadRequestError("required param 'filename'");
38
37
  }
39
38
  if (filename.includes?.("../")) {
40
- return reply.status(403).send({ error: "wrong params", code: 403 });
39
+ throw ForbiddenError("invalid characters detected");
41
40
  }
42
41
  const filepath = filename.startsWith("files/")
43
42
  ? filename
@@ -51,9 +50,7 @@ export default async function download({ params, user }, reply) {
51
50
  return hookData;
52
51
  const fileStream = await downloadFile(filepath);
53
52
  if (!fileStream) {
54
- return reply
55
- .status(404)
56
- .send({ error: `Файл не знайдено - ${filename}`, code: 404 });
53
+ throw NotFoundError(`Файл не знайдено - ${filename}`);
57
54
  }
58
55
  const headers = {
59
56
  "Content-Disposition": `attachment; filename=${path.basename(filename)}`,
@@ -1 +1 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgCzD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,OAAO,EACP,IAAI,EACJ,OAAO,EAAE,QAAQ,EACjB,GAAG,EACH,KAAU,EACV,IAAkB,EAClB,QAAQ,EACR,UAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,KAAK,EAAE,YAAY,gBAkZpB"}
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAiCzD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,OAAO,EACP,IAAI,EACJ,OAAO,EAAE,QAAQ,EACjB,GAAG,EACH,KAAU,EACV,IAAkB,EAClB,QAAQ,EACR,UAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,KAAK,EAAE,YAAY,gBAiZpB"}
@@ -21,6 +21,7 @@ import jsonToCsv from "./utils/jsonToCsv.js";
21
21
  import formatResult from "./utils/formatResult.js";
22
22
  import jsonlToJsonFile from "./utils/jsonlToJsonFile.js";
23
23
  import pubsub from "./utils/pubsub.js";
24
+ import { BadRequestError, NotFoundError } from "../../../../errors.js";
24
25
  const startStreamWithTotal = 10000;
25
26
  const rootDir = getFolder(config, "local");
26
27
  /**
@@ -47,10 +48,10 @@ const rootDir = getFolder(config, "local");
47
48
  export default async function exportTable({ pg = pgClients.client, headers, user, columns: columns1, cls, query = {}, host = "127.0.0.1", tableSql, sourceName, }, reply) {
48
49
  const { id, cols, search, format = "json", table, filter = "empty", nocache, formatAnswer = "file", sql, stream, } = query;
49
50
  if (!table && !tableSql) {
50
- return reply.status(400).send("not enough params: table");
51
+ throw BadRequestError("not enough params: table");
51
52
  }
52
53
  if (!["csv", "xlsx", "json", "geojson"].includes(format)) {
53
- return reply.status(400).send("param format is invalid");
54
+ throw BadRequestError("invalid params: format");
54
55
  }
55
56
  const slice = query.slice ? Math.min(+query.slice || 16, 1000) : null;
56
57
  const date = new Date();
@@ -89,12 +90,10 @@ export default async function exportTable({ pg = pgClients.client, headers, user
89
90
  const meta = await getMeta({ pg, table: loadTable?.table || table });
90
91
  const viewSql = await getTemplate("view", loadTable?.table || table);
91
92
  if (!meta?.pk && !meta?.view && !tableSql && !viewSql) {
92
- return reply.status(404).send("table not found");
93
+ throw NotFoundError("table not found");
93
94
  }
94
95
  if (format === "geojson" && !meta?.geom) {
95
- return reply
96
- .status(400)
97
- .send("Ця форма не містить полів геометрії. Виберіть тип, який не потребує геометрії для вивантаження");
96
+ throw BadRequestError("Ця форма не містить полів геометрії. Виберіть тип, який не потребує геометрії для вивантаження");
98
97
  }
99
98
  const options = {
100
99
  pg,
@@ -266,7 +265,7 @@ export default async function exportTable({ pg = pgClients.client, headers, user
266
265
  if (res.error) {
267
266
  send("finish");
268
267
  sendOriginal(res.error, 1);
269
- return reply.status(500).send(res.error);
268
+ throw new Error(res.error);
270
269
  }
271
270
  logger.file("export/table", {
272
271
  table,
@@ -317,7 +316,8 @@ export default async function exportTable({ pg = pgClients.client, headers, user
317
316
  });
318
317
  }
319
318
  if (resp.error) {
320
- return reply.status(resp.status || 500).send(resp.error);
319
+ send(resp.error, 1);
320
+ throw new Error(resp.error);
321
321
  }
322
322
  send("finish");
323
323
  sendOriginal("Файл успішно сформовано. Натистіть кнопку ще раз для завантаження даних", 1);
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAkB5C;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAA8B,OAAO,CACnC,EACE,MAAM,EACN,KAAK,EACL,IAAI,GACL,EAAE;IACD,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,EACD,KAAK,EAAE,YAAY,gBA+DpB"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAmB5C;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAA8B,OAAO,CACnC,EACE,MAAM,EACN,KAAK,EACL,IAAI,GACL,EAAE;IACD,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,EACD,KAAK,EAAE,YAAY,gBA4DpB"}
@@ -6,6 +6,7 @@ import config from "../../../../config.js";
6
6
  import logger from "../../../plugins/logger/getLogger.js";
7
7
  import applyHook from "../../../plugins/hook/applyHook.js";
8
8
  import providers from "../../../plugins/file/providers/index.js";
9
+ import { BadRequestError, ForbiddenError } from "../../../../errors.js";
9
10
  const grayGif = Buffer.from("R0lGODdhAwADAIEAAICAgAAAAAAAAAAAACwAAAAAAwADAAAIBwABCBw4MCAAOw==", "base64");
10
11
  /**
11
12
  * Апі використовується для отримання різних файлів і можливістю змінювати їх
@@ -27,19 +28,17 @@ const grayGif = Buffer.from("R0lGODdhAwADAIEAAICAgAAAAAAAAAAAACwAAAAAAwADAAAIBwA
27
28
  */
28
29
  export default async function getFile({ params, query, user, }, reply) {
29
30
  if (!params?.["*"]) {
30
- return reply.status(400).send({ error: "not enough params", code: 400 });
31
+ throw BadRequestError("not enough params");
31
32
  }
32
33
  if (params["*"].includes("../")) {
33
- return reply.status(403).send({ error: "wrong params", code: 403 });
34
+ throw ForbiddenError("invalid characters detected");
34
35
  }
35
36
  const relpath = (params["*"].startsWith("/") ? params["*"].slice(1) : params["*"]).replace(/^files\//g, "") + (params["*"].endsWith("/") ? "index.html" : "");
36
37
  if (!relpath) {
37
- return reply
38
- .status(400)
39
- .send({ error: "required param 'filename'", code: 400 });
38
+ throw BadRequestError("required param 'filename'");
40
39
  }
41
40
  if (relpath.includes("../")) {
42
- return reply.status(403).send({ error: "wrong params", code: 403 });
41
+ throw ForbiddenError("invalid characters detected");
43
42
  }
44
43
  const hookData = await applyHook("preFile", { user, relpath, reply });
45
44
  if (hookData)
@@ -55,11 +54,10 @@ export default async function getFile({ params, query, user, }, reply) {
55
54
  : undefined;
56
55
  const { fileExists } = providers({ provider: "fs" });
57
56
  const existsFS = await fileExists(filepath);
58
- return reply.status(200).send({ provider: fp.name, existsS3, existsFS });
57
+ return { provider: fp.name, existsS3, existsFS };
59
58
  }
60
59
  const fileStream = await downloadFile(filepath).catch();
61
60
  if (!fileStream) {
62
- // return reply.status(404).send({ error: "Файл не знайдено", code: 404 });
63
61
  return reply.headers({ "Content-Type": "image/gif" }).send(grayGif);
64
62
  }
65
63
  const headers = {
@@ -1 +1 @@
1
- {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/resize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAyC5C;;GAEG;AAEH,wBAA8B,MAAM,CAClC,EACE,KAAK,GACN,EAAE;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH,EACD,KAAK,EAAE,YAAY,kBAoJpB"}
1
+ {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/resize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA0C5C;;GAEG;AAEH,wBAA8B,MAAM,CAClC,EACE,KAAK,GACN,EAAE;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH,EACD,KAAK,EAAE,YAAY,kBA2IpB"}
@@ -8,6 +8,7 @@ isFileExists, getFolder, } from "../../../../utils.js";
8
8
  import grpc from "../../../plugins/grpc/grpc.js";
9
9
  import getMimeType from "../../../plugins/file/providers/mime/index.js";
10
10
  import { mkdir } from "node:fs/promises";
11
+ import { BadRequestError } from "../../../../errors.js";
11
12
  const defaultWidth = 400;
12
13
  const defaultHeight = 240;
13
14
  const maxWidth = 2000;
@@ -30,16 +31,12 @@ export default async function resize({ query, }, reply) {
30
31
  return reply.headers({ "Content-Type": "image/gif" }).send(transparentGif);
31
32
  }
32
33
  if (!filepath) {
33
- return reply
34
- .status(400)
35
- .send({ error: "not enough query params: filepath", code: 400 });
34
+ throw BadRequestError("not enough query params: filepath");
36
35
  }
37
36
  const basename = path.basename(filepath);
38
37
  const mimeType = getMimeType(filepath);
39
38
  if (!mimeType) {
40
- return reply
41
- .status(400)
42
- .send({ error: "invalid query params: filepath", code: 400 });
39
+ throw BadRequestError("invalid query params: filepath");
43
40
  }
44
41
  const resizePath1 = size
45
42
  ? filepath.replace(basename, `${size}_resized_${basename}`)
@@ -70,9 +67,6 @@ export default async function resize({ query, }, reply) {
70
67
  // get File Data
71
68
  const fileData = await downloadFile(filepath, { buffer: true });
72
69
  if (!fileData?.length) {
73
- // return reply
74
- // .status(404)
75
- // .send({ error: `Файл не знайдено - ${filepath}`, code: 400 });
76
70
  return reply.headers({ "Content-Type": "image/gif" }).send(transparentGif);
77
71
  }
78
72
  const resizeQuality = Math.min(+(quality || 75), 100);
@@ -82,9 +76,7 @@ export default async function resize({ query, }, reply) {
82
76
  .concat(w || "", h || "")
83
77
  .filter((el) => el && +el > maxWidth);
84
78
  if (check.length) {
85
- return reply
86
- .status(400)
87
- .send({ error: "resize image size too big", code: 400 });
79
+ throw BadRequestError("resize image size too big");
88
80
  }
89
81
  const resizeWidth = (h && !w ? +h * ratio : null) ||
90
82
  (size?.toLowerCase?.()?.split?.("x")?.[1] &&
@@ -1 +1 @@
1
- {"version":3,"file":"file2geojson.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/file2geojson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C,wBAA8B,YAAY,CACxC,EACE,EAAqB,EACrB,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY,gBAgEpB"}
1
+ {"version":3,"file":"file2geojson.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/file2geojson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAS5C,wBAA8B,YAAY,CACxC,EACE,EAAqB,EACrB,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY,gBA+DpB"}
@@ -1,24 +1,24 @@
1
1
  import path from "node:path";
2
2
  import { config, logger, pgClients } from "../../../../utils.js";
3
3
  import file2json from "../../../plugins/grpc/file2json.js";
4
+ import { BadRequestError } from "../../../../errors.js";
4
5
  export default async function file2geojson({ pg = pgClients.client, body = {}, }, reply) {
5
6
  const { file, srid, debug } = body;
6
7
  if (!file || !srid) {
7
- return reply.status(400).send("params file and srid are required");
8
+ throw BadRequestError("not enough body params: file or srid");
8
9
  }
9
10
  const ext = path.extname(file);
10
11
  if (![".zip", ".gdb", ".gpkg", ".geojson"].includes(ext)) {
11
- return reply.status(400).send("Невірний формат файлів");
12
+ throw BadRequestError("Невірний формат файлів");
12
13
  }
13
14
  const filepath = path.join(config.folder || "", file);
14
15
  try {
15
16
  const JsonData = await file2json({ filepath, debug });
16
17
  if (debug)
17
18
  return JsonData;
18
- // if (JsonData?.features?.length > 1) return { error: 'too many features', status: 400 };
19
19
  if (!JsonData?.features?.length &&
20
20
  JsonData?.type?.toLowerCase() !== "feature") {
21
- return reply.status(400).send("invalid file content");
21
+ throw BadRequestError("invalid file content");
22
22
  }
23
23
  const JsonArr = JsonData?.features
24
24
  ? JsonData
@@ -37,11 +37,11 @@ export default async function file2geojson({ pg = pgClients.client, body = {}, }
37
37
  )q
38
38
  )q
39
39
  )q`, [JSON.stringify(JsonArr).replace(/'/g, "''"), srid]);
40
- return reply.status(200).send([{ features: [rows.slice(0, 1)] }]);
40
+ return [{ features: [rows.slice(0, 1)] }];
41
41
  }
42
42
  catch (err) {
43
43
  if (err?.detail?.includes("Infinity")) {
44
- return { error: "invalid geometry. Check input SRID", status: 400 };
44
+ throw BadRequestError("invalid geometry. Check input SRID");
45
45
  }
46
46
  logger.file("grpc/file2json", {
47
47
  error: err.toString(),
@@ -49,6 +49,6 @@ export default async function file2geojson({ pg = pgClients.client, body = {}, }
49
49
  file,
50
50
  srid,
51
51
  });
52
- return reply.status(500).send(err.toString());
52
+ throw err;
53
53
  }
54
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filePreview.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/filePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA4BzD,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE;QACL,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH,EACD,KAAK,EAAE,YAAY,kBAwFpB"}
1
+ {"version":3,"file":"filePreview.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/filePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAiCzD,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE;QACL,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH,EACD,KAAK,EAAE,YAAY,kBAwFpB"}
@@ -1,6 +1,7 @@
1
1
  import path from "node:path";
2
2
  import officeWrapper from "../../../plugins/grpc/office2pdf.js";
3
3
  import { downloadFile, isFileExists, uploadFile, logger, pgClients, } from "../../../../utils.js";
4
+ import { BadRequestError, NotFoundError, UnsupportedMediaTypeError, } from "../../../../errors.js";
4
5
  const { officeToPdf } = officeWrapper();
5
6
  const mimeTypes = {
6
7
  png: "image/png",
@@ -16,7 +17,7 @@ const mimeTypes = {
16
17
  export default async function filePreview({ pg = pgClients.client, query = {}, }, reply) {
17
18
  const { id, nocache } = query;
18
19
  if (!id) {
19
- return reply.status(400).send("not enough params: id");
20
+ throw BadRequestError("not enough params: id");
20
21
  }
21
22
  const filePath = await pg
22
23
  .query("select file_path from crm.files where file_id = $1", [
@@ -28,7 +29,7 @@ export default async function filePreview({ pg = pgClients.client, query = {}, }
28
29
  error: "File with provided id does not found",
29
30
  id,
30
31
  });
31
- return reply.status(404).send("File not found");
32
+ throw NotFoundError("File not found");
32
33
  }
33
34
  const { base, ext } = path.parse(filePath);
34
35
  const fileExt = ext.substring(1).toLowerCase();
@@ -51,7 +52,7 @@ export default async function filePreview({ pg = pgClients.client, query = {}, }
51
52
  id,
52
53
  filePath,
53
54
  });
54
- return reply.status(404).send("File not found");
55
+ throw NotFoundError("File not found");
55
56
  }
56
57
  if (!mimeTypes[fileExt] &&
57
58
  !["doc", "docx", "ppt", "pptx", "xls", "xlsx", "csv"].includes(fileExt)) {
@@ -60,7 +61,7 @@ export default async function filePreview({ pg = pgClients.client, query = {}, }
60
61
  id,
61
62
  filePath,
62
63
  });
63
- return reply.status(415).send("Unsupported file type");
64
+ throw UnsupportedMediaTypeError("Unsupported file type");
64
65
  }
65
66
  if (!["doc", "docx", "ppt", "pptx", "xls", "xlsx", "csv"].includes(fileExt)) {
66
67
  return reply
@@ -4,5 +4,5 @@
4
4
  * @summary API для перегляду логів
5
5
  *
6
6
  */
7
- export default function loggerFile(req: any, reply: any): Promise<any>;
7
+ export default function loggerFile(req: any, reply: any): Promise<string | string[] | NonSharedBuffer>;
8
8
  //# sourceMappingURL=logger.file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.file.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.file.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AAEH,wBAA8B,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBA4F5D"}
1
+ {"version":3,"file":"logger.file.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.file.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AAEH,wBAA8B,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gDAyF5D"}
@@ -4,6 +4,7 @@ import { createReadStream, existsSync } from "node:fs";
4
4
  import readline from "node:readline";
5
5
  import checkUserAccess from "../../../plugins/logger/checkUserAccess.js";
6
6
  import getRootDir from "../../../plugins/logger/getRootDir.js";
7
+ import { BadRequestError, NotFoundError } from "../../../../errors.js";
7
8
  const limit = 200000;
8
9
  const rootDir = getRootDir();
9
10
  /**
@@ -14,13 +15,11 @@ const rootDir = getRootDir();
14
15
  */
15
16
  export default async function loggerFile(req, reply) {
16
17
  const { params = {}, user = {}, query = {}, originalUrl } = req;
17
- const access = checkUserAccess({ user, token: query.token });
18
- if (access?.status !== 200)
19
- return reply.status(access.status).send(access.message);
18
+ checkUserAccess({ user, token: query.token });
20
19
  // absolute / relative path
21
20
  const filepath = path.join(rootDir, params["*"] || "");
22
21
  if (!existsSync(filepath)) {
23
- return reply.status(404).send("file not exists");
22
+ throw NotFoundError("file not found");
24
23
  }
25
24
  const stat = await lstat(filepath);
26
25
  const isFile = stat.isFile();
@@ -30,7 +29,7 @@ export default async function loggerFile(req, reply) {
30
29
  }
31
30
  if (query.full && isFile) {
32
31
  if (stat.size > 20 * 1000 * 1000) {
33
- return reply.status(400).send({ error: "file size > 20MB", code: 400 });
32
+ throw BadRequestError("file size > 20MB");
34
33
  }
35
34
  const buffer = await readFile(filepath);
36
35
  return buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.metrics.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.metrics.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,wBAA8B,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAkB/D"}
1
+ {"version":3,"file":"logger.metrics.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.metrics.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,wBAA8B,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAc/D"}
@@ -8,10 +8,7 @@ import loggerSystem from "../../../plugins/metric/loggerSystem.js";
8
8
  */
9
9
  export default async function loggerMetrics(req, reply) {
10
10
  const { pg, user = {}, query = {} } = req;
11
- const access = checkUserAccess({ user, token: query.token });
12
- if (access?.status !== 200) {
13
- return reply.status(access.status).send(access.message);
14
- }
11
+ checkUserAccess({ user, token: query.token });
15
12
  const system = await loggerSystem();
16
13
  const dbName = pg?.options?.database;
17
14
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"getMenu.d.ts","sourceRoot":"","sources":["../../../../../server/routes/menu/controllers/getMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA4CzD,wBAA8B,SAAS,CACrC,EACE,IAAS,EACT,OAAO,EACP,EAAqB,GACtB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,EAAE,EAAE,UAAU,CAAC;CAChB,EACD,KAAK,EAAE,YAAY,GAAG,IAAI;;;;;;;;;;;;;;GA8G3B"}
1
+ {"version":3,"file":"getMenu.d.ts","sourceRoot":"","sources":["../../../../../server/routes/menu/controllers/getMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA6CzD,wBAA8B,SAAS,CACrC,EACE,IAAS,EACT,OAAO,EACP,EAAqB,GACtB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,EAAE,EAAE,UAAU,CAAC;CAChB,EACD,KAAK,EAAE,YAAY,GAAG,IAAI;;;;;;;;;;;;;;GA8G3B"}
@@ -7,6 +7,7 @@ import config from "../../../../config.js";
7
7
  import pgClients from "../../../plugins/pg/pgClients.js";
8
8
  import { applyHook } from "../../../../utils.js";
9
9
  import menuDirs from "../../../plugins/table/funcs/menuDirs.js";
10
+ import { ForbiddenError } from "../../../../errors.js";
10
11
  const menuCache = [];
11
12
  // check module dir
12
13
  const moduleDir = join(process.cwd(), "module");
@@ -32,7 +33,7 @@ async function readMenu() {
32
33
  export default async function adminMenu({ user = {}, session, pg = pgClients.client, }, reply) {
33
34
  const time = Date.now();
34
35
  if (!user.uid && !config.auth?.disable && reply) {
35
- return reply.status(403).send("access restricted");
36
+ throw ForbiddenError("access restricted");
36
37
  }
37
38
  const menus = isProduction && menuCache.length ? menuCache : await readMenu();
38
39
  if (!pg)
@@ -1,4 +1,3 @@
1
- import { FastifyReply } from "fastify";
2
1
  import { ExtendedRequest } from "../../../types/core.js";
3
- export default function addUserNotification(req: ExtendedRequest, reply: FastifyReply): Promise<never>;
2
+ export default function addUserNotification(req: ExtendedRequest): Promise<any>;
4
3
  //# sourceMappingURL=addUserNotification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addUserNotification.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/addUserNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAEL,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAKhC,wBAA8B,mBAAmB,CAC/C,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,YAAY,kBAgCpB"}
1
+ {"version":3,"file":"addUserNotification.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/addUserNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAMhC,wBAA8B,mBAAmB,CAAC,GAAG,EAAE,eAAe,gBA6BrE"}
@@ -1,16 +1,15 @@
1
1
  import pgClients from "../../../plugins/pg/pgClients.js";
2
2
  import dataInsert from "../../../plugins/crud/funcs/dataInsert.js";
3
- export default async function addUserNotification(req, reply) {
3
+ import { BadRequestError, UnauthorizedError } from "../../../../errors.js";
4
+ export default async function addUserNotification(req) {
4
5
  const { pg = pgClients.client, body, user, } = req;
5
6
  if (!user?.uid) {
6
- return reply.status(401).send({ error: "unauthorized", code: 401 });
7
+ throw UnauthorizedError("unauthorized");
7
8
  }
8
9
  // who (user id) and what of (message) to notify
9
10
  const missingKey = ["addressee_id", "body"].find((key) => !body[key]);
10
11
  if (missingKey) {
11
- return reply
12
- .status(400)
13
- .send({ error: `not enough body params: ${missingKey}`, code: 400 });
12
+ throw BadRequestError(`not enough body params: ${missingKey}`);
14
13
  }
15
14
  const result = await dataInsert({
16
15
  pg,
@@ -18,5 +17,5 @@ export default async function addUserNotification(req, reply) {
18
17
  data: { ...body, author_id: user.uid },
19
18
  uid: user.uid,
20
19
  }).then((el) => el.rows?.[0] || {});
21
- return reply.status(200).send(result);
20
+ return result;
22
21
  }
@@ -1,4 +1,3 @@
1
- import { FastifyReply } from "fastify";
2
1
  import { ExtendedRequest } from "../../../types/core.js";
3
- export default function editUserNotification(req: ExtendedRequest, reply: FastifyReply): Promise<never>;
2
+ export default function editUserNotification(req: ExtendedRequest): Promise<any>;
4
3
  //# sourceMappingURL=deleteUserNotification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deleteUserNotification.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/deleteUserNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAEL,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAKhC,wBAA8B,oBAAoB,CAChD,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,YAAY,kBAuCpB"}
1
+ {"version":3,"file":"deleteUserNotification.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/deleteUserNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAMhC,wBAA8B,oBAAoB,CAAC,GAAG,EAAE,eAAe,gBAoCtE"}
@@ -1,9 +1,10 @@
1
1
  import pgClients from "../../../plugins/pg/pgClients.js";
2
2
  import dataDelete from "../../../plugins/crud/funcs/dataDelete.js";
3
- export default async function editUserNotification(req, reply) {
3
+ import { ForbiddenError, UnauthorizedError } from "../../../../errors.js";
4
+ export default async function editUserNotification(req) {
4
5
  const { pg = pgClients.client, params, user, } = req;
5
6
  if (!user?.uid) {
6
- return reply.status(401).send({ error: "unauthorized", code: 401 });
7
+ throw UnauthorizedError("unauthorized");
7
8
  }
8
9
  const author = pg && pg.pk?.["crm.notifications"]
9
10
  ? await pg
@@ -11,9 +12,7 @@ export default async function editUserNotification(req, reply) {
11
12
  .then((el) => el.rows?.[0]?.author)
12
13
  : null;
13
14
  if (author && author !== user.uid && user?.user_type !== "admin") {
14
- return reply
15
- .status(403)
16
- .send({ error: "not an author of notification", code: 403 });
15
+ throw ForbiddenError("not an author of notification");
17
16
  }
18
17
  const result = await dataDelete({
19
18
  pg,
@@ -21,5 +20,5 @@ export default async function editUserNotification(req, reply) {
21
20
  table: "crm.notifications",
22
21
  uid: user.uid,
23
22
  });
24
- return reply.status(200).send(result);
23
+ return result;
25
24
  }
@@ -1,4 +1,3 @@
1
- import { FastifyReply } from "fastify";
2
1
  import { ExtendedRequest } from "../../../types/core.js";
3
- export default function editUserNotification(req: ExtendedRequest, reply: FastifyReply): Promise<never>;
2
+ export default function editUserNotification(req: ExtendedRequest): Promise<any>;
4
3
  //# sourceMappingURL=editUserNotification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"editUserNotification.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/editUserNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAEL,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAKhC,wBAA8B,oBAAoB,CAChD,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,YAAY,kBAgDpB"}
1
+ {"version":3,"file":"editUserNotification.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/editUserNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAUhC,wBAA8B,oBAAoB,CAAC,GAAG,EAAE,eAAe,gBA2CtE"}
@@ -1,9 +1,10 @@
1
1
  import pgClients from "../../../plugins/pg/pgClients.js";
2
2
  import dataUpdate from "../../../plugins/crud/funcs/dataUpdate.js";
3
- export default async function editUserNotification(req, reply) {
3
+ import { BadRequestError, ForbiddenError, UnauthorizedError, } from "../../../../errors.js";
4
+ export default async function editUserNotification(req) {
4
5
  const { pg = pgClients.client, body, params, user, } = req;
5
6
  if (!user?.uid) {
6
- return reply.status(401).send({ error: "unauthorized", code: 401 });
7
+ throw UnauthorizedError("unauthorized");
7
8
  }
8
9
  const { read, author } = pg && pg.pk?.["crm.notifications"]
9
10
  ? await pg
@@ -11,14 +12,10 @@ export default async function editUserNotification(req, reply) {
11
12
  .then((el) => el.rows?.[0] || {})
12
13
  : {};
13
14
  if (author !== user.uid && user?.user_type !== "admin") {
14
- return reply
15
- .status(403)
16
- .send({ error: "not an author of notification", code: 403 });
15
+ throw ForbiddenError("not an author of notification");
17
16
  }
18
17
  if (read) {
19
- return reply
20
- .status(400)
21
- .send({ error: "notification already read", code: 400 });
18
+ throw BadRequestError("notification already read");
22
19
  }
23
20
  const result = await dataUpdate({
24
21
  pg,
@@ -27,5 +24,5 @@ export default async function editUserNotification(req, reply) {
27
24
  data: body,
28
25
  uid: user.uid,
29
26
  });
30
- return reply.status(200).send(result);
27
+ return result;
31
28
  }
@@ -1,4 +1,6 @@
1
- import { FastifyReply } from "fastify";
2
1
  import { ExtendedRequest } from "../../../types/core.js";
3
- export default function readNotifications(req: ExtendedRequest, reply: FastifyReply): Promise<never>;
2
+ export default function readNotifications(req: ExtendedRequest): Promise<{
3
+ ids: any;
4
+ read: any;
5
+ }>;
4
6
  //# sourceMappingURL=readNotifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readNotifications.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/readNotifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAc,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIrE,wBAA8B,iBAAiB,CAC7C,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,YAAY,kBAmCpB"}
1
+ {"version":3,"file":"readNotifications.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/readNotifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKrE,wBAA8B,iBAAiB,CAAC,GAAG,EAAE,eAAe;;;GAkCnE"}
@@ -1,8 +1,9 @@
1
1
  import pgClients from "../../../plugins/pg/pgClients.js";
2
- export default async function readNotifications(req, reply) {
2
+ import { UnauthorizedError } from "../../../../errors.js";
3
+ export default async function readNotifications(req) {
3
4
  const { pg = pgClients.client, params, user, } = req;
4
5
  if (!user?.uid) {
5
- return reply.status(401).send({ error: "unauthorized", code: 401 });
6
+ throw UnauthorizedError("unauthorized");
6
7
  }
7
8
  const ids = pg && pg.pk?.["crm.notifications"]
8
9
  ? await pg
@@ -13,5 +14,5 @@ export default async function readNotifications(req, reply) {
13
14
  and ${params.id ? "notification_id=$2" : "1=1"} returning notification_id`, [user.uid, params?.id].filter(Boolean))
14
15
  .then((el) => el.rows?.map((row) => row.notification_id) || [])
15
16
  : [];
16
- return reply.status(200).send({ ids, read: ids.length });
17
+ return { ids, read: ids.length };
17
18
  }
@@ -1,4 +1,7 @@
1
- import { FastifyReply } from "fastify";
2
1
  import { ExtendedRequest } from "../../../types/core.js";
3
- export default function userNotifications(req: ExtendedRequest, reply: FastifyReply): Promise<never>;
2
+ export default function userNotifications(req: ExtendedRequest): Promise<{
3
+ time: number;
4
+ total: any;
5
+ rows: any;
6
+ }>;
4
7
  //# sourceMappingURL=userNotifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"userNotifications.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/userNotifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAc,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAYrE,wBAA8B,iBAAiB,CAC7C,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,YAAY,kBA2CpB"}
1
+ {"version":3,"file":"userNotifications.d.ts","sourceRoot":"","sources":["../../../../../server/routes/notifications/controllers/userNotifications.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAarE,wBAA8B,iBAAiB,CAAC,GAAG,EAAE,eAAe;;;;GAwCnE"}