n8n-nodes-smbclient 1.0.0
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/.editorconfig +20 -0
- package/.github/workflows/npm-publish.yml +32 -0
- package/.github/workflows/one-shot-npm-publish.yml +30 -0
- package/.prettierrc.js +51 -0
- package/LICENSE.md +19 -0
- package/Readme.md +131 -0
- package/credentials/Smb2Api.credentials.ts +72 -0
- package/credentials/smb2.svg +36 -0
- package/dist/credentials/Smb2Api.credentials.d.ts +7 -0
- package/dist/credentials/Smb2Api.credentials.js +72 -0
- package/dist/credentials/Smb2Api.credentials.js.map +1 -0
- package/dist/credentials/smb2.svg +36 -0
- package/dist/nodes/Smb2/Smb2.node.d.ts +5 -0
- package/dist/nodes/Smb2/Smb2.node.js +174 -0
- package/dist/nodes/Smb2/Smb2.node.js.map +1 -0
- package/dist/nodes/Smb2/Smb2.node.json +19 -0
- package/dist/nodes/Smb2/SmbClientWrapper.d.ts +22 -0
- package/dist/nodes/Smb2/SmbClientWrapper.js +231 -0
- package/dist/nodes/Smb2/SmbClientWrapper.js.map +1 -0
- package/dist/nodes/Smb2/SmbEntryHelpers.d.ts +6 -0
- package/dist/nodes/Smb2/SmbEntryHelpers.js +102 -0
- package/dist/nodes/Smb2/SmbEntryHelpers.js.map +1 -0
- package/dist/nodes/Smb2/interfaces.d.ts +31 -0
- package/dist/nodes/Smb2/interfaces.js +3 -0
- package/dist/nodes/Smb2/interfaces.js.map +1 -0
- package/dist/nodes/Smb2/smb2.svg +36 -0
- package/dist/package.json +67 -0
- package/eslint.config.mjs +174 -0
- package/gulpfile.js +16 -0
- package/index.js +0 -0
- package/nodes/Smb2/Smb2.node.json +19 -0
- package/nodes/Smb2/Smb2.node.ts +184 -0
- package/nodes/Smb2/SmbClientWrapper.ts +285 -0
- package/nodes/Smb2/SmbEntryHelpers.ts +129 -0
- package/nodes/Smb2/interfaces.ts +39 -0
- package/nodes/Smb2/smb2.svg +36 -0
- package/package.json +67 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Smb2 = void 0;
|
|
4
|
+
const SmbEntryHelpers_1 = require("./SmbEntryHelpers");
|
|
5
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
6
|
+
class Smb2 {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.description = {
|
|
9
|
+
displayName: 'SMB2 using smbclient',
|
|
10
|
+
name: 'smb2',
|
|
11
|
+
icon: 'file:smb2.svg',
|
|
12
|
+
group: ['transform'],
|
|
13
|
+
version: 1,
|
|
14
|
+
description: 'Interact with SMB shares using the smbclient CLI',
|
|
15
|
+
defaults: {
|
|
16
|
+
name: 'Smbclient (SMB2) API',
|
|
17
|
+
},
|
|
18
|
+
inputs: ['main'],
|
|
19
|
+
outputs: ['main'],
|
|
20
|
+
credentials: [
|
|
21
|
+
{
|
|
22
|
+
name: 'smb2Api',
|
|
23
|
+
required: true,
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
properties: [
|
|
27
|
+
{
|
|
28
|
+
displayName: 'Smbclient Path',
|
|
29
|
+
name: 'smbclientPath',
|
|
30
|
+
type: 'string',
|
|
31
|
+
default: 'smbclient',
|
|
32
|
+
description: 'Custom path to smbclient binary, if not in PATH',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
displayName: 'Operation',
|
|
36
|
+
name: 'operation',
|
|
37
|
+
type: 'options',
|
|
38
|
+
noDataExpression: true,
|
|
39
|
+
options: [
|
|
40
|
+
{
|
|
41
|
+
name: 'Delete File', value: 'del', description: 'Delete a file',
|
|
42
|
+
action: 'Delete a file'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Get File', value: 'get', description: 'Download a file from SMB',
|
|
46
|
+
action: 'Get a file'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'List Directory', value: 'list', description: 'List a directory',
|
|
50
|
+
action: 'List a directory'
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Make Directory', value: 'mkdir', description: 'Create a directory',
|
|
54
|
+
action: 'Create a directory'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Remove Directory', value: 'rmdir', description: 'Remove a directory',
|
|
58
|
+
action: 'Remove a directory'
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Stat', value: 'stat', description: 'Get file/folder metadata',
|
|
62
|
+
action: 'Get file folder metadata'
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Upload File', value: 'put', description: 'Upload a file',
|
|
66
|
+
action: 'Upload a file'
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
default: 'list',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
displayName: 'Remote Path',
|
|
73
|
+
name: 'remotePath',
|
|
74
|
+
type: 'string',
|
|
75
|
+
default: '/',
|
|
76
|
+
displayOptions: {
|
|
77
|
+
show: {
|
|
78
|
+
operation: ['stat', 'get', 'put', 'del'],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
displayName: 'Directory',
|
|
84
|
+
name: 'directory',
|
|
85
|
+
type: 'string',
|
|
86
|
+
default: '/',
|
|
87
|
+
displayOptions: {
|
|
88
|
+
show: {
|
|
89
|
+
operation: ['list', 'mkdir', 'rmdir'],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
displayName: 'Source',
|
|
95
|
+
name: 'putSource',
|
|
96
|
+
type: 'options',
|
|
97
|
+
options: [
|
|
98
|
+
{ name: 'Binary Property', value: 'binary' },
|
|
99
|
+
{ name: 'Text', value: 'text' },
|
|
100
|
+
],
|
|
101
|
+
default: 'binary',
|
|
102
|
+
displayOptions: { show: { operation: ['put'] } },
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
displayName: 'Binary Property',
|
|
106
|
+
name: 'binaryPropertyName',
|
|
107
|
+
type: 'string',
|
|
108
|
+
default: 'data',
|
|
109
|
+
displayOptions: {
|
|
110
|
+
show: { operation: ['put'], putSource: ['binary'] },
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
displayName: 'Text Content',
|
|
115
|
+
name: 'textContent',
|
|
116
|
+
type: 'string',
|
|
117
|
+
typeOptions: { rows: 4 },
|
|
118
|
+
default: '',
|
|
119
|
+
displayOptions: {
|
|
120
|
+
show: { operation: ['put'], putSource: ['text'] },
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
displayName: 'Binary Property (Output)',
|
|
125
|
+
name: 'outBinaryPropertyName',
|
|
126
|
+
type: 'string',
|
|
127
|
+
default: 'data',
|
|
128
|
+
displayOptions: { show: { operation: ['get'] } },
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
displayName: 'File Name (Output)',
|
|
132
|
+
name: 'outFileName',
|
|
133
|
+
type: 'string',
|
|
134
|
+
default: '',
|
|
135
|
+
placeholder: 'example.txt',
|
|
136
|
+
displayOptions: { show: { operation: ['get'] } },
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
displayName: 'MIME Type (Output)',
|
|
140
|
+
name: 'outMimeType',
|
|
141
|
+
type: 'string',
|
|
142
|
+
default: 'application/octet-stream',
|
|
143
|
+
displayOptions: { show: { operation: ['get'] } },
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
async execute() {
|
|
149
|
+
const op = this.getNodeParameter('operation', 0);
|
|
150
|
+
const handler = SmbEntryHelpers_1.handlers[op];
|
|
151
|
+
if (!handler) {
|
|
152
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unsupported operation: ${op}`);
|
|
153
|
+
}
|
|
154
|
+
const items = this.getInputData();
|
|
155
|
+
const client = await (0, SmbEntryHelpers_1.buildClient)(this);
|
|
156
|
+
const out = [];
|
|
157
|
+
try {
|
|
158
|
+
for (let i = 0; i < items.length; i++) {
|
|
159
|
+
out.push(await handler(this, i, client));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
console.error(err);
|
|
164
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), (err === null || err === void 0 ? void 0 : err.message) || 'SMB operation failed');
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
await client.close().catch(() => {
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return this.prepareOutputData(out);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.Smb2 = Smb2;
|
|
174
|
+
//# sourceMappingURL=Smb2.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Smb2.node.js","sourceRoot":"","sources":["../../../nodes/Smb2/Smb2.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-smbclient.Smb2",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Data & Storage", "Development", "Utility"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://github.com/JimmyMtl/n8n-nodes-smbclient"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"primaryDocumentation": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://github.com/JimmyMtl/n8n-nodes-smbclient"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"alias": ["SMB", "SMB2", "Samba", "SMB3", "CIFS", "Binary", "File", "Transfer"]
|
|
19
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { IExecuteFunctions, INode, ITriggerFunctions } from "n8n-workflow";
|
|
2
|
+
import { Smb2Credentials, SmbListEntry, SmbStat } from "./interfaces";
|
|
3
|
+
export declare function getReadableError(error: any): string;
|
|
4
|
+
export declare class SmbClientWrapper {
|
|
5
|
+
private auth;
|
|
6
|
+
private smbclientPath;
|
|
7
|
+
private node;
|
|
8
|
+
constructor(auth: Smb2Credentials, smbclientPath: string | undefined, node: INode);
|
|
9
|
+
private buildBaseArgs;
|
|
10
|
+
private runOne;
|
|
11
|
+
stat(remotePath: string): Promise<SmbStat>;
|
|
12
|
+
list(dir: string): Promise<SmbListEntry[]>;
|
|
13
|
+
get(remotePath: string, localPath: string): Promise<void>;
|
|
14
|
+
put(localPath: string, remotePath: string): Promise<void>;
|
|
15
|
+
mkdir(remoteDir: string): Promise<void>;
|
|
16
|
+
rmdir(remoteDir: string): Promise<void>;
|
|
17
|
+
del(remotePath: string): Promise<void>;
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare function connectToSmbServer(this: IExecuteFunctions | ITriggerFunctions): Promise<{
|
|
21
|
+
client: SmbClientWrapper;
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SmbClientWrapper = void 0;
|
|
4
|
+
exports.getReadableError = getReadableError;
|
|
5
|
+
exports.connectToSmbServer = connectToSmbServer;
|
|
6
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
7
|
+
const node_util_1 = require("node:util");
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const util_1 = require("util");
|
|
10
|
+
const debug = (0, util_1.debuglog)("n8n-nodes-smbclient");
|
|
11
|
+
const SMB_ERROR_HINTS = [
|
|
12
|
+
[/EACCES/i, "Access Denied - Check your permissions for this file/folder"],
|
|
13
|
+
[/ENOENT/i, "File/Path Not Found"],
|
|
14
|
+
[/ENOTDIR/i, "Not a directory"],
|
|
15
|
+
[/ETIMEOUT/i, "Connection timed out"],
|
|
16
|
+
[/ECONNREFUSED/i, "Could not connect to SMB server - Connection refused"],
|
|
17
|
+
[/LOGON failure/i, "Logon Failure - Check your username, password, and domain"],
|
|
18
|
+
[/bad network name/i, "Bad Network Name - The specified share does not exist on the server"],
|
|
19
|
+
];
|
|
20
|
+
function getReadableError(error) {
|
|
21
|
+
var _a;
|
|
22
|
+
const msg = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : String(error);
|
|
23
|
+
for (const [re, friendly] of SMB_ERROR_HINTS) {
|
|
24
|
+
if (re.test(msg)) {
|
|
25
|
+
return `${friendly} (${msg})`;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return msg;
|
|
29
|
+
}
|
|
30
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
31
|
+
const redactCmd = (s) => {
|
|
32
|
+
if (!s)
|
|
33
|
+
return s;
|
|
34
|
+
s = s.replace(/-U\s+(\S=)/g, '-U ***');
|
|
35
|
+
s = s.replace(/-A\s=\S+/g, '-A ***');
|
|
36
|
+
s = s.replace(/\/\/[^/\s]+\/\S+/g, '//***');
|
|
37
|
+
return s;
|
|
38
|
+
};
|
|
39
|
+
class SmbClientWrapper {
|
|
40
|
+
constructor(auth, smbclientPath = 'smbclient', node) {
|
|
41
|
+
this.auth = auth;
|
|
42
|
+
this.smbclientPath = smbclientPath;
|
|
43
|
+
this.node = node;
|
|
44
|
+
}
|
|
45
|
+
buildBaseArgs() {
|
|
46
|
+
const { host, username, password, domain, share } = this.auth;
|
|
47
|
+
let userPart = '%';
|
|
48
|
+
if (username) {
|
|
49
|
+
if (!domain) {
|
|
50
|
+
userPart = `${username}%${password !== null && password !== void 0 ? password : ''}`;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
userPart = `${domain}/${username}%${password !== null && password !== void 0 ? password : ''}`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const hostPart = `\\\\${host}\\${share}`;
|
|
57
|
+
return [hostPart, '-U', userPart, '-g'];
|
|
58
|
+
}
|
|
59
|
+
async runOne(cmd) {
|
|
60
|
+
var _a, _b;
|
|
61
|
+
const args = [...this.buildBaseArgs(), '-c', cmd];
|
|
62
|
+
try {
|
|
63
|
+
const { stdout, stderr } = await execFileAsync(this.smbclientPath, args, {
|
|
64
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
65
|
+
});
|
|
66
|
+
if (stderr && /NT_STATUS|Error|failed/i.test(stderr)) {
|
|
67
|
+
const { username, password } = this.auth;
|
|
68
|
+
const safeCmd = redactCmd([this.smbclientPath, ...args].join(' ')).replace(username, '***').replace(password, '***');
|
|
69
|
+
throw new n8n_workflow_1.NodeOperationError(this.node, {
|
|
70
|
+
message: `smbclient failed. cmd="${safeCmd}" stderr="${stderr.trim()}"`
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return stdout !== null && stdout !== void 0 ? stdout : '';
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const { username, password } = this.auth;
|
|
77
|
+
const safeCmd = redactCmd((err === null || err === void 0 ? void 0 : err.cmd) || [this.smbclientPath, ...args].join(' ')).replace(username, '***').replace(password, '***');
|
|
78
|
+
const msg = (((_b = (_a = err === null || err === void 0 ? void 0 : err.stderr) === null || _a === void 0 ? void 0 : _a.trim) === null || _b === void 0 ? void 0 : _b.call(_a)) || (err === null || err === void 0 ? void 0 : err.message) || 'smbclient command failed').replace(username, '***').replace(password, '***');
|
|
79
|
+
throw new n8n_workflow_1.NodeOperationError(this.node, {
|
|
80
|
+
message: `smbclient failed. cmd="${safeCmd}" stderr="${String(msg)}`
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async stat(remotePath) {
|
|
85
|
+
var _a, _b, _c, _d, _e;
|
|
86
|
+
const out = await this.runOne(`allinfo "${remotePath}"`);
|
|
87
|
+
const info = new Map();
|
|
88
|
+
for (const line of out.split('\n')) {
|
|
89
|
+
const [k, v] = line.split('|');
|
|
90
|
+
if (k && v !== undefined)
|
|
91
|
+
info.set(k.trim().toUpperCase(), v.trim());
|
|
92
|
+
}
|
|
93
|
+
const attrs = ((_a = info.get('ATTRIBUTES')) !== null && _a !== void 0 ? _a : '').split('').filter(Boolean);
|
|
94
|
+
return {
|
|
95
|
+
size: info.get('SIZE') ? Number(info.get('SIZE')) : undefined,
|
|
96
|
+
createTime: (_b = info.get('CREATE_TIME')) !== null && _b !== void 0 ? _b : undefined,
|
|
97
|
+
accessTime: (_c = info.get('ACCESS_TIME')) !== null && _c !== void 0 ? _c : undefined,
|
|
98
|
+
writeTime: (_d = info.get('WRITE_TIME')) !== null && _d !== void 0 ? _d : undefined,
|
|
99
|
+
changeTime: (_e = info.get('CHANGE_TIME')) !== null && _e !== void 0 ? _e : undefined,
|
|
100
|
+
attributes: attrs,
|
|
101
|
+
isDirectory: attrs.includes('D'),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async list(dir) {
|
|
105
|
+
const out = await this.runOne(`ls "${dir}"`);
|
|
106
|
+
const lines = out
|
|
107
|
+
.split('\n')
|
|
108
|
+
.map((l) => l.trim())
|
|
109
|
+
.filter(Boolean);
|
|
110
|
+
const parsed = lines.map((line) => {
|
|
111
|
+
var _a, _b;
|
|
112
|
+
if (line.includes('|')) {
|
|
113
|
+
const parts = line.split('|');
|
|
114
|
+
if (parts.length >= 5 && /^\d+$/.test(parts[1])) {
|
|
115
|
+
const name = parts[0];
|
|
116
|
+
const size = Number(parts[1]) || 0;
|
|
117
|
+
const date = parts[2];
|
|
118
|
+
const time = parts[3];
|
|
119
|
+
const attr = (_a = parts[4]) !== null && _a !== void 0 ? _a : '';
|
|
120
|
+
const attributes = attr.split('').filter(Boolean);
|
|
121
|
+
return {
|
|
122
|
+
name,
|
|
123
|
+
size,
|
|
124
|
+
date,
|
|
125
|
+
time,
|
|
126
|
+
attributes,
|
|
127
|
+
isDirectory: attributes.includes('D'),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (parts.length >= 5 && /^\d+$/.test(parts[1])) {
|
|
131
|
+
const attr = (_b = parts[0]) !== null && _b !== void 0 ? _b : '';
|
|
132
|
+
const size = Number(parts[1]) || 0;
|
|
133
|
+
const date = parts[2];
|
|
134
|
+
const time = parts[3];
|
|
135
|
+
const name = parts.slice(4).join('|');
|
|
136
|
+
const attributes = attr.split('').filter(Boolean);
|
|
137
|
+
return {
|
|
138
|
+
name,
|
|
139
|
+
size,
|
|
140
|
+
date,
|
|
141
|
+
time,
|
|
142
|
+
attributes,
|
|
143
|
+
isDirectory: attributes.includes('D'),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
name: line,
|
|
148
|
+
size: 0,
|
|
149
|
+
attributes: [],
|
|
150
|
+
isDirectory: false,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const compact = line.replace(/\s+/g, ' ').trim();
|
|
154
|
+
const tokens = compact.split(' ');
|
|
155
|
+
if (tokens.length >= 8) {
|
|
156
|
+
const year = tokens[tokens.length - 1];
|
|
157
|
+
const time = tokens[tokens.length - 2];
|
|
158
|
+
const day = tokens[tokens.length - 3];
|
|
159
|
+
const month = tokens[tokens.length - 4];
|
|
160
|
+
const weekday = tokens[tokens.length - 5];
|
|
161
|
+
const sizeStr = tokens[tokens.length - 6];
|
|
162
|
+
const attr = tokens[tokens.length - 7];
|
|
163
|
+
const name = tokens.slice(0, tokens.length - 7).join(' ');
|
|
164
|
+
const size = Number(sizeStr) || 0;
|
|
165
|
+
const attributes = (attr !== null && attr !== void 0 ? attr : '').split('').filter(Boolean);
|
|
166
|
+
return {
|
|
167
|
+
name,
|
|
168
|
+
size,
|
|
169
|
+
date: `${weekday} ${month} ${day} ${time} ${year}`,
|
|
170
|
+
time,
|
|
171
|
+
attributes,
|
|
172
|
+
isDirectory: attributes.includes('D'),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
name: line,
|
|
177
|
+
size: 0,
|
|
178
|
+
attributes: [],
|
|
179
|
+
isDirectory: false,
|
|
180
|
+
};
|
|
181
|
+
});
|
|
182
|
+
return parsed.filter((entry) => {
|
|
183
|
+
if (!entry)
|
|
184
|
+
return false;
|
|
185
|
+
if (entry.name === '.' || entry.name === '..')
|
|
186
|
+
return false;
|
|
187
|
+
if (/blocks available/i.test(entry.date || '') || /blocks available/i.test(entry.name)) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
if (/^\d+$/.test(entry.name)) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
async get(remotePath, localPath) {
|
|
197
|
+
await this.runOne(`get "${remotePath}" "${localPath}"`);
|
|
198
|
+
}
|
|
199
|
+
async put(localPath, remotePath) {
|
|
200
|
+
await this.runOne(`put "${localPath}" "${remotePath}"`);
|
|
201
|
+
}
|
|
202
|
+
async mkdir(remoteDir) {
|
|
203
|
+
await this.runOne(`mkdir "${remoteDir}"`);
|
|
204
|
+
}
|
|
205
|
+
async rmdir(remoteDir) {
|
|
206
|
+
await this.runOne(`rmdir "${remoteDir}"`);
|
|
207
|
+
}
|
|
208
|
+
async del(remotePath) {
|
|
209
|
+
await this.runOne(`del "${remotePath}"`);
|
|
210
|
+
}
|
|
211
|
+
async close() {
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.SmbClientWrapper = SmbClientWrapper;
|
|
215
|
+
async function connectToSmbServer() {
|
|
216
|
+
var _a;
|
|
217
|
+
try {
|
|
218
|
+
const credentials = (await this.getCredentials("smb2Api"));
|
|
219
|
+
debug("Connecting to //%s/%s as (%s\\%s)", credentials.host, credentials.share, (_a = credentials.domain) !== null && _a !== void 0 ? _a : "", credentials.username);
|
|
220
|
+
const smbclientPath = this.getNodeParameter('smbclientPath', 0, 'smbclient');
|
|
221
|
+
const client = new SmbClientWrapper(credentials, smbclientPath, this.getNode());
|
|
222
|
+
await client.list("");
|
|
223
|
+
return { client };
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
debug("Connect error: %O", error);
|
|
227
|
+
const readableError = getReadableError(error);
|
|
228
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), error, { message: `Failed to connect to SMB server: ${readableError}` });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=SmbClientWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmbClientWrapper.js","sourceRoot":"","sources":["../../../nodes/Smb2/SmbClientWrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IExecuteFunctions } from "n8n-workflow";
|
|
2
|
+
import { SmbClientWrapper } from "./SmbClientWrapper";
|
|
3
|
+
import { Operation, OpHandler } from "./interfaces";
|
|
4
|
+
declare const buildClient: (ctx: IExecuteFunctions) => Promise<SmbClientWrapper>;
|
|
5
|
+
declare const handlers: Record<Operation, OpHandler>;
|
|
6
|
+
export { handlers, buildClient };
|
|
@@ -0,0 +1,102 @@
|
|
|
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.buildClient = exports.handlers = void 0;
|
|
7
|
+
const util_1 = require("util");
|
|
8
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
11
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
12
|
+
const SmbClientWrapper_1 = require("./SmbClientWrapper");
|
|
13
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
14
|
+
const debug = (0, util_1.debuglog)("n8n-nodes-smbclient");
|
|
15
|
+
const str = (ctx, i, name, def = '') => ctx.getNodeParameter(name, i, def);
|
|
16
|
+
const tmpFile = (prefix) => node_path_1.default.join(node_os_1.default.tmpdir(), `n8n-smb-${prefix}-${Date.now()}-${node_crypto_1.default.randomUUID()}`);
|
|
17
|
+
const toBinary = async (ctx, buf, fileName, mime, outProp, extraJson = {}) => {
|
|
18
|
+
const binary = await ctx.helpers.prepareBinaryData(buf, fileName, mime);
|
|
19
|
+
return { json: { fileName, ...extraJson }, binary: { [outProp]: binary } };
|
|
20
|
+
};
|
|
21
|
+
const buildClient = async (ctx) => {
|
|
22
|
+
const smbclientPath = str(ctx, 0, 'smbclientPath', 'smbclient');
|
|
23
|
+
const { host, username, password, domain, share } = (await ctx.getCredentials('smb2Api'));
|
|
24
|
+
debug("Connecting to //%s/%s as (%s\\%s)", host, share, domain !== null && domain !== void 0 ? domain : "", username);
|
|
25
|
+
return new SmbClientWrapper_1.SmbClientWrapper({ host, username, password, domain, share }, smbclientPath, ctx.getNode());
|
|
26
|
+
};
|
|
27
|
+
exports.buildClient = buildClient;
|
|
28
|
+
const handleStat = async (ctx, i, client) => {
|
|
29
|
+
const remotePath = str(ctx, i, 'remotePath');
|
|
30
|
+
const stat = await client.stat(remotePath);
|
|
31
|
+
return { json: { remotePath, ...stat } };
|
|
32
|
+
};
|
|
33
|
+
const handleList = async (ctx, i, client) => {
|
|
34
|
+
const directory = str(ctx, i, 'directory', '/');
|
|
35
|
+
const entries = await client.list(directory);
|
|
36
|
+
const filtered = entries.filter((e) => e &&
|
|
37
|
+
e.name !== '.' &&
|
|
38
|
+
e.name !== '..' &&
|
|
39
|
+
!/blocks available/i.test((e === null || e === void 0 ? void 0 : e.date) || '') &&
|
|
40
|
+
!/^\d+$/.test(e.name));
|
|
41
|
+
return { json: { directory, entries: filtered } };
|
|
42
|
+
};
|
|
43
|
+
const handleGet = async (ctx, i, client) => {
|
|
44
|
+
const remotePath = str(ctx, i, 'remotePath');
|
|
45
|
+
const outProp = str(ctx, i, 'outBinaryPropertyName', 'data');
|
|
46
|
+
const outFile = str(ctx, i, 'outFileName') || node_path_1.default.basename(remotePath);
|
|
47
|
+
const outMime = str(ctx, i, 'outMimeType', 'application/octet-stream');
|
|
48
|
+
const tmp = tmpFile('get');
|
|
49
|
+
await client.get(remotePath, tmp);
|
|
50
|
+
const buf = await promises_1.default.readFile(tmp);
|
|
51
|
+
await promises_1.default.unlink(tmp).catch(() => {
|
|
52
|
+
});
|
|
53
|
+
return toBinary(ctx, buf, outFile, outMime, outProp, { remotePath });
|
|
54
|
+
};
|
|
55
|
+
const handlePut = async (ctx, i, client) => {
|
|
56
|
+
const remotePath = str(ctx, i, 'remotePath');
|
|
57
|
+
const source = str(ctx, i, 'putSource', 'binary');
|
|
58
|
+
const tmp = tmpFile('put');
|
|
59
|
+
if (source === 'binary') {
|
|
60
|
+
const binProp = str(ctx, i, 'binaryPropertyName', 'data');
|
|
61
|
+
const item = ctx.getInputData()[i];
|
|
62
|
+
if (!item.binary || !item.binary[binProp]) {
|
|
63
|
+
throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), `Binary property "${binProp}" not found on item ${i}`);
|
|
64
|
+
}
|
|
65
|
+
const buffer = await ctx.helpers.getBinaryDataBuffer(i, binProp);
|
|
66
|
+
await promises_1.default.writeFile(tmp, buffer);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const text = str(ctx, i, 'textContent', '');
|
|
70
|
+
await promises_1.default.writeFile(tmp, text, 'utf8');
|
|
71
|
+
}
|
|
72
|
+
await client.put(tmp, remotePath);
|
|
73
|
+
await promises_1.default.unlink(tmp).catch(() => {
|
|
74
|
+
});
|
|
75
|
+
return { json: { remotePath, uploaded: true } };
|
|
76
|
+
};
|
|
77
|
+
const handleMkdir = async (ctx, i, client) => {
|
|
78
|
+
const directory = str(ctx, i, 'directory');
|
|
79
|
+
await client.mkdir(directory);
|
|
80
|
+
return { json: { directory, created: true } };
|
|
81
|
+
};
|
|
82
|
+
const handleRmdir = async (ctx, i, client) => {
|
|
83
|
+
const directory = str(ctx, i, 'directory');
|
|
84
|
+
await client.rmdir(directory);
|
|
85
|
+
return { json: { directory, removed: true } };
|
|
86
|
+
};
|
|
87
|
+
const handleDel = async (ctx, i, client) => {
|
|
88
|
+
const remotePath = str(ctx, i, 'remotePath');
|
|
89
|
+
await client.del(remotePath);
|
|
90
|
+
return { json: { remotePath, deleted: true } };
|
|
91
|
+
};
|
|
92
|
+
const handlers = {
|
|
93
|
+
stat: handleStat,
|
|
94
|
+
list: handleList,
|
|
95
|
+
get: handleGet,
|
|
96
|
+
put: handlePut,
|
|
97
|
+
mkdir: handleMkdir,
|
|
98
|
+
rmdir: handleRmdir,
|
|
99
|
+
del: handleDel,
|
|
100
|
+
};
|
|
101
|
+
exports.handlers = handlers;
|
|
102
|
+
//# sourceMappingURL=SmbEntryHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmbEntryHelpers.js","sourceRoot":"","sources":["../../../nodes/Smb2/SmbEntryHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { IExecuteFunctions, INodeExecutionData } from "n8n-workflow";
|
|
2
|
+
import { SmbClientWrapper } from "./SmbClientWrapper";
|
|
3
|
+
interface Smb2Credentials {
|
|
4
|
+
host: string;
|
|
5
|
+
share: string;
|
|
6
|
+
domain?: string;
|
|
7
|
+
username: string;
|
|
8
|
+
password: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
maxProtocol?: string;
|
|
11
|
+
}
|
|
12
|
+
type SmbListEntry = {
|
|
13
|
+
name: string;
|
|
14
|
+
size: number;
|
|
15
|
+
date?: string;
|
|
16
|
+
time?: string;
|
|
17
|
+
attributes: string[];
|
|
18
|
+
isDirectory: boolean;
|
|
19
|
+
};
|
|
20
|
+
type SmbStat = {
|
|
21
|
+
size?: number;
|
|
22
|
+
createTime?: string;
|
|
23
|
+
accessTime?: string;
|
|
24
|
+
writeTime?: string;
|
|
25
|
+
changeTime?: string;
|
|
26
|
+
attributes?: string[];
|
|
27
|
+
isDirectory?: boolean;
|
|
28
|
+
};
|
|
29
|
+
type Operation = 'stat' | 'list' | 'get' | 'put' | 'mkdir' | 'rmdir' | 'del';
|
|
30
|
+
type OpHandler = (ctx: IExecuteFunctions, i: number, client: SmbClientWrapper) => Promise<INodeExecutionData>;
|
|
31
|
+
export { SmbStat, SmbListEntry, Smb2Credentials, Operation, OpHandler };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../nodes/Smb2/interfaces.ts"],"names":[],"mappings":""}
|