node-server-engine 1.2.4 → 1.2.5

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 (35) hide show
  1. package/.env.example +1 -4
  2. package/README.md +171 -0
  3. package/dist/entities/Server/Server.js +0 -10
  4. package/dist/entities/Server/Server.js.map +1 -1
  5. package/dist/middleware/geminiFileUploader/geminiFileUploader.js +21 -69
  6. package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
  7. package/dist/middleware/index.d.ts +1 -0
  8. package/dist/middleware/index.js +11 -0
  9. package/dist/middleware/index.js.map +1 -1
  10. package/dist/middleware/multiPartFileUploader/index.d.ts +1 -0
  11. package/dist/middleware/multiPartFileUploader/index.js +17 -0
  12. package/dist/middleware/multiPartFileUploader/index.js.map +1 -0
  13. package/dist/middleware/multiPartFileUploader/multiPartFileUploader.d.ts +3 -0
  14. package/dist/middleware/multiPartFileUploader/multiPartFileUploader.js +156 -0
  15. package/dist/middleware/multiPartFileUploader/multiPartFileUploader.js.map +1 -0
  16. package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
  17. package/dist/utils/geminiFileUpload/geminiFileUpload.d.ts +9 -0
  18. package/dist/utils/geminiFileUpload/geminiFileUpload.js +100 -0
  19. package/dist/utils/geminiFileUpload/geminiFileUpload.js.map +1 -0
  20. package/dist/utils/geminiFileUpload/index.d.ts +1 -0
  21. package/dist/utils/geminiFileUpload/index.js +17 -0
  22. package/dist/utils/geminiFileUpload/index.js.map +1 -0
  23. package/dist/utils/index.d.ts +1 -0
  24. package/dist/utils/index.js +11 -0
  25. package/dist/utils/index.js.map +1 -1
  26. package/package.json +3 -1
  27. package/src/entities/Server/Server.ts +0 -6
  28. package/src/middleware/geminiFileUploader/geminiFileUploader.ts +19 -68
  29. package/src/middleware/index.ts +1 -0
  30. package/src/middleware/multiPartFileUploader/index.ts +1 -0
  31. package/src/middleware/multiPartFileUploader/multiPartFileUploader.ts +184 -0
  32. package/src/utils/createHttpServer/createHttpServer.ts +2 -3
  33. package/src/utils/geminiFileUpload/geminiFileUpload.ts +98 -0
  34. package/src/utils/geminiFileUpload/index.ts +1 -0
  35. package/src/utils/index.ts +3 -0
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.multiPartFileUploader = multiPartFileUploader;
8
+ var _multer = _interopRequireDefault(require("multer"));
9
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var _utils = require("../../utils");
12
+ const TEMP_DIR = process.env.TEMP_CHUNK_FOLDER || './uploads/temp_chunks';
13
+ const namespace = 'engine:middleware:multiPartFileUploader';
14
+ _fsExtra.default.ensureDirSync(TEMP_DIR);
15
+ const storage = _multer.default.memoryStorage();
16
+ async function multiPartFileUploader(req, res, next) {
17
+ try {
18
+ const uploadSingle = (0, _multer.default)({
19
+ storage
20
+ }).single('file');
21
+ uploadSingle(req, res, async err => {
22
+ if (err) {
23
+ (0, _utils.reportError)('Error uploading chunk');
24
+ return next(err);
25
+ }
26
+ const {
27
+ filename,
28
+ totalChunks,
29
+ chunkIndex,
30
+ uniqueID
31
+ } = req.body;
32
+ if (!filename || !totalChunks || chunkIndex === undefined || !uniqueID || !req.file) {
33
+ req.body.uploadDetails = {
34
+ status: 'failed',
35
+ message: 'Missing required fields',
36
+ details: {
37
+ filename,
38
+ totalChunks,
39
+ chunkIndex,
40
+ uniqueID,
41
+ receivedChunk: !!req.file
42
+ }
43
+ };
44
+ (0, _utils.reportDebug)({
45
+ namespace,
46
+ message: `Missing required fields`,
47
+ data: {
48
+ status: 'failed',
49
+ details: {
50
+ filename,
51
+ totalChunks,
52
+ chunkIndex,
53
+ uniqueID
54
+ }
55
+ }
56
+ });
57
+ return next();
58
+ }
59
+ const sessionFolder = _path.default.join(TEMP_DIR, uniqueID);
60
+ _fsExtra.default.ensureDirSync(sessionFolder);
61
+ const chunkPath = _path.default.join(sessionFolder, `${filename}.part${chunkIndex}`);
62
+ try {
63
+ await _fsExtra.default.writeFile(chunkPath, req.file.buffer);
64
+ } catch (writeErr) {
65
+ (0, _utils.reportError)(`Failed to write chunk ${chunkIndex}: ${writeErr.message}`);
66
+ return next(writeErr);
67
+ }
68
+ const uploadedChunks = await _fsExtra.default.readdir(sessionFolder);
69
+ if (uploadedChunks.length === parseInt(totalChunks, 10)) {
70
+ (0, _utils.reportDebug)({
71
+ namespace,
72
+ message: `All chunks uploaded. Merging file...`
73
+ });
74
+ try {
75
+ await mergeChunks(filename, totalChunks, sessionFolder);
76
+ } catch (mergeErr) {
77
+ (0, _utils.reportError)(`File merging failed: ${mergeErr.message}`);
78
+ return next(mergeErr);
79
+ }
80
+ const finalFilePath = _path.default.join(sessionFolder, filename);
81
+ if (!_fsExtra.default.existsSync(finalFilePath)) {
82
+ (0, _utils.reportError)('File merging failed: File does not exist');
83
+ return next(new Error('File merging failed'));
84
+ }
85
+ req.body.uploadDetails = {
86
+ status: 'completed',
87
+ message: 'File uploaded and merged successfully',
88
+ details: {
89
+ filename,
90
+ uniqueID
91
+ }
92
+ };
93
+ (0, _utils.reportDebug)({
94
+ namespace,
95
+ message: `File merged successfully`,
96
+ data: {
97
+ status: 'completed',
98
+ details: {
99
+ filename,
100
+ uniqueID
101
+ }
102
+ }
103
+ });
104
+ return next();
105
+ }
106
+ (0, _utils.reportDebug)({
107
+ namespace,
108
+ message: `Chunk uploaded successfully`,
109
+ data: {
110
+ filename,
111
+ uniqueID,
112
+ chunkIndex,
113
+ totalChunks
114
+ }
115
+ });
116
+ req.body.uploadDetails = {
117
+ status: 'pending',
118
+ message: 'Chunk uploaded successfully',
119
+ details: {
120
+ filename,
121
+ uniqueID,
122
+ chunkIndex,
123
+ totalChunks
124
+ }
125
+ };
126
+ return next();
127
+ });
128
+ } catch (error) {
129
+ (0, _utils.reportError)(`Failed to upload or process chunk: ${error.message}`);
130
+ next(error);
131
+ }
132
+ }
133
+ async function mergeChunks(filename, totalChunks, sessionFolder) {
134
+ const finalFilePath = _path.default.join(sessionFolder, filename);
135
+ const writeStream = _fsExtra.default.createWriteStream(finalFilePath);
136
+ for (let i = 0; i < parseInt(totalChunks, 10); i++) {
137
+ const partPath = _path.default.join(sessionFolder, `${filename}.part${i}`);
138
+ try {
139
+ const chunkData = await _fsExtra.default.readFile(partPath);
140
+ writeStream.write(chunkData);
141
+ } catch (error) {
142
+ (0, _utils.reportError)(`Error reading chunk ${i}: ${error.message}`);
143
+ throw error;
144
+ }
145
+ _fsExtra.default.remove(partPath).catch(err => (0, _utils.reportError)(`Error removing part ${partPath}: ${err.message}`));
146
+ }
147
+ writeStream.end();
148
+ return new Promise((resolve, reject) => {
149
+ writeStream.on('finish', () => resolve(undefined));
150
+ writeStream.on('error', error => {
151
+ (0, _utils.reportError)(`Error merging chunks: ${error.message}`);
152
+ reject(error);
153
+ });
154
+ });
155
+ }
156
+ //# sourceMappingURL=multiPartFileUploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiPartFileUploader.js","names":["_multer","_interopRequireDefault","require","_fsExtra","_path","_utils","TEMP_DIR","process","env","TEMP_CHUNK_FOLDER","namespace","fs","ensureDirSync","storage","multer","memoryStorage","multiPartFileUploader","req","res","next","uploadSingle","single","err","reportError","filename","totalChunks","chunkIndex","uniqueID","body","undefined","file","uploadDetails","status","message","details","receivedChunk","reportDebug","data","sessionFolder","path","join","chunkPath","writeFile","buffer","writeErr","uploadedChunks","readdir","length","parseInt","mergeChunks","mergeErr","finalFilePath","existsSync","Error","error","writeStream","createWriteStream","i","partPath","chunkData","readFile","write","remove","catch","end","Promise","resolve","reject","on"],"sources":["../../../src/middleware/multiPartFileUploader/multiPartFileUploader.ts"],"sourcesContent":["import express from 'express';\nimport multer from 'multer';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { reportDebug, reportError } from 'utils';\n\nconst TEMP_DIR: string =\n process.env.TEMP_CHUNK_FOLDER || './uploads/temp_chunks';\n\nconst namespace = 'engine:middleware:multiPartFileUploader';\n\nfs.ensureDirSync(TEMP_DIR);\n\nconst storage = multer.memoryStorage();\n\nasync function multiPartFileUploader(\n req: express.Request,\n res: express.Response,\n next: express.NextFunction\n): Promise<void> {\n try {\n const uploadSingle = multer({ storage }).single('file');\n\n uploadSingle(req, res, async (err) => {\n if (err) {\n reportError('Error uploading chunk');\n return next(err);\n }\n\n const { filename, totalChunks, chunkIndex, uniqueID } = req.body;\n\n if (\n !filename ||\n !totalChunks ||\n chunkIndex === undefined ||\n !uniqueID ||\n !req.file\n ) {\n req.body.uploadDetails = {\n status: 'failed',\n message: 'Missing required fields',\n details: {\n filename,\n totalChunks,\n chunkIndex,\n uniqueID,\n receivedChunk: !!req.file\n }\n };\n reportDebug({\n namespace,\n message: `Missing required fields`,\n data: {\n status: 'failed',\n details: {\n filename,\n totalChunks,\n chunkIndex,\n uniqueID\n }\n }\n });\n return next();\n }\n\n const sessionFolder = path.join(TEMP_DIR, uniqueID);\n fs.ensureDirSync(sessionFolder);\n\n const chunkPath = path.join(\n sessionFolder,\n `${filename}.part${chunkIndex}`\n );\n\n try {\n await fs.writeFile(chunkPath, req.file.buffer);\n } catch (writeErr) {\n reportError(\n `Failed to write chunk ${chunkIndex}: ${(writeErr as Error).message}`\n );\n return next(writeErr);\n }\n\n const uploadedChunks = await fs.readdir(sessionFolder);\n\n if (uploadedChunks.length === parseInt(totalChunks, 10)) {\n reportDebug({\n namespace,\n message: `All chunks uploaded. Merging file...`\n });\n\n try {\n await mergeChunks(filename, totalChunks, sessionFolder);\n } catch (mergeErr) {\n reportError(`File merging failed: ${(mergeErr as Error).message}`);\n return next(mergeErr);\n }\n\n const finalFilePath = path.join(sessionFolder, filename);\n\n if (!fs.existsSync(finalFilePath)) {\n reportError('File merging failed: File does not exist');\n return next(new Error('File merging failed'));\n }\n\n req.body.uploadDetails = {\n status: 'completed',\n message: 'File uploaded and merged successfully',\n details: { filename, uniqueID }\n };\n reportDebug({\n namespace,\n message: `File merged successfully`,\n data: {\n status: 'completed',\n details: { filename, uniqueID }\n }\n });\n\n return next();\n }\n\n reportDebug({\n namespace,\n message: `Chunk uploaded successfully`,\n data: {\n filename,\n uniqueID,\n chunkIndex,\n totalChunks\n }\n });\n\n req.body.uploadDetails = {\n status: 'pending',\n message: 'Chunk uploaded successfully',\n details: { filename, uniqueID, chunkIndex, totalChunks }\n };\n\n return next();\n });\n } catch (error) {\n reportError(\n `Failed to upload or process chunk: ${(error as Error).message}`\n );\n next(error);\n }\n}\n\nasync function mergeChunks(\n filename: string,\n totalChunks: string | number,\n sessionFolder: string\n): Promise<void> {\n const finalFilePath = path.join(sessionFolder, filename);\n const writeStream = fs.createWriteStream(finalFilePath);\n\n for (let i = 0; i < parseInt(totalChunks as string, 10); i++) {\n const partPath = path.join(sessionFolder, `${filename}.part${i}`);\n\n try {\n const chunkData = await fs.readFile(partPath);\n writeStream.write(chunkData);\n } catch (error) {\n reportError(`Error reading chunk ${i}: ${(error as Error).message}`);\n throw error;\n }\n\n fs.remove(partPath).catch((err: Error) =>\n reportError(`Error removing part ${partPath}: ${err.message}`)\n );\n }\n\n writeStream.end();\n\n return new Promise<void>((resolve, reject) => {\n writeStream.on('finish', () => resolve(undefined));\n writeStream.on('error', (error) => {\n reportError(`Error merging chunks: ${(error as Error).message}`);\n reject(error);\n });\n });\n}\n\nexport { multiPartFileUploader };\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"createHttpServer.js","names":["_fs","_interopRequireDefault","require","_http","_https","_createHttpServer","createHttpServer","handler","validateHttpEnvironment","process","env","TLS_SERVER_KEY","TLS_SERVER_CERT","createSecureServer","key","fs","readFileSync","passphrase","TLS_SERVER_KEY_PASSPHRASE","cert","ca","TLS_CA","undefined","requestCert","rejectUnauthorized","createServerHttp2"],"sources":["../../../src/utils/createHttpServer/createHttpServer.ts"],"sourcesContent":["import fs from 'fs';\nimport { RequestListener, Server } from 'http';\nimport { createServer as createServerHttp2 } from 'http';\nimport {\n createServer as createSecureServer,\n Server as SecureServer\n} from 'https';\nimport { Application } from 'express';\nimport { validateHttpEnvironment } from './createHttpServer.validate';\n\n/** Create and configure an http/https server */\nexport function createHttpServer(\n handler?: Application | RequestListener\n): Server | SecureServer {\n // Validate the environment variables\n validateHttpEnvironment();\n // Create a https server if env var are specified\n if (process.env.TLS_SERVER_KEY && process.env.TLS_SERVER_CERT) {\n return createSecureServer(\n {\n key: fs.readFileSync(process.env.TLS_SERVER_KEY),\n passphrase: process.env.TLS_SERVER_KEY_PASSPHRASE,\n cert: fs.readFileSync(process.env.TLS_SERVER_CERT),\n ca: process.env.TLS_CA\n ? fs.readFileSync(process.env.TLS_CA)\n : undefined,\n requestCert: true,\n rejectUnauthorized: false\n },\n handler\n );\n } else {\n return createServerHttp2(handler);\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAKA,IAAAG,iBAAA,GAAAH,OAAA;AAEA;AACO,SAASI,gBAAgBA,CAC9BC,OAAuC,EAChB;EACvB;EACA,IAAAC,yCAAuB,EAAC,CAAC;EACzB;EACA,IAAIC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAIF,OAAO,CAACC,GAAG,CAACE,eAAe,EAAE;IAC7D,OAAO,IAAAC,mBAAkB,EACvB;MACEC,GAAG,EAAEC,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACC,cAAc,CAAC;MAChDM,UAAU,EAAER,OAAO,CAACC,GAAG,CAACQ,yBAAyB;MACjDC,IAAI,EAAEJ,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACE,eAAe,CAAC;MAClDQ,EAAE,EAAEX,OAAO,CAACC,GAAG,CAACW,MAAM,GAClBN,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACW,MAAM,CAAC,GACnCC,SAAS;MACbC,WAAW,EAAE,IAAI;MACjBC,kBAAkB,EAAE;IACtB,CAAC,EACDjB,OACF,CAAC;EACH,CAAC,MAAM;IACL,OAAO,IAAAkB,kBAAiB,EAAClB,OAAO,CAAC;EACnC;AACF","ignoreList":[]}
1
+ {"version":3,"file":"createHttpServer.js","names":["_fs","_interopRequireDefault","require","_http","_https","_createHttpServer","createHttpServer","handler","validateHttpEnvironment","process","env","TLS_SERVER_KEY","TLS_SERVER_CERT","createSecureServer","key","fs","readFileSync","passphrase","TLS_SERVER_KEY_PASSPHRASE","cert","ca","TLS_CA","undefined","requestCert","rejectUnauthorized","createServer"],"sources":["../../../src/utils/createHttpServer/createHttpServer.ts"],"sourcesContent":["import fs from 'fs';\nimport { createServer, RequestListener, Server } from 'http';\nimport {\n createServer as createSecureServer,\n Server as SecureServer\n} from 'https';\nimport { Application } from 'express';\nimport { validateHttpEnvironment } from './createHttpServer.validate';\n\n/** Create and configure an http/https server */\nexport function createHttpServer(\n handler?: Application | RequestListener\n): Server | SecureServer {\n // Validate the environment variables\n validateHttpEnvironment();\n // Create a https server if env var are specified\n if (process.env.TLS_SERVER_KEY && process.env.TLS_SERVER_CERT) {\n return createSecureServer(\n {\n key: fs.readFileSync(process.env.TLS_SERVER_KEY),\n passphrase: process.env.TLS_SERVER_KEY_PASSPHRASE,\n cert: fs.readFileSync(process.env.TLS_SERVER_CERT),\n ca: process.env.TLS_CA\n ? fs.readFileSync(process.env.TLS_CA)\n : undefined,\n requestCert: true,\n rejectUnauthorized: false\n },\n handler\n );\n } else {\n return createServer(handler);\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAKA,IAAAG,iBAAA,GAAAH,OAAA;AAEA;AACO,SAASI,gBAAgBA,CAC9BC,OAAuC,EAChB;EACvB;EACA,IAAAC,yCAAuB,EAAC,CAAC;EACzB;EACA,IAAIC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAIF,OAAO,CAACC,GAAG,CAACE,eAAe,EAAE;IAC7D,OAAO,IAAAC,mBAAkB,EACvB;MACEC,GAAG,EAAEC,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACC,cAAc,CAAC;MAChDM,UAAU,EAAER,OAAO,CAACC,GAAG,CAACQ,yBAAyB;MACjDC,IAAI,EAAEJ,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACE,eAAe,CAAC;MAClDQ,EAAE,EAAEX,OAAO,CAACC,GAAG,CAACW,MAAM,GAClBN,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACW,MAAM,CAAC,GACnCC,SAAS;MACbC,WAAW,EAAE,IAAI;MACjBC,kBAAkB,EAAE;IACtB,CAAC,EACDjB,OACF,CAAC;EACH,CAAC,MAAM;IACL,OAAO,IAAAkB,kBAAY,EAAClB,OAAO,CAAC;EAC9B;AACF","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ export declare function geminiFileUpload(buffer: Buffer, mimeType: string, originalName: string): Promise<{
2
+ success: true;
3
+ originalname: string;
4
+ fileUri: string;
5
+ mimeType: string;
6
+ } | {
7
+ success: false;
8
+ error: unknown;
9
+ }>;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.geminiFileUpload = geminiFileUpload;
8
+ var _server = require("@google/generative-ai/server");
9
+ var _fs = _interopRequireDefault(require("fs"));
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var _tmp = _interopRequireDefault(require("tmp"));
12
+ var _report = require("../report");
13
+ const namespace = 'engine:utils:geminiFileUpload';
14
+ const apiKey = process.env.GOOGLE_AI_KEY;
15
+ if (!apiKey) {
16
+ throw new Error('GOOGLE_AI_KEY is not set in environment variables');
17
+ }
18
+ const fileManager = new _server.GoogleAIFileManager(apiKey);
19
+ async function geminiFileUpload(buffer, mimeType, originalName) {
20
+ let tempFile;
21
+ try {
22
+ // 1. Create Temp File
23
+ tempFile = _tmp.default.fileSync({
24
+ postfix: _path.default.extname(originalName)
25
+ });
26
+ _fs.default.writeFileSync(tempFile.name, buffer);
27
+
28
+ // 2. Upload File
29
+ const uploadResult = await fileManager.uploadFile(tempFile.name, {
30
+ mimeType,
31
+ displayName: originalName
32
+ });
33
+ if (!uploadResult || !uploadResult.file) {
34
+ throw new Error('Upload failed: No file returned');
35
+ }
36
+ const file = uploadResult.file;
37
+ (0, _report.reportDebug)({
38
+ namespace,
39
+ message: 'Uploaded file successfully',
40
+ data: {
41
+ displayName: file.displayName,
42
+ name: file.name
43
+ }
44
+ });
45
+ (0, _report.reportDebug)({
46
+ namespace,
47
+ message: 'Waiting for file processing...'
48
+ });
49
+
50
+ // 3. Poll Until File is Processed
51
+ let geminiFile = await fileManager.getFile(file.name);
52
+ while (geminiFile?.state === 'PROCESSING') {
53
+ process.stdout.write('.');
54
+ await new Promise(resolve => setTimeout(resolve, 10000));
55
+ geminiFile = await fileManager.getFile(file.name);
56
+ }
57
+ if (!geminiFile || geminiFile.state !== 'ACTIVE') {
58
+ const errorMessage = `File processing failed for ${file.name}`;
59
+ (0, _report.reportError)(errorMessage);
60
+ return {
61
+ success: false,
62
+ error: new Error(errorMessage)
63
+ };
64
+ }
65
+ (0, _report.reportDebug)({
66
+ namespace,
67
+ message: 'File is ready'
68
+ });
69
+ return {
70
+ success: true,
71
+ originalname: file.name,
72
+ fileUri: file.uri,
73
+ mimeType: file.mimeType
74
+ };
75
+ } catch (error) {
76
+ (0, _report.reportError)({
77
+ namespace,
78
+ message: 'Error during Gemini file upload and processing',
79
+ error
80
+ });
81
+ return {
82
+ success: false,
83
+ error
84
+ };
85
+ } finally {
86
+ // Ensure cleanup of temp file
87
+ if (tempFile) {
88
+ try {
89
+ tempFile.removeCallback();
90
+ } catch (cleanupError) {
91
+ (0, _report.reportError)({
92
+ namespace,
93
+ message: 'Error cleaning up temp file',
94
+ error: cleanupError
95
+ });
96
+ }
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=geminiFileUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geminiFileUpload.js","names":["_server","require","_fs","_interopRequireDefault","_path","_tmp","_report","namespace","apiKey","process","env","GOOGLE_AI_KEY","Error","fileManager","GoogleAIFileManager","geminiFileUpload","buffer","mimeType","originalName","tempFile","tmp","fileSync","postfix","path","extname","fs","writeFileSync","name","uploadResult","uploadFile","displayName","file","reportDebug","message","data","geminiFile","getFile","state","stdout","write","Promise","resolve","setTimeout","errorMessage","reportError","success","error","originalname","fileUri","uri","removeCallback","cleanupError"],"sources":["../../../src/utils/geminiFileUpload/geminiFileUpload.ts"],"sourcesContent":["import { GoogleAIFileManager } from '@google/generative-ai/server';\nimport fs from 'fs';\nimport path from 'path';\nimport tmp from 'tmp';\nimport { reportError, reportDebug } from 'utils/report';\n\nconst namespace = 'engine:utils:geminiFileUpload';\n\nconst apiKey = process.env.GOOGLE_AI_KEY;\nif (!apiKey) {\n throw new Error('GOOGLE_AI_KEY is not set in environment variables');\n}\n\nconst fileManager = new GoogleAIFileManager(apiKey);\n\nexport async function geminiFileUpload(\n buffer: Buffer,\n mimeType: string,\n originalName: string\n): Promise<\n | { success: true; originalname: string; fileUri: string; mimeType: string }\n | { success: false; error: unknown }\n> {\n let tempFile;\n try {\n // 1. Create Temp File\n tempFile = tmp.fileSync({ postfix: path.extname(originalName) });\n fs.writeFileSync(tempFile.name, buffer);\n\n // 2. Upload File\n const uploadResult = await fileManager.uploadFile(tempFile.name, {\n mimeType,\n displayName: originalName\n });\n\n if (!uploadResult || !uploadResult.file) {\n throw new Error('Upload failed: No file returned');\n }\n\n const file = uploadResult.file;\n reportDebug({\n namespace,\n message: 'Uploaded file successfully',\n data: { displayName: file.displayName, name: file.name }\n });\n\n reportDebug({\n namespace,\n message: 'Waiting for file processing...'\n });\n\n // 3. Poll Until File is Processed\n let geminiFile = await fileManager.getFile(file.name);\n while (geminiFile?.state === 'PROCESSING') {\n process.stdout.write('.');\n await new Promise((resolve) => setTimeout(resolve, 10000));\n geminiFile = await fileManager.getFile(file.name);\n }\n\n if (!geminiFile || geminiFile.state !== 'ACTIVE') {\n const errorMessage = `File processing failed for ${file.name}`;\n reportError(errorMessage);\n return { success: false, error: new Error(errorMessage) };\n }\n\n reportDebug({\n namespace,\n message: 'File is ready'\n });\n\n return {\n success: true,\n originalname: file.name,\n fileUri: file.uri,\n mimeType: file.mimeType\n };\n } catch (error) {\n reportError({\n namespace,\n message: 'Error during Gemini file upload and processing',\n error\n });\n return { success: false, error };\n } finally {\n // Ensure cleanup of temp file\n if (tempFile) {\n try {\n tempFile.removeCallback();\n } catch (cleanupError) {\n reportError({\n namespace,\n message: 'Error cleaning up temp file',\n error: cleanupError\n });\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export * from './geminiFileUpload';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _geminiFileUpload = require("./geminiFileUpload");
7
+ Object.keys(_geminiFileUpload).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _geminiFileUpload[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _geminiFileUpload[key];
14
+ }
15
+ });
16
+ });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_geminiFileUpload","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/utils/geminiFileUpload/index.ts"],"sourcesContent":["export * from './geminiFileUpload';\n"],"mappings":";;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,iBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,iBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,iBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -14,3 +14,4 @@ export * from './tlsRequest';
14
14
  export * from './sendPush';
15
15
  export * from './sendEmail';
16
16
  export * from './trimPathSlash';
17
+ export * from './geminiFileUpload';
@@ -179,4 +179,15 @@ Object.keys(_trimPathSlash).forEach(function (key) {
179
179
  }
180
180
  });
181
181
  });
182
+ var _geminiFileUpload = require("./geminiFileUpload");
183
+ Object.keys(_geminiFileUpload).forEach(function (key) {
184
+ if (key === "default" || key === "__esModule") return;
185
+ if (key in exports && exports[key] === _geminiFileUpload[key]) return;
186
+ Object.defineProperty(exports, key, {
187
+ enumerable: true,
188
+ get: function () {
189
+ return _geminiFileUpload[key];
190
+ }
191
+ });
192
+ });
182
193
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_report","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_filter","_semverCompare","_dbMigration","_checkEnvironment","_envAssert","_createSortedObject","_jwt","_hmac","_createHttpServer","_request","_tlsConfig","_tlsRequest","_sendPush","_sendEmail","_trimPathSlash"],"sources":["../../src/utils/index.ts"],"sourcesContent":["// general\nexport * from './report';\nexport * from './filter';\nexport * from './semverCompare';\nexport * from './dbMigration';\n\n// env\nexport * from './checkEnvironment';\nexport * from './envAssert';\n\n// auth\nexport * from './createSortedObject';\nexport * from './jwt';\nexport * from './hmac';\n\n// Networking\nexport * from './createHttpServer';\nexport * from './request';\nexport * from './tlsConfig';\nexport * from './tlsRequest';\nexport * from './sendPush';\nexport * from './sendEmail';\n\n// String manipulation\nexport * from './trimPathSlash';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_report","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_filter","_semverCompare","_dbMigration","_checkEnvironment","_envAssert","_createSortedObject","_jwt","_hmac","_createHttpServer","_request","_tlsConfig","_tlsRequest","_sendPush","_sendEmail","_trimPathSlash","_geminiFileUpload"],"sources":["../../src/utils/index.ts"],"sourcesContent":["// general\nexport * from './report';\nexport * from './filter';\nexport * from './semverCompare';\nexport * from './dbMigration';\n\n// env\nexport * from './checkEnvironment';\nexport * from './envAssert';\n\n// auth\nexport * from './createSortedObject';\nexport * from './jwt';\nexport * from './hmac';\n\n// Networking\nexport * from './createHttpServer';\nexport * from './request';\nexport * from './tlsConfig';\nexport * from './tlsRequest';\nexport * from './sendPush';\nexport * from './sendEmail';\n\n// String manipulation\nexport * from './trimPathSlash';\n\n// File Upload\nexport * from './geminiFileUpload';\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-server-engine",
3
- "version": "1.2.4",
3
+ "version": "1.2.5",
4
4
  "description": "Framework used to develop backend services. This package ships with a lot of features to standardize the creation of services, letting you focus on the business logic.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -59,6 +59,7 @@
59
59
  "filesize-parser": "^1.5.1",
60
60
  "flat": "^6.0.1",
61
61
  "form-data": "^4.0.1",
62
+ "fs-extra": "^11.3.0",
62
63
  "glob": "^11.0.0",
63
64
  "intl-messageformat": "^10.7.10",
64
65
  "ioredis": "^5.4.2",
@@ -110,6 +111,7 @@
110
111
  "@types/express": "^5.0.0",
111
112
  "@types/filesize-parser": "^1.5.3",
112
113
  "@types/flat": "^5.0.5",
114
+ "@types/fs-extra": "^11.0.4",
113
115
  "@types/glob": "^8.1.0",
114
116
  "@types/json-stringify-safe": "^5.0.3",
115
117
  "@types/jsonwebtoken": "^9.0.7",
@@ -120,12 +120,6 @@ export class Server {
120
120
  })
121
121
  );
122
122
 
123
- // Use the limit value from the .env file
124
- const uploadLimit = process.env.UPLOAD_LIMIT || '100mb';
125
-
126
- this.app.use(express.json({ limit: uploadLimit }));
127
- this.app.use(express.urlencoded({ limit: uploadLimit, extended: true }));
128
-
129
123
  this.registerMiddleware(this.app);
130
124
  this.httpServer = createHttpServer(this.app);
131
125
 
@@ -1,70 +1,12 @@
1
1
  import express from 'express';
2
2
  import multer from 'multer';
3
- import { GoogleAIFileManager } from '@google/generative-ai/server';
4
- import fs from 'fs';
5
- import path from 'path';
6
- import tmp from 'tmp';
7
- import { reportError, reportDebug } from 'utils/report';
3
+ import { reportError, geminiFileUpload, reportDebug } from 'utils';
8
4
  import { checkEnvironment } from 'utils/checkEnvironment';
9
5
  import { envAssert } from 'utils/envAssert';
10
6
 
11
7
  const namespace = 'engine:middleware:geminiFileUploader';
12
-
13
- const apiKey = process.env.GOOGLE_AI_KEY ?? '';
14
- const fileManager = new GoogleAIFileManager(apiKey);
15
-
16
8
  const storage = multer.memoryStorage();
17
9
 
18
- async function uploadToGemini(
19
- buffer: Buffer,
20
- mimeType: string,
21
- originalName: string
22
- ): Promise<{ name: string; uri: string; mimeType: string }> {
23
- // Add 'name' to the return type
24
- const tempFile = tmp.fileSync({ postfix: path.extname(originalName) });
25
-
26
- fs.writeFileSync(tempFile.name, buffer);
27
-
28
- const uploadResult = await fileManager.uploadFile(tempFile.name, {
29
- mimeType,
30
- displayName: originalName
31
- });
32
-
33
- tempFile.removeCallback();
34
-
35
- const file = uploadResult.file;
36
- reportDebug({
37
- namespace,
38
- message: 'Uploaded file',
39
- data: { displayName: file.displayName, name: file.name }
40
- });
41
- return { name: file.name, uri: file.uri, mimeType: file.mimeType }; // Include 'name' in the return object
42
- }
43
-
44
- async function waitForFilesActive(
45
- files: { name: string; uri: string; mimeType: string }[]
46
- ): Promise<void> {
47
- reportDebug({
48
- namespace,
49
- message: 'Waiting for file processing...'
50
- });
51
- for (const { name } of files) {
52
- let file = await fileManager.getFile(name);
53
- while (file.state === 'PROCESSING') {
54
- process.stdout.write('.');
55
- await new Promise((resolve) => setTimeout(resolve, 10_000));
56
- file = await fileManager.getFile(name);
57
- }
58
- if (file.state !== 'ACTIVE') {
59
- reportError(`File ${file.name} failed to process`);
60
- }
61
- }
62
- reportDebug({
63
- namespace,
64
- message: 'all files ready...\n'
65
- });
66
- }
67
-
68
10
  export async function geminiFileUploader(
69
11
  req: express.Request,
70
12
  res: express.Response,
@@ -92,22 +34,31 @@ export async function geminiFileUploader(
92
34
  }
93
35
  const mimeType = file.mimetype;
94
36
 
95
- const uploadedFile = await uploadToGemini(
37
+ reportDebug({
38
+ namespace,
39
+ message: 'Upload to Gemini AI',
40
+ data: {
41
+ hasBuffer: !!file.buffer,
42
+ mimeType,
43
+ originalFileName: file.originalname
44
+ }
45
+ });
46
+
47
+ const fileResponse = await geminiFileUpload(
96
48
  file.buffer,
97
49
  mimeType,
98
50
  file.originalname
99
51
  );
100
52
 
101
- await waitForFilesActive([uploadedFile]);
53
+ reportDebug({
54
+ namespace,
55
+ message: 'File Uploaded to Gemini AI',
56
+ data: fileResponse
57
+ });
102
58
 
103
- // Set the fileUri and mimeType in the request object for the next middleware/route handler
104
- req.body.file = {
105
- fileUri: uploadedFile.uri,
106
- mimeType: uploadedFile.mimeType,
107
- originalname: file.originalname
108
- };
59
+ req.body.file = fileResponse;
109
60
 
110
- next(); // Proceed to the next middleware or route handler
61
+ next();
111
62
  });
112
63
  } catch (error) {
113
64
  console.error(error);
@@ -14,3 +14,4 @@ export * from './requestMetrics';
14
14
  export * from './version';
15
15
  export * from './geminiFileUploader';
16
16
  export * from './checkPermission';
17
+ export * from './multiPartFileUploader';
@@ -0,0 +1 @@
1
+ export * from './multiPartFileUploader';