atacan
18 يوليو 2026، 12:14م
1
خطأ إيجابي كاذب في بوابة المنشئ لـ n8n-nodes-speechall@0.1.5
مرحباً بفريق n8n،
أنا أبلغ عما يبدو أنه عدم تطابق في إصدار الماسح الضوئي في بوابة المنشئ يؤثر على حزمة المجتمع n8n-nodes-speechall@0.1.5.
الحزمة: n8n-nodes-speechall@0.1.5
npm: https://www.npmjs.com/package/n8n-nodes-speechall
GitHub: GitHub - Speechall/speechall-n8n-node · GitHub
الالتزام المصدّق: 61562b67af982c735a943a5fa1b38b0ba838a032
ترفض بوابة المنشئ هذه الحزمة، لكن الماسح الحالي يمرّها.
إعادة الإنتاج:
هل يمكنك من فضلك تأكيد إصدار ماسح بوابة المنشئ، وتحديث العامل الخاص به،
وحذف النتيجة المخزنة مؤقتاً، وإعادة تشغيل الطلب؟
مرحباً @atacan
للقضاء على هذه المشكلة بسرعة، يرجى تصعيد هذا التقرير من خلال القنوات الرسمية التالية:
Discord الخاص بـ n8n (قناة #community-nodes): هذه هي أسرع طريقة للحصول على انتباه المطورين الذين يحافظون على نظام العقد المجتمعي. انشر نتائجك هناك، حيث يمكن للمسؤولين تشغيل تحديث العامل يدويًا أو إجراء إعادة مسح.
بريد الدعم: أرسل هذا التقرير بالضبط إلى support@n8n.io. نظراً لأنك استشهدت بـ PRs محددة، يمكن لفريق الدعم توجيه هذا مباشرة إلى الفريق الأساسي كـ “خطأ مؤكد” بدلاً من طلب دعم عام.
عند النشر / الإرسال بالبريد، احتفظ بالملخص التالي للمهندسين:
المشكلة: Creator Portal يستخدم ماسح قديم (@n8n/scan-community-package@0.27.0) مما يسبب إيجابيات كاذبة على ملفات .d.ts.
الحزمة المتأثرة: n8n-nodes-speechall@0.1.5
الملف الفاشل: dist/credentials/SpeechallApi.credentials.d.ts
الحل: تحديث ماسح Portal إلى v0.28.1 (الإصلاح المطبق في PR #34214 / #34391 ).
الطلب: تحديث عامل الفحص → مسح الذاكرة المؤقتة → إعادة تشغيل الإرسال.
مرحباً @atacan أهلاً وسهلاً!
طلب الدمج #34214، fix(core): Lint community packages against their provenance-attested source، تم دمجه في الفرع الرئيسي في 15 يوليو 2026. تم نشر @n8n/scan-community-package 0.28.0 على npm في اليوم التالي، و 0.28.1 في اليوم الذي يليه. هذا الجدول الزمني يتطابق تماماً مع تقريرك: 0.27.0، المنشور في 14 يوليو، يسبق الإصلاح، و 0.28.1 لا.
أرفق طوابع زمن الدمج والنشر بتقريرك. هذا يعطي من يراجعه دليلاً قوياً على إصدار الماسح الضوئي المثبت بدلاً من مجرد إعادة إنتاجك المحلية.
master ← fix-package-scan-source
opened 08:52AM - 15 Jul 26 UTC
## Summary
`@n8n/scan-community-package` linted only the **compiled** output sh… ipped in published tarballs. The node/credential lint rules are written for `.ts` sources: against `dist/` output they mostly silently no-op (the plugin's own file resolution maps `dist/nodes/Foo.node.js` → `nodes/Foo.node.ts`, which doesn't exist in a tarball) or false-positive (the filename-convention rules can never be satisfied by `.d.ts` files).
Since npm provenance is already mandatory for the scan to proceed, the attestation tells us exactly which repo + commit the published artifact was built from. This PR makes the scanner:
1. Parse the provenance attestation (`registry.npmjs.org/-/npm/v1/attestations/…`) to extract the attested GitHub repo and commit.
2. Download that exact source checkout and locate the package root by `package.json` name (monorepo-aware).
3. Lint the source scoped to `package.json` + `nodes/**` + `credentials/**` — the same surface `n8n-node lint` covers at dev time, deliberately excluding repo dev files (gulpfile, test configs, committed `dist/`) that never end up in the published package.
4. **Keep scanning the shipped artifact**: provenance pins the source commit, not the build output — a build step can emit anything into `dist/`. The tarball leg is scoped to compiled `**/*.js` + the published `package.json` (so `no-dangerous-functions`, `no-restricted-imports`, `no-forbidden-lifecycle-scripts`, `no-console` etc. still run against what users actually install); `.ts`/`.d.ts` declarations are covered better by the source scan and only false-positive on filename rules there.
5. **Hard-fail when the source can't be fetched** (unsupported host, unreachable repo, no matching package root) with an actionable message — a tarball-only fallback would silently reintroduce the blind spot this PR removes. Both source-fetch requests are bounded by a 30s timeout so a stalled connection fails fast instead of hanging the gate.
Since `.ts`/`.d.ts` files are never linted from tarballs anymore, this supersedes the need for #34203 on this path.
## How to test
```bash
cd packages/@n8n/scan-community-package && pnpm vitest run scanner/scanner.test.mjs
```
End-to-end against the package from the ticket:
```bash
node packages/@n8n/scan-community-package/scanner/cli.mjs @luzconsulting/n8n-nodes-salessuite
```
- **Before:** fails with the bogus `Rename file to SalesSuiteApi.credentials.ts` false positive; all source-level rules blind.
- **After:** `✅ Fetched source from github.com/luzconsulting/n8n-nodes-salessuite@42cdce5` — the false positive is gone, and the scan surfaces 6 real violations in the source (`require-node-api-error`, dynamic-options display-name rules) that the compiled-output scan missed entirely.
Note: `test/provenance.test.mjs` fails under vitest on `master` already (it uses `node:test`, which vitest 4 rejects as "no test suite") — pre-existing, untouched here.
## Related Linear tickets, Github issues, and Community forum posts
https://linear.app/n8n/issue/CE-1713
## Review / Merge checklist
- [x] I have seen this code, I have run this code, and I take responsibility for this code.
- [x] PR title and summary are descriptive. ([conventions](../blob/master/.github/pull_request_title_conventions.md))
- [ ] [Docs updated](https://github.com/n8n-docs) or follow-up ticket created.
- [x] Tests included.
- [x] PR Labeled with `Backport to Beta`, `Backport to Stable`, or `Backport to v1` (if the PR is an urgent fix that needs to be backported)
🤖 PR Summary generated by AI
🤖 Generated with [Claude Code](https://claude.com/claude-code)