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.
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/dist/cjs/api/InnerTubeClient.js +236 -0
- package/dist/cjs/api/InnerTubeClient.js.map +1 -0
- package/dist/cjs/api/YouTubeTranscriptApi.js +160 -0
- package/dist/cjs/api/YouTubeTranscriptApi.js.map +1 -0
- package/dist/cjs/api/fetchStrategies.js +51 -0
- package/dist/cjs/api/fetchStrategies.js.map +1 -0
- package/dist/cjs/config/constants.js +34 -0
- package/dist/cjs/config/constants.js.map +1 -0
- package/dist/cjs/config/innerTubeContext.js +82 -0
- package/dist/cjs/config/innerTubeContext.js.map +1 -0
- package/dist/cjs/errors/BotDetected.js +20 -0
- package/dist/cjs/errors/BotDetected.js.map +1 -0
- package/dist/cjs/errors/FailedToCreateConsentCookie.js +17 -0
- package/dist/cjs/errors/FailedToCreateConsentCookie.js.map +1 -0
- package/dist/cjs/errors/InvalidVideoId.js +16 -0
- package/dist/cjs/errors/InvalidVideoId.js.map +1 -0
- package/dist/cjs/errors/IpBlocked.js +17 -0
- package/dist/cjs/errors/IpBlocked.js.map +1 -0
- package/dist/cjs/errors/NoTranscriptFound.js +23 -0
- package/dist/cjs/errors/NoTranscriptFound.js.map +1 -0
- package/dist/cjs/errors/NotTranslatable.js +15 -0
- package/dist/cjs/errors/NotTranslatable.js.map +1 -0
- package/dist/cjs/errors/PoTokenRequired.js +18 -0
- package/dist/cjs/errors/PoTokenRequired.js.map +1 -0
- package/dist/cjs/errors/TooManyRequests.js +19 -0
- package/dist/cjs/errors/TooManyRequests.js.map +1 -0
- package/dist/cjs/errors/TranscriptsDisabled.js +15 -0
- package/dist/cjs/errors/TranscriptsDisabled.js.map +1 -0
- package/dist/cjs/errors/TranslationLanguageNotAvailable.js +16 -0
- package/dist/cjs/errors/TranslationLanguageNotAvailable.js.map +1 -0
- package/dist/cjs/errors/VideoUnavailable.js +15 -0
- package/dist/cjs/errors/VideoUnavailable.js.map +1 -0
- package/dist/cjs/errors/VideoUnplayable.js +22 -0
- package/dist/cjs/errors/VideoUnplayable.js.map +1 -0
- package/dist/cjs/errors/YouTubeDataUnparsable.js +15 -0
- package/dist/cjs/errors/YouTubeDataUnparsable.js.map +1 -0
- package/dist/cjs/errors/YouTubeRequestFailed.js +18 -0
- package/dist/cjs/errors/YouTubeRequestFailed.js.map +1 -0
- package/dist/cjs/errors/YouTubeTranscriptError.js +19 -0
- package/dist/cjs/errors/YouTubeTranscriptError.js.map +1 -0
- package/dist/cjs/errors/index.js +34 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/formatters/Formatter.js +3 -0
- package/dist/cjs/formatters/Formatter.js.map +1 -0
- package/dist/cjs/formatters/JSONFormatter.js +24 -0
- package/dist/cjs/formatters/JSONFormatter.js.map +1 -0
- package/dist/cjs/formatters/PrettyPrintFormatter.js +26 -0
- package/dist/cjs/formatters/PrettyPrintFormatter.js.map +1 -0
- package/dist/cjs/formatters/SRTFormatter.js +39 -0
- package/dist/cjs/formatters/SRTFormatter.js.map +1 -0
- package/dist/cjs/formatters/TextFormatter.js +20 -0
- package/dist/cjs/formatters/TextFormatter.js.map +1 -0
- package/dist/cjs/formatters/WebVTTFormatter.js +39 -0
- package/dist/cjs/formatters/WebVTTFormatter.js.map +1 -0
- package/dist/cjs/formatters/base.js +61 -0
- package/dist/cjs/formatters/base.js.map +1 -0
- package/dist/cjs/formatters/index.js +19 -0
- package/dist/cjs/formatters/index.js.map +1 -0
- package/dist/cjs/http/cookieJar.js +91 -0
- package/dist/cjs/http/cookieJar.js.map +1 -0
- package/dist/cjs/http/httpClient.js +228 -0
- package/dist/cjs/http/httpClient.js.map +1 -0
- package/dist/cjs/index.js +50 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/models/FetchedTranscript.js +80 -0
- package/dist/cjs/models/FetchedTranscript.js.map +1 -0
- package/dist/cjs/models/FetchedTranscriptSnippet.js +29 -0
- package/dist/cjs/models/FetchedTranscriptSnippet.js.map +1 -0
- package/dist/cjs/models/FormattedTranscript.js +3 -0
- package/dist/cjs/models/FormattedTranscript.js.map +1 -0
- package/dist/cjs/models/Transcript.js +75 -0
- package/dist/cjs/models/Transcript.js.map +1 -0
- package/dist/cjs/models/TranscriptList.js +84 -0
- package/dist/cjs/models/TranscriptList.js.map +1 -0
- package/dist/cjs/models/TranscriptMetadata.js +3 -0
- package/dist/cjs/models/TranscriptMetadata.js.map +1 -0
- package/dist/cjs/models/TranslationLanguage.js +3 -0
- package/dist/cjs/models/TranslationLanguage.js.map +1 -0
- package/dist/cjs/models/index.js +13 -0
- package/dist/cjs/models/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/parsers/captionTrackParser.js +96 -0
- package/dist/cjs/parsers/captionTrackParser.js.map +1 -0
- package/dist/cjs/parsers/videoIdParser.js +65 -0
- package/dist/cjs/parsers/videoIdParser.js.map +1 -0
- package/dist/cjs/parsers/watchHtmlParser.js +78 -0
- package/dist/cjs/parsers/watchHtmlParser.js.map +1 -0
- package/dist/cjs/parsers/xmlTranscriptParser.js +84 -0
- package/dist/cjs/parsers/xmlTranscriptParser.js.map +1 -0
- package/dist/cjs/potoken/AutoPoTokenProvider.js +203 -0
- package/dist/cjs/potoken/AutoPoTokenProvider.js.map +1 -0
- package/dist/cjs/potoken/HttpPoTokenProvider.js +105 -0
- package/dist/cjs/potoken/HttpPoTokenProvider.js.map +1 -0
- package/dist/cjs/potoken/NoopPoTokenProvider.js +18 -0
- package/dist/cjs/potoken/NoopPoTokenProvider.js.map +1 -0
- package/dist/cjs/potoken/baseScriptCache.js +41 -0
- package/dist/cjs/potoken/baseScriptCache.js.map +1 -0
- package/dist/cjs/potoken/index.js +14 -0
- package/dist/cjs/potoken/index.js.map +1 -0
- package/dist/cjs/potoken/types.js +10 -0
- package/dist/cjs/potoken/types.js.map +1 -0
- package/dist/cjs/util/htmlSanitizer.js +77 -0
- package/dist/cjs/util/htmlSanitizer.js.map +1 -0
- package/dist/cjs/util/proxyUrl.js +42 -0
- package/dist/cjs/util/proxyUrl.js.map +1 -0
- package/dist/cjs/util/retry.js +65 -0
- package/dist/cjs/util/retry.js.map +1 -0
- package/dist/esm/api/InnerTubeClient.d.ts +61 -0
- package/dist/esm/api/InnerTubeClient.d.ts.map +1 -0
- package/dist/esm/api/InnerTubeClient.js +198 -0
- package/dist/esm/api/InnerTubeClient.js.map +1 -0
- package/dist/esm/api/YouTubeTranscriptApi.d.ts +88 -0
- package/dist/esm/api/YouTubeTranscriptApi.d.ts.map +1 -0
- package/dist/esm/api/YouTubeTranscriptApi.js +157 -0
- package/dist/esm/api/YouTubeTranscriptApi.js.map +1 -0
- package/dist/esm/api/fetchStrategies.d.ts +20 -0
- package/dist/esm/api/fetchStrategies.d.ts.map +1 -0
- package/dist/esm/api/fetchStrategies.js +48 -0
- package/dist/esm/api/fetchStrategies.js.map +1 -0
- package/dist/esm/config/constants.d.ts +30 -0
- package/dist/esm/config/constants.d.ts.map +1 -0
- package/dist/esm/config/constants.js +31 -0
- package/dist/esm/config/constants.js.map +1 -0
- package/dist/esm/config/innerTubeContext.d.ts +47 -0
- package/dist/esm/config/innerTubeContext.d.ts.map +1 -0
- package/dist/esm/config/innerTubeContext.js +77 -0
- package/dist/esm/config/innerTubeContext.js.map +1 -0
- package/dist/esm/errors/BotDetected.d.ts +13 -0
- package/dist/esm/errors/BotDetected.d.ts.map +1 -0
- package/dist/esm/errors/BotDetected.js +16 -0
- package/dist/esm/errors/BotDetected.js.map +1 -0
- package/dist/esm/errors/FailedToCreateConsentCookie.d.ts +10 -0
- package/dist/esm/errors/FailedToCreateConsentCookie.d.ts.map +1 -0
- package/dist/esm/errors/FailedToCreateConsentCookie.js +13 -0
- package/dist/esm/errors/FailedToCreateConsentCookie.js.map +1 -0
- package/dist/esm/errors/InvalidVideoId.d.ts +9 -0
- package/dist/esm/errors/InvalidVideoId.d.ts.map +1 -0
- package/dist/esm/errors/InvalidVideoId.js +12 -0
- package/dist/esm/errors/InvalidVideoId.js.map +1 -0
- package/dist/esm/errors/IpBlocked.d.ts +10 -0
- package/dist/esm/errors/IpBlocked.d.ts.map +1 -0
- package/dist/esm/errors/IpBlocked.js +13 -0
- package/dist/esm/errors/IpBlocked.js.map +1 -0
- package/dist/esm/errors/NoTranscriptFound.d.ts +19 -0
- package/dist/esm/errors/NoTranscriptFound.d.ts.map +1 -0
- package/dist/esm/errors/NoTranscriptFound.js +19 -0
- package/dist/esm/errors/NoTranscriptFound.js.map +1 -0
- package/dist/esm/errors/NotTranslatable.d.ts +9 -0
- package/dist/esm/errors/NotTranslatable.d.ts.map +1 -0
- package/dist/esm/errors/NotTranslatable.js +11 -0
- package/dist/esm/errors/NotTranslatable.js.map +1 -0
- package/dist/esm/errors/PoTokenRequired.d.ts +10 -0
- package/dist/esm/errors/PoTokenRequired.d.ts.map +1 -0
- package/dist/esm/errors/PoTokenRequired.js +14 -0
- package/dist/esm/errors/PoTokenRequired.js.map +1 -0
- package/dist/esm/errors/TooManyRequests.d.ts +12 -0
- package/dist/esm/errors/TooManyRequests.d.ts.map +1 -0
- package/dist/esm/errors/TooManyRequests.js +15 -0
- package/dist/esm/errors/TooManyRequests.js.map +1 -0
- package/dist/esm/errors/TranscriptsDisabled.d.ts +9 -0
- package/dist/esm/errors/TranscriptsDisabled.d.ts.map +1 -0
- package/dist/esm/errors/TranscriptsDisabled.js +11 -0
- package/dist/esm/errors/TranscriptsDisabled.js.map +1 -0
- package/dist/esm/errors/TranslationLanguageNotAvailable.d.ts +9 -0
- package/dist/esm/errors/TranslationLanguageNotAvailable.d.ts.map +1 -0
- package/dist/esm/errors/TranslationLanguageNotAvailable.js +12 -0
- package/dist/esm/errors/TranslationLanguageNotAvailable.js.map +1 -0
- package/dist/esm/errors/VideoUnavailable.d.ts +9 -0
- package/dist/esm/errors/VideoUnavailable.d.ts.map +1 -0
- package/dist/esm/errors/VideoUnavailable.js +11 -0
- package/dist/esm/errors/VideoUnavailable.js.map +1 -0
- package/dist/esm/errors/VideoUnplayable.d.ts +12 -0
- package/dist/esm/errors/VideoUnplayable.d.ts.map +1 -0
- package/dist/esm/errors/VideoUnplayable.js +18 -0
- package/dist/esm/errors/VideoUnplayable.js.map +1 -0
- package/dist/esm/errors/YouTubeDataUnparsable.d.ts +9 -0
- package/dist/esm/errors/YouTubeDataUnparsable.d.ts.map +1 -0
- package/dist/esm/errors/YouTubeDataUnparsable.js +11 -0
- package/dist/esm/errors/YouTubeDataUnparsable.js.map +1 -0
- package/dist/esm/errors/YouTubeRequestFailed.d.ts +10 -0
- package/dist/esm/errors/YouTubeRequestFailed.d.ts.map +1 -0
- package/dist/esm/errors/YouTubeRequestFailed.js +14 -0
- package/dist/esm/errors/YouTubeRequestFailed.js.map +1 -0
- package/dist/esm/errors/YouTubeTranscriptError.d.ts +10 -0
- package/dist/esm/errors/YouTubeTranscriptError.d.ts.map +1 -0
- package/dist/esm/errors/YouTubeTranscriptError.js +15 -0
- package/dist/esm/errors/YouTubeTranscriptError.js.map +1 -0
- package/dist/esm/errors/index.d.ts +17 -0
- package/dist/esm/errors/index.d.ts.map +1 -0
- package/dist/esm/errors/index.js +16 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/formatters/Formatter.d.ts +33 -0
- package/dist/esm/formatters/Formatter.d.ts.map +1 -0
- package/dist/esm/formatters/Formatter.js +2 -0
- package/dist/esm/formatters/Formatter.js.map +1 -0
- package/dist/esm/formatters/JSONFormatter.d.ts +10 -0
- package/dist/esm/formatters/JSONFormatter.d.ts.map +1 -0
- package/dist/esm/formatters/JSONFormatter.js +20 -0
- package/dist/esm/formatters/JSONFormatter.js.map +1 -0
- package/dist/esm/formatters/PrettyPrintFormatter.d.ts +15 -0
- package/dist/esm/formatters/PrettyPrintFormatter.d.ts.map +1 -0
- package/dist/esm/formatters/PrettyPrintFormatter.js +22 -0
- package/dist/esm/formatters/PrettyPrintFormatter.js.map +1 -0
- package/dist/esm/formatters/SRTFormatter.d.ts +22 -0
- package/dist/esm/formatters/SRTFormatter.d.ts.map +1 -0
- package/dist/esm/formatters/SRTFormatter.js +35 -0
- package/dist/esm/formatters/SRTFormatter.js.map +1 -0
- package/dist/esm/formatters/TextFormatter.d.ts +10 -0
- package/dist/esm/formatters/TextFormatter.d.ts.map +1 -0
- package/dist/esm/formatters/TextFormatter.js +16 -0
- package/dist/esm/formatters/TextFormatter.js.map +1 -0
- package/dist/esm/formatters/WebVTTFormatter.d.ts +22 -0
- package/dist/esm/formatters/WebVTTFormatter.d.ts.map +1 -0
- package/dist/esm/formatters/WebVTTFormatter.js +35 -0
- package/dist/esm/formatters/WebVTTFormatter.js.map +1 -0
- package/dist/esm/formatters/base.d.ts +25 -0
- package/dist/esm/formatters/base.d.ts.map +1 -0
- package/dist/esm/formatters/base.js +55 -0
- package/dist/esm/formatters/base.js.map +1 -0
- package/dist/esm/formatters/index.d.ts +8 -0
- package/dist/esm/formatters/index.d.ts.map +1 -0
- package/dist/esm/formatters/index.js +7 -0
- package/dist/esm/formatters/index.js.map +1 -0
- package/dist/esm/http/cookieJar.d.ts +39 -0
- package/dist/esm/http/cookieJar.d.ts.map +1 -0
- package/dist/esm/http/cookieJar.js +87 -0
- package/dist/esm/http/cookieJar.js.map +1 -0
- package/dist/esm/http/httpClient.d.ts +88 -0
- package/dist/esm/http/httpClient.d.ts.map +1 -0
- package/dist/esm/http/httpClient.js +191 -0
- package/dist/esm/http/httpClient.js.map +1 -0
- package/dist/esm/index.d.ts +19 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/models/FetchedTranscript.d.ts +49 -0
- package/dist/esm/models/FetchedTranscript.d.ts.map +1 -0
- package/dist/esm/models/FetchedTranscript.js +76 -0
- package/dist/esm/models/FetchedTranscript.js.map +1 -0
- package/dist/esm/models/FetchedTranscriptSnippet.d.ts +15 -0
- package/dist/esm/models/FetchedTranscriptSnippet.d.ts.map +1 -0
- package/dist/esm/models/FetchedTranscriptSnippet.js +25 -0
- package/dist/esm/models/FetchedTranscriptSnippet.js.map +1 -0
- package/dist/esm/models/FormattedTranscript.d.ts +9 -0
- package/dist/esm/models/FormattedTranscript.d.ts.map +1 -0
- package/dist/esm/models/FormattedTranscript.js +2 -0
- package/dist/esm/models/FormattedTranscript.js.map +1 -0
- package/dist/esm/models/Transcript.d.ts +36 -0
- package/dist/esm/models/Transcript.d.ts.map +1 -0
- package/dist/esm/models/Transcript.js +71 -0
- package/dist/esm/models/Transcript.js.map +1 -0
- package/dist/esm/models/TranscriptList.d.ts +48 -0
- package/dist/esm/models/TranscriptList.d.ts.map +1 -0
- package/dist/esm/models/TranscriptList.js +79 -0
- package/dist/esm/models/TranscriptList.js.map +1 -0
- package/dist/esm/models/TranscriptMetadata.d.ts +10 -0
- package/dist/esm/models/TranscriptMetadata.d.ts.map +1 -0
- package/dist/esm/models/TranscriptMetadata.js +2 -0
- package/dist/esm/models/TranscriptMetadata.js.map +1 -0
- package/dist/esm/models/TranslationLanguage.d.ts +8 -0
- package/dist/esm/models/TranslationLanguage.d.ts.map +1 -0
- package/dist/esm/models/TranslationLanguage.js +2 -0
- package/dist/esm/models/TranslationLanguage.js.map +1 -0
- package/dist/esm/models/index.d.ts +8 -0
- package/dist/esm/models/index.d.ts.map +1 -0
- package/dist/esm/models/index.js +5 -0
- package/dist/esm/models/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/parsers/captionTrackParser.d.ts +29 -0
- package/dist/esm/parsers/captionTrackParser.d.ts.map +1 -0
- package/dist/esm/parsers/captionTrackParser.js +91 -0
- package/dist/esm/parsers/captionTrackParser.js.map +1 -0
- package/dist/esm/parsers/videoIdParser.d.ts +11 -0
- package/dist/esm/parsers/videoIdParser.d.ts.map +1 -0
- package/dist/esm/parsers/videoIdParser.js +61 -0
- package/dist/esm/parsers/videoIdParser.js.map +1 -0
- package/dist/esm/parsers/watchHtmlParser.d.ts +33 -0
- package/dist/esm/parsers/watchHtmlParser.d.ts.map +1 -0
- package/dist/esm/parsers/watchHtmlParser.js +70 -0
- package/dist/esm/parsers/watchHtmlParser.js.map +1 -0
- package/dist/esm/parsers/xmlTranscriptParser.d.ts +17 -0
- package/dist/esm/parsers/xmlTranscriptParser.d.ts.map +1 -0
- package/dist/esm/parsers/xmlTranscriptParser.js +81 -0
- package/dist/esm/parsers/xmlTranscriptParser.js.map +1 -0
- package/dist/esm/potoken/AutoPoTokenProvider.d.ts +28 -0
- package/dist/esm/potoken/AutoPoTokenProvider.d.ts.map +1 -0
- package/dist/esm/potoken/AutoPoTokenProvider.js +166 -0
- package/dist/esm/potoken/AutoPoTokenProvider.js.map +1 -0
- package/dist/esm/potoken/HttpPoTokenProvider.d.ts +41 -0
- package/dist/esm/potoken/HttpPoTokenProvider.d.ts.map +1 -0
- package/dist/esm/potoken/HttpPoTokenProvider.js +101 -0
- package/dist/esm/potoken/HttpPoTokenProvider.js.map +1 -0
- package/dist/esm/potoken/NoopPoTokenProvider.d.ts +12 -0
- package/dist/esm/potoken/NoopPoTokenProvider.d.ts.map +1 -0
- package/dist/esm/potoken/NoopPoTokenProvider.js +14 -0
- package/dist/esm/potoken/NoopPoTokenProvider.js.map +1 -0
- package/dist/esm/potoken/baseScriptCache.d.ts +28 -0
- package/dist/esm/potoken/baseScriptCache.d.ts.map +1 -0
- package/dist/esm/potoken/baseScriptCache.js +37 -0
- package/dist/esm/potoken/baseScriptCache.js.map +1 -0
- package/dist/esm/potoken/index.d.ts +10 -0
- package/dist/esm/potoken/index.d.ts.map +1 -0
- package/dist/esm/potoken/index.js +6 -0
- package/dist/esm/potoken/index.js.map +1 -0
- package/dist/esm/potoken/types.d.ts +40 -0
- package/dist/esm/potoken/types.d.ts.map +1 -0
- package/dist/esm/potoken/types.js +7 -0
- package/dist/esm/potoken/types.js.map +1 -0
- package/dist/esm/util/htmlSanitizer.d.ts +21 -0
- package/dist/esm/util/htmlSanitizer.d.ts.map +1 -0
- package/dist/esm/util/htmlSanitizer.js +69 -0
- package/dist/esm/util/htmlSanitizer.js.map +1 -0
- package/dist/esm/util/proxyUrl.d.ts +22 -0
- package/dist/esm/util/proxyUrl.d.ts.map +1 -0
- package/dist/esm/util/proxyUrl.js +39 -0
- package/dist/esm/util/proxyUrl.js.map +1 -0
- package/dist/esm/util/retry.d.ts +37 -0
- package/dist/esm/util/retry.d.ts.map +1 -0
- package/dist/esm/util/retry.js +60 -0
- package/dist/esm/util/retry.js.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxyUrl.d.ts","sourceRoot":"","sources":["../../../src/util/proxyUrl.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA6BhE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Require either a protocol prefix OR a port. A bare hostname without protocol
|
|
2
|
+
// or port is ambiguous (looks like a URL fragment) so we reject it.
|
|
3
|
+
const PROXY_REGEX = /^(?:(https?|socks4?|socks5):\/\/)?(?:([^:@]+)(?::([^@]*))?@)?([^:\/\s]+)(?::(\d+))?\/?$/i;
|
|
4
|
+
/**
|
|
5
|
+
* Parse a proxy URL like `http://user:pass@host:1080` or `socks5://host:1080`.
|
|
6
|
+
*
|
|
7
|
+
* Returns `null` if the URL is malformed.
|
|
8
|
+
*/
|
|
9
|
+
export function parseProxyUrl(url) {
|
|
10
|
+
if (typeof url !== 'string') {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const trimmed = url.trim();
|
|
14
|
+
if (trimmed.length === 0) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const match = PROXY_REGEX.exec(trimmed);
|
|
18
|
+
if (!match) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const [, proto, user, pass, host, port] = match;
|
|
22
|
+
if (!host) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
// Require either an explicit protocol or a port to disambiguate from
|
|
26
|
+
// arbitrary host strings.
|
|
27
|
+
if (!proto && !port) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const result = {
|
|
31
|
+
protocol: (proto ?? 'http').toLowerCase(),
|
|
32
|
+
host,
|
|
33
|
+
username: user || undefined,
|
|
34
|
+
password: pass || undefined,
|
|
35
|
+
port: port ? Number.parseInt(port, 10) : undefined,
|
|
36
|
+
};
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=proxyUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxyUrl.js","sourceRoot":"","sources":["../../../src/util/proxyUrl.ts"],"names":[],"mappings":"AAgBA,+EAA+E;AAC/E,oEAAoE;AACpE,MAAM,WAAW,GACf,0FAA0F,CAAC;AAE7F;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,qEAAqE;IACrE,0BAA0B;IAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAmB;QAC7B,QAAQ,EAAE,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE;QACzC,IAAI;QACJ,QAAQ,EAAE,IAAI,IAAI,SAAS;QAC3B,QAAQ,EAAE,IAAI,IAAI,SAAS;QAC3B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exponential backoff helpers for HTTP retries.
|
|
3
|
+
*/
|
|
4
|
+
export interface RetryOptions {
|
|
5
|
+
/** Maximum number of attempts (including the first one). */
|
|
6
|
+
readonly maxAttempts: number;
|
|
7
|
+
/** Base delay in ms before the first retry. */
|
|
8
|
+
readonly baseDelayMs?: number;
|
|
9
|
+
/** Cap delay in ms (clamp). */
|
|
10
|
+
readonly maxDelayMs?: number;
|
|
11
|
+
/** Optional jitter 0..1 applied to each delay. */
|
|
12
|
+
readonly jitter?: number;
|
|
13
|
+
/** Optional abort signal — when aborted, retries stop. */
|
|
14
|
+
readonly signal?: AbortSignal;
|
|
15
|
+
/** Decide whether a given error is retryable. Default: always retry. */
|
|
16
|
+
readonly shouldRetry?: (err: unknown) => boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Compute the delay before retry attempt `attempt` (1-indexed).
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeBackoffDelay(attempt: number, opts?: {
|
|
22
|
+
baseDelayMs?: number;
|
|
23
|
+
maxDelayMs?: number;
|
|
24
|
+
jitter?: number;
|
|
25
|
+
}): number;
|
|
26
|
+
/**
|
|
27
|
+
* Sleep for `ms` milliseconds, or until `signal` is aborted.
|
|
28
|
+
*/
|
|
29
|
+
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Run `fn` with exponential backoff. Throws if all attempts fail.
|
|
32
|
+
*
|
|
33
|
+
* `shouldRetry` lets the caller decide which errors are retryable; by
|
|
34
|
+
* default any error is retried.
|
|
35
|
+
*/
|
|
36
|
+
export declare function withRetry<T>(fn: (attempt: number) => Promise<T>, opts?: RetryOptions): Promise<T>;
|
|
37
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/util/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;CAClD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACxE,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,IAAI,GAAE,YAAiC,GACtC,OAAO,CAAC,CAAC,CAAC,CAiBZ"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exponential backoff helpers for HTTP retries.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Compute the delay before retry attempt `attempt` (1-indexed).
|
|
6
|
+
*/
|
|
7
|
+
export function computeBackoffDelay(attempt, opts = {}) {
|
|
8
|
+
const base = opts.baseDelayMs ?? 500;
|
|
9
|
+
const cap = opts.maxDelayMs ?? 8_000;
|
|
10
|
+
const jitter = opts.jitter ?? 0.2;
|
|
11
|
+
const exp = Math.min(cap, base * 2 ** (attempt - 1));
|
|
12
|
+
const rand = 1 - jitter + Math.random() * jitter * 2;
|
|
13
|
+
return Math.round(exp * rand);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Sleep for `ms` milliseconds, or until `signal` is aborted.
|
|
17
|
+
*/
|
|
18
|
+
export function sleep(ms, signal) {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
if (signal?.aborted) {
|
|
21
|
+
reject(new Error('Aborted'));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const id = setTimeout(() => {
|
|
25
|
+
signal?.removeEventListener('abort', onAbort);
|
|
26
|
+
resolve();
|
|
27
|
+
}, ms);
|
|
28
|
+
const onAbort = () => {
|
|
29
|
+
clearTimeout(id);
|
|
30
|
+
reject(new Error('Aborted'));
|
|
31
|
+
};
|
|
32
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Run `fn` with exponential backoff. Throws if all attempts fail.
|
|
37
|
+
*
|
|
38
|
+
* `shouldRetry` lets the caller decide which errors are retryable; by
|
|
39
|
+
* default any error is retried.
|
|
40
|
+
*/
|
|
41
|
+
export async function withRetry(fn, opts = { maxAttempts: 1 }) {
|
|
42
|
+
const max = Math.max(1, opts.maxAttempts);
|
|
43
|
+
const shouldRetry = opts.shouldRetry ?? (() => true);
|
|
44
|
+
let lastErr;
|
|
45
|
+
for (let attempt = 1; attempt <= max; attempt++) {
|
|
46
|
+
try {
|
|
47
|
+
return await fn(attempt);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
lastErr = err;
|
|
51
|
+
if (attempt >= max || !shouldRetry(err) || opts.signal?.aborted) {
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
const delay = computeBackoffDelay(attempt, opts);
|
|
55
|
+
await sleep(delay, opts.signal);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
throw lastErr;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/util/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,OAAuE,EAAE;IAEzE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;YACzB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAmC,EACnC,OAAqB,EAAE,WAAW,EAAE,CAAC,EAAE;IAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,OAAgB,CAAC;IACrB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,CAAC;YACd,IAAI,OAAO,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAChE,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC;AAChB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "youtube-transcript-nodejs",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A complete Node.js + TypeScript port of jdepoix/youtube-transcript-api with optional self-contained PoToken generation.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20.0.0",
|
|
9
|
+
"npm": ">=10"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": {
|
|
14
|
+
"types": "./dist/esm/index.d.ts",
|
|
15
|
+
"default": "./dist/esm/index.js"
|
|
16
|
+
},
|
|
17
|
+
"require": {
|
|
18
|
+
"types": "./dist/esm/index.d.ts",
|
|
19
|
+
"default": "./dist/cjs/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"./potoken": {
|
|
23
|
+
"import": {
|
|
24
|
+
"types": "./dist/esm/potoken/index.d.ts",
|
|
25
|
+
"default": "./dist/esm/potoken/index.js"
|
|
26
|
+
},
|
|
27
|
+
"require": {
|
|
28
|
+
"types": "./dist/esm/potoken/index.d.ts",
|
|
29
|
+
"default": "./dist/cjs/potoken/index.js"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"./formatters": {
|
|
33
|
+
"import": {
|
|
34
|
+
"types": "./dist/esm/formatters/index.d.ts",
|
|
35
|
+
"default": "./dist/esm/formatters/index.js"
|
|
36
|
+
},
|
|
37
|
+
"require": {
|
|
38
|
+
"types": "./dist/esm/formatters/index.d.ts",
|
|
39
|
+
"default": "./dist/cjs/formatters/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"./errors": {
|
|
43
|
+
"import": {
|
|
44
|
+
"types": "./dist/esm/errors/index.d.ts",
|
|
45
|
+
"default": "./dist/esm/errors/index.js"
|
|
46
|
+
},
|
|
47
|
+
"require": {
|
|
48
|
+
"types": "./dist/esm/errors/index.d.ts",
|
|
49
|
+
"default": "./dist/cjs/errors/index.js"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"./package.json": "./package.json"
|
|
53
|
+
},
|
|
54
|
+
"main": "./dist/cjs/index.js",
|
|
55
|
+
"module": "./dist/esm/index.js",
|
|
56
|
+
"types": "./dist/esm/index.d.ts",
|
|
57
|
+
"files": [
|
|
58
|
+
"dist",
|
|
59
|
+
"README.md",
|
|
60
|
+
"LICENSE"
|
|
61
|
+
],
|
|
62
|
+
"scripts": {
|
|
63
|
+
"build": "npm run build:esm && npm run build:cjs",
|
|
64
|
+
"build:esm": "tsc -p tsconfig.json && echo '{\"type\":\"module\"}' > dist/esm/package.json",
|
|
65
|
+
"build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
|
|
66
|
+
"clean": "rm -rf dist",
|
|
67
|
+
"prepublishOnly": "npm run clean && npm run build && npm test",
|
|
68
|
+
"test": "vitest run",
|
|
69
|
+
"test:unit": "vitest run test/unit",
|
|
70
|
+
"test:watch": "vitest test/unit",
|
|
71
|
+
"test:live": "RUN_LIVE=1 vitest run test/integration",
|
|
72
|
+
"test:all": "vitest run",
|
|
73
|
+
"lint": "eslint src test",
|
|
74
|
+
"lint:fix": "eslint src test --fix",
|
|
75
|
+
"format": "prettier --write \"src/**/*.{ts,json,md}\" \"test/**/*.{ts,json,md}\"",
|
|
76
|
+
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
77
|
+
},
|
|
78
|
+
"keywords": [
|
|
79
|
+
"youtube",
|
|
80
|
+
"transcript",
|
|
81
|
+
"subtitle",
|
|
82
|
+
"captions",
|
|
83
|
+
"innertube",
|
|
84
|
+
"potoken",
|
|
85
|
+
"video",
|
|
86
|
+
"scraper"
|
|
87
|
+
],
|
|
88
|
+
"dependencies": {
|
|
89
|
+
"fast-xml-parser": "^5.0.0",
|
|
90
|
+
"he": "^1.2.0"
|
|
91
|
+
},
|
|
92
|
+
"optionalDependencies": {
|
|
93
|
+
"bgutils-js": "^3.2.0",
|
|
94
|
+
"undici": "^6.21.0"
|
|
95
|
+
},
|
|
96
|
+
"devDependencies": {
|
|
97
|
+
"@types/he": "^1.2.0",
|
|
98
|
+
"@types/node": "^20.14.0",
|
|
99
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
100
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
101
|
+
"@vitest/coverage-v8": "^2.1.0",
|
|
102
|
+
"eslint": "^9.0.0",
|
|
103
|
+
"prettier": "^3.3.0",
|
|
104
|
+
"tsx": "^4.19.0",
|
|
105
|
+
"typescript": "^5.6.0",
|
|
106
|
+
"vitest": "^2.1.0"
|
|
107
|
+
},
|
|
108
|
+
"publishConfig": {
|
|
109
|
+
"access": "public"
|
|
110
|
+
}
|
|
111
|
+
}
|