Package evidence
@eeacms/[email protected]
Install Lifecycle Remote Or Exec: postinstall="node -e \"const fs=require('fs'); const path=require('path'); let file; try { file=path.join(path.dirname(require.resolve('@eeacms/volto-eea-chatbot/package.json')), 'src/ChatBlock/chat/AIMessage.tsx'); } catch (error) { process.exit(0); } const from=\\\"import visit from 'unist-util-visit';\\\"; const to=\\\"import { visit } from 'unist-util-visit';\\\"; const source=fs.readFileSync(file, 'utf8'); if (source.includes(from) && !source.includes(to)) { fs.writeFileSync(file, source.replace(from, to)); }\""
Trust signals
Why this verdict
PkgRadar discounts a release’s score when public reputation argues against novel malware. The verdict above already reflects these — the panel just explains what was applied.
- Versions published
- 120Mature · −50% score
- First published
- Jun 2022
- Publisher
- eea-jenkins
Effective trust discount applied: −50% (max across signals — discounts don’t stack). New install-lifecycle deltas vs the previous release would clear the discount.
Recommended action
Block this updateStatic evidence trips multiple high-signal indicators. Quarantine the release until the publisher validates the change or you can rule out the indicators below.
Block this release in CIcurl · GitHub Actions
Fail the build when this package version is added or upgraded. Replace $PKGRADAR_TOKEN with a Pro / Team API key from your dashboard.
curl -fsS https://pkgradar.com/gate/npm \
-H "Authorization: Bearer $PKGRADAR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"specs":["@eeacms/[email protected]"],"fail_on":"high"}'GitHub Actions step:
- name: PkgRadar gate
run: |
curl -fsS https://pkgradar.com/gate/npm \
-H "Authorization: Bearer ${{ secrets.PKGRADAR_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"specs":["@eeacms/[email protected]"],"fail_on":"high"}'Why flagged
What the scanner saw
Install Lifecycle Remote Or Exec: postinstall="node -e \"const fs=require('fs'); const path=require('path'); let file; try { file=path.join(path.dirname(require.resolve('@eeacms/volto-eea-chatbot/package.json')), 'src/ChatBlock/chat/AIMessage.tsx'); } catch (error) { process.exit(0); } const from=\\\"import visit from 'unist-util-visit';\\\"; const to=\\\"import { visit } from 'unist-util-visit';\\\"; const source=fs.readFileSync(file, 'utf8'); if (source.includes(from) && !source.includes(to)) { fs.writeFileSync(file, source.replace(from, to)); }\""
Not observed: package install, lifecycle script execution, or sandbox execution. PkgRadar only inspects on-disk artifacts.
Availability ledger
available
Status history (1 event)
- new → available · risk high · score 17 · status changed
Evidence
Static findings
2 static · 0 from release diff · showing high-signal first.
| Severity | Kind | Path | Detail | Points |
|---|---|---|---|---|
| high | Install Lifecycle Remote Or Exec | package.json | postinstall="node -e \"const fs=require('fs'); const path=require('path'); let file; try { file=path.join(path.dirname(require.resolve('@eeacms/volto-eea-chatbot/package.json')), 'src/ChatBlock/chat/AIMessage.tsx'); } catch (error) { process.exit(0); } const from=\\\"import visit from 'unist-util-visit';\\\"; const to=\\\"import { visit } from 'unist-util-visit';\\\"; const source=fs.readFileSync(file, 'utf8'); if (source.includes(from) && !source.includes(to)) { fs.writeFileSync(file, source.replace(from, to)); }\"" | 30 |
Show all 2 findings (low-signal and informational)
| Severity | Kind | Path | Detail | Points |
|---|---|---|---|---|
| high | Install Lifecycle Remote Or Exec | package.json | postinstall="node -e \"const fs=require('fs'); const path=require('path'); let file; try { file=path.join(path.dirname(require.resolve('@eeacms/volto-eea-chatbot/package.json')), 'src/ChatBlock/chat/AIMessage.tsx'); } catch (error) { process.exit(0); } const from=\\\"import visit from 'unist-util-visit';\\\"; const to=\\\"import { visit } from 'unist-util-visit';\\\"; const source=fs.readFileSync(file, 'utf8'); if (source.includes(from) && !source.includes(to)) { fs.writeFileSync(file, source.replace(from, to)); }\"" | 30 |
| low | Install-time lifecycle script | package.json | postinstall="node -e \"const fs=require('fs'); const path=require('path'); let file; try { file=path.join(path.dirname(require.resolve('@eeacms/volto-eea-chatbot/package.json')), 'src/ChatBlock/chat/AIMessage.tsx'); } catch (error) { process.exit(0); } const from=\\\"import visit from 'unist-util-visit';\\\"; const to=\\\"import { visit } from 'unist-util-visit';\\\"; const source=fs.readFileSync(file, 'utf8'); if (source.includes(from) && !source.includes(to)) { fs.writeFileSync(file, source.replace(from, to)); }\"" | 5 |
Manifest
Package metadata
Scripts19
bootstrapnpm install -g ejs; npm link ejs; node bootstrapcypress:openmake cypress-opencypress:runmake cypress-runi18nmake i18nlintmake lintlint:fixmake lint-fixpostinstallnode -e "const fs=require('fs'); const path=require('path'); let file; try { file=path.join(path.dirname(require.resolve('@eeacms/volto-eea-chatbot/package.json')), 'src/ChatBlock/chat/AIMessage.tsx'); } catch (error) { process.exit(0); } const from=\"import visit from 'unist-util-visit';\"; const to=\"import { visit } from 'unist-util-visit';\"; const source=fs.readFileSync(file, 'utf8'); if (source.includes(from) && !source.includes(to)) { fs.writeFileSync(file, source.replace(from, to)); }"pre-commityarn stylelint:fix && yarn prettier:fix && yarn lint:fixpreparehusky installprettiermake prettierprettier:fixmake prettier-fixreleaserelease-itrelease-betarelease-it --preRelease=betarelease-major-betarelease-it major --preRelease=betastylelintmake stylelintstylelint:fixmake stylelint-fixstylelint:overridesmake stylelint-overridestestmake testtest:fixmake test-update
Dependencies39
@eeacms/volto-design-tokens*@eeacms/volto-eea-chatbot*@eeacms/volto-matomo*@elastic/react-search-ui1.21.2@elastic/react-search-ui-views1.21.2@elastic/search-ui1.21.2@plone/scripts^3.10.6@visx/group^1.7.0@visx/responsive^1.10.1@visx/scale^1.11.1@visx/shape^1.12.0@visx/tooltip^1.7.2classnames^2.2.6csv-stringify^5.6.5d3-array^2.12.1d3-scale^3.3.0deep-equal^2.0.5downshift^3.4.8elasticsearch16.7.3fast-deep-equal^3.1.3http-proxy-middleware^2.0.1jotai2.0.3lodash4.17.21lodash.clonedeep^4.5.0lodash.isfunction^3.0.9lodash.uniq^4.5.0luxon^1.22.0node-fetch^2.6.1re-resizable^6.9.0react-compound-slider^3.4.0- …and 9 more.