imperium-crawl 2.0.0 → 2.2.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 (75) hide show
  1. package/README.md +41 -77
  2. package/dist/cli-tui.d.ts +1 -1
  3. package/dist/cli-tui.js +1 -1
  4. package/dist/cli.js +1 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config.d.ts +0 -11
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +0 -18
  9. package/dist/config.js.map +1 -1
  10. package/dist/constants.d.ts +1 -1
  11. package/dist/constants.js +1 -1
  12. package/dist/formatters.d.ts +2 -2
  13. package/dist/formatters.js +2 -2
  14. package/dist/index.js +6 -28
  15. package/dist/index.js.map +1 -1
  16. package/dist/recipes/index.d.ts.map +1 -1
  17. package/dist/recipes/index.js +8 -0
  18. package/dist/recipes/index.js.map +1 -1
  19. package/dist/recipes/influencer-competitor-spy.json +14 -0
  20. package/dist/recipes/influencer-content-scout.json +14 -0
  21. package/dist/recipes/influencer-hashtag-scout.json +14 -0
  22. package/dist/recipes/influencer-niche-discovery.json +14 -0
  23. package/dist/skills/manager.d.ts +11 -2
  24. package/dist/skills/manager.d.ts.map +1 -1
  25. package/dist/skills/manager.js.map +1 -1
  26. package/dist/social/ai-fallback.d.ts +22 -0
  27. package/dist/social/ai-fallback.d.ts.map +1 -0
  28. package/dist/social/ai-fallback.js +156 -0
  29. package/dist/social/ai-fallback.js.map +1 -0
  30. package/dist/social/parsers.d.ts +28 -0
  31. package/dist/social/parsers.d.ts.map +1 -0
  32. package/dist/social/parsers.js +146 -0
  33. package/dist/social/parsers.js.map +1 -0
  34. package/dist/social/types.d.ts +86 -0
  35. package/dist/social/types.d.ts.map +1 -0
  36. package/dist/social/types.js +5 -0
  37. package/dist/social/types.js.map +1 -0
  38. package/dist/social/whisper.d.ts +29 -0
  39. package/dist/social/whisper.d.ts.map +1 -0
  40. package/dist/social/whisper.js +88 -0
  41. package/dist/social/whisper.js.map +1 -0
  42. package/dist/tools/index.d.ts.map +1 -1
  43. package/dist/tools/index.js +7 -0
  44. package/dist/tools/index.js.map +1 -1
  45. package/dist/tools/instagram.d.ts +51 -0
  46. package/dist/tools/instagram.d.ts.map +1 -0
  47. package/dist/tools/instagram.js +462 -0
  48. package/dist/tools/instagram.js.map +1 -0
  49. package/dist/tools/interact.d.ts +4 -4
  50. package/dist/tools/interact.js +1 -1
  51. package/dist/tools/interact.js.map +1 -1
  52. package/dist/tools/manifest.d.ts +0 -1
  53. package/dist/tools/manifest.d.ts.map +1 -1
  54. package/dist/tools/manifest.js +17 -1
  55. package/dist/tools/manifest.js.map +1 -1
  56. package/dist/tools/reddit.d.ts +36 -0
  57. package/dist/tools/reddit.d.ts.map +1 -0
  58. package/dist/tools/reddit.js +190 -0
  59. package/dist/tools/reddit.js.map +1 -0
  60. package/dist/tools/run-skill.d.ts +24 -0
  61. package/dist/tools/run-skill.d.ts.map +1 -1
  62. package/dist/tools/run-skill.js +1015 -12
  63. package/dist/tools/run-skill.js.map +1 -1
  64. package/dist/tools/tiktok.d.ts +30 -0
  65. package/dist/tools/tiktok.d.ts.map +1 -0
  66. package/dist/tools/tiktok.js +246 -0
  67. package/dist/tools/tiktok.js.map +1 -0
  68. package/dist/tools/youtube.d.ts +33 -0
  69. package/dist/tools/youtube.d.ts.map +1 -0
  70. package/dist/tools/youtube.js +489 -0
  71. package/dist/tools/youtube.js.map +1 -0
  72. package/dist/utils/fetcher.d.ts.map +1 -1
  73. package/dist/utils/fetcher.js +1 -3
  74. package/dist/utils/fetcher.js.map +1 -1
  75. package/package.json +3 -9
@@ -6,7 +6,7 @@ export interface SkillPagination {
6
6
  next?: string;
7
7
  max_pages?: number;
8
8
  }
9
- export type RecipeTool = "extract" | "ai_extract" | "readability" | "scrape" | "monitor_websocket";
9
+ export type RecipeTool = "extract" | "ai_extract" | "readability" | "scrape" | "monitor_websocket" | "influencer_discovery";
10
10
  interface SkillConfigBase {
11
11
  name: string;
12
12
  description: string;
@@ -42,7 +42,16 @@ export interface WebSocketSkillConfig extends SkillConfigBase {
42
42
  max_messages?: number;
43
43
  filter_url?: string;
44
44
  }
45
- export type SkillConfig = ExtractSkillConfig | AiExtractSkillConfig | ReadabilitySkillConfig | ScrapeSkillConfig | WebSocketSkillConfig;
45
+ export interface InfluencerDiscoverySkillConfig extends SkillConfigBase {
46
+ tool: "influencer_discovery";
47
+ workflow: "niche_discovery" | "hashtag_scout" | "competitor_spy" | "content_scout";
48
+ niche: string;
49
+ platforms?: ("youtube" | "instagram" | "brave")[];
50
+ output_format?: "json" | "markdown" | "csv";
51
+ threshold?: number;
52
+ ig_max_calls?: number;
53
+ }
54
+ export type SkillConfig = ExtractSkillConfig | AiExtractSkillConfig | ReadabilitySkillConfig | ScrapeSkillConfig | WebSocketSkillConfig | InfluencerDiscoverySkillConfig;
46
55
  export declare function save(name: string, config: SkillConfig): Promise<void>;
47
56
  export declare function load(name: string): Promise<SkillConfig | null>;
48
57
  export declare function list(): Promise<SkillConfig[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/skills/manager.ts"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,mBAAmB,CAAC;AAEnG,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,mBAAmB,CAAC;KAC7B,CAAC;IACF,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC;IACjC,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,mBAAmB,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,sBAAsB,GACtB,iBAAiB,GACjB,oBAAoB,CAAC;AAUzB,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3E;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAUpE;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAkBnD;AAED;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAQtD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAM/E;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU3D"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/skills/manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/skills/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/skills/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * AI fallback for social media tools.
3
+ *
4
+ * When structured parsers fail (ytInitialData, .json API, rehydration data),
5
+ * this uses the existing LLM infrastructure to extract data from ARIA trees
6
+ * or raw HTML markdown.
7
+ *
8
+ * Structured extraction = primary (free, fast).
9
+ * AI fallback = backup (costs tokens, slower, but always works).
10
+ */
11
+ import type { Page } from "rebrowser-playwright";
12
+ export type SocialAction = "youtube:search" | "youtube:video" | "youtube:comments" | "youtube:transcript" | "youtube:channel" | "reddit:search" | "reddit:posts" | "reddit:comments" | "reddit:subreddit" | "instagram:profile";
13
+ export declare function socialAiFallback<T>(opts: {
14
+ action: SocialAction;
15
+ page?: Page;
16
+ url?: string;
17
+ maxTokens?: number;
18
+ }): Promise<{
19
+ data: T;
20
+ model: string;
21
+ } | null>;
22
+ //# sourceMappingURL=ai-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-fallback.d.ts","sourceRoot":"","sources":["../../src/social/ai-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAWjD,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,GACvD,oBAAoB,GAAG,iBAAiB,GACxC,eAAe,GAAG,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GACzE,mBAAmB,CAAC;AAmBxB,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA6B7C"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * AI fallback for social media tools.
3
+ *
4
+ * When structured parsers fail (ytInitialData, .json API, rehydration data),
5
+ * this uses the existing LLM infrastructure to extract data from ARIA trees
6
+ * or raw HTML markdown.
7
+ *
8
+ * Structured extraction = primary (free, fast).
9
+ * AI fallback = backup (costs tokens, slower, but always works).
10
+ */
11
+ import { hasLLMConfigured, createLLMClient } from "../llm/index.js";
12
+ import { extractWithLLM } from "../llm/extractor.js";
13
+ import { getEnhancedSnapshot } from "../snapshot/extractor.js";
14
+ import { smartFetch } from "../stealth/index.js";
15
+ import { htmlToMarkdown } from "../utils/markdown.js";
16
+ import { parseCompactNumber } from "./parsers.js";
17
+ // ── Schemas for LLM extraction ──
18
+ const SOCIAL_SCHEMAS = {
19
+ "youtube:search": `{ "videos": [{ "id": "video ID", "title": "string", "url": "full URL", "duration": "M:SS", "views": "view count text", "author": "channel name", "author_url": "channel URL", "published": "relative time" }] }`,
20
+ "youtube:video": `{ "id": "video ID", "title": "string", "url": "full URL", "views": "view count text", "likes": "like count text", "author": "channel name", "author_url": "channel URL", "published": "date text", "description": "first 2000 chars" }`,
21
+ "youtube:comments": `{ "comments": [{ "author": "string", "text": "comment text", "likes": "like count", "published": "relative time" }] }`,
22
+ "youtube:transcript": `{ "segments": [{ "start": "timestamp M:SS", "text": "string" }] }`,
23
+ "youtube:channel": `{ "name": "channel name", "url": "channel URL", "description": "about text", "subscribers": "subscriber count text", "verified": true/false }`,
24
+ "reddit:search": `{ "posts": [{ "title": "string", "url": "permalink", "author": "string", "score": "number or text", "comments_count": "number", "subreddit": "string", "published": "relative time" }] }`,
25
+ "reddit:posts": `{ "posts": [{ "title": "string", "url": "permalink", "author": "string", "score": "number or text", "comments_count": "number", "published": "relative time", "flair": "flair text or null" }] }`,
26
+ "reddit:comments": `{ "post": { "title": "string", "author": "string", "score": "number" }, "comments": [{ "author": "string", "text": "comment body", "score": "number", "published": "relative time" }] }`,
27
+ "reddit:subreddit": `{ "name": "subreddit name", "description": "description text", "subscribers": "subscriber count text", "created": "creation date" }`,
28
+ "instagram:profile": `{ "username": "string", "full_name": "string", "bio": "string", "followers": "follower count text", "following": "following count text", "posts_count": "post count text", "is_verified": true/false, "is_business": true/false, "business_email": "email or null" }`,
29
+ };
30
+ // ── Main fallback function ──
31
+ export async function socialAiFallback(opts) {
32
+ if (!hasLLMConfigured())
33
+ return null;
34
+ const schema = SOCIAL_SCHEMAS[opts.action];
35
+ if (!schema)
36
+ return null;
37
+ let content;
38
+ if (opts.page) {
39
+ // Playwright mode: ARIA tree from already-open page
40
+ const snapshot = await getEnhancedSnapshot(opts.page, { compact: true });
41
+ content = snapshot.tree;
42
+ }
43
+ else if (opts.url) {
44
+ // HTTP mode: fetch + convert to markdown
45
+ const result = await smartFetch(opts.url, { maxLevel: 2 });
46
+ content = htmlToMarkdown(result.html);
47
+ }
48
+ else {
49
+ return null;
50
+ }
51
+ if (!content || content.length < 50)
52
+ return null;
53
+ const client = await createLLMClient();
54
+ const extraction = await extractWithLLM(client, content, schema, opts.maxTokens ?? 4000);
55
+ const raw = extraction.data;
56
+ const normalized = normalizeResult(opts.action, raw);
57
+ return { data: normalized, model: extraction.model };
58
+ }
59
+ // ── Normalizers ──
60
+ function normalizeResult(action, raw) {
61
+ const platform = action.split(":")[0];
62
+ const type = action.split(":")[1];
63
+ if (type === "search" || type === "posts") {
64
+ const items = (raw.videos || raw.posts || []);
65
+ const normalized = items.map((item) => platform === "reddit" ? normalizePost(item) : normalizeVideo(item));
66
+ return platform === "reddit"
67
+ ? { platform: "reddit", results: normalized }
68
+ : { platform, results: normalized };
69
+ }
70
+ if (type === "video")
71
+ return normalizeVideo(raw);
72
+ if (type === "profile")
73
+ return normalizeInstagramProfile(raw);
74
+ if (type === "user" || type === "channel" || type === "subreddit")
75
+ return normalizeProfile(raw);
76
+ if (type === "comments") {
77
+ const comments = (raw.comments || []).map(normalizeComment);
78
+ return { ...raw, comments };
79
+ }
80
+ return raw;
81
+ }
82
+ function normalizeVideo(raw) {
83
+ return {
84
+ id: raw.id || "",
85
+ title: raw.title || "",
86
+ url: raw.url || "",
87
+ thumbnail: raw.thumbnail,
88
+ duration: raw.duration,
89
+ views: typeof raw.views === "number" ? raw.views : parseNum(raw.views),
90
+ likes: typeof raw.likes === "number" ? raw.likes : parseNum(raw.likes),
91
+ author: raw.author || "",
92
+ author_url: raw.author_url,
93
+ published: raw.published,
94
+ description: raw.description?.substring(0, 2000),
95
+ };
96
+ }
97
+ function normalizePost(raw) {
98
+ return {
99
+ id: raw.id || "",
100
+ title: raw.title || "",
101
+ url: raw.url || "",
102
+ author: raw.author || "",
103
+ score: typeof raw.score === "number" ? raw.score : parseNum(raw.score),
104
+ comments_count: typeof raw.comments_count === "number" ? raw.comments_count : parseNum(raw.comments_count),
105
+ published: raw.published,
106
+ subreddit: raw.subreddit,
107
+ text: raw.text,
108
+ flair: raw.flair,
109
+ };
110
+ }
111
+ function normalizeComment(raw) {
112
+ return {
113
+ id: raw.id || `comment-${Math.random().toString(36).slice(2, 8)}`,
114
+ author: raw.author || "",
115
+ text: raw.text || "",
116
+ score: typeof raw.score === "number" ? raw.score : (typeof raw.likes === "number" ? raw.likes : parseNum(raw.score || raw.likes)),
117
+ published: raw.published,
118
+ };
119
+ }
120
+ function normalizeProfile(raw) {
121
+ const subs = raw.subscribers || raw.followers;
122
+ return {
123
+ name: raw.name || raw.username || "",
124
+ url: raw.url || "",
125
+ description: raw.description?.substring(0, 1000),
126
+ subscribers: typeof subs === "number" ? subs : parseNum(subs),
127
+ avatar: raw.avatar,
128
+ verified: raw.verified ?? false,
129
+ video_count: typeof raw.video_count === "number" ? raw.video_count : parseNum(raw.video_count),
130
+ created: raw.created,
131
+ };
132
+ }
133
+ function normalizeInstagramProfile(raw) {
134
+ return {
135
+ name: raw.full_name || raw.username || "",
136
+ username: raw.username || "",
137
+ url: raw.url || (raw.username ? `https://www.instagram.com/${raw.username}/` : ""),
138
+ description: raw.bio?.substring(0, 1000),
139
+ verified: raw.is_verified ?? false,
140
+ followers: typeof raw.followers === "number" ? raw.followers : (parseNum(raw.followers) ?? 0),
141
+ following: typeof raw.following === "number" ? raw.following : (parseNum(raw.following) ?? 0),
142
+ posts_count: typeof raw.posts_count === "number" ? raw.posts_count : (parseNum(raw.posts_count) ?? 0),
143
+ is_business: raw.is_business ?? false,
144
+ business_email: raw.business_email || undefined,
145
+ engagement_rate: 0,
146
+ recent_posts: [],
147
+ };
148
+ }
149
+ /** Parse a number string, returning undefined for NaN. */
150
+ function parseNum(val) {
151
+ if (val == null)
152
+ return undefined;
153
+ const n = parseCompactNumber(String(val));
154
+ return isNaN(n) ? undefined : n;
155
+ }
156
+ //# sourceMappingURL=ai-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-fallback.js","sourceRoot":"","sources":["../../src/social/ai-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAWlD,mCAAmC;AAEnC,MAAM,cAAc,GAAiC;IACnD,gBAAgB,EAAE,iNAAiN;IACnO,eAAe,EAAE,wOAAwO;IACzP,kBAAkB,EAAE,uHAAuH;IAC3I,oBAAoB,EAAE,mEAAmE;IACzF,iBAAiB,EAAE,+IAA+I;IAClK,eAAe,EAAE,0LAA0L;IAC3M,cAAc,EAAE,kMAAkM;IAClN,iBAAiB,EAAE,yLAAyL;IAC5M,kBAAkB,EAAE,qIAAqI;IACzJ,mBAAmB,EAAE,sQAAsQ;CAC5R,CAAC;AAEF,+BAA+B;AAE/B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAI,IAKzC;IACC,IAAI,CAAC,gBAAgB,EAAE;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,OAAe,CAAC;IAEpB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,oDAAoD;QACpD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC1B,CAAC;SAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACpB,yCAAyC;QACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;IAEzF,MAAM,GAAG,GAAG,UAAU,CAAC,IAA+B,CAAC;IACvD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAErD,OAAO,EAAE,IAAI,EAAE,UAAe,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,oBAAoB;AAEpB,SAAS,eAAe,CAAC,MAAoB,EAAE,GAA4B;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAElC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAU,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CACnE,CAAC;QACF,OAAO,QAAQ,KAAK,QAAQ;YAC1B,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;YAC7C,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC9D,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChG,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvE,OAAO,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ;IAC9B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;QACtB,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACtE,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACtE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAQ;IAC7B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;QACtB,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;QACxB,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACtE,cAAc,EAAE,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1G,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ;IAChC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACjE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;QACxB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;QACpB,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACjI,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,CAAC;IAC9C,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE;QACpC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QAChD,WAAW,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7D,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK;QAC/B,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QAC9F,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAQ;IACzC,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE;QACzC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;QAC5B,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QACxC,QAAQ,EAAE,GAAG,CAAC,WAAW,IAAI,KAAK;QAClC,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7F,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7F,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrG,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,KAAK;QACrC,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,SAAS;QAC/C,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAS,QAAQ,CAAC,GAAY;IAC5B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared parsers for social media tools.
3
+ *
4
+ * parseCompactNumber: "1.2M" -> 1200000
5
+ * parseRelativeTime: "3 hours ago" -> ISO date string
6
+ * sanitizeText: strip HTML tags, collapse whitespace
7
+ */
8
+ /**
9
+ * Parse compact number strings like "1.2M", "842K", "3.5B", "1,234".
10
+ * Returns NaN for unparseable input.
11
+ */
12
+ export declare function parseCompactNumber(str: string): number;
13
+ /**
14
+ * Parse relative time strings like "3 hours ago", "1 day ago", "2 months ago".
15
+ * Returns ISO date string, or null if unparseable.
16
+ */
17
+ export declare function parseRelativeTime(str: string): string | null;
18
+ /**
19
+ * Strip HTML tags and collapse whitespace.
20
+ */
21
+ export declare function sanitizeText(html: string): string;
22
+ /**
23
+ * Extract JSON from a script tag pattern like `var ytInitialData = {...};`
24
+ * Also handles `<script id="varName" type="application/json">{...}</script>`.
25
+ * Returns parsed object or null.
26
+ */
27
+ export declare function extractScriptJson(html: string, varName: string): unknown | null;
28
+ //# sourceMappingURL=parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/social/parsers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBtD;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYjD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAwE/E"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Shared parsers for social media tools.
3
+ *
4
+ * parseCompactNumber: "1.2M" -> 1200000
5
+ * parseRelativeTime: "3 hours ago" -> ISO date string
6
+ * sanitizeText: strip HTML tags, collapse whitespace
7
+ */
8
+ const MULTIPLIERS = {
9
+ K: 1_000,
10
+ M: 1_000_000,
11
+ B: 1_000_000_000,
12
+ T: 1_000_000_000_000,
13
+ };
14
+ /**
15
+ * Parse compact number strings like "1.2M", "842K", "3.5B", "1,234".
16
+ * Returns NaN for unparseable input.
17
+ */
18
+ export function parseCompactNumber(str) {
19
+ if (!str)
20
+ return NaN;
21
+ // Clean: remove commas, spaces, plus signs
22
+ const cleaned = str.replace(/[,\s+]/g, "").trim();
23
+ // Try suffix match: "1.2M", "842K"
24
+ const match = cleaned.match(/^([\d.]+)\s*([KMBT])/i);
25
+ if (match) {
26
+ const num = parseFloat(match[1]);
27
+ const suffix = match[2].toUpperCase();
28
+ return Math.round(num * (MULTIPLIERS[suffix] || 1));
29
+ }
30
+ // Plain number
31
+ return parseFloat(cleaned) || NaN;
32
+ }
33
+ const TIME_UNITS = {
34
+ second: 1_000,
35
+ minute: 60_000,
36
+ hour: 3_600_000,
37
+ day: 86_400_000,
38
+ week: 604_800_000,
39
+ month: 2_592_000_000, // ~30 days
40
+ year: 31_536_000_000, // ~365 days
41
+ };
42
+ /**
43
+ * Parse relative time strings like "3 hours ago", "1 day ago", "2 months ago".
44
+ * Returns ISO date string, or null if unparseable.
45
+ */
46
+ export function parseRelativeTime(str) {
47
+ if (!str)
48
+ return null;
49
+ const match = str.match(/(\d+)\s+(second|minute|hour|day|week|month|year)s?\s+ago/i);
50
+ if (!match)
51
+ return null;
52
+ const amount = parseInt(match[1], 10);
53
+ const unit = match[2].toLowerCase();
54
+ const ms = TIME_UNITS[unit];
55
+ if (!ms)
56
+ return null;
57
+ return new Date(Date.now() - amount * ms).toISOString();
58
+ }
59
+ /**
60
+ * Strip HTML tags and collapse whitespace.
61
+ */
62
+ export function sanitizeText(html) {
63
+ if (!html)
64
+ return "";
65
+ return html
66
+ .replace(/<[^>]*>/g, "")
67
+ .replace(/&amp;/g, "&")
68
+ .replace(/&lt;/g, "<")
69
+ .replace(/&gt;/g, ">")
70
+ .replace(/&quot;/g, '"')
71
+ .replace(/&#39;/g, "'")
72
+ .replace(/&nbsp;/g, " ")
73
+ .replace(/\s+/g, " ")
74
+ .trim();
75
+ }
76
+ /**
77
+ * Extract JSON from a script tag pattern like `var ytInitialData = {...};`
78
+ * Also handles `<script id="varName" type="application/json">{...}</script>`.
79
+ * Returns parsed object or null.
80
+ */
81
+ export function extractScriptJson(html, varName) {
82
+ // Strategy 1: <script id="varName" type="application/json">{...}</script>
83
+ const scriptTagPattern = new RegExp(`<script[^>]+id=["']${varName}["'][^>]*>([\\s\\S]*?)</script>`, "i");
84
+ const scriptTagMatch = scriptTagPattern.exec(html);
85
+ if (scriptTagMatch) {
86
+ try {
87
+ return JSON.parse(scriptTagMatch[1]);
88
+ }
89
+ catch {
90
+ // Fall through to other strategies
91
+ }
92
+ }
93
+ // Strategy 2: var varName = {...}; or window['varName'] = {...};
94
+ const patterns = [
95
+ new RegExp(`var\\s+${varName}\\s*=\\s*`, "i"),
96
+ new RegExp(`window\\[['"]${varName}['"]\\]\\s*=\\s*`, "i"),
97
+ ];
98
+ for (const pattern of patterns) {
99
+ const match = pattern.exec(html);
100
+ if (!match)
101
+ continue;
102
+ const start = match.index + match[0].length;
103
+ // Find matching brace
104
+ let depth = 0;
105
+ let inString = false;
106
+ let escape = false;
107
+ let stringChar = "";
108
+ for (let i = start; i < html.length; i++) {
109
+ const ch = html[i];
110
+ if (escape) {
111
+ escape = false;
112
+ continue;
113
+ }
114
+ if (ch === "\\") {
115
+ escape = true;
116
+ continue;
117
+ }
118
+ if (inString) {
119
+ if (ch === stringChar)
120
+ inString = false;
121
+ continue;
122
+ }
123
+ if (ch === '"' || ch === "'") {
124
+ inString = true;
125
+ stringChar = ch;
126
+ continue;
127
+ }
128
+ if (ch === "{" || ch === "[")
129
+ depth++;
130
+ if (ch === "}" || ch === "]") {
131
+ depth--;
132
+ if (depth === 0) {
133
+ const jsonStr = html.substring(start, i + 1);
134
+ try {
135
+ return JSON.parse(jsonStr);
136
+ }
137
+ catch {
138
+ return null;
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ return null;
145
+ }
146
+ //# sourceMappingURL=parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/social/parsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Shared types for social media tools (YouTube, Reddit, Instagram).
3
+ */
4
+ export interface SocialVideo {
5
+ id: string;
6
+ title: string;
7
+ url: string;
8
+ thumbnail?: string;
9
+ duration?: string;
10
+ views?: number;
11
+ likes?: number;
12
+ author: string;
13
+ author_url?: string;
14
+ published?: string;
15
+ description?: string;
16
+ }
17
+ export interface SocialPost {
18
+ id: string;
19
+ title: string;
20
+ url: string;
21
+ author: string;
22
+ score?: number;
23
+ comments_count?: number;
24
+ published?: string;
25
+ subreddit?: string;
26
+ text?: string;
27
+ thumbnail?: string;
28
+ is_video?: boolean;
29
+ flair?: string;
30
+ }
31
+ export interface SocialComment {
32
+ id: string;
33
+ author: string;
34
+ text: string;
35
+ score?: number;
36
+ published?: string;
37
+ replies_count?: number;
38
+ }
39
+ export interface SocialProfile {
40
+ name: string;
41
+ url: string;
42
+ description?: string;
43
+ subscribers?: number;
44
+ avatar?: string;
45
+ verified?: boolean;
46
+ video_count?: number;
47
+ created?: string;
48
+ }
49
+ export interface SocialSearchResult<T> {
50
+ query?: string;
51
+ platform: "youtube" | "reddit" | "instagram";
52
+ results: T[];
53
+ total?: number;
54
+ }
55
+ export interface InstagramProfile extends SocialProfile {
56
+ username: string;
57
+ followers: number;
58
+ following: number;
59
+ posts_count: number;
60
+ is_business: boolean;
61
+ business_email?: string;
62
+ engagement_rate: number;
63
+ recent_posts: InstagramPost[];
64
+ }
65
+ export interface InstagramPost {
66
+ id: string;
67
+ url: string;
68
+ likes: number;
69
+ comments: number;
70
+ caption?: string;
71
+ timestamp: string;
72
+ is_video: boolean;
73
+ }
74
+ export interface InstagramDiscoverResult {
75
+ query: string;
76
+ location?: string;
77
+ filters: {
78
+ min_followers: number;
79
+ max_followers: number;
80
+ min_engagement: number;
81
+ };
82
+ profiles: InstagramProfile[];
83
+ total_scanned: number;
84
+ total_matched: number;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/social/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for social media tools (YouTube, Reddit, Instagram).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/social/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * OpenAI Whisper integration for audio transcription.
3
+ * Used as fallback when YouTube captions are unavailable.
4
+ *
5
+ * Requires LLM_API_KEY with LLM_PROVIDER=openai (or any OpenAI-compatible key).
6
+ */
7
+ export interface WhisperResult {
8
+ text: string;
9
+ segments?: Array<{
10
+ start: number;
11
+ end: number;
12
+ text: string;
13
+ }>;
14
+ language?: string;
15
+ duration?: number;
16
+ }
17
+ /**
18
+ * Check if Whisper transcription is available (OpenAI API key configured).
19
+ */
20
+ export declare function hasWhisperConfigured(): boolean;
21
+ /**
22
+ * Transcribe audio data using OpenAI Whisper API.
23
+ * Returns timestamped segments.
24
+ */
25
+ export declare function transcribeAudio(audioData: Buffer | Uint8Array, options?: {
26
+ language?: string;
27
+ filename?: string;
28
+ }): Promise<WhisperResult>;
29
+ //# sourceMappingURL=whisper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.d.ts","sourceRoot":"","sources":["../../src/social/whisper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AAgBD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,aAAa,CAAC,CA6ExB"}