Overview
The AdvancedIMessageKit class is the main SDK client that provides a complete interface for interacting with iMessage services. It implements a singleton pattern and manages WebSocket connections, HTTP requests, and event handling.
Class Definition
class AdvancedIMessageKit extends EventEmitter implements TypedEventEmitter
Static Methods
getInstance()
Get or create the singleton SDK instance.
static getInstance(config?: ClientConfig): AdvancedIMessageKit
Configuration options for the SDK client. See ClientConfig for details.
The singleton SDK instance
Example:
import { AdvancedIMessageKit } from '@photon-ai/advanced-imessage-kit';
const sdk = AdvancedIMessageKit.getInstance({
serverUrl: 'http://localhost:1234',
apiKey: 'your-api-key',
logLevel: 'info'
});
Properties
config
The configuration object used to initialize the SDK.
readonly config: ClientConfig
logger
Logger instance for the SDK.
http
Axios HTTP client instance configured with base URL and API key headers.
readonly http: AxiosInstance
socket
Socket.IO client instance for real-time event handling.
Module Properties
The SDK provides access to various functional modules:
readonly attachments: AttachmentModule
readonly messages: MessageModule
readonly chats: ChatModule
readonly contacts: ContactModule
readonly handles: HandleModule
readonly facetime: FaceTimeModule
readonly icloud: ICloudModule
readonly polls: PollModule
readonly scheduledMessages: ScheduledMessageModule
readonly server: ServerModule
Instance Methods
connect()
Establish connection to the iMessage server via WebSocket.
async connect(): Promise<void>
This method:
- Connects to the server using Socket.IO
- Sets up event listeners for server events
- Handles authentication if an API key is provided
- Emits a
ready event when the connection is established and authenticated
Example:
const sdk = AdvancedIMessageKit.getInstance({
serverUrl: 'http://localhost:1234',
apiKey: 'your-api-key'
});
// Listen for ready event
sdk.on('ready', () => {
console.log('SDK is ready!');
});
// Connect to server
await sdk.connect();
close()
Disconnect from the iMessage server.
async close(): Promise<void>
Example:
await sdk.close();
console.log('Disconnected from server');
enqueueSend()
Enqueue a send operation to ensure sequential delivery. All send operations (messages, attachments, stickers) use this method internally to guarantee order.
public enqueueSend<T>(task: () => Promise<T>): Promise<T>
An async function that performs the send operation
Promise that resolves with the task result
Example:
// Ensure messages are sent in order
const result = await sdk.enqueueSend(async () => {
return await someAsyncSendOperation();
});
clearProcessedMessages()
Clear processed message records to prevent memory leaks. The SDK maintains a cache of processed message GUIDs for deduplication.
public clearProcessedMessages(maxSize?: number): void
Maximum number of messages to retain in the cache
Example:
// Clear old messages, keep the 500 most recent
sdk.clearProcessedMessages(500);
getProcessedMessageCount()
Get the count of processed messages in the deduplication cache.
public getProcessedMessageCount(): number
Number of processed messages in cache
Example:
const count = sdk.getProcessedMessageCount();
console.log(`Tracking ${count} processed messages`);
Event Methods
The SDK extends EventEmitter with type-safe event handling:
on()
Register an event listener.
on<K extends keyof PhotonEventMap>(
event: K,
listener: (data: PhotonEventMap[K]) => void
): this
once()
Register a one-time event listener.
once<K extends keyof PhotonEventMap>(
event: K,
listener: (data: PhotonEventMap[K]) => void
): this
off()
Remove an event listener.
off<K extends keyof PhotonEventMap>(
event: K,
listener: (data: PhotonEventMap[K]) => void
): this
emit()
Emit an event.
emit<K extends keyof PhotonEventMap>(
event: K,
...args: PhotonEventMap[K] extends undefined ? [] : [PhotonEventMap[K]]
): boolean
Example:
// Listen for new messages
sdk.on('new-message', (message) => {
console.log('New message:', message);
});
// Listen for connection events
sdk.on('ready', () => {
console.log('SDK ready');
});
sdk.on('disconnect', () => {
console.log('Disconnected');
});
Complete Example
import { AdvancedIMessageKit } from '@photon-ai/advanced-imessage-kit';
// Initialize SDK
const sdk = AdvancedIMessageKit.getInstance({
serverUrl: 'http://localhost:1234',
apiKey: 'your-api-key',
logLevel: 'info',
logToFile: true
});
// Set up event listeners
sdk.on('ready', () => {
console.log('Connected and authenticated!');
});
sdk.on('new-message', (message) => {
console.log('Received message:', message.text);
});
sdk.on('disconnect', () => {
console.log('Connection lost');
});
// Connect to server
await sdk.connect();
// Use SDK modules
const chats = await sdk.chats.getChats();
console.log(`You have ${chats.length} chats`);
// Send a message
await sdk.messages.sendMessage({
chatGuid: 'chat-guid',
text: 'Hello, world!'
});
// Clean up when done
await sdk.close();
Singleton Pattern
The SDK uses a singleton pattern to ensure only one instance exists globally. This prevents multiple WebSocket connections and ensures consistent state:
// These both return the same instance
const sdk1 = AdvancedIMessageKit.getInstance();
const sdk2 = AdvancedIMessageKit.getInstance();
console.log(sdk1 === sdk2); // true
See Also