@activepieces/piece-sftp 0.4.8 → 0.4.10
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 +6 -6
- package/src/index.d.ts +2 -1
- package/src/index.js +54 -15
- package/src/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@activepieces/piece-sftp",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.10",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@sinclair/typebox": "0.34.11",
|
|
6
|
+
"@types/ssh2": "1.15.5",
|
|
6
7
|
"ai": "^6.0.0",
|
|
7
|
-
"axios": "1.13.
|
|
8
|
+
"axios": "1.13.5",
|
|
8
9
|
"axios-retry": "4.4.1",
|
|
9
10
|
"basic-ftp": "5.0.5",
|
|
10
11
|
"dayjs": "1.11.9",
|
|
11
12
|
"deepmerge-ts": "7.1.0",
|
|
12
13
|
"form-data": "4.0.4",
|
|
13
|
-
"i18next": "23.13.0",
|
|
14
14
|
"mime-types": "2.1.35",
|
|
15
15
|
"nanoid": "3.3.8",
|
|
16
16
|
"semver": "7.6.0",
|
|
17
17
|
"socket.io-client": "4.8.1",
|
|
18
18
|
"ssh2-sftp-client": "9.1.0",
|
|
19
19
|
"zod": "4.1.13",
|
|
20
|
-
"@activepieces/pieces-common": "0.11.
|
|
21
|
-
"@activepieces/pieces-framework": "0.25.
|
|
22
|
-
"@activepieces/shared": "0.
|
|
20
|
+
"@activepieces/pieces-common": "0.11.5",
|
|
21
|
+
"@activepieces/pieces-framework": "0.25.3",
|
|
22
|
+
"@activepieces/shared": "0.37.0",
|
|
23
23
|
"tslib": "2.6.2"
|
|
24
24
|
},
|
|
25
25
|
"resolutions": {
|
package/src/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Client from 'ssh2-sftp-client';
|
|
2
|
+
import { ServerHostKeyAlgorithm } from 'ssh2';
|
|
2
3
|
import { Client as FTPClient } from 'basic-ftp';
|
|
3
4
|
export declare function getProtocolBackwardCompatibility(protocol: string | undefined): Promise<string>;
|
|
4
5
|
export declare function getClient<T extends Client | FTPClient>(auth: {
|
|
@@ -10,7 +11,7 @@ export declare function getClient<T extends Client | FTPClient>(auth: {
|
|
|
10
11
|
username: string;
|
|
11
12
|
password: string | undefined;
|
|
12
13
|
privateKey: string | undefined;
|
|
13
|
-
algorithm: string[] | undefined;
|
|
14
|
+
algorithm: ServerHostKeyAlgorithm[] | string[] | undefined;
|
|
14
15
|
}): Promise<T>;
|
|
15
16
|
export declare function endClient(client: Client | FTPClient, protocol: string | undefined): Promise<void>;
|
|
16
17
|
export declare const sftpAuth: import("@activepieces/pieces-framework").CustomAuthProperty<{
|
package/src/index.js
CHANGED
|
@@ -32,27 +32,66 @@ function getClient(auth) {
|
|
|
32
32
|
const protocolBackwardCompatibility = yield getProtocolBackwardCompatibility(protocol);
|
|
33
33
|
if (protocolBackwardCompatibility === 'sftp') {
|
|
34
34
|
const sftp = new ssh2_sftp_client_1.default();
|
|
35
|
-
if (
|
|
36
|
-
|
|
35
|
+
if (privateKey) {
|
|
36
|
+
// Handle literal \n strings (from users who manually escaped newlines)
|
|
37
|
+
let processedKey = privateKey
|
|
38
|
+
.replace(/\\r\\n/g, '\n')
|
|
39
|
+
.replace(/\\n/g, '\n')
|
|
40
|
+
.replace(/\r\n/g, '\n')
|
|
41
|
+
.replace(/\r/g, '\n')
|
|
42
|
+
.trim();
|
|
43
|
+
// Handle case where browser input converts newlines to spaces
|
|
44
|
+
// Detect if key is on a single line (no newlines) but has PEM markers
|
|
45
|
+
if (!processedKey.includes('\n') && processedKey.match(/-----BEGIN [A-Z0-9 ]+ KEY-----.*-----END [A-Z0-9 ]+ KEY-----/)) {
|
|
46
|
+
// Split on spaces that appear after key markers or base64 content
|
|
47
|
+
// PEM format: header, optional encryption info, blank line, base64 (64 chars/line), footer
|
|
48
|
+
processedKey = processedKey
|
|
49
|
+
// Add newline after BEGIN header
|
|
50
|
+
.replace(/(-----BEGIN [A-Z0-9 ]+ KEY-----)\s+/, '$1\n')
|
|
51
|
+
// Add newline after Proc-Type header
|
|
52
|
+
.replace(/(Proc-Type:\s*\S+)\s+/, '$1\n')
|
|
53
|
+
// Add newline after DEK-Info header (followed by blank line)
|
|
54
|
+
.replace(/(DEK-Info:\s*\S+)\s+/, '$1\n\n')
|
|
55
|
+
// Add newline before END footer
|
|
56
|
+
.replace(/\s+(-----END [A-Z0-9 ]+ KEY-----)/, '\n$1');
|
|
57
|
+
// Now handle the base64 content - split into 64-char lines
|
|
58
|
+
const beginMatch = processedKey.match(/(-----BEGIN [A-Z0-9 ]+ KEY-----\n(?:Proc-Type:[^\n]+\n)?(?:DEK-Info:[^\n]+\n\n)?)/);
|
|
59
|
+
const endMatch = processedKey.match(/(\n-----END [A-Z0-9 ]+ KEY-----)/);
|
|
60
|
+
if (beginMatch && endMatch) {
|
|
61
|
+
const header = beginMatch[1];
|
|
62
|
+
const footer = endMatch[1];
|
|
63
|
+
const base64Content = processedKey
|
|
64
|
+
.replace(header, '')
|
|
65
|
+
.replace(footer, '')
|
|
66
|
+
.replace(/\s+/g, ''); // Remove all whitespace from base64
|
|
67
|
+
// Split base64 into 64-character lines
|
|
68
|
+
const lines = base64Content.match(/.{1,64}/g) || [];
|
|
69
|
+
processedKey = header + lines.join('\n') + footer;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const connectOptions = {
|
|
37
73
|
host,
|
|
38
74
|
port,
|
|
39
75
|
username,
|
|
40
|
-
|
|
76
|
+
privateKey: processedKey,
|
|
41
77
|
timeout: 10000,
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
78
|
+
};
|
|
79
|
+
if (password) {
|
|
80
|
+
connectOptions.passphrase = password;
|
|
81
|
+
}
|
|
82
|
+
if (algorithm && algorithm.length > 0) {
|
|
83
|
+
connectOptions.algorithms = {
|
|
84
|
+
serverHostKey: algorithm
|
|
85
|
+
};
|
|
47
86
|
}
|
|
87
|
+
yield sftp.connect(connectOptions);
|
|
88
|
+
}
|
|
89
|
+
else if (password) {
|
|
48
90
|
yield sftp.connect({
|
|
49
91
|
host,
|
|
50
92
|
port,
|
|
51
93
|
username,
|
|
52
|
-
|
|
53
|
-
algorithms: {
|
|
54
|
-
serverHostKey: algorithm
|
|
55
|
-
},
|
|
94
|
+
password,
|
|
56
95
|
timeout: 10000,
|
|
57
96
|
});
|
|
58
97
|
}
|
|
@@ -129,17 +168,17 @@ exports.sftpAuth = pieces_framework_1.PieceAuth.CustomAuth({
|
|
|
129
168
|
}),
|
|
130
169
|
password: pieces_framework_1.PieceAuth.SecretText({
|
|
131
170
|
displayName: 'Password',
|
|
132
|
-
description: 'The password to authenticate with. Either this or private key is required',
|
|
171
|
+
description: 'The password to authenticate with. Either this or private key is required. When using a private key, this field is used as the passphrase to decrypt the key.',
|
|
133
172
|
required: false,
|
|
134
173
|
}),
|
|
135
174
|
privateKey: pieces_framework_1.PieceAuth.SecretText({
|
|
136
175
|
displayName: 'Private Key',
|
|
137
|
-
description: 'The private key to authenticate with. Either this or password is required',
|
|
176
|
+
description: 'The private key to authenticate with. Either this or password is required.',
|
|
138
177
|
required: false,
|
|
139
178
|
}),
|
|
140
179
|
algorithm: pieces_framework_1.Property.StaticMultiSelectDropdown({
|
|
141
180
|
displayName: 'Host Key Algorithm',
|
|
142
|
-
description: 'The host key algorithm to use for SFTP
|
|
181
|
+
description: 'The host key algorithm to use for SFTP connection. Only needed if you want to override the default algorithms (e.g., to support ssh-dss).',
|
|
143
182
|
required: false,
|
|
144
183
|
options: {
|
|
145
184
|
options: [
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/sftp/src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/sftp/src/index.ts"],"names":[],"mappings":"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"}
|