@activepieces/piece-sftp 0.4.11 → 0.5.1
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/package.json +16 -22
- package/src/index.d.ts +2 -27
- package/src/index.d.ts.map +1 -0
- package/src/index.js +7 -228
- package/src/index.js.map +1 -1
- package/src/lib/actions/common.d.ts +1 -0
- package/src/lib/actions/common.d.ts.map +1 -0
- package/src/lib/actions/common.js.map +1 -1
- package/src/lib/actions/create-file.d.ts +1 -0
- package/src/lib/actions/create-file.d.ts.map +1 -0
- package/src/lib/actions/create-file.js +10 -8
- package/src/lib/actions/create-file.js.map +1 -1
- package/src/lib/actions/create-folder.d.ts +1 -0
- package/src/lib/actions/create-folder.d.ts.map +1 -0
- package/src/lib/actions/create-folder.js +3 -1
- package/src/lib/actions/create-folder.js.map +1 -1
- package/src/lib/actions/delete-file.d.ts +1 -0
- package/src/lib/actions/delete-file.d.ts.map +1 -0
- package/src/lib/actions/delete-file.js +10 -8
- package/src/lib/actions/delete-file.js.map +1 -1
- package/src/lib/actions/delete-folder.d.ts +1 -0
- package/src/lib/actions/delete-folder.d.ts.map +1 -0
- package/src/lib/actions/delete-folder.js +10 -8
- package/src/lib/actions/delete-folder.js.map +1 -1
- package/src/lib/actions/list-files.d.ts +1 -0
- package/src/lib/actions/list-files.d.ts.map +1 -0
- package/src/lib/actions/list-files.js +10 -9
- package/src/lib/actions/list-files.js.map +1 -1
- package/src/lib/actions/read-file.d.ts +1 -0
- package/src/lib/actions/read-file.d.ts.map +1 -0
- package/src/lib/actions/read-file.js +10 -9
- package/src/lib/actions/read-file.js.map +1 -1
- package/src/lib/actions/rename-file-or-folder.d.ts +2 -1
- package/src/lib/actions/rename-file-or-folder.d.ts.map +1 -0
- package/src/lib/actions/rename-file-or-folder.js +10 -9
- package/src/lib/actions/rename-file-or-folder.js.map +1 -1
- package/src/lib/actions/upload-file.d.ts +1 -0
- package/src/lib/actions/upload-file.d.ts.map +1 -0
- package/src/lib/actions/upload-file.js +10 -8
- package/src/lib/actions/upload-file.js.map +1 -1
- package/src/lib/auth.d.ts +12 -0
- package/src/lib/auth.d.ts.map +1 -0
- package/src/lib/auth.js +121 -0
- package/src/lib/auth.js.map +1 -0
- package/src/lib/common.d.ts +17 -0
- package/src/lib/common.d.ts.map +1 -0
- package/src/lib/common.js +116 -0
- package/src/lib/common.js.map +1 -0
- package/src/lib/triggers/new-modified-file.d.ts +1 -0
- package/src/lib/triggers/new-modified-file.d.ts.map +1 -0
- package/src/lib/triggers/new-modified-file.js +6 -5
- package/src/lib/triggers/new-modified-file.js.map +1 -1
- package/README.md +0 -7
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getProtocolBackwardCompatibility = getProtocolBackwardCompatibility;
|
|
4
|
+
exports.getClient = getClient;
|
|
5
|
+
exports.endClient = endClient;
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
const shared_1 = require("@activepieces/shared");
|
|
8
|
+
const ssh2_sftp_client_1 = tslib_1.__importDefault(require("ssh2-sftp-client"));
|
|
9
|
+
const basic_ftp_1 = require("basic-ftp");
|
|
10
|
+
function getProtocolBackwardCompatibility(protocol) {
|
|
11
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
12
|
+
if ((0, shared_1.isNil)(protocol)) {
|
|
13
|
+
return 'sftp';
|
|
14
|
+
}
|
|
15
|
+
return protocol;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function getClient(auth) {
|
|
19
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
const { protocol, host, port, allow_unauthorized_certificates, allow_anonymous_login, username, password, privateKey, algorithm } = auth;
|
|
21
|
+
const protocolBackwardCompatibility = yield getProtocolBackwardCompatibility(protocol);
|
|
22
|
+
if (protocolBackwardCompatibility === 'sftp') {
|
|
23
|
+
const sftp = new ssh2_sftp_client_1.default();
|
|
24
|
+
if (privateKey) {
|
|
25
|
+
// Handle literal \n strings (from users who manually escaped newlines)
|
|
26
|
+
let processedKey = privateKey
|
|
27
|
+
.replace(/\\r\\n/g, '\n')
|
|
28
|
+
.replace(/\\n/g, '\n')
|
|
29
|
+
.replace(/\r\n/g, '\n')
|
|
30
|
+
.replace(/\r/g, '\n')
|
|
31
|
+
.trim();
|
|
32
|
+
// Handle case where browser input converts newlines to spaces
|
|
33
|
+
// Detect if key is on a single line (no newlines) but has PEM markers
|
|
34
|
+
if (!processedKey.includes('\n') && processedKey.match(/-----BEGIN [A-Z0-9 ]+ KEY-----.*-----END [A-Z0-9 ]+ KEY-----/)) {
|
|
35
|
+
// Split on spaces that appear after key markers or base64 content
|
|
36
|
+
// PEM format: header, optional encryption info, blank line, base64 (64 chars/line), footer
|
|
37
|
+
processedKey = processedKey
|
|
38
|
+
// Add newline after BEGIN header
|
|
39
|
+
.replace(/(-----BEGIN [A-Z0-9 ]+ KEY-----)\s+/, '$1\n')
|
|
40
|
+
// Add newline after Proc-Type header
|
|
41
|
+
.replace(/(Proc-Type:\s*\S+)\s+/, '$1\n')
|
|
42
|
+
// Add newline after DEK-Info header (followed by blank line)
|
|
43
|
+
.replace(/(DEK-Info:\s*\S+)\s+/, '$1\n\n')
|
|
44
|
+
// Add newline before END footer
|
|
45
|
+
.replace(/\s+(-----END [A-Z0-9 ]+ KEY-----)/, '\n$1');
|
|
46
|
+
// Now handle the base64 content - split into 64-char lines
|
|
47
|
+
const beginMatch = processedKey.match(/(-----BEGIN [A-Z0-9 ]+ KEY-----\n(?:Proc-Type:[^\n]+\n)?(?:DEK-Info:[^\n]+\n\n)?)/);
|
|
48
|
+
const endMatch = processedKey.match(/(\n-----END [A-Z0-9 ]+ KEY-----)/);
|
|
49
|
+
if (beginMatch && endMatch) {
|
|
50
|
+
const header = beginMatch[1];
|
|
51
|
+
const footer = endMatch[1];
|
|
52
|
+
const base64Content = processedKey
|
|
53
|
+
.replace(header, '')
|
|
54
|
+
.replace(footer, '')
|
|
55
|
+
.replace(/\s+/g, ''); // Remove all whitespace from base64
|
|
56
|
+
// Split base64 into 64-character lines
|
|
57
|
+
const lines = base64Content.match(/.{1,64}/g) || [];
|
|
58
|
+
processedKey = header + lines.join('\n') + footer;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const connectOptions = {
|
|
62
|
+
host,
|
|
63
|
+
port,
|
|
64
|
+
username,
|
|
65
|
+
privateKey: processedKey,
|
|
66
|
+
timeout: 10000,
|
|
67
|
+
};
|
|
68
|
+
if (password) {
|
|
69
|
+
connectOptions.passphrase = password;
|
|
70
|
+
}
|
|
71
|
+
if (algorithm && algorithm.length > 0) {
|
|
72
|
+
connectOptions.algorithms = {
|
|
73
|
+
serverHostKey: algorithm
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
yield sftp.connect(connectOptions);
|
|
77
|
+
}
|
|
78
|
+
else if (password) {
|
|
79
|
+
yield sftp.connect({
|
|
80
|
+
host,
|
|
81
|
+
port,
|
|
82
|
+
username,
|
|
83
|
+
password,
|
|
84
|
+
timeout: 10000,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return sftp;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const ftpClient = new basic_ftp_1.Client();
|
|
91
|
+
yield ftpClient.access({
|
|
92
|
+
host,
|
|
93
|
+
port,
|
|
94
|
+
user: username,
|
|
95
|
+
password,
|
|
96
|
+
secure: protocolBackwardCompatibility === 'ftps',
|
|
97
|
+
secureOptions: {
|
|
98
|
+
rejectUnauthorized: !(allow_unauthorized_certificates !== null && allow_unauthorized_certificates !== void 0 ? allow_unauthorized_certificates : false),
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return ftpClient;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function endClient(client, protocol) {
|
|
106
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
const protocolBackwardCompatibility = yield getProtocolBackwardCompatibility(protocol);
|
|
108
|
+
if (protocolBackwardCompatibility === 'sftp') {
|
|
109
|
+
yield client.end();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
client.close();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/lib/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,3 +52,4 @@ export declare const newOrModifiedFile: import("@activepieces/pieces-framework")
|
|
|
52
52
|
path: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
53
53
|
ignoreHiddenFiles: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
54
54
|
}>;
|
|
55
|
+
//# sourceMappingURL=new-modified-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-modified-file.d.ts","sourceRoot":"","sources":["../../../../src/lib/triggers/new-modified-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,eAAe,EAAqC,MAAM,gCAAgC,CAAC;AAqDnJ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC5B,CAAC"}
|
|
@@ -4,7 +4,8 @@ exports.newOrModifiedFile = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
6
|
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
-
const
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
const auth_1 = require("../auth");
|
|
8
9
|
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
9
10
|
function getModifyTime(file, protocol) {
|
|
10
11
|
return protocol === 'sftp' ?
|
|
@@ -16,8 +17,8 @@ const polling = {
|
|
|
16
17
|
items: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth, propsValue, lastFetchEpochMS }) {
|
|
17
18
|
let client = null;
|
|
18
19
|
try {
|
|
19
|
-
const protocolBackwardCompatibility = yield (0,
|
|
20
|
-
client = yield (0,
|
|
20
|
+
const protocolBackwardCompatibility = yield (0, common_1.getProtocolBackwardCompatibility)(auth.props.protocol);
|
|
21
|
+
client = yield (0, common_1.getClient)(auth.props);
|
|
21
22
|
const files = yield client.list(propsValue.path);
|
|
22
23
|
const filteredFiles = files.filter(file => {
|
|
23
24
|
const modTime = getModifyTime(file, protocolBackwardCompatibility);
|
|
@@ -39,13 +40,13 @@ const polling = {
|
|
|
39
40
|
}
|
|
40
41
|
finally {
|
|
41
42
|
if (client) {
|
|
42
|
-
yield (0,
|
|
43
|
+
yield (0, common_1.endClient)(client, auth.props.protocol);
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
}),
|
|
46
47
|
};
|
|
47
48
|
exports.newOrModifiedFile = (0, pieces_framework_1.createTrigger)({
|
|
48
|
-
auth:
|
|
49
|
+
auth: auth_1.sftpAuth,
|
|
49
50
|
name: 'new_file',
|
|
50
51
|
displayName: 'New File',
|
|
51
52
|
description: 'Trigger when a new file is created or modified.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-modified-file.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"new-modified-file.js","sourceRoot":"","sources":["../../../../src/lib/triggers/new-modified-file.ts"],"names":[],"mappings":"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"}
|