defuddle 0.11.0 → 0.12.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 (54) hide show
  1. package/README.md +23 -8
  2. package/dist/cli.js +2 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/constants.d.ts +2 -0
  5. package/dist/constants.js +12 -1
  6. package/dist/constants.js.map +1 -1
  7. package/dist/defuddle.d.ts +48 -1
  8. package/dist/defuddle.js +519 -213
  9. package/dist/defuddle.js.map +1 -1
  10. package/dist/elements/footnotes.js +2 -1
  11. package/dist/elements/footnotes.js.map +1 -1
  12. package/dist/extractor-registry.d.ts +1 -0
  13. package/dist/extractor-registry.js +3 -0
  14. package/dist/extractor-registry.js.map +1 -1
  15. package/dist/extractors/_base.d.ts +6 -0
  16. package/dist/extractors/_base.js +8 -0
  17. package/dist/extractors/_base.js.map +1 -1
  18. package/dist/extractors/github.d.ts +10 -2
  19. package/dist/extractors/github.js +158 -71
  20. package/dist/extractors/github.js.map +1 -1
  21. package/dist/extractors/hackernews.js +18 -72
  22. package/dist/extractors/hackernews.js.map +1 -1
  23. package/dist/extractors/reddit.d.ts +1 -2
  24. package/dist/extractors/reddit.js +41 -94
  25. package/dist/extractors/reddit.js.map +1 -1
  26. package/dist/extractors/x-oembed.d.ts +0 -1
  27. package/dist/extractors/x-oembed.js +20 -27
  28. package/dist/extractors/x-oembed.js.map +1 -1
  29. package/dist/extractors/youtube.d.ts +37 -0
  30. package/dist/extractors/youtube.js +409 -9
  31. package/dist/extractors/youtube.js.map +1 -1
  32. package/dist/index.full.js +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/metadata.d.ts +5 -0
  35. package/dist/metadata.js +28 -0
  36. package/dist/metadata.js.map +1 -1
  37. package/dist/node.js +0 -5
  38. package/dist/node.js.map +1 -1
  39. package/dist/scoring.d.ts +6 -1
  40. package/dist/scoring.js +66 -19
  41. package/dist/scoring.js.map +1 -1
  42. package/dist/standardize.js +64 -60
  43. package/dist/standardize.js.map +1 -1
  44. package/dist/types.d.ts +9 -0
  45. package/dist/utils/comments.d.ts +44 -0
  46. package/dist/utils/comments.js +103 -0
  47. package/dist/utils/comments.js.map +1 -0
  48. package/dist/utils/dom.d.ts +9 -0
  49. package/dist/utils/dom.js +20 -0
  50. package/dist/utils/dom.js.map +1 -1
  51. package/dist/utils/transcript.d.ts +37 -0
  52. package/dist/utils/transcript.js +61 -0
  53. package/dist/utils/transcript.js.map +1 -0
  54. package/package.json +1 -1
@@ -2,6 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.YoutubeExtractor = void 0;
4
4
  const _base_1 = require("./_base");
5
+ const transcript_1 = require("../utils/transcript");
6
+ const SENTENCE_END = /[.!?]["'\u2019\u201D)]*\s*$/;
7
+ // Unofficial InnerTube API. Uses Android client context to get caption track URLs.
8
+ // Version may need updating if Google changes the API.
9
+ const INNERTUBE_API_URL = 'https://www.youtube.com/youtubei/v1/player?prettyPrint=false';
10
+ const INNERTUBE_CLIENT_VERSION = '20.10.38';
11
+ const INNERTUBE_CONTEXT = {
12
+ client: {
13
+ clientName: 'ANDROID',
14
+ clientVersion: INNERTUBE_CLIENT_VERSION,
15
+ }
16
+ };
17
+ const INNERTUBE_USER_AGENT = `com.google.android.youtube/${INNERTUBE_CLIENT_VERSION} (Linux; U; Android 14)`;
18
+ const INNERTUBE_NEXT_URL = 'https://www.youtube.com/youtubei/v1/next?prettyPrint=false';
19
+ const INNERTUBE_WEB_CONTEXT = {
20
+ client: {
21
+ clientName: 'WEB',
22
+ clientVersion: '2.20240101.00.00',
23
+ }
24
+ };
5
25
  class YoutubeExtractor extends _base_1.BaseExtractor {
6
26
  constructor(document, url, schemaOrgData) {
7
27
  super(document, url, schemaOrgData);
@@ -11,12 +31,42 @@ class YoutubeExtractor extends _base_1.BaseExtractor {
11
31
  canExtract() {
12
32
  return true;
13
33
  }
34
+ canExtractAsync() {
35
+ return true;
36
+ }
37
+ prefersAsync() {
38
+ return true;
39
+ }
14
40
  extract() {
41
+ return this.buildResult();
42
+ }
43
+ async extractAsync() {
44
+ const transcript = await this.fetchTranscript();
45
+ return this.buildResult(transcript);
46
+ }
47
+ buildResult(transcript) {
15
48
  const videoData = this.getVideoData();
16
49
  const channelName = this.getChannelName(videoData);
17
50
  const description = videoData.description || '';
18
51
  const formattedDescription = this.formatDescription(description);
19
- const contentHtml = `<iframe width="560" height="315" src="https://www.youtube.com/embed/${this.getVideoId()}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe><br>${formattedDescription}`;
52
+ let contentHtml = `<iframe width="560" height="315" src="https://www.youtube.com/embed/${this.getVideoId()}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>${formattedDescription}`;
53
+ if (transcript?.html) {
54
+ contentHtml += transcript.html;
55
+ }
56
+ const variables = {
57
+ title: videoData.name || '',
58
+ author: channelName,
59
+ site: 'YouTube',
60
+ image: Array.isArray(videoData.thumbnailUrl) ? videoData.thumbnailUrl[0] || '' : '',
61
+ published: videoData.uploadDate,
62
+ description: description.slice(0, 200).trim(),
63
+ };
64
+ if (transcript?.text) {
65
+ variables.transcript = transcript.text;
66
+ }
67
+ if (transcript?.languageCode) {
68
+ variables.language = transcript.languageCode;
69
+ }
20
70
  return {
21
71
  content: contentHtml,
22
72
  contentHtml: contentHtml,
@@ -24,14 +74,7 @@ class YoutubeExtractor extends _base_1.BaseExtractor {
24
74
  videoId: this.getVideoId(),
25
75
  author: channelName,
26
76
  },
27
- variables: {
28
- title: videoData.name || '',
29
- author: channelName,
30
- site: 'YouTube',
31
- image: Array.isArray(videoData.thumbnailUrl) ? videoData.thumbnailUrl[0] || '' : '',
32
- published: videoData.uploadDate,
33
- description: description.slice(0, 200).trim(),
34
- }
77
+ variables,
35
78
  };
36
79
  }
37
80
  formatDescription(description) {
@@ -128,6 +171,210 @@ class YoutubeExtractor extends _base_1.BaseExtractor {
128
171
  }
129
172
  return null;
130
173
  }
174
+ async fetchTranscript() {
175
+ try {
176
+ const videoId = this.getVideoId();
177
+ if (!videoId)
178
+ return undefined;
179
+ // Fetch captions and chapters in parallel
180
+ const [playerData, chapters] = await Promise.all([
181
+ this.fetchPlayerData(videoId),
182
+ this.fetchChapters(videoId),
183
+ ]);
184
+ if (!playerData)
185
+ return undefined;
186
+ const captionTracks = playerData?.captions
187
+ ?.playerCaptionsTracklistRenderer?.captionTracks;
188
+ if (!Array.isArray(captionTracks) || captionTracks.length === 0)
189
+ return undefined;
190
+ // Prefer English, fall back to first available track
191
+ const track = captionTracks.find((t) => t.languageCode === 'en')
192
+ || captionTracks[0];
193
+ if (!track?.baseUrl)
194
+ return undefined;
195
+ // Validate URL to prevent SSRF in server-side contexts
196
+ try {
197
+ const captionUrl = new URL(track.baseUrl);
198
+ if (!captionUrl.hostname.endsWith('.youtube.com'))
199
+ return undefined;
200
+ }
201
+ catch {
202
+ return undefined;
203
+ }
204
+ const response = await fetch(track.baseUrl, {
205
+ headers: { 'User-Agent': 'Mozilla/5.0' },
206
+ });
207
+ if (!response.ok)
208
+ return undefined;
209
+ const xml = await response.text();
210
+ if (!xml)
211
+ return undefined;
212
+ return this.parseTranscriptXml(xml, track.languageCode || 'en', chapters);
213
+ }
214
+ catch (error) {
215
+ console.error('YoutubeExtractor: failed to fetch transcript', error);
216
+ return undefined;
217
+ }
218
+ }
219
+ async fetchPlayerData(videoId) {
220
+ try {
221
+ const resp = await fetch(INNERTUBE_API_URL, {
222
+ method: 'POST',
223
+ headers: {
224
+ 'Content-Type': 'application/json',
225
+ 'User-Agent': INNERTUBE_USER_AGENT,
226
+ },
227
+ body: JSON.stringify({
228
+ context: INNERTUBE_CONTEXT,
229
+ videoId,
230
+ })
231
+ });
232
+ if (!resp.ok)
233
+ return undefined;
234
+ return resp.json();
235
+ }
236
+ catch {
237
+ return undefined;
238
+ }
239
+ }
240
+ async fetchChapters(videoId) {
241
+ try {
242
+ const resp = await fetch(INNERTUBE_NEXT_URL, {
243
+ method: 'POST',
244
+ headers: { 'Content-Type': 'application/json' },
245
+ body: JSON.stringify({
246
+ context: INNERTUBE_WEB_CONTEXT,
247
+ videoId,
248
+ })
249
+ });
250
+ if (!resp.ok)
251
+ return [];
252
+ const data = await resp.json();
253
+ // Try chapterRenderer from the player bar (explicit chapters)
254
+ const chapters = this.extractChaptersFromPlayerBar(data);
255
+ if (chapters.length > 0)
256
+ return chapters;
257
+ // Fall back to macroMarkersListItemRenderer from engagement panels
258
+ // (auto-generated "Key moments" from description timestamps)
259
+ return this.extractChaptersFromEngagementPanels(data);
260
+ }
261
+ catch {
262
+ return [];
263
+ }
264
+ }
265
+ extractChaptersFromPlayerBar(data) {
266
+ const chapters = [];
267
+ const panels = data?.playerOverlays?.playerOverlayRenderer
268
+ ?.decoratedPlayerBarRenderer?.decoratedPlayerBarRenderer?.playerBar
269
+ ?.multiMarkersPlayerBarRenderer?.markersMap;
270
+ if (!Array.isArray(panels))
271
+ return chapters;
272
+ for (const panel of panels) {
273
+ const markers = panel?.value?.chapters;
274
+ if (!Array.isArray(markers))
275
+ continue;
276
+ for (const marker of markers) {
277
+ const ch = marker?.chapterRenderer;
278
+ if (!ch)
279
+ continue;
280
+ const title = ch.title?.simpleText || '';
281
+ const startMs = ch.timeRangeStartMillis;
282
+ if (title && typeof startMs === 'number') {
283
+ chapters.push({ title, start: startMs / 1000 });
284
+ }
285
+ }
286
+ }
287
+ return chapters;
288
+ }
289
+ extractChaptersFromEngagementPanels(data) {
290
+ const chapters = [];
291
+ const panels = data?.engagementPanels;
292
+ if (!Array.isArray(panels))
293
+ return chapters;
294
+ for (const panel of panels) {
295
+ const content = panel?.engagementPanelSectionListRenderer?.content;
296
+ const items = content?.macroMarkersListRenderer?.contents;
297
+ if (!Array.isArray(items))
298
+ continue;
299
+ for (const item of items) {
300
+ const renderer = item?.macroMarkersListItemRenderer;
301
+ if (!renderer)
302
+ continue;
303
+ const title = renderer.title?.simpleText || '';
304
+ const timeStr = renderer.timeDescription?.simpleText || '';
305
+ if (!title || !timeStr)
306
+ continue;
307
+ const seconds = this.parseTimestamp(timeStr);
308
+ if (seconds !== null) {
309
+ chapters.push({ title, start: seconds });
310
+ }
311
+ }
312
+ }
313
+ return chapters;
314
+ }
315
+ parseTimestamp(ts) {
316
+ const parts = ts.split(':').map(Number);
317
+ if (parts.some(isNaN))
318
+ return null;
319
+ if (parts.length === 3)
320
+ return parts[0] * 3600 + parts[1] * 60 + parts[2];
321
+ if (parts.length === 2)
322
+ return parts[0] * 60 + parts[1];
323
+ return null;
324
+ }
325
+ parseTranscriptXml(xml, languageCode, chapters = []) {
326
+ const segments = [];
327
+ // Handle srv3 format: <p t="ms" d="ms"><s>word</s>...</p>
328
+ const pRegex = /<p\s+t="(\d+)"[^>]*>([\s\S]*?)<\/p>/g;
329
+ let match;
330
+ while ((match = pRegex.exec(xml)) !== null) {
331
+ const startMs = parseInt(match[1], 10);
332
+ const inner = match[2];
333
+ // Extract text from <s> children, or use raw text
334
+ let text = '';
335
+ const sRegex = /<s[^>]*>([^<]*)<\/s>/g;
336
+ let sMatch;
337
+ while ((sMatch = sRegex.exec(inner)) !== null) {
338
+ text += sMatch[1];
339
+ }
340
+ // Fall back to stripping all tags if no <s> elements
341
+ if (!text) {
342
+ text = inner.replace(/<[^>]+>/g, '');
343
+ }
344
+ // Decode HTML entities
345
+ text = this.decodeEntities(text);
346
+ if (text.trim()) {
347
+ segments.push({ start: startMs / 1000, text: text.trim() });
348
+ }
349
+ }
350
+ // Fall back to simple format: <text start="s" dur="s">content</text>
351
+ if (segments.length === 0) {
352
+ const textRegex = /<text\s+start="([^"]*)"[^>]*>([\s\S]*?)<\/text>/g;
353
+ while ((match = textRegex.exec(xml)) !== null) {
354
+ const start = parseFloat(match[1]);
355
+ let text = this.decodeEntities(match[2].replace(/<[^>]+>/g, ''));
356
+ if (text.trim()) {
357
+ segments.push({ start, text: text.trim() });
358
+ }
359
+ }
360
+ }
361
+ if (segments.length === 0)
362
+ return undefined;
363
+ const groups = this.groupTranscriptSegments(segments);
364
+ const { html, text } = (0, transcript_1.buildTranscript)('youtube', groups, chapters);
365
+ return { html, text, languageCode };
366
+ }
367
+ decodeEntities(text) {
368
+ return text
369
+ .replace(/&amp;/g, '&')
370
+ .replace(/&lt;/g, '<')
371
+ .replace(/&gt;/g, '>')
372
+ .replace(/&quot;/g, '"')
373
+ .replace(/&#39;/g, "'")
374
+ .replace(/&apos;/g, "'")
375
+ .replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))
376
+ .replace(/&#(\d+);/g, (_, dec) => String.fromCodePoint(parseInt(dec, 10)));
377
+ }
131
378
  getVideoId() {
132
379
  const url = new URL(this.url);
133
380
  if (url.hostname === 'youtu.be') {
@@ -135,6 +382,159 @@ class YoutubeExtractor extends _base_1.BaseExtractor {
135
382
  }
136
383
  return new URLSearchParams(url.search).get('v') || '';
137
384
  }
385
+ /**
386
+ * Group raw transcript segments into readable blocks.
387
+ * If speaker markers (>>) are present, groups by speaker turn.
388
+ * Otherwise, groups by sentence boundaries.
389
+ */
390
+ groupTranscriptSegments(segments) {
391
+ if (segments.length === 0)
392
+ return [];
393
+ const hasSpeakerMarkers = segments.some(s => /^>>/.test(s.text));
394
+ return hasSpeakerMarkers
395
+ ? this.groupBySpeaker(segments)
396
+ : this.groupBySentence(segments);
397
+ }
398
+ /**
399
+ * Group segments by speaker turns, then by sentences within each turn.
400
+ * Each ">>" marker starts a new speaker turn (with blank line separation).
401
+ * Within a turn, text is split at sentence boundaries for readability.
402
+ * Tracks alternating speaker identity (0/1).
403
+ */
404
+ groupBySpeaker(segments) {
405
+ // First pass: collect segments into speaker turns
406
+ const turns = [];
407
+ let currentTurn = null;
408
+ let speakerIndex = -1;
409
+ let prevSegText = '';
410
+ for (const seg of segments) {
411
+ const isSpeakerChange = /^>>/.test(seg.text);
412
+ const cleanText = seg.text.replace(/^>>\s*/, '');
413
+ // Only treat >> as a real speaker change if the previous segment
414
+ // ended at a sentence boundary — otherwise it's a mid-sentence
415
+ // false positive from auto-captions
416
+ const prevEndsWithComma = /,\s*$/.test(prevSegText);
417
+ const prevEndedSentence = (SENTENCE_END.test(prevSegText) || !prevSegText) && !prevEndsWithComma;
418
+ const isRealSpeakerChange = isSpeakerChange && prevEndedSentence;
419
+ if (isRealSpeakerChange) {
420
+ if (currentTurn)
421
+ turns.push(currentTurn);
422
+ speakerIndex = (speakerIndex + 1) % 2;
423
+ currentTurn = { start: seg.start, segments: [{ start: seg.start, text: cleanText }], speakerChange: true, speaker: speakerIndex };
424
+ }
425
+ else {
426
+ if (!currentTurn) {
427
+ currentTurn = { start: seg.start, segments: [], speakerChange: false };
428
+ }
429
+ currentTurn.segments.push({ start: seg.start, text: cleanText });
430
+ }
431
+ prevSegText = cleanText;
432
+ }
433
+ if (currentTurn)
434
+ turns.push(currentTurn);
435
+ // Split turns that start with a short affirmative (e.g. "Mhm.", "Yeah.")
436
+ // followed by longer text — the affirmative is likely the other speaker
437
+ this.splitAffirmativeTurns(turns);
438
+ // Second pass: split each turn into sentence groups
439
+ const groups = [];
440
+ for (const turn of turns) {
441
+ const sentenceGroups = this.groupBySentence(turn.segments);
442
+ for (let i = 0; i < sentenceGroups.length; i++) {
443
+ groups.push({
444
+ ...sentenceGroups[i],
445
+ speakerChange: i === 0 && turn.speakerChange,
446
+ speaker: turn.speaker,
447
+ });
448
+ }
449
+ }
450
+ return groups;
451
+ }
452
+ /**
453
+ * Split turns that start with a short affirmative response (e.g. "Mhm.", "Yeah.")
454
+ * followed by longer content. The affirmative belongs to the current speaker,
455
+ * but the rest is likely the other speaker (missed diarization in auto-captions).
456
+ */
457
+ splitAffirmativeTurns(turns) {
458
+ const affirmativePattern = /^(mhm|yeah|yes|yep|right|okay|ok|absolutely|sure|exactly|uh-huh|mm-hmm)[.!,]?\s+/i;
459
+ for (let i = 0; i < turns.length; i++) {
460
+ const turn = turns[i];
461
+ if (turn.speaker === undefined || turn.segments.length === 0)
462
+ continue;
463
+ const firstSeg = turn.segments[0];
464
+ const match = affirmativePattern.exec(firstSeg.text);
465
+ if (!match)
466
+ continue;
467
+ // Don't split if the affirmative ends with a comma — the speaker is continuing
468
+ if (/,\s*$/.test(match[0]))
469
+ continue;
470
+ // Check that there's substantial content after the affirmative
471
+ // Only split when the remainder is long enough to be a different speaker's
472
+ // response, not just the same speaker continuing after an affirmative
473
+ const remainder = firstSeg.text.slice(match[0].length).trim();
474
+ const restSegments = turn.segments.slice(1);
475
+ const restWords = remainder.split(/\s+/).filter(w => w).length
476
+ + restSegments.reduce((sum, s) => sum + s.text.split(/\s+/).length, 0);
477
+ if (restWords < 30)
478
+ continue;
479
+ // Split: keep affirmative in current turn, move rest to new turn with flipped speaker
480
+ const affirmativeText = match[0].trimEnd();
481
+ const newRestSegments = remainder
482
+ ? [{ start: firstSeg.start, text: remainder }, ...restSegments]
483
+ : restSegments;
484
+ const affirmativeTurn = {
485
+ start: turn.start,
486
+ segments: [{ start: firstSeg.start, text: affirmativeText }],
487
+ speakerChange: turn.speakerChange,
488
+ speaker: turn.speaker,
489
+ };
490
+ const restTurn = {
491
+ start: newRestSegments[0].start,
492
+ segments: newRestSegments,
493
+ speakerChange: true,
494
+ speaker: turn.speaker === 0 ? 1 : 0,
495
+ };
496
+ turns.splice(i, 1, affirmativeTurn, restTurn);
497
+ i++; // skip the newly inserted rest turn
498
+ }
499
+ }
500
+ /**
501
+ * Group segments by sentence boundaries for transcripts without speaker markers.
502
+ * Accumulates text until a segment ends with sentence-ending punctuation (.!?),
503
+ * or until a time gap >5 seconds between segments.
504
+ */
505
+ groupBySentence(segments) {
506
+ const groups = [];
507
+ let buffer = '';
508
+ let bufferStart = 0;
509
+ let lastStart = 0;
510
+ const flush = () => {
511
+ if (buffer.trim()) {
512
+ groups.push({
513
+ start: bufferStart,
514
+ text: buffer.trim(),
515
+ speakerChange: false,
516
+ });
517
+ buffer = '';
518
+ }
519
+ };
520
+ for (const seg of segments) {
521
+ // Flush on a significant time gap (>5s between segments)
522
+ if (buffer && seg.start - lastStart > 5) {
523
+ flush();
524
+ }
525
+ if (!buffer) {
526
+ bufferStart = seg.start;
527
+ }
528
+ buffer += (buffer ? ' ' : '') + seg.text;
529
+ lastStart = seg.start;
530
+ // Only flush when the segment itself ends with sentence punctuation
531
+ if (SENTENCE_END.test(seg.text)) {
532
+ flush();
533
+ }
534
+ }
535
+ flush();
536
+ return groups;
537
+ }
138
538
  }
139
539
  exports.YoutubeExtractor = YoutubeExtractor;
140
540
  //# sourceMappingURL=youtube.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/extractors/youtube.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/extractors/youtube.ts"],"names":[],"mappings":"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"}