@steipete/summarize-core 0.11.1 → 0.13.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 (138) hide show
  1. package/dist/esm/content/bun.js +21 -0
  2. package/dist/esm/content/bun.js.map +1 -0
  3. package/dist/esm/content/direct-media.js +100 -0
  4. package/dist/esm/content/direct-media.js.map +1 -0
  5. package/dist/esm/content/index.js +2 -1
  6. package/dist/esm/content/index.js.map +1 -1
  7. package/dist/esm/content/link-preview/client.js +6 -0
  8. package/dist/esm/content/link-preview/client.js.map +1 -1
  9. package/dist/esm/content/link-preview/content/fetcher.js +19 -2
  10. package/dist/esm/content/link-preview/content/fetcher.js.map +1 -1
  11. package/dist/esm/content/link-preview/content/firecrawl.js.map +1 -1
  12. package/dist/esm/content/link-preview/content/html.js.map +1 -1
  13. package/dist/esm/content/link-preview/content/index.js +29 -12
  14. package/dist/esm/content/link-preview/content/index.js.map +1 -1
  15. package/dist/esm/content/link-preview/content/utils.js.map +1 -1
  16. package/dist/esm/content/link-preview/content/video.js +1 -1
  17. package/dist/esm/content/link-preview/content/video.js.map +1 -1
  18. package/dist/esm/content/local-file.js +58 -0
  19. package/dist/esm/content/local-file.js.map +1 -0
  20. package/dist/esm/content/transcript/index.js +2 -0
  21. package/dist/esm/content/transcript/index.js.map +1 -1
  22. package/dist/esm/content/transcript/providers/generic-direct-media.js +47 -0
  23. package/dist/esm/content/transcript/providers/generic-direct-media.js.map +1 -0
  24. package/dist/esm/content/transcript/providers/generic-embedded.js +126 -0
  25. package/dist/esm/content/transcript/providers/generic-embedded.js.map +1 -0
  26. package/dist/esm/content/transcript/providers/generic-twitter.js +78 -0
  27. package/dist/esm/content/transcript/providers/generic-twitter.js.map +1 -0
  28. package/dist/esm/content/transcript/providers/generic.js +12 -248
  29. package/dist/esm/content/transcript/providers/generic.js.map +1 -1
  30. package/dist/esm/content/transcript/providers/podcast/apple-flow.js.map +1 -1
  31. package/dist/esm/content/transcript/providers/podcast/media.js +9 -1
  32. package/dist/esm/content/transcript/providers/podcast/media.js.map +1 -1
  33. package/dist/esm/content/transcript/providers/podcast/provider-flow.js +157 -0
  34. package/dist/esm/content/transcript/providers/podcast/provider-flow.js.map +1 -0
  35. package/dist/esm/content/transcript/providers/podcast/rss-feed.js +123 -0
  36. package/dist/esm/content/transcript/providers/podcast/rss-feed.js.map +1 -0
  37. package/dist/esm/content/transcript/providers/podcast/rss-transcript.js +113 -0
  38. package/dist/esm/content/transcript/providers/podcast/rss-transcript.js.map +1 -0
  39. package/dist/esm/content/transcript/providers/podcast/rss.js +2 -226
  40. package/dist/esm/content/transcript/providers/podcast/rss.js.map +1 -1
  41. package/dist/esm/content/transcript/providers/podcast/spotify-flow.js.map +1 -1
  42. package/dist/esm/content/transcript/providers/podcast.js +26 -155
  43. package/dist/esm/content/transcript/providers/podcast.js.map +1 -1
  44. package/dist/esm/content/transcript/providers/transcription-capability.js +22 -0
  45. package/dist/esm/content/transcript/providers/transcription-capability.js.map +1 -0
  46. package/dist/esm/content/transcript/providers/transcription-start.js +43 -32
  47. package/dist/esm/content/transcript/providers/transcription-start.js.map +1 -1
  48. package/dist/esm/content/transcript/providers/youtube/api.js +3 -2
  49. package/dist/esm/content/transcript/providers/youtube/api.js.map +1 -1
  50. package/dist/esm/content/transcript/providers/youtube/captions-player.js +173 -0
  51. package/dist/esm/content/transcript/providers/youtube/captions-player.js.map +1 -0
  52. package/dist/esm/content/transcript/providers/youtube/captions-shared.js +8 -0
  53. package/dist/esm/content/transcript/providers/youtube/captions-shared.js.map +1 -0
  54. package/dist/esm/content/transcript/providers/youtube/captions-transcript.js +361 -0
  55. package/dist/esm/content/transcript/providers/youtube/captions-transcript.js.map +1 -0
  56. package/dist/esm/content/transcript/providers/youtube/captions.js +2 -557
  57. package/dist/esm/content/transcript/providers/youtube/captions.js.map +1 -1
  58. package/dist/esm/content/transcript/providers/youtube/provider-flow.js +217 -0
  59. package/dist/esm/content/transcript/providers/youtube/provider-flow.js.map +1 -0
  60. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js +33 -9
  61. package/dist/esm/content/transcript/providers/youtube/yt-dlp.js.map +1 -1
  62. package/dist/esm/content/transcript/providers/youtube.js +42 -194
  63. package/dist/esm/content/transcript/providers/youtube.js.map +1 -1
  64. package/dist/esm/content/transcript/transcription-config.js +24 -4
  65. package/dist/esm/content/transcript/transcription-config.js.map +1 -1
  66. package/dist/esm/content/url.js +5 -33
  67. package/dist/esm/content/url.js.map +1 -1
  68. package/dist/esm/processes.js.map +1 -1
  69. package/dist/esm/prompts/format.js +6 -0
  70. package/dist/esm/prompts/format.js.map +1 -1
  71. package/dist/esm/prompts/link-summary.js +27 -3
  72. package/dist/esm/prompts/link-summary.js.map +1 -1
  73. package/dist/esm/transcription/onnx-cli.js.map +1 -1
  74. package/dist/esm/transcription/whisper/assemblyai.js +132 -0
  75. package/dist/esm/transcription/whisper/assemblyai.js.map +1 -0
  76. package/dist/esm/transcription/whisper/chunking.js +64 -0
  77. package/dist/esm/transcription/whisper/chunking.js.map +1 -0
  78. package/dist/esm/transcription/whisper/cloud-providers.js +69 -0
  79. package/dist/esm/transcription/whisper/cloud-providers.js.map +1 -0
  80. package/dist/esm/transcription/whisper/core.js +320 -390
  81. package/dist/esm/transcription/whisper/core.js.map +1 -1
  82. package/dist/esm/transcription/whisper/gemini.js +324 -0
  83. package/dist/esm/transcription/whisper/gemini.js.map +1 -0
  84. package/dist/esm/transcription/whisper/groq.js +62 -1
  85. package/dist/esm/transcription/whisper/groq.js.map +1 -1
  86. package/dist/esm/transcription/whisper/preferences.js +16 -0
  87. package/dist/esm/transcription/whisper/preferences.js.map +1 -0
  88. package/dist/esm/transcription/whisper/provider-setup.js +62 -0
  89. package/dist/esm/transcription/whisper/provider-setup.js.map +1 -0
  90. package/dist/esm/transcription/whisper/remote-provider-attempts.js +189 -0
  91. package/dist/esm/transcription/whisper/remote-provider-attempts.js.map +1 -0
  92. package/dist/esm/transcription/whisper/remote.js +220 -0
  93. package/dist/esm/transcription/whisper/remote.js.map +1 -0
  94. package/dist/esm/transcription/whisper/whisper-cpp.js +21 -18
  95. package/dist/esm/transcription/whisper/whisper-cpp.js.map +1 -1
  96. package/dist/types/content/bun.d.ts +6 -0
  97. package/dist/types/content/direct-media.d.ts +9 -0
  98. package/dist/types/content/index.d.ts +2 -1
  99. package/dist/types/content/link-preview/client.d.ts +3 -1
  100. package/dist/types/content/link-preview/content/fetcher.d.ts +1 -1
  101. package/dist/types/content/link-preview/content/html.d.ts +1 -1
  102. package/dist/types/content/link-preview/deps.d.ts +8 -2
  103. package/dist/types/content/link-preview/types.d.ts +1 -1
  104. package/dist/types/content/local-file.d.ts +16 -0
  105. package/dist/types/content/transcript/providers/generic-direct-media.d.ts +11 -0
  106. package/dist/types/content/transcript/providers/generic-embedded.d.ts +16 -0
  107. package/dist/types/content/transcript/providers/generic-twitter.d.ts +11 -0
  108. package/dist/types/content/transcript/providers/podcast/flow-context.d.ts +3 -0
  109. package/dist/types/content/transcript/providers/podcast/media.d.ts +4 -2
  110. package/dist/types/content/transcript/providers/podcast/provider-flow.d.ts +7 -0
  111. package/dist/types/content/transcript/providers/podcast/rss-feed.d.ts +15 -0
  112. package/dist/types/content/transcript/providers/podcast/rss-transcript.d.ts +12 -0
  113. package/dist/types/content/transcript/providers/podcast/rss.d.ts +2 -24
  114. package/dist/types/content/transcript/providers/transcription-capability.d.ts +18 -0
  115. package/dist/types/content/transcript/providers/transcription-start.d.ts +11 -3
  116. package/dist/types/content/transcript/providers/youtube/captions-player.d.ts +12 -0
  117. package/dist/types/content/transcript/providers/youtube/captions-shared.d.ts +42 -0
  118. package/dist/types/content/transcript/providers/youtube/captions-transcript.d.ts +4 -0
  119. package/dist/types/content/transcript/providers/youtube/captions.d.ts +2 -19
  120. package/dist/types/content/transcript/providers/youtube/provider-flow.d.ts +34 -0
  121. package/dist/types/content/transcript/providers/youtube/yt-dlp.d.ts +4 -2
  122. package/dist/types/content/transcript/transcription-config.d.ts +6 -0
  123. package/dist/types/content/transcript/types.d.ts +1 -0
  124. package/dist/types/content/url.d.ts +2 -3
  125. package/dist/types/prompts/format.d.ts +1 -0
  126. package/dist/types/prompts/link-summary.d.ts +2 -1
  127. package/dist/types/transcription/whisper/assemblyai.d.ts +17 -0
  128. package/dist/types/transcription/whisper/chunking.d.ts +11 -0
  129. package/dist/types/transcription/whisper/cloud-providers.d.ts +22 -0
  130. package/dist/types/transcription/whisper/core.d.ts +12 -14
  131. package/dist/types/transcription/whisper/gemini.d.ts +14 -0
  132. package/dist/types/transcription/whisper/preferences.d.ts +4 -0
  133. package/dist/types/transcription/whisper/provider-setup.d.ts +30 -0
  134. package/dist/types/transcription/whisper/remote-provider-attempts.d.ts +51 -0
  135. package/dist/types/transcription/whisper/remote.d.ts +51 -0
  136. package/dist/types/transcription/whisper/types.d.ts +1 -1
  137. package/dist/types/transcription/whisper/whisper-cpp.d.ts +4 -3
  138. package/package.json +14 -10
@@ -0,0 +1,123 @@
1
+ export function looksLikeRssOrAtomFeed(xml) {
2
+ const head = xml.slice(0, 4096).trimStart().toLowerCase();
3
+ if (head.startsWith("<rss") || head.includes("<rss"))
4
+ return true;
5
+ if (head.startsWith("<?xml") && (head.includes("<rss") || head.includes("<feed")))
6
+ return true;
7
+ if (head.startsWith("<feed") || head.includes("<feed"))
8
+ return true;
9
+ return false;
10
+ }
11
+ export function extractEnclosureFromFeed(xml) {
12
+ const items = extractFeedItems(xml);
13
+ for (const item of items) {
14
+ const enclosureUrl = extractEnclosureUrlFromItem(item);
15
+ if (!enclosureUrl)
16
+ continue;
17
+ return { enclosureUrl, durationSeconds: extractItemDurationSeconds(item) };
18
+ }
19
+ const enclosureMatch = xml.match(/<enclosure\b[^>]*\burl\s*=\s*(['"])([^'"]+)\1/i);
20
+ if (enclosureMatch?.[2]) {
21
+ return { enclosureUrl: enclosureMatch[2], durationSeconds: extractItemDurationSeconds(xml) };
22
+ }
23
+ const atomMatch = xml.match(/<link\b[^>]*\brel\s*=\s*(['"])enclosure\1[^>]*\bhref\s*=\s*(['"])([^'"]+)\2/i);
24
+ if (atomMatch?.[3]) {
25
+ return { enclosureUrl: atomMatch[3], durationSeconds: extractItemDurationSeconds(xml) };
26
+ }
27
+ return null;
28
+ }
29
+ export function extractEnclosureForEpisode(feedXml, episodeTitle) {
30
+ const normalizedTarget = normalizeLooseTitle(episodeTitle);
31
+ const items = extractFeedItems(feedXml);
32
+ for (const item of items) {
33
+ const title = extractItemTitle(item);
34
+ if (!title)
35
+ continue;
36
+ if (normalizeLooseTitle(title) !== normalizedTarget)
37
+ continue;
38
+ const enclosureUrl = extractEnclosureUrlFromItem(item);
39
+ if (!enclosureUrl)
40
+ continue;
41
+ return { enclosureUrl, durationSeconds: extractItemDurationSeconds(item) };
42
+ }
43
+ return null;
44
+ }
45
+ export function extractItemDurationSeconds(itemXml) {
46
+ const match = itemXml.match(/<itunes:duration>([\s\S]*?)<\/itunes:duration>/i);
47
+ if (!match?.[1])
48
+ return null;
49
+ const raw = match[1]
50
+ .replaceAll(/<!\[CDATA\[/gi, "")
51
+ .replaceAll(/\]\]>/g, "")
52
+ .trim();
53
+ if (!raw)
54
+ return null;
55
+ if (/^\d+$/.test(raw)) {
56
+ const seconds = Number(raw);
57
+ return Number.isFinite(seconds) && seconds > 0 ? seconds : null;
58
+ }
59
+ const parts = raw
60
+ .split(":")
61
+ .map((value) => value.trim())
62
+ .filter(Boolean);
63
+ if (parts.length < 2 || parts.length > 3)
64
+ return null;
65
+ const nums = parts.map((value) => Number(value));
66
+ if (nums.some((n) => !Number.isFinite(n) || n < 0))
67
+ return null;
68
+ const seconds = (() => {
69
+ if (nums.length === 3) {
70
+ const [hours, minutes, secondsRaw] = nums;
71
+ if (hours === undefined || minutes === undefined || secondsRaw === undefined)
72
+ return null;
73
+ return Math.round(hours * 3600 + minutes * 60 + secondsRaw);
74
+ }
75
+ const [minutes, secondsRaw] = nums;
76
+ if (minutes === undefined || secondsRaw === undefined)
77
+ return null;
78
+ return Math.round(minutes * 60 + secondsRaw);
79
+ })();
80
+ if (seconds === null)
81
+ return null;
82
+ return seconds > 0 ? seconds : null;
83
+ }
84
+ export function decodeXmlEntities(value) {
85
+ return value
86
+ .replaceAll(/&amp;/gi, "&")
87
+ .replaceAll(/&#38;/g, "&")
88
+ .replaceAll(/&lt;/gi, "<")
89
+ .replaceAll(/&gt;/gi, ">")
90
+ .replaceAll(/&quot;/gi, '"')
91
+ .replaceAll(/&apos;/gi, "'");
92
+ }
93
+ export function normalizeLooseTitle(value) {
94
+ return value
95
+ .toLowerCase()
96
+ .normalize("NFKD")
97
+ .replaceAll(/\p{Diacritic}+/gu, "")
98
+ .replaceAll(/[^a-z0-9]+/g, " ")
99
+ .trim();
100
+ }
101
+ export function extractFeedItems(xml) {
102
+ return xml.match(/<item\b[\s\S]*?<\/item>/gi) ?? [];
103
+ }
104
+ export function extractItemTitle(itemXml) {
105
+ const match = itemXml.match(/<title>([\s\S]*?)<\/title>/i);
106
+ if (!match?.[1])
107
+ return null;
108
+ const raw = match[1]
109
+ .replaceAll(/<!\[CDATA\[/gi, "")
110
+ .replaceAll(/\]\]>/g, "")
111
+ .trim();
112
+ return raw.length > 0 ? raw : null;
113
+ }
114
+ export function extractEnclosureUrlFromItem(xml) {
115
+ const enclosureMatch = xml.match(/<enclosure\b[^>]*\burl\s*=\s*(['"])([^'"]+)\1/i);
116
+ if (enclosureMatch?.[2])
117
+ return enclosureMatch[2];
118
+ const atomMatch = xml.match(/<link\b[^>]*\brel\s*=\s*(['"])enclosure\1[^>]*\bhref\s*=\s*(['"])([^'"]+)\2/i);
119
+ if (atomMatch?.[3])
120
+ return atomMatch[3];
121
+ return null;
122
+ }
123
+ //# sourceMappingURL=rss-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rss-feed.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/podcast/rss-feed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { jsonTranscriptToPlainText, jsonTranscriptToSegments, vttToPlainText, vttToSegments, } from "../../parse.js";
2
+ import { TRANSCRIPTION_TIMEOUT_MS } from "./constants.js";
3
+ import { decodeXmlEntities, extractFeedItems, extractItemTitle, normalizeLooseTitle, } from "./rss-feed.js";
4
+ export async function tryFetchTranscriptFromFeedXml({ fetchImpl, feedXml, episodeTitle, notes, }) {
5
+ const items = extractFeedItems(feedXml);
6
+ const normalizedTarget = episodeTitle ? normalizeLooseTitle(episodeTitle) : null;
7
+ for (const item of items) {
8
+ if (normalizedTarget) {
9
+ const title = extractItemTitle(item);
10
+ if (!title || normalizeLooseTitle(title) !== normalizedTarget)
11
+ continue;
12
+ }
13
+ const preferred = selectPreferredTranscriptCandidate(extractPodcastTranscriptCandidatesFromItem(item));
14
+ if (!preferred) {
15
+ if (normalizedTarget)
16
+ return null;
17
+ continue;
18
+ }
19
+ const transcriptUrl = decodeXmlEntities(preferred.url);
20
+ try {
21
+ const res = await fetchImpl(transcriptUrl, {
22
+ redirect: "follow",
23
+ signal: AbortSignal.timeout(TRANSCRIPTION_TIMEOUT_MS),
24
+ headers: { accept: "text/vtt,text/plain,application/json;q=0.9,*/*;q=0.8" },
25
+ });
26
+ if (!res.ok)
27
+ throw new Error(`transcript fetch failed (${res.status})`);
28
+ const contentType = res.headers.get("content-type")?.toLowerCase().split(";")[0]?.trim() ?? null;
29
+ const effectiveType = preferred.type?.toLowerCase().split(";")[0]?.trim() ?? contentType;
30
+ const body = await res.text();
31
+ const parsed = parseTranscriptBody({
32
+ body,
33
+ transcriptUrl,
34
+ effectiveType,
35
+ });
36
+ if (!parsed.text) {
37
+ if (normalizedTarget)
38
+ return null;
39
+ continue;
40
+ }
41
+ notes.push("Used RSS <podcast:transcript> (skipped Whisper)");
42
+ return {
43
+ text: parsed.text,
44
+ transcriptUrl,
45
+ transcriptType: effectiveType,
46
+ segments: parsed.segments,
47
+ };
48
+ }
49
+ catch (error) {
50
+ if (normalizedTarget) {
51
+ notes.push(`RSS <podcast:transcript> fetch failed: ${error instanceof Error ? error.message : String(error)}`);
52
+ return null;
53
+ }
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ function extractPodcastTranscriptCandidatesFromItem(itemXml) {
59
+ const matches = itemXml.matchAll(/<podcast:transcript\b[^>]*\burl\s*=\s*(['"])([^'"]+)\1[^>]*>/gi);
60
+ const results = [];
61
+ for (const match of matches) {
62
+ const tag = match[0];
63
+ const url = match[2]?.trim();
64
+ if (!url)
65
+ continue;
66
+ const type = tag.match(/\btype\s*=\s*(['"])([^'"]+)\1/i)?.[2]?.trim() ?? null;
67
+ results.push({ url, type });
68
+ }
69
+ return results;
70
+ }
71
+ function selectPreferredTranscriptCandidate(candidates) {
72
+ if (candidates.length === 0)
73
+ return null;
74
+ const normalized = candidates.map((candidate) => ({
75
+ ...candidate,
76
+ type: candidate.type?.toLowerCase().split(";")[0]?.trim() ?? null,
77
+ }));
78
+ const json = normalized.find((candidate) => candidate.type === "application/json" || candidate.url.toLowerCase().endsWith(".json"));
79
+ if (json)
80
+ return json;
81
+ const vtt = normalized.find((candidate) => candidate.type === "text/vtt" || candidate.url.toLowerCase().endsWith(".vtt"));
82
+ if (vtt)
83
+ return vtt;
84
+ return normalized[0] ?? null;
85
+ }
86
+ function parseTranscriptBody(args) {
87
+ const { body, transcriptUrl, effectiveType } = args;
88
+ if (effectiveType === "application/json" || transcriptUrl.toLowerCase().endsWith(".json")) {
89
+ try {
90
+ const payload = JSON.parse(body);
91
+ return {
92
+ text: jsonTranscriptToPlainText(payload),
93
+ segments: jsonTranscriptToSegments(payload),
94
+ };
95
+ }
96
+ catch {
97
+ return { text: null, segments: null };
98
+ }
99
+ }
100
+ if (effectiveType === "text/vtt" || transcriptUrl.toLowerCase().endsWith(".vtt")) {
101
+ const plain = vttToPlainText(body);
102
+ return {
103
+ text: plain.length > 0 ? plain : null,
104
+ segments: vttToSegments(body),
105
+ };
106
+ }
107
+ const plain = body.trim();
108
+ return {
109
+ text: plain.length > 0 ? plain : null,
110
+ segments: null,
111
+ };
112
+ }
113
+ //# sourceMappingURL=rss-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rss-transcript.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/podcast/rss-transcript.ts"],"names":[],"mappings":"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"}
@@ -1,227 +1,3 @@
1
- import { jsonTranscriptToPlainText, jsonTranscriptToSegments, vttToPlainText, vttToSegments, } from "../../parse.js";
2
- import { TRANSCRIPTION_TIMEOUT_MS } from "./constants.js";
3
- export function looksLikeRssOrAtomFeed(xml) {
4
- const head = xml.slice(0, 4096).trimStart().toLowerCase();
5
- if (head.startsWith("<rss") || head.includes("<rss"))
6
- return true;
7
- if (head.startsWith("<?xml") && (head.includes("<rss") || head.includes("<feed")))
8
- return true;
9
- if (head.startsWith("<feed") || head.includes("<feed"))
10
- return true;
11
- return false;
12
- }
13
- export function extractEnclosureFromFeed(xml) {
14
- const items = xml.match(/<item\b[\s\S]*?<\/item>/gi) ?? [];
15
- for (const item of items) {
16
- const enclosureUrl = extractEnclosureUrlFromItem(item);
17
- if (!enclosureUrl)
18
- continue;
19
- return { enclosureUrl, durationSeconds: extractItemDurationSeconds(item) };
20
- }
21
- const enclosureMatch = xml.match(/<enclosure\b[^>]*\burl\s*=\s*(['"])([^'"]+)\1/i);
22
- if (enclosureMatch?.[2]) {
23
- return { enclosureUrl: enclosureMatch[2], durationSeconds: extractItemDurationSeconds(xml) };
24
- }
25
- const atomMatch = xml.match(/<link\b[^>]*\brel\s*=\s*(['"])enclosure\1[^>]*\bhref\s*=\s*(['"])([^'"]+)\2/i);
26
- if (atomMatch?.[3]) {
27
- return { enclosureUrl: atomMatch[3], durationSeconds: extractItemDurationSeconds(xml) };
28
- }
29
- return null;
30
- }
31
- export function extractEnclosureForEpisode(feedXml, episodeTitle) {
32
- const normalizedTarget = normalizeLooseTitle(episodeTitle);
33
- const items = feedXml.match(/<item\b[\s\S]*?<\/item>/gi) ?? [];
34
- for (const item of items) {
35
- const title = extractItemTitle(item);
36
- if (!title)
37
- continue;
38
- if (normalizeLooseTitle(title) !== normalizedTarget)
39
- continue;
40
- const enclosureUrl = extractEnclosureUrlFromItem(item);
41
- if (!enclosureUrl)
42
- continue;
43
- return { enclosureUrl, durationSeconds: extractItemDurationSeconds(item) };
44
- }
45
- return null;
46
- }
47
- export function extractItemDurationSeconds(itemXml) {
48
- const match = itemXml.match(/<itunes:duration>([\s\S]*?)<\/itunes:duration>/i);
49
- if (!match?.[1])
50
- return null;
51
- const raw = match[1]
52
- .replaceAll(/<!\[CDATA\[/gi, "")
53
- .replaceAll(/\]\]>/g, "")
54
- .trim();
55
- if (!raw)
56
- return null;
57
- // common forms: "HH:MM:SS", "MM:SS", "SS"
58
- if (/^\d+$/.test(raw)) {
59
- const seconds = Number(raw);
60
- return Number.isFinite(seconds) && seconds > 0 ? seconds : null;
61
- }
62
- const parts = raw
63
- .split(":")
64
- .map((value) => value.trim())
65
- .filter(Boolean);
66
- if (parts.length < 2 || parts.length > 3)
67
- return null;
68
- const nums = parts.map((value) => Number(value));
69
- if (nums.some((n) => !Number.isFinite(n) || n < 0))
70
- return null;
71
- const seconds = (() => {
72
- if (nums.length === 3) {
73
- const [hours, minutes, secondsRaw] = nums;
74
- if (hours === undefined || minutes === undefined || secondsRaw === undefined)
75
- return null;
76
- return Math.round(hours * 3600 + minutes * 60 + secondsRaw);
77
- }
78
- const [minutes, secondsRaw] = nums;
79
- if (minutes === undefined || secondsRaw === undefined)
80
- return null;
81
- return Math.round(minutes * 60 + secondsRaw);
82
- })();
83
- if (seconds === null)
84
- return null;
85
- return seconds > 0 ? seconds : null;
86
- }
87
- export function decodeXmlEntities(value) {
88
- return value
89
- .replaceAll(/&amp;/gi, "&")
90
- .replaceAll(/&#38;/g, "&")
91
- .replaceAll(/&lt;/gi, "<")
92
- .replaceAll(/&gt;/gi, ">")
93
- .replaceAll(/&quot;/gi, '"')
94
- .replaceAll(/&apos;/gi, "'");
95
- }
96
- export function normalizeLooseTitle(value) {
97
- return value
98
- .toLowerCase()
99
- .normalize("NFKD")
100
- .replaceAll(/\p{Diacritic}+/gu, "")
101
- .replaceAll(/[^a-z0-9]+/g, " ")
102
- .trim();
103
- }
104
- export async function tryFetchTranscriptFromFeedXml({ fetchImpl, feedXml, episodeTitle, notes, }) {
105
- const items = feedXml.match(/<item\b[\s\S]*?<\/item>/gi) ?? [];
106
- const normalizedTarget = episodeTitle ? normalizeLooseTitle(episodeTitle) : null;
107
- for (const item of items) {
108
- if (normalizedTarget) {
109
- const title = extractItemTitle(item);
110
- if (!title || normalizeLooseTitle(title) !== normalizedTarget)
111
- continue;
112
- }
113
- const candidates = extractPodcastTranscriptCandidatesFromItem(item);
114
- const preferred = selectPreferredTranscriptCandidate(candidates);
115
- if (!preferred) {
116
- if (normalizedTarget)
117
- return null;
118
- continue;
119
- }
120
- const transcriptUrl = decodeXmlEntities(preferred.url);
121
- try {
122
- const res = await fetchImpl(transcriptUrl, {
123
- redirect: "follow",
124
- signal: AbortSignal.timeout(TRANSCRIPTION_TIMEOUT_MS),
125
- headers: { accept: "text/vtt,text/plain,application/json;q=0.9,*/*;q=0.8" },
126
- });
127
- if (!res.ok)
128
- throw new Error(`transcript fetch failed (${res.status})`);
129
- const contentType = res.headers.get("content-type")?.toLowerCase().split(";")[0]?.trim() ?? null;
130
- const hintedType = preferred.type?.toLowerCase().split(";")[0]?.trim() ?? null;
131
- const effectiveType = hintedType ?? contentType;
132
- const body = await res.text();
133
- const text = (() => {
134
- if (effectiveType === "application/json" || transcriptUrl.toLowerCase().endsWith(".json")) {
135
- try {
136
- return jsonTranscriptToPlainText(JSON.parse(body));
137
- }
138
- catch {
139
- return null;
140
- }
141
- }
142
- if (effectiveType === "text/vtt" || transcriptUrl.toLowerCase().endsWith(".vtt")) {
143
- const plain = vttToPlainText(body);
144
- return plain.length > 0 ? plain : null;
145
- }
146
- const plain = body.trim();
147
- return plain.length > 0 ? plain : null;
148
- })();
149
- if (!text) {
150
- if (normalizedTarget)
151
- return null;
152
- continue;
153
- }
154
- const segments = (() => {
155
- if (effectiveType === "application/json" || transcriptUrl.toLowerCase().endsWith(".json")) {
156
- try {
157
- return jsonTranscriptToSegments(JSON.parse(body));
158
- }
159
- catch {
160
- return null;
161
- }
162
- }
163
- if (effectiveType === "text/vtt" || transcriptUrl.toLowerCase().endsWith(".vtt")) {
164
- return vttToSegments(body);
165
- }
166
- return null;
167
- })();
168
- notes.push("Used RSS <podcast:transcript> (skipped Whisper)");
169
- return { text, transcriptUrl, transcriptType: effectiveType, segments };
170
- }
171
- catch (error) {
172
- if (normalizedTarget) {
173
- notes.push(`RSS <podcast:transcript> fetch failed: ${error instanceof Error ? error.message : String(error)}`);
174
- return null;
175
- }
176
- }
177
- }
178
- return null;
179
- }
180
- function extractEnclosureUrlFromItem(xml) {
181
- const enclosureMatch = xml.match(/<enclosure\b[^>]*\burl\s*=\s*(['"])([^'"]+)\1/i);
182
- if (enclosureMatch?.[2])
183
- return enclosureMatch[2];
184
- const atomMatch = xml.match(/<link\b[^>]*\brel\s*=\s*(['"])enclosure\1[^>]*\bhref\s*=\s*(['"])([^'"]+)\2/i);
185
- if (atomMatch?.[3])
186
- return atomMatch[3];
187
- return null;
188
- }
189
- function extractItemTitle(itemXml) {
190
- const match = itemXml.match(/<title>([\s\S]*?)<\/title>/i);
191
- if (!match?.[1])
192
- return null;
193
- const raw = match[1]
194
- .replaceAll(/<!\[CDATA\[/gi, "")
195
- .replaceAll(/\]\]>/g, "")
196
- .trim();
197
- return raw.length > 0 ? raw : null;
198
- }
199
- function extractPodcastTranscriptCandidatesFromItem(itemXml) {
200
- const matches = itemXml.matchAll(/<podcast:transcript\b[^>]*\burl\s*=\s*(['"])([^'"]+)\1[^>]*>/gi);
201
- const results = [];
202
- for (const match of matches) {
203
- const tag = match[0];
204
- const url = match[2]?.trim();
205
- if (!url)
206
- continue;
207
- const type = tag.match(/\btype\s*=\s*(['"])([^'"]+)\1/i)?.[2]?.trim() ?? null;
208
- results.push({ url, type });
209
- }
210
- return results;
211
- }
212
- function selectPreferredTranscriptCandidate(candidates) {
213
- if (candidates.length === 0)
214
- return null;
215
- const normalized = candidates.map((c) => ({
216
- ...c,
217
- type: c.type?.toLowerCase().split(";")[0]?.trim() ?? null,
218
- }));
219
- const json = normalized.find((c) => c.type === "application/json" || c.url.toLowerCase().endsWith(".json"));
220
- if (json)
221
- return json;
222
- const vtt = normalized.find((c) => c.type === "text/vtt" || c.url.toLowerCase().endsWith(".vtt"));
223
- if (vtt)
224
- return vtt;
225
- return normalized[0] ?? null;
226
- }
1
+ export { decodeXmlEntities, extractEnclosureForEpisode, extractEnclosureFromFeed, extractItemDurationSeconds, looksLikeRssOrAtomFeed, normalizeLooseTitle, } from "./rss-feed.js";
2
+ export { tryFetchTranscriptFromFeedXml } from "./rss-transcript.js";
227
3
  //# sourceMappingURL=rss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rss.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/podcast/rss.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rss.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/podcast/rss.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"spotify-flow.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/podcast/spotify-flow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spotify-flow.js","sourceRoot":"","sources":["../../../../../../src/content/transcript/providers/podcast/spotify-flow.ts"],"names":[],"mappings":"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"}