@activepieces/piece-sftp 0.4.9 → 0.4.11
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 +5 -5
- package/src/i18n/de.json +3 -3
- package/src/i18n/es.json +3 -3
- package/src/i18n/fr.json +3 -3
- package/src/i18n/ja.json +3 -3
- package/src/i18n/nl.json +3 -3
- package/src/i18n/pt.json +3 -3
- package/src/i18n/translation.json +3 -3
- package/src/i18n/zh.json +3 -3
- 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,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@activepieces/piece-sftp",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.11",
|
|
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",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"ssh2-sftp-client": "9.1.0",
|
|
19
19
|
"zod": "4.1.13",
|
|
20
20
|
"@activepieces/pieces-common": "0.11.5",
|
|
21
|
-
"@activepieces/pieces-framework": "0.25.
|
|
22
|
-
"@activepieces/shared": "0.
|
|
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/i18n/de.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "Der Host des Servers",
|
|
16
16
|
"The port of the server": "Der Port des Servers",
|
|
17
17
|
"The username to authenticate with": "Benutzername für Authentifizierung",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "Das Passwort
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "Der private Schlüssel
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "Das Passwort für die Authentifizierung. Entweder dieser oder privater Schlüssel wird benötigt. Wenn Sie einen privaten Schlüssel verwenden, wird dieses Feld als Passphrase verwendet, um den Schlüssel zu entschlüsseln.",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "Der private Schlüssel mit dem sich authentifizieren soll. Entweder dieser oder das Passwort wird benötigt.",
|
|
20
|
+
"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).": "Der Hostschlüssel-Algorithmus für SFTP-Verbindung. Nur erforderlich, wenn Sie die Standardalgorithmen überschreiben möchten (z.B. um ssh-dss zu unterstützen).",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
package/src/i18n/es.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "El host del servidor",
|
|
16
16
|
"The port of the server": "El puerto del servidor",
|
|
17
17
|
"The username to authenticate with": "El nombre de usuario con el que autenticar",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "La contraseña
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "La clave privada
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "La contraseña para autenticar. Se requiere esta o la clave privada. Cuando se usa una clave privada, este campo se utiliza como la frase de paso para descifrar la clave.",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "La clave privada para autenticarse. O esto o la contraseña es requerida.",
|
|
20
|
+
"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).": "El algoritmo de clave de host a usar para conexión SFTP. Sólo es necesario si desea sobreescribir los algoritmos por defecto (por ejemplo, para soportar ssh-dss).",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
package/src/i18n/fr.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "L'hôte du serveur",
|
|
16
16
|
"The port of the server": "Le port du serveur",
|
|
17
17
|
"The username to authenticate with": "Le nom d'utilisateur avec lequel s'authentifier",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "Le mot de passe pour s'authentifier. Cette clé ou privée est requise",
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "La clé privée avec laquelle s'authentifier. Soit ceci ou le mot de passe est requis",
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "Le mot de passe pour s'authentifier. Cette clé ou privée est requise. Lorsque vous utilisez une clé privée, ce champ est utilisé comme mot de passe pour déchiffrer la clé.",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "La clé privée avec laquelle s'authentifier. Soit ceci ou le mot de passe est requis.",
|
|
20
|
+
"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).": "L'algorithme de clé d'hôte à utiliser pour la connexion SFTP. Nécessaire uniquement si vous voulez remplacer les algorithmes par défaut (par exemple, pour supporter ssh-dss).",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
package/src/i18n/ja.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "サーバーのホスト",
|
|
16
16
|
"The port of the server": "サーバーのポート",
|
|
17
17
|
"The username to authenticate with": "認証するユーザー名",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "認証用パスワード。これまたは秘密鍵が必要です。",
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "認証用パスワード。これまたは秘密鍵が必要です。 秘密鍵を使用する場合、このフィールドは鍵を復号するためのパスフレーズとして使用されます。",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "この秘密鍵またはパスワードが必要です。",
|
|
20
|
+
"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).": "SFTP 接続に使用するホスト鍵アルゴリズム。デフォルトのアルゴリズムを上書きしたい場合にのみ必要です (ssh-dssをサポートする場合など)。",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
package/src/i18n/nl.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "De host van de server",
|
|
16
16
|
"The port of the server": "De poort van de server",
|
|
17
17
|
"The username to authenticate with": "De gebruikersnaam om mee te verifiëren",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "Het wachtwoord om mee te verifiëren. Of deze of private key is vereist",
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "De geheime sleutel om mee te verifiëren. Of dit of het wachtwoord is vereist",
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "Het wachtwoord om mee te verifiëren. Of deze of private key is vereist. Wanneer u een private key gebruikt, wordt dit veld gebruikt als wachtwoordzin om de sleutel te decoderen.",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "De geheime sleutel om mee te verifiëren. Of dit of het wachtwoord is vereist.",
|
|
20
|
+
"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).": "Het host-sleutel-algoritme dat gebruikt moet worden voor SFTP-verbinding. Alleen nodig als u de standaard algoritmes wilt overschrijven (bijv. om ssh-dss) te ondersteunen.",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
package/src/i18n/pt.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "O host do servidor",
|
|
16
16
|
"The port of the server": "A porta do servidor",
|
|
17
17
|
"The username to authenticate with": "O nome de usuário para autenticar com",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "A senha para autenticação. Ou esta ou chave privada é
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "A chave privada
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "A senha para autenticação. Ou esta ou a chave privada é obrigatória. Ao usar uma chave privada, este campo é usado como a senha para descriptografar a chave.",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "A chave privada com a qual se autenticar. Ou isto ou a senha é necessária.",
|
|
20
|
+
"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).": "O algoritmo da chave de host a ser usado para conexão SFTP. Só é necessário se você deseja substituir os algoritmos padrão (por exemplo, para suportar ssh-dss).",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "The host of the server",
|
|
16
16
|
"The port of the server": "The port of the server",
|
|
17
17
|
"The username to authenticate with": "The username to authenticate with",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "The password to authenticate with. Either this or private key is required",
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "The private key to authenticate with. Either this or password is required",
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "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.",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "The private key to authenticate with. Either this or password is required.",
|
|
20
|
+
"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).": "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).",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
package/src/i18n/zh.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"The host of the server": "The host of the server",
|
|
16
16
|
"The port of the server": "The port of the server",
|
|
17
17
|
"The username to authenticate with": "The username to authenticate with",
|
|
18
|
-
"The password to authenticate with. Either this or private key is required": "The password to authenticate with. Either this or private key is required",
|
|
19
|
-
"The private key to authenticate with. Either this or password is required": "The private key to authenticate with. Either this or password is required",
|
|
20
|
-
"The host key algorithm to use for SFTP
|
|
18
|
+
"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.": "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.",
|
|
19
|
+
"The private key to authenticate with. Either this or password is required.": "The private key to authenticate with. Either this or password is required.",
|
|
20
|
+
"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).": "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).",
|
|
21
21
|
"SFTP": "SFTP",
|
|
22
22
|
"FTP": "FTP",
|
|
23
23
|
"FTPS": "FTPS",
|
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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"}
|