@things-factory/integration-sftp 4.3.660 → 4.3.667
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/CHANGELOG.md +369 -0
- package/dist-server/controllers/herbalife/herbalife.js +9 -5
- package/dist-server/controllers/herbalife/herbalife.js.map +1 -1
- package/dist-server/controllers/index.js +1 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/sftp-api/index.js +7 -0
- package/dist-server/controllers/sftp-api/index.js.map +1 -1
- package/dist-server/controllers/yltc/apis/create-yltc-inventory-report.js +40 -0
- package/dist-server/controllers/yltc/apis/create-yltc-inventory-report.js.map +1 -0
- package/dist-server/controllers/yltc/apis/echo.js +19 -0
- package/dist-server/controllers/yltc/apis/echo.js.map +1 -0
- package/dist-server/controllers/yltc/apis/index.js +19 -0
- package/dist-server/controllers/yltc/apis/index.js.map +1 -0
- package/dist-server/controllers/yltc/index.js +34 -0
- package/dist-server/controllers/yltc/index.js.map +1 -0
- package/dist-server/controllers/yltc/platform-action.js +30 -0
- package/dist-server/controllers/yltc/platform-action.js.map +1 -0
- package/dist-server/controllers/yltc/yltc.js +71 -0
- package/dist-server/controllers/yltc/yltc.js.map +1 -0
- package/dist-server/service/sftp/sftp-mutation.js +15 -8
- package/dist-server/service/sftp/sftp-mutation.js.map +1 -1
- package/dist-server/service/sftp/sftp.js +41 -0
- package/dist-server/service/sftp/sftp.js.map +1 -1
- package/dist-server/sftp-const.js +36 -2
- package/dist-server/sftp-const.js.map +1 -1
- package/dist-server/storage/providers/ftp-storage.provider.js +178 -0
- package/dist-server/storage/providers/ftp-storage.provider.js.map +1 -0
- package/dist-server/storage/providers/local-storage.provider.js +153 -0
- package/dist-server/storage/providers/local-storage.provider.js.map +1 -0
- package/dist-server/storage/providers/s3-storage.provider.js +181 -0
- package/dist-server/storage/providers/s3-storage.provider.js.map +1 -0
- package/dist-server/storage/providers/sftp-storage.provider.js +133 -0
- package/dist-server/storage/providers/sftp-storage.provider.js.map +1 -0
- package/dist-server/storage/storage-factory.js +55 -0
- package/dist-server/storage/storage-factory.js.map +1 -0
- package/dist-server/storage/storage-manager.js +86 -0
- package/dist-server/storage/storage-manager.js.map +1 -0
- package/dist-server/storage/storage-provider.interface.js +3 -0
- package/dist-server/storage/storage-provider.interface.js.map +1 -0
- package/dist-server/util/file-formatters.js +100 -0
- package/dist-server/util/file-formatters.js.map +1 -0
- package/dist-server/util/generate-files.js +77 -17
- package/dist-server/util/generate-files.js.map +1 -1
- package/dist-server/util/get-permitted-directories.js +9 -5
- package/dist-server/util/get-permitted-directories.js.map +1 -1
- package/package.json +6 -3
- package/server/controllers/herbalife/herbalife.ts +11 -6
- package/server/controllers/index.ts +1 -0
- package/server/controllers/sftp-api/index.ts +3 -0
- package/server/controllers/yltc/apis/create-yltc-inventory-report.ts +37 -0
- package/server/controllers/yltc/apis/echo.ts +14 -0
- package/server/controllers/yltc/apis/index.ts +2 -0
- package/server/controllers/yltc/index.ts +7 -0
- package/server/controllers/yltc/platform-action.ts +34 -0
- package/server/controllers/yltc/yltc.ts +93 -0
- package/server/service/sftp/sftp-mutation.ts +16 -10
- package/server/service/sftp/sftp.ts +34 -0
- package/server/sftp-const.ts +41 -1
- package/server/storage/providers/ftp-storage.provider.ts +177 -0
- package/server/storage/providers/local-storage.provider.ts +159 -0
- package/server/storage/providers/s3-storage.provider.ts +214 -0
- package/server/storage/providers/sftp-storage.provider.ts +157 -0
- package/server/storage/storage-factory.ts +62 -0
- package/server/storage/storage-manager.ts +103 -0
- package/server/storage/storage-provider.interface.ts +42 -0
- package/server/util/file-formatters.ts +97 -0
- package/server/util/generate-files.ts +79 -17
- package/server/util/get-permitted-directories.ts +11 -7
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.LocalStorageProvider = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const env_1 = require("@things-factory/env");
|
|
30
|
+
class LocalStorageProvider {
|
|
31
|
+
constructor(config) {
|
|
32
|
+
this.connected = false;
|
|
33
|
+
this.config = config;
|
|
34
|
+
}
|
|
35
|
+
async connect() {
|
|
36
|
+
try {
|
|
37
|
+
const basePath = this.config.basePath || './storage';
|
|
38
|
+
// Ensure base directory exists
|
|
39
|
+
if (!fs.existsSync(basePath)) {
|
|
40
|
+
fs.mkdirSync(basePath, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
this.connected = true;
|
|
43
|
+
env_1.logger.info('Local Storage Provider connected successfully');
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
this.connected = false;
|
|
47
|
+
throw new Error(`Failed to connect to Local Storage: ${error}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async disconnect() {
|
|
51
|
+
this.connected = false;
|
|
52
|
+
env_1.logger.info('Local Storage Provider disconnected');
|
|
53
|
+
}
|
|
54
|
+
isConnected() {
|
|
55
|
+
return this.connected;
|
|
56
|
+
}
|
|
57
|
+
async readFile(filePath, encoding) {
|
|
58
|
+
const fullPath = this.getFullPath(filePath);
|
|
59
|
+
if (encoding) {
|
|
60
|
+
return fs.readFileSync(fullPath, encoding);
|
|
61
|
+
}
|
|
62
|
+
return fs.readFileSync(fullPath);
|
|
63
|
+
}
|
|
64
|
+
async writeFile(filePath, content, encoding) {
|
|
65
|
+
const fullPath = this.getFullPath(filePath);
|
|
66
|
+
// Ensure directory exists
|
|
67
|
+
const dir = path.dirname(fullPath);
|
|
68
|
+
if (!fs.existsSync(dir)) {
|
|
69
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
70
|
+
}
|
|
71
|
+
if (encoding) {
|
|
72
|
+
fs.writeFileSync(fullPath, content, encoding);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
fs.writeFileSync(fullPath, content);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async uploadFile(params) {
|
|
79
|
+
const fullPath = this.getFullPath(`${params.uploadPath}/${params.filename}`);
|
|
80
|
+
// Ensure directory exists
|
|
81
|
+
const dir = path.dirname(fullPath);
|
|
82
|
+
if (!fs.existsSync(dir)) {
|
|
83
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
84
|
+
}
|
|
85
|
+
let size = 0;
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
const writeStream = fs.createWriteStream(fullPath);
|
|
88
|
+
params.stream
|
|
89
|
+
.pipe(writeStream)
|
|
90
|
+
.on('error', (error) => reject(error))
|
|
91
|
+
.on('data', (chunk) => (size += chunk.length))
|
|
92
|
+
.on('finish', () => {
|
|
93
|
+
resolve({
|
|
94
|
+
id: Date.now().toString(),
|
|
95
|
+
path: params.uploadPath,
|
|
96
|
+
size
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async deleteFile(filePath) {
|
|
102
|
+
const fullPath = this.getFullPath(filePath);
|
|
103
|
+
fs.unlinkSync(fullPath);
|
|
104
|
+
}
|
|
105
|
+
async moveFile(params) {
|
|
106
|
+
const sourcePath = this.getFullPath(params.source);
|
|
107
|
+
const destPath = this.getFullPath(params.destination);
|
|
108
|
+
// Ensure destination directory exists
|
|
109
|
+
const dir = path.dirname(destPath);
|
|
110
|
+
if (!fs.existsSync(dir)) {
|
|
111
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
fs.renameSync(sourcePath, destPath);
|
|
114
|
+
}
|
|
115
|
+
async readFolders(params) {
|
|
116
|
+
const fullPath = this.getFullPath(params.path);
|
|
117
|
+
if (!fs.existsSync(fullPath)) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
const items = fs.readdirSync(fullPath, { withFileTypes: true });
|
|
121
|
+
return items
|
|
122
|
+
.filter(item => item.isFile())
|
|
123
|
+
.map(item => ({
|
|
124
|
+
Key: path.join(params.path, item.name),
|
|
125
|
+
Size: fs.statSync(path.join(fullPath, item.name)).size
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
async createDirectory(dirPath) {
|
|
129
|
+
const fullPath = this.getFullPath(dirPath);
|
|
130
|
+
fs.mkdirSync(fullPath, { recursive: true });
|
|
131
|
+
}
|
|
132
|
+
async deleteDirectory(dirPath) {
|
|
133
|
+
const fullPath = this.getFullPath(dirPath);
|
|
134
|
+
fs.rmSync(fullPath, { recursive: true, force: true });
|
|
135
|
+
}
|
|
136
|
+
async fileExists(filePath) {
|
|
137
|
+
const fullPath = this.getFullPath(filePath);
|
|
138
|
+
return fs.existsSync(fullPath) && fs.statSync(fullPath).isFile();
|
|
139
|
+
}
|
|
140
|
+
async getFileSize(filePath) {
|
|
141
|
+
const fullPath = this.getFullPath(filePath);
|
|
142
|
+
const stats = fs.statSync(fullPath);
|
|
143
|
+
return stats.size;
|
|
144
|
+
}
|
|
145
|
+
getFullPath(filePath) {
|
|
146
|
+
if (this.config.basePath) {
|
|
147
|
+
return path.resolve(this.config.basePath, filePath);
|
|
148
|
+
}
|
|
149
|
+
return path.resolve(filePath);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.LocalStorageProvider = LocalStorageProvider;
|
|
153
|
+
//# sourceMappingURL=local-storage.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-storage.provider.js","sourceRoot":"","sources":["../../../server/storage/providers/local-storage.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,2CAA4B;AAE5B,6CAA4C;AAE5C,MAAa,oBAAoB;IAI/B,YAAY,MAAqB;QAFzB,cAAS,GAAY,KAAK,CAAA;QAGhC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAA;YAEpD,+BAA+B;YAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC5B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;aAC5C;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,YAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;SAC7D;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;YACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAA;SAChE;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,YAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACpD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,QAAiB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAE3C,IAAI,QAAQ,EAAE;YACZ,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,QAA0B,CAAC,CAAA;SAC7D;QAED,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,OAAY,EAAE,QAAiB;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAE3C,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;SACvC;QAED,IAAI,QAAQ,EAAE;YACZ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,QAA0B,CAAC,CAAA;SAChE;aAAM;YACL,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;SACpC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAIhB;QACC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAE5E,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;SACvC;QAED,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,OAAO,IAAI,OAAO,CAA6C,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjF,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAElD,MAAM,CAAC,MAAM;iBACV,IAAI,CAAC,WAAW,CAAC;iBACjB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC1C,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;iBAClD,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACjB,OAAO,CAAC;oBACN,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;oBACzB,IAAI,EAAE,MAAM,CAAC,UAAU;oBACvB,IAAI;iBACL,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC3C,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+C;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAErD,sCAAsC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;SACvC;QAED,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAwB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC5B,OAAO,EAAE,CAAA;SACV;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/D,OAAO,KAAK;aACT,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACZ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;YACtC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SACvD,CAAC,CAAC,CAAA;IACP,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1C,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1C,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC3C,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACnC,OAAO,KAAK,CAAC,IAAI,CAAA;IACnB,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;SACpD;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;CACF;AAzJD,oDAyJC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.S3StorageProvider = void 0;
|
|
7
|
+
const aws_sdk_1 = __importDefault(require("aws-sdk"));
|
|
8
|
+
const uuid_1 = require("uuid");
|
|
9
|
+
const env_1 = require("@things-factory/env");
|
|
10
|
+
const { PassThrough } = require('stream');
|
|
11
|
+
class S3StorageProvider {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.connected = false;
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.s3 = new aws_sdk_1.default.S3({
|
|
16
|
+
accessKeyId: config.accessKeyId,
|
|
17
|
+
secretAccessKey: config.secretAccessKey,
|
|
18
|
+
region: config.region
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async connect() {
|
|
22
|
+
try {
|
|
23
|
+
// Assume client ready; defer validation to first real operation (write/read)
|
|
24
|
+
this.connected = true;
|
|
25
|
+
env_1.logger.info('S3 Storage Provider ready');
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
this.connected = false;
|
|
29
|
+
throw new Error(`Failed to initialize S3 client: ${error}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async disconnect() {
|
|
33
|
+
this.connected = false;
|
|
34
|
+
env_1.logger.info('S3 Storage Provider disconnected');
|
|
35
|
+
}
|
|
36
|
+
isConnected() {
|
|
37
|
+
return this.connected;
|
|
38
|
+
}
|
|
39
|
+
async readFile(path, encoding) {
|
|
40
|
+
const result = await this.s3
|
|
41
|
+
.getObject({
|
|
42
|
+
Bucket: this.config.bucketName,
|
|
43
|
+
Key: path
|
|
44
|
+
})
|
|
45
|
+
.promise();
|
|
46
|
+
const body = result.Body;
|
|
47
|
+
if (encoding) {
|
|
48
|
+
return body.toString(encoding);
|
|
49
|
+
}
|
|
50
|
+
return body;
|
|
51
|
+
}
|
|
52
|
+
async writeFile(path, content, encoding) {
|
|
53
|
+
let body;
|
|
54
|
+
if (typeof content === 'string' && encoding) {
|
|
55
|
+
body = Buffer.from(content, encoding);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
body = Buffer.from(content);
|
|
59
|
+
}
|
|
60
|
+
const putParams = {
|
|
61
|
+
Bucket: this.config.bucketName,
|
|
62
|
+
Key: path,
|
|
63
|
+
Body: body
|
|
64
|
+
};
|
|
65
|
+
// Optional SSE if configured via env/config
|
|
66
|
+
const sse = this.config.serverSideEncryption;
|
|
67
|
+
const kmsKeyId = this.config.sseKmsKeyId;
|
|
68
|
+
if (sse) {
|
|
69
|
+
putParams.ServerSideEncryption = sse;
|
|
70
|
+
if (sse === 'aws:kms' && kmsKeyId) {
|
|
71
|
+
putParams.SSEKMSKeyId = kmsKeyId;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
await this.s3.putObject(putParams).promise();
|
|
75
|
+
}
|
|
76
|
+
async uploadFile(params) {
|
|
77
|
+
const id = (0, uuid_1.v4)();
|
|
78
|
+
let size = 0;
|
|
79
|
+
return new Promise((resolve, reject) => params.stream
|
|
80
|
+
.pipe((() => {
|
|
81
|
+
var pass = new PassThrough();
|
|
82
|
+
this.s3.upload({
|
|
83
|
+
Bucket: this.config.bucketName,
|
|
84
|
+
Key: params.uploadPath + '/' + params.filename,
|
|
85
|
+
Body: pass,
|
|
86
|
+
ServerSideEncryption: this.config.serverSideEncryption,
|
|
87
|
+
SSEKMSKeyId: this.config.sseKmsKeyId
|
|
88
|
+
}, (err, data) => (err ? reject(err) : resolve({ id, path: params.uploadPath, size })));
|
|
89
|
+
return pass;
|
|
90
|
+
})())
|
|
91
|
+
.on('error', error => reject(error))
|
|
92
|
+
.on('data', chunk => (size += chunk.length)));
|
|
93
|
+
}
|
|
94
|
+
async deleteFile(path) {
|
|
95
|
+
await this.s3
|
|
96
|
+
.deleteObject({
|
|
97
|
+
Bucket: this.config.bucketName,
|
|
98
|
+
Key: path
|
|
99
|
+
})
|
|
100
|
+
.promise();
|
|
101
|
+
}
|
|
102
|
+
async moveFile(params) {
|
|
103
|
+
try {
|
|
104
|
+
// Copy file to new location
|
|
105
|
+
await this.s3
|
|
106
|
+
.copyObject({
|
|
107
|
+
Bucket: this.config.bucketName,
|
|
108
|
+
CopySource: this.config.bucketName + '/' + params.source,
|
|
109
|
+
Key: params.destination
|
|
110
|
+
})
|
|
111
|
+
.promise();
|
|
112
|
+
// Delete original file
|
|
113
|
+
await this.deleteFile(params.source);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
throw new Error(`Failed to move file: ${error}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async readFolders(params) {
|
|
120
|
+
const s3Params = {
|
|
121
|
+
Bucket: this.config.bucketName,
|
|
122
|
+
Delimiter: '/',
|
|
123
|
+
Prefix: params.path
|
|
124
|
+
};
|
|
125
|
+
const result = await this.s3.listObjects(s3Params).promise();
|
|
126
|
+
return result.Contents || [];
|
|
127
|
+
}
|
|
128
|
+
async createDirectory(path) {
|
|
129
|
+
// S3 doesn't have real directories, but we can create an empty object
|
|
130
|
+
await this.s3
|
|
131
|
+
.putObject({
|
|
132
|
+
Bucket: this.config.bucketName,
|
|
133
|
+
Key: path.endsWith('/') ? path : path + '/',
|
|
134
|
+
Body: ''
|
|
135
|
+
})
|
|
136
|
+
.promise();
|
|
137
|
+
}
|
|
138
|
+
async deleteDirectory(path) {
|
|
139
|
+
// List all objects with the prefix and delete them
|
|
140
|
+
const objects = await this.s3
|
|
141
|
+
.listObjects({
|
|
142
|
+
Bucket: this.config.bucketName,
|
|
143
|
+
Prefix: path
|
|
144
|
+
})
|
|
145
|
+
.promise();
|
|
146
|
+
if (objects.Contents && objects.Contents.length > 0) {
|
|
147
|
+
const deleteParams = {
|
|
148
|
+
Bucket: this.config.bucketName,
|
|
149
|
+
Delete: {
|
|
150
|
+
Objects: objects.Contents.map(obj => ({ Key: obj.Key }))
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
await this.s3.deleteObjects(deleteParams).promise();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async fileExists(path) {
|
|
157
|
+
try {
|
|
158
|
+
await this.s3
|
|
159
|
+
.headObject({
|
|
160
|
+
Bucket: this.config.bucketName,
|
|
161
|
+
Key: path
|
|
162
|
+
})
|
|
163
|
+
.promise();
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async getFileSize(path) {
|
|
171
|
+
const result = await this.s3
|
|
172
|
+
.headObject({
|
|
173
|
+
Bucket: this.config.bucketName,
|
|
174
|
+
Key: path
|
|
175
|
+
})
|
|
176
|
+
.promise();
|
|
177
|
+
return result.ContentLength || 0;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.S3StorageProvider = S3StorageProvider;
|
|
181
|
+
//# sourceMappingURL=s3-storage.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-storage.provider.js","sourceRoot":"","sources":["../../../server/storage/providers/s3-storage.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SftpStorageProvider = void 0;
|
|
7
|
+
const ssh2_sftp_client_1 = __importDefault(require("ssh2-sftp-client"));
|
|
8
|
+
const env_1 = require("@things-factory/env");
|
|
9
|
+
class SftpStorageProvider {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.connected = false;
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.sftp = new ssh2_sftp_client_1.default();
|
|
14
|
+
}
|
|
15
|
+
async connect() {
|
|
16
|
+
try {
|
|
17
|
+
const connectionConfig = {
|
|
18
|
+
host: this.config.host,
|
|
19
|
+
port: this.config.port || 22,
|
|
20
|
+
username: this.config.username,
|
|
21
|
+
password: this.config.password,
|
|
22
|
+
privateKey: this.config.privateKey,
|
|
23
|
+
readyTimeout: this.config.timeout || 20000,
|
|
24
|
+
retries: this.config.retries || 3
|
|
25
|
+
};
|
|
26
|
+
await this.sftp.connect(connectionConfig);
|
|
27
|
+
this.connected = true;
|
|
28
|
+
env_1.logger.info('SFTP Storage Provider connected successfully');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
this.connected = false;
|
|
32
|
+
throw new Error(`Failed to connect to SFTP: ${error}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async disconnect() {
|
|
36
|
+
if (this.connected) {
|
|
37
|
+
await this.sftp.end();
|
|
38
|
+
this.connected = false;
|
|
39
|
+
env_1.logger.info('SFTP Storage Provider disconnected');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
isConnected() {
|
|
43
|
+
return this.connected;
|
|
44
|
+
}
|
|
45
|
+
async readFile(path, encoding) {
|
|
46
|
+
const fullPath = this.getFullPath(path);
|
|
47
|
+
const buffer = await this.sftp.get(fullPath);
|
|
48
|
+
if (encoding) {
|
|
49
|
+
return buffer.toString(encoding);
|
|
50
|
+
}
|
|
51
|
+
return buffer;
|
|
52
|
+
}
|
|
53
|
+
async writeFile(path, content, encoding) {
|
|
54
|
+
const fullPath = this.getFullPath(path);
|
|
55
|
+
const buffer = Buffer.from(content);
|
|
56
|
+
await this.sftp.put(buffer, fullPath);
|
|
57
|
+
}
|
|
58
|
+
async uploadFile(params) {
|
|
59
|
+
const fullPath = this.getFullPath(`${params.uploadPath}/${params.filename}`);
|
|
60
|
+
let size = 0;
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const uploadStream = this.sftp.createWriteStream(fullPath);
|
|
63
|
+
// Safety timeout to avoid hanging indefinitely
|
|
64
|
+
const timeoutMs = this.config.timeout || 30000;
|
|
65
|
+
const timer = setTimeout(() => {
|
|
66
|
+
reject(new Error(`SFTP upload timed out for ${fullPath}`));
|
|
67
|
+
}, timeoutMs);
|
|
68
|
+
const onResolve = () => {
|
|
69
|
+
clearTimeout(timer);
|
|
70
|
+
resolve({ id: Date.now().toString(), path: params.uploadPath, size });
|
|
71
|
+
};
|
|
72
|
+
uploadStream.on('error', (error) => {
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
reject(error);
|
|
75
|
+
});
|
|
76
|
+
uploadStream.on('close', onResolve);
|
|
77
|
+
uploadStream.on('finish', onResolve);
|
|
78
|
+
params.stream
|
|
79
|
+
.on('error', (error) => {
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
reject(error);
|
|
82
|
+
})
|
|
83
|
+
.on('data', (chunk) => (size += chunk.length))
|
|
84
|
+
.pipe(uploadStream);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async deleteFile(path) {
|
|
88
|
+
const fullPath = this.getFullPath(path);
|
|
89
|
+
await this.sftp.delete(fullPath);
|
|
90
|
+
}
|
|
91
|
+
async moveFile(params) {
|
|
92
|
+
const sourcePath = this.getFullPath(params.source);
|
|
93
|
+
const destPath = this.getFullPath(params.destination);
|
|
94
|
+
await this.sftp.rename(sourcePath, destPath);
|
|
95
|
+
}
|
|
96
|
+
async readFolders(params) {
|
|
97
|
+
const fullPath = this.getFullPath(params.path);
|
|
98
|
+
const list = await this.sftp.list(fullPath);
|
|
99
|
+
return list.filter(item => item.type === '-'); // Only files, not directories
|
|
100
|
+
}
|
|
101
|
+
async createDirectory(path) {
|
|
102
|
+
const fullPath = this.getFullPath(path);
|
|
103
|
+
await this.sftp.mkdir(fullPath, true); // true for recursive
|
|
104
|
+
}
|
|
105
|
+
async deleteDirectory(path) {
|
|
106
|
+
const fullPath = this.getFullPath(path);
|
|
107
|
+
await this.sftp.rmdir(fullPath, true); // true for recursive
|
|
108
|
+
}
|
|
109
|
+
async fileExists(path) {
|
|
110
|
+
try {
|
|
111
|
+
const fullPath = this.getFullPath(path);
|
|
112
|
+
await this.sftp.stat(fullPath);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async getFileSize(path) {
|
|
120
|
+
const fullPath = this.getFullPath(path);
|
|
121
|
+
const stats = await this.sftp.stat(fullPath);
|
|
122
|
+
return stats.size;
|
|
123
|
+
}
|
|
124
|
+
getFullPath(path) {
|
|
125
|
+
if (this.config.basePath) {
|
|
126
|
+
const base = this.config.basePath.startsWith('/') ? this.config.basePath : `/${this.config.basePath}`;
|
|
127
|
+
return `${base}/${path}`.replace(/\/+/g, '/');
|
|
128
|
+
}
|
|
129
|
+
return path.startsWith('/') ? path : `/${path}`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.SftpStorageProvider = SftpStorageProvider;
|
|
133
|
+
//# sourceMappingURL=sftp-storage.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sftp-storage.provider.js","sourceRoot":"","sources":["../../../server/storage/providers/sftp-storage.provider.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAqC;AAErC,6CAA4C;AAE5C,MAAa,mBAAmB;IAK9B,YAAY,MAAqB;QAFzB,cAAS,GAAY,KAAK,CAAA;QAGhC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,0BAAM,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI;YACF,MAAM,gBAAgB,GAAG;gBACvB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAK;gBACvB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;gBAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAS;gBAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBAClC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;gBAC1C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC;aAClC,CAAA;YAED,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;YACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,YAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;SAC5D;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;YACtB,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAA;SACvD;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;YACtB,YAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;SAClD;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,QAAiB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAE5C,IAAI,QAAQ,EAAE;YACZ,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;SACjC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAY,EAAE,QAAiB;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEnC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAIhB;QACC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5E,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,OAAO,IAAI,OAAO,CAA6C,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAE1D,+CAA+C;YAC/C,MAAM,SAAS,GAAI,IAAI,CAAC,MAAM,CAAC,OAAkB,IAAI,KAAK,CAAA;YAC1D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC5D,CAAC,EAAE,SAAS,CAAC,CAAA;YAEb,MAAM,SAAS,GAAG,GAAG,EAAE;gBACrB,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;YACvE,CAAC,CAAA;YAED,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;gBACtC,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;YACF,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YACnC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAEpC,MAAM,CAAC,MAAM;iBACV,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;gBAC1B,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC,CAAC;iBACD,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;iBAClD,IAAI,CAAC,YAAY,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+C;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAErD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAwB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE3C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA,CAAC,8BAA8B;IAC9E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA,CAAC,qBAAqB;IAC7D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA,CAAC,qBAAqB;IAC7D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACvC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC9B,OAAO,IAAI,CAAA;SACZ;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,KAAK,CAAA;SACb;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAA;IACnB,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YACrG,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;SAC9C;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IACjD,CAAC;CACF;AAxJD,kDAwJC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageFactory = void 0;
|
|
4
|
+
const s3_storage_provider_1 = require("./providers/s3-storage.provider");
|
|
5
|
+
const sftp_storage_provider_1 = require("./providers/sftp-storage.provider");
|
|
6
|
+
const ftp_storage_provider_1 = require("./providers/ftp-storage.provider");
|
|
7
|
+
const local_storage_provider_1 = require("./providers/local-storage.provider");
|
|
8
|
+
class StorageFactory {
|
|
9
|
+
static createProvider(config) {
|
|
10
|
+
const key = this.generateConfigKey(config);
|
|
11
|
+
if (this.providers.has(key)) {
|
|
12
|
+
return this.providers.get(key);
|
|
13
|
+
}
|
|
14
|
+
let provider;
|
|
15
|
+
switch (config.type) {
|
|
16
|
+
case 's3':
|
|
17
|
+
provider = new s3_storage_provider_1.S3StorageProvider(config);
|
|
18
|
+
break;
|
|
19
|
+
case 'sftp':
|
|
20
|
+
provider = new sftp_storage_provider_1.SftpStorageProvider(config);
|
|
21
|
+
break;
|
|
22
|
+
case 'ftp':
|
|
23
|
+
provider = new ftp_storage_provider_1.FtpStorageProvider(config);
|
|
24
|
+
break;
|
|
25
|
+
case 'local':
|
|
26
|
+
provider = new local_storage_provider_1.LocalStorageProvider(config);
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
throw new Error(`Unsupported storage type: ${config.type}`);
|
|
30
|
+
}
|
|
31
|
+
this.providers.set(key, provider);
|
|
32
|
+
return provider;
|
|
33
|
+
}
|
|
34
|
+
static async getProvider(config) {
|
|
35
|
+
const provider = this.createProvider(config);
|
|
36
|
+
if (!provider.isConnected()) {
|
|
37
|
+
await provider.connect();
|
|
38
|
+
}
|
|
39
|
+
return provider;
|
|
40
|
+
}
|
|
41
|
+
static async disconnectAll() {
|
|
42
|
+
for (const provider of this.providers.values()) {
|
|
43
|
+
if (provider.isConnected()) {
|
|
44
|
+
await provider.disconnect();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
this.providers.clear();
|
|
48
|
+
}
|
|
49
|
+
static generateConfigKey(config) {
|
|
50
|
+
return `${config.type}-${config.host || config.bucketName || 'local'}-${config.username || 'default'}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.StorageFactory = StorageFactory;
|
|
54
|
+
StorageFactory.providers = new Map();
|
|
55
|
+
//# sourceMappingURL=storage-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-factory.js","sourceRoot":"","sources":["../../server/storage/storage-factory.ts"],"names":[],"mappings":";;;AACA,yEAAmE;AACnE,6EAAuE;AACvE,2EAAqE;AACrE,+EAAyE;AAEzE,MAAa,cAAc;IAGzB,MAAM,CAAC,cAAc,CAAC,MAAqB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAE1C,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;SAChC;QAED,IAAI,QAAyB,CAAA;QAE7B,QAAQ,MAAM,CAAC,IAAI,EAAE;YACnB,KAAK,IAAI;gBACP,QAAQ,GAAG,IAAI,uCAAiB,CAAC,MAAM,CAAC,CAAA;gBACxC,MAAK;YACP,KAAK,MAAM;gBACT,QAAQ,GAAG,IAAI,2CAAmB,CAAC,MAAM,CAAC,CAAA;gBAC1C,MAAK;YACP,KAAK,KAAK;gBACR,QAAQ,GAAG,IAAI,yCAAkB,CAAC,MAAM,CAAC,CAAA;gBACzC,MAAK;YACP,KAAK,OAAO;gBACV,QAAQ,GAAG,IAAI,6CAAoB,CAAC,MAAM,CAAC,CAAA;gBAC3C,MAAK;YACP;gBACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;SAC9D;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACjC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAqB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAE5C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE;YAC3B,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAA;SACzB;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa;QACxB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE;YAC9C,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE;gBAC1B,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAA;aAC5B;SACF;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,MAAqB;QACpD,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,OAAO,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAA;IACxG,CAAC;;AAtDH,wCAuDC;AAtDgB,wBAAS,GAAiC,IAAI,GAAG,EAAE,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageManager = void 0;
|
|
4
|
+
const storage_factory_1 = require("./storage-factory");
|
|
5
|
+
const env_1 = require("@things-factory/env");
|
|
6
|
+
class StorageManager {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.providers = new Map();
|
|
9
|
+
}
|
|
10
|
+
static getInstance() {
|
|
11
|
+
if (!StorageManager.instance) {
|
|
12
|
+
StorageManager.instance = new StorageManager();
|
|
13
|
+
}
|
|
14
|
+
return StorageManager.instance;
|
|
15
|
+
}
|
|
16
|
+
async getProvider(config) {
|
|
17
|
+
const key = this.generateConfigKey(config);
|
|
18
|
+
if (!this.providers.has(key)) {
|
|
19
|
+
const provider = storage_factory_1.StorageFactory.createProvider(config);
|
|
20
|
+
await provider.connect();
|
|
21
|
+
this.providers.set(key, provider);
|
|
22
|
+
env_1.logger.info(`Storage provider created for: ${key}`);
|
|
23
|
+
}
|
|
24
|
+
const provider = this.providers.get(key);
|
|
25
|
+
// Reconnect if the cached provider has been disconnected (e.g., idle timeout)
|
|
26
|
+
if (!provider.isConnected()) {
|
|
27
|
+
env_1.logger.info(`Storage provider re-connecting: ${key}`);
|
|
28
|
+
await provider.connect();
|
|
29
|
+
}
|
|
30
|
+
return provider;
|
|
31
|
+
}
|
|
32
|
+
async readFile(config, path, encoding) {
|
|
33
|
+
const provider = await this.getProvider(config);
|
|
34
|
+
return await provider.readFile(path, encoding);
|
|
35
|
+
}
|
|
36
|
+
async writeFile(config, path, content, encoding) {
|
|
37
|
+
const provider = await this.getProvider(config);
|
|
38
|
+
await provider.writeFile(path, content, encoding);
|
|
39
|
+
}
|
|
40
|
+
async uploadFile(config, params) {
|
|
41
|
+
const provider = await this.getProvider(config);
|
|
42
|
+
return await provider.uploadFile(params);
|
|
43
|
+
}
|
|
44
|
+
async deleteFile(config, path) {
|
|
45
|
+
const provider = await this.getProvider(config);
|
|
46
|
+
await provider.deleteFile(path);
|
|
47
|
+
}
|
|
48
|
+
async moveFile(config, params) {
|
|
49
|
+
const provider = await this.getProvider(config);
|
|
50
|
+
await provider.moveFile(params);
|
|
51
|
+
}
|
|
52
|
+
async readFolders(config, params) {
|
|
53
|
+
const provider = await this.getProvider(config);
|
|
54
|
+
return await provider.readFolders(params);
|
|
55
|
+
}
|
|
56
|
+
async createDirectory(config, path) {
|
|
57
|
+
const provider = await this.getProvider(config);
|
|
58
|
+
await provider.createDirectory(path);
|
|
59
|
+
}
|
|
60
|
+
async deleteDirectory(config, path) {
|
|
61
|
+
const provider = await this.getProvider(config);
|
|
62
|
+
await provider.deleteDirectory(path);
|
|
63
|
+
}
|
|
64
|
+
async fileExists(config, path) {
|
|
65
|
+
const provider = await this.getProvider(config);
|
|
66
|
+
return await provider.fileExists(path);
|
|
67
|
+
}
|
|
68
|
+
async getFileSize(config, path) {
|
|
69
|
+
const provider = await this.getProvider(config);
|
|
70
|
+
return await provider.getFileSize(path);
|
|
71
|
+
}
|
|
72
|
+
async disconnectAll() {
|
|
73
|
+
for (const [key, provider] of this.providers.entries()) {
|
|
74
|
+
if (provider.isConnected()) {
|
|
75
|
+
await provider.disconnect();
|
|
76
|
+
env_1.logger.info(`Storage provider disconnected: ${key}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.providers.clear();
|
|
80
|
+
}
|
|
81
|
+
generateConfigKey(config) {
|
|
82
|
+
return `${config.type}-${config.host || config.bucketName || 'local'}-${config.username || 'default'}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.StorageManager = StorageManager;
|
|
86
|
+
//# sourceMappingURL=storage-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-manager.js","sourceRoot":"","sources":["../../server/storage/storage-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-provider.interface.js","sourceRoot":"","sources":["../../server/storage/storage-provider.interface.ts"],"names":[],"mappings":""}
|