shabbat-gate 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.he.md ADDED
@@ -0,0 +1,90 @@
1
+ # shabbat-gate
2
+
3
+ Middleware ל-Cloudflare Pages / Workers שסוגר אתר לגולשים אנושיים בזמן שבת וחגי ישראל
4
+ המרכזיים (לפי כללי שמירת שבת בישראל) - תוך מתן גישה תמידית למנועי חיפוש ולסורקי AI, כך
5
+ שה-SEO לא נפגע.
6
+
7
+ [English README](README.md)
8
+
9
+ ## למה זה עובד ככה
10
+
11
+ - **יום טוב חד-יומי לפי ישראל, לא ספירת חו"ל.** לוח החגים נשלף מה-API החינמי של Hebcal
12
+ עם הפרמטר `i=on`, שקריטי - בלעדיו מתקבלת ספירת חו"ל (יום חסימה מיותר) במקום יום טוב
13
+ חד-יומי, כפי שנהוג בישראל.
14
+ - **בוטים תמיד עוברים.** רשימת אלוול רחבה, לא תלוית רישיות, של user-agent (Googlebot,
15
+ Bingbot, GPTBot, ClaudeBot ורבים נוספים) נבדקת ראשונה, לפני כל שאר הלוגיקה. השער משפיע
16
+ רק על גולשים אנושיים - סורקים ומנועי אינדוקס רואים את האתר האמיתי 24/7, כך שדירוג
17
+ וניראות ב-AI-search לא נפגעים מכך שהאתר "סגור".
18
+ - **נכשל פתוח (Fail open).** כל שגיאה (תקלת רשת, תשובת API לא תקינה, מה שלא יהיה) גורמת
19
+ למעבר לאתר האמיתי במקום הצגת דף שגיאה. חסימה בטעות ביום שלישי רגיל היא באג אמיתי וגלוי;
20
+ אי-חסימה נדירה בזמן שגיאה היא תקלה קטנה ובלתי נראית.
21
+
22
+ ## התקנה
23
+
24
+ ```sh
25
+ npm install shabbat-gate
26
+ ```
27
+
28
+ ## שימוש
29
+
30
+ בפרויקט Cloudflare Pages, מוסיפים קובץ `functions/_middleware.ts`:
31
+
32
+ ```ts
33
+ import { createShabbatGate } from 'shabbat-gate';
34
+
35
+ const gate = createShabbatGate({ siteName: 'שם האתר שלי' });
36
+
37
+ export const onRequest: PagesFunction = (context) => gate(context);
38
+ ```
39
+
40
+ ## קונפיגורציה
41
+
42
+ ```ts
43
+ export interface ShabbatGateConfig {
44
+ siteName: string;
45
+
46
+ /** קווי אורך/רוחב עשרוניים לחישוב זמנים. ברירת מחדל לשניהם היא ירושלים (31.7683,
47
+ * 35.2137) אם לא סופקו - נקודת ייחוס טובה לכל ישראל ברזולוציה הזו. */
48
+ latitude?: number;
49
+ longitude?: number;
50
+
51
+ /** שם פרמטר + ערך נדרש ב-query string שעוקפים את השער לגמרי, כדי שבעל האתר יוכל
52
+ * לבדוק/לתצוגה מקדימה בכל יום. חשוב לבחור ערך שלא ניתן לניחוש - זו נוחות לבדיקות,
53
+ * לא הרשאה אמיתית. */
54
+ bypassParam?: string;
55
+ bypassValue?: string;
56
+
57
+ /** פונקציית רינדור מותאמת אישית לדף ה"סגור", אופציונלית. ברירת המחדל היא דף בעברית,
58
+ * רספונסיבי למובייל, שמציג את שם האתר ומתי הוא ייפתח מחדש. */
59
+ renderHoldingPage?: (ctx: { siteName: string; reasonLabel: string; untilLabel: string }) => string;
60
+ }
61
+ ```
62
+
63
+ דוגמה מלאה:
64
+
65
+ ```ts
66
+ import { createShabbatGate } from 'shabbat-gate';
67
+
68
+ const gate = createShabbatGate({
69
+ siteName: 'tehila·games',
70
+ latitude: 31.7683,
71
+ longitude: 35.2137,
72
+ bypassParam: 'preview',
73
+ bypassValue: 'letmein-9f3a7c',
74
+ });
75
+
76
+ export const onRequest: PagesFunction = (context) => gate(context);
77
+ ```
78
+
79
+ ## איך זה עובד
80
+
81
+ 1. בדיקת בוט (regex אלוול על header ה-`user-agent`) - התאמה עוברת ישירות.
82
+ 2. בדיקת bypass - אם פרמטר ה-query וערכו תואמים, עוברים ישירות.
83
+ 3. שליפה (עם caching לכ-24 שעות דרך Workers Cache API) של רשימת חלונות שבת וחגים
84
+ מאוחדת מ-Hebcal, כ-45 יום קדימה.
85
+ 4. אם הזמן הנוכחי נופל בתוך חלון, מוצג דף ה"סגור" (HTTP 200). אחרת, האתר האמיתי עובר.
86
+ 5. כל שגיאה בדרך גורמת למעבר לאתר האמיתי.
87
+
88
+ ## רישיון
89
+
90
+ MIT
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # shabbat-gate
2
2
 
3
+ [קריאה בעברית](README.he.md)
4
+
3
5
  Cloudflare Pages / Workers middleware that automatically closes a site to human visitors
4
6
  during Shabbat and major Jewish holidays (Israel-observance rules) - while always letting
5
7
  search engines and AI crawlers through, so SEO stays unaffected.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shabbat-gate",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Cloudflare Pages/Workers middleware that closes a site to human visitors during Shabbat and major Jewish holidays (Israel-observance rules), while always letting search engines and AI crawlers through.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,6 +8,7 @@
8
8
  "files": [
9
9
  "dist",
10
10
  "README.md",
11
+ "README.he.md",
11
12
  "LICENSE"
12
13
  ],
13
14
  "scripts": {