waha-shared 1.0.528 → 1.0.530

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.
Files changed (31) hide show
  1. package/dist/data/bibleAudios/bibleAudios.json +22 -14
  2. package/dist/data/bibleTexts/bibleTexts.json +35 -32
  3. package/dist/data/languages/index.d.ts +1 -0
  4. package/dist/data/languages/languages.json +23 -0
  5. package/dist/data/languages/languages.schema.json +5 -0
  6. package/dist/data/languages/languages.zod.d.ts +12 -0
  7. package/dist/data/languages/languages.zod.js +1 -0
  8. package/dist/data/mediaDurations/mediaDurations.json +17 -0
  9. package/dist/data/releaseNotes/releaseNotes.json +51 -2
  10. package/dist/data/translationsApp/index.d.ts +1 -0
  11. package/dist/data/translationsApp/translationsApp.json +45 -0
  12. package/dist/data/translationsApp/translationsApp.schema.json +1 -0
  13. package/dist/data/translationsApp/translationsApp.zod.d.ts +2 -0
  14. package/dist/data/translationsApp/translationsApp.zod.js +1 -0
  15. package/dist/data/translationsIntroduction/translationsIntroduction.json +42 -0
  16. package/dist/data/translationsSet/translationsSet.json +1 -0
  17. package/dist/functions/resend.d.ts +153 -0
  18. package/dist/functions/resend.js +329 -0
  19. package/dist/functions/utils.d.ts +1 -0
  20. package/dist/functions/utils.js +4 -0
  21. package/dist/types/dripSequence.d.ts +1 -5
  22. package/dist/types/dripSequence.js +1 -1
  23. package/dist/types/languages.d.ts +6 -0
  24. package/dist/types/logs.d.ts +2 -2
  25. package/dist/types/resend.d.ts +60 -0
  26. package/dist/types/resend.js +69 -0
  27. package/dist/types/users.d.ts +6 -6
  28. package/dist/types/users.js +5 -1
  29. package/package.json +4 -3
  30. package/dist/functions/activeCampaign.d.ts +0 -26
  31. package/dist/functions/activeCampaign.js +0 -119
@@ -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": {
@@ -45766,6 +45766,7 @@
45766
45766
  "setTitle": "หลักสูตรการสร้างสาวก"
45767
45767
  }
45768
45768
  ],
45769
+ "tsm": [],
45769
45770
  "tur": [
45770
45771
  {
45771
45772
  "lessonTitles": {
@@ -0,0 +1,153 @@
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
+ /**
67
+ * Creates a contact for an email the caller already knows isn't one, skipping
68
+ * the lookup {@link upsertResendContact} makes. The contact starts off the
69
+ * newsletter. Returns the new contact's id.
70
+ */
71
+ export declare function createResendContact({ token, email, name, }: {
72
+ token: string;
73
+ email: string;
74
+ name?: string;
75
+ }): Promise<string>;
76
+ /**
77
+ * Every contact's email, lowercased, or only those in one segment when
78
+ * `segmentId` is given. Read-only.
79
+ */
80
+ export declare function listContactEmails(token: string, segmentId?: string): Promise<Set<string>>;
81
+ /** Every segment's id and name. Read-only. */
82
+ export declare function listSegments(token: string): Promise<{
83
+ id: string;
84
+ name: string;
85
+ }[]>;
86
+ /** Creates a segment and returns its id. */
87
+ export declare function createSegment(token: string, name: string): Promise<string>;
88
+ /**
89
+ * Adds or removes the contact for an email in a segment. Adding someone already
90
+ * in it is harmless, and so is removing someone who isn't.
91
+ */
92
+ export declare function setSegmentMembership({ token, email, segmentId, member, }: {
93
+ token: string;
94
+ email: string;
95
+ segmentId: string;
96
+ member: boolean;
97
+ }): Promise<void>;
98
+ /**
99
+ * Deletes the contact for an email, taking its topic and segment memberships
100
+ * with it. A missing contact is already deleted, so it isn't an error.
101
+ */
102
+ export declare function deleteResendContact({ token, email, }: {
103
+ token: string;
104
+ email: string;
105
+ }): Promise<void>;
106
+ /**
107
+ * An explicit newsletter signup. This is fresh consent, so it opts the contact
108
+ * back in even if they opted out of the newsletter or unsubscribed from
109
+ * everything before. Bounce suppressions still apply. Also triggers the welcome
110
+ * email, which the automation sends only once per contact.
111
+ */
112
+ export declare function subscribeToNewsletter({ token, email, name, }: {
113
+ token: string;
114
+ email: string;
115
+ name?: string;
116
+ }): Promise<void>;
117
+ /**
118
+ * Starts the donor thank-you sequence for a donor who asked for it and adds
119
+ * them to the Donor segment. A donor who ticked the newsletter box is also
120
+ * subscribed to it, without the welcome email. Donors who don't ask for the
121
+ * sequence aren't added to Resend at all.
122
+ */
123
+ export declare function enrollInDonorSequence({ token, email, name, newsletter, }: {
124
+ token: string;
125
+ email: string;
126
+ name?: string;
127
+ newsletter?: boolean;
128
+ }): Promise<void>;
129
+ export type DripEnrollment = {
130
+ status: 'enrolled';
131
+ } | {
132
+ status: 'already_enrolled';
133
+ sequence: string;
134
+ };
135
+ export interface EnrollInDripSequenceParams {
136
+ token: string;
137
+ email: string;
138
+ firstName?: string;
139
+ sequence: DripSequenceId;
140
+ languageId: DripLanguageId;
141
+ /** Whether the user ticked the newsletter box when signing in. */
142
+ newsletter?: boolean;
143
+ }
144
+ /**
145
+ * Enrolls an app user in a localized drip sequence: adds them to the App
146
+ * Accounts segment and fires the event that starts that sequence and
147
+ * language's automation (provisioned by waha-website's
148
+ * `scripts/emailDrip/push.ts`). A contact already enrolled in any sequence is
149
+ * left alone, so each person gets at most one drip. A user who ticked the
150
+ * newsletter box is also subscribed to it: without the welcome email when
151
+ * their drip starts now, and as an explicit signup when it already ran.
152
+ */
153
+ export declare function enrollInDripSequence({ token, email, firstName, sequence, languageId, newsletter, }: EnrollInDripSequenceParams): Promise<DripEnrollment>;
@@ -0,0 +1,329 @@
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.createResendContact = createResendContact;
10
+ exports.listContactEmails = listContactEmails;
11
+ exports.listSegments = listSegments;
12
+ exports.createSegment = createSegment;
13
+ exports.setSegmentMembership = setSegmentMembership;
14
+ exports.deleteResendContact = deleteResendContact;
15
+ exports.subscribeToNewsletter = subscribeToNewsletter;
16
+ exports.enrollInDonorSequence = enrollInDonorSequence;
17
+ exports.enrollInDripSequence = enrollInDripSequence;
18
+ const resend_1 = require("resend");
19
+ const resend_2 = require("../types/resend");
20
+ const utils_1 = require("./utils");
21
+ /**
22
+ * Rate limits and server errors. Network failures (no status code) aren't
23
+ * retried: the request may have landed, and repeating a create or an event
24
+ * send could start an automation twice.
25
+ */
26
+ function isRetryable(error) {
27
+ const status = error.statusCode;
28
+ return status !== null && (status === 429 || status >= 500);
29
+ }
30
+ /** Makes a Resend call, retrying transient failures twice with backoff. */
31
+ async function withRetry(call) {
32
+ for (let attempt = 1;; attempt++) {
33
+ const result = await call();
34
+ if (!result.error || !isRetryable(result.error) || attempt === 3)
35
+ return result;
36
+ await new Promise((resolve) => setTimeout(resolve, attempt * 500));
37
+ }
38
+ }
39
+ /**
40
+ * The Resend SDK resolves to `{ data, error }` instead of throwing, so an
41
+ * unchecked call fails silently and the next step gets `undefined`.
42
+ */
43
+ function verify(result, context) {
44
+ if (result.error)
45
+ throw new Error(`${context}: ${result.error.message}`);
46
+ if (!result.data)
47
+ throw new Error(`${context}: Resend returned no data.`);
48
+ return result.data;
49
+ }
50
+ /** From: https://resend.com/audience/topics */
51
+ var Topics;
52
+ (function (Topics) {
53
+ Topics["Newsletter"] = "83d566a5-a42d-47e9-85e7-b43fb5b10298";
54
+ })(Topics || (exports.Topics = Topics = {}));
55
+ /* From: https://resend.com/audience/segments */
56
+ var Segments;
57
+ (function (Segments) {
58
+ /**
59
+ * App donors who asked for the thank-you sequence (plus donors carried over
60
+ * from AC).
61
+ */
62
+ Segments["Donor"] = "74ee171a-f00b-4a10-94b6-ef8508635ee1";
63
+ /** Everyone who created an app account (enrolled in the onboarding drip). */
64
+ Segments["AppAccounts"] = "07e0f635-7e85-4d96-9c31-12a7e34f6869";
65
+ })(Segments || (exports.Segments = Segments = {}));
66
+ /** From: https://resend.com/automations/events */
67
+ var Events;
68
+ (function (Events) {
69
+ Events["AppDonorSequence"] = "donor_thank_you_sequence";
70
+ Events["NewsletterWelcome"] = "newsletter_welcome";
71
+ // Drip sequence events are per language and thus generated dynamically, so
72
+ // they aren't in this enum.
73
+ })(Events || (exports.Events = Events = {}));
74
+ /** From: https://resend.com/audience/properties */
75
+ var Properties;
76
+ (function (Properties) {
77
+ /** Set by the donor automation when it runs, so it runs once per contact. */
78
+ Properties["AppDonorSequence"] = "donor_thank_you_sequence";
79
+ /**
80
+ * Set by the welcome automation when it runs, so it runs once per contact.
81
+ */
82
+ Properties["NewsletterWelcome"] = "newsletter_welcome";
83
+ /** The onboarding drip a contact was enrolled in, so it runs once each. */
84
+ Properties["NewAccountSequence"] = "drip_sequence";
85
+ /** The language a contact's onboarding drip was sent in. */
86
+ Properties["Language"] = "language";
87
+ })(Properties || (exports.Properties = Properties = {}));
88
+ /**
89
+ * Adds a language id to a base id to create a unique drip identifier. A
90
+ * sequence's id gives its trigger event (and automation) name; an email's id
91
+ * gives its template alias.
92
+ */
93
+ function dripId(baseId, languageId) {
94
+ return `${baseId}_${languageId}`;
95
+ }
96
+ function isDripLanguage(value) {
97
+ return resend_2.DRIP_LANGUAGES.includes(value);
98
+ }
99
+ /** Splits a single "name" form field into first and last name. */
100
+ function splitName(name) {
101
+ const [firstName, ...rest] = (name ?? '').trim().split(/\s+/);
102
+ return {
103
+ firstName: firstName || undefined,
104
+ lastName: rest.join(' ') || undefined,
105
+ };
106
+ }
107
+ /**
108
+ * Returns the existing contact for an email, or creates one. Existing contacts
109
+ * are returned untouched, so their newsletter choice and account-wide
110
+ * unsubscribe are never overridden here. New contacts start off the
111
+ * newsletter.
112
+ */
113
+ async function upsertResendContact({ token, email, name, }) {
114
+ const resend = new resend_1.Resend(token);
115
+ const normalized = (0, utils_1.lower)(email);
116
+ const existing = await withRetry(() => resend.contacts.get({ email: normalized }));
117
+ if (existing.data)
118
+ return { id: existing.data.id, created: false };
119
+ if (existing.error?.name !== 'not_found')
120
+ verify(existing, `Looking up contact ${normalized}`);
121
+ return {
122
+ id: await createResendContact({ token, email, name }),
123
+ created: true,
124
+ };
125
+ }
126
+ /**
127
+ * Creates a contact for an email the caller already knows isn't one, skipping
128
+ * the lookup {@link upsertResendContact} makes. The contact starts off the
129
+ * newsletter. Returns the new contact's id.
130
+ */
131
+ async function createResendContact({ token, email, name, }) {
132
+ const resend = new resend_1.Resend(token);
133
+ const normalized = (0, utils_1.lower)(email);
134
+ return verify(await withRetry(() => resend.contacts.create({ email: normalized, ...splitName(name) })), `Creating contact ${normalized}`).id;
135
+ }
136
+ /**
137
+ * Every contact's email, lowercased, or only those in one segment when
138
+ * `segmentId` is given. Read-only.
139
+ */
140
+ async function listContactEmails(token, segmentId) {
141
+ const resend = new resend_1.Resend(token);
142
+ const emails = new Set();
143
+ for (let after;;) {
144
+ const page = verify(await withRetry(() => resend.contacts.list({
145
+ limit: 100,
146
+ ...(segmentId && { segmentId }),
147
+ ...(after && { after }),
148
+ })), `Listing contacts${segmentId ? ` in segment ${segmentId}` : ''} after ${after ?? 'the start'}`);
149
+ for (const contact of page.data)
150
+ emails.add((0, utils_1.lower)(contact.email));
151
+ const last = page.data[page.data.length - 1];
152
+ if (!page.has_more || !last)
153
+ return emails;
154
+ after = last.id;
155
+ }
156
+ }
157
+ /** Every segment's id and name. Read-only. */
158
+ async function listSegments(token) {
159
+ const resend = new resend_1.Resend(token);
160
+ const segments = [];
161
+ for (let after;;) {
162
+ const page = verify(await withRetry(() => resend.segments.list({ limit: 100, ...(after && { after }) })), `Listing segments after ${after ?? 'the start'}`);
163
+ for (const { id, name } of page.data)
164
+ segments.push({ id, name });
165
+ const last = page.data[page.data.length - 1];
166
+ if (!page.has_more || !last)
167
+ return segments;
168
+ after = last.id;
169
+ }
170
+ }
171
+ /** Creates a segment and returns its id. */
172
+ async function createSegment(token, name) {
173
+ const resend = new resend_1.Resend(token);
174
+ return verify(await withRetry(() => resend.segments.create({ name })), `Creating segment "${name}"`).id;
175
+ }
176
+ /**
177
+ * Adds or removes the contact for an email in a segment. Adding someone already
178
+ * in it is harmless, and so is removing someone who isn't.
179
+ */
180
+ async function setSegmentMembership({ token, email, segmentId, member, }) {
181
+ const resend = new resend_1.Resend(token);
182
+ const options = { email: (0, utils_1.lower)(email), segmentId };
183
+ if (member) {
184
+ verify(await withRetry(() => resend.contacts.segments.add(options)), `Adding ${options.email} to segment ${segmentId}`);
185
+ return;
186
+ }
187
+ const result = await withRetry(() => resend.contacts.segments.remove(options));
188
+ if (result.error?.name === 'not_found')
189
+ return;
190
+ verify(result, `Removing ${options.email} from segment ${segmentId}`);
191
+ }
192
+ /**
193
+ * Deletes the contact for an email, taking its topic and segment memberships
194
+ * with it. A missing contact is already deleted, so it isn't an error.
195
+ */
196
+ async function deleteResendContact({ token, email, }) {
197
+ const resend = new resend_1.Resend(token);
198
+ const normalized = (0, utils_1.lower)(email);
199
+ const result = await withRetry(() => resend.contacts.remove({ email: normalized }));
200
+ if (result.error?.name === 'not_found')
201
+ return;
202
+ verify(result, `Deleting contact ${normalized}`);
203
+ }
204
+ /**
205
+ * An explicit newsletter signup. This is fresh consent, so it opts the contact
206
+ * back in even if they opted out of the newsletter or unsubscribed from
207
+ * everything before. Bounce suppressions still apply. Also triggers the welcome
208
+ * email, which the automation sends only once per contact.
209
+ */
210
+ async function subscribeToNewsletter({ token, email, name, }) {
211
+ const resend = new resend_1.Resend(token);
212
+ // Upsert the contact.
213
+ const contact = await upsertResendContact({ token, email, name });
214
+ // If contact exists, resubscribe them in case they previously unsubscribed.
215
+ if (!contact.created)
216
+ verify(await withRetry(() => resend.contacts.update({ id: contact.id, unsubscribed: false })), `Resubscribing contact ${contact.id}`);
217
+ // Add them to the newsletter topic.
218
+ verify(await withRetry(() => resend.contacts.topics.update({
219
+ id: contact.id,
220
+ topics: [{ id: Topics.Newsletter, subscription: 'opt_in' }],
221
+ })), `Subscribing contact ${contact.id} to the newsletter`);
222
+ // Send them a welcome email.
223
+ verify(await withRetry(() => resend.events.send({
224
+ event: Events.NewsletterWelcome,
225
+ contactId: contact.id,
226
+ })), `Sending ${Events.NewsletterWelcome} for contact ${contact.id}`);
227
+ }
228
+ /** Adds a contact to a segment. Adding someone already in it is harmless. */
229
+ async function addToSegment(resend, contactId, segmentId) {
230
+ verify(await withRetry(() => resend.contacts.segments.add({ contactId, segmentId })), `Adding contact ${contactId} to segment ${segmentId}`);
231
+ }
232
+ /**
233
+ * Opts a contact who ticked the newsletter box alongside another signup (an
234
+ * app account or a donation) in to the newsletter, without the welcome email:
235
+ * the sequence they're starting already welcomes them. For a contact that
236
+ * signup just created, the welcome's run-once property is set so a later
237
+ * explicit signup doesn't send it either. An existing contact's is left alone,
238
+ * since it may record a welcome they really got.
239
+ *
240
+ * Never throws: the sequence has already started, so a failure here is logged
241
+ * instead of failing the request.
242
+ */
243
+ async function subscribeAlongsideSequence(resend, contactId, created) {
244
+ const subscribed = await withRetry(() => resend.contacts.topics.update({
245
+ id: contactId,
246
+ topics: [{ id: Topics.Newsletter, subscription: 'opt_in' }],
247
+ }));
248
+ if (subscribed.error) {
249
+ console.error(`Subscribing contact ${contactId} to the newsletter failed:`, subscribed.error);
250
+ return;
251
+ }
252
+ if (!created)
253
+ return;
254
+ const marked = await withRetry(() => resend.contacts.update({
255
+ id: contactId,
256
+ properties: {
257
+ [Properties.NewsletterWelcome]: `skipped|${new Date().toISOString()}`,
258
+ },
259
+ }));
260
+ if (marked.error)
261
+ console.error(`Marking contact ${contactId} welcomed failed:`, marked.error);
262
+ }
263
+ /**
264
+ * Starts the donor thank-you sequence for a donor who asked for it and adds
265
+ * them to the Donor segment. A donor who ticked the newsletter box is also
266
+ * subscribed to it, without the welcome email. Donors who don't ask for the
267
+ * sequence aren't added to Resend at all.
268
+ */
269
+ async function enrollInDonorSequence({ token, email, name, newsletter, }) {
270
+ const resend = new resend_1.Resend(token);
271
+ const { id, created } = await upsertResendContact({ token, email, name });
272
+ await addToSegment(resend, id, Segments.Donor);
273
+ verify(await withRetry(() => resend.events.send({
274
+ event: Events.AppDonorSequence,
275
+ contactId: id,
276
+ })), `Sending ${Events.AppDonorSequence} for contact ${id}`);
277
+ if (newsletter)
278
+ await subscribeAlongsideSequence(resend, id, created);
279
+ }
280
+ /**
281
+ * Enrolls an app user in a localized drip sequence: adds them to the App
282
+ * Accounts segment and fires the event that starts that sequence and
283
+ * language's automation (provisioned by waha-website's
284
+ * `scripts/emailDrip/push.ts`). A contact already enrolled in any sequence is
285
+ * left alone, so each person gets at most one drip. A user who ticked the
286
+ * newsletter box is also subscribed to it: without the welcome email when
287
+ * their drip starts now, and as an explicit signup when it already ran.
288
+ */
289
+ async function enrollInDripSequence({ token, email, firstName, sequence, languageId, newsletter, }) {
290
+ const resend = new resend_1.Resend(token);
291
+ const normalized = (0, utils_1.lower)(email);
292
+ const existing = await withRetry(() => resend.contacts.get({ email: normalized }));
293
+ if (existing.error?.name !== 'not_found' && !existing.data)
294
+ verify(existing, `Looking up contact ${normalized}`);
295
+ const contact = existing.data;
296
+ const enrolledIn = contact?.properties?.[Properties.NewAccountSequence]?.value;
297
+ if (enrolledIn) {
298
+ // No drip starts to welcome them, so this is an ordinary signup.
299
+ if (newsletter)
300
+ await subscribeToNewsletter({ token, email, name: firstName }).catch((e) => console.error(`Subscribing ${normalized} to the newsletter failed:`, e));
301
+ return { status: 'already_enrolled', sequence: `${enrolledIn}` };
302
+ }
303
+ /*
304
+ * The sequence property is deliberately not set yet. Marking a contact
305
+ * enrolled before the event below fires would strand them if it failed: the
306
+ * check above would skip them forever though their drip never started.
307
+ */
308
+ const properties = { [Properties.Language]: languageId };
309
+ const id = contact
310
+ ? verify(await withRetry(() => resend.contacts.update({ id: contact.id, firstName, properties })), `Updating contact ${contact.id}`).id
311
+ : verify(await withRetry(() => resend.contacts.create({ email: normalized, firstName, properties })), `Creating contact ${normalized}`).id;
312
+ await addToSegment(resend, id, Segments.AppAccounts);
313
+ const event = dripId(sequence, languageId);
314
+ verify(await withRetry(() => resend.events.send({ event, contactId: id })), `Sending ${event} for contact ${id}`);
315
+ /*
316
+ * The drip has started, so a failure here only weakens the guard against a
317
+ * second enrollment. It's logged rather than failing a request that
318
+ * otherwise succeeded.
319
+ */
320
+ const marked = await withRetry(() => resend.contacts.update({
321
+ id,
322
+ properties: { [Properties.NewAccountSequence]: sequence },
323
+ }));
324
+ if (marked.error)
325
+ console.error(`Marking contact ${id} enrolled failed:`, marked.error);
326
+ if (newsletter)
327
+ await subscribeAlongsideSequence(resend, id, !contact);
328
+ return { status: 'enrolled' };
329
+ }
@@ -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>;