n8n-nodes-smbclient 1.1.4 → 1.2.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.
@@ -1,38 +1,61 @@
1
- # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2
- # For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
3
-
4
- name: Build and Publish Node.js Package
5
-
6
- on:
7
- release:
8
- types: [created]
9
-
10
- jobs:
11
- build:
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v7
15
- - uses: pnpm/action-setup@v6
16
- with:
17
- version: latest
18
- - uses: actions/setup-node@v6
19
- with:
20
- node-version: 24
21
- - run: pnpm install --frozen-lockfile
22
-
23
- publish-npm:
24
- needs: build
25
- runs-on: ubuntu-latest
26
- steps:
27
- - uses: actions/checkout@v7
28
- - uses: pnpm/action-setup@v6
29
- with:
30
- version: latest
31
- - uses: actions/setup-node@v6
32
- with:
33
- node-version: 24
34
- registry-url: https://registry.npmjs.org/
35
- - run: pnpm install --frozen-lockfile
36
- - run: pnpm publish --no-git-checks
37
- env:
38
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
1
+ # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2
+ # For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
3
+ #
4
+ # Nothing is published unless the CVE gate (security-cve.yml) passes first.
5
+
6
+ name: Build and Publish Node.js Package
7
+
8
+ on:
9
+ release:
10
+ types: [created]
11
+
12
+ permissions:
13
+ actions: read
14
+ contents: read
15
+ security-events: write
16
+
17
+ jobs:
18
+ # Hard gate: re-scan the exact code being released. A known vulnerability
19
+ # here blocks build + publish.
20
+ cve-scan:
21
+ uses: ./.github/workflows/security-cve.yml
22
+ permissions:
23
+ actions: read
24
+ contents: read
25
+ security-events: write
26
+
27
+ build:
28
+ needs: cve-scan
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@v7
32
+ - uses: pnpm/action-setup@v6
33
+ with:
34
+ version: latest
35
+ - uses: actions/setup-node@v7
36
+ with:
37
+ node-version: 24
38
+ - run: pnpm install --frozen-lockfile
39
+
40
+ publish-npm:
41
+ needs: build
42
+ runs-on: ubuntu-latest
43
+ # `id-token: write` lets npm mint the provenance statement n8n requires
44
+ # for verified community nodes.
45
+ permissions:
46
+ contents: read
47
+ id-token: write
48
+ steps:
49
+ - uses: actions/checkout@v7
50
+ - uses: pnpm/action-setup@v6
51
+ with:
52
+ version: latest
53
+ - uses: actions/setup-node@v7
54
+ with:
55
+ node-version: 24
56
+ registry-url: https://registry.npmjs.org/
57
+ - run: pnpm install --frozen-lockfile
58
+ # npm (not pnpm) so `--provenance` is honoured regardless of pnpm version.
59
+ - run: npm publish --provenance --access public
60
+ env:
61
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
@@ -20,24 +20,47 @@ on:
20
20
  required: true
21
21
  type: string
22
22
 
23
- # Needed so the workflow can push the version-bump commit and tag back.
23
+ # `contents: write` so the workflow can push the version-bump commit and tag back;
24
+ # the rest is for the CVE gate's SARIF upload.
24
25
  permissions:
26
+ actions: read
25
27
  contents: write
28
+ security-events: write
26
29
 
27
30
  jobs:
31
+ # Hard gate: no bump, no tag, no publish if a known vulnerability is found.
32
+ cve-scan:
33
+ uses: ./.github/workflows/security-cve.yml
34
+ permissions:
35
+ actions: read
36
+ contents: read
37
+ security-events: write
38
+
28
39
  publish-npm:
40
+ needs: cve-scan
29
41
  runs-on: ubuntu-latest
42
+ # `id-token: write` lets npm mint the provenance statement n8n requires
43
+ # for verified community nodes.
44
+ permissions:
45
+ contents: write
46
+ id-token: write
30
47
  steps:
31
48
  - uses: actions/checkout@v7
32
49
  with:
33
- # Use a token that can push the bump commit/tag back to the repo.
34
- token: ${{ secrets.GITHUB_TOKEN }}
50
+ # Push the bump commit and tag over SSH using a write-enabled deploy
51
+ # key. The default GITHUB_TOKEN cannot do this: the "CVE gate" ruleset
52
+ # requires the "OSV Dependency Scan / osv-scan" check on main, and a
53
+ # freshly created bump commit has no such check, so the push is
54
+ # rejected with GH013. Deploy keys are the ruleset's bypass actor
55
+ # (GitHub only allows the GitHub Actions app as a bypass actor on
56
+ # organisation-owned repos, not personal ones).
57
+ ssh-key: ${{ secrets.RELEASE_DEPLOY_KEY }}
35
58
 
36
59
  - uses: pnpm/action-setup@v6
37
60
  with:
38
61
  version: latest
39
62
 
40
- - uses: actions/setup-node@v6
63
+ - uses: actions/setup-node@v7
41
64
  with:
42
65
  node-version: 24
43
66
  registry-url: https://registry.npmjs.org/
@@ -46,12 +69,25 @@ jobs:
46
69
 
47
70
  # Write the requested version into package.json (no tag/commit yet — we do
48
71
  # that ourselves below so the message and tag are under our control).
72
+ #
73
+ # If the requested version is already the one in package.json, skip the
74
+ # bump: this lets a release whose publish step failed be re-run with the
75
+ # same version instead of burning a new one.
49
76
  - name: Set version
50
77
  id: bump
78
+ env:
79
+ REQUESTED_VERSION: ${{ inputs.version }}
51
80
  run: |
52
- # `pnpm version` prints a human message ("Releasing pkg: x → y"), not
53
- # the bare version, so read the result back from package.json instead.
54
- pnpm version "${{ inputs.version }}" --no-git-tag-version
81
+ CURRENT_VERSION=$(node -p "require('./package.json').version")
82
+ if [ "${REQUESTED_VERSION#v}" = "${CURRENT_VERSION}" ]; then
83
+ echo "package.json is already at ${CURRENT_VERSION}; skipping the bump"
84
+ echo "changed=false" >> "$GITHUB_OUTPUT"
85
+ else
86
+ # `pnpm version` prints a human message ("Releasing pkg: x → y"), not
87
+ # the bare version, so read the result back from package.json instead.
88
+ pnpm version "${REQUESTED_VERSION}" --no-git-tag-version
89
+ echo "changed=true" >> "$GITHUB_OUTPUT"
90
+ fi
55
91
  NEW_VERSION=$(node -p "require('./package.json').version")
56
92
  echo "version=v${NEW_VERSION}" >> "$GITHUB_OUTPUT"
57
93
  echo "Releasing v${NEW_VERSION}"
@@ -61,18 +97,31 @@ jobs:
61
97
  # branch is protected (required reviews/checks), the default GITHUB_TOKEN
62
98
  # push will be rejected — run releases from an unprotected branch or swap
63
99
  # in a PAT/deploy key with bypass rights.
100
+ #
101
+ # When the bump was skipped there is nothing to commit; the tag is only
102
+ # created if it does not exist yet, and an existing tag is never moved.
64
103
  - name: Commit and tag
104
+ env:
105
+ TAG: ${{ steps.bump.outputs.version }}
106
+ CHANGED: ${{ steps.bump.outputs.changed }}
65
107
  run: |
66
108
  git config user.name 'github-actions[bot]'
67
109
  git config user.email 'github-actions[bot]@users.noreply.github.com'
68
- TAG="${{ steps.bump.outputs.version }}"
69
- git commit -am "chore(release): ${TAG}"
70
- git tag -a "${TAG}" -m "${TAG}"
71
- git push origin HEAD
72
- git push origin "${TAG}"
110
+ if [ "${CHANGED}" = "true" ]; then
111
+ git commit -am "chore(release): ${TAG}"
112
+ git tag -a "${TAG}" -m "${TAG}"
113
+ git push origin HEAD
114
+ git push origin "${TAG}"
115
+ elif [ -n "$(git ls-remote --tags origin "refs/tags/${TAG}")" ]; then
116
+ echo "::notice::Tag ${TAG} already exists and was left where it is; publishing from ${GITHUB_SHA}"
117
+ else
118
+ git tag -a "${TAG}" -m "${TAG}"
119
+ git push origin "${TAG}"
120
+ fi
73
121
 
74
122
  # `prepublishOnly` (build + strict lint) runs automatically here.
75
123
  - name: Publish to npm
76
- run: pnpm publish --no-git-checks
124
+ # npm (not pnpm) so `--provenance` is honoured regardless of pnpm version.
125
+ run: npm publish --provenance --access public
77
126
  env:
78
127
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -0,0 +1,53 @@
1
+ name: CVE Security Scan
2
+
3
+ on:
4
+ # Scan every PR targeting main.
5
+ pull_request:
6
+ branches:
7
+ - main
8
+
9
+ # Re-scan once the code actually lands on main.
10
+ push:
11
+ branches:
12
+ - main
13
+
14
+ # Weekly sweep: catches vulnerabilities disclosed after the code was merged,
15
+ # without needing any new commit. Mondays at 06:00 UTC.
16
+ schedule:
17
+ - cron: '0 6 * * 1'
18
+
19
+ # Allow the release workflows to use this workflow as a hard gate.
20
+ workflow_call:
21
+
22
+ # Useful if you want to manually re-check the repository.
23
+ workflow_dispatch:
24
+
25
+ permissions:
26
+ actions: read
27
+ contents: read
28
+ security-events: write
29
+
30
+ jobs:
31
+ osv-scan:
32
+ name: OSV Dependency Scan
33
+
34
+ uses: google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v2.5.1
35
+
36
+ permissions:
37
+ actions: read
38
+ contents: read
39
+ security-events: write
40
+
41
+ with:
42
+ # Recursively inspect the repository.
43
+ # OSV automatically detects pnpm-lock.yaml.
44
+ scan-args: |-
45
+ --recursive
46
+ ./
47
+
48
+ # Fail the GitHub Action if a known vulnerability is found.
49
+ fail-on-vuln: true
50
+
51
+ # Upload results to:
52
+ # GitHub -> Security -> Code scanning
53
+ upload-sarif: true
package/CLAUDE.md CHANGED
@@ -9,7 +9,7 @@ An [n8n](https://n8n.io/) community node package that lets workflows interact wi
9
9
  ## Commands
10
10
 
11
11
  ```bash
12
- npm run build # rimraf dist + tsc compile + gulp copies icons into dist/
12
+ npm run build # rimraf dist + tsc compile + scripts/copy-icons.js copies icons into dist/
13
13
  npm run dev # tsc --watch
14
14
  npm run lint # eslint on nodes, credentials, package.json (n8n-nodes-base rules)
15
15
  npm run lintfix # eslint --fix
package/LICENSE.md CHANGED
@@ -1,4 +1,5 @@
1
1
  Copyright 2025 Nick Penree <nick@penree.com>
2
+ Copyright 2025-2026 JimmyMtl
2
3
 
3
4
  Permission is hereby granted, free of charge, to any person obtaining a copy of
4
5
  this software and associated documentation files (the "Software"), to deal in
@@ -206,7 +206,6 @@ class Smb2 {
206
206
  }
207
207
  }
208
208
  catch (err) {
209
- console.error(err);
210
209
  throw new n8n_workflow_1.NodeOperationError(this.getNode(), (err === null || err === void 0 ? void 0 : err.message) || 'SMB operation failed');
211
210
  }
212
211
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"Smb2.node.js","sourceRoot":"","sources":["../../../nodes/Smb2/Smb2.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Smb2.node.js","sourceRoot":"","sources":["../../../nodes/Smb2/Smb2.node.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "n8n-nodes-smbclient",
3
- "version": "1.1.4",
3
+ "version": "1.2.0",
4
4
  "description": "Transfer files via Samba (SMB2) and smbclient package with n8n, some of the base work are based on https://github.com/drudge/n8n-nodes-smb work.",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
7
7
  "n8n-nodes-smbclient",
8
8
  "smb",
9
- "smb",
10
9
  "samba",
11
10
  "binary",
12
11
  "file",
@@ -14,18 +13,27 @@
14
13
  "node",
15
14
  "n8n"
16
15
  ],
16
+ "license": "MIT",
17
+ "author": {
18
+ "name": "JimmyMtl",
19
+ "email": "j.mtlk.pro@outlook.fr"
20
+ },
17
21
  "engines": {
18
22
  "node": ">=20.15"
19
23
  },
20
- "repository": "https://github.com/JimmyMtl/n8n-nodes-smbclient",
24
+ "homepage": "https://github.com/JimmyMtl/n8n-nodes-smbclient",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/JimmyMtl/n8n-nodes-smbclient.git"
28
+ },
21
29
  "main": "index.js",
22
30
  "scripts": {
23
- "build": "npx rimraf dist && tsc && gulp build:icons",
31
+ "build": "npx rimraf dist && tsc && node scripts/copy-icons.js",
24
32
  "dev": "tsc --watch",
25
33
  "format": "prettier nodes credentials --write",
26
34
  "lint": "eslint nodes credentials package.json",
27
35
  "lintfix": "eslint nodes credentials package.json --fix",
28
- "prepublishOnly": "npm run build && npm run lint -c .eslintrc.prepublish.js nodes credentials package.json",
36
+ "prepublishOnly": "npm run build && npm run lint",
29
37
  "release": "npx standard-version"
30
38
  },
31
39
  "n8n": {
@@ -44,20 +52,12 @@
44
52
  "@types/node": "^24.12.4",
45
53
  "@typescript-eslint/parser": "^8.59.1",
46
54
  "eslint": "^10.3.0",
47
- "eslint-plugin-n8n-nodes-base": "^1.16.6",
55
+ "eslint-plugin-n8n-nodes-base": "^2.0.0",
48
56
  "globals": "^17.6.0",
49
- "gulp": "^5.0.1",
50
57
  "prettier": "^3.8.3",
51
- "typescript": "^6.0.3"
58
+ "typescript": "~6.0.3"
52
59
  },
53
60
  "peerDependencies": {
54
61
  "n8n-workflow": "^1.115.0 || ^2.0.0"
55
- },
56
- "dependencies": {
57
- "tmp-promise": "^3.0.3"
58
- },
59
- "overrides": {
60
- "form-data": "^4.0.4",
61
- "axios": "1.18.1"
62
62
  }
63
63
  }
package/docker/Dockerfile CHANGED
@@ -8,7 +8,7 @@
8
8
  # into the final image.
9
9
 
10
10
  # Declared before the first FROM so it can be used in the stage-2 FROM line.
11
- ARG N8N_VERSION=2.29.5
11
+ ARG N8N_VERSION=2.39.2
12
12
 
13
13
  # ---- Stage 1: collect smbclient + its dependency files ----
14
14
  FROM alpine:3.24 AS smb
File without changes
package/eslint.config.mjs CHANGED
@@ -53,8 +53,6 @@ export default defineConfig([
53
53
  ),
54
54
  rules: {
55
55
  "n8n-nodes-base/community-package-json-name-still-default": "off",
56
- "n8n-nodes-base/community-package-json-license-missing": "off",
57
- "n8n-nodes-base/community-package-json-author-missing": "off",
58
56
  },
59
57
  },
60
58
 
@@ -220,7 +220,6 @@ export class Smb2 implements INodeType {
220
220
  out.push(await handler(this, i, client));
221
221
  }
222
222
  } catch (err) {
223
- console.error(err);
224
223
  throw new NodeOperationError(
225
224
  this.getNode(),
226
225
  (err as Error)?.message || 'SMB operation failed',
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "n8n-nodes-smbclient",
3
- "version": "1.1.4",
3
+ "version": "1.2.0",
4
4
  "description": "Transfer files via Samba (SMB2) and smbclient package with n8n, some of the base work are based on https://github.com/drudge/n8n-nodes-smb work.",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
7
7
  "n8n-nodes-smbclient",
8
8
  "smb",
9
- "smb",
10
9
  "samba",
11
10
  "binary",
12
11
  "file",
@@ -14,14 +13,29 @@
14
13
  "node",
15
14
  "n8n"
16
15
  ],
16
+ "license": "MIT",
17
+ "author": {
18
+ "name": "JimmyMtl",
19
+ "email": "j.mtlk.pro@outlook.fr"
20
+ },
17
21
  "engines": {
18
22
  "node": ">=20.15"
19
23
  },
24
+ "homepage": "https://github.com/JimmyMtl/n8n-nodes-smbclient",
20
25
  "repository": {
21
26
  "type": "git",
22
- "url": "https://github.com/JimmyMtl/n8n-nodes-smbclient"
27
+ "url": "git+https://github.com/JimmyMtl/n8n-nodes-smbclient.git"
23
28
  },
24
29
  "main": "index.js",
30
+ "scripts": {
31
+ "build": "npx rimraf dist && tsc && node scripts/copy-icons.js",
32
+ "dev": "tsc --watch",
33
+ "format": "prettier nodes credentials --write",
34
+ "lint": "eslint nodes credentials package.json",
35
+ "lintfix": "eslint nodes credentials package.json --fix",
36
+ "prepublishOnly": "npm run build && npm run lint",
37
+ "release": "npx standard-version"
38
+ },
25
39
  "n8n": {
26
40
  "n8nNodesApiVersion": 1,
27
41
  "credentials": [
@@ -38,28 +52,12 @@
38
52
  "@types/node": "^24.12.4",
39
53
  "@typescript-eslint/parser": "^8.59.1",
40
54
  "eslint": "^10.3.0",
41
- "eslint-plugin-n8n-nodes-base": "^1.16.6",
55
+ "eslint-plugin-n8n-nodes-base": "^2.0.0",
42
56
  "globals": "^17.6.0",
43
- "gulp": "^5.0.1",
44
57
  "prettier": "^3.8.3",
45
- "typescript": "^6.0.3"
58
+ "typescript": "~6.0.3"
46
59
  },
47
60
  "peerDependencies": {
48
61
  "n8n-workflow": "^1.115.0 || ^2.0.0"
49
- },
50
- "dependencies": {
51
- "tmp-promise": "^3.0.3"
52
- },
53
- "overrides": {
54
- "form-data": "^4.0.4",
55
- "axios": "1.18.1"
56
- },
57
- "scripts": {
58
- "build": "npx rimraf dist && tsc && gulp build:icons",
59
- "dev": "tsc --watch",
60
- "format": "prettier nodes credentials --write",
61
- "lint": "eslint nodes credentials package.json",
62
- "lintfix": "eslint nodes credentials package.json --fix",
63
- "release": "npx standard-version"
64
62
  }
65
- }
63
+ }
@@ -1,9 +1,3 @@
1
- # pnpm settings (moved out of the deprecated `pnpm` field in package.json).
2
-
3
- # Refuse to resolve/lock any package version published less than this many
4
- # minutes ago. Mirrors the CI supply-chain policy so `pnpm install` locally
5
- # picks the same compliant versions CI will accept, instead of the newest
6
- # release (which may still be inside the cutoff and fail --frozen-lockfile).
7
1
  minimumReleaseAge: 1440
8
2
 
9
3
  # Packages allowed to run install scripts.
@@ -16,3 +10,18 @@ onlyBuiltDependencies:
16
10
  allowBuilds:
17
11
  eslint-plugin-n8n-nodes-base: true
18
12
  isolated-vm: true
13
+
14
+ # Force patched versions of transitive dependencies flagged by the OSV scan
15
+ # (see .github/workflows/security-cve.yml). Each entry pins the lowest release
16
+ # that carries the fix; drop an entry once the direct dependency pulls in a
17
+ # patched version on its own.
18
+ #
19
+ # All of these are dev-only, coming in via eslint; the package has no
20
+ # runtime dependencies.
21
+ overrides:
22
+ brace-expansion@1: ^5.0.12 # GHSA-mh99-v99m-4gvg, GHSA-rgw5-rvv9-x895
23
+ brace-expansion@5: ^5.0.12 # GHSA-mh99-v99m-4gvg, GHSA-rgw5-rvv9-x895, GHSA-6j4f-fj2g-mc7p, GHSA-qhr7-859c-m2p7, GHSA-q2hr-2g5m-vwhr
24
+ form-data: ^4.0.6 # GHSA-hmw2-7cc7-3qxx
25
+ js-yaml@4: ^5.0.0 # GHSA-5p4m-2wfm-xmqj
26
+ lodash: ^4.18.0 # GHSA-f23m-r3pf-42rh, GHSA-r5fr-rjxr-66jc
27
+ uuid@10: ^14.0.0 # GHSA-w5hq-g745-h8pq
package/renovate.json CHANGED
@@ -3,5 +3,14 @@
3
3
  "extends": [
4
4
  "config:recommended"
5
5
  ],
6
- "minimumReleaseAge": "3 days"
6
+ "minimumReleaseAge": "3 days",
7
+ "packageRules": [
8
+ {
9
+ "description": "typescript-eslint peers on `typescript >=4.8.4 <6.1.0`, so TypeScript 7 breaks `npm run lint` (and therefore `prepublishOnly`). PR #107 bumped us to v7 and did exactly that. Hold at 6.0.x until typescript-eslint widens its peer range, then drop this rule.",
10
+ "matchPackageNames": [
11
+ "typescript"
12
+ ],
13
+ "allowedVersions": "<6.1.0"
14
+ }
15
+ ]
7
16
  }
@@ -0,0 +1,23 @@
1
+ // Copies node and credential icons into dist/, preserving the folder layout.
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ const ICON_EXTENSIONS = new Set(['.png', '.svg']);
6
+
7
+ function copyIcons(sourceDir, destinationDir) {
8
+ for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) {
9
+ const source = path.join(sourceDir, entry.name);
10
+ const destination = path.join(destinationDir, entry.name);
11
+
12
+ if (entry.isDirectory()) {
13
+ copyIcons(source, destination);
14
+ } else if (ICON_EXTENSIONS.has(path.extname(entry.name).toLowerCase())) {
15
+ fs.mkdirSync(destinationDir, { recursive: true });
16
+ fs.copyFileSync(source, destination);
17
+ }
18
+ }
19
+ }
20
+
21
+ for (const dir of ['nodes', 'credentials']) {
22
+ copyIcons(path.resolve(dir), path.resolve('dist', dir));
23
+ }
package/gulpfile.js DELETED
@@ -1,16 +0,0 @@
1
- const path = require('path');
2
- const { task, src, dest } = require('gulp');
3
-
4
- task('build:icons', copyIcons);
5
-
6
- function copyIcons() {
7
- const nodeSource = path.resolve('nodes', '**', '*.{png,svg}');
8
- const nodeDestination = path.resolve('dist', 'nodes');
9
-
10
- src(nodeSource).pipe(dest(nodeDestination));
11
-
12
- const credSource = path.resolve('credentials', '**', '*.{png,svg}');
13
- const credDestination = path.resolve('dist', 'credentials');
14
-
15
- return src(credSource).pipe(dest(credDestination));
16
- }