@steipete/summarize-core 0.10.0 → 0.11.1

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 (194) hide show
  1. package/README.md +0 -1
  2. package/dist/esm/content/index.js +5 -5
  3. package/dist/esm/content/index.js.map +1 -1
  4. package/dist/esm/content/link-preview/client.js +20 -9
  5. package/dist/esm/content/link-preview/client.js.map +1 -1
  6. package/dist/esm/content/link-preview/content/article.js +84 -83
  7. package/dist/esm/content/link-preview/content/article.js.map +1 -1
  8. package/dist/esm/content/link-preview/content/cleaner.js +23 -20
  9. package/dist/esm/content/link-preview/content/cleaner.js.map +1 -1
  10. package/dist/esm/content/link-preview/content/constants.js.map +1 -1
  11. package/dist/esm/content/link-preview/content/fetcher.js +46 -40
  12. package/dist/esm/content/link-preview/content/fetcher.js.map +1 -1
  13. package/dist/esm/content/link-preview/content/firecrawl.js +16 -16
  14. package/dist/esm/content/link-preview/content/firecrawl.js.map +1 -1
  15. package/dist/esm/content/link-preview/content/html.js +29 -27
  16. package/dist/esm/content/link-preview/content/html.js.map +1 -1
  17. package/dist/esm/content/link-preview/content/index.js +141 -88
  18. package/dist/esm/content/link-preview/content/index.js.map +1 -1
  19. package/dist/esm/content/link-preview/content/jsonld.js +12 -12
  20. package/dist/esm/content/link-preview/content/jsonld.js.map +1 -1
  21. package/dist/esm/content/link-preview/content/parsers.js +20 -20
  22. package/dist/esm/content/link-preview/content/parsers.js.map +1 -1
  23. package/dist/esm/content/link-preview/content/podcast-utils.js +34 -34
  24. package/dist/esm/content/link-preview/content/podcast-utils.js.map +1 -1
  25. package/dist/esm/content/link-preview/content/readability.js +16 -15
  26. package/dist/esm/content/link-preview/content/readability.js.map +1 -1
  27. package/dist/esm/content/link-preview/content/twitter-utils.js +24 -11
  28. package/dist/esm/content/link-preview/content/twitter-utils.js.map +1 -1
  29. package/dist/esm/content/link-preview/content/types.js +1 -1
  30. package/dist/esm/content/link-preview/content/types.js.map +1 -1
  31. package/dist/esm/content/link-preview/content/utils.js +17 -17
  32. package/dist/esm/content/link-preview/content/utils.js.map +1 -1
  33. package/dist/esm/content/link-preview/content/video.js +19 -19
  34. package/dist/esm/content/link-preview/content/video.js.map +1 -1
  35. package/dist/esm/content/link-preview/content/visibility.js +121 -0
  36. package/dist/esm/content/link-preview/content/visibility.js.map +1 -0
  37. package/dist/esm/content/link-preview/content/youtube.js +10 -10
  38. package/dist/esm/content/link-preview/content/youtube.js.map +1 -1
  39. package/dist/esm/content/link-preview/deps.js +16 -16
  40. package/dist/esm/content/link-preview/deps.js.map +1 -1
  41. package/dist/esm/content/link-preview/fetch-with-timeout.js +4 -4
  42. package/dist/esm/content/link-preview/fetch-with-timeout.js.map +1 -1
  43. package/dist/esm/content/link-preview/types.js +1 -1
  44. package/dist/esm/content/link-preview/types.js.map +1 -1
  45. package/dist/esm/content/transcript/cache.js +22 -22
  46. package/dist/esm/content/transcript/cache.js.map +1 -1
  47. package/dist/esm/content/transcript/index.js +34 -24
  48. package/dist/esm/content/transcript/index.js.map +1 -1
  49. package/dist/esm/content/transcript/normalize.js +10 -10
  50. package/dist/esm/content/transcript/normalize.js.map +1 -1
  51. package/dist/esm/content/transcript/parse.js +31 -31
  52. package/dist/esm/content/transcript/parse.js.map +1 -1
  53. package/dist/esm/content/transcript/providers/generic.js +74 -78
  54. package/dist/esm/content/transcript/providers/generic.js.map +1 -1
  55. package/dist/esm/content/transcript/providers/podcast/apple-flow.js +36 -36
  56. package/dist/esm/content/transcript/providers/podcast/apple-flow.js.map +1 -1
  57. package/dist/esm/content/transcript/providers/podcast/apple.js +5 -5
  58. package/dist/esm/content/transcript/providers/podcast/apple.js.map +1 -1
  59. package/dist/esm/content/transcript/providers/podcast/constants.js +2 -2
  60. package/dist/esm/content/transcript/providers/podcast/constants.js.map +1 -1
  61. package/dist/esm/content/transcript/providers/podcast/itunes.js +44 -42
  62. package/dist/esm/content/transcript/providers/podcast/itunes.js.map +1 -1
  63. package/dist/esm/content/transcript/providers/podcast/json.js +4 -4
  64. package/dist/esm/content/transcript/providers/podcast/json.js.map +1 -1
  65. package/dist/esm/content/transcript/providers/podcast/media.js +58 -49
  66. package/dist/esm/content/transcript/providers/podcast/media.js.map +1 -1
  67. package/dist/esm/content/transcript/providers/podcast/results.js +2 -2
  68. package/dist/esm/content/transcript/providers/podcast/results.js.map +1 -1
  69. package/dist/esm/content/transcript/providers/podcast/rss.js +29 -29
  70. package/dist/esm/content/transcript/providers/podcast/rss.js.map +1 -1
  71. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js +38 -38
  72. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js.map +1 -1
  73. package/dist/esm/content/transcript/providers/podcast/spotify.js +32 -32
  74. package/dist/esm/content/transcript/providers/podcast/spotify.js.map +1 -1
  75. package/dist/esm/content/transcript/providers/podcast.js +43 -47
  76. package/dist/esm/content/transcript/providers/podcast.js.map +1 -1
  77. package/dist/esm/content/transcript/providers/transcription-start.js +59 -31
  78. package/dist/esm/content/transcript/providers/transcription-start.js.map +1 -1
  79. package/dist/esm/content/transcript/providers/youtube/api.js +56 -56
  80. package/dist/esm/content/transcript/providers/youtube/api.js.map +1 -1
  81. package/dist/esm/content/transcript/providers/youtube/apify.js +7 -7
  82. package/dist/esm/content/transcript/providers/youtube/apify.js.map +1 -1
  83. package/dist/esm/content/transcript/providers/youtube/captions.js +76 -76
  84. package/dist/esm/content/transcript/providers/youtube/captions.js.map +1 -1
  85. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js +82 -75
  86. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js.map +1 -1
  87. package/dist/esm/content/transcript/providers/youtube.js +84 -77
  88. package/dist/esm/content/transcript/providers/youtube.js.map +1 -1
  89. package/dist/esm/content/transcript/timestamps.js +8 -8
  90. package/dist/esm/content/transcript/timestamps.js.map +1 -1
  91. package/dist/esm/content/transcript/transcription-config.js +14 -0
  92. package/dist/esm/content/transcript/transcription-config.js.map +1 -0
  93. package/dist/esm/content/transcript/utils.js +35 -35
  94. package/dist/esm/content/transcript/utils.js.map +1 -1
  95. package/dist/esm/content/url.js +59 -28
  96. package/dist/esm/content/url.js.map +1 -1
  97. package/dist/esm/index.js +4 -3
  98. package/dist/esm/index.js.map +1 -1
  99. package/dist/esm/language.js +77 -77
  100. package/dist/esm/language.js.map +1 -1
  101. package/dist/esm/openai/base-url.js +35 -0
  102. package/dist/esm/openai/base-url.js.map +1 -0
  103. package/dist/esm/processes.js +16 -16
  104. package/dist/esm/processes.js.map +1 -1
  105. package/dist/esm/prompts/cli.js +17 -17
  106. package/dist/esm/prompts/cli.js.map +1 -1
  107. package/dist/esm/prompts/file.js +54 -54
  108. package/dist/esm/prompts/file.js.map +1 -1
  109. package/dist/esm/prompts/format.js +2 -2
  110. package/dist/esm/prompts/format.js.map +1 -1
  111. package/dist/esm/prompts/index.js +5 -5
  112. package/dist/esm/prompts/index.js.map +1 -1
  113. package/dist/esm/prompts/link-summary.js +65 -65
  114. package/dist/esm/prompts/link-summary.js.map +1 -1
  115. package/dist/esm/prompts/summary-lengths.js +10 -10
  116. package/dist/esm/prompts/summary-lengths.js.map +1 -1
  117. package/dist/esm/prompts/summary-system.js +9 -9
  118. package/dist/esm/prompts/summary-system.js.map +1 -1
  119. package/dist/esm/shared/contracts.js +1 -1
  120. package/dist/esm/shared/contracts.js.map +1 -1
  121. package/dist/esm/transcription/onnx-cli.js +69 -69
  122. package/dist/esm/transcription/onnx-cli.js.map +1 -1
  123. package/dist/esm/transcription/whisper/constants.js +3 -3
  124. package/dist/esm/transcription/whisper/constants.js.map +1 -1
  125. package/dist/esm/transcription/whisper/core.js +148 -59
  126. package/dist/esm/transcription/whisper/core.js.map +1 -1
  127. package/dist/esm/transcription/whisper/fal.js +14 -14
  128. package/dist/esm/transcription/whisper/fal.js.map +1 -1
  129. package/dist/esm/transcription/whisper/ffmpeg.js +106 -106
  130. package/dist/esm/transcription/whisper/ffmpeg.js.map +1 -1
  131. package/dist/esm/transcription/whisper/groq.js +46 -0
  132. package/dist/esm/transcription/whisper/groq.js.map +1 -0
  133. package/dist/esm/transcription/whisper/openai.js +19 -13
  134. package/dist/esm/transcription/whisper/openai.js.map +1 -1
  135. package/dist/esm/transcription/whisper/utils.js +19 -19
  136. package/dist/esm/transcription/whisper/utils.js.map +1 -1
  137. package/dist/esm/transcription/whisper/whisper-cpp.js +64 -64
  138. package/dist/esm/transcription/whisper/whisper-cpp.js.map +1 -1
  139. package/dist/esm/transcription/whisper.js +4 -4
  140. package/dist/esm/transcription/whisper.js.map +1 -1
  141. package/dist/types/content/cache/types.d.ts +1 -1
  142. package/dist/types/content/index.d.ts +7 -7
  143. package/dist/types/content/link-preview/client.d.ts +7 -4
  144. package/dist/types/content/link-preview/content/cleaner.d.ts +1 -0
  145. package/dist/types/content/link-preview/content/fetcher.d.ts +2 -2
  146. package/dist/types/content/link-preview/content/firecrawl.d.ts +7 -7
  147. package/dist/types/content/link-preview/content/html.d.ts +8 -8
  148. package/dist/types/content/link-preview/content/index.d.ts +3 -3
  149. package/dist/types/content/link-preview/content/twitter-utils.d.ts +1 -0
  150. package/dist/types/content/link-preview/content/types.d.ts +8 -8
  151. package/dist/types/content/link-preview/content/utils.d.ts +3 -3
  152. package/dist/types/content/link-preview/content/video.d.ts +1 -1
  153. package/dist/types/content/link-preview/content/visibility.d.ts +1 -0
  154. package/dist/types/content/link-preview/deps.d.ts +36 -33
  155. package/dist/types/content/link-preview/types.d.ts +4 -4
  156. package/dist/types/content/transcript/cache.d.ts +4 -4
  157. package/dist/types/content/transcript/index.d.ts +7 -7
  158. package/dist/types/content/transcript/parse.d.ts +1 -1
  159. package/dist/types/content/transcript/providers/generic.d.ts +1 -1
  160. package/dist/types/content/transcript/providers/podcast/apple-flow.d.ts +2 -2
  161. package/dist/types/content/transcript/providers/podcast/flow-context.d.ts +4 -4
  162. package/dist/types/content/transcript/providers/podcast/media.d.ts +9 -6
  163. package/dist/types/content/transcript/providers/podcast/results.d.ts +3 -3
  164. package/dist/types/content/transcript/providers/podcast/rss.d.ts +1 -1
  165. package/dist/types/content/transcript/providers/podcast/spotify-flow.d.ts +2 -2
  166. package/dist/types/content/transcript/providers/podcast/spotify.d.ts +2 -2
  167. package/dist/types/content/transcript/providers/podcast.d.ts +5 -5
  168. package/dist/types/content/transcript/providers/transcription-start.d.ts +14 -8
  169. package/dist/types/content/transcript/providers/youtube/api.d.ts +1 -1
  170. package/dist/types/content/transcript/providers/youtube/captions.d.ts +1 -1
  171. package/dist/types/content/transcript/providers/youtube/yt-dlp.d.ts +11 -8
  172. package/dist/types/content/transcript/providers/youtube.d.ts +1 -1
  173. package/dist/types/content/transcript/timestamps.d.ts +1 -1
  174. package/dist/types/content/transcript/transcription-config.d.ts +15 -0
  175. package/dist/types/content/transcript/types.d.ts +12 -9
  176. package/dist/types/content/transcript/utils.d.ts +1 -1
  177. package/dist/types/content/url.d.ts +5 -3
  178. package/dist/types/index.d.ts +5 -4
  179. package/dist/types/language.d.ts +4 -4
  180. package/dist/types/openai/base-url.d.ts +14 -0
  181. package/dist/types/processes.d.ts +2 -2
  182. package/dist/types/prompts/cli.d.ts +3 -3
  183. package/dist/types/prompts/file.d.ts +2 -2
  184. package/dist/types/prompts/index.d.ts +6 -6
  185. package/dist/types/prompts/link-summary.d.ts +3 -3
  186. package/dist/types/prompts/summary-lengths.d.ts +1 -1
  187. package/dist/types/transcription/onnx-cli.d.ts +3 -3
  188. package/dist/types/transcription/whisper/core.d.ts +6 -3
  189. package/dist/types/transcription/whisper/groq.d.ts +2 -0
  190. package/dist/types/transcription/whisper/openai.d.ts +6 -1
  191. package/dist/types/transcription/whisper/types.d.ts +1 -1
  192. package/dist/types/transcription/whisper/whisper-cpp.d.ts +1 -1
  193. package/dist/types/transcription/whisper.d.ts +5 -5
  194. package/package.json +13 -13
@@ -1,38 +1,41 @@
1
- import { load } from 'cheerio';
2
- import { isTwitterStatusUrl } from '../../link-preview/content/twitter-utils.js';
3
- import { isDirectMediaUrl } from '../../url.js';
4
- import { normalizeTranscriptText } from '../normalize.js';
5
- import { jsonTranscriptToPlainText, jsonTranscriptToSegments, vttToPlainText, vttToSegments, } from '../parse.js';
6
- import { resolveTranscriptionAvailability } from './transcription-start.js';
1
+ import { load } from "cheerio";
2
+ import { isTwitterBroadcastUrl, isTwitterStatusUrl, } from "../../link-preview/content/twitter-utils.js";
3
+ import { isDirectMediaUrl } from "../../url.js";
4
+ import { normalizeTranscriptText } from "../normalize.js";
5
+ import { jsonTranscriptToPlainText, jsonTranscriptToSegments, vttToPlainText, vttToSegments, } from "../parse.js";
6
+ import { resolveTranscriptionConfig } from "../transcription-config.js";
7
+ import { resolveTranscriptionAvailability } from "./transcription-start.js";
7
8
  export const canHandle = () => true;
8
9
  export const fetchTranscript = async (context, options) => {
9
10
  const attemptedProviders = [];
10
11
  const notes = [];
12
+ const transcription = resolveTranscriptionConfig(options);
11
13
  const embedded = context.html ? detectEmbeddedMedia(context.html, context.url) : null;
12
14
  const twitterStatus = isTwitterStatusUrl(context.url);
15
+ const twitterMedia = twitterStatus || isTwitterBroadcastUrl(context.url);
13
16
  const hasEmbeddedMedia = Boolean(embedded?.mediaUrl || embedded?.kind);
14
17
  const mediaKindHint = options.mediaKindHint ?? embedded?.kind ?? null;
15
18
  if (embedded?.track) {
16
- attemptedProviders.push('embedded');
19
+ attemptedProviders.push("embedded");
17
20
  const caption = await fetchCaptionTrack(options.fetch, embedded.track, notes, Boolean(options.transcriptTimestamps));
18
21
  if (caption?.text) {
19
22
  return {
20
23
  text: normalizeTranscriptText(caption.text),
21
- source: 'embedded',
24
+ source: "embedded",
22
25
  segments: options.transcriptTimestamps ? (caption.segments ?? null) : null,
23
26
  attemptedProviders,
24
27
  metadata: {
25
- provider: 'embedded',
28
+ provider: "embedded",
26
29
  kind: embedded.kind,
27
30
  trackUrl: embedded.track.url,
28
31
  trackType: embedded.track.type,
29
32
  trackLanguage: embedded.track.language,
30
33
  },
31
- notes: notes.length > 0 ? notes.join('; ') : null,
34
+ notes: notes.length > 0 ? notes.join("; ") : null,
32
35
  };
33
36
  }
34
37
  }
35
- const shouldAttemptMediaTranscript = options.mediaTranscriptMode === 'prefer' || (twitterStatus && hasEmbeddedMedia);
38
+ const shouldAttemptMediaTranscript = options.mediaTranscriptMode === "prefer" || (twitterStatus && hasEmbeddedMedia);
36
39
  const mediaUrl = shouldAttemptMediaTranscript
37
40
  ? (embedded?.mediaUrl ?? (isDirectMediaUrl(context.url) ? context.url : null))
38
41
  : null;
@@ -41,6 +44,7 @@ export const fetchTranscript = async (context, options) => {
41
44
  const result = await fetchDirectMediaTranscript({
42
45
  url: mediaUrl ?? context.url,
43
46
  options,
47
+ transcription,
44
48
  notes,
45
49
  attemptedProviders,
46
50
  kind: embedded?.kind ?? null,
@@ -48,22 +52,22 @@ export const fetchTranscript = async (context, options) => {
48
52
  if (result)
49
53
  return result;
50
54
  }
51
- if (twitterStatus && options.mediaTranscriptMode !== 'prefer' && !hasEmbeddedMedia) {
55
+ if (twitterStatus && options.mediaTranscriptMode !== "prefer" && !hasEmbeddedMedia) {
52
56
  return {
53
57
  text: null,
54
58
  source: null,
55
59
  attemptedProviders,
56
- metadata: { provider: 'generic', kind: 'twitter', reason: 'media_mode_auto' },
57
- notes: 'Twitter transcript skipped (media transcript mode is auto; enable --video-mode transcript to force audio).',
60
+ metadata: { provider: "generic", kind: "twitter", reason: "media_mode_auto" },
61
+ notes: "Twitter transcript skipped (media transcript mode is auto; enable --video-mode transcript to force audio).",
58
62
  };
59
63
  }
60
- if (!isTwitterStatusUrl(context.url)) {
64
+ if (!twitterMedia) {
61
65
  return {
62
66
  text: null,
63
67
  source: null,
64
68
  attemptedProviders,
65
- metadata: { provider: 'generic', reason: 'not_implemented' },
66
- notes: notes.length > 0 ? notes.join('; ') : null,
69
+ metadata: { provider: "generic", reason: "not_implemented" },
70
+ notes: notes.length > 0 ? notes.join("; ") : null,
67
71
  };
68
72
  }
69
73
  if (!options.ytDlpPath) {
@@ -71,25 +75,23 @@ export const fetchTranscript = async (context, options) => {
71
75
  text: null,
72
76
  source: null,
73
77
  attemptedProviders,
74
- metadata: { provider: 'generic', kind: 'twitter', reason: 'missing_yt_dlp' },
75
- notes: 'yt-dlp is not configured (set YT_DLP_PATH or ensure yt-dlp is on PATH)',
78
+ metadata: { provider: "generic", kind: "twitter", reason: "missing_yt_dlp" },
79
+ notes: "yt-dlp is not configured (set YT_DLP_PATH or ensure yt-dlp is on PATH)",
76
80
  };
77
81
  }
78
82
  const transcriptionAvailability = await resolveTranscriptionAvailability({
79
- env: options.env,
80
- openaiApiKey: options.openaiApiKey,
81
- falApiKey: options.falApiKey,
83
+ transcription,
82
84
  });
83
85
  if (!transcriptionAvailability.hasAnyProvider) {
84
86
  return {
85
87
  text: null,
86
88
  source: null,
87
89
  attemptedProviders,
88
- metadata: { provider: 'generic', kind: 'twitter', reason: 'missing_transcription_keys' },
89
- notes: 'Missing transcription provider (install whisper-cpp or set OPENAI_API_KEY/FAL_KEY)',
90
+ metadata: { provider: "generic", kind: "twitter", reason: "missing_transcription_keys" },
91
+ notes: "Missing transcription provider (install whisper-cpp or set OPENAI_API_KEY/FAL_KEY)",
90
92
  };
91
93
  }
92
- attemptedProviders.push('yt-dlp');
94
+ attemptedProviders.push("yt-dlp");
93
95
  const resolved = options.resolveTwitterCookies
94
96
  ? await options.resolveTwitterCookies({ url: context.url })
95
97
  : null;
@@ -97,20 +99,18 @@ export const fetchTranscript = async (context, options) => {
97
99
  notes.push(...resolved.warnings);
98
100
  const extraArgs = [];
99
101
  if (resolved?.cookiesFromBrowser) {
100
- extraArgs.push('--cookies-from-browser', resolved.cookiesFromBrowser);
102
+ extraArgs.push("--cookies-from-browser", resolved.cookiesFromBrowser);
101
103
  if (resolved.source)
102
104
  notes.push(`Using X cookies from ${resolved.source}`);
103
105
  }
104
- const mod = await import('./youtube/yt-dlp.js');
106
+ const mod = await import("./youtube/yt-dlp.js");
105
107
  const ytdlpResult = await mod.fetchTranscriptWithYtDlp({
106
108
  ytDlpPath: options.ytDlpPath,
107
- env: options.env,
108
- openaiApiKey: options.openaiApiKey,
109
- falApiKey: options.falApiKey,
109
+ transcription,
110
110
  mediaCache: options.mediaCache ?? null,
111
111
  url: context.url,
112
112
  onProgress: options.onProgress ?? null,
113
- service: 'generic',
113
+ service: "generic",
114
114
  extraArgs: extraArgs.length > 0 ? extraArgs : undefined,
115
115
  mediaKind: mediaKindHint,
116
116
  });
@@ -120,15 +120,15 @@ export const fetchTranscript = async (context, options) => {
120
120
  if (ytdlpResult.text) {
121
121
  return {
122
122
  text: normalizeTranscriptText(ytdlpResult.text),
123
- source: 'yt-dlp',
123
+ source: "yt-dlp",
124
124
  attemptedProviders,
125
125
  metadata: {
126
- provider: 'generic',
127
- kind: 'twitter',
126
+ provider: "generic",
127
+ kind: "twitter",
128
128
  transcriptionProvider: ytdlpResult.provider,
129
129
  cookieSource: resolved?.source ?? null,
130
130
  },
131
- notes: notes.length > 0 ? notes.join('; ') : null,
131
+ notes: notes.length > 0 ? notes.join("; ") : null,
132
132
  };
133
133
  }
134
134
  if (ytdlpResult.error) {
@@ -139,45 +139,45 @@ export const fetchTranscript = async (context, options) => {
139
139
  source: null,
140
140
  attemptedProviders,
141
141
  metadata: {
142
- provider: 'generic',
143
- kind: 'twitter',
144
- reason: ytdlpResult.error ? 'yt_dlp_failed' : 'no_transcript',
142
+ provider: "generic",
143
+ kind: "twitter",
144
+ reason: ytdlpResult.error ? "yt_dlp_failed" : "no_transcript",
145
145
  transcriptionProvider: ytdlpResult.provider,
146
146
  },
147
- notes: notes.length > 0 ? notes.join('; ') : null,
147
+ notes: notes.length > 0 ? notes.join("; ") : null,
148
148
  };
149
149
  };
150
150
  function detectEmbeddedMedia(html, baseUrl) {
151
151
  const $ = load(html);
152
152
  const trackCandidates = [];
153
153
  $('track[kind="captions"], track[kind="subtitles"]').each((_idx, el) => {
154
- const src = $(el).attr('src')?.trim();
154
+ const src = $(el).attr("src")?.trim();
155
155
  if (!src)
156
156
  return;
157
157
  const url = resolveAbsoluteUrl(src, baseUrl);
158
158
  if (!url)
159
159
  return;
160
- const type = $(el).attr('type')?.trim() ?? null;
161
- const language = $(el).attr('srclang')?.trim() ?? $(el).attr('lang')?.trim() ?? null;
160
+ const type = $(el).attr("type")?.trim() ?? null;
161
+ const language = $(el).attr("srclang")?.trim() ?? $(el).attr("lang")?.trim() ?? null;
162
162
  trackCandidates.push({ url, type, language });
163
163
  });
164
164
  const track = selectPreferredTrack(trackCandidates);
165
- const videoUrl = resolveFirstMediaUrl($, baseUrl, 'video');
166
- const audioUrl = resolveFirstMediaUrl($, baseUrl, 'audio');
167
- const ogVideo = resolveOgMediaUrl($, baseUrl, 'video');
168
- const ogAudio = resolveOgMediaUrl($, baseUrl, 'audio');
165
+ const videoUrl = resolveFirstMediaUrl($, baseUrl, "video");
166
+ const audioUrl = resolveFirstMediaUrl($, baseUrl, "audio");
167
+ const ogVideo = resolveOgMediaUrl($, baseUrl, "video");
168
+ const ogAudio = resolveOgMediaUrl($, baseUrl, "audio");
169
169
  if (videoUrl || ogVideo) {
170
170
  const mediaUrl = pickMediaUrl([videoUrl, ogVideo]);
171
- return { kind: 'video', mediaUrl, track };
171
+ return { kind: "video", mediaUrl, track };
172
172
  }
173
173
  if (audioUrl || ogAudio) {
174
174
  const mediaUrl = pickMediaUrl([audioUrl, ogAudio]);
175
- return { kind: 'audio', mediaUrl, track };
175
+ return { kind: "audio", mediaUrl, track };
176
176
  }
177
- const hasVideoTag = $('video').length > 0;
178
- const hasAudioTag = !hasVideoTag && $('audio').length > 0;
177
+ const hasVideoTag = $("video").length > 0;
178
+ const hasAudioTag = !hasVideoTag && $("audio").length > 0;
179
179
  if (track || hasVideoTag || hasAudioTag) {
180
- return { kind: hasAudioTag ? 'audio' : 'video', mediaUrl: null, track };
180
+ return { kind: hasAudioTag ? "audio" : "video", mediaUrl: null, track };
181
181
  }
182
182
  return null;
183
183
  }
@@ -188,11 +188,11 @@ function selectPreferredTrack(tracks) {
188
188
  ...track,
189
189
  language: track.language?.toLowerCase() ?? null,
190
190
  }));
191
- const english = normalized.find((track) => track.language?.startsWith('en'));
191
+ const english = normalized.find((track) => track.language?.startsWith("en"));
192
192
  return english ?? normalized[0] ?? null;
193
193
  }
194
194
  function resolveFirstMediaUrl($, baseUrl, tag) {
195
- const direct = $(`${tag}[src]`).first().attr('src') ?? $(`${tag} source[src]`).first().attr('src') ?? null;
195
+ const direct = $(`${tag}[src]`).first().attr("src") ?? $(`${tag} source[src]`).first().attr("src") ?? null;
196
196
  if (!direct)
197
197
  return null;
198
198
  return resolveAbsoluteUrl(direct, baseUrl);
@@ -200,7 +200,7 @@ function resolveFirstMediaUrl($, baseUrl, tag) {
200
200
  function resolveOgMediaUrl($, baseUrl, kind) {
201
201
  const meta = $(`meta[property="og:${kind}"], meta[property="og:${kind}:url"], meta[property="og:${kind}:secure_url"], meta[name="og:${kind}"], meta[name="og:${kind}:url"], meta[name="og:${kind}:secure_url"]`)
202
202
  .first()
203
- .attr('content');
203
+ .attr("content");
204
204
  if (!meta)
205
205
  return null;
206
206
  return resolveAbsoluteUrl(meta, baseUrl);
@@ -231,16 +231,16 @@ function pickMediaUrl(candidates) {
231
231
  async function fetchCaptionTrack(fetchImpl, track, notes, includeSegments) {
232
232
  try {
233
233
  const res = await fetchImpl(track.url, {
234
- headers: { accept: 'text/vtt,text/plain,application/json;q=0.9,*/*;q=0.8' },
234
+ headers: { accept: "text/vtt,text/plain,application/json;q=0.9,*/*;q=0.8" },
235
235
  });
236
236
  if (!res.ok) {
237
237
  notes.push(`Embedded captions fetch failed (${res.status})`);
238
238
  return null;
239
239
  }
240
240
  const body = await res.text();
241
- const contentType = res.headers.get('content-type')?.toLowerCase() ?? '';
242
- const type = track.type?.toLowerCase() ?? '';
243
- if (type.includes('application/json') || contentType.includes('application/json')) {
241
+ const contentType = res.headers.get("content-type")?.toLowerCase() ?? "";
242
+ const type = track.type?.toLowerCase() ?? "";
243
+ if (type.includes("application/json") || contentType.includes("application/json")) {
244
244
  try {
245
245
  const parsed = JSON.parse(body);
246
246
  const text = jsonTranscriptToPlainText(parsed);
@@ -250,13 +250,13 @@ async function fetchCaptionTrack(fetchImpl, track, notes, includeSegments) {
250
250
  return { text, segments };
251
251
  }
252
252
  catch {
253
- notes.push('Embedded captions JSON parse failed');
253
+ notes.push("Embedded captions JSON parse failed");
254
254
  return null;
255
255
  }
256
256
  }
257
- if (type.includes('text/vtt') ||
258
- contentType.includes('text/vtt') ||
259
- track.url.toLowerCase().endsWith('.vtt')) {
257
+ if (type.includes("text/vtt") ||
258
+ contentType.includes("text/vtt") ||
259
+ track.url.toLowerCase().endsWith(".vtt")) {
260
260
  const plain = vttToPlainText(body);
261
261
  if (plain.length === 0)
262
262
  return null;
@@ -271,31 +271,27 @@ async function fetchCaptionTrack(fetchImpl, track, notes, includeSegments) {
271
271
  return null;
272
272
  }
273
273
  }
274
- async function fetchDirectMediaTranscript({ url, options, notes, attemptedProviders, kind, }) {
274
+ async function fetchDirectMediaTranscript({ url, options, transcription, notes, attemptedProviders, kind, }) {
275
275
  if (!options.ytDlpPath) {
276
- notes.push('yt-dlp is not configured (set YT_DLP_PATH or ensure yt-dlp is on PATH)');
276
+ notes.push("yt-dlp is not configured (set YT_DLP_PATH or ensure yt-dlp is on PATH)");
277
277
  return null;
278
278
  }
279
279
  const transcriptionAvailability = await resolveTranscriptionAvailability({
280
- env: options.env,
281
- openaiApiKey: options.openaiApiKey,
282
- falApiKey: options.falApiKey,
280
+ transcription,
283
281
  });
284
282
  if (!transcriptionAvailability.hasAnyProvider) {
285
- notes.push('Missing transcription provider (install whisper-cpp or set OPENAI_API_KEY/FAL_KEY)');
283
+ notes.push("Missing transcription provider (install whisper-cpp or set GROQ_API_KEY/OPENAI_API_KEY/FAL_KEY)");
286
284
  return null;
287
285
  }
288
- attemptedProviders.push('yt-dlp');
289
- const mod = await import('./youtube/yt-dlp.js');
286
+ attemptedProviders.push("yt-dlp");
287
+ const mod = await import("./youtube/yt-dlp.js");
290
288
  const ytdlpResult = await mod.fetchTranscriptWithYtDlp({
291
289
  ytDlpPath: options.ytDlpPath,
292
- env: options.env,
293
- openaiApiKey: options.openaiApiKey,
294
- falApiKey: options.falApiKey,
290
+ transcription,
295
291
  mediaCache: options.mediaCache ?? null,
296
292
  url,
297
293
  onProgress: options.onProgress ?? null,
298
- service: 'generic',
294
+ service: "generic",
299
295
  mediaKind: kind ?? options.mediaKindHint ?? null,
300
296
  });
301
297
  if (ytdlpResult.notes.length > 0) {
@@ -304,14 +300,14 @@ async function fetchDirectMediaTranscript({ url, options, notes, attemptedProvid
304
300
  if (ytdlpResult.text) {
305
301
  return {
306
302
  text: normalizeTranscriptText(ytdlpResult.text),
307
- source: 'yt-dlp',
303
+ source: "yt-dlp",
308
304
  attemptedProviders,
309
305
  metadata: {
310
- provider: 'generic',
311
- kind: kind ?? 'media',
306
+ provider: "generic",
307
+ kind: kind ?? "media",
312
308
  transcriptionProvider: ytdlpResult.provider,
313
309
  },
314
- notes: notes.length > 0 ? notes.join('; ') : null,
310
+ notes: notes.length > 0 ? notes.join("; ") : null,
315
311
  };
316
312
  }
317
313
  if (ytdlpResult.error) {
@@ -1 +1 @@
1
- {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../../../src/content/transcript/providers/generic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../../../src/content/transcript/providers/generic.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { extractAppleEpisodeTitleFromHtml, extractApplePodcastIds, extractEmbeddedJsonUrl, } from './apple.js';
2
- import { TRANSCRIPTION_TIMEOUT_MS } from './constants.js';
3
- import { resolveApplePodcastEpisodeFromItunesLookup } from './itunes.js';
4
- import { buildWhisperResult, joinNotes } from './results.js';
5
- import { decodeXmlEntities, extractEnclosureForEpisode, extractEnclosureFromFeed, tryFetchTranscriptFromFeedXml, } from './rss.js';
1
+ import { extractAppleEpisodeTitleFromHtml, extractApplePodcastIds, extractEmbeddedJsonUrl, } from "./apple.js";
2
+ import { TRANSCRIPTION_TIMEOUT_MS } from "./constants.js";
3
+ import { resolveApplePodcastEpisodeFromItunesLookup } from "./itunes.js";
4
+ import { buildWhisperResult, joinNotes } from "./results.js";
5
+ import { decodeXmlEntities, extractEnclosureForEpisode, extractEnclosureFromFeed, tryFetchTranscriptFromFeedXml, } from "./rss.js";
6
6
  export async function fetchAppleTranscriptFromItunesLookup(flow) {
7
- const appleIds = typeof flow.context.html !== 'string' ? extractApplePodcastIds(flow.context.url) : null;
7
+ const appleIds = typeof flow.context.html !== "string" ? extractApplePodcastIds(flow.context.url) : null;
8
8
  if (!appleIds)
9
9
  return null;
10
10
  try {
@@ -14,12 +14,12 @@ export async function fetchAppleTranscriptFromItunesLookup(flow) {
14
14
  episodeId: appleIds.episodeId,
15
15
  });
16
16
  if (!episode) {
17
- throw new Error('iTunes lookup did not return an episodeUrl');
17
+ throw new Error("iTunes lookup did not return an episodeUrl");
18
18
  }
19
19
  if (episode.feedUrl && episode.episodeTitle) {
20
- flow.pushOnce('podcastTranscript');
20
+ flow.pushOnce("podcastTranscript");
21
21
  const feedResponse = await flow.options.fetch(episode.feedUrl, {
22
- redirect: 'follow',
22
+ redirect: "follow",
23
23
  signal: AbortSignal.timeout(TRANSCRIPTION_TIMEOUT_MS),
24
24
  });
25
25
  if (feedResponse.ok) {
@@ -34,16 +34,16 @@ export async function fetchAppleTranscriptFromItunesLookup(flow) {
34
34
  });
35
35
  }
36
36
  if (maybeTranscript) {
37
- flow.notes.push('Resolved Apple Podcasts episode via RSS <podcast:transcript>');
37
+ flow.notes.push("Resolved Apple Podcasts episode via RSS <podcast:transcript>");
38
38
  return {
39
39
  text: maybeTranscript.text,
40
- source: 'podcastTranscript',
40
+ source: "podcastTranscript",
41
41
  segments: flow.options.transcriptTimestamps ? (maybeTranscript.segments ?? null) : null,
42
42
  attemptedProviders: flow.attemptedProviders,
43
43
  notes: joinNotes(flow.notes),
44
44
  metadata: {
45
- provider: 'podcast',
46
- kind: 'apple_itunes_rss_transcript',
45
+ provider: "podcast",
46
+ kind: "apple_itunes_rss_transcript",
47
47
  showId: appleIds.showId,
48
48
  episodeId: appleIds.episodeId,
49
49
  feedUrl: episode.feedUrl,
@@ -58,14 +58,14 @@ export async function fetchAppleTranscriptFromItunesLookup(flow) {
58
58
  const missing = flow.ensureTranscriptionProvider();
59
59
  if (missing)
60
60
  return missing;
61
- flow.pushOnce('whisper');
61
+ flow.pushOnce("whisper");
62
62
  const result = await flow.transcribe({
63
63
  url: episode.episodeUrl,
64
- filenameHint: episode.fileExtension ? `episode.${episode.fileExtension}` : 'episode.mp3',
64
+ filenameHint: episode.fileExtension ? `episode.${episode.fileExtension}` : "episode.mp3",
65
65
  durationSecondsHint: episode.durationSeconds,
66
66
  });
67
67
  if (result.text) {
68
- flow.notes.push('Resolved Apple Podcasts episode via iTunes lookup');
68
+ flow.notes.push("Resolved Apple Podcasts episode via iTunes lookup");
69
69
  }
70
70
  return buildWhisperResult({
71
71
  attemptedProviders: flow.attemptedProviders,
@@ -73,8 +73,8 @@ export async function fetchAppleTranscriptFromItunesLookup(flow) {
73
73
  outcome: result,
74
74
  includeProviderOnFailure: true,
75
75
  metadata: {
76
- provider: 'podcast',
77
- kind: 'apple_itunes_episode',
76
+ provider: "podcast",
77
+ kind: "apple_itunes_episode",
78
78
  showId: appleIds.showId,
79
79
  episodeId: appleIds.episodeId,
80
80
  episodeUrl: episode.episodeUrl,
@@ -89,15 +89,15 @@ export async function fetchAppleTranscriptFromItunesLookup(flow) {
89
89
  source: null,
90
90
  attemptedProviders: flow.attemptedProviders,
91
91
  notes: `Apple Podcasts iTunes lookup failed: ${error instanceof Error ? error.message : String(error)}`,
92
- metadata: { provider: 'podcast', kind: 'apple_itunes_episode', showId: appleIds.showId },
92
+ metadata: { provider: "podcast", kind: "apple_itunes_episode", showId: appleIds.showId },
93
93
  };
94
94
  }
95
95
  }
96
96
  export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
97
- if (typeof flow.context.html !== 'string')
97
+ if (typeof flow.context.html !== "string")
98
98
  return null;
99
99
  const appleEpisodeTitle = extractAppleEpisodeTitleFromHtml(flow.context.html);
100
- const appleFeedUrl = extractEmbeddedJsonUrl(flow.context.html, 'feedUrl');
100
+ const appleFeedUrl = extractEmbeddedJsonUrl(flow.context.html, "feedUrl");
101
101
  if (appleFeedUrl) {
102
102
  try {
103
103
  const feedResponse = await flow.options.fetch(appleFeedUrl, {
@@ -109,7 +109,7 @@ export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
109
109
  const xml = await feedResponse.text();
110
110
  let maybeTranscript = null;
111
111
  if (/podcast:transcript/i.test(xml)) {
112
- flow.pushOnce('podcastTranscript');
112
+ flow.pushOnce("podcastTranscript");
113
113
  maybeTranscript = await tryFetchTranscriptFromFeedXml({
114
114
  fetchImpl: flow.options.fetch,
115
115
  feedXml: xml,
@@ -120,13 +120,13 @@ export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
120
120
  if (maybeTranscript) {
121
121
  return {
122
122
  text: maybeTranscript.text,
123
- source: 'podcastTranscript',
123
+ source: "podcastTranscript",
124
124
  segments: flow.options.transcriptTimestamps ? (maybeTranscript.segments ?? null) : null,
125
125
  attemptedProviders: flow.attemptedProviders,
126
126
  notes: joinNotes(flow.notes),
127
127
  metadata: {
128
- provider: 'podcast',
129
- kind: 'apple_feed_transcript',
128
+ provider: "podcast",
129
+ kind: "apple_feed_transcript",
130
130
  feedUrl: appleFeedUrl,
131
131
  episodeTitle: appleEpisodeTitle,
132
132
  transcriptUrl: maybeTranscript.transcriptUrl,
@@ -143,12 +143,12 @@ export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
143
143
  const missing = flow.ensureTranscriptionProvider();
144
144
  if (missing)
145
145
  return missing;
146
- flow.pushOnce('whisper');
146
+ flow.pushOnce("whisper");
147
147
  let result;
148
148
  try {
149
149
  result = await flow.transcribe({
150
150
  url: resolvedUrl,
151
- filenameHint: 'episode.mp3',
151
+ filenameHint: "episode.mp3",
152
152
  durationSecondsHint: durationSeconds,
153
153
  });
154
154
  }
@@ -159,8 +159,8 @@ export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
159
159
  attemptedProviders: flow.attemptedProviders,
160
160
  notes: error instanceof Error ? error.message : String(error),
161
161
  metadata: {
162
- provider: 'podcast',
163
- kind: 'apple_feed_url',
162
+ provider: "podcast",
163
+ kind: "apple_feed_url",
164
164
  feedUrl: appleFeedUrl,
165
165
  episodeTitle: appleEpisodeTitle,
166
166
  enclosureUrl: resolvedUrl,
@@ -173,8 +173,8 @@ export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
173
173
  notes: flow.notes,
174
174
  outcome: result,
175
175
  metadata: {
176
- provider: 'podcast',
177
- kind: 'apple_feed_url',
176
+ provider: "podcast",
177
+ kind: "apple_feed_url",
178
178
  feedUrl: appleFeedUrl,
179
179
  episodeTitle: appleEpisodeTitle,
180
180
  enclosureUrl: resolvedUrl,
@@ -189,17 +189,17 @@ export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
189
189
  flow.notes.push(`Podcast feed fetch failed: ${error instanceof Error ? error.message : String(error)}`);
190
190
  }
191
191
  }
192
- const appleStreamUrl = extractEmbeddedJsonUrl(flow.context.html, 'streamUrl');
192
+ const appleStreamUrl = extractEmbeddedJsonUrl(flow.context.html, "streamUrl");
193
193
  if (appleStreamUrl) {
194
194
  const missing = flow.ensureTranscriptionProvider();
195
195
  if (missing)
196
196
  return missing;
197
- flow.pushOnce('whisper');
197
+ flow.pushOnce("whisper");
198
198
  let result;
199
199
  try {
200
200
  result = await flow.transcribe({
201
201
  url: appleStreamUrl,
202
- filenameHint: 'episode.mp3',
202
+ filenameHint: "episode.mp3",
203
203
  durationSecondsHint: null,
204
204
  });
205
205
  }
@@ -209,14 +209,14 @@ export async function fetchAppleTranscriptFromEmbeddedHtml(flow) {
209
209
  source: null,
210
210
  attemptedProviders: flow.attemptedProviders,
211
211
  notes: error instanceof Error ? error.message : String(error),
212
- metadata: { provider: 'podcast', kind: 'apple_stream_url', streamUrl: appleStreamUrl },
212
+ metadata: { provider: "podcast", kind: "apple_stream_url", streamUrl: appleStreamUrl },
213
213
  };
214
214
  }
215
215
  return buildWhisperResult({
216
216
  attemptedProviders: flow.attemptedProviders,
217
217
  notes: flow.notes,
218
218
  outcome: result,
219
- metadata: { provider: 'podcast', kind: 'apple_stream_url', streamUrl: appleStreamUrl },
219
+ metadata: { provider: "podcast", kind: "apple_stream_url", streamUrl: appleStreamUrl },
220
220
  });
221
221
  }
222
222
  return null;