vidpipe 1.2.2 → 1.2.3
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/dist/index.d.ts +2 -2
- package/dist/index.js +4766 -123
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/agents/BaseAgent.d.ts +0 -52
- package/dist/agents/BaseAgent.d.ts.map +0 -1
- package/dist/agents/BaseAgent.js +0 -102
- package/dist/agents/BaseAgent.js.map +0 -1
- package/dist/agents/BlogAgent.d.ts +0 -3
- package/dist/agents/BlogAgent.d.ts.map +0 -1
- package/dist/agents/BlogAgent.js +0 -163
- package/dist/agents/BlogAgent.js.map +0 -1
- package/dist/agents/ChapterAgent.d.ts +0 -11
- package/dist/agents/ChapterAgent.d.ts.map +0 -1
- package/dist/agents/ChapterAgent.js +0 -191
- package/dist/agents/ChapterAgent.js.map +0 -1
- package/dist/agents/MediumVideoAgent.d.ts +0 -3
- package/dist/agents/MediumVideoAgent.d.ts.map +0 -1
- package/dist/agents/MediumVideoAgent.js +0 -219
- package/dist/agents/MediumVideoAgent.js.map +0 -1
- package/dist/agents/ShortsAgent.d.ts +0 -3
- package/dist/agents/ShortsAgent.d.ts.map +0 -1
- package/dist/agents/ShortsAgent.js +0 -243
- package/dist/agents/ShortsAgent.js.map +0 -1
- package/dist/agents/SilenceRemovalAgent.d.ts +0 -9
- package/dist/agents/SilenceRemovalAgent.d.ts.map +0 -1
- package/dist/agents/SilenceRemovalAgent.js +0 -209
- package/dist/agents/SilenceRemovalAgent.js.map +0 -1
- package/dist/agents/SocialMediaAgent.d.ts +0 -4
- package/dist/agents/SocialMediaAgent.d.ts.map +0 -1
- package/dist/agents/SocialMediaAgent.js +0 -248
- package/dist/agents/SocialMediaAgent.js.map +0 -1
- package/dist/agents/SummaryAgent.d.ts +0 -11
- package/dist/agents/SummaryAgent.d.ts.map +0 -1
- package/dist/agents/SummaryAgent.js +0 -333
- package/dist/agents/SummaryAgent.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -4
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -230
- package/dist/commands/doctor.js.map +0 -1
- package/dist/config/brand.d.ts +0 -29
- package/dist/config/brand.d.ts.map +0 -1
- package/dist/config/brand.js +0 -83
- package/dist/config/brand.js.map +0 -1
- package/dist/config/environment.d.ts +0 -39
- package/dist/config/environment.d.ts.map +0 -1
- package/dist/config/environment.js +0 -47
- package/dist/config/environment.js.map +0 -1
- package/dist/config/ffmpegResolver.d.ts +0 -3
- package/dist/config/ffmpegResolver.d.ts.map +0 -1
- package/dist/config/ffmpegResolver.js +0 -37
- package/dist/config/ffmpegResolver.js.map +0 -1
- package/dist/config/logger.d.ts +0 -5
- package/dist/config/logger.d.ts.map +0 -1
- package/dist/config/logger.js +0 -13
- package/dist/config/logger.js.map +0 -1
- package/dist/config/pricing.d.ts +0 -34
- package/dist/config/pricing.d.ts.map +0 -1
- package/dist/config/pricing.js +0 -71
- package/dist/config/pricing.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/pipeline.d.ts +0 -57
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/pipeline.js +0 -324
- package/dist/pipeline.js.map +0 -1
- package/dist/providers/ClaudeProvider.d.ts +0 -14
- package/dist/providers/ClaudeProvider.d.ts.map +0 -1
- package/dist/providers/ClaudeProvider.js +0 -182
- package/dist/providers/ClaudeProvider.js.map +0 -1
- package/dist/providers/CopilotProvider.d.ts +0 -17
- package/dist/providers/CopilotProvider.d.ts.map +0 -1
- package/dist/providers/CopilotProvider.js +0 -149
- package/dist/providers/CopilotProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts +0 -14
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js +0 -175
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/index.d.ts +0 -18
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -61
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/types.d.ts +0 -112
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -8
- package/dist/providers/types.js.map +0 -1
- package/dist/services/captionGeneration.d.ts +0 -7
- package/dist/services/captionGeneration.d.ts.map +0 -1
- package/dist/services/captionGeneration.js +0 -29
- package/dist/services/captionGeneration.js.map +0 -1
- package/dist/services/costTracker.d.ts +0 -63
- package/dist/services/costTracker.d.ts.map +0 -1
- package/dist/services/costTracker.js +0 -137
- package/dist/services/costTracker.js.map +0 -1
- package/dist/services/fileWatcher.d.ts +0 -19
- package/dist/services/fileWatcher.d.ts.map +0 -1
- package/dist/services/fileWatcher.js +0 -120
- package/dist/services/fileWatcher.js.map +0 -1
- package/dist/services/gitOperations.d.ts +0 -3
- package/dist/services/gitOperations.d.ts.map +0 -1
- package/dist/services/gitOperations.js +0 -43
- package/dist/services/gitOperations.js.map +0 -1
- package/dist/services/socialPosting.d.ts +0 -38
- package/dist/services/socialPosting.d.ts.map +0 -1
- package/dist/services/socialPosting.js +0 -102
- package/dist/services/socialPosting.js.map +0 -1
- package/dist/services/transcription.d.ts +0 -3
- package/dist/services/transcription.d.ts.map +0 -1
- package/dist/services/transcription.js +0 -100
- package/dist/services/transcription.js.map +0 -1
- package/dist/services/videoIngestion.d.ts +0 -3
- package/dist/services/videoIngestion.d.ts.map +0 -1
- package/dist/services/videoIngestion.js +0 -104
- package/dist/services/videoIngestion.js.map +0 -1
- package/dist/tools/captions/captionGenerator.d.ts +0 -84
- package/dist/tools/captions/captionGenerator.d.ts.map +0 -1
- package/dist/tools/captions/captionGenerator.js +0 -390
- package/dist/tools/captions/captionGenerator.js.map +0 -1
- package/dist/tools/ffmpeg/aspectRatio.d.ts +0 -101
- package/dist/tools/ffmpeg/aspectRatio.d.ts.map +0 -1
- package/dist/tools/ffmpeg/aspectRatio.js +0 -339
- package/dist/tools/ffmpeg/aspectRatio.js.map +0 -1
- package/dist/tools/ffmpeg/audioExtraction.d.ts +0 -16
- package/dist/tools/ffmpeg/audioExtraction.d.ts.map +0 -1
- package/dist/tools/ffmpeg/audioExtraction.js +0 -87
- package/dist/tools/ffmpeg/audioExtraction.js.map +0 -1
- package/dist/tools/ffmpeg/captionBurning.d.ts +0 -8
- package/dist/tools/ffmpeg/captionBurning.d.ts.map +0 -1
- package/dist/tools/ffmpeg/captionBurning.js +0 -72
- package/dist/tools/ffmpeg/captionBurning.js.map +0 -1
- package/dist/tools/ffmpeg/clipExtraction.d.ts +0 -38
- package/dist/tools/ffmpeg/clipExtraction.d.ts.map +0 -1
- package/dist/tools/ffmpeg/clipExtraction.js +0 -215
- package/dist/tools/ffmpeg/clipExtraction.js.map +0 -1
- package/dist/tools/ffmpeg/faceDetection.d.ts +0 -127
- package/dist/tools/ffmpeg/faceDetection.d.ts.map +0 -1
- package/dist/tools/ffmpeg/faceDetection.js +0 -501
- package/dist/tools/ffmpeg/faceDetection.js.map +0 -1
- package/dist/tools/ffmpeg/frameCapture.d.ts +0 -10
- package/dist/tools/ffmpeg/frameCapture.d.ts.map +0 -1
- package/dist/tools/ffmpeg/frameCapture.js +0 -49
- package/dist/tools/ffmpeg/frameCapture.js.map +0 -1
- package/dist/tools/ffmpeg/silenceDetection.d.ts +0 -10
- package/dist/tools/ffmpeg/silenceDetection.d.ts.map +0 -1
- package/dist/tools/ffmpeg/silenceDetection.js +0 -56
- package/dist/tools/ffmpeg/silenceDetection.js.map +0 -1
- package/dist/tools/ffmpeg/singlePassEdit.d.ts +0 -25
- package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +0 -1
- package/dist/tools/ffmpeg/singlePassEdit.js +0 -124
- package/dist/tools/ffmpeg/singlePassEdit.js.map +0 -1
- package/dist/tools/search/exaClient.d.ts +0 -8
- package/dist/tools/search/exaClient.d.ts.map +0 -1
- package/dist/tools/search/exaClient.js +0 -38
- package/dist/tools/search/exaClient.js.map +0 -1
- package/dist/tools/whisper/whisperClient.d.ts +0 -3
- package/dist/tools/whisper/whisperClient.d.ts.map +0 -1
- package/dist/tools/whisper/whisperClient.js +0 -77
- package/dist/tools/whisper/whisperClient.js.map +0 -1
- package/dist/types/index.d.ts +0 -305
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -44
- package/dist/types/index.js.map +0 -1
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { TokenUsage, CostInfo, QuotaSnapshot } from '../providers/types.js';
|
|
2
|
-
/** Record of a single LLM usage event */
|
|
3
|
-
export interface UsageRecord {
|
|
4
|
-
timestamp: Date;
|
|
5
|
-
provider: string;
|
|
6
|
-
model: string;
|
|
7
|
-
agent: string;
|
|
8
|
-
stage: string;
|
|
9
|
-
usage: TokenUsage;
|
|
10
|
-
cost: CostInfo;
|
|
11
|
-
durationMs?: number;
|
|
12
|
-
}
|
|
13
|
-
/** Aggregated cost report */
|
|
14
|
-
export interface CostReport {
|
|
15
|
-
totalCostUSD: number;
|
|
16
|
-
totalPRUs: number;
|
|
17
|
-
totalTokens: {
|
|
18
|
-
input: number;
|
|
19
|
-
output: number;
|
|
20
|
-
total: number;
|
|
21
|
-
};
|
|
22
|
-
byProvider: Record<string, {
|
|
23
|
-
costUSD: number;
|
|
24
|
-
prus: number;
|
|
25
|
-
calls: number;
|
|
26
|
-
}>;
|
|
27
|
-
byAgent: Record<string, {
|
|
28
|
-
costUSD: number;
|
|
29
|
-
prus: number;
|
|
30
|
-
calls: number;
|
|
31
|
-
}>;
|
|
32
|
-
byModel: Record<string, {
|
|
33
|
-
costUSD: number;
|
|
34
|
-
prus: number;
|
|
35
|
-
calls: number;
|
|
36
|
-
}>;
|
|
37
|
-
records: UsageRecord[];
|
|
38
|
-
/** Copilot quota info (if available) */
|
|
39
|
-
copilotQuota?: QuotaSnapshot;
|
|
40
|
-
}
|
|
41
|
-
/** Singleton cost tracker for a pipeline run */
|
|
42
|
-
declare class CostTracker {
|
|
43
|
-
private records;
|
|
44
|
-
private latestQuota?;
|
|
45
|
-
private currentAgent;
|
|
46
|
-
private currentStage;
|
|
47
|
-
/** Set the current agent name (called by BaseAgent before LLM calls) */
|
|
48
|
-
setAgent(agent: string): void;
|
|
49
|
-
/** Set the current pipeline stage */
|
|
50
|
-
setStage(stage: string): void;
|
|
51
|
-
/** Record a usage event from any provider */
|
|
52
|
-
recordUsage(provider: string, model: string, usage: TokenUsage, cost?: CostInfo, durationMs?: number, quotaSnapshot?: QuotaSnapshot): void;
|
|
53
|
-
/** Get the full cost report */
|
|
54
|
-
getReport(): CostReport;
|
|
55
|
-
/** Format report as human-readable string for console output */
|
|
56
|
-
formatReport(): string;
|
|
57
|
-
/** Reset all tracking (for new pipeline run) */
|
|
58
|
-
reset(): void;
|
|
59
|
-
}
|
|
60
|
-
/** Global singleton instance */
|
|
61
|
-
export declare const costTracker: CostTracker;
|
|
62
|
-
export {};
|
|
63
|
-
//# sourceMappingURL=costTracker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"costTracker.d.ts","sourceRoot":"","sources":["../../src/services/costTracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAIjF,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,wCAAwC;IACxC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,gDAAgD;AAChD,cAAM,WAAW;IACf,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,YAAY,CAAa;IAEjC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,6CAA6C;IAC7C,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE,QAAQ,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,IAAI;IAkCP,+BAA+B;IAC/B,SAAS,IAAI,UAAU;IAgDvB,gEAAgE;IAChE,YAAY,IAAI,MAAM;IAmDtB,gDAAgD;IAChD,KAAK,IAAI,IAAI;CAMd;AAED,gCAAgC;AAChC,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { calculateTokenCost, calculatePRUCost, COPILOT_PRU_OVERAGE_RATE } from '../config/pricing.js';
|
|
2
|
-
import logger from '../config/logger.js';
|
|
3
|
-
/** Singleton cost tracker for a pipeline run */
|
|
4
|
-
class CostTracker {
|
|
5
|
-
records = [];
|
|
6
|
-
latestQuota;
|
|
7
|
-
currentAgent = 'unknown';
|
|
8
|
-
currentStage = 'unknown';
|
|
9
|
-
/** Set the current agent name (called by BaseAgent before LLM calls) */
|
|
10
|
-
setAgent(agent) {
|
|
11
|
-
this.currentAgent = agent;
|
|
12
|
-
}
|
|
13
|
-
/** Set the current pipeline stage */
|
|
14
|
-
setStage(stage) {
|
|
15
|
-
this.currentStage = stage;
|
|
16
|
-
}
|
|
17
|
-
/** Record a usage event from any provider */
|
|
18
|
-
recordUsage(provider, model, usage, cost, durationMs, quotaSnapshot) {
|
|
19
|
-
// Calculate cost if not provided
|
|
20
|
-
const finalCost = cost ?? {
|
|
21
|
-
amount: provider === 'copilot'
|
|
22
|
-
? calculatePRUCost(model)
|
|
23
|
-
: calculateTokenCost(model, usage.inputTokens, usage.outputTokens),
|
|
24
|
-
unit: provider === 'copilot' ? 'premium_requests' : 'usd',
|
|
25
|
-
model,
|
|
26
|
-
};
|
|
27
|
-
const record = {
|
|
28
|
-
timestamp: new Date(),
|
|
29
|
-
provider,
|
|
30
|
-
model,
|
|
31
|
-
agent: this.currentAgent,
|
|
32
|
-
stage: this.currentStage,
|
|
33
|
-
usage,
|
|
34
|
-
cost: finalCost,
|
|
35
|
-
durationMs,
|
|
36
|
-
};
|
|
37
|
-
this.records.push(record);
|
|
38
|
-
if (quotaSnapshot) {
|
|
39
|
-
this.latestQuota = quotaSnapshot;
|
|
40
|
-
}
|
|
41
|
-
logger.debug(`[CostTracker] ${provider}/${model} | ${this.currentAgent} | ` +
|
|
42
|
-
`in=${usage.inputTokens} out=${usage.outputTokens} | ` +
|
|
43
|
-
`cost=${finalCost.amount.toFixed(4)} ${finalCost.unit}`);
|
|
44
|
-
}
|
|
45
|
-
/** Get the full cost report */
|
|
46
|
-
getReport() {
|
|
47
|
-
const report = {
|
|
48
|
-
totalCostUSD: 0,
|
|
49
|
-
totalPRUs: 0,
|
|
50
|
-
totalTokens: { input: 0, output: 0, total: 0 },
|
|
51
|
-
byProvider: {},
|
|
52
|
-
byAgent: {},
|
|
53
|
-
byModel: {},
|
|
54
|
-
records: [...this.records],
|
|
55
|
-
copilotQuota: this.latestQuota,
|
|
56
|
-
};
|
|
57
|
-
for (const record of this.records) {
|
|
58
|
-
const { provider, model, agent, usage, cost } = record;
|
|
59
|
-
// Accumulate tokens
|
|
60
|
-
report.totalTokens.input += usage.inputTokens;
|
|
61
|
-
report.totalTokens.output += usage.outputTokens;
|
|
62
|
-
report.totalTokens.total += usage.totalTokens;
|
|
63
|
-
// Accumulate costs
|
|
64
|
-
const usdCost = cost.unit === 'usd' ? cost.amount : cost.amount * COPILOT_PRU_OVERAGE_RATE;
|
|
65
|
-
const prus = cost.unit === 'premium_requests' ? cost.amount : 0;
|
|
66
|
-
report.totalCostUSD += usdCost;
|
|
67
|
-
report.totalPRUs += prus;
|
|
68
|
-
// By provider
|
|
69
|
-
if (!report.byProvider[provider])
|
|
70
|
-
report.byProvider[provider] = { costUSD: 0, prus: 0, calls: 0 };
|
|
71
|
-
report.byProvider[provider].costUSD += usdCost;
|
|
72
|
-
report.byProvider[provider].prus += prus;
|
|
73
|
-
report.byProvider[provider].calls += 1;
|
|
74
|
-
// By agent
|
|
75
|
-
if (!report.byAgent[agent])
|
|
76
|
-
report.byAgent[agent] = { costUSD: 0, prus: 0, calls: 0 };
|
|
77
|
-
report.byAgent[agent].costUSD += usdCost;
|
|
78
|
-
report.byAgent[agent].prus += prus;
|
|
79
|
-
report.byAgent[agent].calls += 1;
|
|
80
|
-
// By model
|
|
81
|
-
if (!report.byModel[model])
|
|
82
|
-
report.byModel[model] = { costUSD: 0, prus: 0, calls: 0 };
|
|
83
|
-
report.byModel[model].costUSD += usdCost;
|
|
84
|
-
report.byModel[model].prus += prus;
|
|
85
|
-
report.byModel[model].calls += 1;
|
|
86
|
-
}
|
|
87
|
-
return report;
|
|
88
|
-
}
|
|
89
|
-
/** Format report as human-readable string for console output */
|
|
90
|
-
formatReport() {
|
|
91
|
-
const report = this.getReport();
|
|
92
|
-
const lines = [
|
|
93
|
-
'',
|
|
94
|
-
'═══════════════════════════════════════════',
|
|
95
|
-
' 💰 Pipeline Cost Report',
|
|
96
|
-
'═══════════════════════════════════════════',
|
|
97
|
-
'',
|
|
98
|
-
` Total Cost: $${report.totalCostUSD.toFixed(4)} USD`,
|
|
99
|
-
];
|
|
100
|
-
if (report.totalPRUs > 0) {
|
|
101
|
-
lines.push(` Total PRUs: ${report.totalPRUs} premium requests`);
|
|
102
|
-
}
|
|
103
|
-
lines.push(` Total Tokens: ${report.totalTokens.total.toLocaleString()} (${report.totalTokens.input.toLocaleString()} in / ${report.totalTokens.output.toLocaleString()} out)`, ` LLM Calls: ${this.records.length}`);
|
|
104
|
-
if (report.copilotQuota) {
|
|
105
|
-
lines.push('', ` Copilot Quota: ${report.copilotQuota.remainingPercentage.toFixed(1)}% remaining`, ` Used/Total: ${report.copilotQuota.usedRequests}/${report.copilotQuota.entitlementRequests} PRUs`);
|
|
106
|
-
if (report.copilotQuota.resetDate) {
|
|
107
|
-
lines.push(` Resets: ${report.copilotQuota.resetDate}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// By agent breakdown
|
|
111
|
-
if (Object.keys(report.byAgent).length > 1) {
|
|
112
|
-
lines.push('', ' By Agent:');
|
|
113
|
-
for (const [agent, data] of Object.entries(report.byAgent)) {
|
|
114
|
-
lines.push(` ${agent}: $${data.costUSD.toFixed(4)} (${data.calls} calls)`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
// By model breakdown
|
|
118
|
-
if (Object.keys(report.byModel).length > 1) {
|
|
119
|
-
lines.push('', ' By Model:');
|
|
120
|
-
for (const [model, data] of Object.entries(report.byModel)) {
|
|
121
|
-
lines.push(` ${model}: $${data.costUSD.toFixed(4)} (${data.calls} calls)`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
lines.push('', '═══════════════════════════════════════════', '');
|
|
125
|
-
return lines.join('\n');
|
|
126
|
-
}
|
|
127
|
-
/** Reset all tracking (for new pipeline run) */
|
|
128
|
-
reset() {
|
|
129
|
-
this.records = [];
|
|
130
|
-
this.latestQuota = undefined;
|
|
131
|
-
this.currentAgent = 'unknown';
|
|
132
|
-
this.currentStage = 'unknown';
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/** Global singleton instance */
|
|
136
|
-
export const costTracker = new CostTracker();
|
|
137
|
-
//# sourceMappingURL=costTracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"costTracker.js","sourceRoot":"","sources":["../../src/services/costTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
export interface FileWatcherOptions {
|
|
3
|
-
processExisting?: boolean;
|
|
4
|
-
}
|
|
5
|
-
export declare class FileWatcher extends EventEmitter {
|
|
6
|
-
private watchFolder;
|
|
7
|
-
private watcher;
|
|
8
|
-
private processExisting;
|
|
9
|
-
constructor(options?: FileWatcherOptions);
|
|
10
|
-
private static readonly MIN_FILE_SIZE;
|
|
11
|
-
private static readonly EXTRA_STABILITY_DELAY;
|
|
12
|
-
/** Read file size, wait, read again — if it changed the file is still being written. */
|
|
13
|
-
private isFileStable;
|
|
14
|
-
private handleDetectedFile;
|
|
15
|
-
private scanExistingFiles;
|
|
16
|
-
start(): void;
|
|
17
|
-
stop(): void;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=fileWatcher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/services/fileWatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAKrC,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,eAAe,CAAS;gBAEpB,OAAO,GAAE,kBAAuB;IAY5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAc;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAO;IAEpD,wFAAwF;YAC1E,YAAY;YAWZ,kBAAkB;IA8BhC,OAAO,CAAC,iBAAiB;IAYzB,KAAK,IAAI,IAAI;IAqDb,IAAI,IAAI,IAAI;CAOb"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { watch } from 'chokidar';
|
|
2
|
-
import { getConfig } from '../config/environment';
|
|
3
|
-
import { EventEmitter } from 'events';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import fs from 'fs';
|
|
6
|
-
import logger from '../config/logger';
|
|
7
|
-
export class FileWatcher extends EventEmitter {
|
|
8
|
-
watchFolder;
|
|
9
|
-
watcher = null;
|
|
10
|
-
processExisting;
|
|
11
|
-
constructor(options = {}) {
|
|
12
|
-
super();
|
|
13
|
-
const config = getConfig();
|
|
14
|
-
this.watchFolder = config.WATCH_FOLDER;
|
|
15
|
-
this.processExisting = options.processExisting ?? false;
|
|
16
|
-
if (!fs.existsSync(this.watchFolder)) {
|
|
17
|
-
fs.mkdirSync(this.watchFolder, { recursive: true });
|
|
18
|
-
logger.info(`Created watch folder: ${this.watchFolder}`);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
static MIN_FILE_SIZE = 1024 * 1024; // 1MB
|
|
22
|
-
static EXTRA_STABILITY_DELAY = 3000;
|
|
23
|
-
/** Read file size, wait, read again — if it changed the file is still being written. */
|
|
24
|
-
async isFileStable(filePath) {
|
|
25
|
-
try {
|
|
26
|
-
const sizeBefore = fs.statSync(filePath).size;
|
|
27
|
-
await new Promise((resolve) => setTimeout(resolve, FileWatcher.EXTRA_STABILITY_DELAY));
|
|
28
|
-
const sizeAfter = fs.statSync(filePath).size;
|
|
29
|
-
return sizeBefore === sizeAfter;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
async handleDetectedFile(filePath) {
|
|
36
|
-
if (path.extname(filePath).toLowerCase() !== '.mp4') {
|
|
37
|
-
logger.debug(`[watcher] Ignoring non-mp4 file: ${filePath}`);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
let fileSize;
|
|
41
|
-
try {
|
|
42
|
-
fileSize = fs.statSync(filePath).size;
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
logger.warn(`[watcher] Could not stat file (may have been removed): ${filePath}`);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
logger.debug(`[watcher] File size: ${(fileSize / 1024 / 1024).toFixed(1)} MB — ${filePath}`);
|
|
49
|
-
if (fileSize < FileWatcher.MIN_FILE_SIZE) {
|
|
50
|
-
logger.warn(`Skipping small file (${fileSize} bytes), likely a failed recording: ${filePath}`);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
const stable = await this.isFileStable(filePath);
|
|
54
|
-
if (!stable) {
|
|
55
|
-
logger.warn(`File is still being written, skipping for now: ${filePath}`);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
logger.info(`New video detected: ${filePath}`);
|
|
59
|
-
this.emit('new-video', filePath);
|
|
60
|
-
}
|
|
61
|
-
scanExistingFiles() {
|
|
62
|
-
const files = fs.readdirSync(this.watchFolder);
|
|
63
|
-
for (const file of files) {
|
|
64
|
-
if (path.extname(file).toLowerCase() === '.mp4') {
|
|
65
|
-
const filePath = path.join(this.watchFolder, file);
|
|
66
|
-
this.handleDetectedFile(filePath).catch(err => logger.error(`Error processing ${filePath}: ${err instanceof Error ? err.message : String(err)}`));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
start() {
|
|
71
|
-
this.watcher = watch(this.watchFolder, {
|
|
72
|
-
persistent: true,
|
|
73
|
-
ignoreInitial: true,
|
|
74
|
-
depth: 0,
|
|
75
|
-
atomic: 100,
|
|
76
|
-
// Polling is more reliable on Windows for detecting renames (e.g. Bandicam temp→final)
|
|
77
|
-
usePolling: true,
|
|
78
|
-
interval: 500,
|
|
79
|
-
awaitWriteFinish: {
|
|
80
|
-
stabilityThreshold: 3000,
|
|
81
|
-
pollInterval: 200,
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
this.watcher.on('add', (filePath) => {
|
|
85
|
-
logger.debug(`[watcher] 'add' event: ${filePath}`);
|
|
86
|
-
this.handleDetectedFile(filePath).catch(err => logger.error(`Error processing ${filePath}: ${err instanceof Error ? err.message : String(err)}`));
|
|
87
|
-
});
|
|
88
|
-
this.watcher.on('change', (filePath) => {
|
|
89
|
-
logger.debug(`[watcher] 'change' event: ${filePath}`);
|
|
90
|
-
if (path.extname(filePath).toLowerCase() !== '.mp4')
|
|
91
|
-
return;
|
|
92
|
-
logger.info(`Change detected on video file: ${filePath}`);
|
|
93
|
-
this.handleDetectedFile(filePath).catch(err => logger.error(`Error processing ${filePath}: ${err instanceof Error ? err.message : String(err)}`));
|
|
94
|
-
});
|
|
95
|
-
this.watcher.on('unlink', (filePath) => {
|
|
96
|
-
logger.debug(`[watcher] 'unlink' event: ${filePath}`);
|
|
97
|
-
});
|
|
98
|
-
this.watcher.on('raw', (event, rawPath, details) => {
|
|
99
|
-
logger.debug(`[watcher] raw event=${event} path=${rawPath}`);
|
|
100
|
-
});
|
|
101
|
-
this.watcher.on('error', (error) => {
|
|
102
|
-
logger.error(`File watcher error: ${error instanceof Error ? error.message : String(error)}`);
|
|
103
|
-
});
|
|
104
|
-
this.watcher.on('ready', () => {
|
|
105
|
-
logger.info('File watcher is fully initialized and ready');
|
|
106
|
-
if (this.processExisting) {
|
|
107
|
-
this.scanExistingFiles();
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
logger.info(`Watching for new .mp4 files in: ${this.watchFolder}`);
|
|
111
|
-
}
|
|
112
|
-
stop() {
|
|
113
|
-
if (this.watcher) {
|
|
114
|
-
this.watcher.close();
|
|
115
|
-
this.watcher = null;
|
|
116
|
-
logger.info('File watcher stopped');
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=fileWatcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileWatcher.js","sourceRoot":"","sources":["../../src/services/fileWatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gitOperations.d.ts","sourceRoot":"","sources":["../../src/services/gitOperations.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BtF;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAalE"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'child_process';
|
|
2
|
-
import { getConfig } from '../config/environment';
|
|
3
|
-
import logger from '../config/logger';
|
|
4
|
-
export async function commitAndPush(videoSlug, message) {
|
|
5
|
-
const { REPO_ROOT } = getConfig();
|
|
6
|
-
const commitMessage = message || `Auto-processed video: ${videoSlug}`;
|
|
7
|
-
try {
|
|
8
|
-
logger.info(`Staging all changes in ${REPO_ROOT}`);
|
|
9
|
-
execSync('git add -A', { cwd: REPO_ROOT, stdio: 'pipe' });
|
|
10
|
-
logger.info(`Committing: ${commitMessage}`);
|
|
11
|
-
execSync(`git commit -m "${commitMessage}"`, { cwd: REPO_ROOT, stdio: 'pipe' });
|
|
12
|
-
const branch = execSync('git rev-parse --abbrev-ref HEAD', { cwd: REPO_ROOT, stdio: 'pipe' })
|
|
13
|
-
.toString()
|
|
14
|
-
.trim();
|
|
15
|
-
logger.info(`Pushing to origin ${branch}`);
|
|
16
|
-
execSync(`git push origin ${branch}`, { cwd: REPO_ROOT, stdio: 'pipe' });
|
|
17
|
-
logger.info('Git commit and push completed successfully');
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
21
|
-
if (msg.includes('nothing to commit')) {
|
|
22
|
-
logger.info('Nothing to commit, working tree clean');
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
logger.error(`Git operation failed: ${msg}`);
|
|
26
|
-
throw error;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export async function stageFiles(patterns) {
|
|
30
|
-
const { REPO_ROOT } = getConfig();
|
|
31
|
-
for (const pattern of patterns) {
|
|
32
|
-
try {
|
|
33
|
-
logger.info(`Staging files matching: ${pattern}`);
|
|
34
|
-
execSync(`git add ${pattern}`, { cwd: REPO_ROOT, stdio: 'pipe' });
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
38
|
-
logger.error(`Failed to stage pattern "${pattern}": ${msg}`);
|
|
39
|
-
throw error;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=gitOperations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gitOperations.js","sourceRoot":"","sources":["../../src/services/gitOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,MAAM,MAAM,kBAAkB,CAAA;AAErC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAgB;IACrE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;IACjC,MAAM,aAAa,GAAG,OAAO,IAAI,yBAAyB,SAAS,EAAE,CAAA;IAErE,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAA;QAClD,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAEzD,MAAM,CAAC,IAAI,CAAC,eAAe,aAAa,EAAE,CAAC,CAAA;QAC3C,QAAQ,CAAC,kBAAkB,aAAa,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAE/E,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC1F,QAAQ,EAAE;aACV,IAAI,EAAE,CAAA;QACT,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAA;QAC1C,QAAQ,CAAC,mBAAmB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAExE,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAClE,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;YACpD,OAAM;QACR,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAA;QAC5C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAkB;IACjD,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;IAEjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAA;YACjD,QAAQ,CAAC,WAAW,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACnE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClE,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,MAAM,GAAG,EAAE,CAAC,CAAA;YAC5D,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Platform, SocialPost } from '../types';
|
|
2
|
-
export interface SocialPlatformClient {
|
|
3
|
-
post(content: SocialPost): Promise<{
|
|
4
|
-
success: boolean;
|
|
5
|
-
url?: string;
|
|
6
|
-
error?: string;
|
|
7
|
-
}>;
|
|
8
|
-
validate(content: SocialPost): boolean;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Placeholder client used until real platform API integrations are wired up.
|
|
12
|
-
* Each platform will eventually get its own client class.
|
|
13
|
-
*/
|
|
14
|
-
export declare class PlaceholderPlatformClient implements SocialPlatformClient {
|
|
15
|
-
private readonly platform;
|
|
16
|
-
constructor(platform: Platform);
|
|
17
|
-
post(content: SocialPost): Promise<{
|
|
18
|
-
success: boolean;
|
|
19
|
-
url?: string;
|
|
20
|
-
error?: string;
|
|
21
|
-
}>;
|
|
22
|
-
validate(_content: SocialPost): boolean;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Returns the appropriate SocialPlatformClient for a given platform.
|
|
26
|
-
* Currently returns a PlaceholderPlatformClient for all platforms.
|
|
27
|
-
*/
|
|
28
|
-
export declare function getPlatformClient(platform: Platform): SocialPlatformClient;
|
|
29
|
-
/**
|
|
30
|
-
* Publishes an array of SocialPost items to their respective platforms.
|
|
31
|
-
* Returns a map of platform → result for each post.
|
|
32
|
-
*/
|
|
33
|
-
export declare function publishToAllPlatforms(posts: SocialPost[]): Promise<Map<Platform, {
|
|
34
|
-
success: boolean;
|
|
35
|
-
url?: string;
|
|
36
|
-
error?: string;
|
|
37
|
-
}>>;
|
|
38
|
-
//# sourceMappingURL=socialPosting.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"socialPosting.d.ts","sourceRoot":"","sources":["../../src/services/socialPosting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAO/C,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtF,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAA;CACvC;AAMD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,oBAAoB;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEzC,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAS5F,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO;CAWxC;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,oBAAoB,CAyC1E;AAMD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,EAAE,GAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiB5E"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { Platform } from '../types';
|
|
2
|
-
import logger from '../config/logger';
|
|
3
|
-
// ============================================================================
|
|
4
|
-
// PLACEHOLDER CLIENT
|
|
5
|
-
// ============================================================================
|
|
6
|
-
/**
|
|
7
|
-
* Placeholder client used until real platform API integrations are wired up.
|
|
8
|
-
* Each platform will eventually get its own client class.
|
|
9
|
-
*/
|
|
10
|
-
export class PlaceholderPlatformClient {
|
|
11
|
-
platform;
|
|
12
|
-
constructor(platform) {
|
|
13
|
-
this.platform = platform;
|
|
14
|
-
}
|
|
15
|
-
async post(content) {
|
|
16
|
-
logger.info(`Placeholder: Would post to ${this.platform}`, {
|
|
17
|
-
platform: this.platform,
|
|
18
|
-
contentLength: content.content.length,
|
|
19
|
-
hashtags: content.hashtags,
|
|
20
|
-
});
|
|
21
|
-
return { success: true };
|
|
22
|
-
}
|
|
23
|
-
validate(_content) {
|
|
24
|
-
// TODO: Implement platform-specific validation
|
|
25
|
-
// Each platform has different limits:
|
|
26
|
-
// - TikTok: 2200 char caption, video 15s-10min
|
|
27
|
-
// - YouTube: 5000 char description, shorts ≤60s
|
|
28
|
-
// - Instagram: 2200 char caption, reels ≤90s
|
|
29
|
-
// - LinkedIn: 3000 char post, video ≤10min
|
|
30
|
-
// - X (Twitter): 280 char tweet, video ≤140s
|
|
31
|
-
logger.warn(`[${this.platform}] Content validation not yet implemented — accepting all content`);
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// ============================================================================
|
|
36
|
-
// PLATFORM CLIENT FACTORY
|
|
37
|
-
// ============================================================================
|
|
38
|
-
/**
|
|
39
|
-
* Returns the appropriate SocialPlatformClient for a given platform.
|
|
40
|
-
* Currently returns a PlaceholderPlatformClient for all platforms.
|
|
41
|
-
*/
|
|
42
|
-
export function getPlatformClient(platform) {
|
|
43
|
-
switch (platform) {
|
|
44
|
-
case Platform.TikTok:
|
|
45
|
-
// TODO: Replace with TikTokClient once TikTok API integration is implemented
|
|
46
|
-
// Expected: TikTok Content Posting API (OAuth 2.0, video upload via URL or file)
|
|
47
|
-
// Docs: https://developers.tiktok.com/doc/content-posting-api-get-started
|
|
48
|
-
logger.warn('[TikTok] Using placeholder client — TikTok Content Posting API not yet integrated');
|
|
49
|
-
return new PlaceholderPlatformClient(platform);
|
|
50
|
-
case Platform.YouTube:
|
|
51
|
-
// TODO: Replace with YouTubeClient once YouTube Data API integration is implemented
|
|
52
|
-
// Expected: YouTube Data API v3 (OAuth 2.0, videos.insert for Shorts upload)
|
|
53
|
-
// Docs: https://developers.google.com/youtube/v3/docs/videos/insert
|
|
54
|
-
logger.warn('[YouTube] Using placeholder client — YouTube Data API v3 not yet integrated');
|
|
55
|
-
return new PlaceholderPlatformClient(platform);
|
|
56
|
-
case Platform.Instagram:
|
|
57
|
-
// TODO: Replace with InstagramClient once Instagram Graph API integration is implemented
|
|
58
|
-
// Expected: Instagram Graph API (OAuth 2.0, Reels publishing via container + publish)
|
|
59
|
-
// Docs: https://developers.facebook.com/docs/instagram-api/guides/content-publishing
|
|
60
|
-
logger.warn('[Instagram] Using placeholder client — Instagram Graph API not yet integrated');
|
|
61
|
-
return new PlaceholderPlatformClient(platform);
|
|
62
|
-
case Platform.LinkedIn:
|
|
63
|
-
// TODO: Replace with LinkedInClient once LinkedIn API integration is implemented
|
|
64
|
-
// Expected: LinkedIn Marketing API (OAuth 2.0, ugcPosts for video + text)
|
|
65
|
-
// Docs: https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares
|
|
66
|
-
logger.warn('[LinkedIn] Using placeholder client — LinkedIn Marketing API not yet integrated');
|
|
67
|
-
return new PlaceholderPlatformClient(platform);
|
|
68
|
-
case Platform.X:
|
|
69
|
-
// TODO: Replace with XClient once X (Twitter) API v2 integration is implemented
|
|
70
|
-
// Expected: X API v2 (OAuth 2.0, media upload + tweet creation)
|
|
71
|
-
// Docs: https://developer.x.com/en/docs/x-api/tweets/manage-tweets
|
|
72
|
-
logger.warn('[X] Using placeholder client — X API v2 not yet integrated');
|
|
73
|
-
return new PlaceholderPlatformClient(platform);
|
|
74
|
-
default:
|
|
75
|
-
logger.warn(`Unknown platform: ${platform}, using placeholder client`);
|
|
76
|
-
return new PlaceholderPlatformClient(platform);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// ============================================================================
|
|
80
|
-
// PUBLISH TO ALL PLATFORMS
|
|
81
|
-
// ============================================================================
|
|
82
|
-
/**
|
|
83
|
-
* Publishes an array of SocialPost items to their respective platforms.
|
|
84
|
-
* Returns a map of platform → result for each post.
|
|
85
|
-
*/
|
|
86
|
-
export async function publishToAllPlatforms(posts) {
|
|
87
|
-
const results = new Map();
|
|
88
|
-
for (const post of posts) {
|
|
89
|
-
const client = getPlatformClient(post.platform);
|
|
90
|
-
try {
|
|
91
|
-
const result = await client.post(post);
|
|
92
|
-
results.set(post.platform, result);
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
96
|
-
logger.error(`Failed to publish to ${post.platform}`, { error: errorMessage });
|
|
97
|
-
results.set(post.platform, { success: false, error: errorMessage });
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return results;
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=socialPosting.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"socialPosting.js","sourceRoot":"","sources":["../../src/services/socialPosting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transcription.d.ts","sourceRoot":"","sources":["../../src/services/transcription.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAA;AAM/D,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAuD3E"}
|