UNPKG

imessage-ts

Version:

TypeScript library for interacting with iMessage on macOS - send messages, monitor chats, and automate responses

131 lines 4.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IMessageClient = exports.IMessageServer = exports.MessageService = exports.MessageStatus = exports.MessageType = exports.AttachmentType = void 0; const events_1 = require("events"); const database_1 = require("./database/database"); const conversation_repository_1 = require("./database/conversation-repository"); const message_repository_1 = require("./database/message-repository"); const message_watcher_1 = require("./services/message-watcher"); const message_sender_1 = require("./services/message-sender"); const types_1 = require("./types"); Object.defineProperty(exports, "AttachmentType", { enumerable: true, get: function () { return types_1.AttachmentType; } }); Object.defineProperty(exports, "MessageType", { enumerable: true, get: function () { return types_1.MessageType; } }); Object.defineProperty(exports, "MessageStatus", { enumerable: true, get: function () { return types_1.MessageStatus; } }); Object.defineProperty(exports, "MessageService", { enumerable: true, get: function () { return types_1.MessageService; } }); // Export server components var server_1 = require("./server"); Object.defineProperty(exports, "IMessageServer", { enumerable: true, get: function () { return server_1.IMessageServer; } }); /** * Main client for interacting with iMessage * * Combines all components and provides a simple API for users */ class IMessageClient extends events_1.EventEmitter { constructor(options = {}) { super(); this.database = new database_1.Database(options); this.conversationRepository = new conversation_repository_1.ConversationRepository(this.database); this.messageRepository = new message_repository_1.MessageRepository(this.database); this.messageSender = new message_sender_1.MessageSender(); this.messageWatcher = new message_watcher_1.MessageWatcher(this.database, options.catchUpOnStart ?? false); // Default to false // Forward events from the message watcher this.setupEventForwarding(); } /** * Initialize the client */ async initialize() { await this.database.initialize(); } /** * Start watching for new messages */ startWatching() { this.messageWatcher.start(); } /** * Stop watching for new messages */ stopWatching() { this.messageWatcher.stop(); } /** * Close the client and database connections */ close() { this.stopWatching(); this.database.close(); } /** * Get conversations */ async getConversations(options) { return this.conversationRepository.getConversations(options); } /** * Get a conversation by ID */ async getConversationById(id) { return this.conversationRepository.getConversationById(id); } /** * Get a conversation by chat identifier (phone number, email, etc.) */ async getConversationByChatIdentifier(chatIdentifier) { return this.conversationRepository.getConversationByChatIdentifier(chatIdentifier); } /** * Get messages from a conversation */ async getMessages(options) { return this.messageRepository.getMessages(options); } /** * Get a message by ID */ async getMessageById(id) { return this.messageRepository.getMessageById(id); } /** * Get attachments */ async getAttachments(options) { return this.messageRepository.getAttachments(options); } /** * Send a message */ async sendMessage(options) { try { await this.messageSender.sendMessage(options); } catch (error) { this.emit('messageFailed', null, error); throw error; } } /** * Check if iMessage is available */ async isAvailable() { return this.messageSender.isAvailable(); } /** * Set up event forwarding from the message watcher */ setupEventForwarding() { const events = [ 'message', 'messageRead', 'messageDelivered', 'error' ]; for (const event of events) { this.messageWatcher.on(event, (...args) => { this.emit(event, ...args); }); } } } exports.IMessageClient = IMessageClient; //# sourceMappingURL=index.js.map