muaddib-scanner 2.11.1 → 2.11.2

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muaddib-scanner",
3
- "version": "2.11.1",
3
+ "version": "2.11.2",
4
4
  "description": "Supply-chain threat detection & response for npm & PyPI/Python",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -420,6 +420,14 @@ async function trySendWebhook(name, version, ecosystem, result, sandboxResult, m
420
420
  const memoryCheck = shouldSuppressByMemory(name, result);
421
421
  // Always record current scan (updates timestamp + fingerprint for future checks)
422
422
  recordScanMemory(name, currentScore, currentTypes, currentHCTypes);
423
+
424
+ // Push to muad-api dashboard. Fires for every alert that passes shouldSendWebhook,
425
+ // independent of Discord dedup. The API's ON CONFLICT DO UPDATE absorbs duplicates;
426
+ // dedup downstream is a Discord noise filter, not a data filter.
427
+ if (isIngestConfigured()) {
428
+ sendIngest(name, version, result).catch(() => {});
429
+ }
430
+
423
431
  // Persist periodically (throttled to every 10 scans to avoid disk I/O overhead)
424
432
  let scansSinceLastMemoryPersist = getScansSinceLastMemoryPersist();
425
433
  scansSinceLastMemoryPersist++;
@@ -452,12 +460,6 @@ async function trySendWebhook(name, version, ecosystem, result, sandboxResult, m
452
460
  alertedPackageRules.set(name, new Set(currentRules));
453
461
  }
454
462
 
455
- // Push to muad-api dashboard (fire-and-forget, fires once per unique package
456
- // even when scope grouping batches the Discord webhook).
457
- if (isIngestConfigured()) {
458
- sendIngest(name, version, result).catch(() => {});
459
- }
460
-
461
463
  // Scope grouping: buffer scoped npm packages for grouped webhook
462
464
  const scope = extractScope(name);
463
465
  if (scope && ecosystem === 'npm') {