imessage-ts
Version:
TypeScript library for interacting with iMessage on macOS - send messages, monitor chats, and automate responses
131 lines • 4.48 kB
JavaScript
;
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