@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.
- package/dist/config.js +33 -0
- package/dist/dblist.js +5 -0
- package/dist/index.js +170 -0
- package/dist/redactionList.js +6 -0
- package/dist/server/helpers/core/badge.js +16 -0
- package/dist/server/helpers/core/buttonFilePreview.js +12 -0
- package/dist/server/helpers/core/buttonHelper.js +20 -0
- package/{server → dist/server}/helpers/core/token.js +16 -18
- package/dist/server/helpers/format/formatAuto.js +14 -0
- package/dist/server/helpers/format/formatDate.js +231 -0
- package/{server → dist/server}/helpers/format/formatDigit.js +21 -21
- package/dist/server/helpers/format/formatNum.js +331 -0
- package/{server → dist/server}/helpers/format/formatNumber.js +50 -55
- package/dist/server/helpers/format/formatRelative.js +180 -0
- package/{server → dist/server}/helpers/format/formatUnit.js +41 -40
- package/{server → dist/server}/helpers/format/num_format.js +40 -44
- package/{server → dist/server}/helpers/format/set.js +26 -27
- package/{server → dist/server}/helpers/funcs/_math.js +49 -50
- package/{server → dist/server}/helpers/funcs/contentList.js +52 -57
- package/{server → dist/server}/helpers/funcs/empty.js +21 -21
- package/dist/server/helpers/funcs/ifCond.js +109 -0
- package/dist/server/helpers/funcs/ifCondAnd.js +109 -0
- package/dist/server/helpers/funcs/ifCondOr.js +110 -0
- package/{server → dist/server}/helpers/funcs/inc.js +19 -20
- package/{server → dist/server}/helpers/funcs/json.js +3 -3
- package/dist/server/helpers/funcs/qrcode.js +65 -0
- package/{server → dist/server}/helpers/funcs/round.js +27 -29
- package/dist/server/helpers/funcs/select.js +39 -0
- package/dist/server/helpers/index.js +125 -0
- package/dist/server/helpers/list/buttonHelper.js +20 -0
- package/{server → dist/server}/helpers/list/descriptionList.js +39 -45
- package/dist/server/helpers/list/tableList.js +104 -0
- package/{server → dist/server}/helpers/list/utils/button.js +3 -3
- package/{server → dist/server}/helpers/list/utils/buttonDel.js +8 -9
- package/{server → dist/server}/helpers/list/utils/buttonEdit.js +8 -9
- package/{server → dist/server}/helpers/string/coalesce.js +33 -39
- package/{server → dist/server}/helpers/string/concat.js +25 -28
- package/{server → dist/server}/helpers/string/split.js +19 -20
- package/{server → dist/server}/helpers/string/str_replace.js +57 -62
- package/{server → dist/server}/helpers/string/substr.js +28 -32
- package/{server → dist/server}/helpers/string/translit.js +20 -23
- package/dist/server/helpers/string/utils/alphabet.js +76 -0
- package/{server → dist/server}/helpers/utils/button.js +3 -3
- package/{server → dist/server}/helpers/utils/buttonAdd.js +4 -4
- package/{server → dist/server}/helpers/utils/buttonDel.js +11 -15
- package/{server → dist/server}/helpers/utils/buttonDownload.js +3 -3
- package/dist/server/helpers/utils/buttonEdit.js +14 -0
- package/{server → dist/server}/helpers/utils/buttonPreview.js +3 -3
- package/{server → dist/server}/helpers/utils/mdToHTML.js +16 -17
- package/{server → dist/server}/helpers/utils/paddingNumber.js +5 -5
- package/dist/server/plugins/access/funcs/getAdminAccess.js +11 -0
- package/dist/server/plugins/cron/cronList.js +2 -0
- package/dist/server/plugins/cron/funcs/addCron.js +41 -0
- package/{server → dist/server}/plugins/cron/funcs/interval2ms.js +36 -40
- package/dist/server/plugins/cron/funcs/runCron.js +20 -0
- package/{server → dist/server}/plugins/cron/funcs/verifyUnique.js +19 -23
- package/dist/server/plugins/cron/index.js +75 -0
- package/dist/server/plugins/crud/funcs/dataDelete.js +87 -0
- package/dist/server/plugins/crud/funcs/dataInsert.js +134 -0
- package/dist/server/plugins/crud/funcs/dataUpdate.js +198 -0
- package/dist/server/plugins/crud/funcs/getAccess.js +82 -0
- package/dist/server/plugins/crud/funcs/getOpt.js +13 -0
- package/dist/server/plugins/crud/funcs/getToken.js +24 -0
- package/dist/server/plugins/crud/funcs/isFileExists.js +11 -0
- package/dist/server/plugins/crud/funcs/setOpt.js +19 -0
- package/dist/server/plugins/crud/funcs/setToken.js +41 -0
- package/dist/server/plugins/crud/funcs/utils/getFolder.js +13 -0
- package/dist/server/plugins/crud/funcs/utils/getInsertQuery.js +54 -0
- package/dist/server/plugins/crud/funcs/utils/logChanges.js +144 -0
- package/{server → dist/server}/plugins/crud/funcs/validateData.js +91 -83
- package/dist/server/plugins/extra/extraData.js +81 -0
- package/dist/server/plugins/extra/extraDataGet.js +52 -0
- package/dist/server/plugins/file/downloadFile.js +15 -0
- package/{server → dist/server}/plugins/file/getExport.js +18 -38
- package/dist/server/plugins/file/isFileExists.js +13 -0
- package/dist/server/plugins/file/providers/fs.js +86 -0
- package/dist/server/plugins/file/providers/index.js +28 -0
- package/dist/server/plugins/file/providers/mime/index.js +7 -0
- package/dist/server/plugins/file/providers/mime/mimes.js +1179 -0
- package/dist/server/plugins/file/providers/s3/client.js +26 -0
- package/dist/server/plugins/file/providers/s3/funcs/downloadFile.js +42 -0
- package/dist/server/plugins/file/providers/s3/funcs/fileExists.js +24 -0
- package/dist/server/plugins/file/providers/s3/funcs/uploadFile.js +35 -0
- package/dist/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +18 -0
- package/{server → dist/server}/plugins/file/providers/s3/index.js +11 -12
- package/dist/server/plugins/file/providers/utils/getDataSize.js +19 -0
- package/dist/server/plugins/file/providers/utils/getValidData.js +30 -0
- package/dist/server/plugins/file/providers/utils/handlers/dataTypes.js +7 -0
- package/dist/server/plugins/file/providers/utils/handlers/index.js +50 -0
- package/dist/server/plugins/file/providers/utils/handlers/sizeHandlers.js +9 -0
- package/dist/server/plugins/file/providers/utils/streamToBuffer.js +7 -0
- package/{server → dist/server}/plugins/file/providers/utils/typeguards/isArray.js +2 -3
- package/{server → dist/server}/plugins/file/providers/utils/typeguards/isBuffer.js +2 -3
- package/dist/server/plugins/file/providers/utils/typeguards/isPath.js +3 -0
- package/dist/server/plugins/file/providers/utils/typeguards/isReadableStream.js +7 -0
- package/{server → dist/server}/plugins/file/providers/utils/typeguards/isText.js +2 -3
- package/dist/server/plugins/file/uploadFile.js +14 -0
- package/dist/server/plugins/file/uploadMultiPart.js +101 -0
- package/dist/server/plugins/file/utils/allowedExtensions.js +60 -0
- package/{server → dist/server}/plugins/file/utils/getFileType.js +12 -10
- package/dist/server/plugins/file/utils/getPath.js +30 -0
- package/dist/server/plugins/file/utils/isFileExists.js +15 -0
- package/dist/server/plugins/grpc/file2json.js +50 -0
- package/dist/server/plugins/grpc/grpc.js +103 -0
- package/dist/server/plugins/grpc/office2pdf.js +78 -0
- package/dist/server/plugins/grpc/utils/csv2xls.js +6 -0
- package/dist/server/plugins/grpc/utils/excel2Json.js +10 -0
- package/dist/server/plugins/grpc/utils/html2doc.js +17 -0
- package/dist/server/plugins/grpc/utils/html2img.js +17 -0
- package/dist/server/plugins/grpc/utils/html2pdf.js +19 -0
- package/{server → dist/server}/plugins/grpc/utils/htmlTemplate.js +3 -4
- package/dist/server/plugins/grpc/utils/json2xls.js +11 -0
- package/dist/server/plugins/grpc/utils/mergePdf.js +18 -0
- package/dist/server/plugins/hook/funcs/addHook.js +7 -0
- package/dist/server/plugins/hook/funcs/applyHook.js +25 -0
- package/dist/server/plugins/hook/funcs/applyHookSync.js +7 -0
- package/dist/server/plugins/hook/hookList.js +2 -0
- package/{server → dist/server}/plugins/hook/index.js +7 -8
- package/dist/server/plugins/logger/createFileStream.js +79 -0
- package/dist/server/plugins/logger/errorMessage.js +24 -0
- package/dist/server/plugins/logger/errorStatus.js +17 -0
- package/dist/server/plugins/logger/getHooks.js +17 -0
- package/dist/server/plugins/logger/getLogger.js +52 -0
- package/dist/server/plugins/logger/index.js +37 -0
- package/dist/server/plugins/logger/labels.js +10 -0
- package/dist/server/plugins/logger/serializers.js +22 -0
- package/{server → dist/server}/plugins/logger/timestampWithTimeZone.js +5 -5
- package/dist/server/plugins/md/funcs/formatMdoc.js +45 -0
- package/{server → dist/server}/plugins/md/funcs/mdToHTML.js +16 -17
- package/dist/server/plugins/metric/index.js +6 -0
- package/dist/server/plugins/metric/loggerSystem.js +127 -0
- package/dist/server/plugins/metric/systemMetricsFifthly.js +20 -0
- package/dist/server/plugins/migration/exec.migrations.js +59 -0
- package/dist/server/plugins/migration/exec.sql.js +61 -0
- package/{server → dist/server}/plugins/migration/index.js +5 -7
- package/dist/server/plugins/pg/funcs/autoIndex.js +102 -0
- package/{server → dist/server}/plugins/pg/funcs/getDBParams.js +16 -15
- package/dist/server/plugins/pg/funcs/getMeta.js +48 -0
- package/dist/server/plugins/pg/funcs/getPG.js +39 -0
- package/dist/server/plugins/pg/funcs/getPGAsync.js +45 -0
- package/dist/server/plugins/pg/funcs/init.js +157 -0
- package/dist/server/plugins/pg/index.js +47 -0
- package/dist/server/plugins/pg/pgClients.js +20 -0
- package/dist/server/plugins/policy/funcs/checkPolicy.js +173 -0
- package/dist/server/plugins/policy/funcs/checkXSS.js +44 -0
- package/dist/server/plugins/policy/index.js +11 -0
- package/dist/server/plugins/policy/sqlInjection.js +33 -0
- package/dist/server/plugins/policy/xssInjection.js +72 -0
- package/{server → dist/server}/plugins/redis/client.js +6 -8
- package/dist/server/plugins/redis/funcs/getRedis.js +23 -0
- package/{server → dist/server}/plugins/redis/funcs/redisClients.js +2 -3
- package/dist/server/plugins/redis/index.js +8 -0
- package/dist/server/plugins/sqlite/funcs/getSqlite.js +27 -0
- package/dist/server/plugins/sqlite/funcs/init.js +45 -0
- package/dist/server/plugins/sqlite/index.js +8 -0
- package/dist/server/plugins/sqlite/sqliteClients.js +24 -0
- package/dist/server/plugins/table/funcs/addMenu.js +12 -0
- package/dist/server/plugins/table/funcs/addTemplateDir.js +16 -0
- package/dist/server/plugins/table/funcs/customTokens.js +2 -0
- package/dist/server/plugins/table/funcs/getData.js +25 -0
- package/dist/server/plugins/table/funcs/getFilter.js +18 -0
- package/dist/server/plugins/table/funcs/getFilterSQL/index.js +201 -0
- package/dist/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +131 -0
- package/dist/server/plugins/table/funcs/getFilterSQL/util/getCustomQuery.js +11 -0
- package/dist/server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.js +84 -0
- package/dist/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +11 -0
- package/dist/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +161 -0
- package/dist/server/plugins/table/funcs/getFilterSQL/util/getTableSql.js +40 -0
- package/dist/server/plugins/table/funcs/getSelect.js +37 -0
- package/dist/server/plugins/table/funcs/getSelectMeta.js +77 -0
- package/dist/server/plugins/table/funcs/getTemplate.js +86 -0
- package/dist/server/plugins/table/funcs/getTemplatePath.js +60 -0
- package/dist/server/plugins/table/funcs/getTemplateSync.js +84 -0
- package/dist/server/plugins/table/funcs/getTemplates.js +15 -0
- package/dist/server/plugins/table/funcs/gisIRColumn.js +81 -0
- package/dist/server/plugins/table/funcs/loadTemplate.js +2 -0
- package/dist/server/plugins/table/funcs/loadTemplatePath.js +2 -0
- package/dist/server/plugins/table/funcs/menuDirs.js +2 -0
- package/dist/server/plugins/table/funcs/metaFormat/getSelectVal.js +75 -0
- package/dist/server/plugins/table/funcs/metaFormat/index.js +64 -0
- package/dist/server/plugins/table/funcs/userTemplateDir.js +2 -0
- package/dist/server/plugins/table/funcs/userTokens.js +2 -0
- package/dist/server/plugins/util/funcs/eventStream.js +28 -0
- package/{server → dist/server}/plugins/util/funcs/flattenObject.js +14 -12
- package/{server → dist/server}/plugins/util/funcs/unflattenObject.js +48 -46
- package/{server → dist/server}/plugins/yml/funcs/json2yml.js +3 -5
- package/{server → dist/server}/plugins/yml/funcs/yml2json.js +11 -14
- package/{server → dist/server}/routes/access/controllers/access.group.js +17 -23
- package/{server → dist/server}/routes/access/controllers/access.group.post.js +46 -53
- package/dist/server/routes/access/controllers/access.interface.js +36 -0
- package/{server/routes/access/index.mjs → dist/server/routes/access/index.js} +10 -12
- package/{server/routes/access/schema.mjs → dist/server/routes/access/schema.js} +65 -68
- package/dist/server/routes/cron/controllers/cronApi.js +16 -0
- package/dist/server/routes/cron/index.js +15 -0
- package/dist/server/routes/crud/controllers/deleteCrud.js +90 -0
- package/dist/server/routes/crud/controllers/insert.js +110 -0
- package/dist/server/routes/crud/controllers/table.js +144 -0
- package/dist/server/routes/crud/controllers/update.js +113 -0
- package/dist/server/routes/crud/index.js +22 -0
- package/dist/server/routes/dblist/controllers/readItems.js +25 -0
- package/dist/server/routes/dblist/controllers/setItem.js +20 -0
- package/dist/server/routes/dblist/index.js +17 -0
- package/dist/server/routes/dblist/utils/formatData.js +8 -0
- package/dist/server/routes/file/controllers/delete.js +99 -0
- package/dist/server/routes/file/controllers/download.js +56 -0
- package/dist/server/routes/file/controllers/export.js +294 -0
- package/dist/server/routes/file/controllers/files.js +57 -0
- package/dist/server/routes/file/controllers/resize.js +86 -0
- package/dist/server/routes/file/controllers/resizeAll.js +140 -0
- package/dist/server/routes/file/controllers/upload.js +56 -0
- package/dist/server/routes/file/controllers/uploadImage.js +45 -0
- package/dist/server/routes/file/controllers/utils/formatResult.js +13 -0
- package/dist/server/routes/file/controllers/utils/jsonToCsv.js +40 -0
- package/dist/server/routes/file/controllers/utils/jsonToXls.js +37 -0
- package/dist/server/routes/file/index.js +22 -0
- package/dist/server/routes/file/schema.js +14 -0
- package/dist/server/routes/grpc/controllers/file2geojson.js +54 -0
- package/dist/server/routes/grpc/controllers/filePreview.js +87 -0
- package/dist/server/routes/grpc/index.js +9 -0
- package/dist/server/routes/logger/controllers/logger.file.js +81 -0
- package/dist/server/routes/logger/controllers/logger.test.api.js +42 -0
- package/dist/server/routes/logger/controllers/utils/checkUserAccess.js +22 -0
- package/dist/server/routes/logger/controllers/utils/getRootDir.js +25 -0
- package/dist/server/routes/logger/index.js +18 -0
- package/dist/server/routes/menu/controllers/getMenu.js +98 -0
- package/dist/server/routes/menu/controllers/interfaces.js +18 -0
- package/dist/server/routes/menu/index.js +7 -0
- package/dist/server/routes/properties/controllers/properties.get.js +23 -0
- package/dist/server/routes/properties/controllers/properties.post.js +68 -0
- package/dist/server/routes/properties/index.js +21 -0
- package/dist/server/routes/table/controllers/card.js +79 -0
- package/dist/server/routes/table/controllers/cardData.js +161 -0
- package/dist/server/routes/table/controllers/cardTabData.js +49 -0
- package/dist/server/routes/table/controllers/dataInfo.js +57 -0
- package/dist/server/routes/table/controllers/filter.js +181 -0
- package/dist/server/routes/table/controllers/form.js +41 -0
- package/{server → dist/server}/routes/table/controllers/getFormByTable.js +105 -125
- package/dist/server/routes/table/controllers/search.js +80 -0
- package/dist/server/routes/table/controllers/suggest.js +242 -0
- package/dist/server/routes/table/controllers/tableData.js +88 -0
- package/dist/server/routes/table/controllers/tableInfo.js +112 -0
- package/dist/server/routes/table/controllers/tokenInfo.js +10 -0
- package/dist/server/routes/table/controllers/utils/conditions.js +30 -0
- package/dist/server/routes/table/controllers/utils/formatSchema.js +35 -0
- package/dist/server/routes/table/controllers/utils/locales.js +2 -0
- package/dist/server/routes/table/functions/getData.js +584 -0
- package/dist/server/routes/table/index.js +44 -0
- package/dist/server/routes/table/schema.js +117 -0
- package/dist/server/routes/templates/controllers/getTemplate.js +65 -0
- package/dist/server/routes/templates/index.js +7 -0
- package/{server → dist/server}/routes/templates/schema.js +11 -12
- package/dist/server/routes/util/controllers/code.generator.js +75 -0
- package/dist/server/routes/util/controllers/next.id.js +4 -0
- package/dist/server/routes/util/controllers/status.monitor.js +6 -0
- package/dist/server/routes/util/controllers/user.tokens.js +32 -0
- package/dist/server/routes/util/index.js +13 -0
- package/dist/server/routes/widget/controllers/file.edit.js +48 -0
- package/dist/server/routes/widget/controllers/widget.del.js +84 -0
- package/dist/server/routes/widget/controllers/widget.get.js +164 -0
- package/dist/server/routes/widget/controllers/widget.set.js +117 -0
- package/dist/server/routes/widget/hook/onWidgetSet.js +10 -0
- package/dist/server/routes/widget/index.js +42 -0
- package/dist/server/types/core.js +12 -0
- package/dist/utils.js +93 -0
- package/package.json +24 -17
- package/config.js +0 -37
- package/dblist.js +0 -5
- package/index.js +0 -193
- package/redactionList.js +0 -7
- package/server/helpers/core/badge.js +0 -14
- package/server/helpers/core/buttonFilePreview.js +0 -12
- package/server/helpers/core/buttonHelper.js +0 -22
- package/server/helpers/format/formatAuto.js +0 -13
- package/server/helpers/format/formatDate.js +0 -258
- package/server/helpers/format/formatNum.js +0 -365
- package/server/helpers/format/formatRelative.js +0 -106
- package/server/helpers/funcs/ifCond.js +0 -109
- package/server/helpers/funcs/ifCondAnd.js +0 -114
- package/server/helpers/funcs/ifCondOr.js +0 -115
- package/server/helpers/funcs/qrcode.js +0 -68
- package/server/helpers/funcs/select.js +0 -46
- package/server/helpers/index.js +0 -137
- package/server/helpers/list/buttonHelper.js +0 -22
- package/server/helpers/list/tableList.js +0 -87
- package/server/helpers/string/utils/alphabet.js +0 -76
- package/server/helpers/utils/buttonEdit.js +0 -17
- package/server/migrations/0.sql +0 -84
- package/server/migrations/cls.sql +0 -40
- package/server/migrations/context.sql +0 -135
- package/server/migrations/crm.sql +0 -155
- package/server/migrations/log.sql +0 -87
- package/server/migrations/properties.sql +0 -115
- package/server/migrations/roles.sql +0 -191
- package/server/migrations/template.sql +0 -44
- package/server/migrations/users.sql +0 -176
- package/server/plugins/access/funcs/getAdminAccess.js +0 -14
- package/server/plugins/access/index.mjs +0 -6
- package/server/plugins/cron/cronList.js +0 -1
- package/server/plugins/cron/funcs/addCron.js +0 -52
- package/server/plugins/cron/funcs/runCron.js +0 -24
- package/server/plugins/cron/index.js +0 -77
- package/server/plugins/crud/funcs/dataDelete.js +0 -86
- package/server/plugins/crud/funcs/dataInsert.js +0 -131
- package/server/plugins/crud/funcs/dataUpdate.js +0 -179
- package/server/plugins/crud/funcs/getAccess.js +0 -94
- package/server/plugins/crud/funcs/getOpt.js +0 -14
- package/server/plugins/crud/funcs/getToken.js +0 -33
- package/server/plugins/crud/funcs/isFileExists.js +0 -13
- package/server/plugins/crud/funcs/setOpt.js +0 -21
- package/server/plugins/crud/funcs/setToken.js +0 -43
- package/server/plugins/crud/funcs/utils/getFolder.js +0 -11
- package/server/plugins/crud/funcs/utils/getInsertQuery.js +0 -44
- package/server/plugins/crud/funcs/utils/logChanges.js +0 -121
- package/server/plugins/crud/index.js +0 -23
- package/server/plugins/extra/extraData.js +0 -79
- package/server/plugins/extra/extraDataGet.js +0 -56
- package/server/plugins/file/downloadFile.js +0 -18
- package/server/plugins/file/isFileExists.js +0 -17
- package/server/plugins/file/providers/fs.js +0 -100
- package/server/plugins/file/providers/index.d.ts +0 -49
- package/server/plugins/file/providers/index.js +0 -36
- package/server/plugins/file/providers/mime/index.js +0 -12
- package/server/plugins/file/providers/mime/mimes.js +0 -1180
- package/server/plugins/file/providers/s3/client.js +0 -41
- package/server/plugins/file/providers/s3/funcs/downloadFile.js +0 -50
- package/server/plugins/file/providers/s3/funcs/fileExists.js +0 -32
- package/server/plugins/file/providers/s3/funcs/uploadFile.js +0 -46
- package/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +0 -23
- package/server/plugins/file/providers/utils/getDataSize.js +0 -20
- package/server/plugins/file/providers/utils/getValidData.js +0 -32
- package/server/plugins/file/providers/utils/handlers/dataTypes.js +0 -8
- package/server/plugins/file/providers/utils/handlers/index.js +0 -53
- package/server/plugins/file/providers/utils/handlers/sizeHandlers.js +0 -11
- package/server/plugins/file/providers/utils/streamToBuffer.js +0 -8
- package/server/plugins/file/providers/utils/typeguards/isPath.js +0 -5
- package/server/plugins/file/providers/utils/typeguards/isReadableStream.js +0 -8
- package/server/plugins/file/uploadFile.js +0 -19
- package/server/plugins/file/uploadMultiPart.js +0 -131
- package/server/plugins/file/utils/allowedExtensions.js +0 -25
- package/server/plugins/file/utils/getPath.js +0 -25
- package/server/plugins/file/utils/isFileExists.js +0 -16
- package/server/plugins/grpc/file2json.js +0 -54
- package/server/plugins/grpc/grpc.js +0 -125
- package/server/plugins/grpc/office2pdf.js +0 -91
- package/server/plugins/grpc/utils/csv2xls.js +0 -8
- package/server/plugins/grpc/utils/excel2Json.js +0 -8
- package/server/plugins/grpc/utils/html2doc.js +0 -19
- package/server/plugins/grpc/utils/html2img.js +0 -18
- package/server/plugins/grpc/utils/html2pdf.js +0 -23
- package/server/plugins/grpc/utils/json2xls.js +0 -13
- package/server/plugins/grpc/utils/mergePdf.js +0 -20
- package/server/plugins/hook/funcs/addHook.js +0 -8
- package/server/plugins/hook/funcs/applyHook.js +0 -25
- package/server/plugins/hook/funcs/applyHookSync.js +0 -9
- package/server/plugins/hook/hookList.js +0 -1
- package/server/plugins/logger/createFileStream.js +0 -88
- package/server/plugins/logger/errorMessage.js +0 -25
- package/server/plugins/logger/errorStatus.js +0 -19
- package/server/plugins/logger/getHooks.js +0 -21
- package/server/plugins/logger/getLogger.js +0 -58
- package/server/plugins/logger/index.js +0 -33
- package/server/plugins/logger/labels.js +0 -11
- package/server/plugins/logger/serializers.js +0 -25
- package/server/plugins/md/funcs/formatMdoc.js +0 -40
- package/server/plugins/metric/index.js +0 -8
- package/server/plugins/metric/loggerSystem.js +0 -131
- package/server/plugins/metric/systemMetricsFifthly.js +0 -24
- package/server/plugins/migration/exec.migrations.js +0 -63
- package/server/plugins/migration/exec.sql.js +0 -67
- package/server/plugins/pg/funcs/autoIndex.js +0 -103
- package/server/plugins/pg/funcs/getMeta.js +0 -49
- package/server/plugins/pg/funcs/getPG.js +0 -42
- package/server/plugins/pg/funcs/getPGAsync.js +0 -62
- package/server/plugins/pg/funcs/init.js +0 -117
- package/server/plugins/pg/index.js +0 -54
- package/server/plugins/pg/pgClients.js +0 -22
- package/server/plugins/policy/funcs/checkPolicy.js +0 -127
- package/server/plugins/policy/funcs/checkXSS.js +0 -37
- package/server/plugins/policy/index.js +0 -11
- package/server/plugins/policy/sqlInjection.js +0 -34
- package/server/plugins/policy/xssInjection.js +0 -73
- package/server/plugins/redis/funcs/getRedis.js +0 -25
- package/server/plugins/redis/index.js +0 -17
- package/server/plugins/sqlite/funcs/getSqlite.js +0 -39
- package/server/plugins/sqlite/funcs/init.js +0 -53
- package/server/plugins/sqlite/index.js +0 -11
- package/server/plugins/sqlite/sqliteClients.js +0 -26
- package/server/plugins/table/funcs/addMenu.js +0 -16
- package/server/plugins/table/funcs/addTemplateDir.js +0 -19
- package/server/plugins/table/funcs/customTokens.js +0 -1
- package/server/plugins/table/funcs/getData.js +0 -14
- package/server/plugins/table/funcs/getFilter.js +0 -14
- package/server/plugins/table/funcs/getFilterSQL/index.js +0 -163
- package/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +0 -136
- package/server/plugins/table/funcs/getFilterSQL/util/getCustomQuery.js +0 -13
- package/server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.js +0 -75
- package/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +0 -12
- package/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +0 -156
- package/server/plugins/table/funcs/getFilterSQL/util/getTableSql.js +0 -34
- package/server/plugins/table/funcs/getSelect.js +0 -31
- package/server/plugins/table/funcs/getSelectMeta.js +0 -74
- package/server/plugins/table/funcs/getTemplate.js +0 -88
- package/server/plugins/table/funcs/getTemplatePath.js +0 -60
- package/server/plugins/table/funcs/getTemplateSync.js +0 -87
- package/server/plugins/table/funcs/getTemplates.js +0 -19
- package/server/plugins/table/funcs/gisIRColumn.js +0 -82
- package/server/plugins/table/funcs/loadTemplate.js +0 -1
- package/server/plugins/table/funcs/loadTemplatePath.js +0 -1
- package/server/plugins/table/funcs/menuDirs.js +0 -1
- package/server/plugins/table/funcs/metaFormat/getSelectVal.js +0 -61
- package/server/plugins/table/funcs/metaFormat/index.js +0 -49
- package/server/plugins/table/funcs/userTemplateDir.js +0 -1
- package/server/plugins/table/funcs/userTokens.js +0 -1
- package/server/plugins/table/index.js +0 -13
- package/server/plugins/util/funcs/eventStream.js +0 -29
- package/server/plugins/util/index.js +0 -7
- package/server/routes/access/controllers/access.interface.js +0 -37
- package/server/routes/cron/controllers/cronApi.js +0 -22
- package/server/routes/cron/index.js +0 -19
- package/server/routes/crud/controllers/deleteCrud.js +0 -84
- package/server/routes/crud/controllers/insert.js +0 -103
- package/server/routes/crud/controllers/table.js +0 -116
- package/server/routes/crud/controllers/update.js +0 -108
- package/server/routes/crud/index.js +0 -26
- package/server/routes/dblist/controllers/readItems.js +0 -28
- package/server/routes/dblist/controllers/setItem.js +0 -25
- package/server/routes/dblist/index.mjs +0 -19
- package/server/routes/dblist/utils/formatData.js +0 -7
- package/server/routes/file/controllers/delete.js +0 -108
- package/server/routes/file/controllers/download.js +0 -66
- package/server/routes/file/controllers/export.js +0 -290
- package/server/routes/file/controllers/files.js +0 -72
- package/server/routes/file/controllers/resize.js +0 -96
- package/server/routes/file/controllers/resizeAll.js +0 -165
- package/server/routes/file/controllers/upload.js +0 -55
- package/server/routes/file/controllers/uploadImage.js +0 -47
- package/server/routes/file/controllers/utils/formatResult.js +0 -17
- package/server/routes/file/controllers/utils/jsonToCsv.js +0 -36
- package/server/routes/file/controllers/utils/jsonToXls.js +0 -42
- package/server/routes/file/index.mjs +0 -26
- package/server/routes/file/schema.js +0 -16
- package/server/routes/grpc/controllers/file2geojson.js +0 -60
- package/server/routes/grpc/controllers/filePreview.js +0 -89
- package/server/routes/grpc/index.mjs +0 -12
- package/server/routes/logger/controllers/logger.file.js +0 -97
- package/server/routes/logger/controllers/logger.test.api.js +0 -48
- package/server/routes/logger/controllers/utils/checkUserAccess.js +0 -24
- package/server/routes/logger/controllers/utils/getRootDir.js +0 -27
- package/server/routes/logger/index.js +0 -22
- package/server/routes/menu/controllers/getMenu.js +0 -98
- package/server/routes/menu/controllers/interfaces.js +0 -21
- package/server/routes/menu/index.mjs +0 -8
- package/server/routes/menu/schema.js +0 -0
- package/server/routes/properties/controllers/properties.get.js +0 -33
- package/server/routes/properties/controllers/properties.post.js +0 -76
- package/server/routes/properties/index.js +0 -25
- package/server/routes/table/controllers/card.js +0 -77
- package/server/routes/table/controllers/cardData.js +0 -155
- package/server/routes/table/controllers/cardTabData.js +0 -57
- package/server/routes/table/controllers/dataInfo.js +0 -56
- package/server/routes/table/controllers/filter.js +0 -154
- package/server/routes/table/controllers/form.js +0 -42
- package/server/routes/table/controllers/search.js +0 -74
- package/server/routes/table/controllers/suggest.js +0 -246
- package/server/routes/table/controllers/tableData.js +0 -62
- package/server/routes/table/controllers/tableInfo.js +0 -110
- package/server/routes/table/controllers/tokenInfo.js +0 -12
- package/server/routes/table/controllers/utils/conditions.js +0 -21
- package/server/routes/table/controllers/utils/formatSchema.js +0 -23
- package/server/routes/table/controllers/utils/locales.js +0 -1
- package/server/routes/table/functions/getData.js +0 -436
- package/server/routes/table/index.js +0 -57
- package/server/routes/table/schema.js +0 -127
- package/server/routes/templates/controllers/getTemplate.js +0 -51
- package/server/routes/templates/index.mjs +0 -10
- package/server/routes/util/controllers/code.generator.js +0 -94
- package/server/routes/util/controllers/next.id.js +0 -4
- package/server/routes/util/controllers/status.monitor.js +0 -8
- package/server/routes/util/controllers/user.tokens.js +0 -45
- package/server/routes/util/index.js +0 -14
- package/server/routes/widget/controllers/file.edit.js +0 -55
- package/server/routes/widget/controllers/widget.del.js +0 -99
- package/server/routes/widget/controllers/widget.get.js +0 -156
- package/server/routes/widget/controllers/widget.set.js +0 -108
- package/server/routes/widget/hook/onWidgetSet.js +0 -13
- package/server/routes/widget/index.mjs +0 -38
- package/utils.js +0 -112
- /package/{server → dist/server}/plugins/grpc/utils/convertp.proto +0 -0
- /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;
|