@nathanvale/chatline 0.0.1 → 0.0.2-next.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.
- package/CHANGELOG.md +12 -0
- package/dist/bin/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/clean.d.ts +0 -17
- package/dist/cli/commands/clean.d.ts.map +0 -1
- package/dist/cli/commands/clean.js +0 -142
- package/dist/cli/commands/clean.js.map +0 -1
- package/dist/cli/commands/doctor.d.ts +0 -17
- package/dist/cli/commands/doctor.d.ts.map +0 -1
- package/dist/cli/commands/doctor.js +0 -202
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/enrich-ai.d.ts +0 -17
- package/dist/cli/commands/enrich-ai.d.ts.map +0 -1
- package/dist/cli/commands/enrich-ai.js +0 -371
- package/dist/cli/commands/enrich-ai.js.map +0 -1
- package/dist/cli/commands/index.d.ts +0 -16
- package/dist/cli/commands/index.d.ts.map +0 -1
- package/dist/cli/commands/index.js +0 -16
- package/dist/cli/commands/index.js.map +0 -1
- package/dist/cli/commands/ingest-csv.d.ts +0 -17
- package/dist/cli/commands/ingest-csv.d.ts.map +0 -1
- package/dist/cli/commands/ingest-csv.js +0 -138
- package/dist/cli/commands/ingest-csv.js.map +0 -1
- package/dist/cli/commands/ingest-db.d.ts +0 -17
- package/dist/cli/commands/ingest-db.d.ts.map +0 -1
- package/dist/cli/commands/ingest-db.js +0 -159
- package/dist/cli/commands/ingest-db.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -17
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -110
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/normalize-link.d.ts +0 -16
- package/dist/cli/commands/normalize-link.d.ts.map +0 -1
- package/dist/cli/commands/normalize-link.js +0 -144
- package/dist/cli/commands/normalize-link.js.map +0 -1
- package/dist/cli/commands/render-markdown.d.ts +0 -17
- package/dist/cli/commands/render-markdown.d.ts.map +0 -1
- package/dist/cli/commands/render-markdown.js +0 -218
- package/dist/cli/commands/render-markdown.js.map +0 -1
- package/dist/cli/commands/stats.d.ts +0 -17
- package/dist/cli/commands/stats.d.ts.map +0 -1
- package/dist/cli/commands/stats.js +0 -175
- package/dist/cli/commands/stats.js.map +0 -1
- package/dist/cli/commands/validate.d.ts +0 -17
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/commands/validate.js +0 -152
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/index.d.ts +0 -13
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -121
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/types.d.ts +0 -93
- package/dist/cli/types.d.ts.map +0 -1
- package/dist/cli/types.js +0 -7
- package/dist/cli/types.js.map +0 -1
- package/dist/cli/utils.d.ts +0 -29
- package/dist/cli/utils.d.ts.map +0 -1
- package/dist/cli/utils.js +0 -53
- package/dist/cli/utils.js.map +0 -1
- package/dist/cli.d.ts +0 -9
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -1805
- package/dist/config/generator.d.ts +0 -90
- package/dist/config/generator.d.ts.map +0 -1
- package/dist/config/generator.js +0 -320
- package/dist/config/generator.js.map +0 -1
- package/dist/config/loader.d.ts +0 -107
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -251
- package/dist/config/loader.js.map +0 -1
- package/dist/config/schema.d.ts +0 -107
- package/dist/config/schema.d.ts.map +0 -1
- package/dist/config/schema.js +0 -169
- package/dist/config/schema.js.map +0 -1
- package/dist/enrich/audio-transcription.d.ts +0 -77
- package/dist/enrich/audio-transcription.d.ts.map +0 -1
- package/dist/enrich/audio-transcription.js +0 -370
- package/dist/enrich/audio-transcription.js.map +0 -1
- package/dist/enrich/checkpoint.d.ts +0 -137
- package/dist/enrich/checkpoint.d.ts.map +0 -1
- package/dist/enrich/checkpoint.js +0 -205
- package/dist/enrich/checkpoint.js.map +0 -1
- package/dist/enrich/idempotency.d.ts +0 -90
- package/dist/enrich/idempotency.d.ts.map +0 -1
- package/dist/enrich/idempotency.js +0 -188
- package/dist/enrich/idempotency.js.map +0 -1
- package/dist/enrich/image-analysis.d.ts +0 -62
- package/dist/enrich/image-analysis.d.ts.map +0 -1
- package/dist/enrich/image-analysis.js +0 -264
- package/dist/enrich/image-analysis.js.map +0 -1
- package/dist/enrich/index.d.ts +0 -60
- package/dist/enrich/index.d.ts.map +0 -1
- package/dist/enrich/index.js +0 -74
- package/dist/enrich/index.js.map +0 -1
- package/dist/enrich/link-enrichment.d.ts +0 -37
- package/dist/enrich/link-enrichment.d.ts.map +0 -1
- package/dist/enrich/link-enrichment.js +0 -202
- package/dist/enrich/link-enrichment.js.map +0 -1
- package/dist/enrich/pdf-video-handling.d.ts +0 -49
- package/dist/enrich/pdf-video-handling.d.ts.map +0 -1
- package/dist/enrich/pdf-video-handling.js +0 -325
- package/dist/enrich/pdf-video-handling.js.map +0 -1
- package/dist/enrich/progress-tracker.d.ts +0 -120
- package/dist/enrich/progress-tracker.d.ts.map +0 -1
- package/dist/enrich/progress-tracker.js +0 -220
- package/dist/enrich/progress-tracker.js.map +0 -1
- package/dist/enrich/providers/firecrawl.d.ts +0 -18
- package/dist/enrich/providers/firecrawl.d.ts.map +0 -1
- package/dist/enrich/providers/firecrawl.js +0 -48
- package/dist/enrich/providers/firecrawl.js.map +0 -1
- package/dist/enrich/providers/generic.d.ts +0 -16
- package/dist/enrich/providers/generic.d.ts.map +0 -1
- package/dist/enrich/providers/generic.js +0 -36
- package/dist/enrich/providers/generic.js.map +0 -1
- package/dist/enrich/providers/index.d.ts +0 -14
- package/dist/enrich/providers/index.d.ts.map +0 -1
- package/dist/enrich/providers/index.js +0 -13
- package/dist/enrich/providers/index.js.map +0 -1
- package/dist/enrich/providers/instagram.d.ts +0 -16
- package/dist/enrich/providers/instagram.d.ts.map +0 -1
- package/dist/enrich/providers/instagram.js +0 -43
- package/dist/enrich/providers/instagram.js.map +0 -1
- package/dist/enrich/providers/spotify.d.ts +0 -16
- package/dist/enrich/providers/spotify.d.ts.map +0 -1
- package/dist/enrich/providers/spotify.js +0 -45
- package/dist/enrich/providers/spotify.js.map +0 -1
- package/dist/enrich/providers/twitter.d.ts +0 -16
- package/dist/enrich/providers/twitter.d.ts.map +0 -1
- package/dist/enrich/providers/twitter.js +0 -43
- package/dist/enrich/providers/twitter.js.map +0 -1
- package/dist/enrich/providers/types.d.ts +0 -47
- package/dist/enrich/providers/types.d.ts.map +0 -1
- package/dist/enrich/providers/types.js +0 -15
- package/dist/enrich/providers/types.js.map +0 -1
- package/dist/enrich/providers/youtube.d.ts +0 -16
- package/dist/enrich/providers/youtube.d.ts.map +0 -1
- package/dist/enrich/providers/youtube.js +0 -43
- package/dist/enrich/providers/youtube.js.map +0 -1
- package/dist/enrich/rate-limiting.d.ts +0 -118
- package/dist/enrich/rate-limiting.d.ts.map +0 -1
- package/dist/enrich/rate-limiting.js +0 -258
- package/dist/enrich/rate-limiting.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/ingest/dedup-merge.d.ts +0 -82
- package/dist/ingest/dedup-merge.d.ts.map +0 -1
- package/dist/ingest/dedup-merge.js +0 -262
- package/dist/ingest/dedup-merge.js.map +0 -1
- package/dist/ingest/ingest-csv.d.ts +0 -62
- package/dist/ingest/ingest-csv.d.ts.map +0 -1
- package/dist/ingest/ingest-csv.js +0 -300
- package/dist/ingest/ingest-csv.js.map +0 -1
- package/dist/ingest/ingest-db.d.ts +0 -64
- package/dist/ingest/ingest-db.d.ts.map +0 -1
- package/dist/ingest/ingest-db.js +0 -172
- package/dist/ingest/ingest-db.js.map +0 -1
- package/dist/ingest/link-replies-and-tapbacks.d.ts +0 -53
- package/dist/ingest/link-replies-and-tapbacks.d.ts.map +0 -1
- package/dist/ingest/link-replies-and-tapbacks.js +0 -381
- package/dist/ingest/link-replies-and-tapbacks.js.map +0 -1
- package/dist/normalize/date-converters.d.ts +0 -45
- package/dist/normalize/date-converters.d.ts.map +0 -1
- package/dist/normalize/date-converters.js +0 -166
- package/dist/normalize/date-converters.js.map +0 -1
- package/dist/normalize/path-validator.d.ts +0 -65
- package/dist/normalize/path-validator.d.ts.map +0 -1
- package/dist/normalize/path-validator.js +0 -221
- package/dist/normalize/path-validator.js.map +0 -1
- package/dist/normalize/validate-normalized.d.ts +0 -45
- package/dist/normalize/validate-normalized.d.ts.map +0 -1
- package/dist/normalize/validate-normalized.js +0 -144
- package/dist/normalize/validate-normalized.js.map +0 -1
- package/dist/render/embeds-blockquotes.d.ts +0 -84
- package/dist/render/embeds-blockquotes.d.ts.map +0 -1
- package/dist/render/embeds-blockquotes.js +0 -204
- package/dist/render/embeds-blockquotes.js.map +0 -1
- package/dist/render/grouping.d.ts +0 -78
- package/dist/render/grouping.d.ts.map +0 -1
- package/dist/render/grouping.js +0 -134
- package/dist/render/grouping.js.map +0 -1
- package/dist/render/index.d.ts +0 -47
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/index.js +0 -245
- package/dist/render/index.js.map +0 -1
- package/dist/render/reply-rendering.d.ts +0 -88
- package/dist/render/reply-rendering.d.ts.map +0 -1
- package/dist/render/reply-rendering.js +0 -196
- package/dist/render/reply-rendering.js.map +0 -1
- package/dist/schema/message.d.ts +0 -125
- package/dist/schema/message.d.ts.map +0 -1
- package/dist/schema/message.js +0 -331
- package/dist/schema/message.js.map +0 -1
- package/dist/utils/delta-detection.d.ts +0 -107
- package/dist/utils/delta-detection.d.ts.map +0 -1
- package/dist/utils/delta-detection.js +0 -199
- package/dist/utils/delta-detection.js.map +0 -1
- package/dist/utils/enrichment-merge.d.ts +0 -135
- package/dist/utils/enrichment-merge.d.ts.map +0 -1
- package/dist/utils/enrichment-merge.js +0 -280
- package/dist/utils/enrichment-merge.js.map +0 -1
- package/dist/utils/human.d.ts +0 -15
- package/dist/utils/human.d.ts.map +0 -1
- package/dist/utils/human.js +0 -27
- package/dist/utils/human.js.map +0 -1
- package/dist/utils/incremental-state.d.ts +0 -133
- package/dist/utils/incremental-state.d.ts.map +0 -1
- package/dist/utils/incremental-state.js +0 -237
- package/dist/utils/incremental-state.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -40
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -176
- package/dist/utils/logger.js.map +0 -1
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { ProgressManager } from '../progress/progress-manager';
|
|
2
|
-
/**
|
|
3
|
-
* Enrichment progress tracker with multi-bar support for concurrent operations
|
|
4
|
-
*
|
|
5
|
-
* Tracks overall progress, per-type progress, current operation, and ETA based on
|
|
6
|
-
* rolling average of recent operation durations.
|
|
7
|
-
*/
|
|
8
|
-
export class EnrichmentProgressManager {
|
|
9
|
-
progressManager;
|
|
10
|
-
overallBar = null;
|
|
11
|
-
typeBars = new Map();
|
|
12
|
-
currentBar = null;
|
|
13
|
-
totalMessages;
|
|
14
|
-
processedMessages = 0;
|
|
15
|
-
checkpointInterval;
|
|
16
|
-
checkpointCounter = 0;
|
|
17
|
-
isCheckpointing = false;
|
|
18
|
-
operationStats;
|
|
19
|
-
lastOperationStart = 0;
|
|
20
|
-
quiet;
|
|
21
|
-
constructor(config) {
|
|
22
|
-
this.quiet = config.quiet ?? false;
|
|
23
|
-
this.totalMessages = config.totalMessages;
|
|
24
|
-
this.checkpointInterval = config.checkpointInterval ?? 100;
|
|
25
|
-
this.operationStats = {
|
|
26
|
-
durations: [],
|
|
27
|
-
maxSamples: 10,
|
|
28
|
-
};
|
|
29
|
-
this.progressManager = new ProgressManager({ quiet: this.quiet });
|
|
30
|
-
this.initializeBars();
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Initialize all progress bars
|
|
34
|
-
* AC01: Overall enrichment progress (total messages)
|
|
35
|
-
* AC02: Per-type progress bars (images, audio, PDFs, links)
|
|
36
|
-
* AC03: Show current operation description
|
|
37
|
-
*/
|
|
38
|
-
initializeBars() {
|
|
39
|
-
if (this.quiet)
|
|
40
|
-
return;
|
|
41
|
-
// AC01: Overall enrichment progress bar
|
|
42
|
-
this.overallBar = this.progressManager.createBar('Overall Enrichment', this.totalMessages);
|
|
43
|
-
// AC02: Per-type progress bars for each enrichment type
|
|
44
|
-
const enrichmentTypes = ['image', 'audio', 'pdf', 'link'];
|
|
45
|
-
for (const type of enrichmentTypes) {
|
|
46
|
-
const typeBar = this.progressManager.createBar(`${this.capitalize(type)} Analysis`, 0);
|
|
47
|
-
this.typeBars.set(type, typeBar);
|
|
48
|
-
}
|
|
49
|
-
// AC03: Current operation bar showing what's being processed
|
|
50
|
-
this.currentBar = this.progressManager.createBar('Current Operation', 1);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Start tracking an operation
|
|
54
|
-
* AC03: Show current operation with filename
|
|
55
|
-
*/
|
|
56
|
-
startOperation(type, currentItem) {
|
|
57
|
-
if (this.quiet)
|
|
58
|
-
return;
|
|
59
|
-
this.lastOperationStart = Date.now();
|
|
60
|
-
// Update current operation bar
|
|
61
|
-
if (this.currentBar) {
|
|
62
|
-
this.progressManager.updateCurrent('Current Operation', `${type}: ${currentItem}`);
|
|
63
|
-
this.progressManager.setProgress('Current Operation', 0);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Complete an enrichment operation
|
|
68
|
-
* AC04: Update ETA based on rolling average of last 10 operations
|
|
69
|
-
*/
|
|
70
|
-
completeOperation(type) {
|
|
71
|
-
const duration = Date.now() - this.lastOperationStart;
|
|
72
|
-
this.recordOperationDuration(duration);
|
|
73
|
-
// Increment overall progress (always track, even in quiet mode)
|
|
74
|
-
this.processedMessages++;
|
|
75
|
-
this.checkpointCounter++;
|
|
76
|
-
// Update UI only if not quiet
|
|
77
|
-
if (this.quiet)
|
|
78
|
-
return;
|
|
79
|
-
// Increment type-specific progress bar
|
|
80
|
-
const typeBar = this.typeBars.get(type);
|
|
81
|
-
if (typeBar) {
|
|
82
|
-
this.progressManager.increment(`${this.capitalize(type)} Analysis`);
|
|
83
|
-
}
|
|
84
|
-
// Increment overall progress
|
|
85
|
-
if (this.overallBar) {
|
|
86
|
-
this.progressManager.setProgress('Overall Enrichment', this.processedMessages);
|
|
87
|
-
this.updateETADisplay();
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Record operation duration for ETA calculation
|
|
92
|
-
* AC04: Update ETA based on rolling average of last 10 operations
|
|
93
|
-
*/
|
|
94
|
-
recordOperationDuration(durationMs) {
|
|
95
|
-
const stats = this.operationStats;
|
|
96
|
-
stats.durations.push(durationMs);
|
|
97
|
-
// Keep only the last N samples
|
|
98
|
-
if (stats.durations.length > stats.maxSamples) {
|
|
99
|
-
stats.durations.shift();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Update ETA display based on rolling average
|
|
104
|
-
* AC04: Update ETA based on rolling average of last 10 operations
|
|
105
|
-
*/
|
|
106
|
-
updateETADisplay() {
|
|
107
|
-
if (!this.overallBar || this.operationStats.durations.length === 0)
|
|
108
|
-
return;
|
|
109
|
-
const remaining = this.totalMessages - this.processedMessages;
|
|
110
|
-
const avgDuration = this.getAverageDuration();
|
|
111
|
-
const etaMs = remaining * avgDuration;
|
|
112
|
-
// Update description with ETA info
|
|
113
|
-
const etaSeconds = Math.ceil(etaMs / 1000);
|
|
114
|
-
this.progressManager.updateCurrent('Overall Enrichment', `${this.processedMessages}/${this.totalMessages} | ETA: ${etaSeconds}s | Avg: ${Math.round(avgDuration)}ms/msg`);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Get average operation duration in milliseconds
|
|
118
|
-
* AC04: Calculate rolling average
|
|
119
|
-
*/
|
|
120
|
-
getAverageDuration() {
|
|
121
|
-
const durations = this.operationStats.durations;
|
|
122
|
-
if (durations.length === 0)
|
|
123
|
-
return 0;
|
|
124
|
-
const sum = durations.reduce((a, b) => a + b, 0);
|
|
125
|
-
return sum / durations.length;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Show checkpoint pause indicator
|
|
129
|
-
* AC05: Checkpoint writes show brief pause in progress
|
|
130
|
-
*/
|
|
131
|
-
startCheckpointWrite() {
|
|
132
|
-
if (this.quiet)
|
|
133
|
-
return;
|
|
134
|
-
this.isCheckpointing = true;
|
|
135
|
-
if (this.overallBar) {
|
|
136
|
-
this.progressManager.updateCurrent('Overall Enrichment', `💾 Writing checkpoint (${this.processedMessages}/${this.totalMessages})...`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Resume progress after checkpoint write
|
|
141
|
-
* AC05: Resume after checkpoint pause
|
|
142
|
-
*/
|
|
143
|
-
completeCheckpointWrite() {
|
|
144
|
-
if (this.quiet)
|
|
145
|
-
return;
|
|
146
|
-
this.isCheckpointing = false;
|
|
147
|
-
this.checkpointCounter = 0;
|
|
148
|
-
if (this.overallBar) {
|
|
149
|
-
this.updateETADisplay();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Check if checkpoint should be written
|
|
154
|
-
* AC05: Determine checkpoint interval
|
|
155
|
-
*/
|
|
156
|
-
shouldCheckpoint() {
|
|
157
|
-
return this.checkpointCounter >= this.checkpointInterval;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Get current progress stats
|
|
161
|
-
*/
|
|
162
|
-
getProgress() {
|
|
163
|
-
return {
|
|
164
|
-
processed: this.processedMessages,
|
|
165
|
-
total: this.totalMessages,
|
|
166
|
-
percentage: Math.round((this.processedMessages / this.totalMessages) * 100),
|
|
167
|
-
averageDuration: this.getAverageDuration(),
|
|
168
|
-
isCheckpointing: this.isCheckpointing,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Set total for a specific enrichment type
|
|
173
|
-
* AC02: Track per-type totals
|
|
174
|
-
*/
|
|
175
|
-
setTypeTotal(type, total) {
|
|
176
|
-
if (this.quiet)
|
|
177
|
-
return;
|
|
178
|
-
const barName = `${this.capitalize(type)} Analysis`;
|
|
179
|
-
// Create bar if it doesn't exist
|
|
180
|
-
if (!this.typeBars.has(type)) {
|
|
181
|
-
const typeBar = this.progressManager.createBar(barName, total);
|
|
182
|
-
this.typeBars.set(type, typeBar);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Increment type-specific progress
|
|
187
|
-
* AC02: Per-type progress bars
|
|
188
|
-
*/
|
|
189
|
-
incrementType(type, count = 1) {
|
|
190
|
-
if (this.quiet)
|
|
191
|
-
return;
|
|
192
|
-
const barName = `${this.capitalize(type)} Analysis`;
|
|
193
|
-
this.progressManager.increment(barName, count);
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Stop all progress tracking and cleanup
|
|
197
|
-
*/
|
|
198
|
-
stop() {
|
|
199
|
-
this.progressManager.stopAll();
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Helper to capitalize type names
|
|
203
|
-
*/
|
|
204
|
-
capitalize(str) {
|
|
205
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Check if progress bars are visible
|
|
209
|
-
*/
|
|
210
|
-
isVisible() {
|
|
211
|
-
return !this.quiet && this.progressManager.isVisible();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Create an enrichment progress manager instance
|
|
216
|
-
*/
|
|
217
|
-
export function createEnrichmentProgressManager(config) {
|
|
218
|
-
return new EnrichmentProgressManager(config);
|
|
219
|
-
}
|
|
220
|
-
//# sourceMappingURL=progress-tracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../../src/enrich/progress-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Firecrawl Provider (ENRICH--T04-AC01)
|
|
3
|
-
*
|
|
4
|
-
* Primary provider for generic link context extraction.
|
|
5
|
-
*/
|
|
6
|
-
import type { LinkContext, Provider } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* AC01: Firecrawl Provider (primary)
|
|
9
|
-
*/
|
|
10
|
-
export declare class FirecrawlProvider implements Provider {
|
|
11
|
-
name: string;
|
|
12
|
-
priority: number;
|
|
13
|
-
private apiKey;
|
|
14
|
-
constructor(apiKey: string);
|
|
15
|
-
detect(_url: string): boolean;
|
|
16
|
-
extract(url: string): Promise<LinkContext>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=firecrawl.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firecrawl.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/firecrawl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIvD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IACjD,IAAI,SAAc;IAClB,QAAQ,SAAI;IACZ,OAAO,CAAC,MAAM,CAAQ;gBAEV,MAAM,EAAE,MAAM;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0BhD"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Firecrawl Provider (ENRICH--T04-AC01)
|
|
3
|
-
*
|
|
4
|
-
* Primary provider for generic link context extraction.
|
|
5
|
-
*/
|
|
6
|
-
import { createLogger } from '#utils/logger';
|
|
7
|
-
const logger = createLogger('enrich:firecrawl-provider');
|
|
8
|
-
/**
|
|
9
|
-
* AC01: Firecrawl Provider (primary)
|
|
10
|
-
*/
|
|
11
|
-
export class FirecrawlProvider {
|
|
12
|
-
name = 'firecrawl';
|
|
13
|
-
priority = 0;
|
|
14
|
-
apiKey;
|
|
15
|
-
constructor(apiKey) {
|
|
16
|
-
this.apiKey = apiKey;
|
|
17
|
-
}
|
|
18
|
-
detect(_url) {
|
|
19
|
-
// Firecrawl can handle any URL
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
async extract(url) {
|
|
23
|
-
if (!this.apiKey) {
|
|
24
|
-
throw new Error('Firecrawl API key not configured');
|
|
25
|
-
}
|
|
26
|
-
try {
|
|
27
|
-
// In production, would use actual Firecrawl SDK
|
|
28
|
-
// For now, simulate API response
|
|
29
|
-
const response = {
|
|
30
|
-
title: `Title for ${url}`,
|
|
31
|
-
description: 'Extracted from Firecrawl API',
|
|
32
|
-
url,
|
|
33
|
-
};
|
|
34
|
-
logger.debug(`Firecrawl extracted metadata for ${url}`);
|
|
35
|
-
return {
|
|
36
|
-
url,
|
|
37
|
-
title: response.title,
|
|
38
|
-
description: response.description,
|
|
39
|
-
provider: 'firecrawl',
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
logger.error(`Firecrawl extraction failed for ${url}`, { error });
|
|
44
|
-
throw error;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=firecrawl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firecrawl.js","sourceRoot":"","sources":["../../../src/enrich/providers/firecrawl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,MAAM,MAAM,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAA;AAExD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC7B,IAAI,GAAG,WAAW,CAAA;IAClB,QAAQ,GAAG,CAAC,CAAA;IACJ,MAAM,CAAQ;IAEtB,YAAY,MAAc;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,IAAY;QAClB,+BAA+B;QAC/B,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,CAAC;YACJ,gDAAgD;YAChD,iCAAiC;YACjC,MAAM,QAAQ,GAAG;gBAChB,KAAK,EAAE,aAAa,GAAG,EAAE;gBACzB,WAAW,EAAE,8BAA8B;gBAC3C,GAAG;aACH,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAA;YACvD,OAAO;gBACN,GAAG;gBACH,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,QAAQ,EAAE,WAAW;aACrB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YACjE,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic Provider (ENRICH--T04-AC05)
|
|
3
|
-
*
|
|
4
|
-
* Generic fallback provider when all specialized providers fail.
|
|
5
|
-
*/
|
|
6
|
-
import type { LinkContext, Provider } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Generic fallback provider
|
|
9
|
-
*/
|
|
10
|
-
export declare class GenericProvider implements Provider {
|
|
11
|
-
name: string;
|
|
12
|
-
priority: number;
|
|
13
|
-
detect(_url: string): boolean;
|
|
14
|
-
extract(url: string): Promise<LinkContext>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=generic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/generic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,IAAI,SAAY;IAChB,QAAQ,SAAI;IAEZ,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAkBhD"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic Provider (ENRICH--T04-AC05)
|
|
3
|
-
*
|
|
4
|
-
* Generic fallback provider when all specialized providers fail.
|
|
5
|
-
*/
|
|
6
|
-
import { createLogger } from '#utils/logger';
|
|
7
|
-
const logger = createLogger('enrich:generic-provider');
|
|
8
|
-
/**
|
|
9
|
-
* Generic fallback provider
|
|
10
|
-
*/
|
|
11
|
-
export class GenericProvider {
|
|
12
|
-
name = 'generic';
|
|
13
|
-
priority = 5;
|
|
14
|
-
detect(_url) {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
async extract(url) {
|
|
18
|
-
try {
|
|
19
|
-
// Basic fallback - just use URL as title
|
|
20
|
-
const title = new URL(url).hostname;
|
|
21
|
-
logger.debug(`Generic provider using fallback for ${url}`);
|
|
22
|
-
return {
|
|
23
|
-
url,
|
|
24
|
-
title,
|
|
25
|
-
description: 'Extracted via generic fallback',
|
|
26
|
-
provider: 'generic',
|
|
27
|
-
usedFallback: true,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
logger.error(`Generic extraction failed for ${url}`, { error });
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=generic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/enrich/providers/generic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,eAAe;IAC3B,IAAI,GAAG,SAAS,CAAA;IAChB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,IAAY;QAClB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,yCAAyC;YACzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;YAEnC,MAAM,CAAC,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAA;YAC1D,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,gCAAgC;gBAC7C,QAAQ,EAAE,SAAS;gBACnB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/D,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Link Enrichment Providers Index
|
|
3
|
-
*
|
|
4
|
-
* Barrel export for all provider classes.
|
|
5
|
-
*/
|
|
6
|
-
export { FirecrawlProvider } from './firecrawl.js';
|
|
7
|
-
export { GenericProvider } from './generic.js';
|
|
8
|
-
export { InstagramProvider } from './instagram.js';
|
|
9
|
-
export { SpotifyProvider } from './spotify.js';
|
|
10
|
-
export { TwitterProvider } from './twitter.js';
|
|
11
|
-
export type { LinkContext, LinkEnrichmentConfig, Provider } from './types.js';
|
|
12
|
-
export { URL_PATTERNS } from './types.js';
|
|
13
|
-
export { YouTubeProvider } from './youtube.js';
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Link Enrichment Providers Index
|
|
3
|
-
*
|
|
4
|
-
* Barrel export for all provider classes.
|
|
5
|
-
*/
|
|
6
|
-
export { FirecrawlProvider } from './firecrawl.js';
|
|
7
|
-
export { GenericProvider } from './generic.js';
|
|
8
|
-
export { InstagramProvider } from './instagram.js';
|
|
9
|
-
export { SpotifyProvider } from './spotify.js';
|
|
10
|
-
export { TwitterProvider } from './twitter.js';
|
|
11
|
-
export { URL_PATTERNS } from './types.js';
|
|
12
|
-
export { YouTubeProvider } from './youtube.js';
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enrich/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Instagram Provider (ENRICH--T04-AC04)
|
|
3
|
-
*
|
|
4
|
-
* Fallback provider for Instagram post metadata extraction.
|
|
5
|
-
*/
|
|
6
|
-
import type { LinkContext, Provider } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* AC04: Instagram Provider (social media fallback)
|
|
9
|
-
*/
|
|
10
|
-
export declare class InstagramProvider implements Provider {
|
|
11
|
-
name: string;
|
|
12
|
-
priority: number;
|
|
13
|
-
detect(url: string): boolean;
|
|
14
|
-
extract(url: string): Promise<LinkContext>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=instagram.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instagram.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/instagram.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IACjD,IAAI,SAAc;IAClB,QAAQ,SAAI;IAEZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0BhD"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Instagram Provider (ENRICH--T04-AC04)
|
|
3
|
-
*
|
|
4
|
-
* Fallback provider for Instagram post metadata extraction.
|
|
5
|
-
*/
|
|
6
|
-
import { createLogger } from '#utils/logger';
|
|
7
|
-
import { URL_PATTERNS } from './types.js';
|
|
8
|
-
const logger = createLogger('enrich:instagram-provider');
|
|
9
|
-
/**
|
|
10
|
-
* AC04: Instagram Provider (social media fallback)
|
|
11
|
-
*/
|
|
12
|
-
export class InstagramProvider {
|
|
13
|
-
name = 'instagram';
|
|
14
|
-
priority = 4;
|
|
15
|
-
detect(url) {
|
|
16
|
-
return URL_PATTERNS.instagram.test(url);
|
|
17
|
-
}
|
|
18
|
-
async extract(url) {
|
|
19
|
-
try {
|
|
20
|
-
// Extract post ID from URL
|
|
21
|
-
const postIdMatch = url.match(/\/p\/([A-Za-z0-9_-]+)/);
|
|
22
|
-
const postId = postIdMatch?.[1];
|
|
23
|
-
if (!postId) {
|
|
24
|
-
throw new Error('Could not extract Instagram post ID');
|
|
25
|
-
}
|
|
26
|
-
// In production, would parse meta tags or use Instagram API
|
|
27
|
-
const title = `Instagram Post: ${postId}`;
|
|
28
|
-
logger.debug(`Instagram extracted metadata for ${url}`);
|
|
29
|
-
return {
|
|
30
|
-
url,
|
|
31
|
-
title,
|
|
32
|
-
description: 'Post from Instagram',
|
|
33
|
-
provider: 'instagram',
|
|
34
|
-
usedFallback: true,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
logger.error(`Instagram extraction failed for ${url}`, { error });
|
|
39
|
-
throw error;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=instagram.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instagram.js","sourceRoot":"","sources":["../../../src/enrich/providers/instagram.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAA;AAExD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC7B,IAAI,GAAG,WAAW,CAAA;IAClB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,GAAW;QACjB,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,2BAA2B;YAC3B,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;YACtD,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;YAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;YACvD,CAAC;YAED,4DAA4D;YAC5D,MAAM,KAAK,GAAG,mBAAmB,MAAM,EAAE,CAAA;YAEzC,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAA;YACvD,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,qBAAqB;gBAClC,QAAQ,EAAE,WAAW;gBACrB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YACjE,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Spotify Provider (ENRICH--T04-AC03)
|
|
3
|
-
*
|
|
4
|
-
* Fallback provider for Spotify track/artist/album metadata extraction.
|
|
5
|
-
*/
|
|
6
|
-
import type { LinkContext, Provider } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* AC03: Spotify Provider (fallback)
|
|
9
|
-
*/
|
|
10
|
-
export declare class SpotifyProvider implements Provider {
|
|
11
|
-
name: string;
|
|
12
|
-
priority: number;
|
|
13
|
-
detect(url: string): boolean;
|
|
14
|
-
extract(url: string): Promise<LinkContext>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=spotify.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spotify.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/spotify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,IAAI,SAAY;IAChB,QAAQ,SAAI;IAEZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA4BhD"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Spotify Provider (ENRICH--T04-AC03)
|
|
3
|
-
*
|
|
4
|
-
* Fallback provider for Spotify track/artist/album metadata extraction.
|
|
5
|
-
*/
|
|
6
|
-
import { createLogger } from '#utils/logger';
|
|
7
|
-
import { URL_PATTERNS } from './types.js';
|
|
8
|
-
const logger = createLogger('enrich:spotify-provider');
|
|
9
|
-
/**
|
|
10
|
-
* AC03: Spotify Provider (fallback)
|
|
11
|
-
*/
|
|
12
|
-
export class SpotifyProvider {
|
|
13
|
-
name = 'spotify';
|
|
14
|
-
priority = 2;
|
|
15
|
-
detect(url) {
|
|
16
|
-
return URL_PATTERNS.spotify.test(url);
|
|
17
|
-
}
|
|
18
|
-
async extract(url) {
|
|
19
|
-
try {
|
|
20
|
-
// Extract resource ID and type from URL
|
|
21
|
-
const typeMatch = url.match(/\/(\w+)\//);
|
|
22
|
-
const idMatch = url.match(/\/(\w+)(\?|$)/);
|
|
23
|
-
const resourceType = typeMatch?.[1] || 'track';
|
|
24
|
-
const resourceId = idMatch?.[1];
|
|
25
|
-
if (!resourceId) {
|
|
26
|
-
throw new Error('Could not extract Spotify resource ID');
|
|
27
|
-
}
|
|
28
|
-
// In production, would fetch from Spotify API or parse OpenGraph
|
|
29
|
-
const title = `Spotify ${resourceType}: ${resourceId}`;
|
|
30
|
-
logger.debug(`Spotify extracted metadata for ${url}`);
|
|
31
|
-
return {
|
|
32
|
-
url,
|
|
33
|
-
title,
|
|
34
|
-
description: `Spotify ${resourceType}`,
|
|
35
|
-
provider: 'spotify',
|
|
36
|
-
usedFallback: true,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
logger.error(`Spotify extraction failed for ${url}`, { error });
|
|
41
|
-
throw error;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=spotify.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spotify.js","sourceRoot":"","sources":["../../../src/enrich/providers/spotify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,eAAe;IAC3B,IAAI,GAAG,SAAS,CAAA;IAChB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,GAAW;QACjB,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,wCAAwC;YACxC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YACxC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;YAC1C,MAAM,YAAY,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;YAC9C,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;YAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;YACzD,CAAC;YAED,iEAAiE;YACjE,MAAM,KAAK,GAAG,WAAW,YAAY,KAAK,UAAU,EAAE,CAAA;YAEtD,MAAM,CAAC,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAA;YACrD,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,WAAW,YAAY,EAAE;gBACtC,QAAQ,EAAE,SAAS;gBACnB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/D,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Twitter Provider (ENRICH--T04-AC04)
|
|
3
|
-
*
|
|
4
|
-
* Fallback provider for Twitter/X post metadata extraction.
|
|
5
|
-
*/
|
|
6
|
-
import type { LinkContext, Provider } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* AC04: Twitter Provider (social media fallback)
|
|
9
|
-
*/
|
|
10
|
-
export declare class TwitterProvider implements Provider {
|
|
11
|
-
name: string;
|
|
12
|
-
priority: number;
|
|
13
|
-
detect(url: string): boolean;
|
|
14
|
-
extract(url: string): Promise<LinkContext>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=twitter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"twitter.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/twitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,IAAI,SAAY;IAChB,QAAQ,SAAI;IAEZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0BhD"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Twitter Provider (ENRICH--T04-AC04)
|
|
3
|
-
*
|
|
4
|
-
* Fallback provider for Twitter/X post metadata extraction.
|
|
5
|
-
*/
|
|
6
|
-
import { createLogger } from '#utils/logger';
|
|
7
|
-
import { URL_PATTERNS } from './types.js';
|
|
8
|
-
const logger = createLogger('enrich:twitter-provider');
|
|
9
|
-
/**
|
|
10
|
-
* AC04: Twitter Provider (social media fallback)
|
|
11
|
-
*/
|
|
12
|
-
export class TwitterProvider {
|
|
13
|
-
name = 'twitter';
|
|
14
|
-
priority = 3;
|
|
15
|
-
detect(url) {
|
|
16
|
-
return URL_PATTERNS.twitter.test(url);
|
|
17
|
-
}
|
|
18
|
-
async extract(url) {
|
|
19
|
-
try {
|
|
20
|
-
// Extract tweet ID from URL
|
|
21
|
-
const tweetIdMatch = url.match(/\/status\/(\d+)/);
|
|
22
|
-
const tweetId = tweetIdMatch?.[1];
|
|
23
|
-
if (!tweetId) {
|
|
24
|
-
throw new Error('Could not extract tweet ID');
|
|
25
|
-
}
|
|
26
|
-
// In production, would parse meta tags or use Twitter API
|
|
27
|
-
const title = `Tweet: ${tweetId}`;
|
|
28
|
-
logger.debug(`Twitter extracted metadata for ${url}`);
|
|
29
|
-
return {
|
|
30
|
-
url,
|
|
31
|
-
title,
|
|
32
|
-
description: 'Tweet from Twitter/X',
|
|
33
|
-
provider: 'twitter',
|
|
34
|
-
usedFallback: true,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
logger.error(`Twitter extraction failed for ${url}`, { error });
|
|
39
|
-
throw error;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=twitter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"twitter.js","sourceRoot":"","sources":["../../../src/enrich/providers/twitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,eAAe;IAC3B,IAAI,GAAG,SAAS,CAAA;IAChB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,GAAW;QACjB,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,4BAA4B;YAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;YACjD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;YAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAC9C,CAAC;YAED,0DAA0D;YAC1D,MAAM,KAAK,GAAG,UAAU,OAAO,EAAE,CAAA;YAEjC,MAAM,CAAC,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAA;YACrD,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,sBAAsB;gBACnC,QAAQ,EAAE,SAAS;gBACnB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/D,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
|