waha-shared 1.0.428 → 1.0.429

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.
@@ -530,7 +530,9 @@
530
530
  "choose_read_along_bible": { "type": "string" },
531
531
  "exit": { "type": "string" },
532
532
  "stay": { "type": "string" },
533
- "popups_exit_micro_lesson": { "type": "string" }
533
+ "popups_exit_micro_lesson": { "type": "string" },
534
+ "finish_signing_in": { "type": "string" },
535
+ "open_in_waha": { "type": "string" }
534
536
  },
535
537
  "required": [
536
538
  "name",
@@ -341,6 +341,8 @@ export declare const LanguageTranslationsApp: z.ZodObject<{
341
341
  exit: z.ZodString;
342
342
  stay: z.ZodString;
343
343
  popups_exit_micro_lesson: z.ZodString;
344
+ finish_signing_in: z.ZodOptional<z.ZodString>;
345
+ open_in_waha: z.ZodOptional<z.ZodString>;
344
346
  }, z.core.$strip>;
345
347
  export type LanguageTranslationsApp = z.infer<typeof LanguageTranslationsApp>;
346
348
  export declare const TranslationsApp: z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -685,5 +687,7 @@ export declare const TranslationsApp: z.ZodRecord<z.ZodString, z.ZodObject<{
685
687
  exit: z.ZodString;
686
688
  stay: z.ZodString;
687
689
  popups_exit_micro_lesson: z.ZodString;
690
+ finish_signing_in: z.ZodOptional<z.ZodString>;
691
+ open_in_waha: z.ZodOptional<z.ZodString>;
688
692
  }, z.core.$strip>>;
689
693
  export type TranslationsApp = z.infer<typeof TranslationsApp>;
@@ -347,6 +347,8 @@ exports.LanguageTranslationsApp = zod_1.z.object({
347
347
  exit: zod_1.z.string(),
348
348
  stay: zod_1.z.string(),
349
349
  popups_exit_micro_lesson: zod_1.z.string(),
350
+ finish_signing_in: zod_1.z.string().optional(),
351
+ open_in_waha: zod_1.z.string().optional(),
350
352
  });
351
353
  exports.TranslationsApp = zod_1.z
352
354
  .record(zod_1.z.string(), exports.LanguageTranslationsApp.describe('Translations for a single language (identified by a 3-letter code)_'))
@@ -71,34 +71,34 @@
71
71
  },
72
72
  "ahv": {
73
73
  "1CH": "من سفر أخبار الأيام الأول",
74
- "1CO": "من الرسالة كورنثوس الأولى",
74
+ "1CO": "من الرسالة الأولى إلى كورنثوس",
75
75
  "1JN": "من رسالة يوحنا الأولى",
76
76
  "1KI": "من سفر الملوك الأول",
77
77
  "1PE": "من رسالة بطرس الأولى",
78
78
  "1SA": "من سفر صموئيل الأول",
79
- "1TH": "من الرسالة تسالونيكي الأولى",
80
- "1TI": "من الرسالة تيموثاوس الأولى",
79
+ "1TH": "من الرسالة الأولى إلى تسالونيكي",
80
+ "1TI": "من الرسالة الأولى إلى تيموثاوس",
81
81
  "2CH": "من سفر أخبار الأيام الثاني",
82
- "2CO": "من الرسالة كورنثوس الثانية",
82
+ "2CO": "من الرسالة الثانية إلى كورنثوس",
83
83
  "2JN": "من رسالة يوحنا الثانية",
84
84
  "2KI": "من سفر الملوك الثاني",
85
85
  "2PE": "من رسالة بطرس الثانية",
86
86
  "2SA": "من سفر صموئيل الثاني",
87
- "2TH": "من الرسالة تسالونيكي الثانية",
88
- "2TI": "من الرسالة تيموثاوس الثانية",
87
+ "2TH": "من الرسالة الثانية إلى تسالونيكي",
88
+ "2TI": "من الرسالة الثانية إلى تيموثاوس",
89
89
  "3JN": "من رسالة يوحنا الثالثة",
90
90
  "ACT": "من سفر أعمال الرسل",
91
91
  "AMO": "من سفر عاموس",
92
- "COL": "من الرسالة كولوسي",
92
+ "COL": "من الرسالة إلى كولوسي",
93
93
  "DAN": "من سفر دانيال",
94
94
  "DEU": "من سفر التثنية",
95
95
  "ECC": "من سفر الجامعة",
96
- "EPH": "من الرسالة أفسس",
96
+ "EPH": "من الرسالة إلى أفسس",
97
97
  "EST": "من سفر أستير",
98
98
  "EXO": "من سفر الخروج",
99
99
  "EZK": "من سفر حزقيال",
100
100
  "EZR": "من سفر عزرا",
101
- "GAL": "من الرسالة غلاطية",
101
+ "GAL": "من الرسالة إلى غلاطية",
102
102
  "GEN": "من سفر التكوين",
103
103
  "HAB": "من سفر حبقوق",
104
104
  "HAG": "من سفر حجي",
@@ -126,11 +126,11 @@
126
126
  "NUM": "من سفر العدد",
127
127
  "OBA": "من سفر عوبديا",
128
128
  "PHM": "من الرسالة إلى فليمون",
129
- "PHP": "من الرسالة فيلبي",
129
+ "PHP": "من الرسالة إلى فيلبي",
130
130
  "PRO": "من سفر الأمثال",
131
131
  "PSA": "من سفر المزامير",
132
132
  "REV": "من رؤيا يوحنا",
133
- "ROM": "من الرسالة إلى روما",
133
+ "ROM": "من الرسالة إلى رومية",
134
134
  "RUT": "من سفر راعوث",
135
135
  "SNG": "من سفر نشيد الأنشاد",
136
136
  "TIT": "من الرسالة إلى تيطس",
@@ -85,34 +85,34 @@
85
85
  "f.008": "والحين، خلونا نقرأ مع بعض من كلام الله الموحى"
86
86
  },
87
87
  "ahv": {
88
- "a.001": "ودلوقتي، ممكن واحد يحكي لنا المقطع ده بكلماته الخاصة، كما لو كان يحكيه لصديق لم يسمعه من قبل. و احنا نساعده إذا نسي شيئ أو أضاف شيئ بالخطأ. ولو حصل كدة، ممكن نسأله: «أين تجد هذا في القصة؟»",
88
+ "a.001": "والآن، ليروِ أحدنا هذا المقطع بكلماته الخاصة، كما لو كان يرويه لصديق لم يسمعه من قبل. ولنساعده إذا أغفل شيئًا أو أضاف شيئًا بالخطأ. وإذا حدث ذلك، يمكننا أن نسأله: «أين تجد ذلك في القصة؟»",
89
89
  "a.002": "ماذا تعلمنا من هذه القصة عن الله، وعن صفاته وأفعاله؟",
90
90
  "a.003": "ماذا نتعلم من هذه القصة عن الناس، بما في ذلك أنفسنا؟",
91
91
  "a.004": "كيف ستطبّق الحق الإلهي المستفاد من هذه القصة في حياتك هذا الأسبوع؟ ما العمل المحدد الذي ستقوم به؟",
92
92
  "a.005": "مع من ستشارك إحدى الحقائق التي تعلمتها من هذه القصة قبل لقائنا القادم؟ وهل تعرف أشخاصًا آخرين يرغبون، مثلنا، في اكتشاف كلمة الله من خلال هذا التطبيق؟",
93
- "a.006": "قبل ما نختم فرصتنا هذه ، خلينا نحدد موعد إجتماعنا القادم ومن منا عنده استعداد تنسيق هذا الإجتماع.",
93
+ "a.006": "مع اقتراب اجتماعنا من نهايته، لنحدد موعد لقائنا القادم ومن سييسّره.",
94
94
  "a.007": "نشجعكم على تدوين ما قلتم إنكم ستفعلونه، وعلى قراءة هذه القصة مرة أخرى في الأيام التي تسبق لقاءنا القادم. يمكن للميسّر مشاركة نص القصة أو تسجيلها الصوتي مع من لا يملكها. وقبل أن ننصرف، لنسأل الرب أن يعيننا.",
95
- "a.008": "ماذا تُعلِّمنا هذه القصة في كوننا تلاميذ السيد المسيح؟",
96
- "a.009": "ماذا تُعلِّمنا هذه القصة في كوننا كنيسة السيد المسيح؟",
97
- "a.010": "ماذا تُعلِّمنا هذه القصة عن القيادة؟",
98
- "a.011": "ماذا تُعلِّمنا من هذه القصة عن صناعة التلاميذ؟",
99
- "a.012": "كيف ستطبّق ما أعلنه الله لك من خلال هذه القصة في حياتك الشخصية هذا الأسبوع؟ ما هو الشئ أو العمل المحدد الذي تنوي القيام به؟",
95
+ "a.008": "ماذا نتعلم من هذه القصة عن كوننا حواريين؟",
96
+ "a.009": "ماذا نتعلّم من هذه القصة عن كوننا الكنيسة؟",
97
+ "a.010": "ماذا نتعلم من هذه القصة بصفتنا قادة؟",
98
+ "a.011": "ماذا نتعلم من هذه القصة عن صنع الحواريين؟",
99
+ "a.012": "كيف ستطبّق ما أظهره الله لك من هذه القصة في حياتك هذا الأسبوع؟ ما الخطوة المحددة التي ستتخذها؟",
100
100
  "a.013": "والآن، لنشاهد فيديو التدريب لهذا اليوم...",
101
- "a.014": "دعونا نناقش ما تعلمناه الآن، وكيف يمكننا تطبيقه في سعينا لتلمذة الآخرين للسيد المسيح.",
102
- "a.015": "مع من ستشارك شيئًا مما تعلمته من هذا اللقاء قبل اجتماعنا القادم؟",
101
+ "a.014": "لنتناقش فيما تعلمناه للتو، وكيف يمكننا تطبيقه في سعينا إلى صنع الحواريين.",
102
+ "a.015": "مع من ستشاركون شيئًا تعلمتموه من هذا اللقاء قبل اجتماعنا القادم؟",
103
103
  "a.016": "والآن، لنتحدث عن التواصل مع الضالين. مع من أجرينا محادثات منذ لقائنا الأخير؟ وكيف يمكننا أن نصلّي من أجلهم؟",
104
104
  "a.017": "كيف سنتواصل مع هؤلاء الأشخاص وغيرهم لإجراء حوارات جيدة معهم هذا الأسبوع؟",
105
105
  "f.001": "بناءً على ما حدث معكم منذ لقائنا الأخير، ما الشيء الذي تشكرون الله عليه؟",
106
106
  "f.002": "ما الذي سبّب لكم ضغطًا هذا الأسبوع؟ وما الذي تحتاجون إليه لكي تتحسن الأمور؟",
107
- "f.003": "ما هي احتياجات الناس في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
107
+ "f.003": "ما احتياجات الناس في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
108
108
  "f.004": "ما هي القصة التي تعلمناها في لقائنا الأخير؟ وماذا تعلمنا عن الله والبشر؟",
109
109
  "f.005": "في لقائنا السابق، قررتم تطبيق ما تعلمتموه. ماذا فعلتم؟ وكيف سارت الأمور؟",
110
110
  "f.006": "مع من شاركتم شيئًا من القصة السابقة؟ وكيف كانت استجابتهم؟",
111
111
  "f.007": "حددنا عدة احتياجات في لقائنا السابق وخططنا لتلبيتها. كيف سارت الأمور؟",
112
112
  "f.008": "الآن، لنقرأ قصة اليوم من كلام الله...",
113
113
  "f.009": "بناءً على ما حدث معكم منذ لقائنا الأخير، ما الشيء الذي تشكرون الله عليه؟",
114
- "f.010": "ما هي احتياجات الضالين في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
115
- "f.011": "كيف عمل الله من خلال جهودكم لتوسيع دائرة الصلاة؟ وهل عندكم قصص واختبارات لصلوات مستجابة يمكننا أن نسبّحه من أجلها؟",
114
+ "f.010": "ما احتياجات الضالين في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
115
+ "f.011": "كيف عمل الله من خلال جهودكم لتوسيع دائرة الصلاة؟ وهل من قصص عن صلوات مستجابة يمكننا أن نسبّحه من أجلها؟",
116
116
  "f.012": "ماذا تعلمنا في لقائنا الأخير عن صنع الحواريين؟",
117
117
  "f.013": "الآن، لنقرأ حقًا جديدًا من الله..."
118
118
  },
@@ -85,36 +85,36 @@
85
85
  "f.008": "دلوقتي يالا بينا نسمع قصه جديده من الله..."
86
86
  },
87
87
  "ahv": {
88
- "a.001": "ودلوقتي، ممكن واحد يحكي لنا المقطع ده بكلماته الخاصة، كما لو كان يحكيه لصديق لم يسمعه من قبل. و احنا نساعده إذا نسي شيئ أو أضاف شيئ بالخطأ. ولو حصل كدة، ممكن نسأله: «أين تجد هذا في القصة؟»",
88
+ "a.001": "والآن، ليروِ أحدنا هذا المقطع بكلماته الخاصة، كما لو كان يرويه لصديق لم يسمعه من قبل. ولنساعده إذا أغفل شيئًا أو أضاف شيئًا بالخطأ. وإذا حدث ذلك، يمكننا أن نسأله: «أين تجد ذلك في القصة؟»",
89
89
  "a.002": "ماذا تعلمنا من هذه القصة عن الله، وعن صفاته وأفعاله؟",
90
90
  "a.003": "ماذا نتعلم من هذه القصة عن الناس، بما في ذلك أنفسنا؟",
91
- "a.004": "كيف ستطبّق الحق الإلهي الذي إستفتده من هذه القصة في حياتك هذا الأسبوع؟ وماهو الأمر أو الشيء الذي ستفعله بالتحديد؟",
91
+ "a.004": "كيف ستطبّق الحق الإلهي المستفاد من هذه القصة في حياتك هذا الأسبوع؟ ما العمل المحدد الذي ستقوم به؟",
92
92
  "a.005": "مع من ستشارك إحدى الحقائق التي تعلمتها من هذه القصة قبل لقائنا القادم؟ وهل تعرف أشخاصًا آخرين يرغبون، مثلنا، في اكتشاف كلمة الله من خلال هذا التطبيق؟",
93
- "a.006": "قبل ما نختم فرصتنا هذه ، خلينا نحدد موعد إجتماعنا القادم ومن منا عنده استعداد تنسيق هذا الإجتماع.",
94
- "a.007": "قضينا وقت ممتع مع بعض. أشجعك إنك تدون الشئ الذي قلت إنك سوف تفعله، وتستمع إلى هذه القصة مرة أخرى في الأيام المقبلة قبل لقاءنا القادم معاً. يمكن لمُنَسِّق الإجتماع مشاركة نص القصة مقروءة أو مكتوبة مع من يحتاجها. وقبل أن ننصرف، دعونا نسأل الرب أن يساعدنا.",
95
- "a.008": "ماذا تُعلِّمنا هذه القصة في كوننا تلاميذ السيد المسيح؟",
96
- "a.009": "ماذا تُعلِّمنا هذه القصة في كوننا كنيسة السيد المسيح؟",
97
- "a.010": "ماذا تُعلِّمنا هذه القصة عن القيادة؟",
98
- "a.011": "ماذا تُعلِّمنا من هذه القصة عن صناعة التلاميذ؟",
99
- "a.012": "كيف ستطبّق ما أعلنه الله لك من خلال هذه القصة في حياتك الشخصية هذا الأسبوع؟ ما هو الشئ أو العمل المحدد الذي تنوي القيام به؟",
93
+ "a.006": "مع اقتراب اجتماعنا من نهايته، لنحدد موعد لقائنا القادم ومن سييسّره.",
94
+ "a.007": "لقد قضينا وقتًا طيبًا معًا. نشجعكم على تدوين ما قلتم إنكم ستفعلونه، وعلى الاستماع إلى هذه القصة مرة أخرى في الأيام التي تسبق لقاءنا القادم. يمكن للميسّر مشاركة نص القصة أو تسجيلها الصوتي مع من لا يملكها. وقبل أن ننصرف، لنسأل الرب أن يعيننا.",
95
+ "a.008": "ماذا نتعلم من هذه القصة عن كوننا حواريين؟",
96
+ "a.009": "ماذا نتعلّم من هذه القصة عن كوننا الكنيسة؟",
97
+ "a.010": "ماذا نتعلم من هذه القصة بصفتنا قادة؟",
98
+ "a.011": "ماذا نتعلم من هذه القصة عن صنع الحواريين؟",
99
+ "a.012": "كيف ستطبّق ما أظهره الله لك من هذه القصة في حياتك هذا الأسبوع؟ ما الخطوة المحددة التي ستتخذها؟",
100
100
  "a.013": "والآن، لنشاهد فيديو التدريب لهذا اليوم...",
101
- "a.014": "دعونا نناقش ما تعلمناه الآن، وكيف يمكننا تطبيقه في سعينا لتلمذة الآخرين للسيد المسيح.",
102
- "a.015": "مع من ستشارك شيئًا مما تعلمته من هذا اللقاء قبل اجتماعنا القادم؟",
101
+ "a.014": "لنتناقش فيما تعلمناه للتو، وكيف يمكننا تطبيقه في سعينا إلى صنع الحواريين.",
102
+ "a.015": "مع من ستشاركون شيئًا تعلمتموه من هذا اللقاء قبل اجتماعنا القادم؟",
103
103
  "a.016": "والآن، لنتحدث عن التواصل مع الضالين. مع من أجرينا محادثات منذ لقائنا الأخير؟ وكيف يمكننا أن نصلّي من أجلهم؟",
104
104
  "a.017": "كيف سنتواصل مع هؤلاء الأشخاص وغيرهم لإجراء حوارات جيدة معهم هذا الأسبوع؟",
105
- "f.001": "مرحبًا بكم في جلسة جديدة من «اكتشاف الله». لنبدأ بالاطمئنان على أحوالنا. بناءً على ما حدث معكم منذ لقائنا الأخير، ما الشيء الذي تشكرون الله عليه؟",
105
+ "f.001": "مرحبًا بكم في جلسة جديدة من «اكتشاف الله». لنبدأ بالاطمئنان إلى أحوالنا. بناءً على ما حدث معكم منذ لقائنا الأخير، ما الشيء الذي تشكرون الله عليه؟",
106
106
  "f.002": "ما الذي سبّب لكم ضغطًا هذا الأسبوع؟ وما الذي تحتاجون إليه لكي تتحسن الأمور؟",
107
- "f.003": "ما هي احتياجات الناس في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
107
+ "f.003": "ما احتياجات الناس في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
108
108
  "f.004": "ما هي القصة التي تعلمناها في لقائنا الأخير؟ وماذا تعلمنا عن الله والبشر؟",
109
109
  "f.005": "في لقائنا السابق، قررتم تطبيق ما تعلمتموه. ماذا فعلتم؟ وكيف سارت الأمور؟",
110
110
  "f.006": "مع من شاركتم شيئًا من القصة السابقة؟ وكيف كانت استجابتهم؟",
111
111
  "f.007": "حددنا عدة احتياجات في لقائنا السابق وخططنا لتلبيتها. كيف سارت الأمور؟",
112
- "f.008": "الآن، فلنستمع إلى قصة جديدة من كلمة الله...",
113
- "f.009": "مرحبًا بكم في جلسة جديدة لمجموعة التلمذة. لنبدأ بالاطمئنان على أحوال بعضنا بعضًا. بناءً على ما حدث معكم منذ لقائنا الأخير، ما الشيء الذي تشكرون الله عليه؟",
114
- "f.010": "ما هي احتياجات الضالين في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
115
- "f.011": "كيف عمل الله من خلال جهودكم لتوسيع دائرة الصلاة؟ وهل عندكم قصص واختبارات لصلوات مستجابة يمكننا أن نسبّحه من أجلها؟",
112
+ "f.008": "الآن، فلنستمع إلى قصة جديدة من كلام الله...",
113
+ "f.009": "مرحبًا بكم في جلسة جديدة لجماعتنا لصنع الحواريين. لنبدأ بالاطمئنان على أحوال بعضنا بعضًا. بناءً على ما حدث معكم منذ لقائنا الأخير، ما الشيء الذي تشكرون الله عليه؟",
114
+ "f.010": "ما احتياجات الضالين في مجتمعكم؟ وكيف يمكننا أن نساعد بعضنا بعضًا على تلبية الاحتياجات التي ذكرناها؟",
115
+ "f.011": "كيف عمل الله من خلال جهودكم لتوسيع دائرة الصلاة؟ وهل من قصص عن صلوات مستجابة يمكننا أن نسبّحه من أجلها؟",
116
116
  "f.012": "ماذا تعلمنا في لقائنا الأخير عن صنع الحواريين؟",
117
- "f.013": "الآن، لنستمع إلى حق جديد من كلمة الله..."
117
+ "f.013": "الآن، لنستمع إلى حق جديد من الله..."
118
118
  },
119
119
  "ais": {
120
120
  "a.001": "هلأ، تعوا نطلب من يعيدلنا الحكاية ويخبرنا ياها بطريقته. كأنه عم يئولا لحدا مو سامعها بحياته. اذا حكا زيادة او نسي منها شي بنساعده.",
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Shared Firebase passwordless ("magic link") helpers used by both the app
3
+ * (`waha-app`) and the web fallback page (`waha-web`). Sharing keeps the
4
+ * sign-in-link detection and the deep-link token encoding from drifting between
5
+ * the two, which would silently break the hand-off between them.
6
+ *
7
+ * Relies on `btoa`/`atob`, which every target runtime provides (Hermes, Node
8
+ * ≥16, browsers) and the DOM lib types.
9
+ */
10
+ /**
11
+ * Whether a URL is a Firebase passwordless sign-in link — i.e. carries the
12
+ * `mode=signIn` + `oobCode` action params at the top level. Used by the app's
13
+ * `+native-intent` (to route a reopened link to `auth-callback`) and by the web
14
+ * fallback page (to decide whether to show its "finish signing in" UI).
15
+ */
16
+ export declare function isMagicSignInLink(url: URL): boolean;
17
+ /**
18
+ * Base64url-encodes a Firebase sign-in URL for transport in a deep-link query
19
+ * param.
20
+ *
21
+ * The sign-in URL contains its own `?`, `&` and `=`. Nesting it in a query
22
+ * param and percent-encoding isn't enough: deep links get URL-decoded an
23
+ * unpredictable number of times before the app's router reads them
24
+ * (expo-router's query parser ultimately splits on a literal `&`), so an inner
25
+ * `&` re-emerges and the value is truncated at it. base64url carries none of
26
+ * those characters, so it survives intact through any number of decode passes.
27
+ * Sign-in URLs are ASCII, so `btoa`/`atob` round-trip them exactly.
28
+ */
29
+ export declare function encodeMagicLinkToken(url: string): string;
30
+ /** Reverses {@link encodeMagicLinkToken}; null on a malformed token. */
31
+ export declare function decodeMagicLinkToken(token: string): string | null;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Firebase passwordless ("magic link") helpers used by both the app
4
+ * (`waha-app`) and the web fallback page (`waha-web`). Sharing keeps the
5
+ * sign-in-link detection and the deep-link token encoding from drifting between
6
+ * the two, which would silently break the hand-off between them.
7
+ *
8
+ * Relies on `btoa`/`atob`, which every target runtime provides (Hermes, Node
9
+ * ≥16, browsers) and the DOM lib types.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.isMagicSignInLink = isMagicSignInLink;
13
+ exports.encodeMagicLinkToken = encodeMagicLinkToken;
14
+ exports.decodeMagicLinkToken = decodeMagicLinkToken;
15
+ /**
16
+ * Whether a URL is a Firebase passwordless sign-in link — i.e. carries the
17
+ * `mode=signIn` + `oobCode` action params at the top level. Used by the app's
18
+ * `+native-intent` (to route a reopened link to `auth-callback`) and by the web
19
+ * fallback page (to decide whether to show its "finish signing in" UI).
20
+ */
21
+ function isMagicSignInLink(url) {
22
+ return (url.searchParams.get('mode') === 'signIn' &&
23
+ !!url.searchParams.get('oobCode'));
24
+ }
25
+ /**
26
+ * Base64url-encodes a Firebase sign-in URL for transport in a deep-link query
27
+ * param.
28
+ *
29
+ * The sign-in URL contains its own `?`, `&` and `=`. Nesting it in a query
30
+ * param and percent-encoding isn't enough: deep links get URL-decoded an
31
+ * unpredictable number of times before the app's router reads them
32
+ * (expo-router's query parser ultimately splits on a literal `&`), so an inner
33
+ * `&` re-emerges and the value is truncated at it. base64url carries none of
34
+ * those characters, so it survives intact through any number of decode passes.
35
+ * Sign-in URLs are ASCII, so `btoa`/`atob` round-trip them exactly.
36
+ */
37
+ function encodeMagicLinkToken(url) {
38
+ return btoa(url).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
39
+ }
40
+ /** Reverses {@link encodeMagicLinkToken}; null on a malformed token. */
41
+ function decodeMagicLinkToken(token) {
42
+ try {
43
+ const b64 = token.replace(/-/g, '+').replace(/_/g, '/');
44
+ const padded = b64 + '='.repeat((4 - (b64.length % 4)) % 4);
45
+ return atob(padded);
46
+ }
47
+ catch (e) {
48
+ console.error('[auth] failed to decode magic link token:', e);
49
+ return null;
50
+ }
51
+ }
@@ -0,0 +1,30 @@
1
+ import z from 'zod';
2
+ export declare const SocialProofBase: z.ZodObject<{
3
+ lastUpdated: z.ZodNumber;
4
+ weekStartDate: z.ZodNumber;
5
+ }, z.core.$strip>;
6
+ export type SocialProofBase = z.infer<typeof SocialProofBase>;
7
+ export declare const ShareSocialProof: z.ZodObject<{
8
+ lastUpdated: z.ZodNumber;
9
+ weekStartDate: z.ZodNumber;
10
+ totalWeeklyShares: z.ZodNumber;
11
+ }, z.core.$strip>;
12
+ export type ShareSocialProof = z.infer<typeof ShareSocialProof>;
13
+ export declare const MeetingsSocialProof: z.ZodObject<{
14
+ lastUpdated: z.ZodNumber;
15
+ weekStartDate: z.ZodNumber;
16
+ totalWeeklyMeetings: z.ZodNumber;
17
+ }, z.core.$strip>;
18
+ export type MeetingsSocialProof = z.infer<typeof MeetingsSocialProof>;
19
+ export declare const BibleSessionsSocialProof: z.ZodObject<{
20
+ lastUpdated: z.ZodNumber;
21
+ weekStartDate: z.ZodNumber;
22
+ totalWeeklyBibleSessions: z.ZodNumber;
23
+ }, z.core.$strip>;
24
+ export type BibleSessionsSocialProof = z.infer<typeof BibleSessionsSocialProof>;
25
+ export declare const ArticleSessionsSocialProof: z.ZodObject<{
26
+ lastUpdated: z.ZodNumber;
27
+ weekStartDate: z.ZodNumber;
28
+ totalWeeklyArticleSessions: z.ZodNumber;
29
+ }, z.core.$strip>;
30
+ export type ArticleSessionsSocialProof = z.infer<typeof ArticleSessionsSocialProof>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ArticleSessionsSocialProof = exports.BibleSessionsSocialProof = exports.MeetingsSocialProof = exports.ShareSocialProof = exports.SocialProofBase = void 0;
7
+ const zod_1 = __importDefault(require("zod"));
8
+ exports.SocialProofBase = zod_1.default.object({
9
+ lastUpdated: zod_1.default.number(),
10
+ weekStartDate: zod_1.default.number(),
11
+ });
12
+ exports.ShareSocialProof = exports.SocialProofBase.extend({
13
+ totalWeeklyShares: zod_1.default.number(),
14
+ });
15
+ exports.MeetingsSocialProof = exports.SocialProofBase.extend({
16
+ totalWeeklyMeetings: zod_1.default.number(),
17
+ });
18
+ exports.BibleSessionsSocialProof = exports.SocialProofBase.extend({
19
+ totalWeeklyBibleSessions: zod_1.default.number(),
20
+ });
21
+ exports.ArticleSessionsSocialProof = exports.SocialProofBase.extend({
22
+ totalWeeklyArticleSessions: zod_1.default.number(),
23
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waha-shared",
3
- "version": "1.0.428",
3
+ "version": "1.0.429",
4
4
  "author": "Waha",
5
5
  "dependencies": {
6
6
  "@types/signale": "^1.4.7",
@@ -26,8 +26,8 @@
26
26
  ],
27
27
  "license": "MIT",
28
28
  "scripts": {
29
- "build": "npx tsc && copyfiles \"data/**/*.json\" dist",
30
- "update": "yarn build && REGISTRY_VERSION=$(npm view waha-shared version) && npm version $REGISTRY_VERSION --no-git-tag-version --allow-same-version && npm version patch --no-git-tag-version && git add . && (git commit -m 'chore: update shared types' || true) && bash -c 'npm publish --access public --registry https://registry.npmjs.org --//registry.npmjs.org/:_authToken=$(grep NPM_TOKEN= ../.env | cut -d \"=\" -f2-)'",
31
- "updateManual": "(npm whoami || npm login) && yarn build && REGISTRY_VERSION=$(npm view waha-shared version) && npm version $REGISTRY_VERSION --no-git-tag-version --allow-same-version && npm version patch --no-git-tag-version && git add dist package.json && (git commit -m 'chore: update shared types' || true) && npm publish"
29
+ "build": "npx tsc && npx copyfiles \"data/**/*.json\" dist",
30
+ "update": "yarn build && REGISTRY_VERSION=$(npm view waha-shared version) && npm version $REGISTRY_VERSION --no-git-tag-version --allow-same-version && npm version patch --no-git-tag-version && git add . && (git commit -m 'chore: build waha-shared' || true) && bash -c 'npm publish --access public --registry https://registry.npmjs.org --//registry.npmjs.org/:_authToken=$(grep NPM_TOKEN= ../.env | cut -d \"=\" -f2-)'",
31
+ "updateManual": "(npm whoami || npm login) && yarn build && REGISTRY_VERSION=$(npm view waha-shared version) && npm version $REGISTRY_VERSION --no-git-tag-version --allow-same-version && npm version patch --no-git-tag-version && git add dist package.json && (git commit -m 'chore: build waha-shared' || true) && npm publish"
32
32
  }
33
33
  }