UNPKG

@ankimcp/anki-mcp-server

Version:

Model Context Protocol server for Anki - enables AI assistants to interact with your Anki flashcards

55 lines • 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.storeMediaFile = storeMediaFile; const common_1 = require("@nestjs/common"); const media_validation_utils_1 = require("../../../../../utils/media-validation.utils.js"); const logger = new common_1.Logger("storeMediaFile"); async function storeMediaFile(params, client) { const { data, path, url, deleteExisting = true } = params; if (!data && !path && !url) { throw new Error("One of the data, path, or url parameters is required"); } const sources = [data, path, url].filter(Boolean); if (sources.length > 1) { throw new Error("Multiple sources (data, path, url) were given; exactly one is accepted."); } if (!params.filename || params.filename.trim() === "") { throw new Error("Filename cannot be empty"); } const filename = (0, media_validation_utils_1.sanitizeMediaFilename)(params.filename); let validatedPath; if (path) { const { resolvedPath, mimeType } = (0, media_validation_utils_1.validateMediaFilePath)(path, (0, media_validation_utils_1.getMediaFilePathConfigFromEnv)()); validatedPath = resolvedPath; logger.warn(`storeMediaFile path validation: resolved="${resolvedPath}", mime="${mimeType}"`); } if (url) { const { hostname, resolvedIp } = await (0, media_validation_utils_1.validateMediaUrl)(url, (0, media_validation_utils_1.getMediaUrlConfigFromEnv)()); logger.warn(`storeMediaFile URL validation: hostname="${hostname}", resolvedIp="${resolvedIp}"`); } const prefixedWithUnderscore = filename.startsWith("_"); const ankiParams = { filename, deleteExisting, }; if (data) { ankiParams.data = data; } else if (validatedPath) { ankiParams.path = validatedPath; } else if (url) { ankiParams.url = url; } const result = await client.invoke("storeMediaFile", ankiParams); if (!result) { throw new Error("Failed to store media file"); } return { success: true, filename: result, message: `Successfully stored media file: ${result}`, prefixedWithUnderscore, }; } //# sourceMappingURL=storeMediaFile.action.js.map