Created
December 19, 2025 12:47
-
-
Save sanstream/b0ab599cffa9efc1ce03d851acd7e983 to your computer and use it in GitHub Desktop.
Sha1-hulud 2.0 detection script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env node | |
| const fs = require("fs"); | |
| const path = require("path"); | |
| const watchList = [ | |
| "02-echo", | |
| "@accordproject/concerto-analysis", | |
| "@accordproject/concerto-linter", | |
| "@accordproject/concerto-linter-default-ruleset", | |
| "@accordproject/concerto-metamodel", | |
| "@accordproject/concerto-types", | |
| "@accordproject/markdown-it-cicero", | |
| "@accordproject/template-engine", | |
| "@actbase/css-to-react-native-transform", | |
| "@actbase/native", | |
| "@actbase/node-server", | |
| "@actbase/react-absolute", | |
| "@actbase/react-daum-postcode", | |
| "@actbase/react-kakaosdk", | |
| "@actbase/react-native-actionsheet", | |
| "@actbase/react-native-devtools", | |
| "@actbase/react-native-fast-image", | |
| "@actbase/react-native-kakao-channel", | |
| "@actbase/react-native-kakao-navi", | |
| "@actbase/react-native-less-transformer", | |
| "@actbase/react-native-naver-login", | |
| "@actbase/react-native-simple-video", | |
| "@actbase/react-native-tiktok", | |
| "@afetcan/api", | |
| "@afetcan/storage", | |
| "@alaan/s2s-auth", | |
| "@alexadark/amadeus-api", | |
| "@alexadark/gatsby-theme-events", | |
| "@alexadark/gatsby-theme-wordpress-blog", | |
| "@alexadark/reusable-functions", | |
| "@alexcolls/nuxt-socket.io", | |
| "@alexcolls/nuxt-socket.io", | |
| "@alexcolls/nuxt-ux", | |
| "@alexcolls/nuxt-ux", | |
| "@antstackio/eslint-config-antstack", | |
| "@antstackio/express-graphql-proxy", | |
| "@antstackio/graphql-body-parser", | |
| "@antstackio/json-to-graphql", | |
| "@antstackio/shelbysam", | |
| "@aryanhussain/my-angular-lib", | |
| "@asyncapi/avro-schema-parser", | |
| "@asyncapi/avro-schema-parser", | |
| "@asyncapi/bundler", | |
| "@asyncapi/bundler", | |
| "@asyncapi/cli", | |
| "@asyncapi/cli", | |
| "@asyncapi/converter", | |
| "@asyncapi/converter", | |
| "@asyncapi/diff", | |
| "@asyncapi/diff", | |
| "@asyncapi/dotnet-rabbitmq-template", | |
| "@asyncapi/dotnet-rabbitmq-template", | |
| "@asyncapi/edavisualiser", | |
| "@asyncapi/edavisualiser", | |
| "@asyncapi/generator", | |
| "@asyncapi/generator", | |
| "@asyncapi/generator-components", | |
| "@asyncapi/generator-components", | |
| "@asyncapi/generator-helpers", | |
| "@asyncapi/generator-helpers", | |
| "@asyncapi/generator-react-sdk", | |
| "@asyncapi/generator-react-sdk", | |
| "@asyncapi/go-watermill-template", | |
| "@asyncapi/go-watermill-template", | |
| "@asyncapi/html-template", | |
| "@asyncapi/html-template", | |
| "@asyncapi/java-spring-cloud-stream-template", | |
| "@asyncapi/java-spring-cloud-stream-template", | |
| "@asyncapi/java-spring-template", | |
| "@asyncapi/java-spring-template", | |
| "@asyncapi/java-template", | |
| "@asyncapi/java-template", | |
| "@asyncapi/keeper", | |
| "@asyncapi/keeper", | |
| "@asyncapi/markdown-template", | |
| "@asyncapi/markdown-template", | |
| "@asyncapi/modelina", | |
| "@asyncapi/modelina-cli", | |
| "@asyncapi/modelina-cli", | |
| "@asyncapi/multi-parser", | |
| "@asyncapi/multi-parser", | |
| "@asyncapi/nodejs-template", | |
| "@asyncapi/nodejs-template", | |
| "@asyncapi/nodejs-ws-template", | |
| "@asyncapi/nodejs-ws-template", | |
| "@asyncapi/nunjucks-filters", | |
| "@asyncapi/nunjucks-filters", | |
| "@asyncapi/openapi-schema-parser", | |
| "@asyncapi/openapi-schema-parser", | |
| "@asyncapi/optimizer", | |
| "@asyncapi/optimizer", | |
| "@asyncapi/parser", | |
| "@asyncapi/parser", | |
| "@asyncapi/php-template", | |
| "@asyncapi/php-template", | |
| "@asyncapi/problem", | |
| "@asyncapi/problem", | |
| "@asyncapi/protobuf-schema-parser", | |
| "@asyncapi/protobuf-schema-parser", | |
| "@asyncapi/protobuf-schema-parser", | |
| "@asyncapi/python-paho-template", | |
| "@asyncapi/python-paho-template", | |
| "@asyncapi/react-component", | |
| "@asyncapi/react-component", | |
| "@asyncapi/server-api", | |
| "@asyncapi/server-api", | |
| "@asyncapi/specs", | |
| "@asyncapi/specs", | |
| "@asyncapi/studio", | |
| "@asyncapi/studio", | |
| "@asyncapi/web-component", | |
| "@asyncapi/web-component", | |
| "@bdkinc/knex-ibmi", | |
| "@browserbasehq/bb9", | |
| "@browserbasehq/director-ai", | |
| "@browserbasehq/mcp", | |
| "@browserbasehq/mcp-server-browserbase", | |
| "@browserbasehq/sdk-functions", | |
| "@browserbasehq/stagehand", | |
| "@browserbasehq/stagehand-docs", | |
| "@caretive/caret-cli", | |
| "@chtijs/eslint-config", | |
| "@clausehq/flows-step-httprequest", | |
| "@clausehq/flows-step-jsontoxml", | |
| "@clausehq/flows-step-mqtt", | |
| "@clausehq/flows-step-sendgridemail", | |
| "@clausehq/flows-step-taskscreateurl", | |
| "@cllbk/ghl", | |
| "@commute/bloom", | |
| "@commute/market-data", | |
| "@commute/market-data-chartjs", | |
| "@dev-blinq/ai-qa-logic", | |
| "@dev-blinq/blinqioclient", | |
| "@dev-blinq/cucumber-js", | |
| "@dev-blinq/cucumber_client", | |
| "@dev-blinq/ui-systems", | |
| "@ensdomains/address-encoder", | |
| "@ensdomains/blacklist", | |
| "@ensdomains/buffer", | |
| "@ensdomains/ccip-read-cf-worker", | |
| "@ensdomains/ccip-read-dns-gateway", | |
| "@ensdomains/ccip-read-router", | |
| "@ensdomains/ccip-read-worker-viem", | |
| "@ensdomains/content-hash", | |
| "@ensdomains/curvearithmetics", | |
| "@ensdomains/cypress-metamask", | |
| "@ensdomains/dnsprovejs", | |
| "@ensdomains/dnssec-oracle-anchors", | |
| "@ensdomains/dnssecoraclejs", | |
| "@ensdomains/durin", | |
| "@ensdomains/durin-middleware", | |
| "@ensdomains/ens-archived-contracts", | |
| "@ensdomains/ens-avatar", | |
| "@ensdomains/ens-contracts", | |
| "@ensdomains/ens-test-env", | |
| "@ensdomains/ens-validation", | |
| "@ensdomains/ensjs", | |
| "@ensdomains/ensjs-react", | |
| "@ensdomains/eth-ens-namehash", | |
| "@ensdomains/hackathon-registrar", | |
| "@ensdomains/hardhat-chai-matchers-viem", | |
| "@ensdomains/hardhat-toolbox-viem-extended", | |
| "@ensdomains/mock", | |
| "@ensdomains/name-wrapper", | |
| "@ensdomains/offchain-resolver-contracts", | |
| "@ensdomains/op-resolver-contracts", | |
| "@ensdomains/react-ens-address", | |
| "@ensdomains/renewal", | |
| "@ensdomains/renewal-widget", | |
| "@ensdomains/reverse-records", | |
| "@ensdomains/server-analytics", | |
| "@ensdomains/solsha1", | |
| "@ensdomains/subdomain-registrar", | |
| "@ensdomains/test-utils", | |
| "@ensdomains/thorin", | |
| "@ensdomains/ui", | |
| "@ensdomains/unicode-confusables", | |
| "@ensdomains/unruggable-gateways", | |
| "@ensdomains/vite-plugin-i18next-loader", | |
| "@ensdomains/web3modal", | |
| "@everreal/react-charts", | |
| "@everreal/validate-esmoduleinterop-imports", | |
| "@everreal/web-analytics", | |
| "@faq-component/core", | |
| "@faq-component/react", | |
| "@fishingbooker/browser-sync-plugin", | |
| "@fishingbooker/react-loader", | |
| "@fishingbooker/react-pagination", | |
| "@fishingbooker/react-raty", | |
| "@fishingbooker/react-swiper", | |
| "@hapheus/n8n-nodes-pgp", | |
| "@hover-design/core", | |
| "@hover-design/react", | |
| "@huntersofbook/auth-vue", | |
| "@huntersofbook/core", | |
| "@huntersofbook/core-nuxt", | |
| "@huntersofbook/form-naiveui", | |
| "@huntersofbook/i18n", | |
| "@huntersofbook/ui", | |
| "@hyperlook/telemetry-sdk", | |
| "@ifelsedeveloper/protocol-contracts-svm-idl", | |
| "@ifelsedeveloper/protocol-contracts-svm-idl", | |
| "@ifings/design-system", | |
| "@ifings/metatron3", | |
| "@jayeshsadhwani/telemetry-sdk", | |
| "@kvytech/cli", | |
| "@kvytech/components", | |
| "@kvytech/habbit-e2e-test", | |
| "@kvytech/medusa-plugin-announcement", | |
| "@kvytech/medusa-plugin-management", | |
| "@kvytech/medusa-plugin-newsletter", | |
| "@kvytech/medusa-plugin-product-reviews", | |
| "@kvytech/medusa-plugin-promotion", | |
| "@kvytech/web", | |
| "@lessondesk/api-client", | |
| "@lessondesk/api-client", | |
| "@lessondesk/babel-preset", | |
| "@lessondesk/electron-group-api-client", | |
| "@lessondesk/eslint-config", | |
| "@lessondesk/material-icons", | |
| "@lessondesk/react-table-context", | |
| "@lessondesk/schoolbus", | |
| "@lessondesk/schoolbus", | |
| "@livecms/live-edit", | |
| "@livecms/nuxt-live-edit", | |
| "@lokeswari-satyanarayanan/rn-zustand-expo-template", | |
| "@louisle2/core", | |
| "@louisle2/cortex-js", | |
| "@lpdjs/firestore-repo-service", | |
| "@lui-ui/lui-nuxt", | |
| "@lui-ui/lui-tailwindcss", | |
| "@lui-ui/lui-vue", | |
| "@markvivanco/app-version-checker", | |
| "@mcp-use/cli", | |
| "@mcp-use/cli", | |
| "@mcp-use/inspector", | |
| "@mcp-use/inspector", | |
| "@mcp-use/mcp-use", | |
| "@mcp-use/mcp-use", | |
| "@micado-digital/stadtmarketing-kufstein-external", | |
| "@ntnx/passport-wso2", | |
| "@ntnx/t", | |
| "@oku-ui/accordion", | |
| "@oku-ui/alert-dialog", | |
| "@oku-ui/arrow", | |
| "@oku-ui/aspect-ratio", | |
| "@oku-ui/avatar", | |
| "@oku-ui/checkbox", | |
| "@oku-ui/collapsible", | |
| "@oku-ui/collection", | |
| "@oku-ui/dialog", | |
| "@oku-ui/direction", | |
| "@oku-ui/dismissable-layer", | |
| "@oku-ui/focus-guards", | |
| "@oku-ui/focus-scope", | |
| "@oku-ui/hover-card", | |
| "@oku-ui/label", | |
| "@oku-ui/menu", | |
| "@oku-ui/motion", | |
| "@oku-ui/motion-nuxt", | |
| "@oku-ui/popover", | |
| "@oku-ui/popper", | |
| "@oku-ui/portal", | |
| "@oku-ui/presence", | |
| "@oku-ui/primitive", | |
| "@oku-ui/primitives", | |
| "@oku-ui/primitives-nuxt", | |
| "@oku-ui/progress", | |
| "@oku-ui/provide", | |
| "@oku-ui/radio-group", | |
| "@oku-ui/roving-focus", | |
| "@oku-ui/scroll-area", | |
| "@oku-ui/separator", | |
| "@oku-ui/slider", | |
| "@oku-ui/slot", | |
| "@oku-ui/switch", | |
| "@oku-ui/tabs", | |
| "@oku-ui/toast", | |
| "@oku-ui/toggle", | |
| "@oku-ui/toggle-group", | |
| "@oku-ui/toolbar", | |
| "@oku-ui/tooltip", | |
| "@oku-ui/use-composable", | |
| "@oku-ui/utils", | |
| "@oku-ui/visually-hidden", | |
| "@orbitgtbelgium/mapbox-gl-draw-cut-polygon-mode", | |
| "@orbitgtbelgium/mapbox-gl-draw-scale-rotate-mode", | |
| "@orbitgtbelgium/orbit-components", | |
| "@orbitgtbelgium/time-slider", | |
| "@osmanekrem/bmad", | |
| "@osmanekrem/error-handler", | |
| "@pergel/cli", | |
| "@pergel/module-box", | |
| "@pergel/module-graphql", | |
| "@pergel/module-ui", | |
| "@pergel/nuxt", | |
| "@posthog/agent", | |
| "@posthog/ai", | |
| "@posthog/automatic-cohorts-plugin", | |
| "@posthog/bitbucket-release-tracker", | |
| "@posthog/cli", | |
| "@posthog/clickhouse", | |
| "@posthog/core", | |
| "@posthog/currency-normalization-plugin", | |
| "@posthog/customerio-plugin", | |
| "@posthog/databricks-plugin", | |
| "@posthog/drop-events-on-property-plugin", | |
| "@posthog/event-sequence-timer-plugin", | |
| "@posthog/filter-out-plugin", | |
| "@posthog/first-time-event-tracker", | |
| "@posthog/geoip-plugin", | |
| "@posthog/github-release-tracking-plugin", | |
| "@posthog/gitub-star-sync-plugin", | |
| "@posthog/heartbeat-plugin", | |
| "@posthog/hedgehog-mode", | |
| "@posthog/icons", | |
| "@posthog/ingestion-alert-plugin", | |
| "@posthog/intercom-plugin", | |
| "@posthog/kinesis-plugin", | |
| "@posthog/laudspeaker-plugin", | |
| "@posthog/lemon-ui", | |
| "@posthog/maxmind-plugin", | |
| "@posthog/migrator3000-plugin", | |
| "@posthog/netdata-event-processing", | |
| "@posthog/nextjs", | |
| "@posthog/nextjs-config", | |
| "@posthog/nuxt", | |
| "@posthog/pagerduty-plugin", | |
| "@posthog/piscina", | |
| "@posthog/plugin-contrib", | |
| "@posthog/plugin-server", | |
| "@posthog/plugin-unduplicates", | |
| "@posthog/postgres-plugin", | |
| "@posthog/react-rrweb-player", | |
| "@posthog/rrdom", | |
| "@posthog/rrweb", | |
| "@posthog/rrweb-player", | |
| "@posthog/rrweb-record", | |
| "@posthog/rrweb-replay", | |
| "@posthog/rrweb-snapshot", | |
| "@posthog/rrweb-utils", | |
| "@posthog/sendgrid-plugin", | |
| "@posthog/siphash", | |
| "@posthog/snowflake-export-plugin", | |
| "@posthog/taxonomy-plugin", | |
| "@posthog/twilio-plugin", | |
| "@posthog/twitter-followers-plugin", | |
| "@posthog/url-normalizer-plugin", | |
| "@posthog/variance-plugin", | |
| "@posthog/web-dev-server", | |
| "@posthog/wizard", | |
| "@posthog/zendesk-plugin", | |
| "@postman/csv-parse", | |
| "@postman/csv-parse", | |
| "@postman/final-node-keytar", | |
| "@postman/final-node-keytar", | |
| "@postman/final-node-keytar", | |
| "@postman/mcp-ui-client", | |
| "@postman/mcp-ui-client", | |
| "@postman/node-keytar", | |
| "@postman/node-keytar", | |
| "@postman/pm-bin-linux-x64", | |
| "@postman/pm-bin-linux-x64", | |
| "@postman/pm-bin-linux-x64", | |
| "@postman/pm-bin-macos-arm64", | |
| "@postman/pm-bin-macos-arm64", | |
| "@postman/pm-bin-macos-x64", | |
| "@postman/pm-bin-macos-x64", | |
| "@postman/pm-bin-windows-x64", | |
| "@postman/pm-bin-windows-x64", | |
| "@postman/postman-collection-fork", | |
| "@postman/postman-collection-fork", | |
| "@postman/postman-mcp-cli", | |
| "@postman/postman-mcp-cli", | |
| "@postman/postman-mcp-cli", | |
| "@postman/postman-mcp-server", | |
| "@postman/postman-mcp-server", | |
| "@postman/pretty-ms", | |
| "@postman/pretty-ms", | |
| "@postman/pretty-ms", | |
| "@postman/secret-scanner-wasm", | |
| "@postman/secret-scanner-wasm", | |
| "@postman/tunnel-agent", | |
| "@postman/tunnel-agent", | |
| "@postman/wdio-allure-reporter", | |
| "@postman/wdio-allure-reporter", | |
| "@postman/wdio-junit-reporter", | |
| "@postman/wdio-junit-reporter", | |
| "@postman/wdio-junit-reporter", | |
| "@pradhumngautam/common-app", | |
| "@productdevbook/animejs-vue", | |
| "@productdevbook/auth", | |
| "@productdevbook/chatwoot", | |
| "@productdevbook/motion", | |
| "@productdevbook/ts-i18n", | |
| "@pruthvi21/use-debounce", | |
| "@quick-start-soft/quick-document-translator", | |
| "@quick-start-soft/quick-git-clean-markdown", | |
| "@quick-start-soft/quick-markdown", | |
| "@quick-start-soft/quick-markdown-compose", | |
| "@quick-start-soft/quick-markdown-image", | |
| "@quick-start-soft/quick-markdown-print", | |
| "@quick-start-soft/quick-markdown-translator", | |
| "@quick-start-soft/quick-remove-image-background", | |
| "@quick-start-soft/quick-task-refine", | |
| "@relyt/claude-context-core", | |
| "@relyt/claude-context-mcp", | |
| "@sameepsi/sor", | |
| "@sameepsi/sor2", | |
| "@seezo/sdr-mcp-server", | |
| "@seung-ju/next", | |
| "@seung-ju/openapi-generator", | |
| "@seung-ju/react-hooks", | |
| "@seung-ju/react-native-action-sheet", | |
| "@silgi/better-auth", | |
| "@silgi/drizzle", | |
| "@silgi/ecosystem", | |
| "@silgi/graphql", | |
| "@silgi/module-builder", | |
| "@silgi/openapi", | |
| "@silgi/permission", | |
| "@silgi/ratelimit", | |
| "@silgi/scalar", | |
| "@silgi/yoga", | |
| "@sme-ui/aoma-vevasound-metadata-lib", | |
| "@strapbuild/react-native-date-time-picker", | |
| "@strapbuild/react-native-perspective-image-cropper", | |
| "@strapbuild/react-native-perspective-image-cropper-2", | |
| "@strapbuild/react-native-perspective-image-cropper-poojan31", | |
| "@suraj_h/medium-common", | |
| "@thedelta/eslint-config", | |
| "@tiaanduplessis/json", | |
| "@tiaanduplessis/json", | |
| "@tiaanduplessis/react-progressbar", | |
| "@tiaanduplessis/react-progressbar", | |
| "@trackstar/angular-trackstar-link", | |
| "@trackstar/react-trackstar-link", | |
| "@trackstar/react-trackstar-link-upgrade", | |
| "@trackstar/test-angular-package", | |
| "@trackstar/test-package", | |
| "@trefox/sleekshop-js", | |
| "@trigo/atrix", | |
| "@trigo/atrix-acl", | |
| "@trigo/atrix-elasticsearch", | |
| "@trigo/atrix-mongoose", | |
| "@trigo/atrix-orientdb", | |
| "@trigo/atrix-postgres", | |
| "@trigo/atrix-pubsub", | |
| "@trigo/atrix-redis", | |
| "@trigo/atrix-soap", | |
| "@trigo/atrix-swagger", | |
| "@trigo/bool-expressions", | |
| "@trigo/eslint-config-trigo", | |
| "@trigo/fsm", | |
| "@trigo/hapi-auth-signedlink", | |
| "@trigo/jsdt", | |
| "@trigo/keycloak-api", | |
| "@trigo/node-soap", | |
| "@trigo/pathfinder-ui-css", | |
| "@trigo/trigo-hapijs", | |
| "@trpc-rate-limiter/cloudflare", | |
| "@trpc-rate-limiter/hono", | |
| "@varsityvibe/api-client", | |
| "@varsityvibe/api-client", | |
| "@varsityvibe/utils", | |
| "@varsityvibe/validation-schemas", | |
| "@varsityvibe/validation-schemas", | |
| "@viapip/eslint-config", | |
| "@vishadtyagi/full-year-calendar", | |
| "@voiceflow/alexa-types", | |
| "@voiceflow/anthropic", | |
| "@voiceflow/anthropic", | |
| "@voiceflow/api-sdk", | |
| "@voiceflow/backend-utils", | |
| "@voiceflow/backend-utils", | |
| "@voiceflow/base-types", | |
| "@voiceflow/base-types", | |
| "@voiceflow/body-parser", | |
| "@voiceflow/body-parser", | |
| "@voiceflow/chat-types", | |
| "@voiceflow/chat-types", | |
| "@voiceflow/circleci-config-sdk-orb-import", | |
| "@voiceflow/circleci-config-sdk-orb-import", | |
| "@voiceflow/commitlint-config", | |
| "@voiceflow/common", | |
| "@voiceflow/common", | |
| "@voiceflow/default-prompt-wrappers", | |
| "@voiceflow/default-prompt-wrappers", | |
| "@voiceflow/dependency-cruiser-config", | |
| "@voiceflow/dependency-cruiser-config", | |
| "@voiceflow/dtos-interact", | |
| "@voiceflow/dtos-interact", | |
| "@voiceflow/encryption", | |
| "@voiceflow/encryption", | |
| "@voiceflow/eslint-config", | |
| "@voiceflow/eslint-config", | |
| "@voiceflow/eslint-plugin", | |
| "@voiceflow/eslint-plugin", | |
| "@voiceflow/exception", | |
| "@voiceflow/exception", | |
| "@voiceflow/fetch", | |
| "@voiceflow/fetch", | |
| "@voiceflow/general-types", | |
| "@voiceflow/general-types", | |
| "@voiceflow/git-branch-check", | |
| "@voiceflow/google-dfes-types", | |
| "@voiceflow/google-dfes-types", | |
| "@voiceflow/google-types", | |
| "@voiceflow/husky-config", | |
| "@voiceflow/logger", | |
| "@voiceflow/logger", | |
| "@voiceflow/metrics", | |
| "@voiceflow/metrics", | |
| "@voiceflow/natural-language-commander", | |
| "@voiceflow/natural-language-commander", | |
| "@voiceflow/nestjs-common", | |
| "@voiceflow/nestjs-common", | |
| "@voiceflow/nestjs-mongodb", | |
| "@voiceflow/nestjs-mongodb", | |
| "@voiceflow/nestjs-rate-limit", | |
| "@voiceflow/nestjs-rate-limit", | |
| "@voiceflow/nestjs-redis", | |
| "@voiceflow/nestjs-redis", | |
| "@voiceflow/nestjs-timeout", | |
| "@voiceflow/npm-package-json-lint-config", | |
| "@voiceflow/openai", | |
| "@voiceflow/openai", | |
| "@voiceflow/pino", | |
| "@voiceflow/pino", | |
| "@voiceflow/pino-pretty", | |
| "@voiceflow/pino-pretty", | |
| "@voiceflow/prettier-config", | |
| "@voiceflow/react-chat", | |
| "@voiceflow/runtime", | |
| "@voiceflow/runtime", | |
| "@voiceflow/runtime-client-js", | |
| "@voiceflow/runtime-client-js", | |
| "@voiceflow/sdk-runtime", | |
| "@voiceflow/sdk-runtime", | |
| "@voiceflow/secrets-provider", | |
| "@voiceflow/semantic-release-config", | |
| "@voiceflow/serverless-plugin-typescript", | |
| "@voiceflow/serverless-plugin-typescript", | |
| "@voiceflow/slate-serializer", | |
| "@voiceflow/slate-serializer", | |
| "@voiceflow/stitches-react", | |
| "@voiceflow/stitches-react", | |
| "@voiceflow/storybook-config", | |
| "@voiceflow/storybook-config", | |
| "@voiceflow/stylelint-config", | |
| "@voiceflow/test-common", | |
| "@voiceflow/test-common", | |
| "@voiceflow/tsconfig", | |
| "@voiceflow/tsconfig-paths", | |
| "@voiceflow/tsconfig-paths", | |
| "@voiceflow/utils-designer", | |
| "@voiceflow/verror", | |
| "@voiceflow/vite-config", | |
| "@voiceflow/vite-config", | |
| "@voiceflow/vitest-config", | |
| "@voiceflow/vitest-config", | |
| "@voiceflow/voice-types", | |
| "@voiceflow/voice-types", | |
| "@voiceflow/voiceflow-types", | |
| "@voiceflow/voiceflow-types", | |
| "@voiceflow/widget", | |
| "@voiceflow/widget", | |
| "@vucod/email", | |
| "@zapier/ai-actions", | |
| "@zapier/ai-actions", | |
| "@zapier/ai-actions", | |
| "@zapier/ai-actions-react", | |
| "@zapier/ai-actions-react", | |
| "@zapier/ai-actions-react", | |
| "@zapier/babel-preset-zapier", | |
| "@zapier/babel-preset-zapier", | |
| "@zapier/babel-preset-zapier", | |
| "@zapier/browserslist-config-zapier", | |
| "@zapier/browserslist-config-zapier", | |
| "@zapier/browserslist-config-zapier", | |
| "@zapier/eslint-plugin-zapier", | |
| "@zapier/eslint-plugin-zapier", | |
| "@zapier/eslint-plugin-zapier", | |
| "@zapier/mcp-integration", | |
| "@zapier/mcp-integration", | |
| "@zapier/mcp-integration", | |
| "@zapier/secret-scrubber", | |
| "@zapier/secret-scrubber", | |
| "@zapier/secret-scrubber", | |
| "@zapier/spectral-api-ruleset", | |
| "@zapier/spectral-api-ruleset", | |
| "@zapier/spectral-api-ruleset", | |
| "@zapier/stubtree", | |
| "@zapier/stubtree", | |
| "@zapier/stubtree", | |
| "@zapier/zapier-sdk", | |
| "@zapier/zapier-sdk", | |
| "@zapier/zapier-sdk", | |
| "ai-crowl-shield", | |
| "arc-cli-fc", | |
| "asciitranslator", | |
| "asyncapi-preview", | |
| "asyncapi-preview", | |
| "atrix", | |
| "atrix-mongoose", | |
| "automation_model", | |
| "avvvatars-vue", | |
| "axios-builder", | |
| "axios-cancelable", | |
| "axios-cancelable", | |
| "axios-timed", | |
| "axios-timed", | |
| "barebones-css", | |
| "barebones-css", | |
| "benmostyn-frame-print", | |
| "best_gpio_controller", | |
| "better-auth-nuxt", | |
| "bidirectional-adapter", | |
| "bidirectional-adapter", | |
| "bidirectional-adapter", | |
| "bidirectional-adapter", | |
| "blinqio-executions-cli", | |
| "blob-to-base64", | |
| "bool-expressions", | |
| "buffered-interpolation-babylon6", | |
| "bun-plugin-httpfile", | |
| "bytecode-checker-cli", | |
| "bytecode-checker-cli", | |
| "bytecode-checker-cli", | |
| "bytecode-checker-cli", | |
| "bytes-to-x", | |
| "calc-loan-interest", | |
| "capacitor-plugin-apptrackingios", | |
| "capacitor-plugin-purchase", | |
| "capacitor-plugin-scgssigninwithgoogle", | |
| "capacitor-purchase-history", | |
| "capacitor-voice-recorder-wav", | |
| "ceviz", | |
| "chrome-extension-downloads", | |
| "chrome-extension-downloads", | |
| "claude-token-updater", | |
| "coinmarketcap-api", | |
| "coinmarketcap-api", | |
| "colors-regex", | |
| "command-irail", | |
| "compare-obj", | |
| "compare-obj", | |
| "composite-reducer", | |
| "composite-reducer", | |
| "composite-reducer", | |
| "composite-reducer", | |
| "count-it-down", | |
| "count-it-down", | |
| "cpu-instructions", | |
| "create-director-app", | |
| "create-glee-app", | |
| "create-glee-app", | |
| "create-hardhat3-app", | |
| "create-hardhat3-app", | |
| "create-hardhat3-app", | |
| "create-hardhat3-app", | |
| "create-mcp-use-app", | |
| "create-mcp-use-app", | |
| "create-silgi", | |
| "crypto-addr-codec", | |
| "css-dedoupe", | |
| "csv-tool-cli", | |
| "dashboard-empty-state", | |
| "designstudiouiux", | |
| "devstart-cli", | |
| "dialogflow-es", | |
| "dialogflow-es", | |
| "dialogflow-es", | |
| "discord-bot-server", | |
| "docusaurus-plugin-vanilla-extract", | |
| "dont-go", | |
| "dotnet-template", | |
| "dotnet-template", | |
| "drop-events-on-property-plugin", | |
| "easypanel-sdk", | |
| "email-deliverability-tester", | |
| "enforce-branch-name", | |
| "esbuild-plugin-brotli", | |
| "esbuild-plugin-eta", | |
| "esbuild-plugin-httpfile", | |
| "eslint-config-nitpicky", | |
| "eslint-config-trigo", | |
| "eslint-config-zeallat-base", | |
| "ethereum-ens", | |
| "evm-checkcode-cli", | |
| "evm-checkcode-cli", | |
| "evm-checkcode-cli", | |
| "evm-checkcode-cli", | |
| "exact-ticker", | |
| "expo-audio-session", | |
| "expo-router-on-rails", | |
| "express-starter-template", | |
| "expressos", | |
| "fat-fingered", | |
| "fat-fingered", | |
| "feature-flip", | |
| "feature-flip", | |
| "firestore-search-engine", | |
| "fittxt", | |
| "fittxt", | |
| "flapstacks", | |
| "flapstacks", | |
| "flatten-unflatten", | |
| "flatten-unflatten", | |
| "formik-error-focus", | |
| "formik-store", | |
| "frontity-starter-theme", | |
| "fuzzy-finder", | |
| "fuzzy-finder", | |
| "gate-evm-check-code2", | |
| "gate-evm-check-code2", | |
| "gate-evm-check-code2", | |
| "gate-evm-check-code2", | |
| "gate-evm-tools-test", | |
| "gate-evm-tools-test", | |
| "gate-evm-tools-test", | |
| "gate-evm-tools-test", | |
| "gatsby-plugin-antd", | |
| "gatsby-plugin-cname", | |
| "gatsby-plugin-cname", | |
| "generator-meteor-stock", | |
| "generator-ng-itobuz", | |
| "get-them-args", | |
| "github-action-for-generator", | |
| "github-action-for-generator", | |
| "gitsafe", | |
| "go-template", | |
| "go-template", | |
| "gulp-inject-envs", | |
| "gulp-inject-envs", | |
| "haufe-axera-api-client", | |
| "hope-mapboxdraw", | |
| "hopedraw", | |
| "hover-design-prototype", | |
| "httpness", | |
| "httpness", | |
| "hyper-fullfacing", | |
| "hyperterm-hipster", | |
| "ids-css", | |
| "ids-enterprise-mcp-server", | |
| "ids-enterprise-typings", | |
| "image-to-uri", | |
| "image-to-uri", | |
| "insomnia-plugin-random-pick", | |
| "invo", | |
| "iron-shield-miniapp", | |
| "ito-button", | |
| "itobuz-angular", | |
| "itobuz-angular-auth", | |
| "itobuz-angular-button", | |
| "jacob-zuma", | |
| "jacob-zuma", | |
| "jaetut-varit-test", | |
| "jan-browser", | |
| "jquery-bindings", | |
| "jquery-bindings", | |
| "jsonsurge", | |
| "just-toasty", | |
| "kill-port", | |
| "kill-port", | |
| "kinetix-default-token-list", | |
| "kns-error-code", | |
| "korea-administrative-area-geo-json-util", | |
| "kwami", | |
| "kwami", | |
| "lang-codes", | |
| "lang-codes", | |
| "license-o-matic", | |
| "license-o-matic", | |
| "lint-staged-imagemin", | |
| "lint-staged-imagemin", | |
| "lite-serper-mcp-server", | |
| "lui-vue-test", | |
| "luno-api", | |
| "m25-transaction-utils", | |
| "manual-billing-system-miniapp-api", | |
| "mcp-use", | |
| "mcp-use", | |
| "medusa-plugin-announcement", | |
| "medusa-plugin-logs", | |
| "medusa-plugin-momo", | |
| "medusa-plugin-product-reviews-kvy", | |
| "medusa-plugin-zalopay", | |
| "mod10-check-digit", | |
| "mon-package-react-typescript", | |
| "my-saeed-lib", | |
| "n8n-nodes-tmdb", | |
| "n8n-nodes-vercel-ai-sdk", | |
| "n8n-nodes-viral-app", | |
| "nanoreset", | |
| "nanoreset", | |
| "next-circular-dependency", | |
| "next-circular-dependency", | |
| "next-simple-google-analytics", | |
| "next-simple-google-analytics", | |
| "next-styled-nprogress", | |
| "next-styled-nprogress", | |
| "ngx-useful-swiper-prosenjit", | |
| "ngx-wooapi", | |
| "nitro-graphql", | |
| "nitro-kutu", | |
| "nitrodeploy", | |
| "nitroping", | |
| "normal-store", | |
| "normal-store", | |
| "normal-store", | |
| "normal-store", | |
| "nuxt-keycloak", | |
| "obj-to-css", | |
| "obj-to-css", | |
| "okta-react-router-6", | |
| "open2internet", | |
| "orbit-boxicons", | |
| "orbit-nebula-draw-tools", | |
| "orbit-nebula-editor", | |
| "orbit-soap", | |
| "orchestrix", | |
| "package-tester", | |
| "parcel-plugin-asset-copier", | |
| "parcel-plugin-asset-copier", | |
| "pdf-annotation", | |
| "pergel", | |
| "pergeltest", | |
| "piclite", | |
| "pico-uid", | |
| "pico-uid", | |
| "pkg-readme", | |
| "poper-react-sdk", | |
| "posthog-docusaurus", | |
| "posthog-js", | |
| "posthog-node", | |
| "posthog-node", | |
| "posthog-plugin-hello-world", | |
| "posthog-react-native", | |
| "posthog-react-native", | |
| "posthog-react-native-session-replay", | |
| "prime-one-table", | |
| "prompt-eng", | |
| "prompt-eng-server", | |
| "puny-req", | |
| "quickswap-ads-list", | |
| "quickswap-default-staking-list", | |
| "quickswap-default-staking-list-address", | |
| "quickswap-default-token-list", | |
| "quickswap-router-sdk", | |
| "quickswap-sdk", | |
| "quickswap-smart-order-router", | |
| "quickswap-token-lists", | |
| "quickswap-v2-sdk", | |
| "ra-auth-firebase", | |
| "ra-data-firebase", | |
| "ra-data-firebase", | |
| "react-component-taggers", | |
| "react-data-to-export", | |
| "react-element-prompt-inspector", | |
| "react-favic", | |
| "react-hook-form-persist", | |
| "react-hook-form-persist", | |
| "react-jam-icons", | |
| "react-jam-icons", | |
| "react-keycloak-context", | |
| "react-keycloak-context", | |
| "react-library-setup", | |
| "react-linear-loader", | |
| "react-micromodal.js", | |
| "react-micromodal.js", | |
| "react-native-datepicker-modal", | |
| "react-native-datepicker-modal", | |
| "react-native-email", | |
| "react-native-email", | |
| "react-native-fetch", | |
| "react-native-fetch", | |
| "react-native-get-pixel-dimensions", | |
| "react-native-get-pixel-dimensions", | |
| "react-native-google-maps-directions", | |
| "react-native-jam-icons", | |
| "react-native-jam-icons", | |
| "react-native-log-level", | |
| "react-native-log-level", | |
| "react-native-modest-checkbox", | |
| "react-native-modest-storage", | |
| "react-native-phone-call", | |
| "react-native-phone-call", | |
| "react-native-retriable-fetch", | |
| "react-native-retriable-fetch", | |
| "react-native-use-modal", | |
| "react-native-view-finder", | |
| "react-native-view-finder", | |
| "react-native-websocket", | |
| "react-native-websocket", | |
| "react-native-worklet-functions", | |
| "react-packery-component", | |
| "react-qr-image", | |
| "react-scrambled-text", | |
| "rediff", | |
| "rediff-viewer", | |
| "redux-forge", | |
| "redux-router-kit", | |
| "redux-router-kit", | |
| "redux-router-kit", | |
| "revenuecat", | |
| "rollup-plugin-httpfile", | |
| "sa-company-registration-number-regex", | |
| "sa-company-registration-number-regex", | |
| "sa-id-gen", | |
| "sa-id-gen", | |
| "samesame", | |
| "scgs-capacitor-subscribe", | |
| "scgsffcreator", | |
| "schob", | |
| "selenium-session", | |
| "selenium-session-client", | |
| "set-nested-prop", | |
| "set-nested-prop", | |
| "shelf-jwt-sessions", | |
| "shell-exec", | |
| "shell-exec", | |
| "shinhan-limit-scrap", | |
| "silgi", | |
| "simplejsonform", | |
| "skills-use", | |
| "skills-use", | |
| "solomon-api-stories", | |
| "solomon-v3-stories", | |
| "solomon-v3-ui-wrapper", | |
| "soneium-acs", | |
| "sort-by-distance", | |
| "south-african-id-info", | |
| "stat-fns", | |
| "stoor", | |
| "sufetch", | |
| "super-commit", | |
| "svelte-autocomplete-select", | |
| "svelte-toasty", | |
| "svelte-toasty", | |
| "tanstack-shadcn-table", | |
| "tavily-module", | |
| "tcsp", | |
| "tcsp-draw-test", | |
| "tcsp-test-vd", | |
| "template-lib", | |
| "template-lib", | |
| "template-micro-service", | |
| "template-micro-service", | |
| "tenacious-fetch", | |
| "tenacious-fetch", | |
| "test-foundry-app", | |
| "test-foundry-app", | |
| "test-foundry-app", | |
| "test-foundry-app", | |
| "test-hardhat-app", | |
| "test-hardhat-app", | |
| "test-hardhat-app", | |
| "test-hardhat-app", | |
| "test23112222-api", | |
| "tiaan", | |
| "tiptap-shadcn-vue", | |
| "token.js-fork", | |
| "toonfetch", | |
| "trigo-react-app", | |
| "ts-relay-cursor-paging", | |
| "typeface-antonio-complete", | |
| "typefence", | |
| "typefence", | |
| "typeorm-orbit", | |
| "unadapter", | |
| "undefsafe-typed", | |
| "unemail", | |
| "uniswap-router-sdk", | |
| "uniswap-smart-order-router", | |
| "uniswap-test-sdk-core", | |
| "unsearch", | |
| "uplandui", | |
| "upload-to-play-store", | |
| "upload-to-play-store", | |
| "url-encode-decode", | |
| "url-encode-decode", | |
| "use-unsaved-changes", | |
| "v-plausible", | |
| "valid-south-african-id", | |
| "valuedex-sdk", | |
| "vf-oss-template", | |
| "vf-oss-template", | |
| "vf-oss-template", | |
| "victoria-wallet-constants", | |
| "victoria-wallet-constants", | |
| "victoria-wallet-core", | |
| "victoria-wallet-core", | |
| "victoria-wallet-type", | |
| "victoria-wallet-type", | |
| "victoria-wallet-utils", | |
| "victoria-wallet-utils", | |
| "victoria-wallet-validator", | |
| "victoria-wallet-validator", | |
| "victoriaxoaquyet-wallet-core", | |
| "victoriaxoaquyet-wallet-core", | |
| "vite-plugin-httpfile", | |
| "vue-browserupdate-nuxt", | |
| "wallet-evm", | |
| "wallet-evm", | |
| "wallet-type", | |
| "wallet-type", | |
| "web-scraper-mcp", | |
| "web-types-htmx", | |
| "web-types-lit", | |
| "webpack-loader-httpfile", | |
| "wellness-expert-ng-gallery", | |
| "wenk", | |
| "wenk", | |
| "zapier-async-storage", | |
| "zapier-async-storage", | |
| "zapier-async-storage", | |
| "zapier-platform-cli", | |
| "zapier-platform-cli", | |
| "zapier-platform-cli", | |
| "zapier-platform-core", | |
| "zapier-platform-core", | |
| "zapier-platform-core", | |
| "zapier-platform-legacy-scripting-runner", | |
| "zapier-platform-legacy-scripting-runner", | |
| "zapier-platform-legacy-scripting-runner", | |
| "zapier-platform-schema", | |
| "zapier-platform-schema", | |
| "zapier-platform-schema", | |
| "zapier-scripts", | |
| "zapier-scripts", | |
| "zuper-cli", | |
| "zuper-sdk", | |
| "zuper-stream", | |
| ]; | |
| /** | |
| Script to scan all projects with NPM dependencies for packages that were affected by the Sha1-hulud 2.0 security threat. | |
| Only checks for repo's that use npm or yarn 1.x. | |
| Based on an original script written by [Paul van den Dool](https://github.com/PaulvdDool). | |
| */ | |
| function checkPackageLockFile(pathToLockFile, folderPath, file) { | |
| let json; | |
| try { | |
| json = JSON.parse(fs.readFileSync(pathToLockFile, "utf8")); | |
| } catch (e) { | |
| console.log(`❌ ${pathToLockFile} → cannot parse ${file}`); | |
| return; | |
| } | |
| const packages = Object.keys(json.packages || {}); | |
| const matches = new Set(); | |
| for (const key of packages) { | |
| for (const item of watchList) { | |
| if (key.includes(`node_modules/${item}`)) { | |
| matches.add(item); | |
| } | |
| } | |
| } | |
| const repoName = path.basename(folderPath); | |
| if (matches.size > 0) { | |
| console.log( | |
| `⚠️ ${folderPath}: ${repoName} → ${Array.from(matches).join(", ")}` | |
| ); | |
| } else { | |
| console.log(`✅ ${folderPath}: ${repoName} → nothing found`); | |
| } | |
| } | |
| function checkYarnLockFile(pathToLockFile, folderPath, file) { | |
| let lockFileContent; | |
| try { | |
| lockFileContent = fs.readFileSync(pathToLockFile, "utf8"); | |
| } catch (e) { | |
| console.log(`❌ ${pathToLockFile} → cannot read ${file}`); | |
| return; | |
| } | |
| const matches = new Set(); | |
| for (const item of watchList) { | |
| if (lockFileContent.includes(item)) { | |
| matches.add(item); | |
| } | |
| } | |
| const repoName = path.basename(folderPath); | |
| if (matches.size > 0) { | |
| console.log( | |
| `⚠️ ${folderPath}: ${repoName} → ${Array.from(matches).join(", ")}` | |
| ); | |
| } else { | |
| console.log(`✅ ${folderPath}: ${repoName} → nothing found`); | |
| } | |
| } | |
| function scanDirectory(dirPath, file) { | |
| const lockFile = path.join(dirPath, file); | |
| // Check if package-lock.json exists in this directory | |
| if (fs.existsSync(lockFile)) { | |
| console.log(`Checking ${lockFile}...`); | |
| if (file === "package-lock.json") { | |
| checkPackageLockFile(lockFile, dirPath, file); | |
| } else if (file === "yarn.lock") { | |
| checkYarnLockFile(lockFile, dirPath, file); | |
| } | |
| } | |
| // Recurse into subdirectories, but skip node_modules | |
| try { | |
| const entries = fs.readdirSync(dirPath, { withFileTypes: true }); | |
| for (const entry of entries) { | |
| if (entry.isDirectory() && entry.name !== "node_modules") { | |
| const subDirPath = path.join(dirPath, entry.name); | |
| scanDirectory(subDirPath, file); | |
| } | |
| } | |
| } catch (e) { | |
| console.log(`❌ ${dirPath} → ${e.message}`); | |
| // Skip directories we can't read (permissions, etc.) | |
| } | |
| } | |
| const parentFolder = process.argv[2] || "."; | |
| console.log("Scanning package-lock.json files..."); | |
| scanDirectory(parentFolder, "package-lock.json"); | |
| console.log("Scan done."); | |
| console.log("--------------------------------"); | |
| console.log("Scanning yarn.lock files..."); | |
| scanDirectory(parentFolder, "yarn.lock"); | |
| console.log("Scan done."); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment