@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,15 +1,16 @@
1
1
  import pgClients from "../../../plugins/pg/pgClients.js";
2
2
  import getSelectVal from "../../../plugins/table/funcs/metaFormat/getSelectVal.js";
3
+ import { UnauthorizedError } from "../../../../errors.js";
3
4
  const maxLimit = 100;
4
5
  const q = `select notification_id as id, subject, body, created_at,
5
6
  author_id, read, link, entity_id, (select avatar from admin.users where uid=a.author_id limit 1) as avatar
6
7
  from crm.notifications a
7
8
  where addressee_id=$1 order by created_at desc limit $2 offset $3`;
8
- export default async function userNotifications(req, reply) {
9
+ export default async function userNotifications(req) {
9
10
  const { pg = pgClients.client, query, user, } = req;
10
11
  const t1 = Date.now();
11
12
  if (!user?.uid) {
12
- return reply.status(401).send({ error: "unauthorized", code: 401 });
13
+ throw UnauthorizedError("unauthorized");
13
14
  }
14
15
  const limit = Math.min(maxLimit, +(query.limit || 5));
15
16
  const offset = query.page && query.page > 0 ? (query.page - 1) * limit : 0;
@@ -27,7 +28,5 @@ export default async function userNotifications(req, reply) {
27
28
  Object.assign(row, { author: vals?.[row.author_id] });
28
29
  });
29
30
  }
30
- return reply
31
- .status(200)
32
- .send({ time: Date.now() - t1, total: rows.length, rows });
31
+ return { time: Date.now() - t1, total: rows.length, rows };
33
32
  }
@@ -1,4 +1,3 @@
1
- import type { FastifyReply } from "fastify";
2
1
  import type { ExtendedPG } from "../../../types/core.js";
3
2
  export default function getAppSettings({ pg, query, params, user, }: {
4
3
  pg: ExtendedPG;
@@ -9,5 +8,9 @@ export default function getAppSettings({ pg, query, params, user, }: {
9
8
  entity: string;
10
9
  };
11
10
  user: Record<string, any>;
12
- }, reply: FastifyReply): Promise<never>;
11
+ }): Promise<{
12
+ time: number;
13
+ uid: any;
14
+ settings: any;
15
+ }>;
13
16
  //# sourceMappingURL=properties.get.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.get.d.ts","sourceRoot":"","sources":["../../../../../server/routes/properties/controllers/properties.get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD,wBAA8B,cAAc,CAC1C,EACE,EAAqB,EACrB,KAAK,EACL,MAAM,EACN,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY,kBA0CpB"}
1
+ {"version":3,"file":"properties.get.d.ts","sourceRoot":"","sources":["../../../../../server/routes/properties/controllers/properties.get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKzD,wBAA8B,cAAc,CAAC,EAC3C,EAAqB,EACrB,KAAK,EACL,MAAM,EACN,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;;;;GAyCA"}
@@ -1,14 +1,15 @@
1
1
  import pgClients from "../../../plugins/pg/pgClients.js";
2
- export default async function getAppSettings({ pg = pgClients.client, query, params, user = {}, }, reply) {
2
+ import { NotFoundError, UnauthorizedError } from "../../../../errors.js";
3
+ export default async function getAppSettings({ pg = pgClients.client, query, params, user = {}, }) {
3
4
  const t1 = Date.now();
4
5
  if (!pg) {
5
- return reply.status(500).send("empty pg");
6
+ throw Error("empty pg");
6
7
  }
7
8
  if (!pg.pk?.["admin.properties"]) {
8
- return reply.status(404).send("properties table not found");
9
+ throw NotFoundError("properties table not found");
9
10
  }
10
11
  if (params?.entity === "user" && !user.uid) {
11
- return reply.status(401).send("unauthorized");
12
+ throw UnauthorizedError("unauthorized");
12
13
  }
13
14
  const { uid } = user;
14
15
  const args = params?.entity === "user" ? [user.uid] : [params?.entity || "app"];
@@ -19,5 +20,5 @@ export default async function getAppSettings({ pg = pgClients.client, query, par
19
20
  ...acc,
20
21
  [key]: property_text || property_json,
21
22
  }), {});
22
- return reply.status(200).send({ time: Date.now() - t1, uid, settings });
23
+ return { time: Date.now() - t1, uid, settings };
23
24
  }
@@ -7,5 +7,5 @@ export default function postAppSettings({ pg, body, user, params, }: {
7
7
  params?: {
8
8
  entity: string;
9
9
  };
10
- }, reply: FastifyReply): Promise<never>;
10
+ }, reply: FastifyReply): Promise<string>;
11
11
  //# sourceMappingURL=properties.post.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.post.d.ts","sourceRoot":"","sources":["../../../../../server/routes/properties/controllers/properties.post.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAmBzD,wBAA8B,eAAe,CAC3C,EACE,EAAqB,EACrB,IAAI,EACJ,IAAI,EACJ,MAAM,GACP,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,EACD,KAAK,EAAE,YAAY,kBA0EpB"}
1
+ {"version":3,"file":"properties.post.d.ts","sourceRoot":"","sources":["../../../../../server/routes/properties/controllers/properties.post.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAwBzD,wBAA8B,eAAe,CAC3C,EACE,EAAqB,EACrB,IAAI,EACJ,IAAI,EACJ,MAAM,GACP,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,EACD,KAAK,EAAE,YAAY,mBA0EpB"}
@@ -1,4 +1,5 @@
1
1
  import { config, logger, dataInsert, pgClients } from "../../../../utils.js";
2
+ import { BadRequestError, ForbiddenError, NotFoundError, } from "../../../../errors.js";
2
3
  function checkValueType(val) {
3
4
  if (val && typeof val === "object") {
4
5
  return "property_json";
@@ -16,17 +17,17 @@ export default async function postAppSettings({ pg = pgClients.client, body, use
16
17
  if ((!params?.entity || params.entity === "app") &&
17
18
  !user?.user_type?.includes?.("admin") &&
18
19
  !config.local) {
19
- return reply.status(403).send("access restricted");
20
+ throw ForbiddenError("access restricted");
20
21
  }
21
22
  if (!pg) {
22
- return reply.status(500).send("empty pg");
23
+ throw Error("empty pg");
23
24
  }
24
25
  if (!pg?.pk?.["admin.properties"]) {
25
- return reply.status(404).send("table not found");
26
+ throw NotFoundError("table not found");
26
27
  }
27
28
  const { key, val } = body;
28
29
  if ((!key || !val) && !Object.keys(body).length) {
29
- return reply.status(400).send("not enough body params");
30
+ throw BadRequestError("not enough body params");
30
31
  }
31
32
  const keys = Object.keys(body);
32
33
  const entity = params?.entity === "user" ? user.uid : params?.entity || "app";
@@ -50,7 +51,7 @@ export default async function postAppSettings({ pg = pgClients.client, body, use
50
51
  });
51
52
  }));
52
53
  await client.query("commit;");
53
- return reply.status(200).send("ok");
54
+ return "ok";
54
55
  }
55
56
  catch (err) {
56
57
  logger.file("properties/error", {
@@ -60,7 +61,7 @@ export default async function postAppSettings({ pg = pgClients.client, body, use
60
61
  user,
61
62
  entity,
62
63
  });
63
- return reply.status(500).send(err.toString());
64
+ throw err;
64
65
  }
65
66
  finally {
66
67
  client.release();
@@ -1,2 +1,2 @@
1
- export default function card(req: any, reply: any): Promise<any>;
1
+ export default function card(req: any, reply: any): Promise<{}>;
2
2
  //# sourceMappingURL=card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/card.ts"],"names":[],"mappings":"AAOA,wBAA8B,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAoItD"}
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/card.ts"],"names":[],"mappings":"AAQA,wBAA8B,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,eAyItD"}
@@ -4,6 +4,7 @@ import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
4
4
  import getMeta from "../../../plugins/pg/funcs/getMeta.js";
5
5
  import pgClients from "../../../plugins/pg/pgClients.js";
6
6
  import metaFormat from "../../../plugins/table/funcs/metaFormat/index.js";
7
+ import { ForbiddenError, NotFoundError } from "../../../../errors.js";
7
8
  export default async function card(req, reply) {
8
9
  const time = Date.now();
9
10
  const { pg = pgClients.client, user, params = {}, query = {}, method } = req;
@@ -12,11 +13,12 @@ export default async function card(req, reply) {
12
13
  id: params?.id,
13
14
  user,
14
15
  }));
16
+ // hooks should throw custom errors instead, this is temp solution to avoid breaking changes in hooks
15
17
  if (hookData?.message && hookData?.status) {
16
- const response = hookData.status >= 400
17
- ? { error: hookData.message, code: hookData.status }
18
- : hookData.message;
19
- return reply.status(hookData.status).send(response);
18
+ if (hookData.status >= 400) {
19
+ throw new Error(hookData.message);
20
+ }
21
+ return hookData.message;
20
22
  }
21
23
  const { actions = [], scope, my, message: accessMessage, } = (await getAccess({
22
24
  table: hookData?.table || params.table,
@@ -25,16 +27,16 @@ export default async function card(req, reply) {
25
27
  method,
26
28
  })) || {};
27
29
  if (!actions.includes("view") || (scope === "my" && !my)) {
28
- return reply.status(403).send({ error: "access restricted", code: 403 });
30
+ throw ForbiddenError("access restricted");
29
31
  }
30
32
  const loadTable = await getTemplate("table", hookData?.table || params.table);
31
33
  if (!loadTable) {
32
- return reply.status(404).send({ error: "table not found", code: 404 });
34
+ throw NotFoundError("table not found");
33
35
  }
34
36
  const { table, columns, meta, sql, cardSql } = loadTable;
35
37
  const { pk, columns: dbColumns = [] } = await getMeta(table);
36
38
  if (!pk) {
37
- return reply.status(404).send({ error: "table pk not found", code: 404 });
39
+ throw NotFoundError("table pkey not found");
38
40
  }
39
41
  const cols = columns.map((el) => el.name || el).join(",");
40
42
  const sqlTable = sql
@@ -1 +1 @@
1
- {"version":3,"file":"cardData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/cardData.ts"],"names":[],"mappings":"AAuBA,wBAA8B,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBA8O7D"}
1
+ {"version":3,"file":"cardData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/cardData.ts"],"names":[],"mappings":"AAwBA,wBAA8B,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBA4O7D"}
@@ -9,6 +9,7 @@ import setOpt from "../../../plugins/crud/funcs/setOpt.js";
9
9
  import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
10
10
  import getData from "../functions/getData.js";
11
11
  import conditions from "./utils/conditions.js";
12
+ import { ForbiddenError } from "../../../../errors.js";
12
13
  const components = {
13
14
  "vs-widget-file": "select 'vs-widget-file' as component, count(*) from crm.files where entity_id=$1 and file_status<>3",
14
15
  "vs-widget-comments": "select 'vs-widget-comments' as component, count(*) from crm.communications where entity_id=$1",
@@ -24,13 +25,10 @@ export default async function getCardData(req, reply) {
24
25
  const template = await getTemplate("card", table);
25
26
  const access = (await getAccess({ table, id, user, method }, pg));
26
27
  if (access?.message) {
27
- return reply.status(403).send({
28
- error: access.message,
29
- code: 403,
30
- });
28
+ throw ForbiddenError(access.message);
31
29
  }
32
30
  if (!access?.actions?.length) {
33
- return reply.status(403).send("access restricted");
31
+ throw ForbiddenError("access restricted");
34
32
  }
35
33
  const tableTemplate = await getTemplate("table", table);
36
34
  const index = template?.find((el) => el[0] === "index.yml")?.[1] || {};
@@ -46,7 +44,7 @@ export default async function getCardData(req, reply) {
46
44
  if (result?.message)
47
45
  return result?.message;
48
46
  if (!result?.rows?.length) {
49
- return reply.status(403).send("access restricted: empty rows");
47
+ throw ForbiddenError("access restricted: empty rows");
50
48
  }
51
49
  const { rows = [] } = result;
52
50
  const panels = (index.table && index.query ? index.panels : result?.panels) || [];
@@ -1 +1 @@
1
- {"version":3,"file":"cardTabData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/cardTabData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAW5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,KAAU,EACV,MAAW,EACX,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY;;;;;;;;;;GAiEpB"}
1
+ {"version":3,"file":"cardTabData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/cardTabData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAW5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,KAAU,EACV,MAAW,EACX,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY;;;;;;;;;;GAiEpB"}
@@ -1,11 +1,12 @@
1
1
  import { handlebars, getToken, getTemplate, getMeta, pgClients, } from "../../../../utils.js";
2
2
  import getTableData from "./tableData.js";
3
+ import { BadRequestError, ForbiddenError } from "../../../../errors.js";
3
4
  export default async function cardTabData({ pg = pgClients.client, query = {}, params = {}, user = {}, }, reply) {
4
5
  const { token } = params;
5
6
  const { sql } = query;
6
7
  const { uid } = user;
7
8
  if (!token) {
8
- return reply.status(400).send("not enough params: token");
9
+ throw BadRequestError("not enough params: token");
9
10
  }
10
11
  const time = Date.now();
11
12
  const props = await getToken({
@@ -15,7 +16,7 @@ export default async function cardTabData({ pg = pgClients.client, query = {}, p
15
16
  json: 1,
16
17
  });
17
18
  if (!props || !props?.table) {
18
- return reply.status(403).send("token is invalid");
19
+ throw ForbiddenError("token is invalid");
19
20
  }
20
21
  const tableTemplate = await getTemplate("table", props.table);
21
22
  const { columns = [] } = tableTemplate?.columns || tableTemplate?.colModel
@@ -1 +1 @@
1
- {"version":3,"file":"dataInfo.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/dataInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAYzD,wBAA8B,QAAQ,CACpC,EACE,EAAqB,EACrB,MAAW,EACX,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY;;;;;;;GA0EpB"}
1
+ {"version":3,"file":"dataInfo.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/dataInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAazD,wBAA8B,QAAQ,CACpC,EACE,EAAqB,EACrB,MAAW,EACX,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY;;;;;;;GA0EpB"}
@@ -4,6 +4,7 @@ import pgClients from "../../../plugins/pg/pgClients.js";
4
4
  import metaFormat from "../../../plugins/table/funcs/metaFormat/index.js";
5
5
  import getTemplatePath from "../../../plugins/table/funcs/getTemplatePath.js";
6
6
  import yml2json from "../../../plugins/yml/funcs/yml2json.js";
7
+ import { BadRequestError, NotFoundError } from "../../../../errors.js";
7
8
  const infoList = [];
8
9
  export default async function dataInfo({ pg = pgClients.client, params = {}, query = {}, }, reply) {
9
10
  if (!infoList.length) {
@@ -20,10 +21,10 @@ export default async function dataInfo({ pg = pgClients.client, params = {}, que
20
21
  ? infoList.filter((el) => el.table === table)
21
22
  : infoList;
22
23
  if (!filteredList?.length) {
23
- return reply.status(404).send("empty info templates list");
24
+ throw NotFoundError("empty info templates list");
24
25
  }
25
26
  if (!id) {
26
- return reply.status(400).send("not enough params: id");
27
+ throw BadRequestError("not enough params: id");
27
28
  }
28
29
  const result = await Promise.all(filteredList
29
30
  .filter((el) => el.table && pg.pk?.[el.table])
@@ -49,7 +50,7 @@ export default async function dataInfo({ pg = pgClients.client, params = {}, que
49
50
  return null;
50
51
  }));
51
52
  if (!result[0]?.table) {
52
- return reply.status(404).send(`object not found: ${id}`);
53
+ throw NotFoundError(`object not found: ${id}`);
53
54
  }
54
55
  await metaFormat(result[0], pg);
55
56
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/filter.ts"],"names":[],"mappings":"AAaA,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;CAC3B;AAED,wBAA8B,SAAS,CACrC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAC5C,OAAO,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,GAAG,CAAC,CAqSvE"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/filter.ts"],"names":[],"mappings":"AAcA,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;CAC3B;AAED,wBAA8B,SAAS,CACrC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAC5C,OAAO,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,GAAG,CAAC,CAqSvE"}
@@ -8,6 +8,7 @@ import pgClients from "../../../plugins/pg/pgClients.js";
8
8
  import { applyHook } from "../../../../utils.js";
9
9
  import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
10
10
  import getMeta from "../../../plugins/pg/funcs/getMeta.js";
11
+ import { NotFoundError } from "../../../../errors.js";
11
12
  const { prefix = "/api" } = config;
12
13
  export default async function filterAPI(req, reply, iscalled) {
13
14
  const time = Date.now();
@@ -19,13 +20,13 @@ export default async function filterAPI(req, reply, iscalled) {
19
20
  const loadTable = await getTemplate("table", params.table);
20
21
  const { key, table, sql, query: tableQuery, form, extra, filterState, filterCustom, } = hookData || loadTable || {};
21
22
  if (!table) {
22
- return reply.status(404).send({ error: "table not found", code: 404 });
23
+ throw NotFoundError("table not found");
23
24
  }
24
25
  const { pk: pk1, view } = await getMeta({ pg, table });
25
26
  // const pk = pg.pk?.[table] || pg.pk?.[table.replace(/"/g, "")];
26
27
  const pk = !pk1 && view ? key : pk1;
27
28
  if (!pk) {
28
- return reply.status(404).send({ error: "table pk not found", code: 404 });
29
+ throw NotFoundError("table pkey not found");
29
30
  }
30
31
  const sqlTable = sql
31
32
  ?.filter?.((el) => !el?.disabled && el?.sql?.replace)
@@ -1,2 +1,2 @@
1
- export default function formFunction(req: any, reply: any): Promise<any>;
1
+ export default function formFunction(req: any, reply: any): Promise<{}>;
2
2
  //# sourceMappingURL=form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/form.ts"],"names":[],"mappings":"AAiBA,wBAA8B,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAkD9D"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/form.ts"],"names":[],"mappings":"AAkBA,wBAA8B,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,eAkD9D"}
@@ -1,3 +1,4 @@
1
+ import { NotFoundError } from "../../../../errors.js";
1
2
  import { applyHook, getTemplate, pgClients } from "../../../../utils.js";
2
3
  const q = `select property_key as key, property_json as json, property_int as int,
3
4
  property_text as text from admin.properties where 1=1`;
@@ -15,15 +16,16 @@ export default async function formFunction(req, reply) {
15
16
  form: params?.name,
16
17
  user,
17
18
  }));
19
+ // hooks should throw custom errors instead, this is temp solution to avoid breaking changes in hooks
18
20
  if (hookData?.message && hookData?.status) {
19
- const response = hookData.status >= 400
20
- ? { error: hookData.message, code: hookData.status }
21
- : hookData.message;
22
- return reply.status(hookData.status).send(response);
21
+ if (hookData.status >= 400) {
22
+ throw new Error(hookData.message);
23
+ }
24
+ return hookData.message;
23
25
  }
24
26
  const form = await getTemplate("form", hookData?.form || params?.name);
25
27
  if (!form) {
26
- return reply.status(404).send({ error: "form not found", code: 404 });
28
+ throw NotFoundError("form not found");
27
29
  }
28
30
  // replace settings
29
31
  const arr = JSON.stringify(form).match(/{{settings.([^}]*)}}/g);
@@ -1 +1 @@
1
- {"version":3,"file":"getFormByTable.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/getFormByTable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAY5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,IAAS,EACT,KAAU,EACV,MAAM,GACP,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,EACD,KAAK,EAAE,YAAY,gBAmLpB"}
1
+ {"version":3,"file":"getFormByTable.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/getFormByTable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAY5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAezD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,IAAS,EACT,KAAU,EACV,MAAM,GACP,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,EACD,KAAK,EAAE,YAAY,gBAkLpB"}
@@ -8,6 +8,7 @@ import applyHook from "../../../plugins/hook/applyHook.js";
8
8
  import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
9
9
  import getEditData from "../../crud/controllers/table.js";
10
10
  import formatSchema from "./utils/formatSchema.js";
11
+ import { ForbiddenError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
11
12
  const q = `select
12
13
  property_key as key,
13
14
  property_json as json,
@@ -19,14 +20,18 @@ export default async function getForm({ pg = pgClients.client, params, user = {}
19
20
  const time = Date.now();
20
21
  const edit = query.edit || params.id;
21
22
  if (!user?.uid) {
22
- return reply.status(401).send("unauthorized");
23
+ throw UnauthorizedError("unauthorized");
23
24
  }
24
25
  const hookData = (await applyHook("preForm", {
25
26
  table: params.name,
26
27
  user,
27
28
  }));
29
+ // hooks should throw custom errors instead, this is temp solution to avoid breaking changes in hooks
28
30
  if (hookData?.message && hookData?.status) {
29
- return reply.status(hookData?.status).send(hookData?.message);
31
+ if (hookData.status >= 400) {
32
+ throw new Error(hookData.message);
33
+ }
34
+ return hookData.message;
30
35
  }
31
36
  const tokenData = (await getToken({ token: params.name, uid: user?.uid, json: 1 })) || {};
32
37
  const table = tokenData?.table || hookData?.table || params.name;
@@ -34,18 +39,15 @@ export default async function getForm({ pg = pgClients.client, params, user = {}
34
39
  const { title = loadTable.ua, description } = loadTable;
35
40
  const form = tokenData?.form || hookData?.form || loadTable.form;
36
41
  if (!form) {
37
- // return reply.status(404).send("form not found");
42
+ // throw NotFoundError("form not found");
38
43
  }
39
44
  const { actions = [], message: accessMessage } = (await getAccess({ table, id: edit, form, user, method }, pg)) || {};
40
45
  if (accessMessage) {
41
- return reply.status(403).send({
42
- error: accessMessage,
43
- code: 403,
44
- });
46
+ throw ForbiddenError(accessMessage);
45
47
  }
46
48
  const loadTemplate = await getTemplate("form", form || params.name);
47
49
  if (!loadTemplate) {
48
- return reply.status(404).send("form template not found");
50
+ throw NotFoundError("form template not found");
49
51
  }
50
52
  const { schema = loadTemplate } = loadTemplate;
51
53
  await Promise.all(Object.keys(schema || {})
@@ -84,9 +86,7 @@ export default async function getForm({ pg = pgClients.client, params, user = {}
84
86
  process.env.NODE_ENV !== "test" &&
85
87
  !(tokenData?.form || hookData?.form) &&
86
88
  form) {
87
- return reply
88
- .status(403)
89
- .send({ error: "access restricted: actions", code: 403 });
89
+ throw ForbiddenError("access restricted: actions");
90
90
  }
91
91
  const token = setToken({
92
92
  ids: [JSON.stringify({ id, table, form })],
@@ -138,5 +138,5 @@ export default async function getForm({ pg = pgClients.client, params, user = {}
138
138
  payload: res,
139
139
  user,
140
140
  });
141
- return reply.status(200).send(res1 || res);
141
+ return res1 || res;
142
142
  }
@@ -14,5 +14,5 @@ export declare function getTableColumnMeta({ table, template, column, selectName
14
14
  searchQuery: string;
15
15
  pk: string;
16
16
  } | null>;
17
- export default function suggest(req: any, reply: any): Promise<any>;
17
+ export default function suggest(req: any): Promise<any>;
18
18
  //# sourceMappingURL=suggest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAuBpD,wBAAsB,kBAAkB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,GAAG,EACH,EAAqB,GACtB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;;;;;UAwFA;AAED,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAuYzD"}
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAwBpD,wBAAsB,kBAAkB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,GAAG,EACH,EAAqB,GACtB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;;;;;UAwFA;AAED,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,gBAuX7C"}
@@ -1,6 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { config, getPGAsync, getTemplate, getSelectMeta, getMeta, applyHook, getSelectVal, logger, getSelect, metaFormat, getColumnCLS, pgClients, getFilter, } from "../../../../utils.js";
4
+ import { BadRequestError, NotFoundError } from "../../../../errors.js";
4
5
  const defaultLimit = 50;
5
6
  export async function getTableColumnMeta({ table, template, column, selectName, filtered, startsWith, key, pg = pgClients.client, }) {
6
7
  if (!table || !column) {
@@ -64,7 +65,7 @@ export async function getTableColumnMeta({ table, template, column, selectName,
64
65
  pk: "id",
65
66
  };
66
67
  }
67
- export default async function suggest(req, reply) {
68
+ export default async function suggest(req) {
68
69
  const time = Date.now();
69
70
  const { params, user, query = {}, pg: pg1 = pgClients.client } = req;
70
71
  const { lang = "ua", parent = "" } = query;
@@ -93,10 +94,7 @@ export default async function suggest(req, reply) {
93
94
  const body = await getTemplate("table", table);
94
95
  const tableName = hookBody?.table || body?.table || table;
95
96
  if (query.limit && query.limit < 0) {
96
- return reply.status(400).send({
97
- error: "param limit is invalid",
98
- code: 400,
99
- });
97
+ throw BadRequestError("param limit is invalid");
100
98
  }
101
99
  const selectName = query.sel ||
102
100
  (tableName && column && body
@@ -122,30 +120,23 @@ export default async function suggest(req, reply) {
122
120
  parent,
123
121
  });
124
122
  if (meta?.minLength && query.key && query.key.length < meta?.minLength) {
125
- return reply.status(400).send({
126
- error: `min length: ${meta.minLength}`,
127
- code: 400,
128
- });
123
+ throw BadRequestError(`min length: ${meta.minLength}`);
129
124
  }
130
125
  const limit = meta?.limit || defaultLimit;
131
126
  const pg = meta?.db ? await getPGAsync(meta.db) : pg1;
132
127
  if (!pg || !pg.pk || !pg.pgType) {
133
- return reply.status(400).send({
134
- error: "pg connection not established",
135
- code: 400,
136
- });
128
+ throw Error("empty pg");
137
129
  }
138
130
  if (table && !pg?.pk?.[tableName]) {
139
- return reply.status(400).send({
140
- error: "param name is invalid: 1",
141
- code: 400,
142
- });
131
+ throw BadRequestError("param name is invalid: 1");
143
132
  }
144
133
  const columns = hookBody?.columns || body?.columns;
145
- const metaColumns = await getMeta({
146
- pg,
147
- table: tableName,
148
- }).then((el) => el?.columns || []);
134
+ const metaColumns = tableName
135
+ ? await getMeta({
136
+ pg,
137
+ table: tableName,
138
+ }).then((el) => el?.columns || [])
139
+ : [];
149
140
  const { name: columnName } = (columns || []).find((col) => col?.name === column) ||
150
141
  (metaColumns || []).find((col) => col?.name === column) ||
151
142
  {};
@@ -154,16 +145,10 @@ export default async function suggest(req, reply) {
154
145
  // hookBody?.filters ||
155
146
  // (body ? await getFilter({ pg, table }).then((el) => el.list) : null);
156
147
  if (table && (!column || !columnName)) {
157
- return reply.status(400).send({
158
- error: "param name is invalid: 2",
159
- code: 400,
160
- });
148
+ throw BadRequestError("param name is invalid: 2");
161
149
  }
162
150
  if (!meta) {
163
- return reply.status(404).send({
164
- error: "Not found query select",
165
- code: 404,
166
- });
151
+ throw NotFoundError("Not found query select");
167
152
  }
168
153
  if (query.meta) {
169
154
  return meta;
@@ -1,4 +1,3 @@
1
- import type { FastifyReply } from "fastify";
2
1
  import type { ExtendedPG } from "../../../types/core.js";
3
2
  export default function tableInfo({ pg, params, query, user, }: {
4
3
  pg: ExtendedPG;
@@ -11,5 +10,5 @@ export default function tableInfo({ pg, params, query, user, }: {
11
10
  sql?: any;
12
11
  };
13
12
  user?: Record<string, any>;
14
- }, reply: FastifyReply): Promise<{}>;
13
+ }): Promise<{}>;
15
14
  //# sourceMappingURL=tableInfo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tableInfo.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/tableInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAU5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,wBAA8B,SAAS,CACrC,EACE,EAAqB,EACrB,MAAM,EACN,KAAU,EACV,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,KAAK,EAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,EACD,KAAK,EAAE,YAAY,eAiLpB"}
1
+ {"version":3,"file":"tableInfo.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/tableInfo.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOzD,wBAA8B,SAAS,CAAC,EACtC,EAAqB,EACrB,MAAM,EACN,KAAU,EACV,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,KAAK,EAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,eAgLA"}
@@ -1,31 +1,32 @@
1
1
  import { getTemplate, getMeta, metaFormat, applyHook, handlebars, pgClients, } from "../../../../utils.js";
2
- export default async function tableInfo({ pg = pgClients.client, params, query = {}, user = {}, }, reply) {
2
+ import { BadRequestError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
3
+ export default async function tableInfo({ pg = pgClients.client, params, query = {}, user = {}, }) {
3
4
  const time = Date.now();
4
5
  const { uid } = user;
5
6
  if (!uid) {
6
- return reply.status(403).send("access restricted: uid");
7
+ throw UnauthorizedError("unauthorized");
7
8
  }
8
9
  if (!params?.id || !params?.table) {
9
- return reply.status(400).send("not enougn params");
10
+ throw BadRequestError("not enough params");
10
11
  }
11
12
  const loadTable = await getTemplate("table", params.table);
12
13
  if (!loadTable) {
13
- return reply.status(404).send("template not found");
14
+ throw NotFoundError("template not found");
14
15
  }
15
16
  const { table, columns = [], sql, cardSql, filters, form, meta, public: ispublic, } = loadTable;
16
17
  if (!meta?.info) {
17
- return reply.status(400).send("empty meta info");
18
+ throw BadRequestError("empty meta info");
18
19
  }
19
20
  const tableMeta = await getMeta({ pg, table });
20
21
  if (tableMeta?.view) {
21
22
  if (!loadTable?.key) {
22
- return reply.status(404).send(`key not found: ${table}`);
23
+ throw NotFoundError(`key not found: ${table}`);
23
24
  }
24
25
  Object.assign(tableMeta, { pk: loadTable?.key });
25
26
  }
26
27
  const { pk } = tableMeta || {};
27
28
  if (!pk) {
28
- return reply.status(404).send(`table not found: ${table}`);
29
+ throw NotFoundError(`table not found: ${table}`);
29
30
  }
30
31
  const sqlTable = sql
31
32
  ?.filter?.((el) => !el?.disabled && el?.sql?.replace)
@@ -56,7 +57,7 @@ export default async function tableInfo({ pg = pgClients.client, params, query =
56
57
  .filter((el) => columnList.includes(el))
57
58
  .map((el) => `"${el}"`);
58
59
  if (!metaInfoCols.length) {
59
- return reply.status(400).send("invalid meta info: columns not found");
60
+ throw BadRequestError("invalid meta info: columns not found");
60
61
  }
61
62
  const q = `select ${pk ? `"${pk}" as id,` : ""}
62
63
  ${metaInfoCols.join(",")}
@@ -1 +1 @@
1
- {"version":3,"file":"tokenInfo.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/tokenInfo.ts"],"names":[],"mappings":"AAEA,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAW3D"}
1
+ {"version":3,"file":"tokenInfo.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/tokenInfo.ts"],"names":[],"mappings":"AAGA,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAW3D"}