UNPKG

@ankimcp/anki-mcp-server

Version:

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

74 lines • 2.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.suspensionCountsSchema = exports.cardSuspensionStatusSchema = exports.cardIdsSchema = void 0; exports.fetchSuspensionStatuses = fetchSuspensionStatuses; exports.summarizeSuspensionStatuses = summarizeSuspensionStatuses; exports.findMissingCardIds = findMissingCardIds; const zod_1 = require("zod"); exports.cardIdsSchema = zod_1.z .array(zod_1.z.number().int().positive()) .min(1) .max(500) .describe("Array of card IDs (max 500). Card IDs (not note IDs) — use get_cards, " + "get_due_cards, or notesInfo to obtain them."); exports.cardSuspensionStatusSchema = zod_1.z.object({ cardId: zod_1.z.number(), suspended: zod_1.z .boolean() .nullable() .describe("true if suspended, false if not suspended, null if the card ID does not exist"), }); exports.suspensionCountsSchema = zod_1.z.object({ total: zod_1.z.number(), suspendedCount: zod_1.z.number(), unsuspendedCount: zod_1.z.number(), missingCount: zod_1.z.number(), }); async function fetchSuspensionStatuses(cards, client) { const results = await client.invoke("areSuspended", { cards, }); if (!Array.isArray(results) || results.length !== cards.length) { throw new Error(`areSuspended returned ${Array.isArray(results) ? `${results.length} entries` : results === null ? "null" : typeof results} for ${cards.length} card(s)`); } return cards.map((cardId, index) => { const suspended = results[index]; if (typeof suspended !== "boolean" && suspended !== null) { throw new Error(`areSuspended returned ${JSON.stringify(suspended)} for card ${cardId}; ` + `expected true, false, or null`); } return { cardId, suspended }; }); } function summarizeSuspensionStatuses(statuses) { let suspendedCount = 0; let unsuspendedCount = 0; let missingCount = 0; for (const status of statuses) { if (status.suspended === true) { suspendedCount++; } else if (status.suspended === false) { unsuspendedCount++; } else { missingCount++; } } return { total: statuses.length, suspendedCount, unsuspendedCount, missingCount, }; } function findMissingCardIds(statuses) { return statuses .filter((status) => status.suspended === null) .map((status) => status.cardId); } //# sourceMappingURL=card-suspension.utils.js.map