@opengis/fastify-table 1.4.88 → 1.5.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 (489) hide show
  1. package/dist/config.js +33 -0
  2. package/dist/dblist.js +5 -0
  3. package/dist/index.js +170 -0
  4. package/dist/redactionList.js +6 -0
  5. package/dist/server/helpers/core/badge.js +16 -0
  6. package/dist/server/helpers/core/buttonFilePreview.js +12 -0
  7. package/dist/server/helpers/core/buttonHelper.js +20 -0
  8. package/{server → dist/server}/helpers/core/token.js +16 -18
  9. package/dist/server/helpers/format/formatAuto.js +14 -0
  10. package/dist/server/helpers/format/formatDate.js +231 -0
  11. package/{server → dist/server}/helpers/format/formatDigit.js +21 -21
  12. package/dist/server/helpers/format/formatNum.js +331 -0
  13. package/{server → dist/server}/helpers/format/formatNumber.js +50 -55
  14. package/dist/server/helpers/format/formatRelative.js +180 -0
  15. package/{server → dist/server}/helpers/format/formatUnit.js +41 -40
  16. package/{server → dist/server}/helpers/format/num_format.js +40 -44
  17. package/{server → dist/server}/helpers/format/set.js +26 -27
  18. package/{server → dist/server}/helpers/funcs/_math.js +49 -50
  19. package/{server → dist/server}/helpers/funcs/contentList.js +52 -57
  20. package/{server → dist/server}/helpers/funcs/empty.js +21 -21
  21. package/dist/server/helpers/funcs/ifCond.js +109 -0
  22. package/dist/server/helpers/funcs/ifCondAnd.js +109 -0
  23. package/dist/server/helpers/funcs/ifCondOr.js +110 -0
  24. package/{server → dist/server}/helpers/funcs/inc.js +19 -20
  25. package/{server → dist/server}/helpers/funcs/json.js +3 -3
  26. package/dist/server/helpers/funcs/qrcode.js +65 -0
  27. package/{server → dist/server}/helpers/funcs/round.js +27 -29
  28. package/dist/server/helpers/funcs/select.js +39 -0
  29. package/dist/server/helpers/index.js +125 -0
  30. package/dist/server/helpers/list/buttonHelper.js +20 -0
  31. package/{server → dist/server}/helpers/list/descriptionList.js +39 -45
  32. package/dist/server/helpers/list/tableList.js +104 -0
  33. package/{server → dist/server}/helpers/list/utils/button.js +3 -3
  34. package/{server → dist/server}/helpers/list/utils/buttonDel.js +8 -9
  35. package/{server → dist/server}/helpers/list/utils/buttonEdit.js +8 -9
  36. package/{server → dist/server}/helpers/string/coalesce.js +33 -39
  37. package/{server → dist/server}/helpers/string/concat.js +25 -28
  38. package/{server → dist/server}/helpers/string/split.js +19 -20
  39. package/{server → dist/server}/helpers/string/str_replace.js +57 -62
  40. package/{server → dist/server}/helpers/string/substr.js +28 -32
  41. package/{server → dist/server}/helpers/string/translit.js +20 -23
  42. package/dist/server/helpers/string/utils/alphabet.js +76 -0
  43. package/{server → dist/server}/helpers/utils/button.js +3 -3
  44. package/{server → dist/server}/helpers/utils/buttonAdd.js +4 -4
  45. package/{server → dist/server}/helpers/utils/buttonDel.js +11 -15
  46. package/{server → dist/server}/helpers/utils/buttonDownload.js +3 -3
  47. package/dist/server/helpers/utils/buttonEdit.js +14 -0
  48. package/{server → dist/server}/helpers/utils/buttonPreview.js +3 -3
  49. package/{server → dist/server}/helpers/utils/mdToHTML.js +16 -17
  50. package/{server → dist/server}/helpers/utils/paddingNumber.js +5 -5
  51. package/dist/server/plugins/access/funcs/getAdminAccess.js +11 -0
  52. package/dist/server/plugins/cron/cronList.js +2 -0
  53. package/dist/server/plugins/cron/funcs/addCron.js +41 -0
  54. package/{server → dist/server}/plugins/cron/funcs/interval2ms.js +36 -40
  55. package/dist/server/plugins/cron/funcs/runCron.js +20 -0
  56. package/{server → dist/server}/plugins/cron/funcs/verifyUnique.js +19 -23
  57. package/dist/server/plugins/cron/index.js +75 -0
  58. package/dist/server/plugins/crud/funcs/dataDelete.js +87 -0
  59. package/dist/server/plugins/crud/funcs/dataInsert.js +134 -0
  60. package/dist/server/plugins/crud/funcs/dataUpdate.js +198 -0
  61. package/dist/server/plugins/crud/funcs/getAccess.js +82 -0
  62. package/dist/server/plugins/crud/funcs/getOpt.js +13 -0
  63. package/dist/server/plugins/crud/funcs/getToken.js +24 -0
  64. package/dist/server/plugins/crud/funcs/isFileExists.js +11 -0
  65. package/dist/server/plugins/crud/funcs/setOpt.js +19 -0
  66. package/dist/server/plugins/crud/funcs/setToken.js +41 -0
  67. package/dist/server/plugins/crud/funcs/utils/getFolder.js +13 -0
  68. package/dist/server/plugins/crud/funcs/utils/getInsertQuery.js +54 -0
  69. package/dist/server/plugins/crud/funcs/utils/logChanges.js +144 -0
  70. package/{server → dist/server}/plugins/crud/funcs/validateData.js +91 -83
  71. package/dist/server/plugins/extra/extraData.js +81 -0
  72. package/dist/server/plugins/extra/extraDataGet.js +52 -0
  73. package/dist/server/plugins/file/downloadFile.js +15 -0
  74. package/{server → dist/server}/plugins/file/getExport.js +18 -38
  75. package/dist/server/plugins/file/isFileExists.js +13 -0
  76. package/dist/server/plugins/file/providers/fs.js +86 -0
  77. package/dist/server/plugins/file/providers/index.js +28 -0
  78. package/dist/server/plugins/file/providers/mime/index.js +7 -0
  79. package/dist/server/plugins/file/providers/mime/mimes.js +1179 -0
  80. package/dist/server/plugins/file/providers/s3/client.js +26 -0
  81. package/dist/server/plugins/file/providers/s3/funcs/downloadFile.js +42 -0
  82. package/dist/server/plugins/file/providers/s3/funcs/fileExists.js +24 -0
  83. package/dist/server/plugins/file/providers/s3/funcs/uploadFile.js +35 -0
  84. package/dist/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +18 -0
  85. package/{server → dist/server}/plugins/file/providers/s3/index.js +11 -12
  86. package/dist/server/plugins/file/providers/utils/getDataSize.js +19 -0
  87. package/dist/server/plugins/file/providers/utils/getValidData.js +30 -0
  88. package/dist/server/plugins/file/providers/utils/handlers/dataTypes.js +7 -0
  89. package/dist/server/plugins/file/providers/utils/handlers/index.js +50 -0
  90. package/dist/server/plugins/file/providers/utils/handlers/sizeHandlers.js +9 -0
  91. package/dist/server/plugins/file/providers/utils/streamToBuffer.js +7 -0
  92. package/{server → dist/server}/plugins/file/providers/utils/typeguards/isArray.js +2 -3
  93. package/{server → dist/server}/plugins/file/providers/utils/typeguards/isBuffer.js +2 -3
  94. package/dist/server/plugins/file/providers/utils/typeguards/isPath.js +3 -0
  95. package/dist/server/plugins/file/providers/utils/typeguards/isReadableStream.js +7 -0
  96. package/{server → dist/server}/plugins/file/providers/utils/typeguards/isText.js +2 -3
  97. package/dist/server/plugins/file/uploadFile.js +14 -0
  98. package/dist/server/plugins/file/uploadMultiPart.js +101 -0
  99. package/dist/server/plugins/file/utils/allowedExtensions.js +60 -0
  100. package/{server → dist/server}/plugins/file/utils/getFileType.js +12 -10
  101. package/dist/server/plugins/file/utils/getPath.js +30 -0
  102. package/dist/server/plugins/file/utils/isFileExists.js +15 -0
  103. package/dist/server/plugins/grpc/file2json.js +50 -0
  104. package/dist/server/plugins/grpc/grpc.js +103 -0
  105. package/dist/server/plugins/grpc/office2pdf.js +78 -0
  106. package/dist/server/plugins/grpc/utils/csv2xls.js +6 -0
  107. package/dist/server/plugins/grpc/utils/excel2Json.js +10 -0
  108. package/dist/server/plugins/grpc/utils/html2doc.js +17 -0
  109. package/dist/server/plugins/grpc/utils/html2img.js +17 -0
  110. package/dist/server/plugins/grpc/utils/html2pdf.js +19 -0
  111. package/{server → dist/server}/plugins/grpc/utils/htmlTemplate.js +3 -4
  112. package/dist/server/plugins/grpc/utils/json2xls.js +11 -0
  113. package/dist/server/plugins/grpc/utils/mergePdf.js +18 -0
  114. package/dist/server/plugins/hook/funcs/addHook.js +7 -0
  115. package/dist/server/plugins/hook/funcs/applyHook.js +25 -0
  116. package/dist/server/plugins/hook/funcs/applyHookSync.js +7 -0
  117. package/dist/server/plugins/hook/hookList.js +2 -0
  118. package/{server → dist/server}/plugins/hook/index.js +7 -8
  119. package/dist/server/plugins/logger/createFileStream.js +79 -0
  120. package/dist/server/plugins/logger/errorMessage.js +24 -0
  121. package/dist/server/plugins/logger/errorStatus.js +17 -0
  122. package/dist/server/plugins/logger/getHooks.js +17 -0
  123. package/dist/server/plugins/logger/getLogger.js +52 -0
  124. package/dist/server/plugins/logger/index.js +37 -0
  125. package/dist/server/plugins/logger/labels.js +10 -0
  126. package/dist/server/plugins/logger/serializers.js +22 -0
  127. package/{server → dist/server}/plugins/logger/timestampWithTimeZone.js +5 -5
  128. package/dist/server/plugins/md/funcs/formatMdoc.js +45 -0
  129. package/{server → dist/server}/plugins/md/funcs/mdToHTML.js +16 -17
  130. package/dist/server/plugins/metric/index.js +6 -0
  131. package/dist/server/plugins/metric/loggerSystem.js +127 -0
  132. package/dist/server/plugins/metric/systemMetricsFifthly.js +20 -0
  133. package/dist/server/plugins/migration/exec.migrations.js +59 -0
  134. package/dist/server/plugins/migration/exec.sql.js +61 -0
  135. package/{server → dist/server}/plugins/migration/index.js +5 -7
  136. package/dist/server/plugins/pg/funcs/autoIndex.js +102 -0
  137. package/{server → dist/server}/plugins/pg/funcs/getDBParams.js +16 -15
  138. package/dist/server/plugins/pg/funcs/getMeta.js +48 -0
  139. package/dist/server/plugins/pg/funcs/getPG.js +39 -0
  140. package/dist/server/plugins/pg/funcs/getPGAsync.js +45 -0
  141. package/dist/server/plugins/pg/funcs/init.js +157 -0
  142. package/dist/server/plugins/pg/index.js +47 -0
  143. package/dist/server/plugins/pg/pgClients.js +20 -0
  144. package/dist/server/plugins/policy/funcs/checkPolicy.js +173 -0
  145. package/dist/server/plugins/policy/funcs/checkXSS.js +44 -0
  146. package/dist/server/plugins/policy/index.js +11 -0
  147. package/dist/server/plugins/policy/sqlInjection.js +33 -0
  148. package/dist/server/plugins/policy/xssInjection.js +72 -0
  149. package/{server → dist/server}/plugins/redis/client.js +6 -8
  150. package/dist/server/plugins/redis/funcs/getRedis.js +23 -0
  151. package/{server → dist/server}/plugins/redis/funcs/redisClients.js +2 -3
  152. package/dist/server/plugins/redis/index.js +8 -0
  153. package/dist/server/plugins/sqlite/funcs/getSqlite.js +27 -0
  154. package/dist/server/plugins/sqlite/funcs/init.js +45 -0
  155. package/dist/server/plugins/sqlite/index.js +8 -0
  156. package/dist/server/plugins/sqlite/sqliteClients.js +24 -0
  157. package/dist/server/plugins/table/funcs/addMenu.js +12 -0
  158. package/dist/server/plugins/table/funcs/addTemplateDir.js +16 -0
  159. package/dist/server/plugins/table/funcs/customTokens.js +2 -0
  160. package/dist/server/plugins/table/funcs/getData.js +25 -0
  161. package/dist/server/plugins/table/funcs/getFilter.js +18 -0
  162. package/dist/server/plugins/table/funcs/getFilterSQL/index.js +201 -0
  163. package/dist/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +131 -0
  164. package/dist/server/plugins/table/funcs/getFilterSQL/util/getCustomQuery.js +11 -0
  165. package/dist/server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.js +84 -0
  166. package/dist/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +11 -0
  167. package/dist/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +161 -0
  168. package/dist/server/plugins/table/funcs/getFilterSQL/util/getTableSql.js +40 -0
  169. package/dist/server/plugins/table/funcs/getSelect.js +37 -0
  170. package/dist/server/plugins/table/funcs/getSelectMeta.js +77 -0
  171. package/dist/server/plugins/table/funcs/getTemplate.js +86 -0
  172. package/dist/server/plugins/table/funcs/getTemplatePath.js +60 -0
  173. package/dist/server/plugins/table/funcs/getTemplateSync.js +84 -0
  174. package/dist/server/plugins/table/funcs/getTemplates.js +15 -0
  175. package/dist/server/plugins/table/funcs/gisIRColumn.js +81 -0
  176. package/dist/server/plugins/table/funcs/loadTemplate.js +2 -0
  177. package/dist/server/plugins/table/funcs/loadTemplatePath.js +2 -0
  178. package/dist/server/plugins/table/funcs/menuDirs.js +2 -0
  179. package/dist/server/plugins/table/funcs/metaFormat/getSelectVal.js +75 -0
  180. package/dist/server/plugins/table/funcs/metaFormat/index.js +64 -0
  181. package/dist/server/plugins/table/funcs/userTemplateDir.js +2 -0
  182. package/dist/server/plugins/table/funcs/userTokens.js +2 -0
  183. package/dist/server/plugins/util/funcs/eventStream.js +28 -0
  184. package/{server → dist/server}/plugins/util/funcs/flattenObject.js +14 -12
  185. package/{server → dist/server}/plugins/util/funcs/unflattenObject.js +48 -46
  186. package/{server → dist/server}/plugins/yml/funcs/json2yml.js +3 -5
  187. package/{server → dist/server}/plugins/yml/funcs/yml2json.js +11 -14
  188. package/{server → dist/server}/routes/access/controllers/access.group.js +17 -23
  189. package/{server → dist/server}/routes/access/controllers/access.group.post.js +46 -53
  190. package/dist/server/routes/access/controllers/access.interface.js +36 -0
  191. package/{server/routes/access/index.mjs → dist/server/routes/access/index.js} +10 -12
  192. package/{server/routes/access/schema.mjs → dist/server/routes/access/schema.js} +65 -68
  193. package/dist/server/routes/cron/controllers/cronApi.js +16 -0
  194. package/dist/server/routes/cron/index.js +15 -0
  195. package/dist/server/routes/crud/controllers/deleteCrud.js +90 -0
  196. package/dist/server/routes/crud/controllers/insert.js +110 -0
  197. package/dist/server/routes/crud/controllers/table.js +144 -0
  198. package/dist/server/routes/crud/controllers/update.js +113 -0
  199. package/dist/server/routes/crud/index.js +22 -0
  200. package/dist/server/routes/dblist/controllers/readItems.js +25 -0
  201. package/dist/server/routes/dblist/controllers/setItem.js +20 -0
  202. package/dist/server/routes/dblist/index.js +17 -0
  203. package/dist/server/routes/dblist/utils/formatData.js +8 -0
  204. package/dist/server/routes/file/controllers/delete.js +99 -0
  205. package/dist/server/routes/file/controllers/download.js +56 -0
  206. package/dist/server/routes/file/controllers/export.js +294 -0
  207. package/dist/server/routes/file/controllers/files.js +57 -0
  208. package/dist/server/routes/file/controllers/resize.js +86 -0
  209. package/dist/server/routes/file/controllers/resizeAll.js +140 -0
  210. package/dist/server/routes/file/controllers/upload.js +56 -0
  211. package/dist/server/routes/file/controllers/uploadImage.js +45 -0
  212. package/dist/server/routes/file/controllers/utils/formatResult.js +13 -0
  213. package/dist/server/routes/file/controllers/utils/jsonToCsv.js +40 -0
  214. package/dist/server/routes/file/controllers/utils/jsonToXls.js +37 -0
  215. package/dist/server/routes/file/index.js +22 -0
  216. package/dist/server/routes/file/schema.js +14 -0
  217. package/dist/server/routes/grpc/controllers/file2geojson.js +54 -0
  218. package/dist/server/routes/grpc/controllers/filePreview.js +87 -0
  219. package/dist/server/routes/grpc/index.js +9 -0
  220. package/dist/server/routes/logger/controllers/logger.file.js +81 -0
  221. package/dist/server/routes/logger/controllers/logger.test.api.js +42 -0
  222. package/dist/server/routes/logger/controllers/utils/checkUserAccess.js +22 -0
  223. package/dist/server/routes/logger/controllers/utils/getRootDir.js +25 -0
  224. package/dist/server/routes/logger/index.js +18 -0
  225. package/dist/server/routes/menu/controllers/getMenu.js +98 -0
  226. package/dist/server/routes/menu/controllers/interfaces.js +18 -0
  227. package/dist/server/routes/menu/index.js +7 -0
  228. package/dist/server/routes/properties/controllers/properties.get.js +23 -0
  229. package/dist/server/routes/properties/controllers/properties.post.js +68 -0
  230. package/dist/server/routes/properties/index.js +21 -0
  231. package/dist/server/routes/table/controllers/card.js +79 -0
  232. package/dist/server/routes/table/controllers/cardData.js +161 -0
  233. package/dist/server/routes/table/controllers/cardTabData.js +49 -0
  234. package/dist/server/routes/table/controllers/dataInfo.js +57 -0
  235. package/dist/server/routes/table/controllers/filter.js +181 -0
  236. package/dist/server/routes/table/controllers/form.js +41 -0
  237. package/{server → dist/server}/routes/table/controllers/getFormByTable.js +105 -125
  238. package/dist/server/routes/table/controllers/search.js +80 -0
  239. package/dist/server/routes/table/controllers/suggest.js +242 -0
  240. package/dist/server/routes/table/controllers/tableData.js +88 -0
  241. package/dist/server/routes/table/controllers/tableInfo.js +112 -0
  242. package/dist/server/routes/table/controllers/tokenInfo.js +10 -0
  243. package/dist/server/routes/table/controllers/utils/conditions.js +30 -0
  244. package/dist/server/routes/table/controllers/utils/formatSchema.js +35 -0
  245. package/dist/server/routes/table/controllers/utils/locales.js +2 -0
  246. package/dist/server/routes/table/functions/getData.js +584 -0
  247. package/dist/server/routes/table/index.js +44 -0
  248. package/dist/server/routes/table/schema.js +117 -0
  249. package/dist/server/routes/templates/controllers/getTemplate.js +65 -0
  250. package/dist/server/routes/templates/index.js +7 -0
  251. package/{server → dist/server}/routes/templates/schema.js +11 -12
  252. package/dist/server/routes/util/controllers/code.generator.js +75 -0
  253. package/dist/server/routes/util/controllers/next.id.js +4 -0
  254. package/dist/server/routes/util/controllers/status.monitor.js +6 -0
  255. package/dist/server/routes/util/controllers/user.tokens.js +32 -0
  256. package/dist/server/routes/util/index.js +13 -0
  257. package/dist/server/routes/widget/controllers/file.edit.js +48 -0
  258. package/dist/server/routes/widget/controllers/widget.del.js +84 -0
  259. package/dist/server/routes/widget/controllers/widget.get.js +164 -0
  260. package/dist/server/routes/widget/controllers/widget.set.js +117 -0
  261. package/dist/server/routes/widget/hook/onWidgetSet.js +10 -0
  262. package/dist/server/routes/widget/index.js +42 -0
  263. package/dist/server/types/core.js +12 -0
  264. package/dist/utils.js +93 -0
  265. package/package.json +24 -17
  266. package/config.js +0 -37
  267. package/dblist.js +0 -5
  268. package/index.js +0 -193
  269. package/redactionList.js +0 -7
  270. package/server/helpers/core/badge.js +0 -14
  271. package/server/helpers/core/buttonFilePreview.js +0 -12
  272. package/server/helpers/core/buttonHelper.js +0 -22
  273. package/server/helpers/format/formatAuto.js +0 -13
  274. package/server/helpers/format/formatDate.js +0 -258
  275. package/server/helpers/format/formatNum.js +0 -365
  276. package/server/helpers/format/formatRelative.js +0 -106
  277. package/server/helpers/funcs/ifCond.js +0 -109
  278. package/server/helpers/funcs/ifCondAnd.js +0 -114
  279. package/server/helpers/funcs/ifCondOr.js +0 -115
  280. package/server/helpers/funcs/qrcode.js +0 -68
  281. package/server/helpers/funcs/select.js +0 -46
  282. package/server/helpers/index.js +0 -137
  283. package/server/helpers/list/buttonHelper.js +0 -22
  284. package/server/helpers/list/tableList.js +0 -87
  285. package/server/helpers/string/utils/alphabet.js +0 -76
  286. package/server/helpers/utils/buttonEdit.js +0 -17
  287. package/server/migrations/0.sql +0 -84
  288. package/server/migrations/cls.sql +0 -40
  289. package/server/migrations/context.sql +0 -135
  290. package/server/migrations/crm.sql +0 -155
  291. package/server/migrations/log.sql +0 -87
  292. package/server/migrations/properties.sql +0 -115
  293. package/server/migrations/roles.sql +0 -191
  294. package/server/migrations/template.sql +0 -44
  295. package/server/migrations/users.sql +0 -176
  296. package/server/plugins/access/funcs/getAdminAccess.js +0 -14
  297. package/server/plugins/access/index.mjs +0 -6
  298. package/server/plugins/cron/cronList.js +0 -1
  299. package/server/plugins/cron/funcs/addCron.js +0 -52
  300. package/server/plugins/cron/funcs/runCron.js +0 -24
  301. package/server/plugins/cron/index.js +0 -77
  302. package/server/plugins/crud/funcs/dataDelete.js +0 -86
  303. package/server/plugins/crud/funcs/dataInsert.js +0 -131
  304. package/server/plugins/crud/funcs/dataUpdate.js +0 -179
  305. package/server/plugins/crud/funcs/getAccess.js +0 -94
  306. package/server/plugins/crud/funcs/getOpt.js +0 -14
  307. package/server/plugins/crud/funcs/getToken.js +0 -33
  308. package/server/plugins/crud/funcs/isFileExists.js +0 -13
  309. package/server/plugins/crud/funcs/setOpt.js +0 -21
  310. package/server/plugins/crud/funcs/setToken.js +0 -43
  311. package/server/plugins/crud/funcs/utils/getFolder.js +0 -11
  312. package/server/plugins/crud/funcs/utils/getInsertQuery.js +0 -44
  313. package/server/plugins/crud/funcs/utils/logChanges.js +0 -121
  314. package/server/plugins/crud/index.js +0 -23
  315. package/server/plugins/extra/extraData.js +0 -79
  316. package/server/plugins/extra/extraDataGet.js +0 -56
  317. package/server/plugins/file/downloadFile.js +0 -18
  318. package/server/plugins/file/isFileExists.js +0 -17
  319. package/server/plugins/file/providers/fs.js +0 -100
  320. package/server/plugins/file/providers/index.d.ts +0 -49
  321. package/server/plugins/file/providers/index.js +0 -36
  322. package/server/plugins/file/providers/mime/index.js +0 -12
  323. package/server/plugins/file/providers/mime/mimes.js +0 -1180
  324. package/server/plugins/file/providers/s3/client.js +0 -41
  325. package/server/plugins/file/providers/s3/funcs/downloadFile.js +0 -50
  326. package/server/plugins/file/providers/s3/funcs/fileExists.js +0 -32
  327. package/server/plugins/file/providers/s3/funcs/uploadFile.js +0 -46
  328. package/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +0 -23
  329. package/server/plugins/file/providers/utils/getDataSize.js +0 -20
  330. package/server/plugins/file/providers/utils/getValidData.js +0 -32
  331. package/server/plugins/file/providers/utils/handlers/dataTypes.js +0 -8
  332. package/server/plugins/file/providers/utils/handlers/index.js +0 -53
  333. package/server/plugins/file/providers/utils/handlers/sizeHandlers.js +0 -11
  334. package/server/plugins/file/providers/utils/streamToBuffer.js +0 -8
  335. package/server/plugins/file/providers/utils/typeguards/isPath.js +0 -5
  336. package/server/plugins/file/providers/utils/typeguards/isReadableStream.js +0 -8
  337. package/server/plugins/file/uploadFile.js +0 -19
  338. package/server/plugins/file/uploadMultiPart.js +0 -131
  339. package/server/plugins/file/utils/allowedExtensions.js +0 -25
  340. package/server/plugins/file/utils/getPath.js +0 -25
  341. package/server/plugins/file/utils/isFileExists.js +0 -16
  342. package/server/plugins/grpc/file2json.js +0 -54
  343. package/server/plugins/grpc/grpc.js +0 -125
  344. package/server/plugins/grpc/office2pdf.js +0 -91
  345. package/server/plugins/grpc/utils/csv2xls.js +0 -8
  346. package/server/plugins/grpc/utils/excel2Json.js +0 -8
  347. package/server/plugins/grpc/utils/html2doc.js +0 -19
  348. package/server/plugins/grpc/utils/html2img.js +0 -18
  349. package/server/plugins/grpc/utils/html2pdf.js +0 -23
  350. package/server/plugins/grpc/utils/json2xls.js +0 -13
  351. package/server/plugins/grpc/utils/mergePdf.js +0 -20
  352. package/server/plugins/hook/funcs/addHook.js +0 -8
  353. package/server/plugins/hook/funcs/applyHook.js +0 -25
  354. package/server/plugins/hook/funcs/applyHookSync.js +0 -9
  355. package/server/plugins/hook/hookList.js +0 -1
  356. package/server/plugins/logger/createFileStream.js +0 -88
  357. package/server/plugins/logger/errorMessage.js +0 -25
  358. package/server/plugins/logger/errorStatus.js +0 -19
  359. package/server/plugins/logger/getHooks.js +0 -21
  360. package/server/plugins/logger/getLogger.js +0 -58
  361. package/server/plugins/logger/index.js +0 -33
  362. package/server/plugins/logger/labels.js +0 -11
  363. package/server/plugins/logger/serializers.js +0 -25
  364. package/server/plugins/md/funcs/formatMdoc.js +0 -40
  365. package/server/plugins/metric/index.js +0 -8
  366. package/server/plugins/metric/loggerSystem.js +0 -131
  367. package/server/plugins/metric/systemMetricsFifthly.js +0 -24
  368. package/server/plugins/migration/exec.migrations.js +0 -63
  369. package/server/plugins/migration/exec.sql.js +0 -67
  370. package/server/plugins/pg/funcs/autoIndex.js +0 -103
  371. package/server/plugins/pg/funcs/getMeta.js +0 -49
  372. package/server/plugins/pg/funcs/getPG.js +0 -42
  373. package/server/plugins/pg/funcs/getPGAsync.js +0 -62
  374. package/server/plugins/pg/funcs/init.js +0 -117
  375. package/server/plugins/pg/index.js +0 -54
  376. package/server/plugins/pg/pgClients.js +0 -22
  377. package/server/plugins/policy/funcs/checkPolicy.js +0 -127
  378. package/server/plugins/policy/funcs/checkXSS.js +0 -37
  379. package/server/plugins/policy/index.js +0 -11
  380. package/server/plugins/policy/sqlInjection.js +0 -34
  381. package/server/plugins/policy/xssInjection.js +0 -73
  382. package/server/plugins/redis/funcs/getRedis.js +0 -25
  383. package/server/plugins/redis/index.js +0 -17
  384. package/server/plugins/sqlite/funcs/getSqlite.js +0 -39
  385. package/server/plugins/sqlite/funcs/init.js +0 -53
  386. package/server/plugins/sqlite/index.js +0 -11
  387. package/server/plugins/sqlite/sqliteClients.js +0 -26
  388. package/server/plugins/table/funcs/addMenu.js +0 -16
  389. package/server/plugins/table/funcs/addTemplateDir.js +0 -19
  390. package/server/plugins/table/funcs/customTokens.js +0 -1
  391. package/server/plugins/table/funcs/getData.js +0 -14
  392. package/server/plugins/table/funcs/getFilter.js +0 -14
  393. package/server/plugins/table/funcs/getFilterSQL/index.js +0 -163
  394. package/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +0 -136
  395. package/server/plugins/table/funcs/getFilterSQL/util/getCustomQuery.js +0 -13
  396. package/server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.js +0 -75
  397. package/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +0 -12
  398. package/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +0 -156
  399. package/server/plugins/table/funcs/getFilterSQL/util/getTableSql.js +0 -34
  400. package/server/plugins/table/funcs/getSelect.js +0 -31
  401. package/server/plugins/table/funcs/getSelectMeta.js +0 -74
  402. package/server/plugins/table/funcs/getTemplate.js +0 -88
  403. package/server/plugins/table/funcs/getTemplatePath.js +0 -60
  404. package/server/plugins/table/funcs/getTemplateSync.js +0 -87
  405. package/server/plugins/table/funcs/getTemplates.js +0 -19
  406. package/server/plugins/table/funcs/gisIRColumn.js +0 -82
  407. package/server/plugins/table/funcs/loadTemplate.js +0 -1
  408. package/server/plugins/table/funcs/loadTemplatePath.js +0 -1
  409. package/server/plugins/table/funcs/menuDirs.js +0 -1
  410. package/server/plugins/table/funcs/metaFormat/getSelectVal.js +0 -61
  411. package/server/plugins/table/funcs/metaFormat/index.js +0 -49
  412. package/server/plugins/table/funcs/userTemplateDir.js +0 -1
  413. package/server/plugins/table/funcs/userTokens.js +0 -1
  414. package/server/plugins/table/index.js +0 -13
  415. package/server/plugins/util/funcs/eventStream.js +0 -29
  416. package/server/plugins/util/index.js +0 -7
  417. package/server/routes/access/controllers/access.interface.js +0 -37
  418. package/server/routes/cron/controllers/cronApi.js +0 -22
  419. package/server/routes/cron/index.js +0 -19
  420. package/server/routes/crud/controllers/deleteCrud.js +0 -84
  421. package/server/routes/crud/controllers/insert.js +0 -103
  422. package/server/routes/crud/controllers/table.js +0 -116
  423. package/server/routes/crud/controllers/update.js +0 -108
  424. package/server/routes/crud/index.js +0 -26
  425. package/server/routes/dblist/controllers/readItems.js +0 -28
  426. package/server/routes/dblist/controllers/setItem.js +0 -25
  427. package/server/routes/dblist/index.mjs +0 -19
  428. package/server/routes/dblist/utils/formatData.js +0 -7
  429. package/server/routes/file/controllers/delete.js +0 -108
  430. package/server/routes/file/controllers/download.js +0 -66
  431. package/server/routes/file/controllers/export.js +0 -290
  432. package/server/routes/file/controllers/files.js +0 -72
  433. package/server/routes/file/controllers/resize.js +0 -96
  434. package/server/routes/file/controllers/resizeAll.js +0 -165
  435. package/server/routes/file/controllers/upload.js +0 -55
  436. package/server/routes/file/controllers/uploadImage.js +0 -47
  437. package/server/routes/file/controllers/utils/formatResult.js +0 -17
  438. package/server/routes/file/controllers/utils/jsonToCsv.js +0 -36
  439. package/server/routes/file/controllers/utils/jsonToXls.js +0 -42
  440. package/server/routes/file/index.mjs +0 -26
  441. package/server/routes/file/schema.js +0 -16
  442. package/server/routes/grpc/controllers/file2geojson.js +0 -60
  443. package/server/routes/grpc/controllers/filePreview.js +0 -89
  444. package/server/routes/grpc/index.mjs +0 -12
  445. package/server/routes/logger/controllers/logger.file.js +0 -97
  446. package/server/routes/logger/controllers/logger.test.api.js +0 -48
  447. package/server/routes/logger/controllers/utils/checkUserAccess.js +0 -24
  448. package/server/routes/logger/controllers/utils/getRootDir.js +0 -27
  449. package/server/routes/logger/index.js +0 -22
  450. package/server/routes/menu/controllers/getMenu.js +0 -98
  451. package/server/routes/menu/controllers/interfaces.js +0 -21
  452. package/server/routes/menu/index.mjs +0 -8
  453. package/server/routes/menu/schema.js +0 -0
  454. package/server/routes/properties/controllers/properties.get.js +0 -33
  455. package/server/routes/properties/controllers/properties.post.js +0 -76
  456. package/server/routes/properties/index.js +0 -25
  457. package/server/routes/table/controllers/card.js +0 -77
  458. package/server/routes/table/controllers/cardData.js +0 -155
  459. package/server/routes/table/controllers/cardTabData.js +0 -57
  460. package/server/routes/table/controllers/dataInfo.js +0 -56
  461. package/server/routes/table/controllers/filter.js +0 -154
  462. package/server/routes/table/controllers/form.js +0 -42
  463. package/server/routes/table/controllers/search.js +0 -74
  464. package/server/routes/table/controllers/suggest.js +0 -246
  465. package/server/routes/table/controllers/tableData.js +0 -62
  466. package/server/routes/table/controllers/tableInfo.js +0 -110
  467. package/server/routes/table/controllers/tokenInfo.js +0 -12
  468. package/server/routes/table/controllers/utils/conditions.js +0 -21
  469. package/server/routes/table/controllers/utils/formatSchema.js +0 -23
  470. package/server/routes/table/controllers/utils/locales.js +0 -1
  471. package/server/routes/table/functions/getData.js +0 -436
  472. package/server/routes/table/index.js +0 -57
  473. package/server/routes/table/schema.js +0 -127
  474. package/server/routes/templates/controllers/getTemplate.js +0 -51
  475. package/server/routes/templates/index.mjs +0 -10
  476. package/server/routes/util/controllers/code.generator.js +0 -94
  477. package/server/routes/util/controllers/next.id.js +0 -4
  478. package/server/routes/util/controllers/status.monitor.js +0 -8
  479. package/server/routes/util/controllers/user.tokens.js +0 -45
  480. package/server/routes/util/index.js +0 -14
  481. package/server/routes/widget/controllers/file.edit.js +0 -55
  482. package/server/routes/widget/controllers/widget.del.js +0 -99
  483. package/server/routes/widget/controllers/widget.get.js +0 -156
  484. package/server/routes/widget/controllers/widget.set.js +0 -108
  485. package/server/routes/widget/hook/onWidgetSet.js +0 -13
  486. package/server/routes/widget/index.mjs +0 -38
  487. package/utils.js +0 -112
  488. /package/{server → dist/server}/plugins/grpc/utils/convertp.proto +0 -0
  489. /package/{server → dist/server}/plugins/grpc/utils/office2pdf.proto +0 -0
@@ -1,55 +0,0 @@
1
- import path from 'node:path';
2
-
3
- import { applyHook, pgClients, dataInsert } from '../../../../utils.js';
4
-
5
- import uploadMultiPart from '../../../plugins/file/uploadMultiPart.js';
6
-
7
- export default async function upload(req) {
8
- const { pg = pgClients.client } = req;
9
- const file = await uploadMultiPart(req);
10
-
11
- const objectId = req.params['*'] || 'uploads';
12
- const hookData = await applyHook('preUpload', {
13
- id: req.query?.id, subdir: objectId, token: req.query?.table, file, user: req.user,
14
- });
15
- if (hookData) return hookData;
16
-
17
- const resultInsert = pg ? await dataInsert({
18
- pg,
19
- table: 'crm.files',
20
- data: {
21
- uploaded_name: file.originalFilename?.toLocaleLowerCase?.(),
22
- file_path: file.relativeFilepath?.replace?.(/\\/g, '/'),
23
- ext: file.extension,
24
- size: file.size,
25
- file_status: 1,
26
- entity_id: objectId,
27
- },
28
- uid: req.user?.uid,
29
- }).then(el => el?.rows?.[0] || {}) : {};
30
-
31
- const { dir: relativeDirpath, base: fileName } = resultInsert?.file_path
32
- ? path.parse(resultInsert.file_path)
33
- : {
34
- relativeDirpath: path.dirname(file.relativeFilepath),
35
- fileName: file.newFilename,
36
- };
37
-
38
- // req.log.info('upload', { filepath: file?.filepath, uid: session.passport?.user?.uid });
39
- return {
40
- message: {
41
- res: 'ok',
42
- name: file?.originalFilename,
43
- result: {
44
- file_id: resultInsert?.file_id,
45
- format: resultInsert?.ext || file.extension,
46
- size: resultInsert?.size || file?.size,
47
- entity_id: resultInsert?.entity_id,
48
- file_path: resultInsert?.file_path || file?.relativeFilepath?.replace(/\\/g, '/'),
49
- file_name: file?.originalFilename?.toLocaleLowerCase?.(),
50
- dir: relativeDirpath?.replace?.(/\\/g, '/'),
51
- native_file_name: fileName,
52
- },
53
- },
54
- };
55
- }
@@ -1,47 +0,0 @@
1
- import path from 'node:path';
2
-
3
- import { dataInsert, pgClients } from '../../../../utils.js';
4
-
5
- import uploadMultiPart from '../../../plugins/file/uploadMultiPart.js';
6
-
7
- export default async function uploadImage(req) {
8
- const { pg = pgClients.client } = req;
9
- const { uid = 1 } = req.session?.passport?.user || {};
10
- const file = await uploadMultiPart(req);
11
-
12
- const objectId = req.params['*']; // ID from token?
13
- const extName = path.extname(file.filepath).slice(1).toLowerCase();
14
-
15
- const resultInsert = await dataInsert({
16
- pg,
17
- table: 'crm.files',
18
- data: {
19
- uploaded_name: file?.originalFilename?.toLocaleLowerCase(),
20
- file_path: file?.relativeFilepath?.replace(/\\/g, '/'),
21
- ext: extName,
22
- size: file?.size,
23
- file_status: 1,
24
- entity_id: objectId,
25
- },
26
- uid,
27
- }).then(el => el?.rows?.[0] || {});
28
-
29
- const { dir: relativeDirpath, base: fileName } = resultInsert?.file_path ? path.parse(resultInsert.file_path) : '';
30
-
31
- return {
32
- message: {
33
- res: 'ok',
34
- name: file?.originalFilename,
35
- result: {
36
- file_id: resultInsert.file_id,
37
- format: resultInsert.ext || extName,
38
- size: resultInsert.size || file?.size,
39
- entity_id: resultInsert.entity_id,
40
- file_path: resultInsert.file_path || file?.relativeFilepath?.replace(/\\/g, '/'),
41
- file_name: file?.originalFilename.toLocaleLowerCase(),
42
- dir: relativeDirpath?.replace(/\\/g, '/'),
43
- native_file_name: fileName,
44
- },
45
- },
46
- };
47
- }
@@ -1,17 +0,0 @@
1
- import path from 'node:path';
2
- import { readFileSync } from 'node:fs';
3
-
4
- export default function formatResult({
5
- filePath, formatAnswer, folder, reply,
6
- }) {
7
- if (formatAnswer === 'file') {
8
- const encoding = path.extname(filePath) === '.xlsx' ? 'base64' : 'utf8';
9
- const data = readFileSync(filePath, encoding);
10
- return reply.headers({ 'Content-Disposition': `attachment; filename=${path.basename(filePath)}` }).send(Buffer.from(data, encoding));
11
- }
12
-
13
- return {
14
- filePath: filePath.replace(/\\/g, '/')?.replace(folder, ''),
15
- status: 200,
16
- };
17
- }
@@ -1,36 +0,0 @@
1
- import path from 'node:path';
2
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
3
-
4
- export default async function convertJSONToCSV({
5
- filePath, send = () => { }, delimiter = ';', colmodel = [], columnList = [],
6
- }) {
7
- const titles = colmodel.filter(el => columnList.includes(el.name)).reduce((acc, curr) => Object.assign(acc, { [curr.name]: curr.title || curr.ua }), {});
8
- const rows = JSON.parse(await readFile(filePath) || '{}');
9
-
10
- const orderedRows = rows.reduce((acc, curr) => {
11
- const row = colmodel.filter(el => columnList.includes(el.name)).map(el => curr[el.name]);
12
- acc.push(row);
13
- return acc;
14
- }, []);
15
-
16
- const values = orderedRows.map((row) => Object.values(row).map((el) => {
17
- if (Array.isArray(el) && el?.[0] && typeof el?.[0] === 'object') {
18
- return `${JSON.stringify(el)};`;
19
- }
20
- if (Array.isArray(el) && el.length && typeof el?.[0] !== 'object') {
21
- return `${el.join(',')};`;
22
- }
23
- if (typeof el === 'object') {
24
- return Object.keys(el || {}).length ? `${JSON.stringify(el)};` : ';';
25
- }
26
- return `${el || ''};`;
27
- }));
28
- values.unshift(colmodel.filter(el => columnList.includes(el.name)).map((el) => `${titles[el.name] || el.name};`));
29
-
30
- send('Конвертація успішно завершена. Формування файлу...');
31
- await mkdir(path.dirname(filePath), { recursive: true });
32
- await writeFile(filePath.replace('.json', '.csv'), `\ufeff${values.join('\n').replace(/;,/g, delimiter).replace(/null/g, '').replace(/undefined/g, '')}`, 'utf8');
33
- // send('Файл успішно сформовано. Оновіть сторінку або натисніть кнопку ще раз для завантаження. ', 1);
34
- // return { message: 'Файл успішно сформовано. Натистіть кнопку ще раз для завантаження даних', status: 200 };
35
- return null;
36
- }
@@ -1,42 +0,0 @@
1
- import path from 'node:path';
2
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
3
-
4
- import logger from '../../../../plugins/logger/getLogger.js';
5
- import grpc from '../../../../plugins/grpc/grpc.js';
6
-
7
- const { jsonToXls } = grpc();
8
-
9
- export default async function convertJSONToXls({
10
- filePath, send = () => { }, colmodel, domain, source, resp = {},
11
- }) {
12
- const rows = JSON.parse(await readFile(filePath) || '[]');
13
- send('Конвертація файлу...');
14
- try {
15
- // const titles = colmodel.reduce((acc, curr) => Object.assign(acc, { [curr.name]: curr.title || curr.ua }), {});
16
- // rows.unshift(titles);
17
- const { result } = await jsonToXls({
18
- json: JSON.stringify(rows),
19
- header: source,
20
- subheader: `Завантажено з порталу ${domain} - ${new Date().toLocaleDateString()}. Всього: ${rows.length}`,
21
- colmodel: JSON.stringify(colmodel),
22
- });
23
- send('Конвертація успішно завершена. Формування файлу...');
24
- await mkdir(path.dirname(filePath), { recursive: true });
25
- await writeFile(filePath.replace('.json', '.xlsx'), result, 'base64');
26
- // send('Файл успішно сформовано. Оновіть сторінку або натисніть кнопку ще раз для завантаження. ', 1);
27
- // return { message: 'Файл успішно сформовано. Натистіть кнопку ще раз для завантаження даних', status: 200 };
28
- return null;
29
- }
30
- catch (err) {
31
- send(`jsonToXLS err: ${err.toString()}`, 1);
32
- logger.file('export/table/error', {
33
- filePath,
34
- colmodel,
35
- domain,
36
- rows: rows.length,
37
- error: err.toString(),
38
- });
39
- Object.assign(resp, { error: err.toString(), status: 500 });
40
- return null;
41
- }
42
- }
@@ -1,26 +0,0 @@
1
- import fp from 'fastify-plugin';
2
-
3
- import files from './controllers/files.js';
4
- import resize from './controllers/resize.js';
5
- import resizeAll from './controllers/resizeAll.js';
6
- import upload from './controllers/upload.js';
7
- import download from './controllers/download.js';
8
- import exportTable from './controllers/export.js';
9
- import uploadImage from './controllers/uploadImage.js';
10
- import deleteFileAPI from './controllers/delete.js';
11
-
12
- import { resizeSchema } from './schema.js';
13
-
14
- async function plugin(app, config = {}) {
15
- const { prefix = '/api' } = config;
16
- app.get('/files/*', { config: { policy: ['public'] } }, files);
17
- app.get('/file/resize', { config: { policy: ['public'] }, schema: resizeSchema }, resize);
18
- app.get('/api/resize-all', { config: { policy: ['admin', 'site'] }, schema: resizeSchema }, resizeAll);
19
- app.post('/file/upload/*', { config: { policy: ['public'] } }, upload);
20
- app.post('/file/upload-image/*', { config: { policy: ['public'] } }, uploadImage);
21
- app.get('/file/download/*', { config: { policy: ['public'] } }, download);
22
- app.get('/file/delete/*', { config: { policy: ['public'] } }, deleteFileAPI);
23
- app.get(`${prefix}/export`, { config: { policy: ['public'] } }, exportTable);
24
- }
25
-
26
- export default fp(plugin);
@@ -1,16 +0,0 @@
1
- const resizeSchema = {
2
- type: 'object',
3
- properties: {
4
- querystring: {
5
- filepath: { type: 'string' },
6
- quality: { type: 'number', exclusiveMinimum: 0, maximum: 100 },
7
- size: { type: 'string', pattern: '^((\\d{1,4})x(\\d{1,4})|(\\d{1,4})x|x(\\d{1,4}))$' },
8
- w: { type: 'number', minimum: 1, maximum: 2048 },
9
- h: { type: 'number', minimum: 1, maximum: 2048 },
10
- },
11
- },
12
- };
13
-
14
- export default null;
15
-
16
- export { resizeSchema };
@@ -1,60 +0,0 @@
1
- import path from 'node:path';
2
-
3
- import { config, logger, pgClients } from '../../../../utils.js';
4
-
5
- import file2json from '../../../plugins/grpc/file2json.js';
6
-
7
- export default async function file2geojson({ pg = pgClients.client, body = {} }, reply) {
8
- const { file, srid, debug } = body;
9
-
10
- if (!file || !srid) {
11
- return reply.status(400).send('params file and srid are required');
12
- }
13
-
14
- const ext = path.extname(file);
15
-
16
- if (!(['.zip', '.gdb', '.gpkg', '.geojson'].includes(ext))) {
17
- return reply.status(400).send('Невірний формат файлів');
18
- }
19
-
20
- const filepath = path.join(config.folder || '', file);
21
-
22
- try {
23
- const JsonData = await file2json({ filepath, debug });
24
-
25
- if (debug) return JsonData;
26
-
27
- // if (JsonData?.features?.length > 1) return { error: 'too many features', status: 400 };
28
- if (!JsonData?.features?.length && JsonData?.type?.toLowerCase() !== 'feature') {
29
- return reply.status(400).send('invalid file content');
30
- }
31
-
32
- const JsonArr = JsonData?.features ? JsonData : { type: 'FeatureCollection', features: [JsonData] };
33
-
34
- const { rows = [] } = await pg.query(`
35
- select
36
- features->>'type' as type,
37
- features->'properties' as properties,
38
- st_asgeojson(st_transform(st_setsrid(st_geomfromgeojson(features->>'geometry'),$2),4326))::json as geometry
39
- from (
40
- select d->>'type' as type,d->>'name' as name,json_array_elements(d->'features') as features
41
- from (
42
- select json_array_elements(case when json_typeof(d)='array' then d else json_build_array(d) end)d
43
- from (
44
- select ($1)::json as d
45
- )q
46
- )q
47
- )q`, [JSON.stringify(JsonArr).replace(/'/g, '\'\''), srid]);
48
-
49
- return reply.status(200).send([{ features: [rows.slice(0, 1)] }]);
50
- }
51
- catch (err) {
52
- if (err?.detail?.includes('Infinity')) {
53
- return { error: 'invalid geometry. Check input SRID', status: 400 };
54
- }
55
- logger.file('grpc/file2json', {
56
- error: err.toString(), stack: err.stack, file, srid,
57
- });
58
- return reply.status(500).send(err.toString());
59
- }
60
- }
@@ -1,89 +0,0 @@
1
- import path from 'node:path';
2
-
3
- import officeWrapper from '../../../plugins/grpc/office2pdf.js';
4
-
5
- import {
6
- downloadFile, isFileExists, uploadFile, logger, pgClients,
7
- } from '../../../../utils.js';
8
-
9
- const { officeToPdf } = officeWrapper();
10
-
11
- const mimeTypes = {
12
- png: 'image/png',
13
- jpg: 'image/jpeg',
14
- jpeg: 'image/jpeg',
15
- gif: 'image/gif',
16
- webp: 'image/webp',
17
- bmp: 'image/bmp',
18
- svg: 'image/svg+xml',
19
- tiff: 'image/tiff',
20
- pdf: 'application/pdf',
21
- };
22
-
23
- export default async function filePreview({ pg = pgClients.client, query = {} }, reply) {
24
- const { id, nocache } = query;
25
-
26
- if (!id) {
27
- return reply.status(400).send('not enough params: id');
28
- }
29
-
30
- const filePath = await pg.query('select file_path from crm.files where file_id = $1', [id.replace(/.pdf/, '')])
31
- .then((el) => el.rows?.[0]?.file_path);
32
-
33
- if (!filePath) {
34
- logger.file('/file-preview', { error: 'File with provided id does not found', id });
35
- return reply.status(404).send('File not found');
36
- }
37
-
38
- const { base, ext } = path.parse(filePath);
39
- const fileExt = ext.substring(1).toLowerCase();
40
-
41
- const filePathPreview = filePath.replace('files/', 'files/preview/');
42
-
43
- const previewExists = await isFileExists(filePathPreview);
44
-
45
- if (previewExists && !nocache) {
46
- const buffer = await downloadFile(filePathPreview, { buffer: true });
47
- return reply
48
- .status(200)
49
- .headers({
50
- 'Content-Type': 'application/pdf',
51
- 'Content-Disposition': `inline; filename="${base}.pdf"`,
52
- })
53
- .send(buffer);
54
- }
55
-
56
- const fileData = await downloadFile(filePath, { buffer: true });
57
-
58
- if (!fileData) {
59
- logger.file('/file-preview', { error: 'File with provided id does not found', id, filePath });
60
- return reply.status(404).send('File not found');
61
- }
62
-
63
- if (!mimeTypes[fileExt] && !['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'csv'].includes(fileExt)) {
64
- logger.file('/file-preview', { error: 'Unsupported file type', id, filePath });
65
- return reply.status(415).send('Unsupported file type');
66
- }
67
-
68
- if (!['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'csv'].includes(fileExt)) {
69
- return reply
70
- .status(200)
71
- .headers({
72
- 'Content-Type': mimeTypes[fileExt] || 'application/octet-stream',
73
- 'Content-Disposition': `inline; filename="${base}"`,
74
- })
75
- .send(Buffer.from(fileData, 'base64'));
76
- }
77
-
78
- const { file } = await officeToPdf({ file: Buffer.from(fileData).toString('base64'), ext: fileExt });
79
- const buffer = Buffer.from(file, 'base64');
80
- await uploadFile(filePathPreview, buffer);
81
-
82
- return reply
83
- .status(200)
84
- .headers({
85
- 'Content-Type': 'application/pdf',
86
- 'Content-Disposition': `inline; filename="${base}.pdf"`,
87
- })
88
- .send(buffer);
89
- }
@@ -1,12 +0,0 @@
1
- import fp from 'fastify-plugin';
2
-
3
- import file2geojson from './controllers/file2geojson.js';
4
- import filePreview from './controllers/filePreview.js';
5
-
6
- async function plugin(app, opts) {
7
- const { prefix = '/api' } = opts || {};
8
- app.post(`${prefix}/file2geojson`, { config: { policy: ['public'] } }, file2geojson);
9
- app.get(`${prefix}/file-preview`, { config: { policy: ['public'] } }, filePreview);
10
- }
11
-
12
- export default fp(plugin);
@@ -1,97 +0,0 @@
1
- import path from 'node:path';
2
- import { lstat, readdir, readFile } from 'node:fs/promises';
3
- import { createReadStream, existsSync } from 'node:fs';
4
- import readline from 'node:readline';
5
-
6
- import checkUserAccess from './utils/checkUserAccess.js';
7
- import getRootDir from './utils/getRootDir.js';
8
-
9
- const limit = 200000;
10
- const rootDir = getRootDir();
11
-
12
- /**
13
- *
14
- * @method GET
15
- * @summary API для перегляду логів
16
- *
17
- */
18
-
19
- export default async function loggerFile(req, reply) {
20
- const {
21
- params = {}, user = {}, query = {}, originalUrl,
22
- } = req;
23
-
24
- const access = checkUserAccess({ user, token: query.token });
25
-
26
- if (access?.status !== 200) return reply.status(access.status).send(access.message);
27
-
28
- // absolute / relative path
29
-
30
- const filepath = path.join(rootDir, params['*'] || '');
31
-
32
- if (!existsSync(filepath)) {
33
- return reply.status(404).send('file not exists');
34
- }
35
-
36
- const stat = await lstat(filepath);
37
- const isFile = stat.isFile();
38
-
39
- if (query.download && isFile) {
40
- const buffer = await readFile(filepath, { buffer: true });
41
- return buffer;
42
- }
43
-
44
- if (query.full && isFile) {
45
- if (stat.size > 20 * 1000 * 1000) {
46
- return { message: 'file size > 20MB' };
47
- }
48
- const buffer = await readFile(filepath, { buffer: true });
49
- return buffer;
50
- }
51
-
52
- if (isFile) {
53
- const ext = path.extname(filepath);
54
-
55
- const lines = await new Promise((resolve) => {
56
- const rl = readline.createInterface({
57
- input: createReadStream(filepath, { start: stat.size > limit ? stat.size - limit : 0 }),
58
- });
59
- const lines1 = [];
60
- rl.on('close', () => resolve(lines1));
61
- rl.on('line', (line) => lines1.push(line));
62
- });
63
-
64
- if (ext === '.html') {
65
- const buffer = await readFile(filepath, { buffer: true });
66
- reply.headers({ 'Content-type': 'text/html; charset=UTF-8' });
67
- return buffer;
68
- }
69
-
70
- reply.headers({ 'Content-type': 'text/plain; charset=UTF-8' });
71
- return stat.size > limit && lines.length > 1
72
- ? lines.reverse().slice(0, -1).join('\n')
73
- : lines.reverse().join('\n');
74
- }
75
-
76
- // dir
77
- const files = await readdir(filepath);
78
-
79
- if (query.dir) {
80
- return files.filter((el) => !['backup', 'marker_icon', 'error', 'migration'].includes(el));
81
- }
82
-
83
- const lstatsArr = await Promise.all(files.map(async (file) => [file, await lstat(path.join(filepath, file))]));
84
- const lstats = Object.fromEntries(lstatsArr);
85
-
86
- const relpaceable = query.token ? `?token=${query.token}` : '';
87
- const relpath = query.token ? originalUrl.replace(relpaceable, '') : originalUrl;
88
- const message = (params['*'] ? '<a href="/logger-file/">...</a><br>' : '')
89
- + files.map((file) => `<a href="${relpath}/${file}${relpaceable}">${file}</a> (${lstats[file].size} bytes)`).join('</br>');
90
-
91
- reply.headers({
92
- 'Content-Type': 'text/html; charset=UTF-8',
93
- 'Content-Security-Policy': "default-src 'none'",
94
- 'X-Content-Type-Options': 'nosniff',
95
- });
96
- return message;
97
- }
@@ -1,48 +0,0 @@
1
- /* eslint-disable no-unreachable */
2
- import { rename } from 'fs/promises';
3
-
4
- export default async function testLog(request) {
5
- // error handler
6
- if (request.query?.rejection) {
7
- rename('/data/local/test', '/data/local/test.txt');
8
- }
9
- if (request.query?.awaitRejection) {
10
- await rename('/data/local/test', '/data/local/test.txt');
11
- }
12
-
13
- // default pino log
14
- // request.log.info({ name: 'custom', test: 'param name and object log - info', status: 200 });
15
- /* request.log.info('string info log');
16
- //request.log.warn({ name: 'custom', test: 'param name and object log - warn', status: 400 });
17
- request.log.warn('string warn log');
18
- //request.log.debug({ name: 'custom', test: 'param name and object log - debug', status: 200 });
19
- request.log.debug('string debug log');
20
- //request.log.error({ name: 'custom', test: 'param name and object log - error', status: 200 });
21
- //request.log.error('string error log');
22
- request.log.fatal({ name: 'custom', test: 'param name and object log - fatal', status: 200 });
23
- //request.log.fatal('string fatal log'); */
24
- // custom params
25
-
26
- // request.log.info(request, { file: 'test', msg: 'string debug log' });
27
- // request.log.info({ file: 'test', msg: 'string debug log1' }, request);
28
-
29
- // request.log.file('test1', 'my message', request);
30
- throw new Error('444');
31
- request.log.info({ data: 111, msg: 'string debug log1' }, request);
32
- request.log.info('string debug log1', request);
33
- request.log.info('string debug log1');
34
- request.log.info({ data: 111, msg: 'string debug log1' });
35
- request.log.error(new Error('222'), request);
36
- /* request.log.error('policy and string log1');
37
- request.log.error({ test: 'policy and string log1' });
38
- request.log.error(request, { test: 'string name and object log', status: 502 });
39
- request.log.error(request, 'policy and string log1'); */
40
-
41
- // request.log.error(request, { test: 'policy and object error log', status: 500 });
42
- // request.log.error(request, 'policy and string log2');
43
-
44
- /// throw new Error('222');
45
- // d / 0;
46
- // throw new Error('unhandled exception');
47
- return { root: true };
48
- }
@@ -1,24 +0,0 @@
1
- import config from '../../../../../config.js';
2
-
3
- const { accessToken = '0NWcGQxKRP8AsRxD' } = config.auth || {};
4
-
5
- /**
6
- *
7
- * @summary check user access to logger interface - per admin user type or user group
8
- * @returns {Object} message, status
9
- */
10
-
11
- export default function checkUserAccess({ user = {}, token }) {
12
- if (token && token === accessToken) {
13
- return { message: 'access granted', status: 200 };
14
- }
15
- // console.log(user);
16
- if (!user.user_type?.includes?.('admin') && !config?.local && !config.auth?.disable) {
17
- return { message: 'access restricted', status: 403 };
18
- }
19
-
20
- /* if (!['admin', 'superadmin']?.includes(user.user_type) && count === '0') {
21
- return { message: 'access restricted', status: 403 };
22
- } */
23
- return { message: 'access granted', status: 200 };
24
- }
@@ -1,27 +0,0 @@
1
- /* eslint-disable no-console */
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
-
5
- import config from '../../../../../config.js';
6
-
7
- // import { existsSync } from 'fs';
8
- let logDir = null;
9
- export default function getRootDir() {
10
- // absolute / relative path
11
- if (logDir) return logDir;
12
- const file = ['config.json', '/data/local/config.json'].find(el => (fs.existsSync(el) ? el : null));
13
- const root = file === 'config.json' ? process.cwd() : '/data/local';
14
- logDir = config.logDir || path.join(root, config.log?.dir || 'log');
15
- console.log({ logDir });
16
- return logDir;
17
-
18
- // windows debug support
19
- /* const customLogDir = process.cwd().includes(':') ? 'c:/data/local' : '/data/local';
20
- // docker default path
21
- if (existsSync(customLogDir)) {
22
- return path.join(customLogDir, config.folder || '', 'log');
23
- }
24
-
25
- // non-docker default path
26
- return path.join(config.root || '/data/local', config.folder || '', 'log'); */
27
- }
@@ -1,22 +0,0 @@
1
- import loggerFile from './controllers/logger.file.js';
2
-
3
- // import loggerTest from './controllers/logger.test.api.js';
4
-
5
- const loggerSchema = {
6
- querystring: {
7
- type: 'object',
8
- properties: {
9
- download: { type: 'string', pattern: '^(\\d)$' },
10
- full: { type: 'string', pattern: '^(\\d)$' },
11
- dir: { type: 'string', pattern: '^(\\d)$' },
12
- token: { type: 'string' },
13
- },
14
- additionalProperties: false,
15
- },
16
- };
17
-
18
- async function plugin(app) {
19
- app.get('/logger-file/*', { config: { policy: ['public'], rateLimit: false }, schema: loggerSchema }, loggerFile);
20
- }
21
-
22
- export default plugin;