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.
Files changed (38) hide show
  1. package/.editorconfig +20 -0
  2. package/.github/workflows/npm-publish.yml +32 -0
  3. package/.github/workflows/one-shot-npm-publish.yml +30 -0
  4. package/.prettierrc.js +51 -0
  5. package/LICENSE.md +19 -0
  6. package/Readme.md +131 -0
  7. package/credentials/Smb2Api.credentials.ts +72 -0
  8. package/credentials/smb2.svg +36 -0
  9. package/dist/credentials/Smb2Api.credentials.d.ts +7 -0
  10. package/dist/credentials/Smb2Api.credentials.js +72 -0
  11. package/dist/credentials/Smb2Api.credentials.js.map +1 -0
  12. package/dist/credentials/smb2.svg +36 -0
  13. package/dist/nodes/Smb2/Smb2.node.d.ts +5 -0
  14. package/dist/nodes/Smb2/Smb2.node.js +174 -0
  15. package/dist/nodes/Smb2/Smb2.node.js.map +1 -0
  16. package/dist/nodes/Smb2/Smb2.node.json +19 -0
  17. package/dist/nodes/Smb2/SmbClientWrapper.d.ts +22 -0
  18. package/dist/nodes/Smb2/SmbClientWrapper.js +231 -0
  19. package/dist/nodes/Smb2/SmbClientWrapper.js.map +1 -0
  20. package/dist/nodes/Smb2/SmbEntryHelpers.d.ts +6 -0
  21. package/dist/nodes/Smb2/SmbEntryHelpers.js +102 -0
  22. package/dist/nodes/Smb2/SmbEntryHelpers.js.map +1 -0
  23. package/dist/nodes/Smb2/interfaces.d.ts +31 -0
  24. package/dist/nodes/Smb2/interfaces.js +3 -0
  25. package/dist/nodes/Smb2/interfaces.js.map +1 -0
  26. package/dist/nodes/Smb2/smb2.svg +36 -0
  27. package/dist/package.json +67 -0
  28. package/eslint.config.mjs +174 -0
  29. package/gulpfile.js +16 -0
  30. package/index.js +0 -0
  31. package/nodes/Smb2/Smb2.node.json +19 -0
  32. package/nodes/Smb2/Smb2.node.ts +184 -0
  33. package/nodes/Smb2/SmbClientWrapper.ts +285 -0
  34. package/nodes/Smb2/SmbEntryHelpers.ts +129 -0
  35. package/nodes/Smb2/interfaces.ts +39 -0
  36. package/nodes/Smb2/smb2.svg +36 -0
  37. package/package.json +67 -0
  38. 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../nodes/Smb2/interfaces.ts"],"names":[],"mappings":""}