
שפה 🇮🇱 עברית
התקנת Val Town
הוספת תגובות חיות לאפליקציות Val Town
Val Town מריץ TypeScript על Deno, ולכן val הוא שרת אמיתי. זה עושה אותו מתאים מאוד ל‑FastComments: הווידג׳ט הוא תג script בעמוד, וכל דבר שדורש סוד, כמו Secure SSO או אימות webhook, יכול לרוץ בצד השרת באותו val.
המדריך הזה מכסה הוספת ווידג׳ט התגובות ל‑HTTP val, הצגת ספירות תגובות בעמוד אינדקס, התחברות משתמשים עם חשבון Val Town שכבר יש להם, וקבלת webhook של תגובות.
אינכם צריכים חשבון כדי לנסות זאת. הדוגמאות משתמשות ב‑tenantId: "demo", סביבה משותפת, והשלב 2 מסביר כיצד לעבור לחשבון שלכם.
שלב 1: הוסף את הווידג'ט 
הווידג'ט הוא תג script ואלמנט מכולה, ולכן הוא נופל לתוך מה שה‑val שלך כבר מציג. דוגמה זו משתמשת ב‑Hono JSX, שהיא מה שה‑templates של HTTP ב‑Val Town משתמשים.
Run 
בחר urlId לפני הפריסה
urlId מחליט באיזה שרשור נופל תגובה. אם תשאירו אותו ללא הגדרה הוא יכנס לגרסה מנוקה של כתובת ה‑URL של העמוד הנוכחי, שזה בדיוק מה שמשתנה ב‑Val Town: ל‑val יש שם מארח ארוך *.web.val.run עד שתת claim תת‑דומיין, לכל סניף יש כתובות משלו, ושינוי שם של עמוד משנה את הנתיב. כל שינוי כזה הופך בשקט לשרשור נפרד וריק, והסימפטום הוא "התגובות שלי נעלמו".
הגדרו אותו למשהו יציב שאתם שולטים בו, כמו ה‑slug של הפוסט או מזהה מסד נתונים, כפי שמופיע למעלה. העבירו גם את url, כדי שהודעות האימייל והכלים למודרציה יוכלו לקשר חזרה לעמוד האמיתי.
שמירת תגובות ללא JavaScript
FastComments מציג שרשור מלא בצד השרת, שבו val יכול להטמיע בתוך בלוק <noscript>:
Run 
קודדו את הפרמטרים ב‑URL. גרסת ה‑server‑side תומכת בתגובות אנונימיות וכניסות עם חשבון, SSO, ותשובות מקוננות.
שלב 2: השתמש בחשבון שלך 
tenantId: "demo" הוא ארגז חול ציבורי משותף. הוא פועל ללא הרשמה, ולכן הדוגמאות משתמשות בו, אך כל משתמש אחר של FastComments כותב באותו השרשורים וכל אחד יכול למנהלם. יש להחליף לפני שמפרסמים משהו שחשוב לכם.
מזהה השוכר שלכם נמצא בדף סוד ה-API.
מזהה שוכר הוא ציבורי ושייך לקוד בדפדפן. סוד API אינו ציבורי, ואין צורך באחד בדף זה.
קראו זאת ממשתנה סביבתי
ערכי Val Town הם ציבוריים בתוכנית החינמית, ולכן המקור שלהם קריא לכל. שמרו כל מידע רגיש במשתני סביבת, וקראו אותם עם Deno.env.get:
Run 
זה חשוב יותר מהרגיל ב-Val Town מסיבה שנייה: שינוי ערך של val מעתיק מפתחות של משתני סביבת, אך לא את ערכיהם. סוד שמור במשתנה סביבת אינו נושא את ה-val שלכם לחשבון של מישהו אחר. סוד שנכתב בקובץ כן נושא.
חזרה ל-"demo" משאירה את ה-val פעיל עבור כל מי שמשנה אותו לפני שהוא מגדיר שוכר משלו.
חשבונות EU
חשבון, הנתונים שלו והמפתחות שלו ממוקמים באיזור אחד. אם החשבון שלכם נוצר ב-eu.fastcomments.com, כל תצורת וידג'ט גם צריכה region: "eu", והסקריפטים נטענים מ-cdn-eu.fastcomments.com. אחרת, השאירו את שניהם כפי שהם.
ספירת תגובות בדף אינדקס 
בעמוד אינדקס, אל תציג וידג'ט ספירת תגובות אחד לכל שורה. זהו בקשה אחת לכל פוסט. השתמש בספירה המרובה, אשר לוקחת בקשה אחת לכל העמוד.
סמן כל שורה עם ה-urlId שהשרשור שלה משתמש, ואז טען את הווידג'ט המרובה פעם אחת:
Run 
הסקריפט מוצא כל אלמנט .fast-comments-count בעמוד וממלא את ספירתו.
data-fast-comments-url-id חייב להתאים ל-urlId שהווידג'ט של הפוסט משתמש בו. אם הווידג'ט משתמש ב‑slug, הסמן משתמש ב‑slug. חוסר התאמה מציג אפס על שרשור שיש לו תגובות.
הסקריפט בודק באופן מחזורי את window.FastCommentsBulkCountConfig, ולכן לא משנה אם אתה מגדיר את ההגדרה לפני או אחרי תג הסקריפט.
SSO מאובטח עם std/oauth 
אם ה‑val שלך כבר יודע מי המבקר, Secure SSO מעביר את הזהות לווידג'ט כך שהם לעולם לא יראו התחברות שנייה. אין צורך לבנות נקודות קצה ואין מה לקרוא בזמן ריצה: אתה מחשב שלושה ערכים בצד השרת ומעביר אותם בתצורת הווידג'ט.
Val Town מספק כניסה ללא צורך בתצורה עם std/oauth, כך שהמבקר יכול להתחבר עם חשבון Val Town שכבר יש לו. החלף זאת בכל מה שהאפליקציה שלך משתמשת בו; החלק של FastComments אינו משתנה.
Build the payload on the server
הסוד של ה‑API חותם על המטען ולא צריך להגיע לקוד בדפדפן. התקן את ה‑SDK מ‑npm, אשר פועל על סביבת הריצה Deno של Val Town כפי שהיא:
Run 
getPayload() מחזיר { userDataJSONBase64, verificationHash, timestamp }. שלושת הערכים האלה הם כל מה שמגיע לדפדפן. הסוד חותם עליהם ולאחר מכן נזרק, ולכן שום דבר בעמוד אינו מאפשר לקורא לזייף משתמש שונה.
Pass it to the widget
Run 
oauthMiddleware מוסיף עבורך GET /auth/login, GET /auth/callback ו‑POST /auth/logout. שים לב שהיציאה (logout) היא POST, בעוד שהווידג'ט מנווט ל‑logoutURL עם GET, ולכן הפנה את logoutURL לנתיב קטן משלך שמבצע את ה‑POST.
כאשר המבקר מנותק, העבר sso עם רק loginURL. הווידג'ט יציג אז תזכורת התחברות במקום תיבת תגובה אנונימית.
Things that go wrong
timestamp הוא זמן אפוק (epoch) במילישניות, אסור שיהיה בעתיד, וחייב להיות לא יותר משני ימים ישנים. צור אותו בצד השרת באותו בקשה שמחשבת את החתימה. יצירתו בדפדפן היא הכשל הקלאסי: הערך שונה מהערך שחולץ ולכן כל תגובה נדחית.
לעולם אל תגדיר isAdmin או isModerator מספק הזהות. התחברות עם חשבון Val Town לא אומרת דבר על מי צריך למודרציה של האתר שלך.
ראה את מדריך SSO לקבלת רשימת השדות המלאה, נושאים עם גישה קבוצתית, ותגים.
קבלת Webhooks 
A val הוא מקלט ווב‑הוק טבעי: יש לו URL יציב, הוא יכול לאמת חתימה, ויש לו SQLite ואחסון בלוב מובנים.
FastComments חותמת ${timestamp}.${body} עם סוד ה‑API של החשבון שלך ושולחת שני כותרות:
Run 
השיטה נושאת את האירוע: PUT עבור תגובה שנוצרה או עודכנה, DELETE עבור תגובה שנמחקה.
Run 
שני דברים שמציקים
אמת את הבתים הגולמיים. ניתוח ה‑JSON וסיריאליזציה מחדש משנים את סדר המפתחות והרווחים, ולכן ההאש שונה וכל משלוח נכשל ללא סיבה ברורה. זהו הסיבה הרגילה שמקלט ווב‑הוק "פשוט לא עובד".
השווה בזמן קבוע. השוואה פשוטה === על החתימה חושפת כמה בתים תואמים, וזה מספיק כדי לזייף בת אחד בכל פעם.
טיפול באירועים
ענה במהירות. FastComments מנסה מחדש על תגובה שאינה 2xx, וקצה שממשיך להיכשל מושבת בסופו של דבר באופן אוטומטי, ולכן יש לבצע עבודה אמיתית אחרי שליחת התגובה ולא באופן מקומי.
הפוך את הפעולה הזאת לאידמפוטנטית על מזהה ההערה. ניסיון חוזר נחתם מחדש עם חותמת זמן חדשה, וה‑comment id עצמו מגיע שוב בעריכה ובמחיקה, ולכן אין דבר יציב שניתן להשתמש בו לדדופלקציה.
דוגמאות Vals 
ארבעה vals ציבוריים שאתה יכול לשנות, כל אחד מכסה חלק אחד של המדריך הזה.
בלוג עם תגובות (חי) הוא בלוג Markdown עם שרשור תחת כל פוסט וספירת תגובות מרוכזת באינדקס. הוא פועל ברגע שאתה משנה אותו, ומשתנה סביבתי אחד מצביע אותו לחשבון שלך.
הדגמת SSO (חי) מחבר את המבקר עם חשבון Val Town שלו ומעביר את הזהות לווידג'ט, כך שאין צורך בכניסה שנייה.
מקבל Webhook (חי) מאמת את חתימת ה‑HMAC בכל משלוח ושומר אירועים ב‑SQLite. יש לו כפתור שמחתום על מטען בדיקה ומספק אותו לעצמו, כך שאתה יכול לצפות באימות מוצלח לפני קביעת Webhook אמיתי.
כישורי סוכן (חי) היא ספרייה של כישורי סוכן FastComments המכסים את הווידג'ט, SSO, ה‑REST API, מודרציה והמעבר מ‑Disqus. שנה אותה והסוכן של Val Town, Townie, יטען את הכישורים מתוך skills/ אוטומטית, כך שהסוכן שלך יודע איך לחבר תגובות ללא צורך בהדבקת תיעוד בצ'אט.
הכישורים זהים מותקנים בכל מקום אחר עם npx skills add fastcomments/skills.
שגיאות דומיין 
כאשר אתה מכבה את השוכר demo, ייתכן שהווידג'ט יסרב לטעון עם שגיאת הרשאה. זה קורה מכיוון ש-FastComments לא יודע שהוא אמור לאפשר לחשבון שלך להיות בשימוש על הדומיין הזה.
גש לכאן כדי להוסיף את האתר שלך לחשבונך.
Val Town ראוי למבט נוסף כאן, מכיוון שערך (val) יכול להיות נגיש יותר משם מארח אחד:
- כל ערך HTTP (val) יש לו נקודת קצה ברירת מחדל ארוכה,
<org>--<id>.web.val.run. - תביעת תת-דומיין מותאם מוסיפה
<name>.val.run. - דומיין מותאם אישית מוסיף שלישי.
- סניפים מקבלים כתובות URL משלהם.
הוסף את שמות המארחים שממנו אתה למעשה משרת את הווידג'ט. אם אתה תובע תת-דומיין לאחר שהגדרת את הכל, הוסף גם אותו, אחרת הווידג'ט יעבוד בכתובת הישנה ויכשל בכתובת החדשה.