עשור של השפעה: איך חבילות ה-npm שלנו הגיעו למיליארד הורדות ועיצבו JavaScript
ב- JavaScript ו Node.js בעולם, חלק מהחבילות הכרחיות - מורדות מיליוני פעמים ביום ומניעות אפליקציות ברחבי העולם. מאחורי הכלים הללו עומדים מפתחים המתמקדים באיכות קוד פתוח. היום, אנו מראים כיצד הצוות שלנו עוזר לבנות ולתחזק חבילות npm שהפכו לחלקי מפתח באקוסיסטם של JavaScript.
החלוצים שסומכים עלינו: יצחק ז' שלווטר ושלח מייל
אנחנו גאים שיש לנו יצחק ז' שלווטר (GitHub: isaacs) כמשתמש. יצחק יצר npm ועזר לבנות Node.js. האמון שלו ב-Forward Email מראה את ההתמקדות שלנו באיכות ואבטחה. אייזק משתמש ב-Forward Email עבור מספר תחומים כולל izs.me.
ההשפעה של אייזק על JavaScript היא עצומה. בשנת 2009, הוא היה בין הראשונים שראו את הפוטנציאל של Node.js, בעבודה עם ריאן דאל, מי שיצר את הפלטפורמה. כמו שאמר יצחק בא ראיון עם מגזין Increment: "בתוך הקהילה הקטנה מאוד הזו של חבורה של אנשים שמנסים להבין איך לגרום ל-JS בצד השרת לקרות, ראיין דאל יצא עם Node, שזו הייתה פשוט מאוד ברורה הגישה הנכונה. זרקתי את הצ'יפים שלי עם זה והתערבתי מאוד בערך באמצע 2009".
[!פֶּתֶק] למי שמתעניין בהיסטוריה של Node.js, ישנם סרטים תיעודיים מצוינים שמתעדים את התפתחותו, כולל הסיפור של Node.js ו 10 דברים שאני מתחרט על Node.js - ריאן דאל. של ריאן דאל אתר אישי מכיל גם תובנות חשובות על עבודתו.
מהיצירה של npm ועד למנהיגות של Node.js
אייזק יצר את npm בספטמבר 2009, עם הגרסה השמישה הראשונה שפורסמה בתחילת 2010. מנהל החבילות הזה מילא צורך מרכזי ב-Node.js, ואיפשר למפתחים לשתף בקלות קוד ולהשתמש בו מחדש. על פי ה דף ויקיפדיה של Node.js, "בינואר 2010, הוצג מנהל חבילות עבור סביבת Node.js בשם npm. מנהל החבילות מאפשר למתכנתים לפרסם ולשתף חבילות Node.js, יחד עם קוד המקור הנלווה, ונועד לפשט את ההתקנה, העדכון וההסרה של חבילות".
כאשר ריאן דאל פרש מ-Node.js בינואר 2012, אייזק נכנס לתפקידו כמנהיג הפרויקט. כפי שצוין ב הסיכום שלו, הוא "הוביל את הפיתוח של מספר ממשקי API בסיסיים של Node.js, כולל מערכת מודול CommonJS, ממשקי API של מערכת קבצים וזרמים" ו"פעל כ-BDFL (Benevolent Dictator For Life) של הפרויקט במשך שנתיים, מה שהבטיח תהליך בנייה איכותי ואמין של Node.js v0.6 עד v0.10."
אייזק הדריך את Node.js במהלך תקופת צמיחה מרכזית, והציב סטנדרטים שעדיין מעצבים את הפלטפורמה כיום. מאוחר יותר הוא הקים את npm, Inc. ב-2014 כדי לתמוך ברישום npm, אותו ניהל בעצמו בעבר.
אנו מודים ליצחק על תרומותיו העצומות ל-JavaScript וממשיכים להשתמש בחבילות רבות שיצר. עבודתו שינתה את האופן שבו אנו בונים תוכנה וכיצד מיליוני מפתחים חולקים קוד ברחבי העולם.
האדריכל מאחורי הקוד: המסע של ניק באו
בליבה של הצלחת הקוד הפתוח שלנו הוא ניק באו, המייסד והבעלים של Forward Email. עבודתו ב-JavaScript משתרעת על פני כמעט 20 שנה ועיצבה את האופן שבו אינספור מפתחים בונים אפליקציות. מסע הקוד הפתוח שלו מראה הן מיומנות טכנית והן מנהיגות קהילתית.
הועדה הטכנית של אקספרס ותרומות ליבה
המומחיות של ניק במסגרת האינטרנט זיכתה אותו במקום הוועדה הטכנית של אקספרס, שם הוא עזר עם אחת מהמסגרות הנפוצות ביותר של Node.js. ניק רשום כעת כחבר לא פעיל ב- עמוד קהילת אקספרס.
[!חָשׁוּב] Express נוצר במקור על ידי TJ Holowaychuk, תורם פורה בקוד פתוח שעיצב חלק גדול מהמערכת האקולוגית של Node.js. אנו אסירי תודה על העבודה הבסיסית של TJ ומכבדים את שלו החלטה לקחת הפסקה מהתרומות הנרחבות שלו בקוד פתוח.
כחבר ב- הוועדה הטכנית של אקספרס, ניק הראה תשומת לב רבה לפרטים בנושאים כמו הבהרה req.originalUrl
תיעוד ותיקון בעיות טיפול בטפסים מרובי חלקים.
תרומות מסגרת קואה
העבודה של ניק עם מסגרת קואה- חלופה מודרנית וקלה יותר ל-Express שנוצרה גם על ידי TJ Holowaychuk - מראה עוד יותר את המחויבות שלו לכלי פיתוח אתרים טובים יותר. תרומות ה-Koa שלו כוללות גם בעיות וגם קוד באמצעות בקשות משיכה, טיפול בטיפול בשגיאות, ניהול סוגי תוכן ושיפורי תיעוד.
עבודתו ב-Express וגם ב-Koa מעניקה לו מבט ייחודי על פיתוח האינטרנט של Node.js, ועוזרת לצוות שלנו ליצור חבילות שעובדות היטב עם מערכות אקולוגיות מרובות של מסגרת.
מתורם אישי למנהיג ארגון
מה שהתחיל בסיוע לפרויקטים קיימים התפתח ליצירה ותחזוקה של מערכות אקולוגיות של חבילה שלמה. ניק הקים מספר ארגוני GitHub - כולל תָא, סורק דואר זבל, העברת דוא"ל, בָּחוּר, ו ברי-כל אחד פותר צרכים ספציפיים בקהילת JavaScript.
המעבר הזה מתורם למנהיג מראה את החזון של ניק לתוכנה מעוצבת היטב שפותרת בעיות אמיתיות. על ידי ארגון חבילות קשורות תחת ארגוני GitHub ממוקדים, הוא בנה מערכות אקולוגיות של כלים שעובדות יחד תוך שמירה על מודולריות וגמישות עבור קהילת המפתחים הרחבה יותר.
ארגוני GitHub שלנו: מערכות אקולוגיות של חדשנות
אנו מארגנים את עבודת הקוד הפתוח שלנו סביב ארגוני GitHub ממוקדים, כל אחד פותר צרכים ספציפיים ב-JavaScript. מבנה זה יוצר משפחות חבילות מלוכדות שעובדות היטב יחד תוך שמירה על מודולריות.
תא: רישום מובנה עבור יישומים מודרניים
ה ארגון בקתה הוא הגישה שלנו לרישום אפליקציות פשוט ועוצמתי. העיקרית cabin
לחבילה יש כמעט 900 כוכבי GitHub ויותר מ-100,000 הורדות שבועיות[^1]. Cabin מספק רישום מובנה שעובד עם שירותים פופולריים כמו Sentry, LogDNA ו-Papertrail.
מה שמייחד את Cabin הוא מערכת ה-API והתוסף המתחשב שלה. חבילות תומכות כמו axe
עבור תוכנת אקספרס ו parse-request
עבור ניתוח בקשות HTTP הראה את המחויבות שלנו לפתרונות מלאים ולא לכלים מבודדים.
ה bson-objectid
החבילה ראויה לציון מיוחד, עם למעלה מ-1.7 מיליון הורדות תוך חודשיים בלבד[^2]. הטמעת ה-MongoDB ObjectID הקלה הזו הפכה למפתחים הזקוקים למזהים ללא תלות מלאה של MongoDB.
סורק דואר זבל: נלחם בשימוש לרעה בדוא"ל
ה ארגון סורק דואר זבל מראה את המחויבות שלנו לפתור בעיות אמיתיות. העיקרית spamscanner
החבילה מספקת זיהוי מתקדם של דואר זבל, אבל זה url-regex-safe
חבילה שנראתה אימוץ מדהים.
עם למעלה מ-1.2 מיליון הורדות בחודשיים[^3], url-regex-safe
מתקן בעיות אבטחה קריטיות בביטויים רגולריים אחרים לזיהוי כתובות אתרים. חבילה זו מציגה את הגישה שלנו לקוד פתוח: מציאת בעיה נפוצה (במקרה זה, RedoS נקודות תורפה באימות כתובת URL), יצירת פתרון מוצק ותחזוקתו בקפידה.
ברי: תזמון עבודה מודרני עם חוטי עובדים
ה ארגון ברי היא התשובה שלנו לאתגר Node.js נפוץ: תזמון עבודה אמין. העיקרית bree
החבילה, עם למעלה מ-3,100 כוכבי GitHub, מספקת מתזמן עבודה מודרני באמצעות שרשורי עובדים של Node.js לביצועים ואמינות טובים יותר.
[!פֶּתֶק] ברי נוצר לאחר שעזרנו לתחזק סֵדֶר הַיוֹם, יישום לקחים שנלמדו כדי לבנות מתזמן עבודה טוב יותר. התרומות שלנו לסדר היום עזרו לנו למצוא דרכים לשפר את תזמון העבודה.
מה מייחד את ברי מתזמנים אחרים כמו אג'נדה:
- אין תלות חיצונית: בניגוד ל-Agenda שצריכה MongoDB, Bree לא דורשת Redis או MongoDB כדי לנהל את מצב העבודה.
- חוטי עובדים: Bree משתמש בחוטי עבודה של Node.js לתהליכים בארגז חול, מה שמעניק בידוד וביצועים טובים יותר.
- API פשוט: Bree מציע שליטה מפורטת בפשטות, מה שמקל על יישום צרכי תזמון מורכבים.
- תמיכה מובנית: דברים כמו טעינה חיננית, משרות קרון, תאריכים וזמנים ידידותיים לאדם כלולים כברירת מחדל.
ברי הוא חלק מרכזי ב forwardemail.net, טיפול במשימות רקע קריטיות כמו עיבוד דואר אלקטרוני, ניקוי ותחזוקה מתוזמנת. השימוש ב-Bree ב-Forward Email מראה את המחויבות שלנו להשתמש בכלים שלנו בייצור, ומבטיח שהם עומדים בסטנדרטים גבוהים של אמינות.
אנו גם משתמשים ומעריכים חבילות חוט עובדים נהדרות אחרות כמו פּוּל ולקוחות HTTP אוהבים אַחַד עָשָׂר. Piscina, כמו Bree, משתמשת בשרשורי עובדים של Node.js לעיבוד משימות יעיל. אנו מודים מתיו היל, שמתחזק גם undici וגם piscina, על תרומותיו העיקריות ל-Node.js. Matteo מכהן בוועדת ההיגוי הטכנית של Node.js ושיפר מאוד את יכולות לקוח HTTP ב-Node.js.
העבר דוא"ל: תשתית דוא"ל בקוד פתוח
הפרויקט השאפתני ביותר שלנו הוא העברת דוא"ל, שירות דואר אלקטרוני בקוד פתוח המספק שירותי העברת אימייל, אחסון ושירותי API. במאגר הראשי יש למעלה מ-1,100 כוכבי GitHub[^4], מראה הערכה של הקהילה לחלופה זו לשירותי דוא"ל קנייניים.
ה preview-email
חבילה מארגון זה, עם למעלה מ-2.5 מיליון הורדות בחודשיים[^5], הפכה לכלי חיוני עבור מפתחים העובדים עם תבניות דוא"ל. על ידי מתן דרך פשוטה לתצוגה מקדימה של מיילים במהלך הפיתוח, זה פותר נקודת כאב נפוצה בבניית יישומים התומכים בדוא"ל.
ילד: כלי עזר וכלים חיוניים של קואה
ה ארגון בחור מספק אוסף של כלי עזר וכלים חיוניים המתמקדים בעיקר בשיפור מערכת האקולוגית של מסגרת Koa. חבילות אלו פותרות אתגרים נפוצים בפיתוח אתרים ונועדו לעבוד יחד בצורה חלקה תוך שימוש עצמאי.
koa-better-error-handler: טיפול משופר בשגיאות עבור Koa
koa-better-error-handler
מציע פתרון טוב יותר לטיפול בשגיאות עבור יישומי Koa. עם למעלה מ-50 כוכבי GitHub, החבילה הזו מייצרת ctx.throw
הפקת הודעות שגיאה ידידותיות למשתמש תוך התייחסות למספר מגבלות של מטפל השגיאות המובנה של Koa:
- מזהה ומטפל כראוי בשגיאות DNS Node.js, שגיאות Mongoose ושגיאות Redis
- שימושים בּוּם ליצירת תגובות שגיאה עקביות ומעוצבות היטב
- שומר על כותרות (בניגוד למטפל המובנה של Koa)
- שומר על קודי סטטוס מתאימים במקום ברירת מחדל ל-500
- תומך בהודעות הבזק ושימור הפעלה
- מספק רשימות שגיאות HTML עבור שגיאות אימות
- תומך במספר סוגי תגובות (HTML, JSON וטקסט רגיל)
חבילה זו חשובה במיוחד כאשר משתמשים בה לצד koa-404-handler
לניהול שגיאות מקיף ביישומי Koa.
דרכון: אימות עבור Lad
@ladjs/passport
מרחיב את תוכנת האימות הפופולרית Passport.js עם שיפורים ספציפיים עבור יישומי אינטרנט מודרניים. חבילה זו תומכת באסטרטגיות אימות מרובות מהקופסה:
- אימות מקומי באמצעות דואר אלקטרוני
- היכנס באמצעות אפל
- אימות GitHub
- אימות של גוגל
- אימות סיסמה חד פעמית (OTP).
החבילה ניתנת להתאמה אישית רבה, ומאפשרת למפתחים להתאים את שמות השדות והביטויים כך שיתאימו לדרישות האפליקציה שלהם. הוא תוכנן להשתלב בצורה חלקה עם Mongoose לניהול משתמשים, מה שהופך אותו לפתרון אידיאלי עבור יישומים מבוססי קואה הזקוקים לאימות חזקה.
חינני: כיבוי יישומים אלגנטי
@ladjs/graceful
פותר את האתגר הקריטי של כיבוי בחן של יישומי Node.js. עם למעלה מ-70 כוכבי GitHub, חבילה זו מבטיחה שהאפליקציה שלך יכולה להסתיים בצורה נקייה מבלי לאבד נתונים או להשאיר חיבורים תלויים. תכונות מפתח כוללות:
- תמיכה בסגירה בחן של שרתי HTTP (Express/Koa/Fastify)
- כיבוי נקי של חיבורי מסד נתונים (MongoDB/Mongoose)
- סגירה נכונה של לקוחות Redis
- טיפול בתזמני עבודה של Bree
- תמיכה במטפלי כיבוי מותאמים אישית
- הגדרות זמן קצוב להגדרה
- אינטגרציה עם מערכות רישום
חבילה זו חיונית ליישומי ייצור שבהם כיבויים בלתי צפויים עלולים להוביל לאובדן נתונים או השחתה. על ידי יישום נהלי כיבוי נאותים, @ladjs/graceful
עוזר להבטיח את האמינות והיציבות של היישום שלך.
Uptime: ניטור זמן פעולה בקוד פתוח
ה ארגון Uptime מייצג את המחויבות שלנו לניטור שקוף בקוד פתוח. העיקרית upptime
למאגר יש למעלה מ-13,000 כוכבי GitHub, מה שהופך אותו לאחד הפרויקטים הפופולריים ביותר שאנו תורמים להם. Upptime מספקת צג זמן פעולה מופעל על ידי GitHub ודף סטטוס הפועלים לחלוטין ללא שרת.
אנו משתמשים ב-Uptime עבור דף הסטטוס שלנו ב- https://status.forwardemail.net עם קוד המקור זמין ב https://github.com/forwardemail/status.forwardemail.net.
מה שמייחד את Upptime הוא הארכיטקטורה שלו:
- 100% קוד פתוח: כל רכיב הוא קוד פתוח לחלוטין וניתן להתאמה אישית.
- מופעל על ידי GitHub: ממנף את הפעולות, הבעיות והדפים של GitHub לפתרון ניטור ללא שרת.
- אין צורך בשרת: בניגוד לכלי ניטור מסורתיים, Upptime לא מחייב אותך להפעיל או לתחזק שרת.
- דף סטטוס אוטומטי: מייצר דף סטטוס יפהפה שניתן לארח בדפי GitHub.
- התראות עוצמתיות: משתלב עם ערוצי התראות שונים כולל דואר אלקטרוני, SMS ו-Slack.
כדי לשפר את חוויית המשתמשים שלנו, שילבנו @octokit/core לתוך בסיס הקוד של forwardemail.net כדי להציג עדכוני סטטוס ותקריות בזמן אמת ישירות באתר האינטרנט שלנו. אינטגרציה זו מספקת שקיפות ברורה למשתמשים שלנו במקרה של בעיות בכל הערימה שלנו (אתר, API, MongoDB, Redis, SQLite, SMTP, POP3, IMAP, Bree וכו') עם התראות מיידיות, שינויים בסמל התג, צבעי אזהרה ועוד.
ספריית @octokit/core מאפשרת לנו להביא נתונים בזמן אמת ממאגר Upptime GitHub שלנו, לעבד אותם ולהציג אותם בצורה ידידותית למשתמש. כאשר לשירות כלשהו יש הפסקה או ביצועים גרועים, המשתמשים מקבלים הודעה מיידית באמצעות מחוונים חזותיים מבלי לעזוב את האפליקציה הראשית. שילוב חלק זה מבטיח שלמשתמשים שלנו תמיד יהיה מידע עדכני לגבי מצב המערכת שלנו, מה שמגביר את השקיפות והאמון.
Upptime אומצה על ידי מאות ארגונים המחפשים דרך שקופה ואמינה לנטר את השירותים שלהם ולתקשר את הסטטוס למשתמשים. הצלחת הפרויקט מראה את הכוח של בניית כלים הממנפים תשתית קיימת (במקרה זה, GitHub) כדי לפתור בעיות נפוצות בדרכים חדשות.
התרומות שלנו ל-Forward Email Ecosystem
בעוד שחבילות הקוד הפתוח שלנו משמשות מפתחים ברחבי העולם, הן גם מהוות את הבסיס לשירות Forward Email שלנו. תפקיד כפול זה - הן כיוצרים והן כמשתמשים בכלים אלה - נותן לנו פרספקטיבה ייחודית על היישום שלהם בעולם האמיתי ומניע שיפור מתמיד.
מחבילות ועד ייצור
המסע מחבילות בודדות למערכת ייצור מגובשת כרוך באינטגרציה והרחבה מוקפדים. עבור העברת דוא"ל, תהליך זה כולל:
- הרחבות מותאמות אישית: בניית הרחבות ספציפיות לדואר אלקטרוני לחבילות הקוד הפתוח שלנו העונות על הדרישות הייחודיות שלנו.
- דפוסי אינטגרציה: פיתוח דפוסים לאופן שבו החבילות הללו מתקשרות בסביבת ייצור.
- אופטימיזציות של ביצועים: זיהוי וטיפול בצווארי בקבוק בביצועים שצצים רק בקנה מידה.
- הקשחת אבטחה: הוספת שכבות אבטחה נוספות ספציפיות לטיפול בדוא"ל והגנה על נתוני משתמשים.
עבודה זו מייצגת אלפי שעות של פיתוח מעבר לחבילות הליבה עצמן, וכתוצאה מכך שירות דוא"ל חזק ומאובטח הממנף את מיטב תרומות הקוד הפתוח שלנו.
לולאת המשוב
אולי ההיבט החשוב ביותר בשימוש בחבילות שלנו בייצור הוא לולאת המשוב שהיא יוצרת. כאשר אנו נתקלים במגבלות או מקרי קצה ב-Forward Email, אנו לא רק מתקנים אותם באופן מקומי - אנו משפרים את החבילות הבסיסיות, ומועילים גם לשירות שלנו וגם לקהילה הרחבה יותר.
גישה זו הובילה למספר שיפורים:
- ההשבתה החיננית של ברי: הצורך של Forward Email בפריסות אפס זמן השבתה הוביל ליכולות כיבוי חינניות משופרות ב-Bree.
- זיהוי תבניות של סורק דואר זבל: דפוסי ספאם מהעולם האמיתי שנתגלו ב-Forward Email הודיעו לאלגוריתמי הזיהוי של Spam Scanner.
- מיטוב ביצועים של תא הנוסעים: התחברות בנפח גבוה לייצור חשפה הזדמנויות אופטימיזציה ב-Cabine המועילות לכל המשתמשים.
על ידי שמירה על מעגל סגולה זה בין עבודת הקוד הפתוח שלנו לבין שירות הייצור, אנו מבטיחים שהחבילות שלנו יישארו פתרונות מעשיים שנבדקו בקרב ולא יישומים תיאורטיים.
עקרונות הליבה של העבר אימייל: בסיס למצוינות
Forward Email תוכנן על פי קבוצה של עקרונות ליבה המנחים את כל החלטות הפיתוח שלנו. עקרונות אלה, המפורטים על שלנו אֲתַר אִינטֶרנֶט, להבטיח שהשירות שלנו יישאר ידידותי למפתחים, מאובטח וממוקד בפרטיות המשתמש.
תמיד ידידותי למפתחים, ממוקד אבטחה ושקוף
העיקרון הראשון והעיקרי שלנו הוא ליצור תוכנה ידידותית למפתחים תוך שמירה על הסטנדרטים הגבוהים ביותר של אבטחה ופרטיות. אנו מאמינים שמצוינות טכנית לעולם לא צריכה לבוא על חשבון השימושיות, וששקיפות בונה אמון עם הקהילה שלנו.
עיקרון זה מציג בתיעוד המפורט שלנו, הודעות שגיאה ברורות ותקשורת פתוחה לגבי הצלחות וגם אתגרים. על ידי הפיכת כל בסיס הקוד שלנו לקוד פתוח, אנו מזמינים בדיקה ושיתוף פעולה, ומחזקים הן את התוכנה שלנו והן את המערכת האקולוגית הרחבה יותר.
הקפדה על עקרונות פיתוח תוכנה שנבדקו בזמן
אנו עוקבים אחר מספר עקרונות פיתוח תוכנה מבוססים שהוכיחו את ערכם במשך עשרות שנים:
- MVC: הפרדת חששות באמצעות דפוס Model-View-Controller
- פילוסופיית יוניקס: יצירת רכיבים מודולריים שעושים דבר אחד טוב
- KISS: שמירה על זה פשוט ופשוט
- DRY: אל תחזור על עצמך, קידום שימוש חוזר בקוד
- YAGNI: אתה לא הולך להזדקק לזה, הימנעות מאופטימיזציה מוקדמת
- 12 פקטור: מעקב אחר שיטות עבודה מומלצות לבניית יישומים מודרניים וניתנים להרחבה
- סכין הגילוח של אוקאם: בחירת הפתרון הפשוט ביותר העונה על הדרישות
- Dogfooding: שימוש נרחב במוצרים שלנו
העקרונות הללו אינם רק מושגים תיאורטיים - הם מוטמעים בפרקטיקות ההתפתחות היומיומיות שלנו. לדוגמה, הדבקות שלנו בפילוסופיית יוניקס ניכרת באופן שבו בנינו את חבילות ה-npm שלנו: מודולים קטנים וממוקדים שניתן לחבר יחד כדי לפתור בעיות מורכבות.
התמקדות במפתח ה-Scrapy, Bootstraped
אנו מכוונים ספציפית למגרדים, עם מגפיים ו ראמן-רווחי מפתח. מיקוד זה מעצב הכל, ממודל התמחור שלנו ועד להחלטות הטכניות שלנו. אנו מבינים את האתגרים של בניית מוצרים עם משאבים מוגבלים כי היינו שם בעצמנו.
עיקרון זה חשוב במיוחד באופן שבו אנו ניגשים לקוד פתוח. אנו יוצרים ומתחזקים חבילות הפותרות בעיות אמיתיות עבור מפתחים ללא תקציבים ארגוניים, מה שהופך כלים רבי עוצמה לנגישים לכולם ללא קשר למשאבים שלהם.
עקרונות בפועל: בסיס הקוד של דוא"ל העברה
עקרונות אלה גלויים בבירור בבסיס הקוד של העבר דוא"ל. הקובץ package.json שלנו חושף מבחר מתחשב של תלות, שכל אחת מהן נבחרה להתיישר עם ערכי הליבה שלנו:
- חבילות ממוקדות אבטחה כמו
mailauth
לאימות דואר אלקטרוני - כלים ידידותיים למפתחים כמו
preview-email
לניפוי באגים קל יותר - רכיבים מודולריים כמו השונים
p-*
שירותים מבית Sindre Sorhus
על ידי הקפדה על עקרונות אלה בעקביות לאורך זמן, בנינו שירות שמפתחים יכולים לסמוך עליו עם תשתית הדוא"ל שלהם - מאובטח, אמין ומתאים לערכי קהילת הקוד הפתוח.
פרטיות לפי עיצוב
פרטיות היא לא מחשבה שלאחר מכן או תכונה שיווקית עבור העבר דוא"ל - זה עיקרון עיצובי בסיסי שמודיע לכל היבט של השירות והקוד שלנו:
- הצפנה עם אפס גישה: הטמענו מערכות שהופכות את זה לבלתי אפשרי מבחינה טכנית עבורנו לקרוא מיילים של משתמשים.
- איסוף נתונים מינימלי: אנו אוספים רק את הנתונים הדרושים כדי לספק את השירות שלנו, לא יותר.
- מדיניות שקופה: מדיניות הפרטיות שלנו כתובה בשפה ברורה ומובנת ללא ז'רגון משפטי.
- אימות קוד פתוח: בסיס הקוד הפתוח שלנו מאפשר לחוקרי אבטחה לאמת את טענות הפרטיות שלנו.
מחויבות זו משתרעת על חבילות הקוד הפתוח שלנו, שתוכננו עם שיטות עבודה מומלצות לאבטחה ופרטיות המובנות מהיסוד.
קוד פתוח בר קיימא
אנו מאמינים שתוכנת קוד פתוח זקוקה למודלים ברי קיימא כדי לשגשג לטווח ארוך. הגישה שלנו כוללת:
- תמיכה מסחרית: מציע תמיכה ושירותים מובחרים סביב כלי הקוד הפתוח שלנו.
- רישוי מאוזן: שימוש ברישיונות המגנים הן על חירויות המשתמש והן על קיימות הפרויקט.
- מעורבות קהילתית: מעורבות פעילה עם תורמים כדי לבנות קהילה תומכת.
- מפות דרכים שקופות: שיתוף תוכניות הפיתוח שלנו כדי לאפשר למשתמשים לתכנן בהתאם.
על ידי התמקדות בקיימות, אנו מבטיחים שתרומת הקוד הפתוח שלנו תוכל להמשיך לצמוח ולהשתפר לאורך זמן במקום להזנחה.
המספרים לא משקרים: סטטיסטיקות ההורדות המדהימות שלנו ב-npm
כשאנחנו מדברים על ההשפעה של תוכנת קוד פתוח, סטטיסטיקות הורדות מספקות מידה מוחשית של אימוץ ואמון. רבות מהחבילות שאנו עוזרים לתחזק הגיעו לקנה מידה שמעט פרויקטי קוד פתוח משיגים אי פעם, עם הורדות משולבות של מיליארדים.
[!חָשׁוּב] למרות שאנו גאים לעזור לשמור על מספר חבילות שהורדו מאוד במערכת האקולוגית של JavaScript, אנו רוצים להכיר בכך שרבות מהחבילות הללו נוצרו במקור על ידי מפתחים מוכשרים אחרים. חבילות כמו superagent ו- supertest נוצרו במקור על ידי TJ Holowaychuk, שתרומתו הפורה לקוד הפתוח הייתה מכרעת בעיצוב המערכת האקולוגית של Node.js.
מבט ממעוף הציפור על ההשפעה שלנו
רק בתקופה של חודשיים מפברואר עד מרץ 2025, החבילות המובילות שאנו תורמים להן ועוזרות לשמור על מספרי הורדות מדהימים:
- סוכן על: 84,575,829 הורדות[^7] (נוצר במקור על ידי TJ Holowaychuk)
- מבחן סופר: 76,432,591 הורדות[^8] (נוצר במקור על ידי TJ Holowaychuk)
- גַם: 28,539,295 הורדות[^34] (נוצר במקור על ידי TJ Holowaychuk)
- @koa/נתב: 11,007,327 הורדות[^35]
- קואה-נתב: 3,498,918 הורדות[^36]
- url-regex: 2,819,520 הורדות[^37]
- תצוגה מקדימה-אימייל: 2,500,000 הורדות[^9]
- תָא: 1,800,000 הורדות[^10]
- @breejs/later: 1,709,938 הורדות[^38]
- תבניות אימייל: 1,128,139 הורדות[^39]
- לקבל-נתיבים: 1,124,686 הורדות[^40]
- url-regex-safe: 1,200,000 הורדות[^11]
- dotenv-parse-variables: 894,666 הורדות[^41]
- @koa/multer: 839,585 הורדות[^42]
- סורק ספאם: 145,000 הורדות[^12]
- ברי: 24,270 הורדות[^30]
[!פֶּתֶק] למספר חבילות אחרות שאנו עוזרים לתחזק אך לא יצרנו ספירת הורדות גבוהה עוד יותר, כולל
form-data
(+738 מיליון הורדות),toidentifier
(309 מיליון הורדות),stackframe
(116 מיליון+ הורדות), וerror-stack-parser
(113 מיליון הורדות). אנו מתכבדים לתרום לחבילות הללו תוך כיבוד עבודתם של מחבריהם המקוריים.
אלה לא רק מספרים מרשימים - הם מייצגים מפתחים אמיתיים הפותרים בעיות אמיתיות עם קוד שאנו עוזרים לתחזק. כל הורדה היא מופע שבו החבילות הללו עזרו למישהו לבנות משהו משמעותי, מפרויקטים תחביבים ועד יישומים ארגוניים המשמשים מיליונים.
השפעה יומית בקנה מידה
דפוסי ההורדות היומי חושפים שימוש עקבי בנפח גבוה, עם שיאים שמגיעים למיליוני הורדות ביום[^13]. עקביות זו מדברת על היציבות והאמינות של החבילות הללו - מפתחים לא רק מנסים אותן; הם משלבים אותם בתהליכי העבודה המרכזיים שלהם ותלויים בהם יום אחר יום.
דפוסי הורדה שבועיים מציגים מספרים מרשימים עוד יותר, המרחפים בעקביות סביב עשרות מיליוני הורדות בשבוע[^14]. זה מייצג טביעת רגל עצומה במערכת האקולוגית של JavaScript, כאשר החבילות הללו פועלות בסביבות ייצור ברחבי העולם.
מעבר למספרים הגולמיים
בעוד שסטטיסטיקת ההורדות מרשימה בפני עצמה, היא מספרת סיפור עמוק יותר על האמון שהקהילה נותנת בחבילות הללו. תחזוקת חבילות בקנה מידה זה דורשת מחויבות בלתי מעורערת ל:
- תאימות לאחור: יש לשקול בקפידה שינויים כדי למנוע שבירת יישומים קיימים.
- בִּטָחוֹן: כשמיליוני יישומים תלויים בחבילות הללו, לפרצות אבטחה עשויות להיות השלכות מרחיקות לכת.
- ביצועים: בקנה מידה זה, אפילו לשיפורי ביצועים קלים יכולים להיות יתרונות מצטברים משמעותיים.
- תיעוד: תיעוד ברור ומקיף חיוני עבור חבילות המשמשות מפתחים בכל רמות הניסיון.
הגידול העקבי במספרי ההורדות לאורך זמן משקף את ההצלחה בעמידה בהתחייבויות אלו, בניית אמון עם קהילת המפתחים באמצעות חבילות אמינות ומתוחזקות היטב.
תמיכה במערכת האקולוגית: החסויות שלנו בקוד פתוח
[!עֵצָה] קיימות בקוד פתוח היא לא רק תרומת קוד - אלא גם תמיכה במפתחים שמתחזקים תשתית קריטית.
מעבר לתרומות הישירות שלנו למערכת האקולוגית של JavaScript, אנו גאים לתת חסות לתורמים בולטים של Node.js שעבודתם מהווה את הבסיס ליישומים מודרניים רבים. החסויות שלנו כוללות:
אנדריס ריינמן: חלוץ תשתית הדוא"ל
אנדריס ריינמן הוא היוצר של דואר הערות, ספריית שליחת הדוא"ל הפופולרית ביותר עבור Node.js עם למעלה מ-14 מיליון הורדות שבועיות[^15]. עבודתו משתרעת על רכיבי תשתית אימייל קריטיים אחרים כמו שרת SMTP, Mailparser, ו ברווז בר.
החסות שלנו מסייעת להבטיח את המשך התחזוקה והפיתוח של הכלים החיוניים הללו המחזקים תקשורת דוא"ל עבור אינספור יישומי Node.js, כולל שירות העברה דוא"ל משלנו.
Sindre Sorhus: Utility Package Mastermind
סינדר סורוס הוא אחד התורמים הפוריים ביותר בקוד פתוח במערכת האקולוגית של JavaScript, עם למעלה מ-1,000 חבילות npm על שמו. כלי השירות שלו כמו p-map, ניסיון חוזר מראש, ו is-stream הם אבני בניין בסיסיות המשמשות בכל מערכת האקולוגית של Node.js.
על ידי מתן חסות לעבודה של Sindre, אנו עוזרים לקיים את הפיתוח של כלי עזר קריטיים אלה שהופכים את פיתוח JavaScript ליעיל ואמין יותר.
חסויות אלו משקפות את המחויבות שלנו למערכת האקולוגית הרחבה יותר של קוד פתוח. אנו מכירים בכך שההצלחה שלנו בנויה על הבסיס שהונחו על ידי תורמים אלה ואחרים, ואנו מחויבים להבטיח את הקיימות של המערכת האקולוגית כולה.
גילוי פרצות אבטחה במערכת האקולוגית של JavaScript
המחויבות שלנו לקוד פתוח משתרעת מעבר לפיתוח תכונות וכוללת זיהוי וטיפול בפרצות אבטחה שעלולות להשפיע על מיליוני מפתחים. כמה מהתרומות המשמעותיות ביותר שלנו למערכת האקולוגית של JavaScript היו בתחום האבטחה.
ה-Koa-Router Rescue
בפברואר 2019, ניק זיהה בעיה קריטית בתחזוקה של חבילת ה-koa-router הפופולרית. כמו שהוא דיווח ב-Hacker News, החבילה ננטשה על ידי המתחזק המקורי שלה, מה שהותיר פרצות אבטחה ללא מענה והקהילה ללא עדכונים.
[!אַזהָרָה] חבילות נטושות עם פרצות אבטחה מהוות סיכונים משמעותיים לכלל המערכת האקולוגית, במיוחד כשהן מורדות מיליוני פעמים בשבוע.
בתגובה, ניק יצר @koa/נתב ועזר להזהיר את הקהילה על המצב. מאז הוא שומר על החבילה הקריטית הזו, ומבטיח שלמשתמשי Koa יהיה פתרון ניתוב מאובטח ומתוחזק היטב.
טיפול בפרצות ReDoS
בשנת 2020, ניק זיהה ופנה לגורם קריטי מניעת שירות של ביטוי רגיל (ReDoS) פגיעות בשימוש נרחב url-regex
חֲבִילָה. פגיעות זו (SNYK-JS-URLREGEX-569472) יכול לאפשר לתוקפים לגרום למניעת שירות על ידי אספקת קלט בעל מבנה מיוחד שגרם לעקיבה אסון לאחור בביטוי הרגולרי.
במקום פשוט לתקן את החבילה הקיימת, ניק יצר url-regex-safe
, יישום משוכתב לחלוטין המטפל בפגיעות תוך שמירה על תאימות עם ה-API המקורי. הוא גם פרסם את א פוסט מקיף בבלוג הסבר על הפגיעות וכיצד לצמצם אותה.
עבודה זו מראה את הגישה שלנו לאבטחה: לא רק תיקון בעיות אלא חינוך הקהילה ומתן חלופות חזקות המונעות בעיות דומות בעתיד.
דוגל עבור Node.js ו-Chromium Security
ניק גם היה פעיל בקידום שיפורי האבטחה במערכת האקולוגית הרחבה יותר. באוגוסט 2020, הוא זיהה בעיית אבטחה משמעותית ב-Node.js הקשורה לטיפול שלו בכותרות HTTP, שדווחה ב- המרשם.
בעיה זו, שנבעה מתיקון ב-Chromium, עשויה לאפשר לתוקפים לעקוף אמצעי אבטחה. ההסברה של ניק עזרה להבטיח שהבעיה טופלה באופן מיידי, תוך הגנה על מיליוני יישומי Node.js מפני ניצול פוטנציאלי.
אבטחת תשתית npm
מאוחר יותר באותו חודש, ניק זיהה בעיית אבטחה קריטית נוספת, הפעם בתשתית האימייל של npm. כפי שדווח ב המרשם, npm לא יישם כראוי פרוטוקולי אימות דוא"ל של DMARC, SPF ו-DKIM, מה שעשוי לאפשר לתוקפים לשלוח הודעות דיוג שנראה שהגיעו מ-npm.
הדוח של ניק הוביל לשיפורים בעמדת אבטחת הדוא"ל של npm, והגן על מיליוני המפתחים המסתמכים על npm לניהול חבילות מפני התקפות דיוג פוטנציאליות.
התרומות שלנו ל-Forward Email Ecosystem
Forward Email בנוי על מספר פרויקטים קריטיים בקוד פתוח, כולל Nodemailer, WildDuck ו-mailauth. הצוות שלנו תרם תרומה משמעותית לפרויקטים הללו, וסייע לזהות ולתקן בעיות עמוקות המשפיעות על משלוח דוא"ל ואבטחה.
שיפור פונקציונליות הליבה של Nodemailer
דואר הערות הוא עמוד השדרה של שליחת דוא"ל ב-Node.js, והתרומות שלנו עזרו להפוך אותו לחזק יותר:
- שיפורים בשרת SMTP: תיקנו באגים בניתוח, בעיות בטיפול בזרם ובעיות תצורת TLS ברכיב שרת ה-SMTP[^16][^17].
- שיפורים במנתח דואר: טיפלנו בשגיאות פענוח רצף תווים וטיפול בבעיות מנתח שעלולות לגרום לכשלים בעיבוד דואר אלקטרוני[^18][^19].
תרומות אלו מבטיחות ש-Nodemailer יישאר בסיס אמין לעיבוד דוא"ל ביישומי Node.js, כולל העבר דוא"ל.
קידום אימות דוא"ל עם Mailauth
Mailauth מספק פונקציונליות קריטית של אימות דוא"ל, והתרומות שלנו שיפרו משמעותית את היכולות שלה:
- שיפורי אימות DKIM: גילינו ודיווחנו של-X/Twitter היו בעיות במטמון DNS שגרמו לכישלון DKIM עבור ההודעות היוצאות שלהם, ודיווחנו על כך ב-Hacker One[^20].
- שיפורים של DMARC ו-ARC: תיקנו בעיות באימות DMARC ו-ARC שעלולות להוביל לתוצאות אימות שגויות[^21][^22].
- אופטימיזציות של ביצועים: תרמנו אופטימיזציות שמשפרות את הביצועים של תהליכי אימות דוא"ל[^23][^24][^25][^26].
שיפורים אלה עוזרים להבטיח שאימות הדוא"ל יהיה מדויק ואמין, ומגן על המשתמשים מפני התקפות דיוג וזיוף.
שיפורים עיקריים ב-Uptime
התרומות שלנו ל-Uptime כוללות:
- ניטור תעודות SSL: הוספנו פונקציונליות לניטור תפוגה של אישור SSL, ולמנוע השבתה בלתי צפויה עקב אישורים שפג תוקפם[^27].
- תמיכה במספר SMS מרובים: הטמענו תמיכה להתראה על מספר חברי צוות באמצעות SMS כאשר מתרחשים תקריות, שיפור זמני התגובה[^28].
- תיקוני בדיקת IPv6: תיקנו בעיות בבדיקות קישוריות IPv6, והבטחנו ניטור מדויק יותר בסביבות רשת מודרניות[^29].
- תמיכה במצב כהה/בהיר: הוספנו תמיכת ערכות נושא כדי לשפר את חוויית המשתמש של דפי סטטוס[^31].
- תמיכת TCP-Ping טובה יותר: שיפרנו את פונקציונליות ה- TCP ping כדי לספק בדיקות חיבור אמינות יותר[^32].
שיפורים אלה לא רק מועילים לניטור הסטטוס של Forward Email אלא זמינים לכל הקהילה של משתמשי Upptime, מה שממחיש את המחויבות שלנו לשיפור הכלים שאנו תלויים בהם.
הדבק שמחזיק הכל ביחד: קוד מותאם אישית בקנה מידה
אמנם חבילות ה-npm והתרומות שלנו לפרויקטים קיימים הם משמעותיים, אבל הקוד המותאם אישית הוא שמשלב את הרכיבים הללו שמציג באמת את המומחיות הטכנית שלנו. בסיס הקוד של Forward Email מייצג עשור של מאמצי פיתוח, החל משנת 2017 כאשר הפרויקט החל כ העברת דואר אלקטרוני בחינם לפני שמוזג למונורפו.
מאמץ פיתוח מסיבי
קנה המידה של קוד האינטגרציה המותאם אישית הזה מרשים:
- סך כל התרומות: מעל 3,217 התחייבויות
- גודל בסיס קוד: למעלה מ-421,545 שורות קוד בקובצי JavaScript, Pug, CSS ו-JSON[^33]
זה מייצג אלפי שעות של עבודת פיתוח, הפעלות באגים ואופטימיזציות של ביצועים. זה "הרוטב הסודי" שהופך חבילות בודדות לשירות מגובש ואמין המשמש אלפי לקוחות מדי יום.
שילוב תלות הליבה
בסיס הקוד של Forward Email משלב מספר תלות במכלול חלק:
- עיבוד דואר אלקטרוני: משלב את Nodemailer לשליחה, שרת SMTP לקבלה ו-Mailparser לניתוח
- אימות: משתמש ב-Mailauth עבור אימות DKIM, SPF, DMARC ו-ARC
- רזולוציית DNS: ממנף את Tangerine עבור DNS-over-HTTPS עם מטמון גלובלי
- חיבור MX: משתמש ב-mx-connect עם אינטגרציה של Tangerine לחיבורי שרת דואר אמינים
- תזמון עבודה: מעסיק את Bree לעיבוד משימות רקע אמין עם שרשורי עובדים
- תבנית: משתמש בתבניות דוא"ל לשימוש חוזר בגיליונות סגנונות מהאתר בתקשורת עם לקוחות
- אחסון דוא"ל: מיישמת תיבות דואר של SQLite מוצפנות בנפרד תוך שימוש ב-better-sqlite3-multiple-ciphers עם הצפנת ChaCha20-Poly1305 לפרטיות בטוחה קוונטית, מה שמבטיח בידוד מוחלט בין המשתמשים ושרק למשתמש יש גישה לתיבת הדואר שלהם
כל אחת מהאינטגרציות הללו דורשת שיקול זהיר של מקרי קצה, השלכות ביצועים ודאגות אבטחה. התוצאה היא מערכת חזקה המטפלת במיליוני עסקאות דוא"ל בצורה מהימנה. הטמעת SQLite שלנו ממנפת גם את msgpackr להסדרה בינארית יעילה ו-WebSockets (דרך ws) לעדכוני סטטוס בזמן אמת על פני התשתית שלנו.
תשתית DNS עם Tangerine ו-mx-connect
מרכיב קריטי בתשתית Forward Email הוא מערכת רזולוציית ה-DNS שלנו, הבנויה סביב שתי חבילות מפתח:
-
מַנדָרִינָה: יישום ה-DNS-over-HTTPS של Node.js שלנו מספק תחליף נפוץ לפותר ה-DNS הסטנדרטי, עם ניסיונות חוזרים מובנים, פסקי זמן, סיבוב שרת חכם ותמיכה במטמון.
-
mx-connect: חבילה זו מקימה חיבורי TCP לשרתי MX, לוקחת דומיין יעד או כתובת דואר אלקטרוני, פותרת שרתי MX מתאימים ומתחברת אליהם בסדר עדיפות.
שילבנו את Tangerine עם mx-connect through בקשה למשוך מס' 4, הבטחת DNS בשכבת האפליקציה על פני בקשות HTTP לאורך כל העברת הדוא"ל. זה מספק מטמון גלובלי ל-DNS בקנה מידה עם עקביות של 1:1 בכל אזור, אפליקציה או תהליך - קריטי למשלוח דוא"ל אמין במערכת מבוזרת.
השפעה ארגונית: מקוד פתוח לפתרונות קריטיים למשימה
שיאו של המסע בן העשור שלנו בפיתוח קוד פתוח אפשר ל-Forward Email לשרת לא רק מפתחים בודדים אלא גם ארגונים גדולים ומוסדות חינוך המהווים את עמוד השדרה של תנועת הקוד הפתוח עצמה.
מקרי מקרה בתשתית דוא"ל קריטית למשימה
המחויבות שלנו לאמינות, פרטיות ועקרונות קוד פתוח הפכה את Forward Email לבחירה המהימנה עבור ארגונים עם דרישות דוא"ל תובעניות:
-
מוסדות חינוך: כמפורט אצלנו תיאור מקרה של העברת דוא"ל לבוגרים, אוניברסיטאות גדולות מסתמכות על התשתית שלנו כדי לשמור על קשרים לכל החיים עם מאות אלפי בוגרים באמצעות שירותי העברת דוא"ל אמינים.
-
פתרונות לינוקס ארגוניים: ה תיאור מקרה קנוני של אובונטו אימייל ארגוני מדגים כיצד גישת הקוד הפתוח שלנו מתיישרת בצורה מושלמת עם הצרכים של ספקי לינוקס ארגוניים, ומציעה להם את השקיפות והשליטה שהם דורשים.
-
יסודות קוד פתוח: אולי התוקף ביותר הוא השותפות שלנו עם קרן לינוקס, כפי שתועד ב- תיאור מקרה של קרן לינוקס באימייל לארגונים, שבו השירות שלנו מניע תקשורת עבור אותו ארגון שמנהל פיתוח לינוקס.
יש סימטריה יפה כיצד חבילות הקוד הפתוח שלנו, המתוחזקות בקפידה לאורך שנים רבות, אפשרו לנו לבנות שירות דואר אלקטרוני שתומך כעת בקהילות ובארגונים שדוגלים בתוכנת קוד פתוח. מסע מעגל מלא זה - מתרומת חבילות בודדות ועד להפעלת תשתית דוא"ל ברמה ארגונית עבור מובילי קוד פתוח - מייצג את האימות האולטימטיבי של הגישה שלנו לפיתוח תוכנה.
עשור של קוד פתוח: מבט קדימה
כשאנחנו מסתכלים אחורה על עשור של תרומות בקוד פתוח וקדימה לעשר השנים הבאות, אנחנו מלאים בהכרת תודה לקהילה שתמכה בעבודתנו ובהתרגשות לקראת מה שיבוא.
המסע שלנו מתורמים חבילות בודדות לתחזוקה של תשתית דוא"ל מקיפה המשמשת ארגונים גדולים וקרנות קוד פתוח היה מדהים. זוהי עדות לכוחו של פיתוח קוד פתוח ולהשפעה שיכולה להיות לתוכנה מתחשבת ומתוחזקת היטב על המערכת האקולוגית הרחבה יותר.
בשנים הקרובות, אנו מחויבים ל:
- ממשיכים לתחזק ולשפר את החבילות הקיימות שלנו, להבטיח שהם יישארו כלים אמינים עבור מפתחים ברחבי העולם.
- הרחבת התרומות שלנו לפרויקטי תשתית קריטיים, במיוחד בתחום הדוא"ל והאבטחה.
- שיפור היכולות של Forward Email תוך שמירה על המחויבות שלנו לפרטיות, אבטחה ושקיפות.
- תמיכה בדור הבא של תורמים בקוד פתוח באמצעות חונכות, חסות ומעורבות קהילתית.
אנו מאמינים שהעתיד של פיתוח תוכנה פתוח, שיתופי ובנוי על בסיס של אמון. על ידי המשך תרומה של חבילות איכותיות וממוקדות אבטחה למערכת האקולוגית של JavaScript, אנו מקווים לקחת חלק קטן בבניית העתיד הזה.
תודה לכל מי שהשתמש בחבילות שלנו, תרם לפרויקטים שלנו, דיווח על בעיות או פשוט הפיץ את הבשורה על העבודה שלנו. תמיכתכם איפשרה את העשור הזה של ההשפעה, ואנו נרגשים לראות מה נוכל להשיג יחד בעשר השנים הקרובות.
[^1]: סטטיסטיקות הורדה של npm עבור תא הנוסעים, אפריל 2025 [^2]: סטטיסטיקות הורדה של npm עבור bson-objectid, פברואר-מרץ 2025 [^3]: סטטיסטיקות הורדה של npm עבור url-regex-safe, אפריל 2025 [^4]: כוכבי GitHub נחשבים עבור forwardemail/forwardemail.net החל מאפריל 2025 [^5]: סטטיסטיקות הורדה של npm עבור דוא"ל תצוגה מקדימה, אפריל 2025 [^7]: סטטיסטיקות הורדה של npm עבור superagent, פברואר-מרץ 2025 [^8]: סטטיסטיקות הורדה של npm עבור מבחן העל, פברואר-מרץ 2025 [^9]: סטטיסטיקות הורדה של npm עבור דוא"ל תצוגה מקדימה, פברואר-מרץ 2025 [^10]: סטטיסטיקות הורדה של npm עבור תא, פברואר-מרץ 2025 [^11]: סטטיסטיקות הורדה של npm עבור url-regex-safe, פברואר-מרץ 2025 [^12]: סטטיסטיקות הורדה של npm עבור spamscanner, פברואר-מרץ 2025 [^13]: דפוסי הורדה יומיים מסטטיסטיקות npm, אפריל 2025 [^14]: דפוסי הורדה שבועיים מסטטיסטיקות npm, אפריל 2025 [^15]: סטטיסטיקות הורדה של npm עבור nodemailer, אפריל 2025 [^16]: https://github.com/nodemailer/smtp-server/issues/155 [^17]: https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min [^18]: https://github.com/nodemailer/mailparser/issues/261 [^19]: https://github.com/nodemailer/nodemailer/issues/1102 [^20]: https://github.com/postalsys/mailauth/issues/30 [^21]: https://github.com/postalsys/mailauth/issues/58 [^22]: https://github.com/postalsys/mailauth/issues/48 [^23]: https://github.com/postalsys/mailauth/issues/74 [^24]: https://github.com/postalsys/mailauth/issues/75 [^25]: https://github.com/postalsys/mailauth/issues/60 [^26]: https://github.com/postalsys/mailauth/issues/73 [^27]: מבוסס על בעיות GitHub במאגר Upptime [^28]: מבוסס על בעיות GitHub במאגר Upptime [^29]: מבוסס על בעיות GitHub במאגר Upptime [^30]: סטטיסטיקות הורדה של npm עבור bree, פברואר-מרץ 2025 [^31]: מבוסס על בקשות משיכה של GitHub ל-Uptime [^32]: מבוסס על בקשות משיכה של GitHub ל-Uptime [^34]: סטטיסטיקות הורדה של npm עבור koa, פברואר-מרץ 2025 [^35]: סטטיסטיקות הורדה npm עבור @koa/router, פברואר-מרץ 2025 [^36]: סטטיסטיקות הורדה של npm עבור koa-router, פברואר-מרץ 2025 [^37]: סטטיסטיקות הורדה של npm עבור url-regex, פברואר-מרץ 2025 [^38]: סטטיסטיקות הורדה של npm עבור @breejs/later, פברואר-מרץ 2025 [^39]: סטטיסטיקות הורדה של npm עבור תבניות דוא"ל, פברואר-מרץ 2025 [^40]: סטטיסטיקות הורדה של npm עבור get-paths, פברואר-מרץ 2025 [^41]: סטטיסטיקות הורדה של npm עבור משתני dotenv-parse, פברואר-מרץ 2025 [^42]: סטטיסטיקות הורדה של npm עבור @koa/multer, פברואר-מרץ 2025