waha-shared 1.0.1 → 1.0.3

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 (293) hide show
  1. package/README.md +2 -2
  2. package/dist/data/bibleAudios.d.ts +8 -0
  3. package/dist/data/bibleAudios.js +8 -0
  4. package/dist/data/bibleAudios.json +394 -0
  5. package/dist/data/bibleResources/bibleBooks.d.ts +3 -0
  6. package/dist/data/bibleResources/bibleBooks.js +7 -0
  7. package/dist/data/bibleResources/bibleBooks.json +6071 -0
  8. package/dist/data/bibleResources/bibleChaptersList.d.ts +2 -0
  9. package/dist/data/bibleResources/bibleChaptersList.js +8 -0
  10. package/dist/data/bibleResources/bibleChaptersList.json +1191 -0
  11. package/dist/data/bibleStatuses.d.ts +7 -0
  12. package/dist/data/bibleStatuses.js +8 -0
  13. package/dist/data/bibleStatuses.json +9196 -0
  14. package/dist/data/bibleTexts.d.ts +16 -0
  15. package/dist/data/bibleTexts.js +8 -0
  16. package/dist/data/bibleTexts.json +527 -0
  17. package/dist/data/countryResources/areas.d.ts +3 -0
  18. package/dist/data/countryResources/areas.js +7 -0
  19. package/dist/data/countryResources/areas.json +74 -0
  20. package/dist/data/countryResources/countries.d.ts +3 -0
  21. package/dist/data/countryResources/countries.js +7 -0
  22. package/dist/data/countryResources/countries.json +3362 -0
  23. package/dist/data/foundationsCurriculums.d.ts +5 -0
  24. package/dist/data/foundationsCurriculums.js +8 -0
  25. package/dist/data/foundationsCurriculums.json +130 -0
  26. package/dist/data/languageResources/countriesAndLanguages.d.ts +13 -0
  27. package/dist/data/languageResources/countriesAndLanguages.js +7 -0
  28. package/dist/data/languageResources/countriesAndLanguages.json +11718 -0
  29. package/dist/data/languageResources/phoneLanguages.d.ts +11 -0
  30. package/dist/data/languageResources/phoneLanguages.js +7 -0
  31. package/dist/data/languageResources/phoneLanguages.json +1532 -0
  32. package/dist/data/languages.d.ts +45 -0
  33. package/dist/data/languages.js +8 -0
  34. package/dist/data/languages.json +7045 -0
  35. package/dist/data/mediaDurations.d.ts +6 -0
  36. package/dist/data/mediaDurations.js +8 -0
  37. package/dist/data/mediaDurations.json +32364 -0
  38. package/dist/data/notification.d.ts +16 -0
  39. package/dist/data/notification.js +8 -0
  40. package/dist/data/notification.json +69 -0
  41. package/dist/data/numeralMaps.d.ts +13 -0
  42. package/dist/data/numeralMaps.js +8 -0
  43. package/dist/data/numeralMaps.json +26 -0
  44. package/dist/data/questions.d.ts +8 -0
  45. package/dist/data/questions.js +8 -0
  46. package/dist/data/questions.json +317 -0
  47. package/dist/data/questionsCurriculums.d.ts +8 -0
  48. package/dist/data/questionsCurriculums.js +8 -0
  49. package/dist/data/questionsCurriculums.json +753 -0
  50. package/dist/data/releaseNotes.d.ts +6 -0
  51. package/dist/data/releaseNotes.js +8 -0
  52. package/dist/data/releaseNotes.json +2381 -0
  53. package/dist/data/screenshots.d.ts +5 -0
  54. package/dist/data/screenshots.js +8 -0
  55. package/dist/data/screenshots.json +17 -0
  56. package/dist/data/sets.d.ts +14 -0
  57. package/dist/data/sets.js +8 -0
  58. package/dist/data/sets.json +12258 -0
  59. package/dist/data/specialIds.d.ts +18 -0
  60. package/dist/data/specialIds.js +7 -0
  61. package/dist/data/specialIds.json +72 -0
  62. package/dist/data/topicsCurriculums.d.ts +5 -0
  63. package/dist/data/topicsCurriculums.js +8 -0
  64. package/dist/data/topicsCurriculums.json +131 -0
  65. package/dist/data/typescript/appTranslations.d.ts +915 -0
  66. package/dist/data/typescript/appTranslations.js +315 -0
  67. package/dist/data/typescript/areas.d.ts +18 -0
  68. package/dist/data/typescript/areas.js +42 -0
  69. package/dist/data/typescript/aslTimestamps.d.ts +43 -0
  70. package/dist/data/typescript/aslTimestamps.js +31 -0
  71. package/dist/data/typescript/bibleAudioAvailableChapters.d.ts +3 -0
  72. package/dist/data/typescript/bibleAudioAvailableChapters.js +36 -0
  73. package/dist/data/typescript/bibleAudios.d.ts +21 -0
  74. package/dist/data/typescript/bibleAudios.js +23 -0
  75. package/dist/data/typescript/bibleBookNames.d.ts +3 -0
  76. package/dist/data/typescript/bibleBookNames.js +98 -0
  77. package/dist/data/typescript/bibleBooks.d.ts +69 -0
  78. package/dist/data/typescript/bibleBooks.js +56 -0
  79. package/dist/data/typescript/bibleChapters.d.ts +49 -0
  80. package/dist/data/typescript/bibleChapters.js +29 -0
  81. package/dist/data/typescript/bibleStatuses.d.ts +28 -0
  82. package/dist/data/typescript/bibleStatuses.js +39 -0
  83. package/dist/data/typescript/bibleTextAvailableChapters.d.ts +3 -0
  84. package/dist/data/typescript/bibleTextAvailableChapters.js +36 -0
  85. package/dist/data/typescript/bibleTexts.d.ts +53 -0
  86. package/dist/data/typescript/bibleTexts.js +54 -0
  87. package/dist/data/typescript/clones.d.ts +36 -0
  88. package/dist/data/typescript/clones.js +28 -0
  89. package/dist/data/typescript/countries.d.ts +98 -0
  90. package/dist/data/typescript/countries.js +149 -0
  91. package/dist/data/typescript/foundationsCurriculums.d.ts +12 -0
  92. package/dist/data/typescript/foundationsCurriculums.js +12 -0
  93. package/dist/data/typescript/introductionTranslations.d.ts +202 -0
  94. package/dist/data/typescript/introductionTranslations.js +53 -0
  95. package/dist/data/typescript/languages.d.ts +148 -0
  96. package/dist/data/typescript/languages.js +302 -0
  97. package/dist/data/typescript/mediaDurations.d.ts +23 -0
  98. package/dist/data/typescript/mediaDurations.js +72 -0
  99. package/dist/data/typescript/notification.d.ts +45 -0
  100. package/dist/data/typescript/notification.js +176 -0
  101. package/dist/data/typescript/numeralMaps.d.ts +58 -0
  102. package/dist/data/typescript/numeralMaps.js +71 -0
  103. package/dist/data/typescript/questionTranslations.d.ts +3 -0
  104. package/dist/data/typescript/questionTranslations.js +5 -0
  105. package/dist/data/typescript/questions.d.ts +21 -0
  106. package/dist/data/typescript/questions.js +18 -0
  107. package/dist/data/typescript/questionsCurriculums.d.ts +27 -0
  108. package/dist/data/typescript/questionsCurriculums.js +19 -0
  109. package/dist/data/typescript/releaseNotes.d.ts +15 -0
  110. package/dist/data/typescript/releaseNotes.js +9 -0
  111. package/dist/data/typescript/screenshots.d.ts +12 -0
  112. package/dist/data/typescript/screenshots.js +49 -0
  113. package/dist/data/typescript/setTranslations.d.ts +27 -0
  114. package/dist/data/typescript/setTranslations.js +32 -0
  115. package/dist/data/typescript/sets.d.ts +49 -0
  116. package/dist/data/typescript/sets.js +88 -0
  117. package/dist/data/typescript/topicsCurriculums.d.ts +12 -0
  118. package/dist/data/typescript/topicsCurriculums.js +12 -0
  119. package/dist/data/youtube/videos.d.ts +2 -0
  120. package/dist/data/youtube/videos.js +7 -0
  121. package/dist/data/youtube/videos.json +262 -0
  122. package/dist/functions/activeCampaign.d.ts +8 -0
  123. package/dist/functions/activeCampaign.js +97 -0
  124. package/dist/functions/bibleChapterUtils.d.ts +15 -0
  125. package/dist/functions/bibleChapterUtils.js +231 -0
  126. package/dist/functions/crowdin.d.ts +24 -0
  127. package/dist/functions/crowdin.js +34 -0
  128. package/dist/functions/languages.d.ts +24 -0
  129. package/dist/functions/languages.js +212 -0
  130. package/dist/functions/scripturePassages.d.ts +47 -0
  131. package/dist/functions/scripturePassages.js +261 -0
  132. package/dist/functions/sets.d.ts +30 -0
  133. package/dist/functions/sets.js +371 -0
  134. package/dist/translations/appTranslations.d.ts +306 -0
  135. package/dist/translations/appTranslations.js +8 -0
  136. package/dist/translations/appTranslations.json +10239 -0
  137. package/dist/translations/introductionTranslations.d.ts +43 -0
  138. package/dist/translations/introductionTranslations.js +8 -0
  139. package/dist/translations/introductionTranslations.json +422 -0
  140. package/dist/translations/questionTranslations.d.ts +2 -0
  141. package/dist/translations/questionTranslations.js +8 -0
  142. package/dist/translations/questionTranslations.json +1472 -0
  143. package/dist/translations/setTranslations.d.ts +10 -0
  144. package/dist/translations/setTranslations.js +8 -0
  145. package/dist/translations/setTranslations.json +30257 -0
  146. package/dist/types/analytics.d.ts +119 -0
  147. package/dist/types/analytics.js +2 -0
  148. package/dist/types/completions.d.ts +8 -0
  149. package/dist/types/completions.js +2 -0
  150. package/dist/types/feedback.d.ts +60 -0
  151. package/dist/types/feedback.js +27 -0
  152. package/dist/types/languages.d.ts +31 -0
  153. package/dist/types/languages.js +2 -0
  154. package/dist/types/notifications.d.ts +128 -0
  155. package/dist/types/notifications.js +30 -0
  156. package/dist/types/sets.d.ts +70 -0
  157. package/dist/types/sets.js +10 -0
  158. package/dist/types/users.d.ts +765 -0
  159. package/dist/types/users.js +137 -0
  160. package/package.json +2 -2
  161. package/.DS_Store +0 -0
  162. package/__init__.py +0 -0
  163. package/copy.ts +0 -37
  164. package/data/README.md +0 -45
  165. package/data/__init__.py +0 -0
  166. package/data/aslTimestamps.json +0 -192788
  167. package/data/bibleAudios.json +0 -394
  168. package/data/bibleAudios.ts +0 -4
  169. package/data/bibleResources/audioBibleLicenses.json +0 -6235
  170. package/data/bibleResources/bibleBooks.json +0 -6071
  171. package/data/bibleResources/bibleBooks.ts +0 -4
  172. package/data/bibleResources/bibleChaptersList.json +0 -1191
  173. package/data/bibleResources/bibleChaptersList.ts +0 -4
  174. package/data/bibleResources/textBibleLicenses.json +0 -14603
  175. package/data/bibleStatuses.json +0 -9196
  176. package/data/bibleStatuses.ts +0 -4
  177. package/data/bibleTexts.json +0 -527
  178. package/data/bibleTexts.ts +0 -4
  179. package/data/clones.json +0 -13
  180. package/data/countryResources/areas.json +0 -74
  181. package/data/countryResources/areas.ts +0 -4
  182. package/data/countryResources/countries.json +0 -3362
  183. package/data/countryResources/countries.ts +0 -4
  184. package/data/foundationsCurriculums.json +0 -130
  185. package/data/foundationsCurriculums.ts +0 -4
  186. package/data/languageResources/countriesAndLanguages.json +0 -11718
  187. package/data/languageResources/countriesAndLanguages.ts +0 -16
  188. package/data/languageResources/crowdinLanguages.json +0 -2172
  189. package/data/languageResources/iosVoiceOverLanguages.json +0 -64
  190. package/data/languageResources/iso6933LanguageCodes.json +0 -7927
  191. package/data/languageResources/mmsLanguages.json +0 -28164
  192. package/data/languageResources/phoneLanguages.json +0 -1532
  193. package/data/languageResources/phoneLanguages.ts +0 -14
  194. package/data/languages.json +0 -7045
  195. package/data/languages.ts +0 -4
  196. package/data/mediaDurations.json +0 -32364
  197. package/data/mediaDurations.ts +0 -4
  198. package/data/notification.json +0 -69
  199. package/data/notification.ts +0 -4
  200. package/data/numeralMaps.json +0 -26
  201. package/data/numeralMaps.ts +0 -4
  202. package/data/orphanedBibleTexts.json +0 -2747
  203. package/data/questions.json +0 -317
  204. package/data/questions.ts +0 -4
  205. package/data/questionsCurriculums.json +0 -753
  206. package/data/questionsCurriculums.ts +0 -4
  207. package/data/releaseNotes.json +0 -2381
  208. package/data/releaseNotes.ts +0 -4
  209. package/data/schemas/appTranslations.schema.json +0 -802
  210. package/data/schemas/areas.schema.json +0 -76
  211. package/data/schemas/aslTimestamps.schema.json +0 -59
  212. package/data/schemas/bibleAudios.schema.json +0 -37
  213. package/data/schemas/bibleBooks.schema.json +0 -112
  214. package/data/schemas/bibleChapters.schema.json +0 -61
  215. package/data/schemas/bibleStatuses.schema.json +0 -41
  216. package/data/schemas/bibleTexts.schema.json +0 -60
  217. package/data/schemas/clones.schema.json +0 -63
  218. package/data/schemas/countries.schema.json +0 -84
  219. package/data/schemas/foundationsCurriculums.schema.json +0 -20
  220. package/data/schemas/introductionTranslations.schema.json +0 -101
  221. package/data/schemas/languages.schema.json +0 -365
  222. package/data/schemas/mediaDurations.schema.json +0 -41
  223. package/data/schemas/notification.schema.json +0 -111
  224. package/data/schemas/numeralMaps.schema.json +0 -57
  225. package/data/schemas/questionTranslations.schema.json +0 -20
  226. package/data/schemas/questions.schema.json +0 -29
  227. package/data/schemas/questionsCurriculums.schema.json +0 -34
  228. package/data/schemas/releaseNotes.schema.json +0 -21
  229. package/data/schemas/screenshots.schema.json +0 -23
  230. package/data/schemas/setTranslations.schema.json +0 -70
  231. package/data/schemas/sets.schema.json +0 -109
  232. package/data/schemas/topicsCurriculums.schema.json +0 -20
  233. package/data/screenshots.json +0 -17
  234. package/data/screenshots.ts +0 -4
  235. package/data/sets.json +0 -12258
  236. package/data/sets.ts +0 -4
  237. package/data/specialIds.json +0 -72
  238. package/data/specialIds.ts +0 -19
  239. package/data/timings/som.json +0 -9150
  240. package/data/topicsCurriculums.json +0 -131
  241. package/data/topicsCurriculums.ts +0 -4
  242. package/data/typescript/appTranslations.ts +0 -322
  243. package/data/typescript/areas.ts +0 -45
  244. package/data/typescript/aslTimestamps.ts +0 -36
  245. package/data/typescript/bibleAudioAvailableChapters.ts +0 -35
  246. package/data/typescript/bibleAudios.ts +0 -32
  247. package/data/typescript/bibleBookNames.ts +0 -97
  248. package/data/typescript/bibleBooks.ts +0 -63
  249. package/data/typescript/bibleChapters.ts +0 -40
  250. package/data/typescript/bibleStatuses.ts +0 -54
  251. package/data/typescript/bibleTextAvailableChapters.ts +0 -35
  252. package/data/typescript/bibleTexts.ts +0 -63
  253. package/data/typescript/clones.ts +0 -35
  254. package/data/typescript/countries.ts +0 -152
  255. package/data/typescript/foundationsCurriculums.ts +0 -15
  256. package/data/typescript/introductionTranslations.ts +0 -60
  257. package/data/typescript/languages.ts +0 -369
  258. package/data/typescript/mediaDurations.ts +0 -89
  259. package/data/typescript/notification.ts +0 -189
  260. package/data/typescript/numeralMaps.ts +0 -74
  261. package/data/typescript/questionTranslations.ts +0 -6
  262. package/data/typescript/questions.ts +0 -25
  263. package/data/typescript/questionsCurriculums.ts +0 -26
  264. package/data/typescript/releaseNotes.ts +0 -10
  265. package/data/typescript/screenshots.ts +0 -52
  266. package/data/typescript/setTranslations.ts +0 -39
  267. package/data/typescript/sets.ts +0 -105
  268. package/data/typescript/topicsCurriculums.ts +0 -15
  269. package/data/youtube/playlists.json +0 -28
  270. package/data/youtube/videos.json +0 -262
  271. package/data/youtube/videos.ts +0 -2
  272. package/functions/activeCampaign.ts +0 -127
  273. package/functions/bibleChapterUtils.ts +0 -241
  274. package/functions/crowdin.ts +0 -51
  275. package/functions/languages.ts +0 -284
  276. package/functions/scripturePassages.ts +0 -368
  277. package/functions/sets.ts +0 -495
  278. package/translations/appTranslations.json +0 -10239
  279. package/translations/appTranslations.ts +0 -4
  280. package/translations/introductionTranslations.json +0 -422
  281. package/translations/introductionTranslations.ts +0 -4
  282. package/translations/questionTranslations.json +0 -1472
  283. package/translations/questionTranslations.ts +0 -4
  284. package/translations/setTranslations.json +0 -30257
  285. package/translations/setTranslations.ts +0 -4
  286. package/translations/spokenQuestionTranslations.json +0 -1472
  287. package/types/analytics.ts +0 -147
  288. package/types/completions.ts +0 -9
  289. package/types/feedback.ts +0 -27
  290. package/types/languages.ts +0 -37
  291. package/types/notifications.ts +0 -37
  292. package/types/sets.ts +0 -84
  293. package/types/users.ts +0 -162
@@ -0,0 +1,262 @@
1
+ {
2
+ "aeb.ara.03.009.001.1080.mp4": "dFcK1eSjua4",
3
+ "aeb.ara.03.009.002.1080.mp4": "qlKJlh7Eoy4",
4
+ "aeb.ara.03.009.003.1080.mp4": "SzpgbF6ZBGo",
5
+ "aeb.ara.03.009.004.1080.mp4": "kcTTdkoXmLI",
6
+ "aeb.ara.03.009.005.1080.mp4": "S9JNjdBotTQ",
7
+ "aeb.ara.03.009.006.1080.mp4": "hvzAxL-sEu8",
8
+ "aeb.ara.03.009.007.1080.mp4": "janHbM6wNlg",
9
+ "aeb.ara.03.009.008.1080.mp4": "DaFDK-m9rcc",
10
+ "aeb.ara.03.009.009.1080.mp4": "GdFSLhQ5zjo",
11
+ "aeb.ara.03.009.010.1080.mp4": "dXEWeLg9ync",
12
+ "afb.ara.03.009.001.1080.mp4": "GciA3FqMMjo",
13
+ "afb.ara.03.009.002.1080.mp4": "5H736Ur4V9A",
14
+ "afb.ara.03.009.003.1080.mp4": "6Jrq8uS8LTE",
15
+ "afb.ara.03.009.004.1080.mp4": "hX4Ah0RaqXU",
16
+ "afb.ara.03.009.005.1080.mp4": "UUtWGBkkbe8",
17
+ "afb.ara.03.009.006.1080.mp4": "leILIB8giis",
18
+ "afb.ara.03.009.007.1080.mp4": "cqBWHj3frBM",
19
+ "afb.ara.03.009.008.1080.mp4": "iofXOtDSaDU",
20
+ "afb.ara.03.009.009.1080.mp4": "oae20bYMysI",
21
+ "afb.ara.03.009.010.1080.mp4": "3O8Ic7oMeWQ",
22
+ "ais.ara.03.009.001.1080.mp4": "vTCWxqU9Yg0",
23
+ "ais.ara.03.009.002.1080.mp4": "VRnAgKQt1ac",
24
+ "ais.ara.03.009.003.1080.mp4": "ppPOnHebMOY",
25
+ "ais.ara.03.009.004.1080.mp4": "KpKTibOcopE",
26
+ "ais.ara.03.009.005.1080.mp4": "5cWaSnxLTI8",
27
+ "ais.ara.03.009.006.1080.mp4": "hgtGel-VO08",
28
+ "ais.ara.03.009.007.1080.mp4": "mLsy0lb8H-w",
29
+ "ais.ara.03.009.008.1080.mp4": "jvsI90oe2ts",
30
+ "ais.ara.03.009.009.1080.mp4": "bHu5kV0eIjI",
31
+ "ais.ara.03.009.010.1080.mp4": "unspi08hu_I",
32
+ "apa.ara.03.009.001.1080.mp4": "qpN6eUUJTN4",
33
+ "apa.ara.03.009.002.1080.mp4": "23kTw6lX5Wo",
34
+ "apa.ara.03.009.003.1080.mp4": "HAUGlAbNt3I",
35
+ "apa.ara.03.009.004.1080.mp4": "WFEOwjqWaDk",
36
+ "apa.ara.03.009.005.1080.mp4": "qAHl7EOHkhk",
37
+ "apa.ara.03.009.006.1080.mp4": "Mq-Q8-jscns",
38
+ "apa.ara.03.009.007.1080.mp4": "uMmHltTcTKE",
39
+ "apa.ara.03.009.008.1080.mp4": "l9HkPme9ncU",
40
+ "apa.ara.03.009.009.1080.mp4": "rdz6VEMZNns",
41
+ "apa.ara.03.009.010.1080.mp4": "bgGaPVjukTQ",
42
+ "apc.ara.03.009.001.1080.mp4": "I9MW-tP5yLY",
43
+ "apc.ara.03.009.002.1080.mp4": "bnhVJqSPA1s",
44
+ "apc.ara.03.009.003.1080.mp4": "dpYicxrURiE",
45
+ "apc.ara.03.009.004.1080.mp4": "SyZkxQhLzZU",
46
+ "apc.ara.03.009.005.1080.mp4": "ftUpqYs5fRE",
47
+ "apc.ara.03.009.006.1080.mp4": "HIL6uiKI6Kg",
48
+ "apc.ara.03.009.007.1080.mp4": "m-6vizZ3zZg",
49
+ "apc.ara.03.009.008.1080.mp4": "pD8GVTzoKco",
50
+ "apc.ara.03.009.009.1080.mp4": "wsWOsX3DGj8",
51
+ "apc.ara.03.009.010.1080.mp4": "6mWFlwor92E",
52
+ "ary.ary.03.009.001.1080.mp4": "JXtaWsZkj_c",
53
+ "ary.ary.03.009.002.1080.mp4": "TEuT0OdtoKQ",
54
+ "ary.ary.03.009.003.1080.mp4": "CqWYpjKc7Qk",
55
+ "ary.ary.03.009.004.1080.mp4": "LOJs-htN90Y",
56
+ "ary.ary.03.009.005.1080.mp4": "EnLvEbGPYx4",
57
+ "ary.ary.03.009.006.1080.mp4": "iEg8RCJhcz4",
58
+ "ary.ary.03.009.007.1080.mp4": "Qn0A8Tmi2nc",
59
+ "ary.ary.03.009.008.1080.mp4": "I4YTJkkOaCk",
60
+ "ary.ary.03.009.009.1080.mp4": "s61BVTUW8Qs",
61
+ "ary.ary.03.009.010.1080.mp4": "g2GRAHuRmgA",
62
+ "arz.ara.03.009.001.1080.mp4": "WVyf0yfqoh8",
63
+ "arz.ara.03.009.002.1080.mp4": "jhfrzH0ZaXM",
64
+ "arz.ara.03.009.003.1080.mp4": "WWHt6WhRxRs",
65
+ "arz.ara.03.009.004.1080.mp4": "38-StdE7znM",
66
+ "arz.ara.03.009.005.1080.mp4": "O8Oep7I_sSQ",
67
+ "arz.ara.03.009.006.1080.mp4": "_wd9RaO0vFw",
68
+ "arz.ara.03.009.007.1080.mp4": "YnBQjlj6R2s",
69
+ "arz.ara.03.009.008.1080.mp4": "53FFgfW12pY",
70
+ "arz.ara.03.009.009.1080.mp4": "dBm53hNjkHU",
71
+ "arz.ara.03.009.010.1080.mp4": "sXqs6hCqXhI",
72
+ "ayl.ara.03.009.001.1080.mp4": "DNH3vg5aPRo",
73
+ "ayl.ara.03.009.002.1080.mp4": "0xvtpB9n-wU",
74
+ "ayl.ara.03.009.003.1080.mp4": "2vf0Kcnv_U4",
75
+ "ayl.ara.03.009.004.1080.mp4": "t0tgM6U2wSI",
76
+ "ayl.ara.03.009.005.1080.mp4": "J3rus-kc7Bk",
77
+ "ayl.ara.03.009.006.1080.mp4": "B_z5AbsKON0",
78
+ "ayl.ara.03.009.007.1080.mp4": "0xYcC44T_Tg",
79
+ "ayl.ara.03.009.008.1080.mp4": "Or79vluwpPU",
80
+ "ayl.ara.03.009.009.1080.mp4": "69T-0jNtndg",
81
+ "ayl.ara.03.009.010.1080.mp4": "TKg_-pNAnak",
82
+ "eng.eng.03.009.001.1080.mp4": "DxIexa7xMRk",
83
+ "eng.eng.03.009.002.1080.mp4": "zrxr62YMBW4",
84
+ "eng.eng.03.009.003.1080.mp4": "8faADr1p6lQ",
85
+ "eng.eng.03.009.004.1080.mp4": "9WEK4m6xpWM",
86
+ "eng.eng.03.009.005.1080.mp4": "Qm6acVzgBDc",
87
+ "eng.eng.03.009.006.1080.mp4": "YAn3pYcrE4E",
88
+ "eng.eng.03.009.007.1080.mp4": "DrvYVC1ERg0",
89
+ "eng.eng.03.009.008.1080.mp4": "MPnjSJ13JwA",
90
+ "eng.eng.03.009.009.1080.mp4": "tPiFeIfr-m8",
91
+ "eng.eng.03.009.010.1080.mp4": "MRTQ0gACv04",
92
+ "fra.fra.03.009.001.1080.mp4": "WUKOlWoOZ_c",
93
+ "fra.fra.03.009.002.1080.mp4": "MndcXkkwNmo",
94
+ "fra.fra.03.009.003.1080.mp4": "oMvtBpAx5es",
95
+ "fra.fra.03.009.004.1080.mp4": "JeKurCUNkno",
96
+ "fra.fra.03.009.005.1080.mp4": "AsJoyldBPzo",
97
+ "fra.fra.03.009.006.1080.mp4": "gjGpSTY0Tco",
98
+ "fra.fra.03.009.007.1080.mp4": "S7-i_1VuX1A",
99
+ "fra.fra.03.009.008.1080.mp4": "KXzZHgFoW08",
100
+ "fra.fra.03.009.009.1080.mp4": "_xa2t4MYEIM",
101
+ "fra.fra.03.009.010.1080.mp4": "HIp0nlk02RI",
102
+ "hic.hin.03.009.001.1080.mp4": "RRNaarmkFVE",
103
+ "hic.hin.03.009.002.1080.mp4": "EYPpbtejFY0",
104
+ "hic.hin.03.009.003.1080.mp4": "FpUspFzfn7o",
105
+ "hic.hin.03.009.004.1080.mp4": "gasN-4BNMUU",
106
+ "hic.hin.03.009.005.1080.mp4": "TYz9iUf3teQ",
107
+ "hic.hin.03.009.006.1080.mp4": "dNHjMnHXHrA",
108
+ "hic.hin.03.009.007.1080.mp4": "4aQHzQP4HQA",
109
+ "hic.hin.03.009.008.1080.mp4": "cw6v5Y-PBSE",
110
+ "hic.hin.03.009.009.1080.mp4": "gyLC_g4gcsw",
111
+ "hic.hin.03.009.010.1080.mp4": "1SfKZHh8bkQ",
112
+ "hin.hin.03.009.001.1080.mp4": "bBUidIjNRQ8",
113
+ "hin.hin.03.009.002.1080.mp4": "9YRT4F2Ui0Y",
114
+ "hin.hin.03.009.003.1080.mp4": "HrNfxSYkUvc",
115
+ "hin.hin.03.009.004.1080.mp4": "hwmyIgrRRiI",
116
+ "hin.hin.03.009.005.1080.mp4": "iIrpuFSZGag",
117
+ "hin.hin.03.009.006.1080.mp4": "MR7z2i65Clw",
118
+ "hin.hin.03.009.007.1080.mp4": "fa28wMUuycI",
119
+ "hin.hin.03.009.008.1080.mp4": "MB8Dkx7L4sE",
120
+ "hin.hin.03.009.009.1080.mp4": "PeZcYLX4qnI",
121
+ "hin.hin.03.009.010.1080.mp4": "RH65gD0SkIQ",
122
+ "khm.khm.03.009.001.1080.mp4": "MGwtvmJlty0",
123
+ "khm.khm.03.009.002.1080.mp4": "XX2HZteTsdc",
124
+ "khm.khm.03.009.003.1080.mp4": "AwiexkffmTM",
125
+ "khm.khm.03.009.004.1080.mp4": "6Xj537vv6is",
126
+ "khm.khm.03.009.005.1080.mp4": "MUkOlrW91iE",
127
+ "khm.khm.03.009.006.1080.mp4": "DdQtSTOwGss",
128
+ "khm.khm.03.009.007.1080.mp4": "OVIX828pqXM",
129
+ "khm.khm.03.009.008.1080.mp4": "2AscxJWsbgk",
130
+ "khm.khm.03.009.009.1080.mp4": "Py7KldSBX_A",
131
+ "khm.khm.03.009.010.1080.mp4": "eq5fiLpBXOk",
132
+ "ron.ron.03.009.001.1080.mp4": "S1LDE9Mr0I4",
133
+ "ron.ron.03.009.002.1080.mp4": "M5Q_N8U6BAs",
134
+ "ron.ron.03.009.003.1080.mp4": "7ZgTHaYnVeQ",
135
+ "ron.ron.03.009.004.1080.mp4": "g6gIGLE9dEA",
136
+ "ron.ron.03.009.005.1080.mp4": "zCgNgFiAcLI",
137
+ "ron.ron.03.009.006.1080.mp4": "scUeJJdulXs",
138
+ "ron.ron.03.009.007.1080.mp4": "zSZqiMMldRQ",
139
+ "ron.ron.03.009.008.1080.mp4": "Xvear1gXUKc",
140
+ "ron.ron.03.009.009.1080.mp4": "wvlWELhyYtE",
141
+ "ron.ron.03.009.010.1080.mp4": "-Nc1VJCuffU",
142
+ "shf.shi.03.009.001.1080.mp4": "h48SaQTm2zQ",
143
+ "shf.shi.03.009.002.1080.mp4": "qvtJYGNUCiQ",
144
+ "shf.shi.03.009.003.1080.mp4": "VRVTlD3Lxnc",
145
+ "shf.shi.03.009.004.1080.mp4": "tSXwf8FCYJw",
146
+ "shf.shi.03.009.005.1080.mp4": "F70e8ct-l9Y",
147
+ "shf.shi.03.009.006.1080.mp4": "jayFaqrGKuY",
148
+ "shf.shi.03.009.007.1080.mp4": "Ydx2sMftBws",
149
+ "shf.shi.03.009.008.1080.mp4": "kF--bNaq7lE",
150
+ "shf.shi.03.009.009.1080.mp4": "om8NoFX5Sss",
151
+ "shf.shi.03.009.010.1080.mp4": "vRUo_7bMNHo",
152
+ "shi.shi.03.009.001.1080.mp4": "LG2fIuUnbVc",
153
+ "shi.shi.03.009.002.1080.mp4": "6aotdbxjosE",
154
+ "shi.shi.03.009.003.1080.mp4": "UtGVARNrLbM",
155
+ "shi.shi.03.009.004.1080.mp4": "0JEIVZPwzfw",
156
+ "shi.shi.03.009.005.1080.mp4": "n1f4b-th6BM",
157
+ "shi.shi.03.009.006.1080.mp4": "uv_7KWR_rUI",
158
+ "shi.shi.03.009.007.1080.mp4": "NJ0400hMib8",
159
+ "shi.shi.03.009.008.1080.mp4": "Wa8-ud1eZ54",
160
+ "shi.shi.03.009.009.1080.mp4": "VgMKkO7uUVE",
161
+ "shi.shi.03.009.010.1080.mp4": "PVbE_Gh9ZSc",
162
+ "spa.spa.03.009.001.1080.mp4": "3Rg3Z4--emw",
163
+ "spa.spa.03.009.002.1080.mp4": "s5e9B8M-RzQ",
164
+ "spa.spa.03.009.003.1080.mp4": "IARwP6quJBM",
165
+ "spa.spa.03.009.004.1080.mp4": "jAdXX9jqcbA",
166
+ "spa.spa.03.009.005.1080.mp4": "WUrATEqlkR4",
167
+ "spa.spa.03.009.006.1080.mp4": "APZAwzfRr1I",
168
+ "spa.spa.03.009.007.1080.mp4": "V_SJ3GwtLRE",
169
+ "spa.spa.03.009.008.1080.mp4": "ZXfUhoeFLcU",
170
+ "spa.spa.03.009.009.1080.mp4": "MWxssi1eoqc",
171
+ "spa.spa.03.009.010.1080.mp4": "ynLBCcvx6ko",
172
+ "swe.swe.03.009.001.1080.mp4": "pin1kwuuQXg",
173
+ "swe.swe.03.009.002.1080.mp4": "t7kom6vhyP0",
174
+ "swe.swe.03.009.003.1080.mp4": "jV72mpv2Y48",
175
+ "swe.swe.03.009.004.1080.mp4": "XBao1xd5qDM",
176
+ "swe.swe.03.009.005.1080.mp4": "zdZO5Lde0wA",
177
+ "swe.swe.03.009.006.1080.mp4": "QzJshpukUwU",
178
+ "swe.swe.03.009.007.1080.mp4": "CsDFPrgfLNE",
179
+ "swe.swe.03.009.008.1080.mp4": "0KhjaqdDwvQ",
180
+ "swe.swe.03.009.009.1080.mp4": "B46fL-wvFYw",
181
+ "swe.swe.03.009.010.1080.mp4": "SZb4VAAX_WY",
182
+ "tur.tur.03.009.001.1080.mp4": "uZbm0PTY59I",
183
+ "tur.tur.03.009.002.1080.mp4": "tPUP9SJ-QwI",
184
+ "tur.tur.03.009.003.1080.mp4": "Q5cb6yaCUds",
185
+ "tur.tur.03.009.004.1080.mp4": "iP9y5mBQGxs",
186
+ "tur.tur.03.009.005.1080.mp4": "6f1rQFxdAKA",
187
+ "tur.tur.03.009.006.1080.mp4": "lYN3Gas1bCc",
188
+ "tur.tur.03.009.007.1080.mp4": "y55uum0oHBM",
189
+ "tur.tur.03.009.008.1080.mp4": "WI9kRE8aCOc",
190
+ "tur.tur.03.009.009.1080.mp4": "an59LRhUgaE",
191
+ "tur.tur.03.009.010.1080.mp4": "WN8pKrtyXGE",
192
+ "tzm.ara.03.009.001.1080.mp4": "mgxHzCJ0iHQ",
193
+ "tzm.ara.03.009.002.1080.mp4": "DLEeGAvEtec",
194
+ "tzm.ara.03.009.003.1080.mp4": "n8SVUGnzdSo",
195
+ "tzm.ara.03.009.004.1080.mp4": "8lCFrWH4AsQ",
196
+ "tzm.ara.03.009.005.1080.mp4": "U-YFTHg0CY0",
197
+ "tzm.ara.03.009.006.1080.mp4": "Os-IpNQ7MNM",
198
+ "tzm.ara.03.009.007.1080.mp4": "_vf4W2rrETk",
199
+ "tzm.ara.03.009.008.1080.mp4": "vMqkUTNjJ3s",
200
+ "tzm.ara.03.009.009.1080.mp4": "D0P-j9DlEEw",
201
+ "tzm.ara.03.009.010.1080.mp4": "WJ78izyn12w",
202
+ "tzm.ary.03.009.001.1080.mp4": "SGW0l5WwWzI",
203
+ "tzm.ary.03.009.002.1080.mp4": "AfzSpwDIqOM",
204
+ "tzm.ary.03.009.003.1080.mp4": "PZV-0ADfEA4",
205
+ "tzm.ary.03.009.004.1080.mp4": "E34gHf_qeSY",
206
+ "tzm.ary.03.009.005.1080.mp4": "rMWFMzuFrLA",
207
+ "tzm.ary.03.009.006.1080.mp4": "LURHJe-C-PY",
208
+ "tzm.ary.03.009.007.1080.mp4": "cid-RqyfR0o",
209
+ "tzm.ary.03.009.008.1080.mp4": "VKhlHTCsNoo",
210
+ "tzm.ary.03.009.009.1080.mp4": "v0UKTVK3xIc",
211
+ "tzm.ary.03.009.010.1080.mp4": "RdQn8LVJQ3A",
212
+ "tzm.eng.03.009.001.1080.mp4": "c0b-SpssbF4",
213
+ "tzm.eng.03.009.002.1080.mp4": "gAj65Zp-kmo",
214
+ "tzm.eng.03.009.003.1080.mp4": "y4DRad8u8Ps",
215
+ "tzm.eng.03.009.004.1080.mp4": "2bnrlBc9YPk",
216
+ "tzm.eng.03.009.005.1080.mp4": "ey79535FkSo",
217
+ "tzm.eng.03.009.006.1080.mp4": "s2bCJ9_nAIs",
218
+ "tzm.eng.03.009.007.1080.mp4": "CdRSIGf6jJc",
219
+ "tzm.eng.03.009.008.1080.mp4": "nqF_uwot-9Q",
220
+ "tzm.eng.03.009.009.1080.mp4": "9S0H15BYITY",
221
+ "tzm.eng.03.009.010.1080.mp4": "lhn0PvTX9nY",
222
+ "tzm.fra.03.009.001.1080.mp4": "8ATpaR3LZEY",
223
+ "tzm.fra.03.009.002.1080.mp4": "ZzPL4syuLyg",
224
+ "tzm.fra.03.009.003.1080.mp4": "fXpKxptysG8",
225
+ "tzm.fra.03.009.004.1080.mp4": "s8qJBlUZq1g",
226
+ "tzm.fra.03.009.005.1080.mp4": "a45bnUcVPBE",
227
+ "tzm.fra.03.009.006.1080.mp4": "X36T78A_Wz0",
228
+ "tzm.fra.03.009.007.1080.mp4": "50A9xSZJLsI",
229
+ "tzm.fra.03.009.008.1080.mp4": "HcA-dbBadoA",
230
+ "tzm.fra.03.009.009.1080.mp4": "wXisUXfthnU",
231
+ "tzm.fra.03.009.010.1080.mp4": "B3ndi20MbEU",
232
+ "rus.rus.03.009.001.1080.mp4": "H9cHu7c0xkU",
233
+ "rus.rus.03.009.002.1080.mp4": "VTH1NNET8w0",
234
+ "rus.rus.03.009.003.1080.mp4": "WO6MlCZ7lt4",
235
+ "rus.rus.03.009.004.1080.mp4": "PFN463wwzC0",
236
+ "rus.rus.03.009.005.1080.mp4": "dd7wfeLMBsU",
237
+ "rus.rus.03.009.006.1080.mp4": "vDvUbfWT34A",
238
+ "rus.rus.03.009.007.1080.mp4": "36Wb_WwV_F0",
239
+ "rus.rus.03.009.008.1080.mp4": "owe2aR1kvzw",
240
+ "rus.rus.03.009.009.1080.mp4": "gext84YEANs",
241
+ "rus.rus.03.009.010.1080.mp4": "hP9IysgcDI4",
242
+ "por.por.03.009.001.1080.mp4": "OEovxN59MEM",
243
+ "por.por.03.009.002.1080.mp4": "qNb_nBjdhbA",
244
+ "por.por.03.009.003.1080.mp4": "ocsSY_KWAWk",
245
+ "por.por.03.009.004.1080.mp4": "LFmGVVsZl6A",
246
+ "por.por.03.009.005.1080.mp4": "GDnpHPAxpOs",
247
+ "por.por.03.009.006.1080.mp4": "A0eJnewEkw0",
248
+ "por.por.03.009.007.1080.mp4": "BlP5BYPkRxY",
249
+ "por.por.03.009.008.1080.mp4": "OPDf7SkTxfo",
250
+ "por.por.03.009.009.1080.mp4": "t9gNQX6nYSM",
251
+ "por.por.03.009.010.1080.mp4": "fv83QTtZw8c",
252
+ "mfe.fra.03.009.001.1080.mp4": "ZoOXZPAfKNg",
253
+ "mfe.fra.03.009.002.1080.mp4": "OYlbIDAA1DE",
254
+ "mfe.fra.03.009.003.1080.mp4": "k-5LzA1a-5g",
255
+ "mfe.fra.03.009.004.1080.mp4": "PyRsVuhyB4I",
256
+ "mfe.fra.03.009.005.1080.mp4": "w3uvW1oIzq8",
257
+ "mfe.fra.03.009.006.1080.mp4": "8j7ispGTF-o",
258
+ "mfe.fra.03.009.007.1080.mp4": "VYiclt582T0",
259
+ "mfe.fra.03.009.008.1080.mp4": "DQo0kWNaMS4",
260
+ "mfe.fra.03.009.009.1080.mp4": "UlHwZEG5e3s",
261
+ "mfe.fra.03.009.010.1080.mp4": "cIrZhTwwPEc"
262
+ }
@@ -0,0 +1,8 @@
1
+ declare const listNumbers: {
2
+ newsletter: number;
3
+ volunteer: number;
4
+ 'dm-course': number;
5
+ };
6
+ export declare function addToACList(token: string, baseUrl: string, email: string, list: keyof typeof listNumbers, name?: string): Promise<void>;
7
+ export declare function getContactsInList(token: string, baseUrl: string, list: keyof typeof listNumbers, limit?: number): Promise<string[]>;
8
+ export {};
@@ -0,0 +1,97 @@
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.addToACList = addToACList;
7
+ exports.getContactsInList = getContactsInList;
8
+ const signale_1 = __importDefault(require("signale"));
9
+ const listNumbers = {
10
+ newsletter: 3,
11
+ volunteer: 5,
12
+ 'dm-course': 9,
13
+ };
14
+ async function addToACList(token, baseUrl, email, list, name) {
15
+ const headers = { 'Api-Token': token, 'Content-Type': 'application/json' };
16
+ const url = `${baseUrl}/api/3`;
17
+ const findContact = await fetch(`${url}/contacts?email=${email}`, {
18
+ method: 'GET',
19
+ headers,
20
+ });
21
+ const findContactJson = await findContact.json();
22
+ if (!findContact.ok) {
23
+ throw new Error(`Failed to retrieve contact with ${email}. ${JSON.stringify(findContactJson)}`);
24
+ }
25
+ let contactId;
26
+ if (findContactJson.contacts.length > 0) {
27
+ contactId = findContactJson.contacts[0].id;
28
+ }
29
+ else {
30
+ const createContact = await fetch(`${url}/contacts`, {
31
+ method: 'POST',
32
+ headers,
33
+ body: JSON.stringify({
34
+ contact: { email, name },
35
+ }),
36
+ });
37
+ const createContactJson = await createContact.json();
38
+ if (!createContact.ok) {
39
+ throw new Error(`Failed to create new contact with ${email}. ${JSON.stringify(createContactJson)}`);
40
+ }
41
+ signale_1.default.success(`Created new AC contact with email ${email}.`);
42
+ contactId = createContactJson.contact.id;
43
+ }
44
+ const subscribe = await fetch(`${url}/contactLists`, {
45
+ method: 'POST',
46
+ headers: { 'Api-Token': token, 'Content-Type': 'application/json' },
47
+ body: JSON.stringify({
48
+ contactList: {
49
+ list: listNumbers[list],
50
+ status: 1,
51
+ contact: contactId,
52
+ },
53
+ }),
54
+ });
55
+ const subscribeJson = await subscribe.json();
56
+ if (!subscribe.ok) {
57
+ throw new Error(`Failed to add contact to list ${list}. Response: ${JSON.stringify(subscribeJson)}`);
58
+ }
59
+ signale_1.default.success(`${email} added to AC list ${list}.`);
60
+ }
61
+ async function getContactsInList(token, baseUrl, list, limit = 100) {
62
+ const headers = { 'Api-Token': token, 'Content-Type': 'application/json' };
63
+ const url = `${baseUrl}/api/3`;
64
+ const allEmails = [];
65
+ let lastContactId = null;
66
+ let hasMoreContacts = true;
67
+ while (hasMoreContacts) {
68
+ let requestUrl = `${url}/contacts?listid=${listNumbers[list]}&orders[id]=ASC&limit=${limit}`;
69
+ if (lastContactId) {
70
+ requestUrl += `&id_greater=${lastContactId}`;
71
+ }
72
+ const response = await fetch(requestUrl, {
73
+ method: 'GET',
74
+ headers,
75
+ });
76
+ const data = await response.json();
77
+ if (!response.ok) {
78
+ throw new Error(`Failed to retrieve contacts in list ${list}. ${JSON.stringify(data)}`);
79
+ }
80
+ const contacts = data.contacts || [];
81
+ if (contacts.length === 0) {
82
+ hasMoreContacts = false;
83
+ }
84
+ else {
85
+ // Add emails from this batch
86
+ const emails = contacts.map((contact) => contact.email);
87
+ allEmails.push(...emails);
88
+ // Update the last contact ID for next iteration
89
+ lastContactId = contacts[contacts.length - 1].id;
90
+ // If we got fewer contacts than the limit, we've reached the end
91
+ if (contacts.length < limit) {
92
+ hasMoreContacts = false;
93
+ }
94
+ }
95
+ }
96
+ return allEmails;
97
+ }
@@ -0,0 +1,15 @@
1
+ import type { BibleStatuses } from '../data/typescript/bibleStatuses';
2
+ export declare const OLD_TESTAMENT_BOOKS: Set<string>;
3
+ export declare const NEW_TESTAMENT_BOOKS: Set<string>;
4
+ /**
5
+ * Expands an optimized chapter list back to individual chapters Converts book
6
+ * names (e.g., "GEN") back to all chapters (e.g., ["GEN.1", "GEN.2", ..."])
7
+ * Converts testament names ("OT", "NT") back to all chapters in that testament
8
+ * Leaves individual chapters unchanged
9
+ *
10
+ * @param optimizedChapters - Array that may contain testament IDs, book IDs, or
11
+ * chapter IDs
12
+ * @returns Array of individual chapter IDs in canonical order
13
+ */
14
+ export declare function getAvailableChapters(bibleId: string, type: keyof BibleStatuses[string]): string[];
15
+ export declare function getPercentage(bibleId: string, type: keyof BibleStatuses[string]): number;
@@ -0,0 +1,231 @@
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.NEW_TESTAMENT_BOOKS = exports.OLD_TESTAMENT_BOOKS = void 0;
7
+ exports.getAvailableChapters = getAvailableChapters;
8
+ exports.getPercentage = getPercentage;
9
+ const bibleChaptersList_1 = __importDefault(require("../data/bibleResources/bibleChaptersList"));
10
+ const bibleStatuses_1 = __importDefault(require("../data/bibleStatuses"));
11
+ // Old Testament books
12
+ exports.OLD_TESTAMENT_BOOKS = new Set([
13
+ 'GEN',
14
+ 'EXO',
15
+ 'LEV',
16
+ 'NUM',
17
+ 'DEU',
18
+ 'JOS',
19
+ 'JDG',
20
+ 'RUT',
21
+ '1SA',
22
+ '2SA',
23
+ '1KI',
24
+ '2KI',
25
+ '1CH',
26
+ '2CH',
27
+ 'EZR',
28
+ 'NEH',
29
+ 'EST',
30
+ 'JOB',
31
+ 'PSA',
32
+ 'PRO',
33
+ 'ECC',
34
+ 'SNG',
35
+ 'ISA',
36
+ 'JER',
37
+ 'LAM',
38
+ 'EZK',
39
+ 'DAN',
40
+ 'HOS',
41
+ 'JOL',
42
+ 'AMO',
43
+ 'OBA',
44
+ 'JON',
45
+ 'MIC',
46
+ 'NAM',
47
+ 'HAB',
48
+ 'ZEP',
49
+ 'HAG',
50
+ 'ZEC',
51
+ 'MAL',
52
+ ]);
53
+ // New Testament books
54
+ exports.NEW_TESTAMENT_BOOKS = new Set([
55
+ 'MAT',
56
+ 'MRK',
57
+ 'LUK',
58
+ 'JHN',
59
+ 'ACT',
60
+ 'ROM',
61
+ '1CO',
62
+ '2CO',
63
+ 'GAL',
64
+ 'EPH',
65
+ 'PHP',
66
+ 'COL',
67
+ '1TH',
68
+ '2TH',
69
+ '1TI',
70
+ '2TI',
71
+ 'TIT',
72
+ 'PHM',
73
+ 'HEB',
74
+ 'JAS',
75
+ '1PE',
76
+ '2PE',
77
+ '1JN',
78
+ '2JN',
79
+ '3JN',
80
+ 'JUD',
81
+ 'REV',
82
+ ]);
83
+ const bookLengths = new Map([
84
+ ['GEN', 50],
85
+ ['EXO', 40],
86
+ ['LEV', 27],
87
+ ['NUM', 36],
88
+ ['DEU', 34],
89
+ ['JOS', 24],
90
+ ['JDG', 21],
91
+ ['RUT', 4],
92
+ ['1SA', 31],
93
+ ['2SA', 24],
94
+ ['1KI', 22],
95
+ ['2KI', 25],
96
+ ['1CH', 29],
97
+ ['2CH', 36],
98
+ ['EZR', 10],
99
+ ['NEH', 13],
100
+ ['EST', 10],
101
+ ['JOB', 42],
102
+ ['PSA', 150],
103
+ ['PRO', 31],
104
+ ['ECC', 12],
105
+ ['SNG', 8],
106
+ ['ISA', 66],
107
+ ['JER', 52],
108
+ ['LAM', 5],
109
+ ['EZK', 48],
110
+ ['DAN', 12],
111
+ ['HOS', 14],
112
+ ['JOL', 3],
113
+ ['AMO', 9],
114
+ ['OBA', 1],
115
+ ['JON', 4],
116
+ ['MIC', 7],
117
+ ['NAM', 3],
118
+ ['HAB', 3],
119
+ ['ZEP', 3],
120
+ ['HAG', 2],
121
+ ['ZEC', 14],
122
+ ['MAL', 4],
123
+ ['MAT', 28],
124
+ ['MRK', 16],
125
+ ['LUK', 24],
126
+ ['JHN', 21],
127
+ ['ACT', 28],
128
+ ['ROM', 16],
129
+ ['1CO', 16],
130
+ ['2CO', 13],
131
+ ['GAL', 6],
132
+ ['EPH', 6],
133
+ ['PHP', 4],
134
+ ['COL', 4],
135
+ ['1TH', 5],
136
+ ['2TH', 3],
137
+ ['1TI', 6],
138
+ ['2TI', 4],
139
+ ['TIT', 3],
140
+ ['PHM', 1],
141
+ ['HEB', 13],
142
+ ['JAS', 5],
143
+ ['1PE', 5],
144
+ ['2PE', 3],
145
+ ['1JN', 5],
146
+ ['2JN', 1],
147
+ ['3JN', 1],
148
+ ['JUD', 1],
149
+ ['REV', 22],
150
+ ]);
151
+ /**
152
+ * Expands an optimized chapter list back to individual chapters Converts book
153
+ * names (e.g., "GEN") back to all chapters (e.g., ["GEN.1", "GEN.2", ..."])
154
+ * Converts testament names ("OT", "NT") back to all chapters in that testament
155
+ * Leaves individual chapters unchanged
156
+ *
157
+ * @param optimizedChapters - Array that may contain testament IDs, book IDs, or
158
+ * chapter IDs
159
+ * @returns Array of individual chapter IDs in canonical order
160
+ */
161
+ function getAvailableChapters(bibleId, type) {
162
+ if (type === 'bookNames')
163
+ return []; // bookNames do not have chapters
164
+ const optimizedChapters = bibleStatuses_1.default[bibleId]?.[type] || [];
165
+ if (optimizedChapters.length === 0)
166
+ return [];
167
+ // Build a Set of included items for O(1) lookup
168
+ const includedSet = new Set(optimizedChapters);
169
+ // Check if we need OT/NT expansion
170
+ const hasOT = includedSet.has('OT');
171
+ const hasNT = includedSet.has('NT');
172
+ // If we have both OT and NT, we have the complete Bible - just return all chapters
173
+ if (hasOT && hasNT) {
174
+ return bibleChaptersList_1.default.slice();
175
+ }
176
+ // Pre-calculate which books to include
177
+ const includedBooks = new Set();
178
+ if (hasOT) {
179
+ exports.OLD_TESTAMENT_BOOKS.forEach((book) => includedBooks.add(book));
180
+ }
181
+ if (hasNT) {
182
+ exports.NEW_TESTAMENT_BOOKS.forEach((book) => includedBooks.add(book));
183
+ }
184
+ // Add individual books from the optimized list
185
+ for (const entry of optimizedChapters) {
186
+ if (entry !== 'OT' && entry !== 'NT' && !entry.includes('.')) {
187
+ includedBooks.add(entry);
188
+ }
189
+ }
190
+ // Filter bibleChaptersList to only include relevant chapters
191
+ // This maintains canonical order without needing to sort
192
+ const result = [];
193
+ for (const chapter of bibleChaptersList_1.default) {
194
+ // Check if this specific chapter is included
195
+ if (includedSet.has(chapter)) {
196
+ result.push(chapter);
197
+ continue;
198
+ }
199
+ // Check if this chapter's book is included
200
+ const bookId = chapter.split('.')[0];
201
+ if (includedBooks.has(bookId)) {
202
+ result.push(chapter);
203
+ }
204
+ }
205
+ return result;
206
+ }
207
+ function getPercentage(bibleId, type) {
208
+ if (type === 'bookNames')
209
+ return 0; // bookNames do not have chapters
210
+ const optimizedChapters = bibleStatuses_1.default[bibleId]?.[type] || [];
211
+ let total = 0;
212
+ optimizedChapters.forEach((entry) => {
213
+ if (entry === 'OT') {
214
+ // All Old Testament books
215
+ total += 929;
216
+ }
217
+ else if (entry === 'NT') {
218
+ // All New Testament books
219
+ total += 260;
220
+ }
221
+ else if (entry.includes('.')) {
222
+ // It's already a chapter ID, count as 1
223
+ total += 1;
224
+ }
225
+ else {
226
+ // It's a book ID, add its chapter count
227
+ total += bookLengths.get(entry) || 0;
228
+ }
229
+ });
230
+ return (total / 1189) * 100;
231
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Map of project names to their Crowdin ids. Can be retrieved by going to the
3
+ * project's dashboard in Crowdin and looking on the right side panel for ID:
4
+ * XXXXXX next to "Details".
5
+ */
6
+ export declare const crowdinProjectIds: {
7
+ website: string;
8
+ app: string;
9
+ dmc: string;
10
+ };
11
+ interface DownloadTranslationsParams {
12
+ /** The name of the project to download translations for. */
13
+ project: keyof typeof crowdinProjectIds;
14
+ /**
15
+ * The folder where translations are stored. Source translations are assumed
16
+ * to be stored in `translationsFolder/eng/*.json`.
17
+ */
18
+ translationsFolder: string;
19
+ /** The Crowdin personal access token to use for authentication. */
20
+ token: string;
21
+ }
22
+ /** Downloads translations from Crowdin for a given project ID and source path. */
23
+ export declare function downloadTranslations({ project, translationsFolder, token, }: DownloadTranslationsParams): void;
24
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.crowdinProjectIds = void 0;
4
+ exports.downloadTranslations = downloadTranslations;
5
+ const node_child_process_1 = require("node:child_process");
6
+ /**
7
+ * Map of project names to their Crowdin ids. Can be retrieved by going to the
8
+ * project's dashboard in Crowdin and looking on the right side panel for ID:
9
+ * XXXXXX next to "Details".
10
+ */
11
+ exports.crowdinProjectIds = {
12
+ website: '698737',
13
+ app: '549537',
14
+ dmc: '663528',
15
+ };
16
+ /** Downloads translations from Crowdin for a given project ID and source path. */
17
+ function downloadTranslations({ project, translationsFolder, token, }) {
18
+ (0, node_child_process_1.spawnSync)([
19
+ 'npx @crowdin/cli download translations',
20
+ `-i ${exports.crowdinProjectIds[project]}`,
21
+ `-s eng/*.json`,
22
+ // Add Crowdin token present in .env file.
23
+ `-T ${token}`,
24
+ // Set the base path for which the other paths will be relative to.
25
+ `--base-path="${translationsFolder}"`,
26
+ // Where to download translations to relative to the base path.
27
+ '-t "/%three_letters_code%/%original_file_name%"',
28
+ // Skip untranslated files to avoid downloading empty files.
29
+ '--skip-untranslated-files',
30
+ ].join(' '), {
31
+ shell: true,
32
+ stdio: 'inherit',
33
+ });
34
+ }