@opengis/fastify-table 1.4.7 → 1.4.9

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 (69) hide show
  1. package/config.js +1 -0
  2. package/index.js +5 -0
  3. package/package.json +8 -2
  4. package/server/plugins/file/downloadFile.js +18 -0
  5. package/server/plugins/file/getExport.js +38 -0
  6. package/server/plugins/file/isFileExists.js +17 -0
  7. package/server/plugins/file/providers/fs.js +100 -0
  8. package/server/plugins/file/providers/index.d.ts +49 -0
  9. package/server/plugins/file/providers/index.js +37 -0
  10. package/server/plugins/file/providers/mime/index.js +12 -0
  11. package/server/plugins/file/providers/mime/mimes.js +1180 -0
  12. package/server/plugins/file/providers/s3/client.js +41 -0
  13. package/server/plugins/file/providers/s3/funcs/downloadFile.js +50 -0
  14. package/server/plugins/file/providers/s3/funcs/fileExists.js +32 -0
  15. package/server/plugins/file/providers/s3/funcs/uploadFile.js +38 -0
  16. package/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +23 -0
  17. package/server/plugins/file/providers/s3/index.js +12 -0
  18. package/server/plugins/file/providers/utils/getDataSize.js +20 -0
  19. package/server/plugins/file/providers/utils/getValidData.js +32 -0
  20. package/server/plugins/file/providers/utils/handlers/dataTypes.js +8 -0
  21. package/server/plugins/file/providers/utils/handlers/index.js +53 -0
  22. package/server/plugins/file/providers/utils/handlers/sizeHandlers.js +11 -0
  23. package/server/plugins/file/providers/utils/streamToBuffer.js +8 -0
  24. package/server/plugins/file/providers/utils/typeguards/isArray.js +3 -0
  25. package/server/plugins/file/providers/utils/typeguards/isBuffer.js +3 -0
  26. package/server/plugins/file/providers/utils/typeguards/isPath.js +5 -0
  27. package/server/plugins/file/providers/utils/typeguards/isReadableStream.js +8 -0
  28. package/server/plugins/file/providers/utils/typeguards/isText.js +3 -0
  29. package/server/plugins/file/uploadFile.js +19 -0
  30. package/server/plugins/file/uploadMultiPart.js +63 -0
  31. package/server/plugins/file/utils/allowedExtensions.js +25 -0
  32. package/server/plugins/file/utils/getFileType.js +10 -0
  33. package/server/plugins/file/utils/getPath.js +25 -0
  34. package/server/plugins/file/utils/isFileExists.js +15 -0
  35. package/server/plugins/file/utils/uploadFileDisk.js +87 -0
  36. package/server/plugins/grpc/file2json.js +54 -0
  37. package/server/plugins/grpc/grpc.js +295 -0
  38. package/server/plugins/grpc/office2pdf.js +68 -0
  39. package/server/plugins/grpc/utils/convertp.proto +137 -0
  40. package/server/plugins/grpc/utils/csv2xls.js +8 -0
  41. package/server/plugins/grpc/utils/excel2Json.js +8 -0
  42. package/server/plugins/grpc/utils/html2doc.js +19 -0
  43. package/server/plugins/grpc/utils/html2img.js +18 -0
  44. package/server/plugins/grpc/utils/html2pdf.js +23 -0
  45. package/server/plugins/grpc/utils/htmlTemplate.js +14 -0
  46. package/server/plugins/grpc/utils/json2xls.js +13 -0
  47. package/server/plugins/grpc/utils/mergePdf.js +20 -0
  48. package/server/plugins/grpc/utils/office2pdf.proto +14 -0
  49. package/server/plugins/table/funcs/getData.js +9 -3
  50. package/server/routes/file/controllers/delete.js +108 -0
  51. package/server/routes/file/controllers/download.js +66 -0
  52. package/server/routes/file/controllers/export.js +283 -0
  53. package/server/routes/file/controllers/files.js +72 -0
  54. package/server/routes/file/controllers/resize.js +90 -0
  55. package/server/routes/file/controllers/resizeAll.js +164 -0
  56. package/server/routes/file/controllers/upload.js +53 -0
  57. package/server/routes/file/controllers/uploadImage.js +47 -0
  58. package/server/routes/file/controllers/utils/convertJSONToCSV.js +36 -0
  59. package/server/routes/file/controllers/utils/convertJSONToXls.js +44 -0
  60. package/server/routes/file/controllers/utils/formatResult.js +17 -0
  61. package/server/routes/file/index.mjs +26 -0
  62. package/server/routes/file/schema.js +16 -0
  63. package/server/routes/grpc/controllers/file2geojson.js +60 -0
  64. package/server/routes/grpc/controllers/filePreview.js +89 -0
  65. package/server/routes/grpc/index.mjs +12 -0
  66. package/server/routes/table/controllers/cardData.js +10 -4
  67. package/server/routes/table/controllers/tableData.js +5 -5
  68. package/server/routes/table/functions/getData.js +21 -11
  69. package/utils.js +30 -2
@@ -0,0 +1,54 @@
1
+ import path from 'node:path';
2
+
3
+ import downloadFile from '../file/downloadFile.js';
4
+
5
+ import getGRPC from './grpc.js';
6
+
7
+ const grpc = getGRPC();
8
+
9
+ const file2json = async ({
10
+ buffer: buffer1, ext: ext1, filepath, encoding: encoding1 = 'UTF-8', debug,
11
+ }) => {
12
+ if (!filepath && !(buffer1?.length && ext1)) return null;
13
+
14
+ const ext = ext1 || path.extname(filepath);
15
+
16
+ const encoding = { CP1251: 'windows-1251' }[encoding1] || encoding1;
17
+ const buffer = buffer1 || await downloadFile(filepath, { provider: 'fs', buffer: true, debug }) || '{}';
18
+
19
+ if (debug) return { filepath, buffer };
20
+
21
+ if (['.xls', '.xlsx'].includes(ext)) {
22
+ const { result } = await grpc.excelToJson({ base64: buffer.toString('base64'), type: 'xls' });
23
+ const json = typeof result === 'object' ? result : JSON.parse(result || {});
24
+ return json;
25
+ }
26
+
27
+ if (['.csv', '.txt'].includes(ext)) {
28
+ const { result } = await grpc.excelToJson({ base64: buffer.toString('base64'), type: 'csv', encoding });
29
+ const json = typeof result === 'object' ? result : JSON.parse(result || {});
30
+ return json;
31
+ }
32
+
33
+ if (['.zip'].includes(ext)) {
34
+ const { result } = await grpc.shpToGeojson({
35
+ base64: buffer.toString('base64'), encoding,
36
+ });
37
+ const json = typeof result === 'object' ? result : JSON.parse(result);
38
+ return json;
39
+ }
40
+
41
+ if (['.xml'].includes(ext)) {
42
+ const { result } = await grpc.xmlToJson({ xml: buffer.toString('utf-8') });
43
+ const json = typeof result === 'object' ? result : JSON.parse(result);
44
+ return json;
45
+ }
46
+
47
+ if (['.geojson', '.json'].includes(ext)) {
48
+ return JSON.parse(buffer.toString('utf-8'));
49
+ }
50
+
51
+ return filepath.replace(/"/g, '');
52
+ };
53
+
54
+ export default file2json;
@@ -0,0 +1,295 @@
1
+ /* eslint-disable consistent-return */
2
+ import grpc from '@grpc/grpc-js';
3
+ import protoLoader from '@grpc/proto-loader';
4
+
5
+ import { config, logger } from '../../../utils.js';
6
+
7
+ config.ready = config.ready || {};
8
+
9
+ // const { convertServerAddress = '193.239.152.181:44003' } = config;
10
+
11
+ // external ip not-accessible from internal network
12
+ const defaultConvertServerAddress = config.pg?.host?.startsWith('192.168.3') ? '192.168.1.96:4003' : '193.239.152.181:44003';
13
+
14
+ const convertServerAddress = config.convertServerAddress || defaultConvertServerAddress;
15
+
16
+ console.log('convertServerAddress: ', convertServerAddress, !!config.convertServerAddress);
17
+
18
+ const relpath = 'server/plugins/grpc/utils/convertp.proto';
19
+ const protoLocation = process.cwd().includes('fastify-table') ? relpath : `node_modules/@opengis/fastify-table/${relpath}`;
20
+
21
+ const proto = grpc.loadPackageDefinition(
22
+ protoLoader.loadSync(protoLocation, {
23
+ keepCase: true,
24
+ longs: String,
25
+ enums: String,
26
+ defaults: true,
27
+ oneofs: true,
28
+ }),
29
+ );
30
+
31
+ const convertClient = new proto.Convert(
32
+ convertServerAddress,
33
+ grpc.credentials.createInsecure(),
34
+ {
35
+ 'grpc.max_send_message_length': 512 * 1024 * 1024,
36
+ 'grpc.max_receive_message_length': 512 * 1024 * 1024,
37
+ },
38
+ );
39
+
40
+ convertClient.waitForReady(Date.now() + 5000, (err) => {
41
+ if (err) {
42
+ config.ready.convert = false;
43
+ console.error('Client connection timeout or failure:', err);
44
+ }
45
+ else {
46
+ config.ready.convert = true;
47
+ console.log('Client connected successfully.');
48
+ // You can now make RPC calls safely
49
+ }
50
+ });
51
+
52
+ // rewrite, merge??
53
+ const pdfMerge = async (data) => new Promise((res, rej) => {
54
+ convertClient.pdfMerge(data, (err, data1) => {
55
+ if (err) {
56
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
57
+ if (!config.ready.convert) {
58
+ return rej(new Error('no grpc convert connection'));
59
+ }
60
+ return rej(err);
61
+ }
62
+ res(data1);
63
+ });
64
+ });
65
+
66
+ const htmlToPdf = async (data) => new Promise((res, rej) => {
67
+ convertClient.htmlToPdf(data, (err, data1) => {
68
+ if (err) {
69
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
70
+ if (!config.ready.convert) {
71
+ return rej(new Error('no grpc convert connection'));
72
+ }
73
+ return rej(err);
74
+ }
75
+ res(data1);
76
+ });
77
+ });
78
+
79
+ const csvToXls = async (data) => new Promise((res, rej) => {
80
+ convertClient.csvToXls(data, (err, data1) => {
81
+ if (err) {
82
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
83
+ if (!config.ready.convert) {
84
+ return rej(new Error('no grpc convert connection'));
85
+ }
86
+ return rej(err);
87
+ }
88
+ res(data1);
89
+ });
90
+ });
91
+
92
+ const jsonToXls = async (data) => new Promise((res, rej) => {
93
+ convertClient.jsonToXls(data, (err, data1) => {
94
+ if (err) {
95
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
96
+ if (!config.ready.convert) {
97
+ return rej(new Error('no grpc convert connection'));
98
+ }
99
+ return rej(err);
100
+ }
101
+ res(data1);
102
+ });
103
+ });
104
+
105
+ const excelToJson = async (data) => new Promise((res, rej) => {
106
+ convertClient.excelToJson(data, (err, data1) => {
107
+ if (err) {
108
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
109
+ if (!config.ready.convert) {
110
+ return rej(new Error('no grpc convert connection'));
111
+ }
112
+ return rej(err);
113
+ }
114
+ res(data1);
115
+ });
116
+ });
117
+
118
+ const xmlToJson = async (data) => new Promise((res, rej) => {
119
+ convertClient.xmlToJson(data, (err, data1) => {
120
+ if (err) {
121
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
122
+ if (!config.ready.convert) {
123
+ return rej(new Error('no grpc convert connection'));
124
+ }
125
+ return rej(err);
126
+ }
127
+ res(data1);
128
+ });
129
+ });
130
+
131
+ const html2Doc = async (data) => new Promise((res, rej) => {
132
+ convertClient.htmlToDoc(data, (err, data1) => {
133
+ if (err) {
134
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
135
+ if (!config.ready.convert) {
136
+ return rej(new Error('no grpc convert connection'));
137
+ }
138
+ return rej(err);
139
+ }
140
+ res(data1);
141
+ });
142
+ });
143
+
144
+ const htmlToImg = async (data) => new Promise((res, rej) => {
145
+ convertClient.htmlToImage(data, (err, data1) => {
146
+ if (err) {
147
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
148
+ if (!config.ready.convert) {
149
+ return rej(new Error('no grpc convert connection'));
150
+ }
151
+ return rej(err);
152
+ }
153
+ res(data1);
154
+ });
155
+ });
156
+
157
+ const shpToGeojson = async (data) => new Promise((res, rej) => {
158
+ convertClient.shpToGeojson(data, (err, data1) => {
159
+ if (err) {
160
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
161
+ if (!config.ready.convert) {
162
+ return rej(new Error('no grpc convert connection'));
163
+ }
164
+ return rej(err);
165
+ }
166
+ res(data1);
167
+ });
168
+ });
169
+
170
+ const geojsonToShp = async (data) => new Promise((res, rej) => {
171
+ convertClient.geojsonToShp(data, (err, data1) => {
172
+ if (err) {
173
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
174
+ if (!config.ready.convert) {
175
+ return rej(new Error('no grpc convert connection'));
176
+ }
177
+ return rej(err);
178
+ }
179
+ res(data1);
180
+ });
181
+ });
182
+
183
+ const geojsonToGpkg = async (data) => new Promise((res, rej) => {
184
+ convertClient.geojsonToGpkg(data, (err, data1) => {
185
+ if (err) {
186
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
187
+ if (!config.ready.convert) {
188
+ return rej(new Error('no grpc convert connection'));
189
+ }
190
+ return rej(err);
191
+ }
192
+ res(data1);
193
+ });
194
+ });
195
+
196
+ const docToPDF = async (data) => new Promise((res, rej) => {
197
+ convertClient.docToPDF(data, (err, data1) => {
198
+ if (err) {
199
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
200
+ if (!config.ready.convert) {
201
+ return rej(new Error('no grpc convert connection'));
202
+ }
203
+ return rej(err);
204
+ }
205
+ res(data1);
206
+ });
207
+ });
208
+
209
+ const mergeImages = async (data) => new Promise((res, rej) => {
210
+ convertClient.mergeImages(data, (err, data1) => {
211
+ if (err) {
212
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
213
+ if (!config.ready.convert) {
214
+ return rej(new Error('no grpc convert connection'));
215
+ }
216
+ return rej(err);
217
+ }
218
+ res(data1);
219
+ });
220
+ });
221
+
222
+ const resizeImage = async (data) => new Promise((res, rej) => {
223
+ convertClient.resizeImage(data, (err, data1) => {
224
+ if (err) {
225
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
226
+ if (!config.ready.convert) {
227
+ return rej(new Error('no grpc convert connection'));
228
+ }
229
+ return rej(err);
230
+ }
231
+ res(data1);
232
+ });
233
+ });
234
+
235
+ const jsonToYaml = async (data) => new Promise((res, rej) => {
236
+ convertClient.jsonToYaml(data, (err, data1) => {
237
+ if (err) {
238
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
239
+ if (!config.ready.convert) {
240
+ return rej(new Error('no grpc convert connection'));
241
+ }
242
+ return rej(err);
243
+ }
244
+ res(data1);
245
+ });
246
+ });
247
+
248
+ const yamlToJson = async (data) => new Promise((res, rej) => {
249
+ convertClient.yamlToJson(data, (err, data1) => {
250
+ if (err) {
251
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
252
+ if (!config.ready.convert) {
253
+ return rej(new Error('no grpc convert connection'));
254
+ }
255
+ return rej(err);
256
+ }
257
+ res(data1);
258
+ });
259
+ });
260
+
261
+ const log = async (data) => new Promise((res, rej) => {
262
+ convertClient.log(data, (err, data1) => {
263
+ if (err) {
264
+ logger.file('grpc/convert', { error: err.toString(), stack: err.stack, ready: config.ready.convert });
265
+ if (!config.ready.convert) {
266
+ return rej(new Error('no grpc convert connection'));
267
+ }
268
+ return rej(err);
269
+ }
270
+ res(data1);
271
+ });
272
+ });
273
+
274
+ const getGRPC = () => ({
275
+ pdfMerge,
276
+ htmlToPdf,
277
+ csvToXls,
278
+ jsonToXls,
279
+ excelToJson,
280
+ xmlToJson,
281
+ html2Doc,
282
+ htmlToImg,
283
+ shpToGeojson,
284
+ geojsonToShp,
285
+ geojsonToGpkg,
286
+ docToPDF,
287
+ mergeImages,
288
+ resizeImage,
289
+ jsonToYaml,
290
+ yamlToJson,
291
+ log,
292
+ convertServerAddress,
293
+ });
294
+
295
+ export default getGRPC;
@@ -0,0 +1,68 @@
1
+ /* eslint-disable consistent-return */
2
+ import grpc from '@grpc/grpc-js';
3
+ import protoLoader from '@grpc/proto-loader';
4
+
5
+ import { config, logger } from '../../../utils.js';
6
+
7
+ config.ready = config.ready || {};
8
+
9
+ // external ip not-accessible from internal network
10
+ const defaultOfficeConverterServerAddress = config.pg?.host?.startsWith('192.168.3') ? '192.168.1.96:4011' : '193.239.152.181:44011';
11
+
12
+ const officeConverterServerAddress = config.officeConverterServerAddress || defaultOfficeConverterServerAddress;
13
+
14
+ console.log('officeConverterServerAddress: ', officeConverterServerAddress, !!config.officeConverterServerAddress);
15
+
16
+ const relpath = 'server/plugins/grpc/utils/office2pdf.proto';
17
+ const protoLocation = process.cwd().includes('fastify-table') ? relpath : `node_modules/@opengis/fastify-table/${relpath}`;
18
+
19
+ const proto = grpc.loadPackageDefinition(
20
+ protoLoader.loadSync(protoLocation, {
21
+ keepCase: true,
22
+ longs: String,
23
+ enums: String,
24
+ defaults: true,
25
+ oneofs: true,
26
+ }),
27
+ );
28
+
29
+ const officeClient = new proto.OfficeConverterService(
30
+ officeConverterServerAddress,
31
+ grpc.credentials.createInsecure(),
32
+ {
33
+ 'grpc.max_send_message_length': 512 * 1024 * 1024,
34
+ 'grpc.max_receive_message_length': 512 * 1024 * 1024,
35
+ },
36
+ );
37
+
38
+ officeClient.waitForReady(Date.now() + 5000, (err) => {
39
+ if (err) {
40
+ config.ready.office2pdf = false;
41
+ console.error('Client connection timeout or failure:', err);
42
+ }
43
+ else {
44
+ config.ready.office2pdf = true;
45
+ console.log('Client connected successfully.');
46
+ // You can now make RPC calls safely
47
+ }
48
+ });
49
+
50
+ const officeToPdf = async (data) => new Promise((res, rej) => {
51
+ officeClient.OfficeToPdf(data, (err, data1) => {
52
+ if (err) {
53
+ logger.file('grpc/office2pdf', { error: err.toString(), stack: err.stack, ready: config.ready.office2pdf });
54
+ if (!config.ready.office2pdf) {
55
+ return rej(new Error('no grpc office2pdf connection'));
56
+ }
57
+ return rej(err);
58
+ }
59
+ res(data1);
60
+ });
61
+ });
62
+
63
+ const getOffice = () => ({
64
+ officeToPdf,
65
+ officeConverterServerAddress,
66
+ });
67
+
68
+ export default getOffice;
@@ -0,0 +1,137 @@
1
+ syntax = "proto3";
2
+
3
+ service Convert {
4
+ rpc csvToXls(csvToXlsParams) returns (FileBase64) {}
5
+ rpc jsonToXls(jsonToXlsParams) returns (FileBase64) {}
6
+ rpc pdfMerge(pdfMergeParams) returns (FileBase64) {}
7
+ rpc htmlToPdf(htmlToPdfParams) returns (FileBase64) {}
8
+ rpc excelToJson(excelToJsonParams) returns (FileBase64) {}
9
+ rpc xmlToJson(xmlToJsonParams) returns (FileBase64) {}
10
+ rpc htmlToDoc(htmlToDocParams) returns (FileBase64) {}
11
+ rpc htmlToImage(htmlToImageParams) returns (FileBase64) {}
12
+ rpc geojsonToShp(geojsonToShpParams) returns (FileBase64) {}
13
+ rpc shpToGeojson(shpToGeojsonParams) returns (FileBase64) {}
14
+ rpc docToPDF(docToPDFParams) returns (FileBase64) {}
15
+ rpc mergeImages(mergeImagesIn) returns (FileBase64) {}
16
+ rpc resizeImage(resizeImageIn) returns (FileBase64) {}
17
+ rpc jsonToYaml(jsonToYamlIn) returns (FileBase64) {}
18
+ rpc yamlToJson(yamlToJsonIn) returns (FileBase64) {}
19
+ rpc log(log_in) returns (log_out) {}
20
+ rpc geojsonToGpkg(geojsonToShpParams) returns (FileBase64) {}
21
+ }
22
+
23
+ message jsonToYamlIn {
24
+ string json = 1;
25
+ }
26
+
27
+ message yamlToJsonIn {
28
+ string yaml = 1;
29
+ }
30
+
31
+ message resizeImageIn {
32
+ string base64 = 1;
33
+ uint64 width = 2;
34
+ uint64 height = 3;
35
+ uint32 quality = 4;
36
+ uint32 subsampling = 5;
37
+ }
38
+
39
+ message pdfToImgIn {
40
+ string pdfPath = 1;
41
+ string imgPath = 2;
42
+ }
43
+
44
+ message pdfToImgOut {
45
+ string imgPath = 1;
46
+ }
47
+
48
+ message log_in {
49
+ uint32 rows = 1;
50
+ string level = 2;
51
+ }
52
+
53
+ message log_out {
54
+ repeated string logs = 1;
55
+ }
56
+
57
+ enum mergeImageFormat {
58
+ VERTICAL = 0;
59
+ HORIZONTAL = 1;
60
+ OVERLAY = 2;
61
+ }
62
+
63
+ message imageMeta {
64
+ string base64 = 1;
65
+ mergeImageFormat mergeFormat = 2;
66
+ }
67
+
68
+ message mergeImagesIn {
69
+ repeated string images = 1;
70
+ repeated imageMeta imagesMeta = 2;
71
+ string background = 3;
72
+ string mergeFormat = 4;
73
+ }
74
+
75
+ message docToPDFParams {
76
+ string base64 = 1;
77
+ string to = 2;
78
+ string ext = 3;
79
+ }
80
+
81
+ message shpToGeojsonParams {
82
+ string base64 = 1;
83
+ }
84
+
85
+ message geojsonToShpParams {
86
+ string geojson = 1;
87
+ string proj = 2;
88
+ }
89
+
90
+ message xmlToJsonParams {
91
+ string xml = 1;
92
+ }
93
+
94
+ message jsonToXlsParams {
95
+ string json = 1;
96
+ string header = 2;
97
+ string subheader = 3;
98
+ string colmodel = 4;
99
+ }
100
+
101
+ message csvToXlsParams {
102
+ string csv = 1;
103
+ string header = 2;
104
+ string subheader = 3;
105
+ string separator = 4;
106
+ }
107
+
108
+ message excelToJsonParams {
109
+ string base64 = 1;
110
+ string type = 2;
111
+ string delimiter = 3;
112
+ string encoding = 4;
113
+ }
114
+
115
+ message htmlToPdfParams {
116
+ string html = 1;
117
+ string pdfPageConfig = 2;
118
+ }
119
+
120
+ message pdfMergeParams {
121
+ repeated string mergeFiles = 1;
122
+ }
123
+
124
+ message htmlToImageParams {
125
+ string html = 1;
126
+ string format = 2;
127
+ uint64 width = 3;
128
+ uint64 height = 4;
129
+ }
130
+
131
+ message htmlToDocParams {
132
+ string html = 1;
133
+ }
134
+
135
+ message FileBase64 {
136
+ string result = 1;
137
+ }
@@ -0,0 +1,8 @@
1
+ import grpc from '../grpc.js';
2
+
3
+ export default async function csv2xls({
4
+ csvBuffer,
5
+ }) {
6
+ const result = await grpc.csvToXls({ buffer: csvBuffer.toString('base64') });
7
+ return { resultBuffer: result.result };
8
+ }
@@ -0,0 +1,8 @@
1
+ import grpc from '../grpc.js';
2
+
3
+ export default async function excel2Json({
4
+ buffer, type, delimiter,
5
+ }) {
6
+ const { result } = await grpc.excelToJson({ buffer: buffer.toString('base64'), type, delimiter });
7
+ return { resultBuffer: result };
8
+ }
@@ -0,0 +1,19 @@
1
+ import { mkdir, writeFile } from 'fs/promises';
2
+ import path from 'path';
3
+
4
+ import grpc from '../grpc.js';
5
+
6
+ export default async function html2doc({
7
+ html, filepath,
8
+ }) {
9
+ const result = await grpc.html2Doc({ html });
10
+ if (result.err) throw new Error(result.err);
11
+ try {
12
+ await mkdir(path.dirname(filepath), { recursive: true });
13
+ await writeFile(filepath, result.result, 'base64');
14
+ return { filepath };
15
+ }
16
+ catch (err) {
17
+ return { err: err.toString(), status: 500 };
18
+ }
19
+ }
@@ -0,0 +1,18 @@
1
+ import { mkdir, writeFile } from 'fs/promises';
2
+ import path from 'path';
3
+ import grpc from '../grpc.js';
4
+
5
+ export default async function html2pdf({
6
+ html, filepath,
7
+ }) {
8
+ const result = await grpc.htmlToImg({ html });
9
+ if (result.err) throw new Error(result.err);
10
+ try {
11
+ await mkdir(path.dirname(filepath), { recursive: true });
12
+ await writeFile(filepath, result.result, 'base64');
13
+ return { filepath };
14
+ }
15
+ catch (err) {
16
+ return { err: err.toString(), status: 500 };
17
+ }
18
+ }
@@ -0,0 +1,23 @@
1
+ import { mkdir, writeFile } from 'fs/promises';
2
+ import path from 'path';
3
+
4
+ import grpc from '../grpc.js';
5
+
6
+ export default async function html2pdf({
7
+ html, filepath, logger,
8
+ }) {
9
+ const time = Date.now();
10
+ try {
11
+ const result = await grpc.htmlToPdf({ html });
12
+ logger.file('format/pdf', { msec: Date.now() - time, resp_code: 200 });
13
+
14
+ if (result.err) throw new Error(result.err);
15
+
16
+ await mkdir(path.dirname(filepath), { recursive: true });
17
+ await writeFile(filepath, result.result, 'base64');
18
+ return { filepath };
19
+ }
20
+ catch (err) {
21
+ return { err: err.toString(), status: 500 };
22
+ }
23
+ }
@@ -0,0 +1,14 @@
1
+ // TODO delete style when fully switch to the new code with merge
2
+ const createTemplate = ({ domain, html }) => `<!DOCTYPE html>\
3
+ <html>
4
+ <head>
5
+ <base uri="http://${domain}/">
6
+ <meta charset="utf-8">
7
+ <style>html, body {font-size: 10pt !important;}</style>
8
+ </head>
9
+ <body>
10
+ ${html || ''}
11
+ </body>
12
+ </html`;
13
+
14
+ export default createTemplate;
@@ -0,0 +1,13 @@
1
+ import grpc from '../grpc.js';
2
+
3
+ export default async function json2xls({
4
+ json,
5
+ }) {
6
+ try {
7
+ const result = await grpc.jsonToXls({ buffer: json });
8
+ return { resultBuffer: result.result };
9
+ }
10
+ catch (err) {
11
+ return { err: err.toString() };
12
+ }
13
+ }
@@ -0,0 +1,20 @@
1
+ import path from 'path';
2
+ import { mkdir, writeFile } from 'fs/promises';
3
+
4
+ import grpc from '../grpc.js';
5
+
6
+ export default async function mergePdf({
7
+ pdfStringList, pathToSave, filename,
8
+ }) {
9
+ const filename1 = filename || path.basename(pathToSave);
10
+ const result = grpc.pdfMerge(pdfStringList);
11
+ if (result.err) return { err: result.err, status: 500 };
12
+ try {
13
+ await mkdir(path.dirname(pathToSave), { recursive: true });
14
+ await writeFile(pathToSave, result.result, 'base64');
15
+ return { filename: `${filename1}.pdf`, filepath: pathToSave };
16
+ }
17
+ catch (err) {
18
+ return { err: err.toString(), status: 500 };
19
+ }
20
+ }
@@ -0,0 +1,14 @@
1
+ syntax = "proto3";
2
+
3
+ service OfficeConverterService {
4
+ rpc OfficeToPdf(OfficeToPdfRequest) returns (OfficeToPdfResponse) {}
5
+ }
6
+
7
+ message OfficeToPdfRequest {
8
+ string file = 1;
9
+ string ext = 2;
10
+ }
11
+
12
+ message OfficeToPdfResponse {
13
+ string file = 1;
14
+ }