converteverything-mcp 1.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.
- package/LICENSE +21 -0
- package/README.md +668 -0
- package/dist/client.d.ts +129 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +594 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1063 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +169 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ConvertEverything API Client
|
|
4
|
+
*
|
|
5
|
+
* Secure client for interacting with the ConvertEverything.io public API.
|
|
6
|
+
* Only uses documented public endpoints - no internal/admin access.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.ConvertEverythingClient = void 0;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const types_js_1 = require("./types.js");
|
|
46
|
+
// Package version for User-Agent
|
|
47
|
+
const CLIENT_VERSION = "1.2.0";
|
|
48
|
+
// Retry configuration
|
|
49
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
50
|
+
const DEFAULT_RETRY_DELAY = 1000; // 1 second
|
|
51
|
+
const RETRYABLE_STATUS_CODES = [408, 429, 500, 502, 503, 504];
|
|
52
|
+
// Cache configuration
|
|
53
|
+
const FORMAT_CACHE_TTL = 3600000; // 1 hour
|
|
54
|
+
class ConvertEverythingClient {
|
|
55
|
+
apiKey;
|
|
56
|
+
baseUrl;
|
|
57
|
+
timeout;
|
|
58
|
+
userAgent;
|
|
59
|
+
maxRetries;
|
|
60
|
+
formatCache = null;
|
|
61
|
+
constructor(config) {
|
|
62
|
+
if (!config.apiKey) {
|
|
63
|
+
throw new Error("API key is required");
|
|
64
|
+
}
|
|
65
|
+
// Validate API key format (should be ce_ prefix)
|
|
66
|
+
if (!config.apiKey.startsWith("ce_")) {
|
|
67
|
+
throw new Error("Invalid API key format. Keys should start with 'ce_'. " +
|
|
68
|
+
"Get your API key at https://converteverything.io/api-keys");
|
|
69
|
+
}
|
|
70
|
+
this.apiKey = config.apiKey;
|
|
71
|
+
this.baseUrl = this.sanitizeUrl(config.baseUrl || types_js_1.DEFAULT_BASE_URL);
|
|
72
|
+
this.timeout = config.timeout || types_js_1.DEFAULT_TIMEOUT;
|
|
73
|
+
this.userAgent = `converteverything-mcp/${CLIENT_VERSION} (Node.js)`;
|
|
74
|
+
this.maxRetries = DEFAULT_MAX_RETRIES;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generate a unique correlation ID for request tracing
|
|
78
|
+
*/
|
|
79
|
+
generateCorrelationId() {
|
|
80
|
+
return `mcp-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Calculate exponential backoff delay
|
|
84
|
+
*/
|
|
85
|
+
getRetryDelay(attempt, retryAfter) {
|
|
86
|
+
if (retryAfter) {
|
|
87
|
+
return retryAfter * 1000; // Convert seconds to ms
|
|
88
|
+
}
|
|
89
|
+
// Exponential backoff: 1s, 2s, 4s, etc.
|
|
90
|
+
return DEFAULT_RETRY_DELAY * Math.pow(2, attempt);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Sleep for specified milliseconds
|
|
94
|
+
*/
|
|
95
|
+
sleep(ms) {
|
|
96
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Execute fetch with timeout and abort controller
|
|
100
|
+
*/
|
|
101
|
+
async fetchWithTimeout(url, options = {}) {
|
|
102
|
+
const controller = new AbortController();
|
|
103
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
104
|
+
try {
|
|
105
|
+
return await fetch(url, {
|
|
106
|
+
...options,
|
|
107
|
+
signal: controller.signal,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
clearTimeout(timeoutId);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Execute fetch with retry logic and rate limit handling
|
|
116
|
+
*/
|
|
117
|
+
async fetchWithRetry(url, options = {}, correlationId) {
|
|
118
|
+
let lastError = null;
|
|
119
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
120
|
+
try {
|
|
121
|
+
const response = await this.fetchWithTimeout(url, {
|
|
122
|
+
...options,
|
|
123
|
+
headers: {
|
|
124
|
+
...options.headers,
|
|
125
|
+
"X-Correlation-ID": correlationId,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
// Handle rate limiting (429)
|
|
129
|
+
if (response.status === 429) {
|
|
130
|
+
const retryAfter = parseInt(response.headers.get("Retry-After") || "0", 10);
|
|
131
|
+
if (attempt < this.maxRetries) {
|
|
132
|
+
const delay = this.getRetryDelay(attempt, retryAfter || undefined);
|
|
133
|
+
await this.sleep(delay);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
throw new Error(`Rate limit exceeded. Please wait ${retryAfter || 60} seconds before retrying.`);
|
|
137
|
+
}
|
|
138
|
+
// Retry on transient errors
|
|
139
|
+
if (RETRYABLE_STATUS_CODES.includes(response.status) && attempt < this.maxRetries) {
|
|
140
|
+
const delay = this.getRetryDelay(attempt);
|
|
141
|
+
await this.sleep(delay);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
return response;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
148
|
+
// Retry on network errors
|
|
149
|
+
if (attempt < this.maxRetries && lastError.name !== "AbortError") {
|
|
150
|
+
const delay = this.getRetryDelay(attempt);
|
|
151
|
+
await this.sleep(delay);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
throw lastError || new Error("Request failed after retries");
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Sanitize and validate the base URL
|
|
160
|
+
*/
|
|
161
|
+
sanitizeUrl(url) {
|
|
162
|
+
// Remove trailing slashes
|
|
163
|
+
let sanitized = url.replace(/\/+$/, "");
|
|
164
|
+
// Ensure HTTPS (upgrade HTTP to HTTPS for security)
|
|
165
|
+
if (sanitized.startsWith("http://") && !sanitized.includes("localhost")) {
|
|
166
|
+
sanitized = sanitized.replace("http://", "https://");
|
|
167
|
+
}
|
|
168
|
+
// Basic URL validation
|
|
169
|
+
try {
|
|
170
|
+
new URL(sanitized);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
throw new Error(`Invalid base URL: ${url}`);
|
|
174
|
+
}
|
|
175
|
+
return sanitized;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Make an authenticated API request with retry and correlation ID
|
|
179
|
+
*/
|
|
180
|
+
async request(endpoint, options = {}) {
|
|
181
|
+
const url = `${this.baseUrl}/api${endpoint}`;
|
|
182
|
+
const correlationId = this.generateCorrelationId();
|
|
183
|
+
const response = await this.fetchWithRetry(url, {
|
|
184
|
+
...options,
|
|
185
|
+
headers: {
|
|
186
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
187
|
+
"User-Agent": this.userAgent,
|
|
188
|
+
...options.headers,
|
|
189
|
+
},
|
|
190
|
+
}, correlationId);
|
|
191
|
+
if (!response.ok) {
|
|
192
|
+
let errorMessage = `API error: ${response.status} ${response.statusText}`;
|
|
193
|
+
try {
|
|
194
|
+
const errorData = (await response.json());
|
|
195
|
+
if (errorData.detail) {
|
|
196
|
+
errorMessage = errorData.detail;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// Use default error message
|
|
201
|
+
}
|
|
202
|
+
errorMessage += ` (correlation-id: ${correlationId})`;
|
|
203
|
+
throw new Error(errorMessage);
|
|
204
|
+
}
|
|
205
|
+
return (await response.json());
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get list of supported conversion formats (cached for 1 hour)
|
|
209
|
+
*/
|
|
210
|
+
async getSupportedFormats(skipCache = false) {
|
|
211
|
+
// Return cached data if valid
|
|
212
|
+
if (!skipCache && this.formatCache) {
|
|
213
|
+
const age = Date.now() - this.formatCache.timestamp;
|
|
214
|
+
if (age < FORMAT_CACHE_TTL) {
|
|
215
|
+
return this.formatCache.data;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Fetch fresh data
|
|
219
|
+
const data = await this.request("/convert/formats");
|
|
220
|
+
// Update cache
|
|
221
|
+
this.formatCache = {
|
|
222
|
+
data,
|
|
223
|
+
timestamp: Date.now(),
|
|
224
|
+
};
|
|
225
|
+
return data;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Clear the format cache
|
|
229
|
+
*/
|
|
230
|
+
clearFormatCache() {
|
|
231
|
+
this.formatCache = null;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get current API usage and limits
|
|
235
|
+
*/
|
|
236
|
+
async getUsage() {
|
|
237
|
+
return this.request("/user/usage");
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get status of a conversion
|
|
241
|
+
*/
|
|
242
|
+
async getConversionStatus(conversionId) {
|
|
243
|
+
// Validate conversion ID format (should be UUID)
|
|
244
|
+
if (!this.isValidUuid(conversionId)) {
|
|
245
|
+
throw new Error("Invalid conversion ID format");
|
|
246
|
+
}
|
|
247
|
+
return this.request(`/convert/${conversionId}`);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Validate file path for security
|
|
251
|
+
*/
|
|
252
|
+
validateFilePath(filePath) {
|
|
253
|
+
// Resolve to absolute path
|
|
254
|
+
const absolutePath = path.resolve(filePath);
|
|
255
|
+
// Check for null bytes (path injection)
|
|
256
|
+
if (absolutePath.includes("\0")) {
|
|
257
|
+
throw new Error("Invalid file path: contains null bytes");
|
|
258
|
+
}
|
|
259
|
+
// Check file exists
|
|
260
|
+
if (!fs.existsSync(absolutePath)) {
|
|
261
|
+
throw new Error(`File not found: ${filePath}`);
|
|
262
|
+
}
|
|
263
|
+
const stats = fs.statSync(absolutePath);
|
|
264
|
+
if (!stats.isFile()) {
|
|
265
|
+
throw new Error(`Path is not a file: ${filePath}`);
|
|
266
|
+
}
|
|
267
|
+
// Resolve symlinks and verify the real path
|
|
268
|
+
const realPath = fs.realpathSync(absolutePath);
|
|
269
|
+
// Security: Ensure no directory traversal beyond file system root
|
|
270
|
+
// The realPath should be a valid absolute path without any traversal sequences
|
|
271
|
+
if (realPath.includes("..") || !path.isAbsolute(realPath)) {
|
|
272
|
+
throw new Error("Invalid file path: potential directory traversal");
|
|
273
|
+
}
|
|
274
|
+
return realPath;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Convert a file from a local path
|
|
278
|
+
*/
|
|
279
|
+
async convertFile(filePath, targetFormat, options) {
|
|
280
|
+
// Validate and get the real path
|
|
281
|
+
const realPath = this.validateFilePath(filePath);
|
|
282
|
+
// Validate target format
|
|
283
|
+
const normalizedFormat = targetFormat.toLowerCase().replace(/^\./, "");
|
|
284
|
+
if (!(0, types_js_1.isFormatSupported)(normalizedFormat)) {
|
|
285
|
+
throw new Error(`Unsupported target format: ${targetFormat}. ` +
|
|
286
|
+
"Use get_supported_formats to see available formats.");
|
|
287
|
+
}
|
|
288
|
+
// Read file
|
|
289
|
+
const fileBuffer = fs.readFileSync(realPath);
|
|
290
|
+
const fileName = path.basename(realPath);
|
|
291
|
+
return this.convertFileBuffer(fileBuffer, fileName, normalizedFormat, options);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Convert a file from a buffer/base64 data
|
|
295
|
+
*/
|
|
296
|
+
async convertFileBuffer(data, fileName, targetFormat, options) {
|
|
297
|
+
// Handle base64 input
|
|
298
|
+
let buffer;
|
|
299
|
+
if (typeof data === "string") {
|
|
300
|
+
// Remove data URL prefix if present
|
|
301
|
+
const base64Data = data.replace(/^data:[^;]+;base64,/, "");
|
|
302
|
+
buffer = Buffer.from(base64Data, "base64");
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
buffer = data;
|
|
306
|
+
}
|
|
307
|
+
// Validate file size (max 10GB, but API will enforce actual tier limits)
|
|
308
|
+
const maxSize = 10 * 1024 * 1024 * 1024; // 10GB
|
|
309
|
+
if (buffer.length > maxSize) {
|
|
310
|
+
throw new Error("File too large. Maximum size is 10GB.");
|
|
311
|
+
}
|
|
312
|
+
// Validate target format
|
|
313
|
+
const normalizedFormat = targetFormat.toLowerCase().replace(/^\./, "");
|
|
314
|
+
if (!(0, types_js_1.isFormatSupported)(normalizedFormat)) {
|
|
315
|
+
throw new Error(`Unsupported target format: ${targetFormat}. ` +
|
|
316
|
+
"Use get_supported_formats to see available formats.");
|
|
317
|
+
}
|
|
318
|
+
// Sanitize filename
|
|
319
|
+
const sanitizedName = this.sanitizeFilename(fileName);
|
|
320
|
+
// Build form data
|
|
321
|
+
const formData = new FormData();
|
|
322
|
+
const blob = new Blob([buffer]);
|
|
323
|
+
formData.append("file", blob, sanitizedName);
|
|
324
|
+
formData.append("output_format", normalizedFormat);
|
|
325
|
+
// Add conversion options
|
|
326
|
+
if (options && Object.keys(options).length > 0) {
|
|
327
|
+
formData.append("options", JSON.stringify(options));
|
|
328
|
+
}
|
|
329
|
+
return this.request("/convert", {
|
|
330
|
+
method: "POST",
|
|
331
|
+
body: formData,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Download a converted file
|
|
336
|
+
*/
|
|
337
|
+
async downloadFile(conversionId) {
|
|
338
|
+
// Validate conversion ID
|
|
339
|
+
if (!this.isValidUuid(conversionId)) {
|
|
340
|
+
throw new Error("Invalid conversion ID format");
|
|
341
|
+
}
|
|
342
|
+
// First get the conversion status to get the download URL
|
|
343
|
+
const status = await this.getConversionStatus(conversionId);
|
|
344
|
+
if (status.status !== "completed") {
|
|
345
|
+
throw new Error(`Conversion is not complete. Status: ${status.status}` +
|
|
346
|
+
(status.error_message ? `. Error: ${status.error_message}` : ""));
|
|
347
|
+
}
|
|
348
|
+
if (!status.download_url) {
|
|
349
|
+
throw new Error("Download URL not available");
|
|
350
|
+
}
|
|
351
|
+
// Check if download has expired
|
|
352
|
+
if (status.download_expires_at) {
|
|
353
|
+
const expiresAt = new Date(status.download_expires_at);
|
|
354
|
+
if (expiresAt < new Date()) {
|
|
355
|
+
throw new Error("Download link has expired");
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// Download the file
|
|
359
|
+
const response = await this.fetchWithTimeout(status.download_url, {
|
|
360
|
+
headers: { "User-Agent": this.userAgent },
|
|
361
|
+
});
|
|
362
|
+
if (!response.ok) {
|
|
363
|
+
throw new Error(`Download failed: ${response.status} ${response.statusText}`);
|
|
364
|
+
}
|
|
365
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
366
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
367
|
+
// Get filename from Content-Disposition header or construct from conversion info
|
|
368
|
+
let filename = `converted.${status.target_format}`;
|
|
369
|
+
const contentDisposition = response.headers.get("Content-Disposition");
|
|
370
|
+
if (contentDisposition) {
|
|
371
|
+
const match = contentDisposition.match(/filename="?([^";\n]+)"?/);
|
|
372
|
+
if (match) {
|
|
373
|
+
filename = match[1];
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
else if (status.original_filename) {
|
|
377
|
+
const baseName = status.original_filename.replace(/\.[^.]+$/, "");
|
|
378
|
+
filename = `${baseName}.${status.target_format}`;
|
|
379
|
+
}
|
|
380
|
+
const contentType = response.headers.get("Content-Type") || "application/octet-stream";
|
|
381
|
+
return { data: buffer, filename, contentType };
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Wait for a conversion to complete
|
|
385
|
+
*/
|
|
386
|
+
async waitForConversion(conversionId, options = {}) {
|
|
387
|
+
const pollInterval = options.pollInterval || 2000;
|
|
388
|
+
const timeout = options.timeout || 300000;
|
|
389
|
+
const startTime = Date.now();
|
|
390
|
+
if (!this.isValidUuid(conversionId)) {
|
|
391
|
+
throw new Error("Invalid conversion ID format");
|
|
392
|
+
}
|
|
393
|
+
while (true) {
|
|
394
|
+
const status = await this.getConversionStatus(conversionId);
|
|
395
|
+
if (status.status === "completed" || status.status === "failed") {
|
|
396
|
+
return status;
|
|
397
|
+
}
|
|
398
|
+
if (Date.now() - startTime > timeout) {
|
|
399
|
+
throw new Error(`Conversion timed out after ${timeout / 1000}s. ` +
|
|
400
|
+
`Current status: ${status.status}`);
|
|
401
|
+
}
|
|
402
|
+
// Wait before next poll
|
|
403
|
+
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* List recent conversions
|
|
408
|
+
*/
|
|
409
|
+
async listConversions(page = 1, perPage = 10) {
|
|
410
|
+
if (page < 1)
|
|
411
|
+
page = 1;
|
|
412
|
+
if (perPage < 1)
|
|
413
|
+
perPage = 1;
|
|
414
|
+
if (perPage > 100)
|
|
415
|
+
perPage = 100;
|
|
416
|
+
// Convert page/perPage to skip/limit for backend API
|
|
417
|
+
const skip = (page - 1) * perPage;
|
|
418
|
+
const limit = perPage;
|
|
419
|
+
return this.request(`/convert/list?skip=${skip}&limit=${limit}`);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Cancel/delete an in-progress or completed conversion
|
|
423
|
+
*/
|
|
424
|
+
async cancelConversion(conversionId) {
|
|
425
|
+
if (!this.isValidUuid(conversionId)) {
|
|
426
|
+
throw new Error("Invalid conversion ID format");
|
|
427
|
+
}
|
|
428
|
+
// First check the conversion status
|
|
429
|
+
const status = await this.getConversionStatus(conversionId);
|
|
430
|
+
if (status.status === "processing") {
|
|
431
|
+
// Note: Currently the API doesn't support cancelling in-progress conversions
|
|
432
|
+
// It only supports deleting completed/failed conversions
|
|
433
|
+
return {
|
|
434
|
+
success: false,
|
|
435
|
+
message: "Cannot cancel in-progress conversion. Please wait for it to complete or fail.",
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
try {
|
|
439
|
+
await this.request(`/convert/${conversionId}`, {
|
|
440
|
+
method: "DELETE",
|
|
441
|
+
});
|
|
442
|
+
return { success: true, message: "Conversion deleted successfully" };
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
446
|
+
return { success: false, message };
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Get file information/metadata
|
|
451
|
+
*/
|
|
452
|
+
async getFileInfo(filePath) {
|
|
453
|
+
const realPath = this.validateFilePath(filePath);
|
|
454
|
+
const stats = fs.statSync(realPath);
|
|
455
|
+
const filename = path.basename(realPath);
|
|
456
|
+
const ext = path.extname(filename).toLowerCase().replace(".", "");
|
|
457
|
+
// Mime type mapping for common formats
|
|
458
|
+
const mimeTypes = {
|
|
459
|
+
// Audio
|
|
460
|
+
mp3: "audio/mpeg", wav: "audio/wav", flac: "audio/flac", aac: "audio/aac",
|
|
461
|
+
ogg: "audio/ogg", m4a: "audio/mp4", wma: "audio/x-ms-wma",
|
|
462
|
+
// Video
|
|
463
|
+
mp4: "video/mp4", avi: "video/x-msvideo", mkv: "video/x-matroska",
|
|
464
|
+
mov: "video/quicktime", webm: "video/webm", wmv: "video/x-ms-wmv",
|
|
465
|
+
// Image
|
|
466
|
+
jpg: "image/jpeg", jpeg: "image/jpeg", png: "image/png", gif: "image/gif",
|
|
467
|
+
webp: "image/webp", bmp: "image/bmp", svg: "image/svg+xml", ico: "image/x-icon",
|
|
468
|
+
heic: "image/heic", tiff: "image/tiff", tif: "image/tiff",
|
|
469
|
+
// Document
|
|
470
|
+
pdf: "application/pdf", docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
471
|
+
doc: "application/msword", xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
472
|
+
xls: "application/vnd.ms-excel", txt: "text/plain", html: "text/html", md: "text/markdown",
|
|
473
|
+
// Data
|
|
474
|
+
json: "application/json", csv: "text/csv", xml: "application/xml", yaml: "application/x-yaml",
|
|
475
|
+
};
|
|
476
|
+
return {
|
|
477
|
+
filename,
|
|
478
|
+
size: stats.size,
|
|
479
|
+
format: ext,
|
|
480
|
+
mimeType: mimeTypes[ext] || "application/octet-stream",
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Estimate output file size based on conversion options
|
|
485
|
+
*/
|
|
486
|
+
estimateOutputSize(inputSize, sourceFormat, targetFormat, options) {
|
|
487
|
+
const src = sourceFormat.toLowerCase();
|
|
488
|
+
const tgt = targetFormat.toLowerCase();
|
|
489
|
+
// Base ratio estimates (these are rough approximations)
|
|
490
|
+
let ratio = 1.0;
|
|
491
|
+
let confidence = "medium";
|
|
492
|
+
let notes = "";
|
|
493
|
+
// Audio conversions
|
|
494
|
+
if (["mp3", "aac", "ogg", "opus"].includes(tgt)) {
|
|
495
|
+
if (["wav", "flac", "aiff"].includes(src)) {
|
|
496
|
+
// Lossless to lossy: significant compression
|
|
497
|
+
const bitrate = options?.bitrate || "192k";
|
|
498
|
+
const kbps = parseInt(bitrate.replace("k", ""), 10) || 192;
|
|
499
|
+
ratio = kbps / 1400; // WAV is roughly 1400 kbps for CD quality
|
|
500
|
+
confidence = "high";
|
|
501
|
+
notes = `Based on ${bitrate} bitrate`;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
else if (["wav", "flac"].includes(tgt)) {
|
|
505
|
+
if (["mp3", "aac", "ogg"].includes(src)) {
|
|
506
|
+
ratio = src === "mp3" ? 8 : 6; // Lossy to lossless: expansion
|
|
507
|
+
confidence = "medium";
|
|
508
|
+
notes = "Expanding lossy to lossless format";
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
// Video conversions
|
|
512
|
+
if (["mp4", "webm", "mkv"].includes(tgt)) {
|
|
513
|
+
const crf = options?.crf;
|
|
514
|
+
if (crf !== undefined) {
|
|
515
|
+
// CRF affects file size significantly
|
|
516
|
+
ratio = crf < 20 ? 1.5 : crf > 28 ? 0.5 : 1.0;
|
|
517
|
+
confidence = "medium";
|
|
518
|
+
notes = `CRF ${crf}: ${crf < 20 ? "high quality, larger file" : crf > 28 ? "lower quality, smaller file" : "balanced"}`;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
// Image conversions
|
|
522
|
+
if (["jpg", "jpeg", "webp"].includes(tgt)) {
|
|
523
|
+
const quality = options?.quality || 85;
|
|
524
|
+
if (["png", "bmp", "tiff"].includes(src)) {
|
|
525
|
+
ratio = 0.1 + (quality / 100) * 0.3; // PNG to JPG: significant compression
|
|
526
|
+
confidence = "high";
|
|
527
|
+
notes = `Quality ${quality}%`;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
else if (tgt === "png") {
|
|
531
|
+
if (["jpg", "jpeg", "webp"].includes(src)) {
|
|
532
|
+
ratio = 3; // JPG to PNG: expansion
|
|
533
|
+
confidence = "medium";
|
|
534
|
+
notes = "Lossless format, larger file expected";
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
// Document conversions
|
|
538
|
+
if (tgt === "pdf" && ["docx", "doc", "pptx"].includes(src)) {
|
|
539
|
+
ratio = 0.8; // Usually slightly smaller
|
|
540
|
+
confidence = "low";
|
|
541
|
+
notes = "Depends heavily on document content";
|
|
542
|
+
}
|
|
543
|
+
const estimatedSize = Math.round(inputSize * ratio);
|
|
544
|
+
return { estimatedSize, confidence, notes };
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Retry a failed conversion with optional new options
|
|
548
|
+
*/
|
|
549
|
+
async retryConversion(conversionId, newOptions) {
|
|
550
|
+
if (!this.isValidUuid(conversionId)) {
|
|
551
|
+
throw new Error("Invalid conversion ID format");
|
|
552
|
+
}
|
|
553
|
+
// Get original conversion details
|
|
554
|
+
const original = await this.getConversionStatus(conversionId);
|
|
555
|
+
if (original.status !== "failed") {
|
|
556
|
+
throw new Error(`Can only retry failed conversions. Current status: ${original.status}`);
|
|
557
|
+
}
|
|
558
|
+
// For retry, we need the original file which may no longer be available
|
|
559
|
+
// This would typically need a server-side retry endpoint
|
|
560
|
+
// For now, provide guidance
|
|
561
|
+
throw new Error(`To retry conversion ${conversionId}, please re-upload the original file ` +
|
|
562
|
+
`(${original.original_filename}) and convert to ${original.target_format} again. ` +
|
|
563
|
+
`Original error: ${original.error_message || "Unknown"}`);
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Validate UUID format
|
|
567
|
+
*/
|
|
568
|
+
isValidUuid(id) {
|
|
569
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
570
|
+
return uuidRegex.test(id);
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Sanitize filename to prevent issues
|
|
574
|
+
*/
|
|
575
|
+
sanitizeFilename(filename) {
|
|
576
|
+
// Remove path components
|
|
577
|
+
let name = path.basename(filename);
|
|
578
|
+
// Remove null bytes and other dangerous characters
|
|
579
|
+
name = name.replace(/[\x00-\x1f\x80-\x9f]/g, "");
|
|
580
|
+
// Limit length
|
|
581
|
+
if (name.length > 255) {
|
|
582
|
+
const ext = path.extname(name);
|
|
583
|
+
const base = path.basename(name, ext);
|
|
584
|
+
name = base.substring(0, 255 - ext.length) + ext;
|
|
585
|
+
}
|
|
586
|
+
// Fallback for empty name
|
|
587
|
+
if (!name || name === ".") {
|
|
588
|
+
name = "file";
|
|
589
|
+
}
|
|
590
|
+
return name;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
exports.ConvertEverythingClient = ConvertEverythingClient;
|
|
594
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,yCAWoB;AAOpB,iCAAiC;AACjC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,sBAAsB;AACtB,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,mBAAmB,GAAG,IAAI,CAAC,CAAC,WAAW;AAC7C,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE9D,sBAAsB;AACtB,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,SAAS;AAO3C,MAAa,uBAAuB;IACjB,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,UAAU,CAAS;IAC5B,WAAW,GAAgD,IAAI,CAAC;IAExE,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,wDAAwD;gBACxD,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,IAAI,2BAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,0BAAe,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,yBAAyB,cAAc,YAAY,CAAC;QACrE,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAe,EAAE,UAAmB;QACxD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,GAAG,IAAI,CAAC,CAAC,wBAAwB;QACpD,CAAC;QACD,wCAAwC;QACxC,OAAO,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,GAAW,EACX,UAAuB,EAAE;QAEzB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE;gBACtB,GAAG,OAAO;gBACV,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,GAAW,EACX,UAAuB,EAAE,EACzB,aAAqB;QAErB,IAAI,SAAS,GAAiB,IAAI,CAAC;QAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,GAAG,OAAO;oBACV,OAAO,EAAE;wBACP,GAAG,OAAO,CAAC,OAAO;wBAClB,kBAAkB,EAAE,aAAa;qBAClC;iBACF,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC5E,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,IAAI,SAAS,CAAC,CAAC;wBACnE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACxB,SAAS;oBACX,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,oCAAoC,UAAU,IAAI,EAAE,2BAA2B,CAChF,CAAC;gBACJ,CAAC;gBAED,4BAA4B;gBAC5B,IAAI,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACxB,SAAS;gBACX,CAAC;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAEtE,0BAA0B;gBAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACxB,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAAW;QAC7B,0BAA0B;QAC1B,IAAI,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAExC,oDAAoD;QACpD,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CACnB,QAAgB,EAChB,UAAuB,EAAE;QAEzB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,OAAO,QAAQ,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,GAAG,EACH;YACE,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACtC,YAAY,EAAE,IAAI,CAAC,SAAS;gBAC5B,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,EACD,aAAa,CACd,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,YAAY,GAAG,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC1E,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAa,CAAC;gBACtD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACrB,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;gBAClC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;YACD,YAAY,IAAI,qBAAqB,aAAa,GAAG,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,SAAS,GAAG,KAAK;QACzC,8BAA8B;QAC9B,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;YACpD,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAA2B,kBAAkB,CAAC,CAAC;QAE9E,eAAe;QACf,IAAI,CAAC,WAAW,GAAG;YACjB,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAgB,aAAa,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,YAAoB;QAC5C,iDAAiD;QACjD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAqB,YAAY,YAAY,EAAE,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAgB;QACvC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE5C,wCAAwC;QACxC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAE/C,kEAAkE;QAClE,+EAA+E;QAC/E,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,YAAoB,EACpB,OAA2B;QAE3B,iCAAiC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEjD,yBAAyB;QACzB,MAAM,gBAAgB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,IAAA,4BAAiB,EAAC,gBAAgB,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,8BAA8B,YAAY,IAAI;gBAC9C,qDAAqD,CACtD,CAAC;QACJ,CAAC;QAED,YAAY;QACZ,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,IAAqB,EACrB,QAAgB,EAChB,YAAoB,EACpB,OAA2B;QAE3B,sBAAsB;QACtB,IAAI,MAAc,CAAC;QACnB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,oCAAoC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QAED,yEAAyE;QACzE,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;QAChD,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,yBAAyB;QACzB,MAAM,gBAAgB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,IAAA,4BAAiB,EAAC,gBAAgB,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,8BAA8B,YAAY,IAAI;gBAC9C,qDAAqD,CACtD,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEtD,kBAAkB;QAClB,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7C,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAEnD,yBAAyB;QACzB,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAqB,UAAU,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,YAAoB;QAKrC,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,0DAA0D;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAE5D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,CAAC,MAAM,EAAE;gBACtD,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACjE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,gCAAgC;QAChC,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACvD,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE;YAChE,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAExC,iFAAiF;QACjF,IAAI,QAAQ,GAAG,aAAa,MAAM,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACvE,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAClE,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAClE,QAAQ,GAAG,GAAG,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACnD,CAAC;QAED,MAAM,WAAW,GACf,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;QAErE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,YAAoB,EACpB,UAAuB,EAAE;QAEzB,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;QAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;YAE5D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,8BAA8B,OAAO,GAAG,IAAI,KAAK;oBACjD,mBAAmB,MAAM,CAAC,MAAM,EAAE,CACnC,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,OAAe,CAAC,EAChB,UAAkB,EAAE;QAEpB,IAAI,IAAI,GAAG,CAAC;YAAE,IAAI,GAAG,CAAC,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAG,GAAG;YAAE,OAAO,GAAG,GAAG,CAAC;QAEjC,qDAAqD;QACrD,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC;QAEtB,OAAO,IAAI,CAAC,OAAO,CACjB,sBAAsB,IAAI,UAAU,KAAK,EAAE,CAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,YAAoB;QACzC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,6EAA6E;YAC7E,yDAAyD;YACzD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,+EAA+E;aACzF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAO,YAAY,YAAY,EAAE,EAAE;gBACnD,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB;QAMhC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAElE,uCAAuC;QACvC,MAAM,SAAS,GAA2B;YACxC,QAAQ;YACR,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW;YACzE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,gBAAgB;YACzD,QAAQ;YACR,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB;YACjE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,gBAAgB;YACjE,QAAQ;YACR,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW;YACzE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc;YAC/E,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;YACzD,WAAW;YACX,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,yEAAyE;YACvG,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,mEAAmE;YACpG,GAAG,EAAE,0BAA0B,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe;YAC1F,OAAO;YACP,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,oBAAoB;SAC9F,CAAC;QAEF,OAAO;YACL,QAAQ;YACR,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,0BAA0B;SACvD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB,CAChB,SAAiB,EACjB,YAAoB,EACpB,YAAoB,EACpB,OAA2B;QAE3B,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAEvC,wDAAwD;QACxD,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,IAAI,UAAU,GAA8B,QAAQ,CAAC;QACrD,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,oBAAoB;QACpB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,6CAA6C;gBAC7C,MAAM,OAAO,GAAI,OAAgC,EAAE,OAAO,IAAI,MAAM,CAAC;gBACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;gBAC3D,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,0CAA0C;gBAC/D,UAAU,GAAG,MAAM,CAAC;gBACpB,KAAK,GAAG,YAAY,OAAO,UAAU,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;gBAC9D,UAAU,GAAG,QAAQ,CAAC;gBACtB,KAAK,GAAG,oCAAoC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,GAAI,OAA4B,EAAE,GAAG,CAAC;YAC/C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,sCAAsC;gBACtC,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC9C,UAAU,GAAG,QAAQ,CAAC;gBACtB,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAC1H,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAI,OAAgC,EAAE,OAAO,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,KAAK,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,sCAAsC;gBAC3E,UAAU,GAAG,MAAM,CAAC;gBACpB,KAAK,GAAG,WAAW,OAAO,GAAG,CAAC;YAChC,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,KAAK,GAAG,CAAC,CAAC,CAAC,wBAAwB;gBACnC,UAAU,GAAG,QAAQ,CAAC;gBACtB,KAAK,GAAG,uCAAuC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,KAAK,GAAG,GAAG,CAAC,CAAC,2BAA2B;YACxC,UAAU,GAAG,KAAK,CAAC;YACnB,KAAK,GAAG,qCAAqC,CAAC;QAChD,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;QAEpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,YAAoB,EACpB,UAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAE9D,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,sDAAsD,QAAQ,CAAC,MAAM,EAAE,CACxE,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,yDAAyD;QACzD,4BAA4B;QAC5B,MAAM,IAAI,KAAK,CACb,uBAAuB,YAAY,uCAAuC;YAC1E,IAAI,QAAQ,CAAC,iBAAiB,oBAAoB,QAAQ,CAAC,aAAa,UAAU;YAClF,mBAAmB,QAAQ,CAAC,aAAa,IAAI,SAAS,EAAE,CACzD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,EAAU;QAC5B,MAAM,SAAS,GACb,iEAAiE,CAAC;QACpE,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAgB;QACvC,yBAAyB;QACzB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEnC,mDAAmD;QACnD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAEjD,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACnD,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC1B,IAAI,GAAG,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA7qBD,0DA6qBC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ConvertEverything MCP Server
|
|
4
|
+
*
|
|
5
|
+
* An MCP server that enables AI assistants to convert files between 93+ formats
|
|
6
|
+
* using the ConvertEverything.io API.
|
|
7
|
+
*
|
|
8
|
+
* Security: This server only uses the public API with user-provided API keys.
|
|
9
|
+
* No internal endpoints, secrets, or admin functionality is exposed.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|