UNPKG

@stack.thefennec.dev/telegram-export-parser

Version:

TypeScript library for parsing Telegram Desktop's data export with full type safety

214 lines 8.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MESSAGE_PARSERS = void 0; const types_1 = require("../types"); const base_1 = require("./base"); const parser_1 = require("../core/parser"); // ===================================================== // SPECIALIZED MESSAGE PARSERS // ===================================================== const photoMessageParser = (0, parser_1.createParser)({ name: 'photo-message', priority: 90, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && Boolean(raw.photo), parse: (raw) => ({ ...(0, base_1.parseBaseMessage)(raw), ...(0, base_1.parseMediaWithDimensions)(raw), ...(0, base_1.parseSelfDestructibleMessage)(raw), photoURL: (0, base_1.parseExportedFile)(raw.photo), photoFileSize: raw.photo_file_size ?? 0, mediaSpoiler: raw.media_spoiler ?? false }) }); const locationMessageParser = (0, parser_1.createParser)({ name: 'location-message', priority: 85, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && Boolean(raw.location_information), parse: (raw) => ({ ...(0, base_1.parseBaseMessage)(raw), locationInformation: raw.location_information, address: raw.address, placeName: raw.place_name, liveLocationPeriodSeconds: raw.live_location_period_seconds }) }); const contactMessageParser = (0, parser_1.createParser)({ name: 'contact-message', priority: 80, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && Boolean(raw.contact_information), parse: (raw) => ({ ...(0, base_1.parseBaseMessage)(raw), contactInformation: raw.contact_information, contactVcardURL: (0, base_1.parseExportedFile)(raw.contact_vcard), contactVcardFileSize: raw.contact_vcard_file_size }) }); const pollMessageParser = (0, parser_1.createParser)({ name: 'poll-message', priority: 75, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && Boolean(raw.poll), parse: (raw) => ({ ...(0, base_1.parseBaseMessage)(raw), poll: raw.poll }) }); const gameMessageParser = (0, parser_1.createParser)({ name: 'game-message', priority: 70, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && Boolean(raw.game_title), parse: (raw) => ({ ...(0, base_1.parseBaseMessage)(raw), gameTitle: raw.game_title, gameDescription: raw.game_description, gameLink: raw.game_link }) }); const invoiceMessageParser = (0, parser_1.createParser)({ name: 'invoice-message', priority: 65, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && Boolean(raw.invoice_information), parse: (raw) => ({ ...(0, base_1.parseBaseMessage)(raw), invoiceInformation: (0, base_1.parseInvoiceInfo)(raw.invoice_information) }) }); // ===================================================== // MEDIA MESSAGE PARSERS // ===================================================== const stickerMessageParser = (0, parser_1.createParser)({ name: 'sticker-message', priority: 60, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && raw.media_type === 'sticker', parse: (raw) => { const base = (0, base_1.parseBaseMessage)(raw); return { ...(0, base_1.parseBaseMediaMessage)(raw, base), ...(0, base_1.parseMediaWithDimensions)(raw), ...(0, base_1.parseMediaWithDuration)(raw), ...(0, base_1.parseMediaWithThumbnail)(raw), mediaType: types_1.MEDIA_TYPES.STICKER, emoji: raw.sticker_emoji ?? '' }; } }); const animationMessageParser = (0, parser_1.createParser)({ name: 'animation-message', priority: 55, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && raw.media_type === 'animation', parse: (raw) => { const base = (0, base_1.parseBaseMessage)(raw); return { ...(0, base_1.parseBaseMediaMessage)(raw, base), ...(0, base_1.parseMediaWithDimensions)(raw), ...(0, base_1.parseMediaWithDuration)(raw), ...(0, base_1.parseMediaWithThumbnail)(raw), mediaType: types_1.MEDIA_TYPES.ANIMATION }; } }); const musicMessageParser = (0, parser_1.createParser)({ name: 'music-message', priority: 50, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && raw.media_type === 'audio_file', parse: (raw) => { const base = (0, base_1.parseBaseMessage)(raw); return { ...(0, base_1.parseBaseMediaMessage)(raw, base), ...(0, base_1.parseMediaWithDuration)(raw), ...(0, base_1.parseMediaWithThumbnail)(raw), mediaType: types_1.MEDIA_TYPES.AUDIO_FILE, performer: raw.performer, title: raw.title }; } }); const videoMessageParser = (0, parser_1.createParser)({ name: 'video-message', priority: 45, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && raw.media_type === 'video_file', parse: (raw) => { const base = (0, base_1.parseBaseMessage)(raw); return { ...(0, base_1.parseBaseMediaMessage)(raw, base), ...(0, base_1.parseMediaWithDimensions)(raw), ...(0, base_1.parseMediaWithDuration)(raw), ...(0, base_1.parseMediaWithThumbnail)(raw), mediaType: types_1.MEDIA_TYPES.VIDEO_FILE }; } }); const videoNoteMessageParser = (0, parser_1.createParser)({ name: 'video-note-message', priority: 40, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && raw.media_type === 'video_message', parse: (raw) => { const base = (0, base_1.parseBaseMessage)(raw); return { ...(0, base_1.parseBaseMediaMessage)(raw, base), ...(0, base_1.parseMediaWithDimensions)(raw), ...(0, base_1.parseMediaWithDuration)(raw), ...(0, base_1.parseMediaWithThumbnail)(raw), mediaType: types_1.MEDIA_TYPES.VIDEO_NOTE }; } }); const voiceNoteMessageParser = (0, parser_1.createParser)({ name: 'voice-note-message', priority: 35, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && raw.media_type === 'voice_message', parse: (raw) => { const base = (0, base_1.parseBaseMessage)(raw); return { ...(0, base_1.parseBaseMediaMessage)(raw, base), ...(0, base_1.parseMediaWithDuration)(raw), mediaType: types_1.MEDIA_TYPES.VOICE_NOTE }; } }); const documentMessageParser = (0, parser_1.createParser)({ name: 'document-message', priority: 30, canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE && raw.media_type === 'file', parse: (raw) => { const base = (0, base_1.parseBaseMessage)(raw); return { ...(0, base_1.parseBaseMediaMessage)(raw, base), ...(0, base_1.parseMediaWithDimensions)(raw), ...(0, base_1.parseMediaWithThumbnail)(raw), ...(0, base_1.parseSelfDestructibleMessage)(raw), mediaType: types_1.MEDIA_TYPES.FILE }; } }); // ===================================================== // TEXT MESSAGE PARSER (FALLBACK) // ===================================================== const textMessageParser = (0, parser_1.createParser)({ name: 'text-message', priority: 10, // Lowest priority - catches everything else canHandle: (raw) => raw.type === types_1.MESSAGE_TYPES.MESSAGE, parse: (raw) => (0, base_1.parseBaseMessage)(raw) }); // ===================================================== // EXPORTS // ===================================================== exports.MESSAGE_PARSERS = [ // Specialized messages (highest priority) photoMessageParser, locationMessageParser, contactMessageParser, pollMessageParser, gameMessageParser, invoiceMessageParser, // Media messages (medium priority) stickerMessageParser, animationMessageParser, musicMessageParser, videoMessageParser, videoNoteMessageParser, voiceNoteMessageParser, documentMessageParser, // Text message fallback (lowest priority) textMessageParser ]; //# sourceMappingURL=messages.js.map