ai-vision-mcp 0.0.5 → 0.0.6-dev.2

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 (108) hide show
  1. package/README.md +102 -132
  2. package/dist/cli/commands/analyze-image.d.ts +3 -0
  3. package/dist/cli/commands/analyze-image.d.ts.map +1 -0
  4. package/dist/cli/commands/analyze-image.js +30 -0
  5. package/dist/cli/commands/analyze-image.js.map +1 -0
  6. package/dist/cli/commands/analyze-video.d.ts +3 -0
  7. package/dist/cli/commands/analyze-video.d.ts.map +1 -0
  8. package/dist/cli/commands/analyze-video.js +30 -0
  9. package/dist/cli/commands/analyze-video.js.map +1 -0
  10. package/dist/cli/commands/compare-images.d.ts +3 -0
  11. package/dist/cli/commands/compare-images.d.ts.map +1 -0
  12. package/dist/cli/commands/compare-images.js +30 -0
  13. package/dist/cli/commands/compare-images.js.map +1 -0
  14. package/dist/cli/commands/detect-objects.d.ts +3 -0
  15. package/dist/cli/commands/detect-objects.d.ts.map +1 -0
  16. package/dist/cli/commands/detect-objects.js +31 -0
  17. package/dist/cli/commands/detect-objects.js.map +1 -0
  18. package/dist/cli/index.d.ts +3 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +63 -0
  21. package/dist/cli/index.js.map +1 -0
  22. package/dist/cli/utils.d.ts +17 -0
  23. package/dist/cli/utils.d.ts.map +1 -0
  24. package/dist/cli/utils.js +85 -0
  25. package/dist/cli/utils.js.map +1 -0
  26. package/dist/file-upload/gemini/GeminiFilesAPI.js +1 -1
  27. package/dist/file-upload/gemini/GeminiFilesAPI.js.map +1 -1
  28. package/dist/file-upload/vertexai/VertexAIStorageStrategy.js +1 -1
  29. package/dist/file-upload/vertexai/VertexAIStorageStrategy.js.map +1 -1
  30. package/dist/index.d.ts +1 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +17 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/providers/base/VisionProvider.d.ts +9 -0
  35. package/dist/providers/base/VisionProvider.d.ts.map +1 -1
  36. package/dist/providers/base/VisionProvider.js +67 -12
  37. package/dist/providers/base/VisionProvider.js.map +1 -1
  38. package/dist/providers/gemini/GeminiProvider.d.ts +2 -0
  39. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
  40. package/dist/providers/gemini/GeminiProvider.js +88 -9
  41. package/dist/providers/gemini/GeminiProvider.js.map +1 -1
  42. package/dist/providers/vertexai/VertexAIProvider.d.ts +5 -0
  43. package/dist/providers/vertexai/VertexAIProvider.d.ts.map +1 -1
  44. package/dist/providers/vertexai/VertexAIProvider.js +177 -17
  45. package/dist/providers/vertexai/VertexAIProvider.js.map +1 -1
  46. package/dist/server.d.ts +1 -1
  47. package/dist/server.d.ts.map +1 -1
  48. package/dist/server.js +159 -52
  49. package/dist/server.js.map +1 -1
  50. package/dist/services/ConfigService.d.ts +3 -0
  51. package/dist/services/ConfigService.d.ts.map +1 -1
  52. package/dist/services/ConfigService.js +45 -0
  53. package/dist/services/ConfigService.js.map +1 -1
  54. package/dist/services/FileService.d.ts.map +1 -1
  55. package/dist/services/FileService.js +10 -10
  56. package/dist/services/FileService.js.map +1 -1
  57. package/dist/services/LoggerService.d.ts +19 -0
  58. package/dist/services/LoggerService.d.ts.map +1 -0
  59. package/dist/services/LoggerService.js +74 -0
  60. package/dist/services/LoggerService.js.map +1 -0
  61. package/dist/tools/analyze_image.js +3 -3
  62. package/dist/tools/analyze_image.js.map +1 -1
  63. package/dist/tools/analyze_video.d.ts +11 -1
  64. package/dist/tools/analyze_video.d.ts.map +1 -1
  65. package/dist/tools/analyze_video.js +37 -1
  66. package/dist/tools/analyze_video.js.map +1 -1
  67. package/dist/tools/compare_images.js +3 -3
  68. package/dist/tools/compare_images.js.map +1 -1
  69. package/dist/tools/detect_objects_in_image.d.ts.map +1 -1
  70. package/dist/tools/detect_objects_in_image.js +89 -67
  71. package/dist/tools/detect_objects_in_image.js.map +1 -1
  72. package/dist/tools/index.d.ts +1 -1
  73. package/dist/tools/index.d.ts.map +1 -1
  74. package/dist/tools/index.js +1 -1
  75. package/dist/tools/index.js.map +1 -1
  76. package/dist/types/Analysis.d.ts +6 -0
  77. package/dist/types/Analysis.d.ts.map +1 -1
  78. package/dist/types/Config.d.ts +3 -2
  79. package/dist/types/Config.d.ts.map +1 -1
  80. package/dist/utils/credentialsParser.d.ts +7 -3
  81. package/dist/utils/credentialsParser.d.ts.map +1 -1
  82. package/dist/utils/credentialsParser.js +63 -19
  83. package/dist/utils/credentialsParser.js.map +1 -1
  84. package/dist/utils/duration.d.ts +4 -0
  85. package/dist/utils/duration.d.ts.map +1 -0
  86. package/dist/utils/duration.js +65 -0
  87. package/dist/utils/duration.js.map +1 -0
  88. package/dist/utils/imageAnnotator.d.ts +4 -2
  89. package/dist/utils/imageAnnotator.d.ts.map +1 -1
  90. package/dist/utils/imageAnnotator.js +80 -89
  91. package/dist/utils/imageAnnotator.js.map +1 -1
  92. package/dist/utils/index.d.ts +2 -0
  93. package/dist/utils/index.d.ts.map +1 -1
  94. package/dist/utils/index.js +2 -0
  95. package/dist/utils/index.js.map +1 -1
  96. package/dist/utils/validation.d.ts +124 -9
  97. package/dist/utils/validation.d.ts.map +1 -1
  98. package/dist/utils/validation.js +8 -1
  99. package/dist/utils/validation.js.map +1 -1
  100. package/dist/utils/videoTokens.d.ts +23 -0
  101. package/dist/utils/videoTokens.d.ts.map +1 -0
  102. package/dist/utils/videoTokens.js +94 -0
  103. package/dist/utils/videoTokens.js.map +1 -0
  104. package/dist/utils/youtube.d.ts +5 -0
  105. package/dist/utils/youtube.d.ts.map +1 -0
  106. package/dist/utils/youtube.js +62 -0
  107. package/dist/utils/youtube.js.map +1 -0
  108. package/package.json +22 -11
@@ -0,0 +1,65 @@
1
+ export function formatDuration(input) {
2
+ if (input === undefined || input === null || input === '') {
3
+ return undefined;
4
+ }
5
+ if (typeof input === 'string' &&
6
+ /^\d+(\.\d+)?s$/.test(input) &&
7
+ !input.includes('m') &&
8
+ !input.includes('h')) {
9
+ return input;
10
+ }
11
+ if (typeof input === 'number') {
12
+ return input > 0 ? `${input}s` : undefined;
13
+ }
14
+ const trimmed = input.trim().toLowerCase();
15
+ const durationMatch = trimmed.match(/^(?:(\d+(?:\.\d+)?)h)?(?:(\d+(?:\.\d+)?)m)?(?:(\d+(?:\.\d+)?)s?)?$/);
16
+ if (durationMatch) {
17
+ const hours = parseFloat(durationMatch[1] || '0');
18
+ const minutes = parseFloat(durationMatch[2] || '0');
19
+ const seconds = parseFloat(durationMatch[3] || '0');
20
+ const total = hours * 3600 + minutes * 60 + seconds;
21
+ return total > 0 ? `${total}s` : undefined;
22
+ }
23
+ const timeMatch = trimmed.match(/^(?:(\d+):)?(\d+):(\d+(?:\.\d+)?)$/);
24
+ if (timeMatch) {
25
+ const hours = parseInt(timeMatch[1] || '0', 10);
26
+ const minutes = parseInt(timeMatch[2], 10);
27
+ const seconds = parseFloat(timeMatch[3]);
28
+ const total = hours * 3600 + minutes * 60 + seconds;
29
+ return total > 0 ? `${total}s` : undefined;
30
+ }
31
+ const numericValue = parseFloat(trimmed);
32
+ if (!isNaN(numericValue) && numericValue > 0) {
33
+ return `${numericValue}s`;
34
+ }
35
+ return undefined;
36
+ }
37
+ export function validateClipOrder(startOffset, endOffset) {
38
+ if (startOffset === undefined || endOffset === undefined) {
39
+ return true;
40
+ }
41
+ const start = parseDurationToSeconds(startOffset);
42
+ const end = parseDurationToSeconds(endOffset);
43
+ if (start === undefined || end === undefined) {
44
+ return true;
45
+ }
46
+ return start < end;
47
+ }
48
+ export function parseDurationToSeconds(input) {
49
+ if (input === undefined || input === null) {
50
+ return undefined;
51
+ }
52
+ if (typeof input === 'number') {
53
+ return input > 0 ? input : undefined;
54
+ }
55
+ const formatted = formatDuration(input);
56
+ if (!formatted) {
57
+ return undefined;
58
+ }
59
+ const match = formatted.match(/^(\d+(?:\.\d+)?)s$/);
60
+ if (match) {
61
+ return parseFloat(match[1]);
62
+ }
63
+ return undefined;
64
+ }
65
+ //# sourceMappingURL=duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,10 @@ export declare class ImageAnnotator {
9
9
  private options;
10
10
  constructor(options?: AnnotationOptions);
11
11
  drawAnnotations(imageBuffer: Buffer, detections: DetectedObject[], imageWidth: number, imageHeight: number): Promise<Buffer>;
12
- private createRectangleOverlay;
13
- private createTextOverlay;
12
+ private parseColor;
13
+ private drawRectOutline;
14
+ private drawLabel;
15
+ private loadFontBuffer;
14
16
  saveToTempFile(buffer: Buffer, extension?: string): Promise<string>;
15
17
  saveToTempFileOrSkip(buffer: Buffer, extension?: string): Promise<{
16
18
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"imageAnnotator.d.ts","sourceRoot":"","sources":["../../src/utils/imageAnnotator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CAEtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,OAAO,GAAE,iBAAsB;IAcrC,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,cAAc,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;YAwEJ,sBAAsB;YA2CtB,iBAAiB;IAuDzB,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,MAAM,CAAC;IAaZ,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC;IAmBnE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK1E"}
1
+ {"version":3,"file":"imageAnnotator.d.ts","sourceRoot":"","sources":["../../src/utils/imageAnnotator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CAEtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,OAAO,GAAE,iBAAsB;IAarC,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,cAAc,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAqDlB,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,eAAe;YAqBT,SAAS;YAqDT,cAAc;IAiCtB,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,MAAM,CAAC;IAaZ,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC;IAqBnE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK1E"}
@@ -1,4 +1,4 @@
1
- import sharp from 'sharp';
1
+ import { Image, TextLayout } from 'imagescript';
2
2
  import fs from 'fs/promises';
3
3
  import path from 'path';
4
4
  import os from 'os';
@@ -14,109 +14,100 @@ export class ImageAnnotator {
14
14
  };
15
15
  }
16
16
  async drawAnnotations(imageBuffer, detections, imageWidth, imageHeight) {
17
- let sharpImage = sharp(imageBuffer);
18
- const overlays = [];
17
+ const image = await Image.decode(imageBuffer);
18
+ void imageWidth;
19
+ void imageHeight;
19
20
  for (let idx = 0; idx < detections.length; idx++) {
20
21
  const detection = detections[idx];
21
22
  if (!detection.normalized_box_2d ||
22
23
  detection.normalized_box_2d.length !== 4) {
23
- console.warn(`[ImageAnnotator] Skipping detection without valid normalized_box_2d: ${detection.object}`);
24
+ console.error(`[ImageAnnotator] Skipping detection without valid normalized_box_2d: ${detection.object}`);
24
25
  continue;
25
26
  }
26
27
  const [normY1, normX1, normY2, normX2] = detection.normalized_box_2d;
27
- const x1 = Math.round((normX1 / 1000) * imageWidth);
28
- const y1 = Math.round((normY1 / 1000) * imageHeight);
29
- const x2 = Math.round((normX2 / 1000) * imageWidth);
30
- const y2 = Math.round((normY2 / 1000) * imageHeight);
31
- const rectOverlay = await this.createRectangleOverlay(imageWidth, imageHeight, x1, y1, x2, y2);
32
- overlays.push({
33
- input: rectOverlay,
34
- left: 0,
35
- top: 0,
36
- });
37
- const text = `${detection.object} - ${detection.label}`;
38
- const textOverlay = await this.createTextOverlay(text);
39
- const textX = x1;
40
- const textY = Math.max(y1 - this.options.labelHeight - 4, 0);
41
- overlays.push({
42
- input: textOverlay,
43
- left: textX,
44
- top: textY,
45
- });
28
+ const x1 = Math.round((normX1 / 1000) * image.width);
29
+ const y1 = Math.round((normY1 / 1000) * image.height);
30
+ const x2 = Math.round((normX2 / 1000) * image.width);
31
+ const y2 = Math.round((normY2 / 1000) * image.height);
32
+ const left = Math.max(0, Math.min(x1, image.width - 1));
33
+ const top = Math.max(0, Math.min(y1, image.height - 1));
34
+ const right = Math.max(0, Math.min(x2, image.width));
35
+ const bottom = Math.max(0, Math.min(y2, image.height));
36
+ this.drawRectOutline(image, left, top, Math.max(1, right - left), Math.max(1, bottom - top), this.options.lineWidth, this.parseColor(this.options.lineColor));
37
+ const labelText = `${detection.object} - ${detection.label}`;
38
+ await this.drawLabel(image, labelText, left, top);
46
39
  }
47
- if (overlays.length > 0) {
48
- sharpImage = sharpImage.composite(overlays);
40
+ return Buffer.from(await image.encode());
41
+ }
42
+ parseColor(color) {
43
+ switch (color.toLowerCase()) {
44
+ case 'red':
45
+ return 0xff0000ff;
46
+ case 'green':
47
+ return 0x00ff00ff;
48
+ case 'blue':
49
+ return 0x0000ffff;
50
+ case 'yellow':
51
+ return 0xffff00ff;
52
+ case 'black':
53
+ return 0x000000ff;
54
+ case 'white':
55
+ return 0xffffffff;
56
+ default:
57
+ return 0xff0000ff;
49
58
  }
50
- return sharpImage.toBuffer();
51
59
  }
52
- async createRectangleOverlay(imageWidth, imageHeight, x1, y1, x2, y3) {
53
- const rectWidth = x2 - x1;
54
- const rectHeight = y3 - y1;
55
- const rectangleBuffer = await sharp({
56
- create: {
57
- width: imageWidth,
58
- height: imageHeight,
59
- channels: 4,
60
- background: { r: 0, g: 0, b: 0, alpha: 0 },
61
- },
62
- })
63
- .composite([
64
- {
65
- input: Buffer.from(`<svg width="${imageWidth}" height="${imageHeight}">
66
- <rect x="${x1}" y="${y1}" width="${rectWidth}" height="${rectHeight}"
67
- fill="none" stroke="${this.options.lineColor}" stroke-width="${this.options.lineWidth}"/>
68
- </svg>`),
69
- left: 0,
70
- top: 0,
71
- },
72
- ])
73
- .png()
74
- .toBuffer();
75
- return rectangleBuffer;
60
+ drawRectOutline(image, x, y, w, h, thickness, color) {
61
+ const t = Math.max(1, thickness);
62
+ image.drawBox(x, y, w, t, color);
63
+ image.drawBox(x, y, t, h, color);
64
+ image.drawBox(Math.max(0, x + w - t), y, t, h, color);
65
+ image.drawBox(x, Math.max(0, y + h - t), w, t, color);
66
+ }
67
+ async drawLabel(image, text, x1, y1) {
68
+ const fontBuffer = await this.loadFontBuffer();
69
+ if (!fontBuffer) {
70
+ console.error('[ImageAnnotator] No font available for label rendering; drawing boxes only. Set ANNOTATION_FONT_PATH or install bundled font.');
71
+ return;
72
+ }
73
+ const scale = 16;
74
+ const paddingX = 6;
75
+ const paddingY = 4;
76
+ const layout = new TextLayout({
77
+ maxWidth: Math.min(600, image.width - x1),
78
+ maxHeight: this.options.labelHeight,
79
+ wrapStyle: 'word',
80
+ verticalAlign: 'left',
81
+ horizontalAlign: 'top',
82
+ wrapHardBreaks: true,
83
+ });
84
+ const textImage = await Image.renderText(fontBuffer, scale, text, 0xffffffff, layout);
85
+ const bgColor = this.parseColor(this.options.labelColor);
86
+ const labelW = Math.min(image.width - x1, textImage.width + paddingX * 2);
87
+ const labelH = Math.min(image.height, Math.max(this.options.labelHeight, textImage.height + paddingY * 2));
88
+ const labelX = x1;
89
+ const labelY = Math.max(y1 - labelH - 4, 0);
90
+ image.drawBox(labelX, labelY, labelW, labelH, bgColor);
91
+ image.composite(textImage, labelX + paddingX, labelY + paddingY);
76
92
  }
77
- async createTextOverlay(text) {
78
- const fontPaths = [
79
- 'C:/Windows/Fonts/arial.ttf',
80
- '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf',
81
- '/System/Library/Fonts/Arial.ttf',
82
- ];
83
- let fontfile = undefined;
84
- for (const fontPath of fontPaths) {
93
+ async loadFontBuffer() {
94
+ const candidates = [];
95
+ if (process.env.ANNOTATION_FONT_PATH) {
96
+ candidates.push(process.env.ANNOTATION_FONT_PATH);
97
+ }
98
+ candidates.push(path.join(process.cwd(), 'assets', 'fonts', 'Roboto-Regular.ttf'));
99
+ candidates.push('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf');
100
+ candidates.push('/System/Library/Fonts/Arial.ttf');
101
+ candidates.push('C:/Windows/Fonts/arial.ttf');
102
+ for (const fontPath of candidates) {
85
103
  try {
86
- await fs.access(fontPath);
87
- fontfile = fontPath;
88
- break;
104
+ const buf = await fs.readFile(fontPath);
105
+ return buf;
89
106
  }
90
107
  catch {
91
108
  }
92
109
  }
93
- const estimatedWidth = Math.max(text.length * 8 + 8, 50);
94
- const textBuffer = await sharp({
95
- create: {
96
- width: estimatedWidth,
97
- height: this.options.labelHeight,
98
- channels: 4,
99
- background: { r: 255, g: 0, b: 0, alpha: 1 },
100
- },
101
- })
102
- .composite([
103
- {
104
- input: {
105
- text: {
106
- text: text,
107
- font: fontfile ? 'Arial' : 'sans-serif',
108
- fontfile: fontfile,
109
- rgba: true,
110
- align: 'left',
111
- },
112
- },
113
- left: 2,
114
- top: 2,
115
- },
116
- ])
117
- .png()
118
- .toBuffer();
119
- return textBuffer;
110
+ return null;
120
111
  }
121
112
  async saveToTempFile(buffer, extension = 'png') {
122
113
  const tempDir = os.tmpdir();
@@ -137,7 +128,7 @@ export class ImageAnnotator {
137
128
  }
138
129
  catch (error) {
139
130
  const errorMessage = error instanceof Error ? error.message : String(error);
140
- console.warn(`[ImageAnnotator] Skipped temp file creation due to permission error: ${errorMessage}. Detection results will be returned without file output.`);
131
+ console.error(`[ImageAnnotator] Skipped temp file creation due to permission error: ${errorMessage}. Detection results will be returned without file output.`);
141
132
  return { method: 'skipped' };
142
133
  }
143
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"imageAnnotator.js","sourceRoot":"","sources":["../../src/utils/imageAnnotator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imageAnnotator.js","sourceRoot":"","sources":["../../src/utils/imageAnnotator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  export * from './validation.js';
2
2
  export * from './retry.js';
3
+ export * from './videoTokens.js';
4
+ export * from './youtube.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export * from './validation.js';
2
2
  export * from './retry.js';
3
+ export * from './videoTokens.js';
4
+ export * from './youtube.js';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}