BSO Resolver
ה-BSO Resolver מתרגם את שמות הדומיינים .bso למפתחות הציבוריים המתאימים להם על ידי קריאת רשומות Bitsocial TXT המאוחסנות ב-ENS. הוא מספק לקוח viem משותף, שמירה מתמשכת במטמון ועובד גם בסביבות Node.js וגם בסביבות דפדפן.
- GitHub: bitsocialnet/bso-resolver
- רישיון: GPL-2.0 בלבד
התקנה
npm install @bitsocial/bso-resolver
יצירת פותר
הפעל את הפותר על ידי העברת אובייקט תצורה לבנאי:
const resolver = new BsoResolver({ key, provider, dataPath });
| פרמטר | חובה | תיאור |
|---|---|---|
key | כן | מזהה עבור מופע הפותר. |
provider | כן | תצורת תחבורה (ראה להלן). |
dataPath | לא | ספרייה עבור קובץ המטמון של SQLite (Node.js בלבד). |
אפשרויות ספק
הפרמטר provider מקבל שלושה פורמטים:
"viem"- משתמש ברירת המחדל של התחבורה הציבורית המסופקת על ידי viem.- כתובת HTTP(S) -- מתחבר דרך נקודת קצה JSON-RPC (למשל,
https://mainnet.infura.io/v3/YOUR_KEY). - WebSocket URL - מתחבר דרך נקודת קצה של WebSocket RPC (למשל,
wss://mainnet.infura.io/ws/v3/YOUR_KEY).
שיטות
resolve({ name, abortSignal? })
מחפש שם .bso ומחזיר את המפתח הציבורי המשויך. ניתן להעביר AbortSignal אופציונלי לביטול בקשות ארוכות טווח.
canResolve({ name })
מחזירה ערך בוליאני המציין אם הפותר מסוגל להתמודד עם השם הנתון. השתמש בזה כדי לבדוק תמיכה לפני שתנסה לקבל רזולוציה מלאה.
destroy()
מפרק את הפותר, סוגר חיבורי מסד נתונים ושחרור משאבים. התקשר לזה כשאין עוד צורך בפותר.
שמירה במטמון
שמות שנפתרו נשמרים באופן אוטומטי במטמון כדי לצמצם חיפושי רשת מיותרים. הקצה האחורי של המטמון נבחר על סמך סביבת זמן הריצה:
| סביבה | אחורי | הערות |
|---|---|---|
| Node.js | SQLite | מאוחסן ב-dataPath. משתמש במצב WAL לגישה במקביל. |
| דפדפן | IndexedDB | משתמש בטרנזקציות מקוריות של IndexedDB. |
| Fallback | בזיכרון Map | משמש כאשר לא SQLite ולא IndexedDB זמינים. |
לכל ערכי המטמון יש TTL של שעה אחת והן מסולקות אוטומטית לאחר התפוגה.
אינטגרציה עם pkc-js
ניתן לחבר את הפותר ישירות ל-pkc-js דרך אפשרות nameResolvers, מה שמאפשר רזולוציית שם .bso שקופה במהלך חיפושי מפתח:
const pkc = new Pkc({
nameResolvers: [resolver],
// ...other options
});
במקביל
ה-resolver מתוכנן להיות בטוח בשימוש בו-זמני:
- לקוח viem משותף יחיד מונע חיבורים מיותרים.
- SQLite פועלת במצב WAL (Write-Ahead Logging), ומאפשרת קריאה במקביל ללא חסימה.
- שמירה במטמון בדפדפן מסתמכת על עסקאות מקוריות של IndexedDB לצורך בידוד.
נקודות כניסה לפלטפורמה
החבילה שולחת נקודות כניסה נפרדות עבור Node.js ובניית דפדפן. חבילות התומכות בשדה exports ב-package.json יבחרו אוטומטית בשדה הנכון.