waha-shared 1.0.521 → 1.0.522-resend-migration.0

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.
@@ -12,6 +12,7 @@ export declare const languages: {
12
12
  trainingVideos: "notStarted" | "inProgress" | "testing" | "launched";
13
13
  gdmc: "notStarted" | "inProgress" | "testing" | "launched";
14
14
  web: "notStarted" | "inProgress" | "testing" | "launched";
15
+ drip?: "notStarted" | "inProgress" | "testing" | "launched" | undefined;
15
16
  };
16
17
  script: "arabic" | "bengali" | "burmese" | "chinese" | "cyrillic" | "devanagari" | "geez" | "georgian" | "greek" | "gujarati" | "gurmukhi" | "hebrew" | "japanese" | "kannada" | "khmer" | "korean" | "latin" | "malayalam" | "tamil" | "telugu" | "thai" | "uyghur";
17
18
  uuid: string;
@@ -468,6 +468,7 @@
468
468
  "script": "arabic",
469
469
  "status": {
470
470
  "dbs": "launched",
471
+ "drip": "inProgress",
471
472
  "gdmc": "notStarted",
472
473
  "trainingVideos": "launched",
473
474
  "web": "notStarted"
@@ -1930,6 +1931,7 @@
1930
1931
  "script": "latin",
1931
1932
  "status": {
1932
1933
  "dbs": "launched",
1934
+ "drip": "launched",
1933
1935
  "gdmc": "launched",
1934
1936
  "trainingVideos": "launched",
1935
1937
  "web": "launched"
@@ -278,6 +278,11 @@
278
278
  "type": "string",
279
279
  "enum": ["notStarted", "inProgress", "testing", "launched"],
280
280
  "description": "The status of this language's website localization on https://waha.app."
281
+ },
282
+ "drip": {
283
+ "description": "The status of this language's onboarding email drip sequences. Only `launched` languages are provisioned in Resend and enroll new signups; `inProgress` and `testing` languages only render as local previews. Omitted means `notStarted`.",
284
+ "type": "string",
285
+ "enum": ["notStarted", "inProgress", "testing", "launched"]
281
286
  }
282
287
  },
283
288
  "required": ["dbs", "trainingVideos", "gdmc", "web"],
@@ -73,6 +73,12 @@ export declare const LanguageStatuses: z.ZodObject<{
73
73
  testing: "testing";
74
74
  launched: "launched";
75
75
  }>;
76
+ drip: z.ZodOptional<z.ZodEnum<{
77
+ notStarted: "notStarted";
78
+ inProgress: "inProgress";
79
+ testing: "testing";
80
+ launched: "launched";
81
+ }>>;
76
82
  }, z.core.$strip>;
77
83
  export declare const Languages: z.ZodArray<z.ZodObject<{
78
84
  languageId: z.ZodString;
@@ -266,6 +272,12 @@ export declare const Languages: z.ZodArray<z.ZodObject<{
266
272
  testing: "testing";
267
273
  launched: "launched";
268
274
  }>;
275
+ drip: z.ZodOptional<z.ZodEnum<{
276
+ notStarted: "notStarted";
277
+ inProgress: "inProgress";
278
+ testing: "testing";
279
+ launched: "launched";
280
+ }>>;
269
281
  }, z.core.$strip>;
270
282
  endonym: z.ZodOptional<z.ZodString>;
271
283
  givingId: z.ZodOptional<z.ZodString>;
@@ -53,6 +53,7 @@ exports.LanguageStatuses = zod_1.z.object({
53
53
  trainingVideos: exports.Status.describe("The status of this language's disciple making course training videos."),
54
54
  gdmc: exports.Status.describe("The status of this language's growing as a dmc sets."),
55
55
  web: exports.Status.describe("The status of this language's website localization on https://waha.app."),
56
+ drip: exports.Status.optional().describe("The status of this language's onboarding email drip sequences. Only `launched` languages are provisioned in Resend and enroll new signups; `inProgress` and `testing` languages only render as local previews. Omitted means `notStarted`."),
56
57
  });
57
58
  exports.Languages = zod_1.z.array(zod_1.z
58
59
  .object({
@@ -347,6 +347,7 @@ export declare const translationsApp: Record<string, {
347
347
  or: string;
348
348
  finish_signing_in: string;
349
349
  open_in_waha: string;
350
+ sign_in_coaching_emails?: string | undefined;
350
351
  how_many_shared?: string | undefined;
351
352
  how_many_obeyed?: string | undefined;
352
353
  most?: string | undefined;
@@ -389,6 +389,7 @@
389
389
  "show_translation": "عرض الترجمة",
390
390
  "sign_in_card_body": "مزامنة تقدمك وملاحظاتك وإعدادات اللغة.",
391
391
  "sign_in_card_title": "تسجيل الدخول للحصول على أفضل تجربة",
392
+ "sign_in_coaching_emails": "عند إنشاء حساب، سنرسل لك سلسلة قصيرة من نصائح التدريب لمساعدتك على البدء مع واها. يمكنك إلغاء الاشتراك في أي وقت.",
392
393
  "sign_in_failed": "فشل تسجيل الدخول",
393
394
  "sign_in_or_create_account": "تسجيل الدخول أو إنشاء حساب",
394
395
  "sign_in_successful": "تم تسجيل الدخول بنجاح",
@@ -823,6 +824,7 @@
823
824
  "show_translation": "Tərcüməni Göstər",
824
825
  "sign_in_card_body": "Tərəqqinizi, qeydlərinizi və dil parametrlərinizi sinxronlaşdırın.",
825
826
  "sign_in_card_title": "Ən yaxşı təcrübə üçün daxil olun",
827
+ "sign_in_coaching_emails": "Hesab yaradanda, Waha ilə başlamağınıza kömək etmək üçün sizə bir sıra qısa kouçinq məsləhətləri göndərəcəyik. İstənilən vaxt abunəlikdən çıxa bilərsiniz.",
826
828
  "sign_in_failed": "Giriş uğursuz oldu",
827
829
  "sign_in_or_create_account": "Daxil olun və ya Hesab yaradın",
828
830
  "sign_in_successful": "Giriş uğurludur",
@@ -1257,6 +1259,7 @@
1257
1259
  "show_translation": "অনুবাদ দেখান",
1258
1260
  "sign_in_card_body": "আপনার অগ্রগতি, নোট এবং ভাষা সেটিংস সিঙ্ক করুন.",
1259
1261
  "sign_in_card_title": "সেরা অভিজ্ঞতার জন্য সাইন ইন করুন",
1262
+ "sign_in_coaching_emails": "আপনি যখন একটি অ্যাকাউন্ট তৈরি করবেন, তখন Waha-র সাথে শুরু করতে সাহায্য করার জন্য আমরা আপনাকে প্রশিক্ষণ দেওয়ার টিপসের একটি ছোট সিরিজ পাঠাব। আপনি যে কোনো সময় আনসাবস্ক্রাইব করতে পারেন।",
1260
1263
  "sign_in_failed": "সাইন-ইন ব্যর্থ হয়েছে",
1261
1264
  "sign_in_or_create_account": "সাইন ইন করুন বা অ্যাকাউন্ট তৈরি করুন",
1262
1265
  "sign_in_successful": "সাইন-ইন সফল হয়েছে",
@@ -1691,6 +1694,7 @@
1691
1694
  "show_translation": "Ipakita ang Hubad",
1692
1695
  "sign_in_card_body": "I-sync ang imong pag-uswag, mga nota, ug mga setting sa pinulongan.",
1693
1696
  "sign_in_card_title": "Pag-sign in aron makuha ang labing maayong kasinatian",
1697
+ "sign_in_coaching_emails": "Kon maghimo ka og account, padalhan ka namo og mubo nga serye sa mga tip sa pagtudlo aron matabangan ka nga makasugod sa Waha. Mahimo kang mag-unsubscribe bisan kanus-a.",
1694
1698
  "sign_in_failed": "Pakyas ang pag-sign in",
1695
1699
  "sign_in_or_create_account": "Pag-sign in o Pagbuhat og Account",
1696
1700
  "sign_in_successful": "Malamposon ang pag-sign in",
@@ -2125,6 +2129,7 @@
2125
2129
  "show_translation": "وەرگێڕانەکە نیشان بدە",
2126
2130
  "sign_in_card_body": "هاوکاتکردنی بەرەوپێشچوونەکانت، تێبینییەکانت، و ڕێکخستنەکانی زمان.",
2127
2131
  "sign_in_card_title": "بچۆ ژوورەوە بۆ بەدەستهێنانی باشترین ئەزموون",
2132
+ "sign_in_coaching_emails": "کاتێک هەژمارێک دروست دەکەیت، زنجیرەیەکی کورت لە ئامۆژگارییەکانی ڕاهێنەرایەتیت بۆ دەنێرین بۆ ئەوەی یارمەتیت بدات لە دەستپێکردن لەگەڵ Waha. دەتوانیت هەرکاتێک بتەوێت بەشداریکردن هەڵبوەشێنیتەوە.",
2128
2133
  "sign_in_failed": "چوونەژوورەوە شکستی هێنا",
2129
2134
  "sign_in_or_create_account": "بچۆ ژوورەوە یان هەژمار دروست بکە",
2130
2135
  "sign_in_successful": "چوونەژوورەوە سەرکەوتوو بوو",
@@ -2559,6 +2564,7 @@
2559
2564
  "show_translation": "显示翻译",
2560
2565
  "sign_in_card_body": "同步您的进度、笔记和语言设置。",
2561
2566
  "sign_in_card_title": "登录以获得最佳体验",
2567
+ "sign_in_coaching_emails": "当您创建账号时,我们将向您发送一系列简短的教练辅导提示,以帮助您开始使用Waha。您可以随时取消订阅.",
2562
2568
  "sign_in_failed": "登录失败",
2563
2569
  "sign_in_or_create_account": "登录或创建账户",
2564
2570
  "sign_in_successful": "登录成功",
@@ -2993,6 +2999,7 @@
2993
2999
  "show_translation": "Übersetzung anzeigen",
2994
3000
  "sign_in_card_body": "Synchronisiere deinen Fortschritt, deine Notizen und Spracheinstellungen.",
2995
3001
  "sign_in_card_title": "Melde dich an, um das beste Erlebnis zu erhalten",
3002
+ "sign_in_coaching_emails": "Wenn du ein Konto erstellst, senden wir dir eine kurze Reihe von Coaching-Tipps, um dir den Einstieg in Waha zu erleichtern. Du kannst dich jederzeit abmelden.",
2996
3003
  "sign_in_failed": "Anmeldung fehlgeschlagen",
2997
3004
  "sign_in_or_create_account": "Anmelden oder Konto erstellen",
2998
3005
  "sign_in_successful": "Anmeldung erfolgreich",
@@ -3429,6 +3436,7 @@
3429
3436
  "show_translation": "Show Translation",
3430
3437
  "sign_in_card_body": "Sync your progress, notes, and language settings.",
3431
3438
  "sign_in_card_title": "Sign in to get the best experience",
3439
+ "sign_in_coaching_emails": "When you create an account, we will send you a short series of coaching tips to help you get started with Waha. You can unsubscribe anytime.",
3432
3440
  "sign_in_failed": "Sign-in failed",
3433
3441
  "sign_in_or_create_account": "Sign in or Create Account",
3434
3442
  "sign_in_successful": "Sign-in successful",
@@ -3863,6 +3871,7 @@
3863
3871
  "show_translation": "Mostrar traducción",
3864
3872
  "sign_in_card_body": "Sincroniza tu progreso, notas y ajustes de idioma.",
3865
3873
  "sign_in_card_title": "Inicia sesión para disfrutar de la mejor experiencia",
3874
+ "sign_in_coaching_emails": "Cuando crees una cuenta, te enviaremos una breve serie de consejos de entrenamiento para ayudarte a comenzar con Waha. Puedes cancelar tu suscripción en cualquier momento.",
3866
3875
  "sign_in_failed": "Error al iniciar sesión",
3867
3876
  "sign_in_or_create_account": "Iniciar sesión o Crear cuenta",
3868
3877
  "sign_in_successful": "Inicio de sesión correcto",
@@ -4297,6 +4306,7 @@
4297
4306
  "show_translation": "Afficher la traduction",
4298
4307
  "sign_in_card_body": "Synchronisez votre progression, vos notes et vos paramètres de langue.",
4299
4308
  "sign_in_card_title": "Connectez-vous pour profiter de la meilleure expérience",
4309
+ "sign_in_coaching_emails": "Lorsque vous créez un compte, nous vous enverrons une courte série de conseils de coaching pour vous aider à démarrer avec Waha. Vous pouvez vous désabonner à tout moment.",
4300
4310
  "sign_in_failed": "Échec de la connexion",
4301
4311
  "sign_in_or_create_account": "Se connecter ou Créer un compte",
4302
4312
  "sign_in_successful": "Connexion réussie",
@@ -4731,6 +4741,7 @@
4731
4741
  "show_translation": "Nuna Fassara",
4732
4742
  "sign_in_card_body": "Daidaita ci gabanka, rubutattun bayananka, da saitunan yare.",
4733
4743
  "sign_in_card_title": "Shiga ciki don samun ƙwarewa mafi kyau",
4744
+ "sign_in_coaching_emails": "Idan ka ƙirƙiri asusu, za mu aiko maka da wani gajeren jerin shawarwarin horaswa don taimaka maka fara amfani da Waha. Za ka iya cire rajista a kowane lokaci.",
4734
4745
  "sign_in_failed": "Shiga ciki ya faskara",
4735
4746
  "sign_in_or_create_account": "Shiga ciki ko Ƙirƙiri Asusu",
4736
4747
  "sign_in_successful": "An shiga ciki cikin nasara",
@@ -5165,6 +5176,7 @@
5165
5176
  "show_translation": "להציג תרגום",
5166
5177
  "sign_in_card_body": "סנכרן את ההתקדמות, ההערות והגדרות השפה שלך.",
5167
5178
  "sign_in_card_title": "התחבר כדי לקבל את החוויה הטובה ביותר",
5179
+ "sign_in_coaching_emails": "בעת יצירת חשבון, נשלח אליך סדרה קצרה של טיפים להדרכה שיעזרו לך להתחיל עם Waha. ניתן לבטל את ההרשמה בכל עת.",
5168
5180
  "sign_in_failed": "ההתחברות נכשלה",
5169
5181
  "sign_in_or_create_account": "התחבר או צור חשבון",
5170
5182
  "sign_in_successful": "ההתחברות הצליחה",
@@ -5599,6 +5611,7 @@
5599
5611
  "show_translation": "अनुवाद दिखाएँ",
5600
5612
  "sign_in_card_body": "अपनी प्रगति, नोट्स और भाषा सेटिंग्स को सिंक करें।",
5601
5613
  "sign_in_card_title": "बेहतरीन अनुभव पाने के लिए साइन इन करें",
5614
+ "sign_in_coaching_emails": "जब आप एक अकाउंट बनाते हैं, तो हम आपको Waha के साथ शुरुआत करने में मदद के लिए प्रशिक्षण देने के सुझावों की एक छोटी श्रृंखला भेजेंगे। आप किसी भी समय अनसब्सक्राइब कर सकते हैं।",
5602
5615
  "sign_in_failed": "साइन-इन विफल रहा",
5603
5616
  "sign_in_or_create_account": "साइन इन करें या अकाउंट बनाएँ",
5604
5617
  "sign_in_successful": "साइन-इन सफल रहा",
@@ -6033,6 +6046,7 @@
6033
6046
  "show_translation": "Fordítás megjelenítése",
6034
6047
  "sign_in_card_body": "Szinkronizáld az előrehaladásodat, jegyzeteidet és nyelvi beállításaidat.",
6035
6048
  "sign_in_card_title": "Jelentkezz be a legjobb élményért",
6049
+ "sign_in_coaching_emails": "Amikor fiókot hozol létre, küldünk neked egy rövid, képzési tippekből álló sorozatot, hogy segítsünk elindulni a Waha használatában. Bármikor leiratkozhatsz.",
6036
6050
  "sign_in_failed": "Sikertelen bejelentkezés",
6037
6051
  "sign_in_or_create_account": "Bejelentkezés vagy fiók létrehozása",
6038
6052
  "sign_in_successful": "Sikeres bejelentkezés",
@@ -6467,6 +6481,7 @@
6467
6481
  "show_translation": "Ցուցադրել Թարգմանությունը",
6468
6482
  "sign_in_card_body": "Համաժամացրեք ձեր առաջընթացը, նշումները և լեզվի կարգավորումները։",
6469
6483
  "sign_in_card_title": "Մուտք գործեք լավագույն փորձառության համար",
6484
+ "sign_in_coaching_emails": "Երբ օգտահաշիվ ստեղծեք, մենք ձեզ կուղարկենք սովորեցնող խորհուրդների մի կարճ շարք, որոնք կօգնեն ձեզ սկսել օգտագործել Waha-ն: Դուք ցանկացած պահի կարող եք ապաբաժանորդագրվել:",
6470
6485
  "sign_in_failed": "Մուտքը ձախողվեց",
6471
6486
  "sign_in_or_create_account": "Մուտք գործեք կամ ստեղծեք հաշիվ",
6472
6487
  "sign_in_successful": "Մուտքը հաջողվեց",
@@ -6901,6 +6916,7 @@
6901
6916
  "show_translation": "Tampilkan Terjemahan",
6902
6917
  "sign_in_card_body": "Sinkronisasi progres, catetan, miwah setelan basa ragané.",
6903
6918
  "sign_in_card_title": "Ngranjing anggén ngamolihang pangalaman pinih becik",
6919
+ "sign_in_coaching_emails": "Rikala ragané ngaryanin akun, titiang pacang ngirimang makudang-kudang pituduh pembinaan sané bawak anggén nulungin ragané ngawitin ring Waha. Ragané dados mandegang langganan kapan ja.",
6904
6920
  "sign_in_failed": "Ngranjing gagal",
6905
6921
  "sign_in_or_create_account": "Ngranjing utawi Makarya Akun",
6906
6922
  "sign_in_successful": "Ngranjing suksés",
@@ -7335,6 +7351,7 @@
7335
7351
  "show_translation": "Mostra traduzione",
7336
7352
  "sign_in_card_body": "Sincronizza i tuoi progressi, le tue note e le impostazioni della lingua.",
7337
7353
  "sign_in_card_title": "Accedi per un'esperienza ottimale",
7354
+ "sign_in_coaching_emails": "Quando crei un account, ti invieremo una breve serie di consigli di formazione per aiutarti a iniziare con Waha. Puoi annullare l'iscrizione in qualsiasi momento.",
7338
7355
  "sign_in_failed": "Accesso non riuscito",
7339
7356
  "sign_in_or_create_account": "Accedi o crea un account",
7340
7357
  "sign_in_successful": "Accesso riuscito",
@@ -7769,6 +7786,7 @@
7769
7786
  "show_translation": "翻訳を見る",
7770
7787
  "sign_in_card_body": "進捗、ノート、言語設定を同期します。",
7771
7788
  "sign_in_card_title": "最適な体験のためにサインインしてください",
7789
+ "sign_in_coaching_emails": "アカウントを作成すると、Wahaを使い始めるのに役立つ短い指導のヒントをいくつかお送りします。いつでも配信を停止できます。",
7772
7790
  "sign_in_failed": "サインインに失敗しました",
7773
7791
  "sign_in_or_create_account": "サインインまたはアカウント作成",
7774
7792
  "sign_in_successful": "サインインに成功しました",
@@ -8203,6 +8221,7 @@
8203
8221
  "show_translation": "თარგმანის ჩვენება",
8204
8222
  "sign_in_card_body": "თქვენი პროგრესის, ჩანაწერების და ენის პარამეტრების სინქრონიზაცია.",
8205
8223
  "sign_in_card_title": "საუკეთესო გამოცდილების მისაღებად შედით სისტემაში",
8224
+ "sign_in_coaching_emails": "როდესაც ანგარიშს შექმნით, ჩვენ გამოგიგზავნით ქოუჩინგის რჩევების მოკლე სერიას, რათა დაგეხმაროთ Waha-ს გამოყენების დაწყებაში. გამოწერის გაუქმება ნებისმიერ დროს შეგიძლიათ.",
8206
8225
  "sign_in_failed": "შესვლა ვერ მოხერხდა",
8207
8226
  "sign_in_or_create_account": "შესვლა ან ანგარიშის შექმნა",
8208
8227
  "sign_in_successful": "შესვლა წარმატებულია",
@@ -8637,6 +8656,7 @@
8637
8656
  "show_translation": "បង្ហាញការបកប្រែ",
8638
8657
  "sign_in_card_body": "ធ្វើសមកាលកម្មដំណើរការ កំណត់ចំណាំ និងការកំណត់ភាសារបស់អ្នក។",
8639
8658
  "sign_in_card_title": "ចូលគណនីដើម្បីទទួលបានបទពិសោធន៍ល្អបំផុត",
8659
+ "sign_in_coaching_emails": "នៅពេលអ្នកបង្កើតគណនី យើងនឹងផ្ញើជូនអ្នកនូវបណ្តុំគន្លឹះនៃការបង្វឹកខ្លីៗ ដើម្បីជួយអ្នកក្នុងការចាប់ផ្តើមជាមួយ Waha។ អ្នកអាចឈប់ជាវបានគ្រប់ពេល។",
8640
8660
  "sign_in_failed": "ការចូលគណនីបានបរាជ័យ",
8641
8661
  "sign_in_or_create_account": "ចូលគណនី ឬបង្កើតគណនី",
8642
8662
  "sign_in_successful": "ការចូលគណនីទទួលបានជោគជ័យ",
@@ -9071,6 +9091,7 @@
9071
9091
  "show_translation": "번역본 보기",
9072
9092
  "sign_in_card_body": "진행 상황, 노트, 언어 설정을 동기화하세요.",
9073
9093
  "sign_in_card_title": "최상의 경험을 위해 로그인하세요",
9094
+ "sign_in_coaching_emails": "계정을 만드시면 Waha를 시작하는 데 도움이 되는 간단한 지도 팁을 몇 차례 보내드립니다. 언제든지 구독을 취소할 수 있습니다.",
9074
9095
  "sign_in_failed": "로그인 실패",
9075
9096
  "sign_in_or_create_account": "로그인 또는 계정 생성",
9076
9097
  "sign_in_successful": "로그인 성공",
@@ -9505,6 +9526,7 @@
9505
9526
  "show_translation": "भाषांतर दाखवा",
9506
9527
  "sign_in_card_body": "तुमची प्रगती, नोट्स आणि भाषा सेटिंग्ज सिंक करा.",
9507
9528
  "sign_in_card_title": "सर्वोत्तम अनुभव मिळवण्यासाठी साईन इन करा",
9529
+ "sign_in_coaching_emails": "जेव्हा तुम्ही खाते तयार करता, तेव्हा आम्ही तुम्हाला Waha सोबत सुरुवात करण्यासाठी मदत म्हणून मार्गदर्शक टिप्सची एक छोटी मालिका पाठवू. तुम्ही कधीही अनसब्सक्राइब करू शकता.",
9508
9530
  "sign_in_failed": "साईन-इन अयशस्वी झाले",
9509
9531
  "sign_in_or_create_account": "साईन इन करा किंवा खाते तयार करा",
9510
9532
  "sign_in_successful": "साईन-इन यशस्वी झाले",
@@ -9939,6 +9961,7 @@
9939
9961
  "show_translation": "Asehoy ny dikanteny",
9940
9962
  "sign_in_card_body": "Ampifanaraho ny fivoaranao, ny naoty ary ny firafitry ny fiteny.",
9941
9963
  "sign_in_card_title": "Midira mba hahazoana traikefa tsara indrindra",
9964
+ "sign_in_coaching_emails": "Rehefa mamorona kaonty ianao, dia handefasanay andian-torohevitra fohy momba ny fanazarana hanampiana anao hanomboka amin'ny Waha. Azonao atao ny miala amin'ny fandraisana izany amin'ny fotoana rehetra.",
9942
9965
  "sign_in_failed": "Tsy nahomby ny fidirana",
9943
9966
  "sign_in_or_create_account": "Midira na Mamorona Kaonty",
9944
9967
  "sign_in_successful": "Tafiditra soa aman-tsara",
@@ -10373,6 +10396,7 @@
10373
10396
  "show_translation": "Орчуулгыг харах",
10374
10397
  "sign_in_card_body": "Өөрийн ахиц дэвшил, тэмдэглэл болон хэлний тохиргоог синк хийнэ үү.",
10375
10398
  "sign_in_card_title": "Хамгийн сайн туршлагыг мэдрэхийн тулд нэвтэрч орно уу",
10399
+ "sign_in_coaching_emails": "Та бүртгэл үүсгэх үед бид танд Waha-г ашиглаж эхлэхэд туслах дасгалжуулан сургах зөвлөгөөний богино цувралыг илгээх болно. Та хүссэн үедээ захиалгыг цуцлах боломжтой.",
10376
10400
  "sign_in_failed": "Нэвтрэх амжилтгүй боллоо",
10377
10401
  "sign_in_or_create_account": "Нэвтрэх эсвэл Бүртгэл үүсгэх",
10378
10402
  "sign_in_successful": "Амжилттай нэвтэрлээ",
@@ -10807,6 +10831,7 @@
10807
10831
  "show_translation": "ဘာသာပြန်ချက်ကြည့်ရန်",
10808
10832
  "sign_in_card_body": "သင့်တိုးတက်မှု၊ မှတ်စုများနှင့် ဘာသာစကားဆက်တင်များကို စင့်ခ်လုပ်ပါ.",
10809
10833
  "sign_in_card_title": "အကောင်းဆုံးအတွေ့အကြုံကို ရယူရန် အကောင့်ဝင်ပါ",
10834
+ "sign_in_coaching_emails": "သင် အကောင့်တစ်ခု ဖန်တီးသည့်အခါ၊ Waha ကို စတင်အသုံးပြုရာတွင် သင့်အား ကူညီပေးရန် နည်းပြလမ်းညွှန်ခြင်းဆိုင်ရာ အကြံပြုချက် အစီအစဉ်တိုများကို ကျွန်ုပ်တို့ ပေးပို့သွားပါမည်။ သင် အချိန်မရွေး စာရင်းသွင်းမှု ရပ်ဆိုင်းနိုင်ပါသည်။",
10810
10835
  "sign_in_failed": "အကောင့်ဝင်ခြင်း မအောင်မြင်ပါ",
10811
10836
  "sign_in_or_create_account": "အကောင့်ဝင်ပါ သို့မဟုတ် အကောင့်ဖန်တီးပါ",
10812
10837
  "sign_in_successful": "အကောင့်ဝင်ခြင်း အောင်မြင်ပါသည်",
@@ -11241,6 +11266,7 @@
11241
11266
  "show_translation": "Toon vertaling",
11242
11267
  "sign_in_card_body": "Synchroniseer je voortgang, notities en taalinstellingen.",
11243
11268
  "sign_in_card_title": "Log in voor de beste ervaring",
11269
+ "sign_in_coaching_emails": "Wanneer je een account aanmaakt, sturen we je een korte reeks coachingtips om je op weg te helpen met Waha. Je kunt je op elk moment afmelden.",
11244
11270
  "sign_in_failed": "Inloggen mislukt",
11245
11271
  "sign_in_or_create_account": "Inloggen of account aanmaken",
11246
11272
  "sign_in_successful": "Inloggen gelukt",
@@ -11675,6 +11701,7 @@
11675
11701
  "show_translation": "अनुवाद देखाउनुहोस्",
11676
11702
  "sign_in_card_body": "तपाईंको प्रगति, नोटहरू, र भाषा सेटिङहरू सिंक गर्नुहोस्.",
11677
11703
  "sign_in_card_title": "उत्कृष्ट अनुभव प्राप्त गर्न साइन इन गर्नुहोस्",
11704
+ "sign_in_coaching_emails": "तपाईंले खाता बनाउनुहुँदा, Waha सुरु गर्न मद्दत गर्न हामी तपाईंलाई प्रशिक्षण सुझावहरूको एउटा छोटो शृङ्खला पठाउनेछौँ। तपाईं जुनसुकै बेला सदस्यता रद्द गर्न सक्नुहुन्छ।",
11678
11705
  "sign_in_failed": "साइन-इन असफल भयो",
11679
11706
  "sign_in_or_create_account": "साइन इन गर्नुहोस् वा खाता सिर्जना गर्नुहोस्",
11680
11707
  "sign_in_successful": "साइन-इन सफल भयो",
@@ -12109,6 +12136,7 @@
12109
12136
  "show_translation": "نشان دادن ترجمه",
12110
12137
  "sign_in_card_body": "پیشرفت، یادداشت‌ها و تنظیمات زبان خود را همگام‌سازی کنید.",
12111
12138
  "sign_in_card_title": "برای داشتن بهترین تجربه وارد شوید",
12139
+ "sign_in_coaching_emails": "وقتی یک حساب کاربری ایجاد می‌کنید، ما یک مجموعه کوتاه از نکات مربیگری برای شما ارسال می‌کنیم تا به شما کمک کنیم کار با Waha را شروع کنید. هر زمان که خواستید می‌توانید لغو اشتراک کنید.",
12112
12140
  "sign_in_failed": "ورود ناموفق بود",
12113
12141
  "sign_in_or_create_account": "ورود یا ایجاد حساب کاربری",
12114
12142
  "sign_in_successful": "ورود موفقیت‌آمیز بود",
@@ -12543,6 +12571,7 @@
12543
12571
  "show_translation": "Mostrar Tradução",
12544
12572
  "sign_in_card_body": "Sincronize o seu progresso, notas e definições de idioma.",
12545
12573
  "sign_in_card_title": "Inicie sessão para obter a melhor experiência",
12574
+ "sign_in_coaching_emails": "Quando você criar uma conta, enviaremos uma curta série de dicas, treinando você para ajudar a começar com o Waha. Você pode cancelar a inscrição a qualquer momento.",
12546
12575
  "sign_in_failed": "Falha no início de sessão",
12547
12576
  "sign_in_or_create_account": "Iniciar sessão ou Criar conta",
12548
12577
  "sign_in_successful": "Início de sessão bem-sucedido",
@@ -12977,6 +13006,7 @@
12977
13006
  "show_translation": "Afișați Traducerea",
12978
13007
  "sign_in_card_body": "Sincronizați-vă progresul, notițele și setările de limbă.",
12979
13008
  "sign_in_card_title": "Conectați-vă pentru a beneficia de cea mai bună experiență",
13009
+ "sign_in_coaching_emails": "Când îți creezi un cont, îți vom trimite o scurtă serie de sfaturi de Antrenez pentru a te ajuta să începi cu Waha. Te poți dezabona oricând.",
12980
13010
  "sign_in_failed": "Conectarea a eșuat",
12981
13011
  "sign_in_or_create_account": "Conectați-vă sau creați un cont",
12982
13012
  "sign_in_successful": "Conectare reușită",
@@ -13411,6 +13441,7 @@
13411
13441
  "show_translation": "Показать перевод",
13412
13442
  "sign_in_card_body": "Синхронизируйте свой прогресс, заметки и языковые настройки.",
13413
13443
  "sign_in_card_title": "Войдите, чтобы использовать все возможности",
13444
+ "sign_in_coaching_emails": "Когда вы создадите аккаунт, мы отправим вам небольшую серию советов по наставничеству, чтобы помочь вам начать работу с Waha. Вы можете отписаться в любой момент.",
13414
13445
  "sign_in_failed": "Ошибка входа",
13415
13446
  "sign_in_or_create_account": "Войти или создать аккаунт",
13416
13447
  "sign_in_successful": "Вход выполнен успешно",
@@ -13845,6 +13876,7 @@
13845
13876
  "show_translation": "Mostrar traducción",
13846
13877
  "sign_in_card_body": "Sincroniza tu progreso, notas y configuración de idioma.",
13847
13878
  "sign_in_card_title": "Inicia sesión para obtener la mejor experiencia",
13879
+ "sign_in_coaching_emails": "Cuando crees una cuenta, te enviaremos una breve serie de consejos de entrenamiento para ayudarte a empezar con Waha. Puedes cancelar tu suscripción en cualquier momento.",
13848
13880
  "sign_in_failed": "Error al iniciar sesión",
13849
13881
  "sign_in_or_create_account": "Iniciar sesión o crear cuenta",
13850
13882
  "sign_in_successful": "Inicio de sesión exitoso",
@@ -14279,6 +14311,7 @@
14279
14311
  "show_translation": "Shfaq përkthimin",
14280
14312
  "sign_in_card_body": "Sinkronizo përparimin, shënimet dhe cilësimet e gjuhës.",
14281
14313
  "sign_in_card_title": "Hyr për të pasur përvojën më të mirë",
14314
+ "sign_in_coaching_emails": "Kur krijoni një llogari, ne do t'ju dërgojmë një seri të shkurtër me këshilla trajnimi për t'ju ndihmuar të filloni me Waha. Mund të çregjistroheni në çdo kohë.",
14282
14315
  "sign_in_failed": "Hyrja dështoi",
14283
14316
  "sign_in_or_create_account": "Hyr ose krijo llogari",
14284
14317
  "sign_in_successful": "Hyrja u krye me sukses",
@@ -14713,6 +14746,7 @@
14713
14746
  "show_translation": "Visa översättning",
14714
14747
  "sign_in_card_body": "Synkronisera dina framsteg, anteckningar och språkinställningar.",
14715
14748
  "sign_in_card_title": "Logga in för att få den bästa upplevelsen",
14749
+ "sign_in_coaching_emails": "När du skapar ett konto skickar vi dig en kort serie med coachingtips för att hjälpa dig att komma igång med Waha. Du kan avregistrera dig när som helst.",
14716
14750
  "sign_in_failed": "Inloggningen misslyckades",
14717
14751
  "sign_in_or_create_account": "Logga in eller skapa konto",
14718
14752
  "sign_in_successful": "Inloggningen lyckades",
@@ -15147,6 +15181,7 @@
15147
15181
  "show_translation": "Onyesha Tafsiri",
15148
15182
  "sign_in_card_body": "Sawazisha maendeleo yako, madokezo, na mipangilio ya lugha.",
15149
15183
  "sign_in_card_title": "Ingia ili kupata uzoefu bora",
15184
+ "sign_in_coaching_emails": "Unapofungua akaunti, tutakutumia mfululizo mfupi wa vidokezo vya uelimishaji kukusaidia kuanza na Waha. Unaweza kujiondoa wakati wowote.",
15150
15185
  "sign_in_failed": "Kuingia kumeshindikana",
15151
15186
  "sign_in_or_create_account": "Ingia au Unda Akaunti",
15152
15187
  "sign_in_successful": "Kuingia kumefanikiwa",
@@ -15581,6 +15616,7 @@
15581
15616
  "show_translation": "மொழிபெயர்ப்பைக் காட்டு",
15582
15617
  "sign_in_card_body": "உங்கள் முன்னேற்றம், குறிப்புகள் மற்றும் மொழி அமைப்புகளை ஒத்திசைக்கவும்.",
15583
15618
  "sign_in_card_title": "சிறந்த அனுபவத்தைப் பெற உள்நுழையவும்",
15619
+ "sign_in_coaching_emails": "நீங்கள் கணக்கை உருவாக்கும்போது, Waha-ஐப் பயன்படுத்தத் தொடங்க உதவும் சில தொடர்ச்சியான பயிற்சி குறிப்புகளை நாங்கள் உங்களுக்கு அனுப்புவோம். நீங்கள் எப்போது வேண்டுமானாலும் சந்தாவை ரத்து செய்யலாம்.",
15584
15620
  "sign_in_failed": "உள்நுழைவு தோல்வியடைந்தது",
15585
15621
  "sign_in_or_create_account": "உள்நுழையவும் அல்லது கணக்கை உருவாக்கவும்",
15586
15622
  "sign_in_successful": "உள்நுழைவு வெற்றிகரமாக முடிந்தது",
@@ -16015,6 +16051,7 @@
16015
16051
  "show_translation": "అనువాదాన్ని చూపించు",
16016
16052
  "sign_in_card_body": "మీ పురోగతి, నోట్స్ మరియు భాషా సెట్టింగ్‌లను సింక్ చేయండి.",
16017
16053
  "sign_in_card_title": "ఉత్తమ అనుభవాన్ని పొందడానికి సైన్ ఇన్ చేయండి",
16054
+ "sign_in_coaching_emails": "మీరు ఖాతాను సృష్టించినప్పుడు, మీరు Wahaను ప్రారంభించడంలో సహాయపడటానికి మేము మీకు ఒక చిన్న శిక్షణ చిట్కాల సిరీస్‌ని పంపుతాము. మీరు ఎప్పుడైనా అన్‌సబ్‌స్క్రయిబ్ చేసుకోవచ్చు.",
16018
16055
  "sign_in_failed": "సైన్-ఇన్ విఫలమైంది",
16019
16056
  "sign_in_or_create_account": "సైన్ ఇన్ చేయండి లేదా ఖాతాను సృష్టించండి",
16020
16057
  "sign_in_successful": "సైన్-ఇన్ విజయవంతమైంది",
@@ -16449,6 +16486,7 @@
16449
16486
  "show_translation": "Ipakita ang Pagsasalin",
16450
16487
  "sign_in_card_body": "I-sync ang iyong progress, mga tala, at mga setting ng wika.",
16451
16488
  "sign_in_card_title": "Mag-sign in para makuha ang pinakamagandang karanasan",
16489
+ "sign_in_coaching_emails": "Kapag gumawa ka ng account, papadalhan ka namin ng maikling serye ng mga tip sa pagtuturo upang matulungan kang makapagsimula sa Waha. Maaari kang mag-unsubscribe anumang oras.",
16452
16490
  "sign_in_failed": "Nabigo ang pag-sign in",
16453
16491
  "sign_in_or_create_account": "Mag-sign in o Gumawa ng Account",
16454
16492
  "sign_in_successful": "Matagumpay ang pag-sign in",
@@ -16883,6 +16921,7 @@
16883
16921
  "show_translation": "แสดงบทแปล",
16884
16922
  "sign_in_card_body": "ซิงค์ความคืบหน้า บันทึกย่อ และการตั้งค่าภาษาของคุณ",
16885
16923
  "sign_in_card_title": "ลงชื่อเข้าใช้เพื่อรับประสบการณ์ที่ดีที่สุด",
16924
+ "sign_in_coaching_emails": "เมื่อคุณสร้างบัญชี เราจะส่งชุดเคล็ดลับการโค้ชชิ้งสั้นๆ เพื่อช่วยให้คุณเริ่มต้นใช้งาน Waha ได้ คุณสามารถยกเลิกการสมัครรับข้อมูลได้ทุกเมื่อ",
16886
16925
  "sign_in_failed": "การลงชื่อเข้าใช้ล้มเหลว",
16887
16926
  "sign_in_or_create_account": "ลงชื่อเข้าใช้หรือสร้างบัญชี",
16888
16927
  "sign_in_successful": "ลงชื่อเข้าใช้สำเร็จ",
@@ -17317,6 +17356,7 @@
17317
17356
  "show_translation": "Çeviriyi Göster",
17318
17357
  "sign_in_card_body": "İlerlemenizi, notlarınızı ve dil ayarlarınızı senkronize edin.",
17319
17358
  "sign_in_card_title": "En iyi deneyim için giriş yapın",
17359
+ "sign_in_coaching_emails": "Bir hesap oluşturduğunuzda, Waha'ya başlamanıza yardımcı olmak için size kısa bir koçluk ipuçları serisi göndereceğiz. İstediğiniz zaman abonelikten çıkabilirsiniz.",
17320
17360
  "sign_in_failed": "Giriş başarısız oldu",
17321
17361
  "sign_in_or_create_account": "Giriş Yap veya Hesap Oluştur",
17322
17362
  "sign_in_successful": "Giriş başarıyla gerçekleştirildi",
@@ -17751,6 +17791,7 @@
17751
17791
  "show_translation": "تەرجىمىسىنى كۆرسەت",
17752
17792
  "sign_in_card_body": "ئىلگىرىلەش، خاتىرە ۋە تىل تەڭشەكلىرىڭىزنى ماسقەدەملەڭ.",
17753
17793
  "sign_in_card_title": "ئەڭ ياخشى تەسىراتقا ئېرىشىش ئۈچۈن تىزىمغا كىرىڭ",
17794
+ "sign_in_coaching_emails": "ھېسابات قۇرغىنىڭىزدا، Waha نى باشلىشىڭىزغا ياردەم بېرىش ئۈچۈن، بىز سىزگە بىر يۈرۈش قىسقا يېتەكچىلەرگە مەسلىھەت بەرگۈچى تەكلىپلىرىنى ئەۋەتىمىز. سىز خالىغان ۋاقىتتا مۇشتەرىلىكتىن چېكىنەلەيسىز.",
17754
17795
  "sign_in_failed": "تىزىمغا كىرەلمىدى",
17755
17796
  "sign_in_or_create_account": "تىزىمغا كىرىڭ ياكى ھېسابات قۇرۇڭ",
17756
17797
  "sign_in_successful": "تىزىمغا كىردى",
@@ -18185,6 +18226,7 @@
18185
18226
  "show_translation": "Показати переклад",
18186
18227
  "sign_in_card_body": "Синхронізуйте свій прогрес, нотатки та налаштування мови.",
18187
18228
  "sign_in_card_title": "Увійдіть, щоб отримати найкращий досвід",
18229
+ "sign_in_coaching_emails": "Коли ви створите обліковий запис, ми надішлемо вам коротку серію порад з навчання, щоб допомогти вам розпочати роботу з Waha. Ви можете скасувати підписку будь-коли.",
18188
18230
  "sign_in_failed": "Помилка входу",
18189
18231
  "sign_in_or_create_account": "Увійти або створити обліковий запис",
18190
18232
  "sign_in_successful": "Вхід успішний",
@@ -18619,6 +18661,7 @@
18619
18661
  "show_translation": "ترجمہ دکھائیں",
18620
18662
  "sign_in_card_body": "اپنی پیشرفت، نوٹس، اور زبان کی سیٹنگز کو سنک کریں.",
18621
18663
  "sign_in_card_title": "بہترین تجربہ حاصل کرنے کے لیے سائن ان کریں",
18664
+ "sign_in_coaching_emails": "جب آپ ایک اکاؤنٹ بناتے ہیں، تو ہم آپ کو سکھانے کی تجاویز کا ایک مختصر سلسلہ بھیجیں گے تاکہ آپ کو Waha کے ساتھ شروعات کرنے میں مدد مل سکے۔ آپ کسی بھی وقت ان سبسکرائب کر سکتے ہیں۔",
18622
18665
  "sign_in_failed": "سائن ان ناکام ہو گیا",
18623
18666
  "sign_in_or_create_account": "سائن ان کریں یا اکاؤنٹ بنائیں",
18624
18667
  "sign_in_successful": "سائن ان کامیاب ہو گیا",
@@ -19053,6 +19096,7 @@
19053
19096
  "show_translation": "Papar Terjemahan",
19054
19097
  "sign_in_card_body": "Segerakkan kemajuan, nota dan tetapan bahasa anda.",
19055
19098
  "sign_in_card_title": "Log masuk untuk mendapatkan pengalaman terbaik",
19099
+ "sign_in_coaching_emails": "Apabila anda membuat akaun, kami akan menghantar kepada anda satu siri pendek petua membimbing untuk membantu anda bermula dengan Waha. Anda boleh nyahlanggan pada bila-bila masa.",
19056
19100
  "sign_in_failed": "Log masuk gagal",
19057
19101
  "sign_in_or_create_account": "Log masuk atau Cipta Akaun",
19058
19102
  "sign_in_successful": "Log masuk berjaya",
@@ -536,6 +536,7 @@
536
536
  "privacy_policy_agreement": { "type": "string" },
537
537
  "sign_in_card_title": { "type": "string" },
538
538
  "sign_in_card_body": { "type": "string" },
539
+ "sign_in_coaching_emails": { "type": "string" },
539
540
  "signed_in": { "type": "string" },
540
541
  "signed_out": { "type": "string" },
541
542
  "wont_ask_again": { "type": "string" },
@@ -355,6 +355,7 @@ export declare const LanguageTranslationsApp: z.ZodObject<{
355
355
  privacy_policy_agreement: z.ZodString;
356
356
  sign_in_card_title: z.ZodString;
357
357
  sign_in_card_body: z.ZodString;
358
+ sign_in_coaching_emails: z.ZodOptional<z.ZodString>;
358
359
  signed_in: z.ZodString;
359
360
  signed_out: z.ZodString;
360
361
  wont_ask_again: z.ZodString;
@@ -714,6 +715,7 @@ export declare const TranslationsApp: z.ZodRecord<z.ZodString, z.ZodObject<{
714
715
  privacy_policy_agreement: z.ZodString;
715
716
  sign_in_card_title: z.ZodString;
716
717
  sign_in_card_body: z.ZodString;
718
+ sign_in_coaching_emails: z.ZodOptional<z.ZodString>;
717
719
  signed_in: z.ZodString;
718
720
  signed_out: z.ZodString;
719
721
  wont_ask_again: z.ZodString;
@@ -369,6 +369,7 @@ exports.LanguageTranslationsApp = zod_1.z.object({
369
369
  privacy_policy_agreement: zod_1.z.string(),
370
370
  sign_in_card_title: zod_1.z.string(),
371
371
  sign_in_card_body: zod_1.z.string(),
372
+ sign_in_coaching_emails: zod_1.z.string().optional(),
372
373
  signed_in: zod_1.z.string(),
373
374
  signed_out: zod_1.z.string(),
374
375
  wont_ask_again: zod_1.z.string(),
@@ -43,6 +43,48 @@
43
43
  "eq": "الكتاب المقدس مليء بآيات تتحدّث عن طلب المشورة الحكيمة، وعن الصدق والمساءلة والتعلم من بعضنا البعض، وعن التخطيط، وعن الحكمة. والآن بعد أن أكملنا مجموعة القصص الجديدة هذه، حان الوقت لنتوقّف، نقوم بالتقييم، وثم التخطيط. كيف ستمضي قدما؟ في أي مجال تحتاج أن تستمر في التطور فيه؟ هل أنت \"عالق\" من أحد النواحي وتحتاج إلى مزيد من التدريب؟ دعنا نتوقف لحظة للإجابة على الأسئلة التالية التي قد تساعدك أنت ومجموعتك على التفكير والتخطيط. خلال الأشهر القليلة الماضية كيف قمت بتطبيق الأمور التي قلت \"سأفعلها\"؟ هل كنت سامعًا وعاملاً بالكلمة؟ كيف يؤثر كونك سامعا وعاملا بالكلمة على خدمتك وعليك أنت شخصيًا؟ عادة ما قمنا باستخدام مخطط السفينة والأشرعة لشرح الممارسات السبع لتلميذ يتضاعف. لنأخذ دقيقة الآن لإعادة رسم هذا المخطط من الذاكرة. كل عنصر في مخطّط السفينة والأشرعة يمثل نجاح ووصول إلى مستوى جديد وكذلك وصول إلى منطقة يمكن أن يعلق فيها المرء. في أي مجال تشعر أنك قد حققت تقدّمًا خلال الأشهر القليلة الماضية؟ وفي أي مجال تشعر أنك عالق؟ بما أن الصلاة هي الوقود الرئيسي للحركات، فهل كنت تصلّي بطريقة استثنائية؟ وراء كل حركة دائمًا ما توجد رؤية كبيرة من الله. تؤثر هذه الرؤية على كل ما نقوم به. بناءً على كل الآيات الكتابية التي استعرضناها، كيف تُقَيِّم نمو رؤيتك؟ هل تتماشى أفعالك مع هذه الرؤية؟ إذا كانت الإجابة بنعم، فهذا رائع! استمر! إذا كانت الإجابة \"لا\"، فما الذي يجب عليك أن تُغيّره؟ ليس كل شخص مستعد للتجاوب مع الإنجيل، وليس كل شخص هو شخص سلام. وبالتالي، نقوم بعملية الغربلة للعثور على من نستثمر فيه. كيف حالك مع عملية الغربلة التي تقوم بها ومع عيشك الهادف؟ ما الذي نجح بشكل جيد؟ ما الذي ما زلت بحاجة إلى مزيد من التمرّس فيه؟ ما هي أدوات الغربلة التي جربتها؟ هل تحتاج إلى المزيد من هذه أدوات؟ عندما تجد شخص سلام مُحتمَل، فيجب عليك أن تساعده في بدء مجموعة اكتشاف داخل الأويكوس (محيطه) الخاص به. كيف هو حالك مع الانتقال من الغربلة إلى دعوة الأشخاص لبدء مجموعات اكتشاف الكتاب المقدّس؟ عندما تجد شخصًا مهتمًا بأمور الملكوت ويريد أن يتعلّم أكثر، يجب أن تكون هادفًا في تدريب هذا الشخص للوصول بشكل فعال إلى محيطه. كيف حالك مع هذا التدريب؟ بمجرد بدء مجموعة اكتشاف جديدة، تحتاج إلى تدريب شخص السلام المحتمل بشكل فعال لتسهيل وقيادة عملية الاكتشاف بشكل جيد مع مجموعته، ليكون الشخص \"الذي يطرح الأسئلة\" وليس مُعلّمًا، وليتبع مجموعة بسيطة من الأسئلة، ويستمر في التركيز على النص. كيف حالك مع هذه المجالات؟ هل تقوم المجموعات بدراسة مجموعات الدروس الأساسية من البداية وبدون ترك بعض الدروس؟ إذا كانت المجموعات تقوم بدراسة المواضيع، فهل يبحثون بسرعة عن فرص للعودة إلى الدروس الأساسية؟ تطوير القيادة هو أمر أساسي لبزوغ أي حركة. في مجموعات الاكتشاف، هل تتعمد تلمذة أشخاص السلام المحتملين بطريقة تبني مهاراتهم في القيادة؟ بناءً على كل هذا، ما هي الطريق الصحيح للمضي قدمًا على المستوى الفردي وكمجموعة؟"
44
44
  }
45
45
  },
46
+ "deu": {
47
+ "introduction": "Einführung",
48
+ "introductions": {
49
+ "03.005.001": "Im Jüngermacherkurs haben wir Matthäus 28:18-20 studiert, wo Jesus seinen Jüngern den Auftrag gab, Menschen aus allen Nationen zu Jüngern zu machen. Wir sprachen über einige der vielen erstaunlichen Jüngerschaftsbewegungen, die weltweit stattfinden, und dachten darüber nach, was erforderlich wäre, um zu sehen, wie eine Jüngerschaftsbewegung in unserer Stadt, unserem Land oder unserer Volksgruppe entsteht. Wir haben darüber gesprochen, was getan werden muss, anstatt nur darüber, was wir unserer Meinung nach tun können. Letztendlich entspringt diese Vision für Bewegungen dem Wunsch Gottes, ganze Familien, Völker und Nationen vollständig zu erlösen und überreich zu segnen. Seine Vision drängt uns, unser Leben und unsere Dienste zu analysieren, um zu sehen, ob wir die Dinge tun, die zu diesen gottverherrlichenden Bewegungen leiten können. Heute werden wir uns eingehender mit Gottes großer Vision befassen, um uns dabei zu helfen, im Verständnis und in der Umsetzung der Prinzipien von Jüngerschaftsbewegungen weiter zu wachsen. Während es buchstäblich Hunderte von Versen gibt, die Gottes globale Vision aller Nationen zeigen, werden wir uns heute nur einige wenige ansehen.",
50
+ "03.005.002": "Im Jüngermacherkurs haben wir besprochen, wie Jesus in Matthäus 28:18-20 seinen Jüngern befahl, Menschen zu lehren, allem „zu gehorchen“, was Er geboten hat. Gehorsam ist nicht nur ein wesentlicher Aspekt des Jüngerdaseins, sondern auch ein sehr effektiver Weg für Nichtgläubige und Gläubige, die Wahrheit von Jesus zu entdecken. Es überrascht nicht, dass wir in Bewegungen auf der ganzen Welt einen starken Fokus darauf sehen, den Geboten der Heiligen Schrift zu gehorchen und sie in die Praxis umzusetzen. Die fruchtbarsten Menschen in Bewegungen werden normalerweise als „Täter des Wortes“ bezeichnet. Die Bibel ist mehr als nur ein Buch, das es zu studieren gilt; sie ist ein Buch, das gelebt werden muss. Heute werden wir uns eingehender mit dem Thema Gehorsam befassen, um uns dabei zu helfen, im Verständnis und in der Umsetzung der Prinzipien der Jüngerschaftsbewegung weiter zu wachsen.",
51
+ "03.005.003": "Bei jedem Treffen fragen wir uns, wie wir bei Herausforderungen oder Belastungen der Menschen in unserer Gemeinschaft helfen können. Indem wir ihnen dienen, wird unser Glaube für andere attraktiv. Das zeichnet uns als Menschen aus, die Gott kennen und lieben, und zieht Menschen des Friedens zu uns. Wir wollen aktiv so leben, dass wir fähig sind, Menschen zu finden, in denen der Geist bereits wirkt -- Menschen, die offen dafür sind, von Gott zu hören, und die Gott kennenlernen wollen. Ab und zu hörst du vielleicht den Begriff Filtern, was den Prozess beschreibt, zu versuchen, diese Menschen zu finden. Um uns heute zu helfen, unser Verständnis und die Umsetzung der Prinzipien der „Jünger machen“-Bewegung weiter auszubauen, werden wir die Themen des zielgerichteten Lebens und des Filterns eingehender betrachten.",
52
+ "03.005.004": "In der Lektion „Gebet multiplizieren“ aus der Reihe „Die 7 Praktiken eines Jüngers, der sich multipliziert“ haben wir erwähnt, dass in absolut jeder bisher untersuchten „Jünger machen“-Bewegung „außergewöhnliches“ Gebet beobachtet wurde. Dieses außergewöhnliche Gebet findet auf individueller Ebene, in lokalen Teams von Bewegungspraktikern, auf nationaler und sogar auf internationaler Ebene statt. Gebet ist für alle Beteiligten von entscheidender Bedeutung, von den ersten Personen, die helfen, Bewegungen zu starten, bis hin zu den neuen Gläubigengemeinschaften, die gegründet werden. Das Gebet greift nicht nur auf Gottes Kraft zurück, sondern berührt auch unsere Herzen, unsere Gedanken und unsere Vision. Um uns zu helfen, in unserem Verständnis und in der Umsetzung der Prinzipien der „Jünger machen“-Bewegung weiter zu wachsen, werden wir heute das Thema Gebet tiefergehend betrachten.",
53
+ "03.005.005": "Im Jüngermacherkurs haben wir Matthäus 28:16-20 untersucht. In diesem Abschnitt legt Jesus die Mission und die Prioritäten eines Jüngers fest. Er lehrt uns über Gottes Vision, die Bedeutung, Jünger zu machen, die Bedeutung von Gehorsam, die Natur der Arbeit, die unser Herr uns aufgetragen hat, und vieles mehr. Heute werden wir uns mehr Zeit nehmen, diese wichtige Bibelstelle zu besprechen, um zu bewerten, wie gut unsere Bemühungen im Dienst auf die Gebote Jesu ausgerichtet sind.",
54
+ "03.005.006": "In Jüngerschaftsbewegungen auf der ganzen Welt sehen wir beständig die Kraft Gottes und die Kraft der Schrift. Dies ist einer der Gründe, warum Entdecker-Bibelstudien unter Nichtgläubigen so kraftvoll sind. Wenn wir jedoch Gott und der Schrift nicht vertrauen, können wir am Ende die Kontrolle übernehmen oder versuchen, auf eine Weise eine Autorität zu sein, die keine dauerhafte Veränderung bewirkt. Bewegungen sind ein Werk Gottes! Wir können darauf vertrauen, dass Er durch diese Bemühungen am Werk ist und dass Sein Wort kraftvoll ist. Heute werden wir auf einen Abschnitt zurückkommen, den wir zuvor studiert haben, während wir uns dem Thema widmen, Gott zu vertrauen und der Schrift zu vertrauen.",
55
+ "03.005.007": "Im Jüngermacherkurs haben wir gelernt, wie Jesus seine Jünger aussendet, um Personen des Friedens zu finden. Jesus gibt seinen Jüngern spezifische Anweisungen und fasst dann bei ihnen nach. Er scheint eine klare Strategie zu haben, aber was können wir daraus lernen? Wir sehen sicherlich, dass heute weltweit viele Bewegungen seinen Anweisungen folgen. Wie sehr gleicht unsere Dienstpraxis dem, was Jesus angewiesen hat? Um uns dabei zu helfen, weiter im Verständnis und in der Umsetzung der Prinzipien der Jüngerschaftsbewegung zu wachsen, werden wir uns heute eingehender mit der Strategie Jesu befassen.",
56
+ "03.005.008": "In der letzten Lektion haben wir gelernt, dass Jesus seine Jünger aussandte, um Personen des Friedens zu finden, die die Botschaft dann in ihren Gemeinschaften aufnehmen würden. Wir haben im Jüngermacherkurs auch gesehen, wie vorteilhaft es ist, wenn natürliche Gruppen von Menschen zum Glauben kommen anstatt Einzelpersonen. In der Apostelgeschichte erwähnen über 30 Abschnitte Menschen, die zum Glauben kommen, aber nur bei dreien davon handelt es sich um Einzelpersonen. Ähnlich wird in Bewegungen eine große Anstrengung unternommen, um dem gesamten Oikos – also einer natürlichen Gemeinschaft oder einem familiären Netzwerk – zu helfen, Gott zu entdecken, anstatt nur einer einzelnen Person. Dieser „Gruppenansatz“ scheint nicht nur ein biblisches Muster zu sein, sondern auch eine praktische Strategie, die anerkennt, dass Gruppen in ihrem Glauben viel besser durchhalten als isolierte Einzelpersonen. Heute werden wir uns eine Reihe von Abschnitten ansehen, die diesen biblischen Fokus darauf zeigen, dass Gruppen, Familien und natürliche Netzwerke zum Glauben kommen. ",
57
+ "03.005.009": "Beim Studieren verschiedener Bewegungen auf der ganzen Welt stellen wir erstaunt fest, dass sie in einigen der frommsten hinduistischen, muslimischen, buddhistischen und animistischen Nationen stattfinden -- an den Orten, an denen viele Menschen den Glauben an Jesus fälschlicherweise für eine „westliche“ Religion gehalten haben. Aber das Reich Gottes ist nicht auf eine einzige Kultur beschränkt. Das Evangelium hat eine erstaunliche Fähigkeit, Grenzen zu überwinden. In Bewegungen auf der ganzen Welt sehen wir, dass Evangeliumsarbeiter an vorderster Front sich und das Evangelium auf kulturell angemessene Weise präsentieren, was den Menschen hilft zu erkennen, dass Jesus und das Reich Gottes tatsächlich eine gute Nachricht für ihr Volk sind. Um heute im Verständnis und in der Umsetzung der Prinzipien der Bewegung zum Jünger machen weiter zu wachsen, werden wir die kulturelle Flexibilität der Guten Nachricht von Jesus untersuchen.",
58
+ "03.005.010": "Einer der schönen Aspekte von Bewegungen ist das beständige Hervorbringen neuer Leiter. Neue Gläubige werden ständig zugerüstet, um die nächste Generation von Evangeliumsarbeitern und Gemeindeleitern zu werden. In Bewegungen sehen wir einen kontinuierlichen Kreislauf, in dem wir Menschen zum Jünger machen und sie befähigen, welche dann oft sogar noch größere Dinge für das Reich Gottes tun. Wenn die Botschaft vom Reich Gottes in neue Städte, Volksgruppen oder Gemeinschaften vordringt, sehen wir regelmäßig, dass das Finden eines Einheimischen, ihn zum Jünger zu machen und ihn für einen fruchtbaren und effektiven Dienst in seinem eigenen lokalen Kontext zuzurüsten, eine der effektivsten Bemühungen ist, die der Evangeliumsarbeiter unternehmen kann. Um heute im Verständnis und in der Umsetzung der Prinzipien der Bewegung zum Jünger machen weiter zu wachsen, werden wir die große Auswirkung untersuchen, die Barnabas hatte, indem er einen „Paulus“ fand, um ihn zum Jünger zu machen.",
59
+ "03.005.011": "Jesus startete eine erstaunliche Bewegung, die sich rund um die Welt, über kulturelle Barrieren und über aufeinanderfolgende Generationen hinweg ausgebreitet hat. Dieses erstaunliche Wachstum des Reiches Gottes setzt sich in den Hunderten von Bewegungen fort, die derzeit auf der ganzen Welt stattfinden. In diesen Bewegungen sehen wir, wie Gläubige ganz bewusst wenig hilfreiche Traditionen und Bräuche beiseiteschieben und strategisch hinausgehen, um Jünger zu reproduzieren, die weitere Jünger reproduzieren, die wiederum noch mehr Jünger reproduzieren. Sie trainieren diese Jünger, um neue Entdeckergruppen zu starten, die sich in andere Gruppen multiplizieren, welche sich dann in noch mehr Gruppen multiplizieren. Um heute in unserem Verständnis und der Umsetzung der Prinzipien der Jünger-machen-Bewegung weiter zu wachsen, werden wir diese Idee des multiplizierenden Wachstums über mehrere Generationen hinweg untersuchen.",
60
+ "03.005.012": "In allen Bewegungen entdecken Tausende, Zehntausende und sogar Hunderttausende von neuen Gläubigen neues Leben im Reich Gottes. Diese neuen Gläubigen führen nicht nur zur Gründung von Tausenden neuen Gemeinden, sondern diese neuen Gemeinden selbst werden zu mächtigen neuen Werkzeugen Gottes, um das Reich zu noch mehr Menschen und Gemeinschaften zu bringen. Woher kommen diese Gemeinden? Sie kommen aus Entdeckergruppen, die dann zu gläubigen Gruppen werden, die sich dann gemeinsam verpflichten, den neutestamentlichen Geboten und Mustern für die Gemeinde zu folgen. Und wie sehen diese Gemeinden aus? Sie sehen so aus, wie wir es im Neuen Testament finden: einfache Gemeinden, die einen starken Einfluss auf die Gesellschaft um sie herum haben. Heute werden wir uns erneut einen der wichtigsten Textabschnitte ansehen, den gläubige Entdeckergruppen studieren, wenn sie beschließen, als Ergebnis ihres neuen Glaubens eine vollwertige Gemeinde zu werden.",
61
+ "03.006.001": "Angst kann eines der größten Hindernisse für den Beginn einer Bewegung sein. Manchmal ist diese Angst subtil und unbemerkt, und manchmal offensichtlicher. Aber wenn wir Bewegungen studieren, sehen wir, wie wichtig es ist, diesen Kreislauf der Angst zu durchbrechen. Die Forschung zeigt uns, dass, wie in der frühen Kirche, die Katalysatoren von Bewegungen und die ersten Jünger innerhalb einer Bewegung die Angst überwinden und beginnen müssen, ein Leben zu führen, das von kühnem, furchtlosem Glauben geprägt ist. Wenn du und deine Mitarbeiter beginnt, die Angst zu überwinden, und den heranwachsenden Jüngern Glauben statt Angst weitergeben könnt, dann legt ihr ein gutes Fundament für eine Bewegung. Um unser Wachstum als Praktiker von „Jünger machen“-Bewegungen fortzusetzen, werden wir uns heute eingehender mit dem Thema der Überwindung von Angst befassen.",
62
+ "03.006.002": "Den Zugang zu neuen Gemeinschaften Verlorener Menschen zu erlangen, ist unglaublich wichtig, wenn man versucht, Jünger zu machen. Das beeinflusst so viele Aspekte dabei, einer Bewegung zu helfen, sowohl zu starten als auch weiter zu wachsen. Es umfasst alles, von der Erlangung des physischen Zugangs zu Gemeinschaften über die Art der auszuübenden Arbeiten oder Dienste, dem Ringen mit Kultur- oder Sprachbarrieren, dem Verständnis der Weltanschauung und der Bedürfnisse der Menschen, bis hin zu Fragen der Kontextualisierung und mehr. Und dies sind nicht nur einmalige Fragen. Damit Bewegungen weiter wachsen können, erfordern sie eine fortwährende Erweiterung des Zugangs: Zugang zu neuen Gemeinschaften, neuen Orten und mehr. Wann immer dein Fortschritt ins Stocken geraten zu sein scheint, kann es gut sein, einen Schritt zurückzutreten und kritisch zu überprüfen, wie du deine Zugangsstrategien verbessern kannst. Um uns also zu helfen, in diesem Bereich zu wachsen, werden wir uns heute eingehender mit diesem Thema des Zugangs befassen.",
63
+ "03.006.003": "Jesus nutzte einen wunderbaren Prozess der Jüngerschaft, um normale, gewöhnliche, sogar ungebildete Menschen zu \"Menschenfischern\" zu machen. Gott ist darauf spezialisiert, \"tonerne Gefäße\" zu gebrauchen, um seinen großen Schatz zu tragen. Und in Bewegungen versuchen wir, diesem biblischen Modell zu folgen. Es gibt ein zielgerichtetes Bestreben, alle Menschen – gewöhnliche Menschen, Männer und Frauen jeden Alters – zu Jüngern zu machen und sie dafür auszurüsten, das Werk Gottes zu tun. Bewegungen überlassen das Werk Gottes nicht nur professionellen Geistlichen oder solchen, die besonders begabt zu sein scheinen. Wenn wir wirklich anfangen, das Potenzial in ALLEN Menschen zu sehen, sogar in normalen, gewöhnlichen Menschen, und anfangen, sie auszurüsten und von ihnen große Dinge zu erwarten, machen wir einen entscheidenden Schritt vorwärts, um eine gesunde Bewegung entstehen zu sehen. Um uns also zu helfen, in diesem Bereich zu wachsen, werden wir uns heute eingehender mit dem Thema \"Gott gebraucht normale, gewöhnliche Menschen\" befassen.",
64
+ "03.006.004": "In Bewegungen auf der ganzen Welt sehen wir die Vielfalt der Gläubigen, die an dem Werk beteiligt sind: Männer und Frauen; Jung und Alt; Reich und Arm; Stadtbewohner und Bauern. Wie in vielen biblischen Passagen können wir bei der Untersuchung von Bewegungen weltweit insbesondere feststellen, dass Frauen sehr aktiv und beteiligt sind. Während ihre Beteiligung manchmal organisch geschieht, müssen Katalysatoren und Leiter der Bewegungen oft ganz bewusst sicherstellen, dass Frauen gezielt erreicht, zu Jüngern gemacht und ausgerüstet werden, damit sie ein aktiver Teil bei der Gründung und dem Wachstum einer Bewegung werden. Um uns heute dabei zu helfen, im Verständnis und in der Umsetzung der Prinzipien von Jüngerschaftsbewegungen weiter zu wachsen, werden wir uns eingehender mit der Rolle von Frauen in Jüngerschaftsbewegungen befassen.",
65
+ "03.006.005": "Im Zentrum von Jüngerschaftsbewegungen steht die Jüngerschaft. Es gibt so viele Dinge, auf die Jesus seine Zeit hätte verwenden können, während er hier auf der Erde war, doch er entschied sich dafür, seinen Hauptfokus auf die Jüngerschaft zu legen. Jüngerschaft bedeutet im Kern, Jesus nachzufolgen, von Jesus zu lernen und ihm zu gehorchen. Sie ist das Herzstück des Lebens im Reich Gottes. Jesus suchte nach Jüngern, er rief Menschen in die Jüngerschaft, er lehrte über die Kosten der Jüngerschaft, und bei der Auferstehung befahl er seinen Jüngern, hinzugehen und alle Völker der Erde zu Jüngern zu machen. Ohne Jüngerschaft wäre die Jesus-Bewegung gestorben, und ohne gute, solide, biblische Jüngerschaft wird man keine Jüngerschaftsbewegungen entstehen sehen. Aber biblische Jüngerschaft erfordert viel Arbeit und Mühe und betrifft alle Bereiche des Lebens. Je besser wir darin werden, desto mehr bauen wir die Grundlagen für eine gesunde Bewegung. Deshalb wollen wir uns heute Zeit nehmen, um über biblische Jüngerschaft zu sprechen.",
66
+ "03.006.006": "Jesus lebte eine sehr innige Form der Jüngerschaft vor, bei der die Jünger zusammen reisten, zusammen aßen und zusammen wuchsen. Sie lebten ihren Glauben gemeinsam aus. Diese Art des Lebens und des Dienstes brachte von Natur aus etwas mit sich, das wir in Bewegungen als entscheidend erachten: Rechenschaft. Wir sehen Rechenschaft im Dienst des Paulus, als er half, neue gläubige Gemeinschaften zu gründen, und bei ihnen blieb. Nach seiner Abreise besuchte er sie, schickte Briefe oder sandte sogar Mitarbeiter, um die neuen gläubigen Gemeinschaften zu ermutigen und zu belehren. Diese lebensnahe Rechenschaft hilft uns zu wachsen, hilft uns, ehrlich zu bleiben, und hilft uns, voneinander zu lernen. In Bewegungen ist es wichtig, Rechenschaft in Entdeckergruppen, in die neuen Gemeinden, in Leiternetzwerke und generell in alle Jüngerschaftsbeziehungen zu integrieren. Heute werden wir uns mit dem Thema Rechenschaft befassen, damit wir als Praktiker der Jüngerschaftsbewegung weiterhin besser werden können.",
67
+ "03.006.007": "Jesus demonstrierte in seinem Dienst oft die Kraft Gottes, da er regelmäßig Menschen heilte und Dämonen austrieb. Jesus sandte auch seine Jünger aus, um in seinem Namen dasselbe zu tun. In der Apostelgeschichte können wir sehen, wie dieses Muster auch in der frühen Gemeinde weiterhin eine bedeutende Rolle spielt. Und genau wie in der Apostelgeschichte, sind Heilungen, Wunder und Träume wichtige Bestandteile der heutigen Bewegungen. Sie führen oft dazu, Personen des Friedens zu finden, die Gemeinde zu stärken und vieles mehr. Es sollte uns nicht überraschen, dass Gott, der hinter allen Bewegungen steht, auch in unseren Bemühungen, Jünger zu machen, mächtig wirken wird. Um uns heute dabei zu helfen, in unserem Verständnis und bei der Umsetzung der Prinzipien der 'Jünger machen'-Bewegung zu wachsen, werden wir uns Wunder, Heilungen und mehr ansehen.",
68
+ "03.006.008": "Jünger Jesu waren im Laufe der Geschichte für ihren Dienst und ihr Mitgefühl bekannt, weshalb es nicht überraschen sollte, dass dies auch in den heutigen Bewegungen der Fall ist. Wenn neue Jünger sich in die Gemeinschaft einbringen und mit Dienst und Mitgefühl auf andere zugehen, kann dies zu vielen positiven Auswirkungen sowohl auf das Wachstum als auch auf die Gesundheit von Bewegungen führen. Dieser Dienst und dieses Mitgefühl sollten spontan und auf natürliche Weise entstehen, aber da Gott uns befiehlt, diese Dinge zu tun, sollten wir das nicht einfach dem Zufall überlassen. Es ist ein wichtiger Aspekt beim Aufbau einer starken und wachsenden Bewegung, Dienst und Mitgefühl bewusst und zielgerichtet in neue Entdeckergruppen, neu entstehende Gemeinschaften von Jüngern und in Schulungen zum Leiten zu integrieren. Deshalb werden wir uns heute eine Vielzahl von Bibelstellen ansehen, die diesen biblischen Fokus verdeutlichen: Sich mit Dienst und Mitgefühl in die Gemeinschaft einzubringen.",
69
+ "03.006.009": "Im Neuen Testament sehen wir oft, dass sich das Wort oder die Nachricht in einem ganzen Gebiet „ausbreitete“. In Bewegungen sehen wir auch, dass bezüglich Jesus und dem Reich Gottes oft Begeisterung in der Luft liegt. Wenn Bewegungen erst einmal begonnen haben, fangen Tausende und sogar Zehntausende an, jeden Tag von den Dingen des Reiches zu hören. Dies ist das natürliche Ergebnis, wenn alle, selbst Ungläubige, weitergeben, was sie entdecken. Aber wie wird dies zur Normalität? Die Erforschung von Bewegungen zeigt, dass es wichtig ist, dass die Menschen gleich zu Beginn ihres Glaubensweges anfangen, etwas weiterzugeben. Die Menschen müssen nicht alles wissen und verstehen! Sie müssen nur das weitergeben, was sie gerade entdecken. Dieses Prinzip des Weitergebens von Anfang an steht im krassen Gegensatz dazu, Monate oder sogar Jahre zu warten, bis eine Person beginnt, etwas weiterzugeben. Wenn das Weitergeben an andere von Beginn eines Entdeckungsprozesses an normal und natürlich wird, hilft das dabei, Jünger heranzubilden, die sich multiplizieren. Damit dies jedoch geschieht, ist es besonders wichtig, dass die ersten Katalysatoren, die ersten Entdeckergruppen und die ersten neuen Jünger diesen Lebensstil vorleben. Um uns also heute dabei zu helfen, im Verständnis und in der Umsetzung der Prinzipien von Jünger-machen-Bewegungen zu wachsen, werden wir uns eingehender mit dem Thema „Weitergeben von Anfang an“ befassen.",
70
+ "03.006.010": "Es ist schwierig, sich aufgrund der Paradigmen, die wir entwickelt haben, effektiv für die Arbeit im Reich Gottes einzusetzen. Eines der größten Hindernisse in unserem Denken ist es, Menschen oder Orte als \"hart\" zu bezeichnen und dort keine Frucht zu erwarten. Diese Denkweise kann jedoch eine Bewegung zerstören, bevor sie überhaupt eine Chance hat zu beginnen. Gott und die vielen erstaunlichen Bewegungen, die Er auf der ganzen Welt ins Leben ruft, fordern dieses negative Denken heraus. In den Bewegungen ist es sogar zu einem gängigen Motto geworden, dass wir \"Frucht an den härtesten Orten erwarten\" sollten. Wenn wir verinnerlichen, dass das Evangelium eine fantastische Botschaft ist, und Seine liebevolle Frucht besonders an \"harten Orten\" erwarten, werden wir beginnen, entsprechend zu leben. Wir werden feststellen, dass wir mehr beten und fasten und eine Transformation sowohl in unserem eigenen Leben als auch im Leben der neu entstehenden Jünger erleben. Heute werden wir versuchen, tiefer in dieses wichtige Prinzip der \"Jünger machen\"-Bewegung einzutauchen: Für Ihn zu leben und Frucht an harten Orten zu erwarten. ",
71
+ "03.006.011": "Bewegungen brechen in die Zerbrochenheit dieser Welt ein und schenken Millionen von Menschen, die einst unter dem blendenden Einfluss des Feindes lebten, Freiheit und Leben. Der Feind wird diesen Bemühungen erbarmungslos mit all seiner Macht und zeitweise mit großer Heftigkeit entgegenwirken. Daher sollten wir in Bewegungen nicht nur geistlichen Widerstand erwarten, sondern auch uns selbst und unsere neuen Glaubensgemeinschaften darauf vorbereiten. Wir müssen standhaft bleiben und den Angriffen des Bösen widerstehen. Um unser Verständnis und die Umsetzung der Prinzipien der \"Jünger machen\"-Bewegung weiter zu vertiefen, werden wir heute das Thema des geistlichen Widerstands untersuchen.",
72
+ "03.006.012": "Verfolgung ist ein Teil fast aller Bewegungen weltweit. Wenn Bewegungen wachsen, fordern sie bestehende Strukturen heraus. Regierungen, Gesellschaften, Freunde oder Familie können sich alle im Widerstand erheben. Dieser Widerstand kann Bewegungen möglicherweise stärken und reinigen, oder er kann jegliches Wachstum verlangsamen, stoppen oder sogar umkehren. Es ist entscheidend, dass Katalysatoren von Bewegungen sowie neue gläubige Gemeinschaften ein solides biblisches Verständnis zu diesem Thema haben, damit wir vorbereitet sein können, wenn Verfolgung kommt. Deshalb werden wir uns heute eine kleine Auswahl aus den vielen, vielen Passagen ansehen, die sich auf Verfolgung konzentrieren.",
73
+ "03.007.001": "Wir sind dazu berufen, sowohl Jünger Jesu zu sein als auch Jünger Jesu zu machen. Jüngerschaftsbewegungen bauen auf Jüngerschaft auf. Wir machen Menschen zu Jüngern, damit sie ihn kennen, seine Stimme hören und ihm gehorchen. Kurz gesagt, Jünger sind dazu berufen, wie Jesus zu leben. Dies ist nicht nur ein abstraktes Ziel von Bewegungen, sondern das Herzstück von Bewegungen. Es ist das, was Bewegungen gesund und wachsend macht und hält. Aber um starke und gesunde Jünger zu machen, müssen wir selbst starke und gesunde Jünger sein. Wir müssen Jesus sowohl in unserem inneren, persönlichen Leben als auch in unserem äußeren, öffentlichen Leben aktiv nachfolgen. Deshalb werden wir uns heute, um unser Wachstum als Praktiker von Jüngerschaftsbewegungen fortzusetzen, dieses Thema 'In unserem Dienst wie Jesus werden' genauer ansehen.",
74
+ "03.007.002": "Die Bibel ist voller erstaunlicher Geschichten über Gottes Volk, das außergewöhnliche Dinge tut. Jesus sagte sogar, dass seine Jünger noch größere Dinge tun würden, als er getan hat. In der Apostelgeschichte sehen wir, wie die frühe Gemeinde außergewöhnliche Dinge tut. Und in Bewegungen auf der ganzen Welt sehen wir, wie neue Jünger ihren Glauben auf außergewöhnliche, kühne, mutige und kreative Weise ausleben. Aber dieses außergewöhnliche Leben geschieht nicht aus unserer eigenen Kraft oder Weisheit; stattdessen müssen wir bei Gott Mut und Weisheit suchen. Wenn wir uns danach ausstrecken, in neuen Gebieten Bewegungen entstehen zu sehen, die Gott verherrlichen – was werden wir brauchen, um von Gott den Mut und die Weisheit zu bekommen, die nötig sind, um das Außergewöhnliche zu tun? Um uns heute dabei zu helfen, in diesem Bereich zu wachsen, werden wir uns eingehender mit dem Thema Mut und Weisheit befassen, um das Außergewöhnliche zu tun.",
75
+ "03.007.003": "Nachdem eine Person eine Einführung in Jüngerschaftsbewegungen erhalten hatte, antwortete sie: „Ich sehe, dass es beim Jünger machen nicht nur um die Arbeit geht, sondern auch um meine eigene Beziehung zu Gott. Wenn ich eine Bewegung sehen möchte, glaube ich, dass ich Gott besser kennenlernen und selbst ein besserer Jünger werden muss.“ Diese Erkenntnis, dass unsere Arbeit für Gott eng damit verbunden ist, Gott zu kennen, ist ein wichtiger Bestandteil von Bewegungen. Wie können wir jemals die Aufgabe beenden, „aus allen Nationen Jünger zu machen“, wenn wir selbst nicht eng mit Gott wandeln? Um heute unser gemeinsames Wachstum für eine bessere Umsetzung der Prinzipien von Jüngerschaftsbewegungen fortzusetzen, werden wir uns näher mit diesem Thema „Verbindung mit dem Weinstock“ befassen.",
76
+ "03.007.004": "Wir möchten allen neuen Jüngern in Bewegungen helfen zu lernen, wie sie sich mit der Schrift beschäftigen, von ihr lernen und von Gott hören können. Wir tun dies durch Entdeckerbibelstudien und andere Formen der Jüngerschaft. Wenn wir der Schrift vertrauen, sie als höchste Autorität in unserem Leben anerkennen und darauf vertrauen, dass Gottes Geist die Wahrheit offenbart, können wir eine wachsende Bewegung von starken, sich multiplizierenden Jüngern sehen. Um uns dabei zu helfen, im Verständnis und bei der Umsetzung der Prinzipien der Jünger-machen-Bewegung weiter zu wachsen, werden wir uns heute eingehender mit der Bedeutung befassen, neuen Jüngern das Studium der Schrift zu ermöglichen und Gott Raum zu geben, sich zu offenbaren.",
77
+ "03.007.005": "Die Entwicklung von Leiterschaft ist unglaublich wichtig. Tatsächlich werden Bewegungen nicht über ihre derzeitige Kapazität hinaus wachsen, wenn sie nicht regelmäßig neue Leiter hervorbringen. Das bedeutet, dass Bewegungen Dutzende, dann Hunderte und dann Tausende von neuen Leitern trainieren und einsetzen müssen. Oft muss diese Entwicklung von Leiterschaft in relativ kurzer Zeit geschehen. Ohne diese neuen Leiter wird das Wachstum zum Erliegen kommen. Darüber hinaus wäre es, selbst wenn es gewünscht wäre, nicht schnell genug, professionelle, bezahlte Geistliche zu finden und einzustellen, um mit dem Bedarf an Leiterschaft einer Bewegung Schritt zu halten. Woher kommen also diese Leiter? Sie sind unbezahlte, ehrenamtliche Leiter, Oberhäupter von Haushalten, die das Werk des Herrn aus Liebe und Gehorsam tun. Die Reproduktion von Laienleiterschaft trägt dazu bei, sicherzustellen, dass alle neuen Gruppen Leiter haben, die sich um sie kümmern, und hilft, den korrumpierenden Einfluss von Geld unter aufstrebenden Leitern zu begrenzen. Um uns dabei zu helfen, im Verständnis und bei der Umsetzung der Prinzipien der Jünger-machen-Bewegung weiter zu wachsen, werden wir uns heute eingehender mit der Laienleiterschaft befassen.",
78
+ "03.007.006": "Gott kann Türen auf eine Weise öffnen, die wir niemals erwarten würden. In Bewegungen sehen wir, dass wir beten, erwarten und danach Ausschau halten sollten, dass Gott außergewöhnliche Gelegenheiten für sein Reich schenkt. Oft können Gelegenheiten entweder einmalige Ereignisse oder längere Zeitfenster sein, die zu einem einzigartigen Zugang zu Menschen, Gemeinschaften oder mehr führen. Wichtig ist, dass wir erwartungsvoll für diese Gelegenheiten beten, uns auf sie vorbereiten und dann mutig voranschreiten, wenn sie sich bieten. Heute werden wir uns mit dem Thema der außergewöhnlichen Gelegenheiten befassen.",
79
+ "03.007.007": "Der Apostel Johannes schreibt, dass Gott Liebe ist. Paulus schreibt, dass wir ohne Liebe nur ein dröhnender Gong sind. Jesus sagte, dass das größte Gebot darin besteht, Gott zu lieben, und das zweite, andere zu lieben. Es überrascht nicht, dass wir feststellen, dass Liebe ein wesentliches Element von Bewegungen ist. Diese Liebe muss sich sowohl nach innen zwischen den neuen Jüngern als auch nach außen gegenüber der umliegenden Gemeinschaft zeigen. Wenn Jünger in der Lage sind, Liebe gut auszudrücken, fördert das fast immer das Wachstum einer Bewegung. Wenn neue Jünger Schwierigkeiten haben, Liebe zu zeigen, werden nicht nur bestehende Gruppen darunter leiden, sondern auch das Wachstum neuer Gruppen wird negativ beeinflusst. Um uns heute dabei zu helfen, im Verständnis und in der Umsetzung der Prinzipien der 'Jünger machen'-Bewegung zu wachsen, werden wir uns mit der Liebe befassen.",
80
+ "03.007.008": "Wenn wir Bewegungen weltweit studieren, stellen wir fest, dass ein hohes Maß an Vertrauen, Erwartung und Abhängigkeit vom Heiligen Geist besteht, um zu überführen, zu leiten, zu offenbaren, zu trösten und vieles mehr. Zu lernen, mit dem Heiligen Geist zusammenzuarbeiten, kann sowohl in unserem Leben als auch in unseren Diensten eine gewaltige Kraft sein. Für manche kann dies anfangs jedoch unangenehm und ungewohnt sein. Heute werden wir uns eine Vielzahl von Bibelstellen ansehen, die diesen biblischen Fokus auf das Vertrauen in das Wirken des Heiligen Geistes zeigen.",
81
+ "03.007.009": "Alle Menschen teilen eine Liebe zu Geschichten, und Gott weiß das. Die Bibel ist voll von Geschichten von Gott, und Jesus lehrte oft mit Geschichten und Gleichnissen. Dennoch zögern moderne Gläubige trotz dieser Realitäten manchmal, das Geschichtenerzählen in unserer Evangelisation oder Jüngerschaft zu nutzen. In Bewegungen sehen wir jedoch, dass Jünger Mündlichkeit und das Geschichtenerzählen oft effektiv nutzen, um dabei zu helfen, Wachstum, Lernen und Teilen zu katalysieren. Um uns heute dabei zu helfen, im Verständnis und in der Umsetzung von Prinzipien der Bewegung zum Jünger machen zu wachsen, werden wir uns das Geschichtenerzählen genauer ansehen.",
82
+ "03.007.010": "In einer vorherigen Lektion haben wir uns den Gehorsam angesehen, und heute werden wir ihn uns noch einmal ansehen. Warum? Weil Jesus und der Rest der Schrift ihn so sehr betonen. Jesus verband Gehorsam und Jüngerschaft stark miteinander. Er sagte, dass diejenigen, die ihn lieben, ihm gehorchen werden. Er sagte, dass es die weise Person ist, die seine Worte hört und in die Praxis umsetzt. Er sandte seine Jünger aus, gebot ihnen, alle Nationen zu Jüngern zu machen und sie zu lehren, allem zu gehorchen, was er geboten hatte. Es überrascht nicht, dass wir, wenn wir Bewegungen studieren, feststellen, dass die Lehre des Gehorsams gegenüber Gott und seiner Schrift ein wesentliches Element dafür ist, starke, gesunde Jünger zu machen, die sich multiplizieren. Um heute tiefer in dieses wichtige Prinzip der Bewegung zum Jünger machen hineinzuwachsen, werden wir das Thema Gehorsam untersuchen.",
83
+ "03.007.011": "Man hat keine Bewegung zum „Jünger“ machen ohne „Jünger“. Jesus hat Jünger gemacht! Jesus befahl uns, hinzugehen und Jünger zu machen. In der Bibel war einer der häufigsten Namen für die frühe Gemeinschaft der Nachfolger Jesu \"Jünger\". Es wäre schwierig, die Lehren Jesu zu verstehen, ohne seinen Wunsch zu verstehen, gesunde Jünger hervorzubringen. Es wäre schwierig, die Gebote Jesu zu erfüllen, wenn jemand darüber verwirrt ist, was ein Jünger ist. Daher werden wir uns in dieser Lektion genauer ansehen, was es bedeutet, ein biblischer Jünger zu sein. ",
84
+ "03.007.012": "Oft brauchen Praktiker Jahre, um sich mit der Komplexität von Paulus' Beispiel, \"allen Menschen alles zu werden\", auseinanderzusetzen. Wir sollten uns jedoch nicht vom Ausmaß und der Komplexität dieses Themas des \"kulturellen Engagements\" abschrecken lassen! Praktiker von Bewegungen müssen strategisch und bewusst über die Worte nachdenken, die wir benutzen, das Essen, das wir zu uns nehmen, die Kleidung, die wir tragen, wie wir Feiertage feiern, wie wir mit Menschen umgehen und vieles mehr. Ebenso brauchen neue Entdeckergruppen und neue Glaubensgemeinschaften den Raum und die Freiheit, sich biblisch mit diesen kulturellen Fragen auseinanderzusetzen, ohne dass ihnen Außenstehende kulturelle Präferenzen aufzwingen. Deshalb werden wir uns heute eine kleine Auswahl der vielen, vielen Bibelstellen ansehen, die sich auf die Bedeutung des kulturellen Engagements konzentrieren.",
85
+ "eq": "Die Bibel enthält viele Stellen darüber, wie wir weisen Rat einholen, ehrlich sind, Rechenschaft ablegen, voneinander lernen, planen und weise handeln. Nun, da wir diese neue Reihe von Geschichten abgeschlossen haben, ist es Zeit, innezuhalten, Bilanz zu ziehen und zu planen. Wie willst du weiter vorangehen? In welchen Bereichen musst du dich noch weiterentwickeln? Gibt es Bereiche, in denen du „feststeckst“ und mehr Training brauchst? Nehmen wir uns einen Moment Zeit, um die folgenden Fragen zu beantworten, die dir und deiner Gruppe helfen können, nachzudenken und zu planen.\n\n1. Wie gut hast du in den letzten Monaten deine „Ich werde…“-Vorsätze umgesetzt? Bist du ein Hörer und Täter des Wortes gewesen? Wie hat es sich auf deinen Dienst und auf dich persönlich ausgewirkt, dass du ein Hörer und Täter des Wortes bist?\n\n2. Wir haben regelmäßig ein Schaubild mit einem Schiff und Segeln verwendet, um die 7 Praktiken eines Jüngers, der sich multipliziert, darzustellen. Nehmen wir uns jetzt eine Minute Zeit, um dieses Schaubild noch einmal aus dem Gedächtnis zu zeichnen.\n\n3. Jeder Bestandteil des Schaubilds mit Schiff und Segeln steht für einen Durchbruch auf eine neue Ebene und zugleich für einen Bereich, in dem man feststecken kann. Wo hast du das Gefühl, in den letzten Monaten den größten Durchbruch erlebt zu haben? Wo hast du das Gefühl, festzustecken?\n\n4. Gebet ist der zentrale Treibstoff für Bewegungen. Wie gut hast du bisher außergewöhnliches Gebet praktiziert?\n\n5. Hinter Bewegungen steht immer eine große Vision, deren Maßstab Gott ist. Diese Vision beeinflusst alles, was wir tun. Wie würdest du das Wachstum deiner Vision anhand all der Bibelstellen beurteilen, die wir uns angesehen haben? Steht dein Handeln im Einklang mit dieser Vision? Wenn ja, sehr gut! Mach weiter so (Gal 6:9). Wenn nicht, was muss sich ändern?\n\n6. Nicht jeder ist bereit, auf das Evangelium einzugehen, und nicht jeder ist eine Person des Friedens. Deshalb filtern wir, um herauszufinden, in wen wir investieren sollen. Wie gelingt es dir, zu filtern und zielgerichtet zu leben? Was hat gut funktioniert? Worin brauchst du noch mehr Übung? Welche Werkzeuge zum Filtern hast du ausprobiert? Brauchst du weitere Werkzeuge zum Filtern?\n\n7. Wenn du jemanden findest, der eine Person des Friedens sein könnte, möchtest du dieser Person helfen, in ihrem oikos eine Entdeckergruppe zu starten. Wie gut gelingt dir der Übergang vom Filtern dazu, Menschen einzuladen, ein Entdeckerbibelstudium zu starten?\n\n8. Wenn du jemanden findest, der sich für das Reich Gottes interessiert und mehr darüber lernen möchte, musst du diese Person gezielt coachen, damit sie die Menschen in ihrem Netzwerk wirksam erreicht. Wie gelingt dir dieses Coaching?\n\n9. Sobald eine neue Entdeckergruppe gestartet ist, musst du die potenzielle Person des Friedens wirksam coachen, damit sie den Entdeckungsprozess mit ihrer Gruppe gut moderiert, ein „Fragesteller“ und kein Lehrer ist, einer einfachen Reihe von Fragen folgt und sich auf den Text konzentriert. Wie gelingt dir das in diesen Bereichen?\n\n10. Arbeiten die Gruppen die Reihen zu den Grundlagen von Anfang an durch, ohne etwas zu überspringen? Wenn Gruppen Themen studieren, suchen sie dann möglichst bald nach Möglichkeiten, zu den Grundlagenlektionen überzugehen und diese durchzuarbeiten?\n\n11. Die Entwicklung von Leitern ist unverzichtbar, damit eine Bewegung entstehen kann. Machst du in Entdeckergruppen potenzielle Personen des Friedens gezielt zu Jüngern und förderst dabei ihre Fähigkeit zu leiten?\n\n12. Was ist nach all diesen Überlegungen der richtige Weg nach vorn – für dich persönlich und für euch als Gruppe?"
86
+ }
87
+ },
46
88
  "eng": {
47
89
  "introduction": "Introduction",
48
90
  "introductions": {
@@ -0,0 +1,117 @@
1
+ import { type ErrorResponse as ResendErrorResponse } from 'resend';
2
+ import { type DripEmailId, type DripLanguageId, type DripSequenceId } from '../types/resend';
3
+ /**
4
+ * Rate limits and server errors. Network failures (no status code) aren't
5
+ * retried: the request may have landed, and repeating a create or an event
6
+ * send could start an automation twice.
7
+ */
8
+ export declare function isRetryable(error: Pick<ResendErrorResponse, 'statusCode'>): boolean;
9
+ /** From: https://resend.com/audience/topics */
10
+ export declare enum Topics {
11
+ Newsletter = "83d566a5-a42d-47e9-85e7-b43fb5b10298"
12
+ }
13
+ export declare enum Segments {
14
+ /**
15
+ * App donors who asked for the thank-you sequence (plus donors carried over
16
+ * from AC).
17
+ */
18
+ Donor = "74ee171a-f00b-4a10-94b6-ef8508635ee1",
19
+ /** Everyone who created an app account (enrolled in the onboarding drip). */
20
+ AppAccounts = "07e0f635-7e85-4d96-9c31-12a7e34f6869"
21
+ }
22
+ /** From: https://resend.com/automations/events */
23
+ export declare enum Events {
24
+ AppDonorSequence = "donor_thank_you_sequence",
25
+ NewsletterWelcome = "newsletter_welcome"
26
+ }
27
+ /** From: https://resend.com/audience/properties */
28
+ export declare enum Properties {
29
+ /** Set by the donor automation when it runs, so it runs once per contact. */
30
+ AppDonorSequence = "donor_thank_you_sequence",
31
+ /**
32
+ * Set by the welcome automation when it runs, so it runs once per contact.
33
+ */
34
+ NewsletterWelcome = "newsletter_welcome",
35
+ /** The onboarding drip a contact was enrolled in, so it runs once each. */
36
+ NewAccountSequence = "drip_sequence",
37
+ /** The language a contact's onboarding drip was sent in. */
38
+ Language = "language"
39
+ }
40
+ /**
41
+ * Adds a language id to a base id to create a unique drip identifier. A
42
+ * sequence's id gives its trigger event (and automation) name; an email's id
43
+ * gives its template alias.
44
+ */
45
+ export declare function dripId(baseId: DripSequenceId | DripEmailId, languageId: DripLanguageId): string;
46
+ export declare function isDripLanguage(value: string): value is DripLanguageId;
47
+ /** Splits a single "name" form field into first and last name. */
48
+ export declare function splitName(name?: string): {
49
+ firstName?: string;
50
+ lastName?: string;
51
+ };
52
+ /**
53
+ * Returns the existing contact for an email, or creates one. Existing contacts
54
+ * are returned untouched, so their newsletter choice and account-wide
55
+ * unsubscribe are never overridden here. New contacts start off the
56
+ * newsletter.
57
+ */
58
+ export declare function upsertResendContact({ token, email, name, }: {
59
+ token: string;
60
+ email: string;
61
+ name?: string;
62
+ }): Promise<{
63
+ id: string;
64
+ created: boolean;
65
+ }>;
66
+ /** Every contact's email, lowercased. Read-only. */
67
+ export declare function listContactEmails(token: string): Promise<Set<string>>;
68
+ /**
69
+ * Deletes the contact for an email, taking its topic and segment memberships
70
+ * with it. A missing contact is already deleted, so it isn't an error.
71
+ */
72
+ export declare function deleteResendContact({ token, email, }: {
73
+ token: string;
74
+ email: string;
75
+ }): Promise<void>;
76
+ /**
77
+ * An explicit newsletter signup. This is fresh consent, so it opts the contact
78
+ * back in even if they opted out of the newsletter or unsubscribed from
79
+ * everything before. Bounce suppressions still apply. Also triggers the welcome
80
+ * email, which the automation sends only once per contact.
81
+ */
82
+ export declare function subscribeToNewsletter({ token, email, name, }: {
83
+ token: string;
84
+ email: string;
85
+ name?: string;
86
+ }): Promise<void>;
87
+ /**
88
+ * Starts the donor thank-you sequence for a donor who asked for it and adds
89
+ * them to the Donor segment. Their newsletter setting is left alone. Donors who
90
+ * don't ask aren't added to Resend at all.
91
+ */
92
+ export declare function enrollInDonorSequence({ token, email, name, }: {
93
+ token: string;
94
+ email: string;
95
+ name?: string;
96
+ }): Promise<void>;
97
+ export type DripEnrollment = {
98
+ status: 'enrolled';
99
+ } | {
100
+ status: 'already_enrolled';
101
+ sequence: string;
102
+ };
103
+ export interface EnrollInDripSequenceParams {
104
+ token: string;
105
+ email: string;
106
+ firstName?: string;
107
+ sequence: DripSequenceId;
108
+ languageId: DripLanguageId;
109
+ }
110
+ /**
111
+ * Enrolls an app user in a localized drip sequence: adds them to the App
112
+ * Accounts segment and fires the event that starts that sequence and
113
+ * language's automation (provisioned by waha-website's
114
+ * `scripts/emailDrip/push.ts`). A contact already enrolled in any sequence is
115
+ * left alone, so each person gets at most one drip.
116
+ */
117
+ export declare function enrollInDripSequence({ token, email, firstName, sequence, languageId, }: EnrollInDripSequenceParams): Promise<DripEnrollment>;
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Properties = exports.Events = exports.Segments = exports.Topics = void 0;
4
+ exports.isRetryable = isRetryable;
5
+ exports.dripId = dripId;
6
+ exports.isDripLanguage = isDripLanguage;
7
+ exports.splitName = splitName;
8
+ exports.upsertResendContact = upsertResendContact;
9
+ exports.listContactEmails = listContactEmails;
10
+ exports.deleteResendContact = deleteResendContact;
11
+ exports.subscribeToNewsletter = subscribeToNewsletter;
12
+ exports.enrollInDonorSequence = enrollInDonorSequence;
13
+ exports.enrollInDripSequence = enrollInDripSequence;
14
+ const resend_1 = require("resend");
15
+ const resend_2 = require("../types/resend");
16
+ const utils_1 = require("./utils");
17
+ /**
18
+ * Rate limits and server errors. Network failures (no status code) aren't
19
+ * retried: the request may have landed, and repeating a create or an event
20
+ * send could start an automation twice.
21
+ */
22
+ function isRetryable(error) {
23
+ const status = error.statusCode;
24
+ return status !== null && (status === 429 || status >= 500);
25
+ }
26
+ /** Makes a Resend call, retrying transient failures twice with backoff. */
27
+ async function withRetry(call) {
28
+ for (let attempt = 1;; attempt++) {
29
+ const result = await call();
30
+ if (!result.error || !isRetryable(result.error) || attempt === 3)
31
+ return result;
32
+ await new Promise((resolve) => setTimeout(resolve, attempt * 500));
33
+ }
34
+ }
35
+ /**
36
+ * The Resend SDK resolves to `{ data, error }` instead of throwing, so an
37
+ * unchecked call fails silently and the next step gets `undefined`.
38
+ */
39
+ function verify(result, context) {
40
+ if (result.error)
41
+ throw new Error(`${context}: ${result.error.message}`);
42
+ if (!result.data)
43
+ throw new Error(`${context}: Resend returned no data.`);
44
+ return result.data;
45
+ }
46
+ /** From: https://resend.com/audience/topics */
47
+ var Topics;
48
+ (function (Topics) {
49
+ Topics["Newsletter"] = "83d566a5-a42d-47e9-85e7-b43fb5b10298";
50
+ })(Topics || (exports.Topics = Topics = {}));
51
+ /* From: https://resend.com/audience/segments */
52
+ var Segments;
53
+ (function (Segments) {
54
+ /**
55
+ * App donors who asked for the thank-you sequence (plus donors carried over
56
+ * from AC).
57
+ */
58
+ Segments["Donor"] = "74ee171a-f00b-4a10-94b6-ef8508635ee1";
59
+ /** Everyone who created an app account (enrolled in the onboarding drip). */
60
+ Segments["AppAccounts"] = "07e0f635-7e85-4d96-9c31-12a7e34f6869";
61
+ })(Segments || (exports.Segments = Segments = {}));
62
+ /** From: https://resend.com/automations/events */
63
+ var Events;
64
+ (function (Events) {
65
+ Events["AppDonorSequence"] = "donor_thank_you_sequence";
66
+ Events["NewsletterWelcome"] = "newsletter_welcome";
67
+ // Drip sequence events are per language and thus generated dynamically, so
68
+ // they aren't in this enum.
69
+ })(Events || (exports.Events = Events = {}));
70
+ /** From: https://resend.com/audience/properties */
71
+ var Properties;
72
+ (function (Properties) {
73
+ /** Set by the donor automation when it runs, so it runs once per contact. */
74
+ Properties["AppDonorSequence"] = "donor_thank_you_sequence";
75
+ /**
76
+ * Set by the welcome automation when it runs, so it runs once per contact.
77
+ */
78
+ Properties["NewsletterWelcome"] = "newsletter_welcome";
79
+ /** The onboarding drip a contact was enrolled in, so it runs once each. */
80
+ Properties["NewAccountSequence"] = "drip_sequence";
81
+ /** The language a contact's onboarding drip was sent in. */
82
+ Properties["Language"] = "language";
83
+ })(Properties || (exports.Properties = Properties = {}));
84
+ /**
85
+ * Adds a language id to a base id to create a unique drip identifier. A
86
+ * sequence's id gives its trigger event (and automation) name; an email's id
87
+ * gives its template alias.
88
+ */
89
+ function dripId(baseId, languageId) {
90
+ return `${baseId}_${languageId}`;
91
+ }
92
+ function isDripLanguage(value) {
93
+ return resend_2.DRIP_LANGUAGES.includes(value);
94
+ }
95
+ /** Splits a single "name" form field into first and last name. */
96
+ function splitName(name) {
97
+ const [firstName, ...rest] = (name ?? '').trim().split(/\s+/);
98
+ return {
99
+ firstName: firstName || undefined,
100
+ lastName: rest.join(' ') || undefined,
101
+ };
102
+ }
103
+ /**
104
+ * Returns the existing contact for an email, or creates one. Existing contacts
105
+ * are returned untouched, so their newsletter choice and account-wide
106
+ * unsubscribe are never overridden here. New contacts start off the
107
+ * newsletter.
108
+ */
109
+ async function upsertResendContact({ token, email, name, }) {
110
+ const resend = new resend_1.Resend(token);
111
+ const normalized = (0, utils_1.lower)(email);
112
+ const existing = await withRetry(() => resend.contacts.get({ email: normalized }));
113
+ if (existing.data)
114
+ return { id: existing.data.id, created: false };
115
+ if (existing.error?.name !== 'not_found')
116
+ verify(existing, `Looking up contact ${normalized}`);
117
+ const created = verify(await withRetry(() => resend.contacts.create({ email: normalized, ...splitName(name) })), `Creating contact ${normalized}`);
118
+ return { id: created.id, created: true };
119
+ }
120
+ /** Every contact's email, lowercased. Read-only. */
121
+ async function listContactEmails(token) {
122
+ const resend = new resend_1.Resend(token);
123
+ const emails = new Set();
124
+ for (let after;;) {
125
+ const page = verify(await withRetry(() => resend.contacts.list({ limit: 100, ...(after && { after }) })), `Listing contacts after ${after ?? 'the start'}`);
126
+ for (const contact of page.data)
127
+ emails.add((0, utils_1.lower)(contact.email));
128
+ const last = page.data[page.data.length - 1];
129
+ if (!page.has_more || !last)
130
+ return emails;
131
+ after = last.id;
132
+ }
133
+ }
134
+ /**
135
+ * Deletes the contact for an email, taking its topic and segment memberships
136
+ * with it. A missing contact is already deleted, so it isn't an error.
137
+ */
138
+ async function deleteResendContact({ token, email, }) {
139
+ const resend = new resend_1.Resend(token);
140
+ const normalized = (0, utils_1.lower)(email);
141
+ const result = await withRetry(() => resend.contacts.remove({ email: normalized }));
142
+ if (result.error?.name === 'not_found')
143
+ return;
144
+ verify(result, `Deleting contact ${normalized}`);
145
+ }
146
+ /**
147
+ * An explicit newsletter signup. This is fresh consent, so it opts the contact
148
+ * back in even if they opted out of the newsletter or unsubscribed from
149
+ * everything before. Bounce suppressions still apply. Also triggers the welcome
150
+ * email, which the automation sends only once per contact.
151
+ */
152
+ async function subscribeToNewsletter({ token, email, name, }) {
153
+ const resend = new resend_1.Resend(token);
154
+ // Upsert the contact.
155
+ const contact = await upsertResendContact({ token, email, name });
156
+ // If contact exists, resubscribe them in case they previously unsubscribed.
157
+ if (!contact.created)
158
+ verify(await withRetry(() => resend.contacts.update({ id: contact.id, unsubscribed: false })), `Resubscribing contact ${contact.id}`);
159
+ // Add them to the newsletter topic.
160
+ verify(await withRetry(() => resend.contacts.topics.update({
161
+ id: contact.id,
162
+ topics: [{ id: Topics.Newsletter, subscription: 'opt_in' }],
163
+ })), `Subscribing contact ${contact.id} to the newsletter`);
164
+ // Send them a welcome email.
165
+ verify(await withRetry(() => resend.events.send({
166
+ event: Events.NewsletterWelcome,
167
+ contactId: contact.id,
168
+ })), `Sending ${Events.NewsletterWelcome} for contact ${contact.id}`);
169
+ }
170
+ /** Adds a contact to a segment. Adding someone already in it is harmless. */
171
+ async function addToSegment(resend, contactId, segmentId) {
172
+ verify(await withRetry(() => resend.contacts.segments.add({ contactId, segmentId })), `Adding contact ${contactId} to segment ${segmentId}`);
173
+ }
174
+ /**
175
+ * Starts the donor thank-you sequence for a donor who asked for it and adds
176
+ * them to the Donor segment. Their newsletter setting is left alone. Donors who
177
+ * don't ask aren't added to Resend at all.
178
+ */
179
+ async function enrollInDonorSequence({ token, email, name, }) {
180
+ const resend = new resend_1.Resend(token);
181
+ const { id } = await upsertResendContact({ token, email, name });
182
+ await addToSegment(resend, id, Segments.Donor);
183
+ verify(await withRetry(() => resend.events.send({
184
+ event: Events.AppDonorSequence,
185
+ contactId: id,
186
+ })), `Sending ${Events.AppDonorSequence} for contact ${id}`);
187
+ }
188
+ /**
189
+ * Enrolls an app user in a localized drip sequence: adds them to the App
190
+ * Accounts segment and fires the event that starts that sequence and
191
+ * language's automation (provisioned by waha-website's
192
+ * `scripts/emailDrip/push.ts`). A contact already enrolled in any sequence is
193
+ * left alone, so each person gets at most one drip.
194
+ */
195
+ async function enrollInDripSequence({ token, email, firstName, sequence, languageId, }) {
196
+ const resend = new resend_1.Resend(token);
197
+ const normalized = (0, utils_1.lower)(email);
198
+ const existing = await withRetry(() => resend.contacts.get({ email: normalized }));
199
+ if (existing.error?.name !== 'not_found' && !existing.data)
200
+ verify(existing, `Looking up contact ${normalized}`);
201
+ const contact = existing.data;
202
+ const enrolledIn = contact?.properties?.[Properties.NewAccountSequence]?.value;
203
+ if (enrolledIn)
204
+ return { status: 'already_enrolled', sequence: `${enrolledIn}` };
205
+ /*
206
+ * The sequence property is deliberately not set yet. Marking a contact
207
+ * enrolled before the event below fires would strand them if it failed: the
208
+ * check above would skip them forever though their drip never started.
209
+ */
210
+ const properties = { [Properties.Language]: languageId };
211
+ const id = contact
212
+ ? verify(await withRetry(() => resend.contacts.update({ id: contact.id, firstName, properties })), `Updating contact ${contact.id}`).id
213
+ : verify(await withRetry(() => resend.contacts.create({ email: normalized, firstName, properties })), `Creating contact ${normalized}`).id;
214
+ await addToSegment(resend, id, Segments.AppAccounts);
215
+ const event = dripId(sequence, languageId);
216
+ verify(await withRetry(() => resend.events.send({ event, contactId: id })), `Sending ${event} for contact ${id}`);
217
+ /*
218
+ * The drip has started, so a failure here only weakens the guard against a
219
+ * second enrollment. It's logged rather than failing a request that
220
+ * otherwise succeeded.
221
+ */
222
+ const marked = await withRetry(() => resend.contacts.update({
223
+ id,
224
+ properties: { [Properties.NewAccountSequence]: sequence },
225
+ }));
226
+ if (marked.error)
227
+ console.error(`Marking contact ${id} enrolled failed:`, marked.error);
228
+ return { status: 'enrolled' };
229
+ }
@@ -7,3 +7,4 @@ export declare function getErrorInfo(e: unknown): {
7
7
  code?: string;
8
8
  message?: string;
9
9
  };
10
+ export declare function lower(string: string): string;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.dirname = exports.first = exports.basename = exports.join = void 0;
4
4
  exports.getErrorInfo = getErrorInfo;
5
+ exports.lower = lower;
5
6
  const join = (...parts) => parts.join('/').replace(/\/+/g, '/');
6
7
  exports.join = join;
7
8
  const basename = (p) => p.slice(p.lastIndexOf('/') + 1);
@@ -21,3 +22,6 @@ function getErrorInfo(e) {
21
22
  const message = e instanceof Error ? e.message : undefined;
22
23
  return { code, message };
23
24
  }
25
+ function lower(string) {
26
+ return string.trim().toLowerCase();
27
+ }
@@ -18,11 +18,7 @@ export declare const SubscribeDripBody: z.ZodObject<{
18
18
  drip_believer: "drip_believer";
19
19
  drip_seeker: "drip_seeker";
20
20
  }>;
21
- languageId: z.ZodEnum<{
22
- eng: "eng";
23
- ara: "ara";
24
- swe: "swe";
25
- }>;
21
+ languageId: z.ZodString;
26
22
  firstName: z.ZodOptional<z.ZodString>;
27
23
  }, z.core.$strip>;
28
24
  export type SubscribeDripBody = z.infer<typeof SubscribeDripBody>;
@@ -12,6 +12,6 @@ exports.DRIP_LANGUAGES = ['eng', 'ara', 'swe'];
12
12
  exports.DripLanguageId = zod_1.default.enum(exports.DRIP_LANGUAGES);
13
13
  exports.SubscribeDripBody = zod_1.default.object({
14
14
  sequence: exports.DripSequenceId,
15
- languageId: exports.DripLanguageId,
15
+ languageId: zod_1.default.string(),
16
16
  firstName: zod_1.default.string().optional(),
17
17
  });
@@ -55,6 +55,12 @@ export declare const LanguageInfoStatuses: z.ZodObject<{
55
55
  testing: "testing";
56
56
  launched: "launched";
57
57
  }>;
58
+ drip: z.ZodOptional<z.ZodEnum<{
59
+ notStarted: "notStarted";
60
+ inProgress: "inProgress";
61
+ testing: "testing";
62
+ launched: "launched";
63
+ }>>;
58
64
  dmCourse: z.ZodEnum<{
59
65
  notStarted: "notStarted";
60
66
  inProgress: "inProgress";
@@ -0,0 +1,58 @@
1
+ import z from 'zod';
2
+ import type { Status } from '../data/languages/languages.zod';
3
+ /** The two onboarding drip audiences a new signup can be enrolled in. */
4
+ export declare const DripSequenceId: z.ZodEnum<{
5
+ drip_believer: "drip_believer";
6
+ drip_seeker: "drip_seeker";
7
+ }>;
8
+ export type DripSequenceId = z.infer<typeof DripSequenceId>;
9
+ /** Ids of languages whose `status.drip` in languages.json is one of these. */
10
+ export declare function dripLanguagesWithStatus(...statuses: Status[]): string[];
11
+ /**
12
+ * Languages the onboarding drip is live in: provisioned in Resend and enrolled
13
+ * into on signup. Driven by `status.drip` in languages.json.
14
+ */
15
+ export declare const DRIP_LANGUAGES: string[];
16
+ export declare const DripLanguageId: z.ZodString;
17
+ export type DripLanguageId = z.infer<typeof DripLanguageId>;
18
+ /**
19
+ * A single drip email's id: its sequence's id plus its position. The same as
20
+ * the file name for the email's source .md file.
21
+ */
22
+ export type DripEmailId = `${DripSequenceId}_${number}`;
23
+ /** `POST /api/submit-subscribe` (form data): an explicit newsletter signup. */
24
+ export declare const NewsletterSignupBody: z.ZodObject<{
25
+ email: z.ZodPipe<z.ZodString, z.ZodEmail>;
26
+ name: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>;
28
+ export type NewsletterSignupBody = z.infer<typeof NewsletterSignupBody>;
29
+ /** `POST /api/submit-contact` (form data): the website's contact form. */
30
+ export declare const ContactFormBody: z.ZodObject<{
31
+ email: z.ZodPipe<z.ZodString, z.ZodEmail>;
32
+ name: z.ZodString;
33
+ message: z.ZodString;
34
+ }, z.core.$strip>;
35
+ export type ContactFormBody = z.infer<typeof ContactFormBody>;
36
+ /**
37
+ * `POST /api/add-to-donation-sequence` (JSON): starts the donor thank-you
38
+ * drip.
39
+ */
40
+ export declare const DonorSequenceBody: z.ZodObject<{
41
+ email: z.ZodPipe<z.ZodString, z.ZodEmail>;
42
+ name: z.ZodOptional<z.ZodString>;
43
+ }, z.core.$strip>;
44
+ export type DonorSequenceBody = z.infer<typeof DonorSequenceBody>;
45
+ /**
46
+ * `POST /api/subscribe-drip` (JSON, Firebase ID token). Any language is
47
+ * accepted so callers don't need to know which ones have a drip; unsupported
48
+ * ones are a no-op.
49
+ */
50
+ export declare const SubscribeDripBody: z.ZodObject<{
51
+ sequence: z.ZodEnum<{
52
+ drip_believer: "drip_believer";
53
+ drip_seeker: "drip_seeker";
54
+ }>;
55
+ languageId: z.ZodString;
56
+ firstName: z.ZodOptional<z.ZodString>;
57
+ }, z.core.$strip>;
58
+ export type SubscribeDripBody = z.infer<typeof SubscribeDripBody>;
@@ -0,0 +1,62 @@
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.SubscribeDripBody = exports.DonorSequenceBody = exports.ContactFormBody = exports.NewsletterSignupBody = exports.DripLanguageId = exports.DRIP_LANGUAGES = exports.DripSequenceId = void 0;
7
+ exports.dripLanguagesWithStatus = dripLanguagesWithStatus;
8
+ const zod_1 = __importDefault(require("zod"));
9
+ const languages_1 = require("../data/languages");
10
+ /** The two onboarding drip audiences a new signup can be enrolled in. */
11
+ exports.DripSequenceId = zod_1.default.enum(['drip_believer', 'drip_seeker']);
12
+ /** Ids of languages whose `status.drip` in languages.json is one of these. */
13
+ function dripLanguagesWithStatus(...statuses) {
14
+ return languages_1.languages
15
+ .filter((language) => statuses.includes(language.status.drip ?? 'notStarted'))
16
+ .map((language) => language.languageId);
17
+ }
18
+ /**
19
+ * Languages the onboarding drip is live in: provisioned in Resend and enrolled
20
+ * into on signup. Driven by `status.drip` in languages.json.
21
+ */
22
+ exports.DRIP_LANGUAGES = dripLanguagesWithStatus('launched');
23
+ exports.DripLanguageId = zod_1.default
24
+ .string()
25
+ .refine((id) => exports.DRIP_LANGUAGES.includes(id), 'Not a launched drip language.');
26
+ /*
27
+ * Request bodies for the website endpoints that write to Resend. The website
28
+ * parses incoming requests with these, and the app types what it sends with
29
+ * them. Auth (a reCAPTCHA token or a Firebase ID token) isn't part of the body
30
+ * schemas; each endpoint checks it separately.
31
+ */
32
+ const Email = zod_1.default.string().trim().pipe(zod_1.default.email());
33
+ const Name = zod_1.default.string().trim().max(200);
34
+ /** `POST /api/submit-subscribe` (form data): an explicit newsletter signup. */
35
+ exports.NewsletterSignupBody = zod_1.default.object({
36
+ email: Email,
37
+ name: Name.optional(),
38
+ });
39
+ /** `POST /api/submit-contact` (form data): the website's contact form. */
40
+ exports.ContactFormBody = zod_1.default.object({
41
+ email: Email,
42
+ name: Name,
43
+ message: zod_1.default.string().trim().min(1).max(5000),
44
+ });
45
+ /**
46
+ * `POST /api/add-to-donation-sequence` (JSON): starts the donor thank-you
47
+ * drip.
48
+ */
49
+ exports.DonorSequenceBody = zod_1.default.object({
50
+ email: Email,
51
+ name: Name.optional(),
52
+ });
53
+ /**
54
+ * `POST /api/subscribe-drip` (JSON, Firebase ID token). Any language is
55
+ * accepted so callers don't need to know which ones have a drip; unsupported
56
+ * ones are a no-op.
57
+ */
58
+ exports.SubscribeDripBody = zod_1.default.object({
59
+ sequence: exports.DripSequenceId,
60
+ languageId: zod_1.default.string(),
61
+ firstName: Name.optional(),
62
+ });
@@ -17,7 +17,6 @@ export declare const SharedUserReduxState: z.ZodObject<{
17
17
  }, z.core.$strip>>;
18
18
  phoneNumber: z.ZodOptional<z.ZodString>;
19
19
  isInAGroup: z.ZodOptional<z.ZodBoolean>;
20
- isSubscribedToEmailUpdates: z.ZodOptional<z.ZodBoolean>;
21
20
  hasDonated: z.ZodOptional<z.ZodBoolean>;
22
21
  }, z.core.$strip>;
23
22
  /**
@@ -52,7 +51,6 @@ export declare const UserReduxState: z.ZodObject<{
52
51
  }, z.core.$strip>>;
53
52
  phoneNumber: z.ZodOptional<z.ZodString>;
54
53
  isInAGroup: z.ZodOptional<z.ZodBoolean>;
55
- isSubscribedToEmailUpdates: z.ZodOptional<z.ZodBoolean>;
56
54
  hasDonated: z.ZodOptional<z.ZodBoolean>;
57
55
  }, z.core.$strip>;
58
56
  export type UserReduxState = z.infer<typeof UserReduxState>;
@@ -128,7 +126,6 @@ export declare const WahaUser: z.ZodObject<{
128
126
  }, z.core.$strip>>;
129
127
  phoneNumber: z.ZodOptional<z.ZodString>;
130
128
  isInAGroup: z.ZodOptional<z.ZodBoolean>;
131
- isSubscribedToEmailUpdates: z.ZodOptional<z.ZodBoolean>;
132
129
  hasDonated: z.ZodOptional<z.ZodBoolean>;
133
130
  wahaUserId: z.ZodString;
134
131
  name: z.ZodOptional<z.ZodString>;
@@ -151,7 +148,6 @@ export declare const WahaUserFields: {
151
148
  location: "location";
152
149
  phoneNumber: "phoneNumber";
153
150
  isInAGroup: "isInAGroup";
154
- isSubscribedToEmailUpdates: "isSubscribedToEmailUpdates";
155
151
  hasDonated: "hasDonated";
156
152
  lastUpdate: "lastUpdate";
157
153
  hasAccount: "hasAccount";
@@ -318,7 +314,6 @@ export declare const LegacyWahaUserFields: {
318
314
  location: "location";
319
315
  phoneNumber: "phoneNumber";
320
316
  isInAGroup: "isInAGroup";
321
- isSubscribedToEmailUpdates: "isSubscribedToEmailUpdates";
322
317
  hasDonated: "hasDonated";
323
318
  pastLocations: "pastLocations";
324
319
  utm: "utm";
@@ -337,6 +332,7 @@ export declare const LegacyWahaUserFields: {
337
332
  sharingScore: "sharingScore";
338
333
  isAdvocate: "isAdvocate";
339
334
  isCCWorker: "isCCWorker";
335
+ isSubscribedToEmailUpdates: "isSubscribedToEmailUpdates";
340
336
  howFamiliarWithBible: "howFamiliarWithBible";
341
337
  followingFor2Years: "followingFor2Years";
342
338
  notificationsClicked: "notificationsClicked";
@@ -22,7 +22,6 @@ exports.SharedUserReduxState = zod_1.default
22
22
  location: location_1.WahaUserLocation,
23
23
  phoneNumber: zod_1.default.string(),
24
24
  isInAGroup: zod_1.default.boolean(),
25
- isSubscribedToEmailUpdates: zod_1.default.boolean(),
26
25
  hasDonated: zod_1.default.boolean(),
27
26
  })
28
27
  .partial();
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "waha-shared",
3
- "version": "1.0.521",
3
+ "version": "1.0.522-resend-migration.0",
4
4
  "author": "Waha",
5
5
  "dependencies": {
6
6
  "@types/signale": "^1.4.7",
7
+ "resend": "^6.27.0",
7
8
  "signale": "^1.4.0"
8
9
  },
9
10
  "peerDependencies": {
@@ -13,12 +14,8 @@
13
14
  },
14
15
  "description": "Shared assets for Waha's various apps",
15
16
  "devDependencies": {
16
- "@crowdin/crowdin-api-client": "^1.59.1",
17
- "@types/react": "^19.3.0",
18
17
  "copyfiles": "^2.4.1",
19
- "react": "^19.3.0",
20
- "typescript": "~5.9.2",
21
- "zod": "^4.6.7"
18
+ "typescript": "~5.9.2"
22
19
  },
23
20
  "files": [
24
21
  "dist",
@@ -28,7 +25,7 @@
28
25
  "license": "MIT",
29
26
  "scripts": {
30
27
  "build": "npx tsc && npx copyfiles \"data/**/*.json\" dist",
31
- "update": "npm run 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-)'",
32
- "updateManual": "(npm whoami || npm login) && npm run 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"
28
+ "update": "bash publish.sh",
29
+ "update:preview": "bash publish.sh --preview"
33
30
  }
34
31
  }