youtube-transcript-nodejs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +337 -0
  3. package/dist/cjs/api/InnerTubeClient.js +236 -0
  4. package/dist/cjs/api/InnerTubeClient.js.map +1 -0
  5. package/dist/cjs/api/YouTubeTranscriptApi.js +160 -0
  6. package/dist/cjs/api/YouTubeTranscriptApi.js.map +1 -0
  7. package/dist/cjs/api/fetchStrategies.js +51 -0
  8. package/dist/cjs/api/fetchStrategies.js.map +1 -0
  9. package/dist/cjs/config/constants.js +34 -0
  10. package/dist/cjs/config/constants.js.map +1 -0
  11. package/dist/cjs/config/innerTubeContext.js +82 -0
  12. package/dist/cjs/config/innerTubeContext.js.map +1 -0
  13. package/dist/cjs/errors/BotDetected.js +20 -0
  14. package/dist/cjs/errors/BotDetected.js.map +1 -0
  15. package/dist/cjs/errors/FailedToCreateConsentCookie.js +17 -0
  16. package/dist/cjs/errors/FailedToCreateConsentCookie.js.map +1 -0
  17. package/dist/cjs/errors/InvalidVideoId.js +16 -0
  18. package/dist/cjs/errors/InvalidVideoId.js.map +1 -0
  19. package/dist/cjs/errors/IpBlocked.js +17 -0
  20. package/dist/cjs/errors/IpBlocked.js.map +1 -0
  21. package/dist/cjs/errors/NoTranscriptFound.js +23 -0
  22. package/dist/cjs/errors/NoTranscriptFound.js.map +1 -0
  23. package/dist/cjs/errors/NotTranslatable.js +15 -0
  24. package/dist/cjs/errors/NotTranslatable.js.map +1 -0
  25. package/dist/cjs/errors/PoTokenRequired.js +18 -0
  26. package/dist/cjs/errors/PoTokenRequired.js.map +1 -0
  27. package/dist/cjs/errors/TooManyRequests.js +19 -0
  28. package/dist/cjs/errors/TooManyRequests.js.map +1 -0
  29. package/dist/cjs/errors/TranscriptsDisabled.js +15 -0
  30. package/dist/cjs/errors/TranscriptsDisabled.js.map +1 -0
  31. package/dist/cjs/errors/TranslationLanguageNotAvailable.js +16 -0
  32. package/dist/cjs/errors/TranslationLanguageNotAvailable.js.map +1 -0
  33. package/dist/cjs/errors/VideoUnavailable.js +15 -0
  34. package/dist/cjs/errors/VideoUnavailable.js.map +1 -0
  35. package/dist/cjs/errors/VideoUnplayable.js +22 -0
  36. package/dist/cjs/errors/VideoUnplayable.js.map +1 -0
  37. package/dist/cjs/errors/YouTubeDataUnparsable.js +15 -0
  38. package/dist/cjs/errors/YouTubeDataUnparsable.js.map +1 -0
  39. package/dist/cjs/errors/YouTubeRequestFailed.js +18 -0
  40. package/dist/cjs/errors/YouTubeRequestFailed.js.map +1 -0
  41. package/dist/cjs/errors/YouTubeTranscriptError.js +19 -0
  42. package/dist/cjs/errors/YouTubeTranscriptError.js.map +1 -0
  43. package/dist/cjs/errors/index.js +34 -0
  44. package/dist/cjs/errors/index.js.map +1 -0
  45. package/dist/cjs/formatters/Formatter.js +3 -0
  46. package/dist/cjs/formatters/Formatter.js.map +1 -0
  47. package/dist/cjs/formatters/JSONFormatter.js +24 -0
  48. package/dist/cjs/formatters/JSONFormatter.js.map +1 -0
  49. package/dist/cjs/formatters/PrettyPrintFormatter.js +26 -0
  50. package/dist/cjs/formatters/PrettyPrintFormatter.js.map +1 -0
  51. package/dist/cjs/formatters/SRTFormatter.js +39 -0
  52. package/dist/cjs/formatters/SRTFormatter.js.map +1 -0
  53. package/dist/cjs/formatters/TextFormatter.js +20 -0
  54. package/dist/cjs/formatters/TextFormatter.js.map +1 -0
  55. package/dist/cjs/formatters/WebVTTFormatter.js +39 -0
  56. package/dist/cjs/formatters/WebVTTFormatter.js.map +1 -0
  57. package/dist/cjs/formatters/base.js +61 -0
  58. package/dist/cjs/formatters/base.js.map +1 -0
  59. package/dist/cjs/formatters/index.js +19 -0
  60. package/dist/cjs/formatters/index.js.map +1 -0
  61. package/dist/cjs/http/cookieJar.js +91 -0
  62. package/dist/cjs/http/cookieJar.js.map +1 -0
  63. package/dist/cjs/http/httpClient.js +228 -0
  64. package/dist/cjs/http/httpClient.js.map +1 -0
  65. package/dist/cjs/index.js +50 -0
  66. package/dist/cjs/index.js.map +1 -0
  67. package/dist/cjs/models/FetchedTranscript.js +80 -0
  68. package/dist/cjs/models/FetchedTranscript.js.map +1 -0
  69. package/dist/cjs/models/FetchedTranscriptSnippet.js +29 -0
  70. package/dist/cjs/models/FetchedTranscriptSnippet.js.map +1 -0
  71. package/dist/cjs/models/FormattedTranscript.js +3 -0
  72. package/dist/cjs/models/FormattedTranscript.js.map +1 -0
  73. package/dist/cjs/models/Transcript.js +75 -0
  74. package/dist/cjs/models/Transcript.js.map +1 -0
  75. package/dist/cjs/models/TranscriptList.js +84 -0
  76. package/dist/cjs/models/TranscriptList.js.map +1 -0
  77. package/dist/cjs/models/TranscriptMetadata.js +3 -0
  78. package/dist/cjs/models/TranscriptMetadata.js.map +1 -0
  79. package/dist/cjs/models/TranslationLanguage.js +3 -0
  80. package/dist/cjs/models/TranslationLanguage.js.map +1 -0
  81. package/dist/cjs/models/index.js +13 -0
  82. package/dist/cjs/models/index.js.map +1 -0
  83. package/dist/cjs/package.json +1 -0
  84. package/dist/cjs/parsers/captionTrackParser.js +96 -0
  85. package/dist/cjs/parsers/captionTrackParser.js.map +1 -0
  86. package/dist/cjs/parsers/videoIdParser.js +65 -0
  87. package/dist/cjs/parsers/videoIdParser.js.map +1 -0
  88. package/dist/cjs/parsers/watchHtmlParser.js +78 -0
  89. package/dist/cjs/parsers/watchHtmlParser.js.map +1 -0
  90. package/dist/cjs/parsers/xmlTranscriptParser.js +84 -0
  91. package/dist/cjs/parsers/xmlTranscriptParser.js.map +1 -0
  92. package/dist/cjs/potoken/AutoPoTokenProvider.js +203 -0
  93. package/dist/cjs/potoken/AutoPoTokenProvider.js.map +1 -0
  94. package/dist/cjs/potoken/HttpPoTokenProvider.js +105 -0
  95. package/dist/cjs/potoken/HttpPoTokenProvider.js.map +1 -0
  96. package/dist/cjs/potoken/NoopPoTokenProvider.js +18 -0
  97. package/dist/cjs/potoken/NoopPoTokenProvider.js.map +1 -0
  98. package/dist/cjs/potoken/baseScriptCache.js +41 -0
  99. package/dist/cjs/potoken/baseScriptCache.js.map +1 -0
  100. package/dist/cjs/potoken/index.js +14 -0
  101. package/dist/cjs/potoken/index.js.map +1 -0
  102. package/dist/cjs/potoken/types.js +10 -0
  103. package/dist/cjs/potoken/types.js.map +1 -0
  104. package/dist/cjs/util/htmlSanitizer.js +77 -0
  105. package/dist/cjs/util/htmlSanitizer.js.map +1 -0
  106. package/dist/cjs/util/proxyUrl.js +42 -0
  107. package/dist/cjs/util/proxyUrl.js.map +1 -0
  108. package/dist/cjs/util/retry.js +65 -0
  109. package/dist/cjs/util/retry.js.map +1 -0
  110. package/dist/esm/api/InnerTubeClient.d.ts +61 -0
  111. package/dist/esm/api/InnerTubeClient.d.ts.map +1 -0
  112. package/dist/esm/api/InnerTubeClient.js +198 -0
  113. package/dist/esm/api/InnerTubeClient.js.map +1 -0
  114. package/dist/esm/api/YouTubeTranscriptApi.d.ts +88 -0
  115. package/dist/esm/api/YouTubeTranscriptApi.d.ts.map +1 -0
  116. package/dist/esm/api/YouTubeTranscriptApi.js +157 -0
  117. package/dist/esm/api/YouTubeTranscriptApi.js.map +1 -0
  118. package/dist/esm/api/fetchStrategies.d.ts +20 -0
  119. package/dist/esm/api/fetchStrategies.d.ts.map +1 -0
  120. package/dist/esm/api/fetchStrategies.js +48 -0
  121. package/dist/esm/api/fetchStrategies.js.map +1 -0
  122. package/dist/esm/config/constants.d.ts +30 -0
  123. package/dist/esm/config/constants.d.ts.map +1 -0
  124. package/dist/esm/config/constants.js +31 -0
  125. package/dist/esm/config/constants.js.map +1 -0
  126. package/dist/esm/config/innerTubeContext.d.ts +47 -0
  127. package/dist/esm/config/innerTubeContext.d.ts.map +1 -0
  128. package/dist/esm/config/innerTubeContext.js +77 -0
  129. package/dist/esm/config/innerTubeContext.js.map +1 -0
  130. package/dist/esm/errors/BotDetected.d.ts +13 -0
  131. package/dist/esm/errors/BotDetected.d.ts.map +1 -0
  132. package/dist/esm/errors/BotDetected.js +16 -0
  133. package/dist/esm/errors/BotDetected.js.map +1 -0
  134. package/dist/esm/errors/FailedToCreateConsentCookie.d.ts +10 -0
  135. package/dist/esm/errors/FailedToCreateConsentCookie.d.ts.map +1 -0
  136. package/dist/esm/errors/FailedToCreateConsentCookie.js +13 -0
  137. package/dist/esm/errors/FailedToCreateConsentCookie.js.map +1 -0
  138. package/dist/esm/errors/InvalidVideoId.d.ts +9 -0
  139. package/dist/esm/errors/InvalidVideoId.d.ts.map +1 -0
  140. package/dist/esm/errors/InvalidVideoId.js +12 -0
  141. package/dist/esm/errors/InvalidVideoId.js.map +1 -0
  142. package/dist/esm/errors/IpBlocked.d.ts +10 -0
  143. package/dist/esm/errors/IpBlocked.d.ts.map +1 -0
  144. package/dist/esm/errors/IpBlocked.js +13 -0
  145. package/dist/esm/errors/IpBlocked.js.map +1 -0
  146. package/dist/esm/errors/NoTranscriptFound.d.ts +19 -0
  147. package/dist/esm/errors/NoTranscriptFound.d.ts.map +1 -0
  148. package/dist/esm/errors/NoTranscriptFound.js +19 -0
  149. package/dist/esm/errors/NoTranscriptFound.js.map +1 -0
  150. package/dist/esm/errors/NotTranslatable.d.ts +9 -0
  151. package/dist/esm/errors/NotTranslatable.d.ts.map +1 -0
  152. package/dist/esm/errors/NotTranslatable.js +11 -0
  153. package/dist/esm/errors/NotTranslatable.js.map +1 -0
  154. package/dist/esm/errors/PoTokenRequired.d.ts +10 -0
  155. package/dist/esm/errors/PoTokenRequired.d.ts.map +1 -0
  156. package/dist/esm/errors/PoTokenRequired.js +14 -0
  157. package/dist/esm/errors/PoTokenRequired.js.map +1 -0
  158. package/dist/esm/errors/TooManyRequests.d.ts +12 -0
  159. package/dist/esm/errors/TooManyRequests.d.ts.map +1 -0
  160. package/dist/esm/errors/TooManyRequests.js +15 -0
  161. package/dist/esm/errors/TooManyRequests.js.map +1 -0
  162. package/dist/esm/errors/TranscriptsDisabled.d.ts +9 -0
  163. package/dist/esm/errors/TranscriptsDisabled.d.ts.map +1 -0
  164. package/dist/esm/errors/TranscriptsDisabled.js +11 -0
  165. package/dist/esm/errors/TranscriptsDisabled.js.map +1 -0
  166. package/dist/esm/errors/TranslationLanguageNotAvailable.d.ts +9 -0
  167. package/dist/esm/errors/TranslationLanguageNotAvailable.d.ts.map +1 -0
  168. package/dist/esm/errors/TranslationLanguageNotAvailable.js +12 -0
  169. package/dist/esm/errors/TranslationLanguageNotAvailable.js.map +1 -0
  170. package/dist/esm/errors/VideoUnavailable.d.ts +9 -0
  171. package/dist/esm/errors/VideoUnavailable.d.ts.map +1 -0
  172. package/dist/esm/errors/VideoUnavailable.js +11 -0
  173. package/dist/esm/errors/VideoUnavailable.js.map +1 -0
  174. package/dist/esm/errors/VideoUnplayable.d.ts +12 -0
  175. package/dist/esm/errors/VideoUnplayable.d.ts.map +1 -0
  176. package/dist/esm/errors/VideoUnplayable.js +18 -0
  177. package/dist/esm/errors/VideoUnplayable.js.map +1 -0
  178. package/dist/esm/errors/YouTubeDataUnparsable.d.ts +9 -0
  179. package/dist/esm/errors/YouTubeDataUnparsable.d.ts.map +1 -0
  180. package/dist/esm/errors/YouTubeDataUnparsable.js +11 -0
  181. package/dist/esm/errors/YouTubeDataUnparsable.js.map +1 -0
  182. package/dist/esm/errors/YouTubeRequestFailed.d.ts +10 -0
  183. package/dist/esm/errors/YouTubeRequestFailed.d.ts.map +1 -0
  184. package/dist/esm/errors/YouTubeRequestFailed.js +14 -0
  185. package/dist/esm/errors/YouTubeRequestFailed.js.map +1 -0
  186. package/dist/esm/errors/YouTubeTranscriptError.d.ts +10 -0
  187. package/dist/esm/errors/YouTubeTranscriptError.d.ts.map +1 -0
  188. package/dist/esm/errors/YouTubeTranscriptError.js +15 -0
  189. package/dist/esm/errors/YouTubeTranscriptError.js.map +1 -0
  190. package/dist/esm/errors/index.d.ts +17 -0
  191. package/dist/esm/errors/index.d.ts.map +1 -0
  192. package/dist/esm/errors/index.js +16 -0
  193. package/dist/esm/errors/index.js.map +1 -0
  194. package/dist/esm/formatters/Formatter.d.ts +33 -0
  195. package/dist/esm/formatters/Formatter.d.ts.map +1 -0
  196. package/dist/esm/formatters/Formatter.js +2 -0
  197. package/dist/esm/formatters/Formatter.js.map +1 -0
  198. package/dist/esm/formatters/JSONFormatter.d.ts +10 -0
  199. package/dist/esm/formatters/JSONFormatter.d.ts.map +1 -0
  200. package/dist/esm/formatters/JSONFormatter.js +20 -0
  201. package/dist/esm/formatters/JSONFormatter.js.map +1 -0
  202. package/dist/esm/formatters/PrettyPrintFormatter.d.ts +15 -0
  203. package/dist/esm/formatters/PrettyPrintFormatter.d.ts.map +1 -0
  204. package/dist/esm/formatters/PrettyPrintFormatter.js +22 -0
  205. package/dist/esm/formatters/PrettyPrintFormatter.js.map +1 -0
  206. package/dist/esm/formatters/SRTFormatter.d.ts +22 -0
  207. package/dist/esm/formatters/SRTFormatter.d.ts.map +1 -0
  208. package/dist/esm/formatters/SRTFormatter.js +35 -0
  209. package/dist/esm/formatters/SRTFormatter.js.map +1 -0
  210. package/dist/esm/formatters/TextFormatter.d.ts +10 -0
  211. package/dist/esm/formatters/TextFormatter.d.ts.map +1 -0
  212. package/dist/esm/formatters/TextFormatter.js +16 -0
  213. package/dist/esm/formatters/TextFormatter.js.map +1 -0
  214. package/dist/esm/formatters/WebVTTFormatter.d.ts +22 -0
  215. package/dist/esm/formatters/WebVTTFormatter.d.ts.map +1 -0
  216. package/dist/esm/formatters/WebVTTFormatter.js +35 -0
  217. package/dist/esm/formatters/WebVTTFormatter.js.map +1 -0
  218. package/dist/esm/formatters/base.d.ts +25 -0
  219. package/dist/esm/formatters/base.d.ts.map +1 -0
  220. package/dist/esm/formatters/base.js +55 -0
  221. package/dist/esm/formatters/base.js.map +1 -0
  222. package/dist/esm/formatters/index.d.ts +8 -0
  223. package/dist/esm/formatters/index.d.ts.map +1 -0
  224. package/dist/esm/formatters/index.js +7 -0
  225. package/dist/esm/formatters/index.js.map +1 -0
  226. package/dist/esm/http/cookieJar.d.ts +39 -0
  227. package/dist/esm/http/cookieJar.d.ts.map +1 -0
  228. package/dist/esm/http/cookieJar.js +87 -0
  229. package/dist/esm/http/cookieJar.js.map +1 -0
  230. package/dist/esm/http/httpClient.d.ts +88 -0
  231. package/dist/esm/http/httpClient.d.ts.map +1 -0
  232. package/dist/esm/http/httpClient.js +191 -0
  233. package/dist/esm/http/httpClient.js.map +1 -0
  234. package/dist/esm/index.d.ts +19 -0
  235. package/dist/esm/index.d.ts.map +1 -0
  236. package/dist/esm/index.js +14 -0
  237. package/dist/esm/index.js.map +1 -0
  238. package/dist/esm/models/FetchedTranscript.d.ts +49 -0
  239. package/dist/esm/models/FetchedTranscript.d.ts.map +1 -0
  240. package/dist/esm/models/FetchedTranscript.js +76 -0
  241. package/dist/esm/models/FetchedTranscript.js.map +1 -0
  242. package/dist/esm/models/FetchedTranscriptSnippet.d.ts +15 -0
  243. package/dist/esm/models/FetchedTranscriptSnippet.d.ts.map +1 -0
  244. package/dist/esm/models/FetchedTranscriptSnippet.js +25 -0
  245. package/dist/esm/models/FetchedTranscriptSnippet.js.map +1 -0
  246. package/dist/esm/models/FormattedTranscript.d.ts +9 -0
  247. package/dist/esm/models/FormattedTranscript.d.ts.map +1 -0
  248. package/dist/esm/models/FormattedTranscript.js +2 -0
  249. package/dist/esm/models/FormattedTranscript.js.map +1 -0
  250. package/dist/esm/models/Transcript.d.ts +36 -0
  251. package/dist/esm/models/Transcript.d.ts.map +1 -0
  252. package/dist/esm/models/Transcript.js +71 -0
  253. package/dist/esm/models/Transcript.js.map +1 -0
  254. package/dist/esm/models/TranscriptList.d.ts +48 -0
  255. package/dist/esm/models/TranscriptList.d.ts.map +1 -0
  256. package/dist/esm/models/TranscriptList.js +79 -0
  257. package/dist/esm/models/TranscriptList.js.map +1 -0
  258. package/dist/esm/models/TranscriptMetadata.d.ts +10 -0
  259. package/dist/esm/models/TranscriptMetadata.d.ts.map +1 -0
  260. package/dist/esm/models/TranscriptMetadata.js +2 -0
  261. package/dist/esm/models/TranscriptMetadata.js.map +1 -0
  262. package/dist/esm/models/TranslationLanguage.d.ts +8 -0
  263. package/dist/esm/models/TranslationLanguage.d.ts.map +1 -0
  264. package/dist/esm/models/TranslationLanguage.js +2 -0
  265. package/dist/esm/models/TranslationLanguage.js.map +1 -0
  266. package/dist/esm/models/index.d.ts +8 -0
  267. package/dist/esm/models/index.d.ts.map +1 -0
  268. package/dist/esm/models/index.js +5 -0
  269. package/dist/esm/models/index.js.map +1 -0
  270. package/dist/esm/package.json +1 -0
  271. package/dist/esm/parsers/captionTrackParser.d.ts +29 -0
  272. package/dist/esm/parsers/captionTrackParser.d.ts.map +1 -0
  273. package/dist/esm/parsers/captionTrackParser.js +91 -0
  274. package/dist/esm/parsers/captionTrackParser.js.map +1 -0
  275. package/dist/esm/parsers/videoIdParser.d.ts +11 -0
  276. package/dist/esm/parsers/videoIdParser.d.ts.map +1 -0
  277. package/dist/esm/parsers/videoIdParser.js +61 -0
  278. package/dist/esm/parsers/videoIdParser.js.map +1 -0
  279. package/dist/esm/parsers/watchHtmlParser.d.ts +33 -0
  280. package/dist/esm/parsers/watchHtmlParser.d.ts.map +1 -0
  281. package/dist/esm/parsers/watchHtmlParser.js +70 -0
  282. package/dist/esm/parsers/watchHtmlParser.js.map +1 -0
  283. package/dist/esm/parsers/xmlTranscriptParser.d.ts +17 -0
  284. package/dist/esm/parsers/xmlTranscriptParser.d.ts.map +1 -0
  285. package/dist/esm/parsers/xmlTranscriptParser.js +81 -0
  286. package/dist/esm/parsers/xmlTranscriptParser.js.map +1 -0
  287. package/dist/esm/potoken/AutoPoTokenProvider.d.ts +28 -0
  288. package/dist/esm/potoken/AutoPoTokenProvider.d.ts.map +1 -0
  289. package/dist/esm/potoken/AutoPoTokenProvider.js +166 -0
  290. package/dist/esm/potoken/AutoPoTokenProvider.js.map +1 -0
  291. package/dist/esm/potoken/HttpPoTokenProvider.d.ts +41 -0
  292. package/dist/esm/potoken/HttpPoTokenProvider.d.ts.map +1 -0
  293. package/dist/esm/potoken/HttpPoTokenProvider.js +101 -0
  294. package/dist/esm/potoken/HttpPoTokenProvider.js.map +1 -0
  295. package/dist/esm/potoken/NoopPoTokenProvider.d.ts +12 -0
  296. package/dist/esm/potoken/NoopPoTokenProvider.d.ts.map +1 -0
  297. package/dist/esm/potoken/NoopPoTokenProvider.js +14 -0
  298. package/dist/esm/potoken/NoopPoTokenProvider.js.map +1 -0
  299. package/dist/esm/potoken/baseScriptCache.d.ts +28 -0
  300. package/dist/esm/potoken/baseScriptCache.d.ts.map +1 -0
  301. package/dist/esm/potoken/baseScriptCache.js +37 -0
  302. package/dist/esm/potoken/baseScriptCache.js.map +1 -0
  303. package/dist/esm/potoken/index.d.ts +10 -0
  304. package/dist/esm/potoken/index.d.ts.map +1 -0
  305. package/dist/esm/potoken/index.js +6 -0
  306. package/dist/esm/potoken/index.js.map +1 -0
  307. package/dist/esm/potoken/types.d.ts +40 -0
  308. package/dist/esm/potoken/types.d.ts.map +1 -0
  309. package/dist/esm/potoken/types.js +7 -0
  310. package/dist/esm/potoken/types.js.map +1 -0
  311. package/dist/esm/util/htmlSanitizer.d.ts +21 -0
  312. package/dist/esm/util/htmlSanitizer.d.ts.map +1 -0
  313. package/dist/esm/util/htmlSanitizer.js +69 -0
  314. package/dist/esm/util/htmlSanitizer.js.map +1 -0
  315. package/dist/esm/util/proxyUrl.d.ts +22 -0
  316. package/dist/esm/util/proxyUrl.d.ts.map +1 -0
  317. package/dist/esm/util/proxyUrl.js +39 -0
  318. package/dist/esm/util/proxyUrl.js.map +1 -0
  319. package/dist/esm/util/retry.d.ts +37 -0
  320. package/dist/esm/util/retry.d.ts.map +1 -0
  321. package/dist/esm/util/retry.js +60 -0
  322. package/dist/esm/util/retry.js.map +1 -0
  323. package/package.json +111 -0
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.HttpClient = void 0;
37
+ const constants_js_1 = require("../config/constants.js");
38
+ const index_js_1 = require("../errors/index.js");
39
+ const proxyUrl_js_1 = require("../util/proxyUrl.js");
40
+ /**
41
+ * Thin HTTP client wrapper around global fetch.
42
+ *
43
+ * - Injects default User-Agent, Accept-Language, cookie headers
44
+ * - Honors a CookieJar (mutates it from `Set-Cookie` responses)
45
+ * - Supports proxy URLs via dynamic undici import (only loaded when needed)
46
+ * - Retries on 429
47
+ *
48
+ * Designed to be small and easily mockable for tests.
49
+ */
50
+ class HttpClient {
51
+ userAgent;
52
+ acceptLanguage;
53
+ defaultTimeoutMs;
54
+ cookies;
55
+ defaultHeaders;
56
+ proxyUrl;
57
+ fetchImpl;
58
+ retriesOn429;
59
+ proxyDispatcher;
60
+ constructor(config = {}) {
61
+ this.userAgent = config.userAgent ?? constants_js_1.DEFAULT_USER_AGENT;
62
+ this.acceptLanguage = config.acceptLanguage ?? constants_js_1.DEFAULT_ACCEPT_LANGUAGE;
63
+ this.defaultTimeoutMs = config.timeoutMs ?? constants_js_1.DEFAULT_REQUEST_TIMEOUT_MS;
64
+ this.cookies = config.cookies;
65
+ this.defaultHeaders = { ...config.defaultHeaders };
66
+ this.proxyUrl = config.proxyUrl;
67
+ this.fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis);
68
+ this.retriesOn429 = config.retriesOn429 ?? 3;
69
+ if (!this.fetchImpl) {
70
+ throw new Error('No fetch implementation available; pass fetchImpl or run on Node 18+');
71
+ }
72
+ }
73
+ /**
74
+ * Build full headers for a request, merging defaults + per-request + cookies.
75
+ */
76
+ buildHeaders(url, perRequest) {
77
+ const headers = new Headers();
78
+ headers.set('User-Agent', this.userAgent);
79
+ headers.set('Accept-Language', this.acceptLanguage);
80
+ for (const [k, v] of Object.entries(this.defaultHeaders)) {
81
+ headers.set(k, v);
82
+ }
83
+ if (perRequest) {
84
+ for (const [k, v] of Object.entries(perRequest)) {
85
+ headers.set(k, v);
86
+ }
87
+ }
88
+ if (this.cookies) {
89
+ const cookieHeader = this.cookies.headerForUrl(url);
90
+ if (cookieHeader)
91
+ headers.set('Cookie', cookieHeader);
92
+ }
93
+ return headers;
94
+ }
95
+ /**
96
+ * GET request.
97
+ */
98
+ async get(url, opts = {}) {
99
+ return this.request(url, { ...opts, method: 'GET' });
100
+ }
101
+ /**
102
+ * POST request with a JSON body.
103
+ */
104
+ async postJson(url, body, opts = {}) {
105
+ const headers = { ...(opts.headers ?? {}), 'Content-Type': 'application/json' };
106
+ return this.request(url, {
107
+ ...opts,
108
+ method: 'POST',
109
+ headers,
110
+ body: JSON.stringify(body),
111
+ });
112
+ }
113
+ /**
114
+ * Perform an HTTP request with retries on 429.
115
+ */
116
+ async request(url, opts = {}) {
117
+ const method = opts.method ?? 'GET';
118
+ const timeoutMs = opts.timeoutMs ?? this.defaultTimeoutMs;
119
+ const headers = this.buildHeaders(url, opts.headers);
120
+ const dispatcher = await this.maybeProxyDispatcher();
121
+ let lastErr;
122
+ const attempts = Math.max(1, this.retriesOn429);
123
+ for (let attempt = 1; attempt <= attempts; attempt++) {
124
+ const controller = new AbortController();
125
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
126
+ const onUserAbort = () => controller.abort();
127
+ opts.signal?.addEventListener('abort', onUserAbort, { once: true });
128
+ try {
129
+ const fetchOpts = {
130
+ method,
131
+ headers,
132
+ signal: controller.signal,
133
+ };
134
+ if (opts.body !== undefined)
135
+ fetchOpts.body = opts.body;
136
+ if (dispatcher)
137
+ fetchOpts.dispatcher = dispatcher;
138
+ const rawResponse = await this.fetchImpl(url, fetchOpts);
139
+ const response = await this.normalizeResponse(rawResponse);
140
+ // Capture Set-Cookie headers
141
+ if (this.cookies) {
142
+ const setCookies = this.extractSetCookies(rawResponse);
143
+ for (const sc of setCookies) {
144
+ this.cookies.ingestSetCookie(sc, url);
145
+ }
146
+ }
147
+ if (response.status === 429 && attempt < attempts) {
148
+ // Exponential backoff
149
+ await new Promise((r) => setTimeout(r, 200 * 2 ** (attempt - 1)));
150
+ continue;
151
+ }
152
+ return response;
153
+ }
154
+ catch (err) {
155
+ lastErr = err;
156
+ if (attempt >= attempts) {
157
+ if (err instanceof Error && err.name === 'AbortError') {
158
+ throw new index_js_1.YouTubeRequestFailed(url, 0, 'Request aborted (timeout)', url);
159
+ }
160
+ throw err;
161
+ }
162
+ await new Promise((r) => setTimeout(r, 200 * 2 ** (attempt - 1)));
163
+ }
164
+ finally {
165
+ clearTimeout(timeoutId);
166
+ opts.signal?.removeEventListener('abort', onUserAbort);
167
+ }
168
+ }
169
+ throw lastErr;
170
+ }
171
+ /**
172
+ * Wrap a raw `Response` so that `.json()` returns `unknown` and re-throwing
173
+ * makes the type usable in tests.
174
+ */
175
+ async normalizeResponse(raw) {
176
+ return {
177
+ status: raw.status,
178
+ statusText: raw.statusText,
179
+ ok: raw.ok,
180
+ text: () => raw.text(),
181
+ json: async () => {
182
+ try {
183
+ return await raw.json();
184
+ }
185
+ catch (err) {
186
+ throw new Error(`Failed to parse JSON response: ${err instanceof Error ? err.message : String(err)}`);
187
+ }
188
+ },
189
+ };
190
+ }
191
+ extractSetCookies(raw) {
192
+ // Response.headers.getSetCookie is Node 18.14+ / 19.7+
193
+ const fn = raw.headers.getSetCookie;
194
+ if (typeof fn === 'function') {
195
+ try {
196
+ return fn.call(raw.headers);
197
+ }
198
+ catch {
199
+ // ignore
200
+ }
201
+ }
202
+ const single = raw.headers.get('set-cookie');
203
+ return single ? [single] : [];
204
+ }
205
+ /**
206
+ * Lazily load undici and create a ProxyAgent when a proxy URL is configured.
207
+ * Returns `undefined` if no proxy is set.
208
+ */
209
+ async maybeProxyDispatcher() {
210
+ if (!this.proxyUrl)
211
+ return undefined;
212
+ if (this.proxyDispatcher)
213
+ return this.proxyDispatcher;
214
+ const parsed = (0, proxyUrl_js_1.parseProxyUrl)(this.proxyUrl);
215
+ if (!parsed) {
216
+ throw new Error(`Invalid proxy URL: ${this.proxyUrl}`);
217
+ }
218
+ // Dynamic import so `undici` stays optional.
219
+ const undici = (await Promise.resolve().then(() => __importStar(require('undici'))));
220
+ const agentUrl = this.proxyUrl.startsWith('http')
221
+ ? this.proxyUrl
222
+ : `${parsed.protocol}://${parsed.host}${parsed.port ? `:${parsed.port}` : ''}`;
223
+ this.proxyDispatcher = new undici.ProxyAgent(agentUrl);
224
+ return this.proxyDispatcher;
225
+ }
226
+ }
227
+ exports.HttpClient = HttpClient;
228
+ //# sourceMappingURL=httpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../../src/http/httpClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAIgC;AAChC,iDAA0D;AAC1D,qDAAoD;AA2CpD;;;;;;;;;GASG;AACH,MAAa,UAAU;IACJ,SAAS,CAAS;IAClB,cAAc,CAAS;IACvB,gBAAgB,CAAS;IACzB,OAAO,CAAwB;IAC/B,cAAc,CAAyB;IACvC,QAAQ,CAAqB;IAC7B,SAAS,CAAe;IACxB,YAAY,CAAS;IAC9B,eAAe,CAAsB;IAE7C,YAAY,SAA2B,EAAE;QACvC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,iCAAkB,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,sCAAuB,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,IAAI,yCAA0B,CAAC;QACvE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,GAAW,EAAE,UAAmC;QACnE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,YAAY;gBAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAAuB,EAAE;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,IAAa,EAAE,OAAuB,EAAE;QAClE,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACvB,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,OAAuB,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAErD,IAAI,OAAgB,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC;gBACH,MAAM,SAAS,GAA2C;oBACxD,MAAM;oBACN,OAAO;oBACP,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC;gBACF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxD,IAAI,UAAU;oBAAE,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;gBAClD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBAC3D,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;oBACvD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;wBAC5B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACxC,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;oBAClD,sBAAsB;oBACtB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClE,SAAS;gBACX,CAAC;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,GAAG,CAAC;gBACd,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;oBACxB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBACtD,MAAM,IAAI,+BAAoB,CAAC,GAAG,EAAE,CAAC,EAAE,2BAA2B,EAAE,GAAG,CAAC,CAAC;oBAC3E,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,MAAM,OAAO,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAAC,GAAa;QAC3C,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;YACtB,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC1B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACrF,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,GAAa;QACrC,uDAAuD;QACvD,MAAM,EAAE,GAAI,GAAG,CAAC,OAAwD,CAAC,YAAY,CAAC;QACtF,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,oBAAoB;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC;QACtD,MAAM,MAAM,GAAG,IAAA,2BAAa,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,6CAA6C;QAC7C,MAAM,MAAM,GAAG,CAAC,wDAAa,QAAQ,GAAC,CAErC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACjF,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;CACF;AApLD,gCAoLC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.isTokenFresh = exports.BaseScriptCache = exports.AutoPoTokenProvider = exports.HttpPoTokenProvider = exports.NoopPoTokenProvider = exports.toPrettyTime = exports.toVttTime = exports.toSrtTime = exports.computeEnd = exports.PrettyPrintFormatter = exports.JSONFormatter = exports.TextFormatter = exports.WebVTTFormatter = exports.SRTFormatter = exports.TranscriptList = exports.Transcript = exports.FetchedTranscriptSnippet = exports.FetchedTranscript = exports.YouTubeTranscriptApi = void 0;
18
+ /**
19
+ * youtube-transcript-nodejs — public API entry point.
20
+ */
21
+ var YouTubeTranscriptApi_js_1 = require("./api/YouTubeTranscriptApi.js");
22
+ Object.defineProperty(exports, "YouTubeTranscriptApi", { enumerable: true, get: function () { return YouTubeTranscriptApi_js_1.YouTubeTranscriptApi; } });
23
+ var FetchedTranscript_js_1 = require("./models/FetchedTranscript.js");
24
+ Object.defineProperty(exports, "FetchedTranscript", { enumerable: true, get: function () { return FetchedTranscript_js_1.FetchedTranscript; } });
25
+ var FetchedTranscriptSnippet_js_1 = require("./models/FetchedTranscriptSnippet.js");
26
+ Object.defineProperty(exports, "FetchedTranscriptSnippet", { enumerable: true, get: function () { return FetchedTranscriptSnippet_js_1.FetchedTranscriptSnippet; } });
27
+ var Transcript_js_1 = require("./models/Transcript.js");
28
+ Object.defineProperty(exports, "Transcript", { enumerable: true, get: function () { return Transcript_js_1.Transcript; } });
29
+ var TranscriptList_js_1 = require("./models/TranscriptList.js");
30
+ Object.defineProperty(exports, "TranscriptList", { enumerable: true, get: function () { return TranscriptList_js_1.TranscriptList; } });
31
+ // Re-export error classes for `instanceof` checks in user code.
32
+ __exportStar(require("./errors/index.js"), exports);
33
+ // Re-export formatters so users can compose their own.
34
+ var index_js_1 = require("./formatters/index.js");
35
+ Object.defineProperty(exports, "SRTFormatter", { enumerable: true, get: function () { return index_js_1.SRTFormatter; } });
36
+ Object.defineProperty(exports, "WebVTTFormatter", { enumerable: true, get: function () { return index_js_1.WebVTTFormatter; } });
37
+ Object.defineProperty(exports, "TextFormatter", { enumerable: true, get: function () { return index_js_1.TextFormatter; } });
38
+ Object.defineProperty(exports, "JSONFormatter", { enumerable: true, get: function () { return index_js_1.JSONFormatter; } });
39
+ Object.defineProperty(exports, "PrettyPrintFormatter", { enumerable: true, get: function () { return index_js_1.PrettyPrintFormatter; } });
40
+ Object.defineProperty(exports, "computeEnd", { enumerable: true, get: function () { return index_js_1.computeEnd; } });
41
+ Object.defineProperty(exports, "toSrtTime", { enumerable: true, get: function () { return index_js_1.toSrtTime; } });
42
+ Object.defineProperty(exports, "toVttTime", { enumerable: true, get: function () { return index_js_1.toVttTime; } });
43
+ Object.defineProperty(exports, "toPrettyTime", { enumerable: true, get: function () { return index_js_1.toPrettyTime; } });
44
+ var index_js_2 = require("./potoken/index.js");
45
+ Object.defineProperty(exports, "NoopPoTokenProvider", { enumerable: true, get: function () { return index_js_2.NoopPoTokenProvider; } });
46
+ Object.defineProperty(exports, "HttpPoTokenProvider", { enumerable: true, get: function () { return index_js_2.HttpPoTokenProvider; } });
47
+ Object.defineProperty(exports, "AutoPoTokenProvider", { enumerable: true, get: function () { return index_js_2.AutoPoTokenProvider; } });
48
+ Object.defineProperty(exports, "BaseScriptCache", { enumerable: true, get: function () { return index_js_2.BaseScriptCache; } });
49
+ Object.defineProperty(exports, "isTokenFresh", { enumerable: true, get: function () { return index_js_2.isTokenFresh; } });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,yEAAqE;AAA5D,+HAAA,oBAAoB,OAAA;AAG7B,sEAAkE;AAAzD,yHAAA,iBAAiB,OAAA;AAC1B,oFAAgF;AAAvE,uIAAA,wBAAwB,OAAA;AACjC,wDAAoD;AAA3C,2GAAA,UAAU,OAAA;AACnB,gEAA4D;AAAnD,mHAAA,cAAc,OAAA;AAMvB,gEAAgE;AAChE,oDAAkC;AAElC,uDAAuD;AACvD,kDAU+B;AAT7B,wGAAA,YAAY,OAAA;AACZ,2GAAA,eAAe,OAAA;AACf,yGAAA,aAAa,OAAA;AACb,yGAAA,aAAa,OAAA;AACb,gHAAA,oBAAoB,OAAA;AACpB,sGAAA,UAAU,OAAA;AACV,qGAAA,SAAS,OAAA;AACT,qGAAA,SAAS,OAAA;AACT,wGAAA,YAAY,OAAA;AAMd,+CAM4B;AAL1B,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FetchedTranscript = void 0;
4
+ const index_js_1 = require("../formatters/index.js");
5
+ const FetchedTranscriptSnippet_js_1 = require("./FetchedTranscriptSnippet.js");
6
+ /**
7
+ * Concrete transcript with all its cues loaded.
8
+ *
9
+ * Iterable and indexable. Provides formatting helpers that delegate
10
+ * to the formatter classes in `../formatters`.
11
+ */
12
+ class FetchedTranscript {
13
+ snippets;
14
+ videoId;
15
+ language;
16
+ languageCode;
17
+ isGenerated;
18
+ translationLanguages;
19
+ constructor(snippets, meta) {
20
+ this.snippets = Object.freeze(snippets.map((s) => new FetchedTranscriptSnippet_js_1.FetchedTranscriptSnippet(s.text, s.start, s.duration)));
21
+ this.videoId = meta.videoId;
22
+ this.language = meta.languageName;
23
+ this.languageCode = meta.languageCode;
24
+ this.isGenerated = meta.isGenerated;
25
+ this.translationLanguages = meta.translationLanguages;
26
+ }
27
+ [Symbol.iterator]() {
28
+ return this.snippets[Symbol.iterator]();
29
+ }
30
+ get length() {
31
+ return this.snippets.length;
32
+ }
33
+ /** Format using an arbitrary formatter. */
34
+ format(formatter) {
35
+ const out = formatter.render(this.snippets);
36
+ return { content: out.content, extension: out.extension, mimeType: out.mimeType };
37
+ }
38
+ /** Raw array form (matches Python `to_raw_data()`). */
39
+ toRaw() {
40
+ return this.format(new index_js_1.JSONFormatter());
41
+ }
42
+ /** Plain text — one snippet per line. */
43
+ toText() {
44
+ return this.format(new index_js_1.TextFormatter());
45
+ }
46
+ /** SRT subtitle format. */
47
+ toSRT() {
48
+ return this.format(new index_js_1.SRTFormatter());
49
+ }
50
+ /** WebVTT subtitle format. */
51
+ toVTT() {
52
+ return this.format(new index_js_1.WebVTTFormatter());
53
+ }
54
+ /** Pretty-print human-readable. */
55
+ toPretty() {
56
+ return this.format(new index_js_1.PrettyPrintFormatter());
57
+ }
58
+ /** Serialize the entire transcript as a plain object. */
59
+ toJSON() {
60
+ return this.format(new index_js_1.JSONFormatter());
61
+ }
62
+ forEach(fn) {
63
+ this.snippets.forEach((s, i) => fn(s, i));
64
+ }
65
+ map(fn) {
66
+ return this.snippets.map(fn);
67
+ }
68
+ filter(fn) {
69
+ return this.snippets.filter(fn);
70
+ }
71
+ find(fn) {
72
+ return this.snippets.find(fn);
73
+ }
74
+ /** Pick a subset of snippets by 1-based line range (inclusive). */
75
+ slice(start, end) {
76
+ return this.snippets.slice(start, end);
77
+ }
78
+ }
79
+ exports.FetchedTranscript = FetchedTranscript;
80
+ //# sourceMappingURL=FetchedTranscript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchedTranscript.js","sourceRoot":"","sources":["../../../src/models/FetchedTranscript.ts"],"names":[],"mappings":";;;AAAA,qDAQgC;AAChC,+EAAyE;AAIzE;;;;;GAKG;AACH,MAAa,iBAAiB;IACnB,QAAQ,CAAsC;IAC9C,OAAO,CAAS;IAChB,QAAQ,CAAS;IACjB,YAAY,CAAS;IACrB,WAAW,CAAU;IACrB,oBAAoB,CAA4D;IAEzF,YACE,QAA0E,EAC1E,IAAwB;QAExB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,sDAAwB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAC/E,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;IACxD,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,SAAoB;QACzB,MAAM,GAAG,GAAoB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;IACpF,CAAC;IAED,uDAAuD;IACvD,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,wBAAa,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,yCAAyC;IACzC,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,wBAAa,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,2BAA2B;IAC3B,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,uBAAY,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,8BAA8B;IAC9B,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,0BAAe,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,mCAAmC;IACnC,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,+BAAoB,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,yDAAyD;IACzD,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,wBAAa,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,EAAoD;QAC1D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CAAI,EAAiD;QACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,EAAuD;QAC5D,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,EAAuD;QAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,KAAa,EAAE,GAAY;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;CACF;AAtFD,8CAsFC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FetchedTranscriptSnippet = void 0;
4
+ /**
5
+ * One snippet in a fetched transcript.
6
+ */
7
+ class FetchedTranscriptSnippet {
8
+ text;
9
+ start;
10
+ duration;
11
+ constructor(text, start, duration) {
12
+ this.text = text;
13
+ this.start = start;
14
+ this.duration = duration;
15
+ }
16
+ /**
17
+ * End timestamp = start + duration (or earlier if the next snippet starts first).
18
+ * Lazily computed and cached.
19
+ */
20
+ endFor(_index, nextStart) {
21
+ const end = this.start + this.duration;
22
+ if (nextStart !== undefined && nextStart < end) {
23
+ return nextStart;
24
+ }
25
+ return end;
26
+ }
27
+ }
28
+ exports.FetchedTranscriptSnippet = FetchedTranscriptSnippet;
29
+ //# sourceMappingURL=FetchedTranscriptSnippet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchedTranscriptSnippet.js","sourceRoot":"","sources":["../../../src/models/FetchedTranscriptSnippet.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,wBAAwB;IAC1B,IAAI,CAAS;IACb,KAAK,CAAS;IACd,QAAQ,CAAS;IAE1B,YAAY,IAAY,EAAE,KAAa,EAAE,QAAgB;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAc,EAAE,SAA6B;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;YAC/C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAtBD,4DAsBC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=FormattedTranscript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormattedTranscript.js","sourceRoot":"","sources":["../../../src/models/FormattedTranscript.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Transcript = void 0;
4
+ const index_js_1 = require("../errors/index.js");
5
+ const xmlTranscriptParser_js_1 = require("../parsers/xmlTranscriptParser.js");
6
+ const FetchedTranscript_js_1 = require("./FetchedTranscript.js");
7
+ /**
8
+ * A handle to a single caption track.
9
+ *
10
+ * Created via `TranscriptList.findTranscript` (or `.findGeneratedTranscript`,
11
+ * `.findManuallyCreatedTranscript`). To obtain the actual cues, call
12
+ * `.fetch()` or chain `.translate(targetLang).fetch()`.
13
+ */
14
+ class Transcript {
15
+ videoId;
16
+ languageName;
17
+ languageCode;
18
+ isGenerated;
19
+ translationLanguages;
20
+ _baseUrl;
21
+ _httpClient;
22
+ _translationLanguageCodes;
23
+ constructor(httpClient, videoId, baseUrl, languageName, languageCode, isGenerated, translationLanguages) {
24
+ this._httpClient = httpClient;
25
+ this.videoId = videoId;
26
+ this._baseUrl = baseUrl;
27
+ this.languageName = languageName;
28
+ this.languageCode = languageCode;
29
+ this.isGenerated = isGenerated;
30
+ this.translationLanguages = translationLanguages;
31
+ this._translationLanguageCodes = new Set(translationLanguages.map((l) => l.languageCode));
32
+ }
33
+ get isTranslatable() {
34
+ return this.translationLanguages.length > 0;
35
+ }
36
+ /**
37
+ * Fetch this transcript's cues.
38
+ */
39
+ async fetch(preserveFormatting = false) {
40
+ const xml = await this._httpClient.fetchTranscriptXml(this._baseUrl, this.videoId);
41
+ const cues = (0, xmlTranscriptParser_js_1.parseTranscriptXml)(xml, { preserveFormatting });
42
+ return new FetchedTranscript_js_1.FetchedTranscript(cues.map((c) => ({ text: c.text, start: c.start, duration: c.duration })), this.toMetadata());
43
+ }
44
+ /**
45
+ * Translate this transcript to `targetLang`.
46
+ *
47
+ * Returns a new (un-fetched) Transcript whose `.fetch()` returns the
48
+ * translated cues. The translated track is not itself translatable.
49
+ */
50
+ translate(targetLang) {
51
+ if (!this.isTranslatable) {
52
+ throw new index_js_1.NotTranslatable(this.videoId);
53
+ }
54
+ if (!this._translationLanguageCodes.has(targetLang)) {
55
+ throw new index_js_1.TranslationLanguageNotAvailable(this.videoId, targetLang, [
56
+ ...this._translationLanguageCodes,
57
+ ]);
58
+ }
59
+ const newUrl = this._httpClient.buildTranslateUrl(this._baseUrl, targetLang);
60
+ const name = this.translationLanguages.find((l) => l.languageCode === targetLang);
61
+ return new Transcript(this._httpClient, this.videoId, newUrl, name?.languageName ?? targetLang, targetLang, true, []);
62
+ }
63
+ toMetadata() {
64
+ return {
65
+ videoId: this.videoId,
66
+ languageName: this.languageName,
67
+ languageCode: this.languageCode,
68
+ isGenerated: this.isGenerated,
69
+ isTranslatable: this.isTranslatable,
70
+ translationLanguages: this.translationLanguages,
71
+ };
72
+ }
73
+ }
74
+ exports.Transcript = Transcript;
75
+ //# sourceMappingURL=Transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transcript.js","sourceRoot":"","sources":["../../../src/models/Transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TranscriptList = void 0;
4
+ exports.buildTranscriptList = buildTranscriptList;
5
+ const index_js_1 = require("../errors/index.js");
6
+ const Transcript_js_1 = require("./Transcript.js");
7
+ /**
8
+ * Collection of all available transcript tracks for a video.
9
+ *
10
+ * Created via `YouTubeTranscriptApi.list(videoId)`. Use the `find*` helpers
11
+ * to pick a track, then call `.fetch()` on the result.
12
+ */
13
+ class TranscriptList {
14
+ videoId;
15
+ manuallyCreatedTranscripts;
16
+ generatedTranscripts;
17
+ translationLanguages;
18
+ constructor(videoId, manuallyCreatedTranscripts, generatedTranscripts, translationLanguages) {
19
+ this.videoId = videoId;
20
+ this.manuallyCreatedTranscripts = manuallyCreatedTranscripts;
21
+ this.generatedTranscripts = generatedTranscripts;
22
+ this.translationLanguages = translationLanguages;
23
+ }
24
+ /**
25
+ * Find a transcript matching one of the given language codes.
26
+ * Manual tracks are preferred over generated ones.
27
+ */
28
+ findTranscript(languageCodes) {
29
+ return this.findInOrder(languageCodes, [this.manuallyCreatedTranscripts, this.generatedTranscripts]);
30
+ }
31
+ /**
32
+ * Find only an ASR-generated transcript.
33
+ */
34
+ findGeneratedTranscript(languageCodes) {
35
+ return this.findInOrder(languageCodes, [this.generatedTranscripts]);
36
+ }
37
+ /**
38
+ * Find only a manually uploaded transcript.
39
+ */
40
+ findManuallyCreatedTranscript(languageCodes) {
41
+ return this.findInOrder(languageCodes, [this.manuallyCreatedTranscripts]);
42
+ }
43
+ findInOrder(codes, pools) {
44
+ for (const code of codes) {
45
+ for (const pool of pools) {
46
+ const found = pool.find((t) => t.languageCode === code);
47
+ if (found)
48
+ return found;
49
+ }
50
+ }
51
+ throw new index_js_1.NoTranscriptFound({
52
+ videoId: this.videoId,
53
+ requestedLanguageCodes: codes,
54
+ transcriptData: this,
55
+ });
56
+ }
57
+ /**
58
+ * Iterate over all transcripts (manual first, then generated).
59
+ */
60
+ *[Symbol.iterator]() {
61
+ yield* this.manuallyCreatedTranscripts;
62
+ yield* this.generatedTranscripts;
63
+ }
64
+ }
65
+ exports.TranscriptList = TranscriptList;
66
+ /**
67
+ * Factory helper to build a TranscriptList from raw caption data.
68
+ *
69
+ * `httpClient` is propagated to each Transcript so they can fetch their
70
+ * own cues lazily.
71
+ */
72
+ function buildTranscriptList(httpClient, videoId, captionTracks, translationLanguages) {
73
+ const manual = [];
74
+ const generated = [];
75
+ for (const track of captionTracks) {
76
+ const t = new Transcript_js_1.Transcript(httpClient, videoId, track.baseUrl, track.name, track.languageCode, track.kind === 'asr', track.isTranslatable ? translationLanguages : []);
77
+ if (track.kind === 'asr')
78
+ generated.push(t);
79
+ else
80
+ manual.push(t);
81
+ }
82
+ return new TranscriptList(videoId, manual, generated, translationLanguages);
83
+ }
84
+ //# sourceMappingURL=TranscriptList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TranscriptList.js","sourceRoot":"","sources":["../../../src/models/TranscriptList.ts"],"names":[],"mappings":";;;AAmFA,kDA4BC;AA/GD,iDAAuD;AAEvD,mDAA6C;AAG7C;;;;;GAKG;AACH,MAAa,cAAc;IAChB,OAAO,CAAS;IAChB,0BAA0B,CAAwB;IAClD,oBAAoB,CAAwB;IAC5C,oBAAoB,CAAiC;IAE9D,YACE,OAAe,EACf,0BAAiD,EACjD,oBAA2C,EAC3C,oBAAoD;QAEpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;QAC7D,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,aAAgC;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACvG,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,aAAgC;QACtD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,6BAA6B,CAAC,aAAgC;QAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC5E,CAAC;IAEO,WAAW,CACjB,KAAwB,EACxB,KAAyC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;gBACxD,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,MAAM,IAAI,4BAAiB,CAAC;YAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,KAAK,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC;QACvC,KAAK,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;CACF;AAhED,wCAgEC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,UAA2B,EAC3B,OAAe,EACf,aAME,EACF,oBAAoD;IAEpD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,0BAAU,CACtB,UAAU,EACV,OAAO,EACP,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,IAAI,KAAK,KAAK,EACpB,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CACjD,CAAC;QACF,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=TranscriptMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TranscriptMetadata.js","sourceRoot":"","sources":["../../../src/models/TranscriptMetadata.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=TranslationLanguage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TranslationLanguage.js","sourceRoot":"","sources":["../../../src/models/TranslationLanguage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTranscriptList = exports.TranscriptList = exports.Transcript = exports.FetchedTranscript = exports.FetchedTranscriptSnippet = void 0;
4
+ var FetchedTranscriptSnippet_js_1 = require("./FetchedTranscriptSnippet.js");
5
+ Object.defineProperty(exports, "FetchedTranscriptSnippet", { enumerable: true, get: function () { return FetchedTranscriptSnippet_js_1.FetchedTranscriptSnippet; } });
6
+ var FetchedTranscript_js_1 = require("./FetchedTranscript.js");
7
+ Object.defineProperty(exports, "FetchedTranscript", { enumerable: true, get: function () { return FetchedTranscript_js_1.FetchedTranscript; } });
8
+ var Transcript_js_1 = require("./Transcript.js");
9
+ Object.defineProperty(exports, "Transcript", { enumerable: true, get: function () { return Transcript_js_1.Transcript; } });
10
+ var TranscriptList_js_1 = require("./TranscriptList.js");
11
+ Object.defineProperty(exports, "TranscriptList", { enumerable: true, get: function () { return TranscriptList_js_1.TranscriptList; } });
12
+ Object.defineProperty(exports, "buildTranscriptList", { enumerable: true, get: function () { return TranscriptList_js_1.buildTranscriptList; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;AAAA,6EAAyE;AAAhE,uIAAA,wBAAwB,OAAA;AACjC,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA;AAC1B,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AACnB,yDAA0E;AAAjE,mHAAA,cAAc,OAAA;AAAE,wHAAA,mBAAmB,OAAA"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}