ΠΡΠΊΡΠΈΠ΅Π½ Π΅ Π²ΡΠΎΡ Π½Π°ΠΏΠ°Π΄ Π²ΡΠ· ΠΏΠ°ΠΊΠ΅ΡΠΈ Π²ΠΎ NPM ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΎΡ, ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΡΠ°ΠΌΠΎΡΠ°Π·ΠΌΠ½ΠΎΠΆΡΠ²Π°ΡΠΊΠΈΠΎΡ ΡΡΠ² Shai-Hulud ΠΊΠΎΡ Π²ΠΌΠ΅ΡΠ½ΡΠ²Π° ΠΌΠ°Π»ΠΈΡΠΈΠΎΠ·Π΅Π½ ΡΠΎΡΡΠ²Π΅Ρ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΡΠ΅. ΠΠ°ΠΏΠ°Π΄ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ°ΡΠ΅ ΡΠΎ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠ°Π»ΠΈΡΠΈΠΎΠ·Π½ΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡΠ° ΠΎΠ΄ 605 ΠΏΠ°ΠΊΠ΅ΡΠΈ, Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ Π½Π°Π΄ 100 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ°.
ΠΠ° Π΄Π° Π³ΠΎ ΠΈΠ·Π²ΡΡΠ°Ρ Π½Π°ΠΏΠ°Π΄ΠΎΡ, Π½Π°ΠΏΠ°ΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π»Π΅ ΡΠΈΡΠΈΠ½Π³ Π·Π° Π΄Π° Π³ΠΈ ΠΏΡΠ΅ΡΡΠ΅ΡΠ½Π°Ρ Π°ΠΊΡΠ΅Π΄ΠΈΡΠΈΠ²ΠΈΡΠ΅ Π½Π° ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠΎΡ Π½Π° ΡΠΌΠ΅ΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠΏΡΠ»Π°ΡΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠ°ΠΊΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ Π·Π° ΠΌΠ½ΠΎΠ³Ρ Π΄ΡΡΠ³ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΊΠΈΠ΄Π½Π°ΠΏΠΈΡΠ°Π½Π°ΡΠ° ΡΠΌΠ΅ΡΠΊΠ°, Π½Π°ΠΏΠ°ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π²ΠΈΠ»Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ ΡΡΠΎ ΡΠΎΠ΄ΡΠΆΠ΅Π»ΠΎ ΠΊΠΎΠ΄ ΡΡΠΎ Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π» ΡΡΠ²ΠΎΡ ΠΊΠΎΠ³Π° Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π±ΠΈΠ» ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΠΊΠ°ΠΊΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ. ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ Π»Π°Π½ΡΠΈΡΠ°, ΡΡΠ²ΠΎΡ ΡΠ° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½Π°ΡΠ° ΠΎΠΊΠΎΠ»ΠΈΠ½Π° Π·Π° Π°ΠΊΡΠ΅Π΄ΠΈΡΠΈΠ²ΠΈ, ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΡΠΈ ΡΠ° ΠΈ ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠΈ ΡΠ° Π°Π»Π°ΡΠΊΠ°ΡΠ° TruffleHog.
ΠΠΎΠΊΠΎΠ»ΠΊΡ ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ ΡΠΎΠΊΠ΅Π½ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ NPM, ΡΡΠ²ΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΠΎΠ±ΡΠ°Π²ΡΠ²Π° Π½ΠΎΠ²ΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ½ΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡΠ° Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ°Π·Π²ΠΈΠ΅Π½ΠΈ Π²ΠΎ ΡΠ΅ΠΊΠΎΠ²Π½Π°ΡΠ° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°. ΠΠ²ΠΎΡ ΡΠΈΠ½ΡΠΈΡ Π³ΠΎ ΠΈΠ½ΡΠΈΡΠΈΡΠ° ΡΠ΅Π»ΠΎΡΠΎ Π΄ΡΠ²ΠΎ Π½Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠΊΠ΅Π½ΠΎΡ NPM, ΡΡΠ²ΠΎΡ ΡΠΊΠ»Π°Π΄ΠΈΡΠ° ΠΊΠ»ΡΡΠ΅Π²ΠΈ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ GitHub ΠΈ AWS, Azure ΠΈ GCP (Google Cloud Platform) cloud ΡΡΠ»ΡΠ³ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΎΡΠΊΡΠΈΠ΅ ΡΠΊΠ΅Π½Π΅ΡΠΎΡ TruffleHog.
Π§ΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅Π½ΠΈ Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°Π°Ρ Π½Π° GitHub ΠΏΡΠ΅ΠΊΡ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ ΡΠΎ ΡΠ»ΡΡΠ°ΡΠ½ΠΈ ΠΈΠΌΠΈΡΠ° (Π½Π° ΠΏΡ., βqzx15djl71alh6p80hβ) ΠΈ ΡΡΠ°Π·Π°ΡΠ° βSha1-Hulud: ΠΡΠΎΡΠΎΡΠΎ Π΄ΠΎΠ°ΡΠ°ΡΠ΅β Π²ΠΎ ΠΎΠΏΠΈΡΠΎΡ. ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠΈΡΡΠΈΡΠ°Π½ΠΈ ΠΈ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°Π°Ρ Π²ΠΎ Π»ΠΎΠ³ΠΎΠ²ΠΈΡΠ΅ Π½Π° GitHub Actions. ΠΡΠ΅ΠΈΡΠ°Π½ΠΎΡΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ ΡΠΎΠ΄ΡΠΆΠΈ JSON Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° (Π½Π° ΠΏΡ., jsonactionsSecrets.json ΠΈΠ»ΠΈ contents.json) ΡΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈ Π½ΠΈΠ·Π° ΡΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈ ΡΠΎ base64, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° ΠΈ Π·Π°ΡΡΠ²Π°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ° Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΎ ΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° GitHub, ΡΡΠ²ΠΎΡ ΠΊΡΠ΅ΠΈΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°Ρ Π½Π° GitHub Actions Π½Π°ΡΠ΅ΡΠ΅Π½ β.github/workflows/formatter_123456789.ymlβ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π½Π°ΡΠ΅ΡΠ΅Π½ SHA1HULUD.
Π Π°Π·Π»ΠΈΠΊΠΈΡΠ΅ ΠΎΠ΄ ΡΠ»ΠΈΡΠ½ΠΈΠΎΡ ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈΡΠΊΠΈ Π½Π°ΠΏΠ°Π΄ ΡΠ΅ ΡΠ²Π΅Π΄ΡΠ²Π°Π°Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° Π²ΠΌΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠ°Π»ΠΈΡΠΈΠΎΠ·Π΅Π½ ΠΊΠΎΠ΄ Π²ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ. ΠΠ°Π»ΠΈΡΠΈΠΎΠ·Π½ΠΈΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΡΡΠ²ΠΎΡ ΡΠ²ΡΠ΄Π°Ρ Π΄Π΅ΠΊΠ° ΡΠ° ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Bun JavaScript. ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βnode setup_bun.jsβ ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π° Π²ΠΎ Π΄Π΅Π»ΠΎΡ βpreinstallβ ΠΎΠ΄ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° package.json, ΠΊΠΎΡΠ° Π³ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΡΠΊΡΠΈΠΏΡΠΈΡΠ΅ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠ°Ρ ΠΏΡΠ΅Π΄ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°ΡΠ°.

ΠΠ°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° βsetup_bun.jsβ ΡΠΎΠ΄ΡΠΆΠΈ ΠΊΠΎΠ΄ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Π·Π°ΠΌΠ°Π³Π»Π΅Π½Π°ΡΠ° ΡΠΊΡΠΈΠΏΡΠ° βbun_environment.jsβ, ΠΊΠΎΡΠ° Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΠΊΠΎΠ΄ΠΎΡ Π½Π° ΡΡΠ²ΠΎΡ. ΠΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΏΠ°Π³ΠΈΡΠ°, ΡΡΠ²ΠΎΡ Π³ΠΎ Π»ΠΎΡΠΈΡΠ° ΠΊΠΎΠ΄ΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ, ΡΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° package.json (Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΡΠΈ Π³ΠΎ Π±ΡΠΎΡΠΎΡ Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° ΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ ΠΏΠΎΠ²ΠΈΠΊ Π΄ΠΎ setup_bun.js), Π³ΠΈ Π΄ΠΎΠ΄Π°Π²Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ setup_bun.js ΠΈ bun_environment.js, Π³ΠΎ ΠΏΡΠ΅ΠΏΠ°ΠΊΡΠ²Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΈ ΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βnpm publishβ Π·Π° Π΄Π° ΡΠ° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ°.
ΠΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ: @zapier/zapier-sdk (2.8 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ° Π½Π΅Π΄Π΅Π»Π½ΠΎ), @posthog/core (2.8 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ), posthog-node (1.5 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ), @asyncapi/specs (1.4 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ) ΠΈ @postman/tunnel-agent (1.2 ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ). Π‘Π΅ Π²Π΅ΡΡΠ²Π° Π΄Π΅ΠΊΠ° Π½Π°ΠΏΠ°Π΄ΠΎΡ Π·Π°ΠΏΠΎΡΠ½Π°Π» ΡΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ, @asyncapi/specs.
ΠΠ·Π²ΠΎΡ: opennet.ru
