@theophilusdev/conduit 1.0.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/dist/index.cjs +285 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -3
- package/dist/index.d.ts +33 -3
- package/dist/index.mjs +285 -42
- package/dist/index.mjs.map +1 -1
- package/docs/DOCS.md +47 -14
- package/package.json +2 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/toFcaEvent.ts","../src/errors/ConduitError.ts","../src/api/ConduitMessagesAPI.ts","../src/api/ConduitThreadsAPI.ts","../src/api/ConduitUsersAPI.ts","../src/api/ConduitAccountAPI.ts","../src/client/ConduitClient.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { ConduitEvents } from \"../types.js\";\n\nconst FCA_EVENT_MAP = {\n \"message:create\": \"message\",\n \"message:remove\": \"message_unsend\",\n \"message:react\": \"message_reaction\",\n \"message:respond\": \"message_reply\",\n \"message:writing\": \"typ\",\n \"message:read\": \"read_receipt\",\n\n \"user:create\": \"event\", // log:subscribe\n \"user:remove\": \"event\", // log:unsubscribe\n\n \"thread:update\": \"event\",\n \"thread:title_change\": \"event\", // log:thread-name\n \"thread:photo_replaced\": \"event\", // log:thread-image\n \"thread:theme_changed\": \"event\", // log:thread-color\n \"thread:nickname_changed\": \"event\", // log:user-nickname\n \"thread:admin_changed\": \"event\", // log:admin-text\n} as const satisfies Record<keyof ConduitEvents, string>;\n\ntype FcaEventName = (typeof FCA_EVENT_MAP)[keyof typeof FCA_EVENT_MAP];\n\nexport function toFcaEvent(event: keyof ConduitEvents): FcaEventName {\n return FCA_EVENT_MAP[event];\n}\n","export class ConduitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ConduitError\";\n }\n\n public static new(message: string) {\n return new ConduitError(message);\n }\n\n public static uninitializedClient() {\n return ConduitError.new(\n \"Conduit client not yet initialized. Please call the .login(credentials) method\",\n );\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\n\n/**\n * Provides message-related API methods wrapping the underlying FCA client.\n * Accessible via `client.messages`.\n */\nexport class ConduitMessagesAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Sends a message to a thread.\n * @param body - The message text.\n * @param threadID - The target thread ID.\n */\n send(body: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.sendMessage({ body }, threadID);\n }\n\n /**\n * Sends a quoted reply to a specific message.\n * @param body - The reply text.\n * @param threadID - The target thread ID.\n * @param messageID - The message ID to reply to.\n */\n reply(body: string, threadID: string, messageID: string): Promise<any> {\n return this.bot.ctx.api.sendMessage(\n { body },\n threadID,\n undefined,\n messageID,\n );\n }\n\n /**\n * Edits an existing message.\n * @param messageID - The message ID to edit.\n * @param body - The new message text.\n */\n edit(messageID: string, body: string): Promise<any> {\n return this.bot.ctx.api.editMessage(body, messageID);\n }\n\n /**\n * Unsends (retracts) a message sent by the bot.\n * @param messageID - The message ID to unsend.\n */\n unsend(messageID: string): Promise<any> {\n return this.bot.ctx.api.unsendMessage(messageID);\n }\n\n /**\n * Deletes a message.\n * @param messageID - The message ID to delete.\n */\n delete(messageID: string): Promise<any> {\n return this.bot.ctx.api.deleteMessage(messageID);\n }\n\n /**\n * Adds or removes a reaction on a message.\n * @param emoji - The emoji reaction string.\n * @param messageID - The target message ID.\n * @param threadID - The thread the message belongs to.\n */\n react(emoji: string, messageID: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.setMessageReaction(emoji, messageID, threadID);\n }\n\n /**\n * Sends a typing indicator to a thread.\n * @param threadID - The target thread ID.\n */\n sendTypingIndicator(threadID: string): Promise<any> {\n return this.bot.ctx.api.sendTypingIndicator(threadID);\n }\n\n /**\n * Marks a message as read.\n * @param messageID - The message ID to mark as read.\n */\n markAsRead(messageID: string): Promise<any> {\n return this.bot.ctx.api.markAsRead(messageID);\n }\n\n /**\n * Uploads a file attachment and returns an attachment object.\n * @param file - A readable stream or file buffer.\n */\n uploadAttachment(file: any): Promise<any> {\n return this.bot.ctx.api.uploadAttachment(file);\n }\n\n /**\n * Forwards an existing attachment to another thread.\n * @param attachmentID - The attachment ID to forward.\n * @param threadID - The target thread ID.\n */\n forwardAttachment(attachmentID: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.forwardAttachment(attachmentID, threadID);\n }\n\n /**\n * Shares a contact card to a thread.\n * @param userID - The user ID of the contact to share.\n * @param threadID - The target thread ID.\n */\n shareContact(userID: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.shareContact(userID, threadID);\n }\n\n /**\n * Changes the color theme of a thread.\n * @param color - The color hex string.\n * @param threadID - The target thread ID.\n */\n changeThreadColor(color: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.changeThreadColor(color, threadID);\n }\n\n /**\n * Changes the quick-reaction emoji of a thread.\n * @param emoji - The emoji string.\n * @param threadID - The target thread ID.\n */\n changeThreadEmoji(emoji: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.changeThreadEmoji(emoji, threadID);\n }\n\n /**\n * Fetches a specific message by ID.\n * @param messageID - The message ID to fetch.\n */\n getMessage(messageID: string): Promise<any> {\n return this.bot.ctx.api.getMessage(messageID);\n }\n\n /**\n * Returns all available thread color themes.\n */\n getThreadColors(): Promise<any> {\n return this.bot.ctx.api.getThreadColors();\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\n\n/**\n * Provides thread-related API methods wrapping the underlying FCA client.\n * Accessible via `client.threads`.\n */\nexport class ConduitThreadsAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Fetches detailed info about a thread.\n * @param threadID - The thread ID to query.\n */\n getInfo(threadID: string): Promise<any> {\n return this.bot.ctx.api.getThreadInfo(threadID);\n }\n\n /**\n * Fetches a paginated list of threads.\n * @param limit - Number of threads to return.\n * @param cursor - Pagination cursor, or `null` for the first page.\n * @param folders - Folder filters e.g. `[\"INBOX\"]`.\n */\n getList(limit: number, cursor: any, folders: string[]): Promise<any> {\n return this.bot.ctx.api.getThreadList(limit, cursor, folders);\n }\n\n /**\n * Fetches message history for a thread.\n * @param threadID - The thread ID to query.\n * @param limit - Number of messages to return.\n */\n getHistory(threadID: string, limit: number): Promise<any> {\n return this.bot.ctx.api.getThreadHistory(threadID, limit);\n }\n\n /**\n * Searches for threads by name or keyword.\n * @param query - The search query string.\n */\n search(query: string): Promise<any> {\n return this.bot.ctx.api.searchForThread(query);\n }\n\n /**\n * Creates a new group conversation.\n * @param userIDs - Array of user IDs to add to the group.\n * @param name - Optional group name.\n */\n createGroup(userIDs: string[], name?: string): Promise<any> {\n return this.bot.ctx.api.createNewGroup(userIDs, name);\n }\n\n /**\n * Adds a user to an existing group thread.\n * @param userID - The user ID to add.\n * @param threadID - The target group thread ID.\n */\n addUser(userID: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.addUserToGroup(userID, threadID);\n }\n\n /**\n * Removes a user from a group thread.\n * @param userID - The user ID to remove.\n * @param threadID - The target group thread ID.\n */\n removeUser(userID: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.removeUserFromGroup(userID, threadID);\n }\n\n /**\n * Promotes or demotes a user's admin status in a group.\n * @param userID - The target user ID.\n * @param threadID - The group thread ID.\n * @param admin - `true` to promote, `false` to demote.\n */\n changeAdminStatus(\n userID: string,\n threadID: string,\n admin: boolean,\n ): Promise<any> {\n return this.bot.ctx.api.changeAdminStatus(userID, threadID, admin);\n }\n\n /**\n * Updates the group's profile image.\n * @param image - A readable stream or file buffer.\n * @param threadID - The target group thread ID.\n */\n changeGroupImage(image: any, threadID: string): Promise<any> {\n return this.bot.ctx.api.changeGroupImage(image, threadID);\n }\n\n /**\n * Sets a participant's nickname in a thread.\n * @param nickname - The new nickname. Pass an empty string to clear.\n * @param threadID - The thread ID.\n * @param userID - The target user ID.\n */\n changeNickname(\n nickname: string,\n threadID: string,\n userID: string,\n ): Promise<any> {\n return this.bot.ctx.api.changeNickname(nickname, threadID, userID);\n }\n\n /**\n * Changes the title of a group thread.\n * @param title - The new group title.\n * @param threadID - The target group thread ID.\n */\n setTitle(title: string, threadID: string): Promise<any> {\n return this.bot.ctx.api.setTitle(title, threadID);\n }\n\n /**\n * Creates a poll in a thread.\n * @param title - The poll question.\n * @param threadID - The target thread ID.\n * @param options - Array of answer options.\n */\n createPoll(title: string, threadID: string, options: string[]): Promise<any> {\n return this.bot.ctx.api.createPoll(title, threadID, options);\n }\n\n /**\n * Deletes a thread.\n * @param threadID - The thread ID to delete.\n */\n delete(threadID: string): Promise<any> {\n return this.bot.ctx.api.deleteThread(threadID);\n }\n\n /**\n * Mutes or unmutes notifications for a thread.\n * @param threadID - The target thread ID.\n * @param muteUntil - Timestamp (ms) to mute until. Pass `-1` to mute indefinitely, `0` to unmute.\n */\n mute(threadID: string, muteUntil: number): Promise<any> {\n return this.bot.ctx.api.muteThread(threadID, muteUntil);\n }\n\n /**\n * Accepts or declines a message request.\n * @param threadID - The thread ID of the request.\n * @param accept - `true` to accept, `false` to decline.\n */\n handleMessageRequest(threadID: string, accept: boolean): Promise<any> {\n return this.bot.ctx.api.handleMessageRequest(threadID, accept);\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\n\n/**\n * Provides user-related API methods wrapping the underlying FCA client.\n * Accessible via `client.users`.\n */\nexport class ConduitUsersAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Fetches info for one or more users by ID.\n * @param userID - A single user ID or an array of user IDs.\n */\n getInfo(userID: string | string[]): Promise<any> {\n return this.bot.ctx.api.getUserInfo(userID);\n }\n\n /**\n * Resolves a vanity URL or username to a Facebook user ID.\n * @param vanity - The vanity name or profile URL slug.\n */\n getID(vanity: string): Promise<any> {\n return this.bot.ctx.api.getUserID(vanity);\n }\n\n /**\n * Returns the authenticated user's friends list.\n */\n getFriendsList(): Promise<any> {\n return this.bot.ctx.api.getFriendsList();\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\n\n/**\n * Provides account-related API methods wrapping the underlying FCA client.\n * Accessible via `client.account`.\n */\nexport class ConduitAccountAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Returns the logged-in user's Facebook ID.\n */\n getCurrentUserID(): string {\n return this.bot.ctx.api.getCurrentUserID();\n }\n\n /**\n * Blocks or unblocks a user.\n * @param userID - The target user ID.\n * @param block - `true` to block, `false` to unblock.\n */\n blockUser(userID: string, block: boolean): Promise<any> {\n return this.bot.ctx.api.changeBlockedStatus(userID, block);\n }\n\n /**\n * Accepts or declines a friend request.\n * @param userID - The user ID who sent the request.\n * @param accept - `true` to accept, `false` to decline.\n */\n handleFriendRequest(userID: string, accept: boolean): Promise<any> {\n return this.bot.ctx.api.handleFriendRequest(userID, accept);\n }\n\n /**\n * Removes a user from the friends list.\n * @param userID - The target user ID.\n */\n unfriend(userID: string): Promise<any> {\n return this.bot.ctx.api.unfriend(userID);\n }\n\n /**\n * Ends the current session and invalidates cookies.\n */\n logout(): Promise<any> {\n return this.bot.ctx.api.logout();\n }\n}\n","import { createMessengerBot, MessengerBot } from \"@dongdev/fca-unofficial\";\nimport {\n ConduitClientConfig,\n ConduitCredentials,\n ConduitEvents,\n Middleware,\n} from \"../types.js\";\nimport { toFcaEvent } from \"../utils/toFcaEvent.js\";\nimport { ConduitError } from \"../errors/ConduitError.js\";\nimport { ConduitMessagesAPI } from \"../api/ConduitMessagesAPI.js\";\nimport { ConduitThreadsAPI } from \"../api/ConduitThreadsAPI.js\";\nimport { ConduitUsersAPI } from \"../api/ConduitUsersAPI.js\";\nimport { ConduitAccountAPI } from \"../api/ConduitAccountAPI.js\";\n\n/**\n * Set of Conduit events that are dispatched via the fan-out mechanism,\n * meaning they are all sourced from a single underlying `threadUpdate` FCA event.\n */\nconst FANOUT_EVENTS = new Set<keyof ConduitEvents>([\n \"user:create\",\n \"user:remove\",\n \"thread:update\",\n \"thread:title_change\",\n \"thread:photo_replaced\",\n \"thread:theme_changed\",\n \"thread:nickname_changed\",\n \"thread:admin_changed\",\n]);\n\n/**\n * Maps FCA `logMessageType` strings to their corresponding Conduit event keys.\n * Used during fan-out to route `threadUpdate` payloads to the correct event stack.\n */\nconst LOG_MESSAGE_TYPE_MAP: Record<string, keyof ConduitEvents> = {\n \"log:subscribe\": \"user:create\",\n \"log:unsubscribe\": \"user:remove\",\n \"log:thread-name\": \"thread:title_change\",\n \"log:thread-image\": \"thread:photo_replaced\",\n \"log:thread-color\": \"thread:theme_changed\",\n \"log:user-nickname\": \"thread:nickname_changed\",\n \"log:thread-admins\": \"thread:admin_changed\",\n};\n\n/**\n * High-level Messenger client that wraps the FCA unofficial API and exposes\n * a middleware-based event system modelled after Express/Koa.\n *\n * @example\n * ```ts\n * const conduit = new ConduitClient(config);\n * await conduit.login(credentials);\n * conduit.on(\"message:text\", async (ctx, next) => {\n * console.log(ctx.body);\n * await next();\n * });\n * ```\n */\nexport class ConduitClient {\n /** Underlying FCA bot instance. `null` until {@link login} resolves. */\n private _client: MessengerBot | null;\n\n /** Lazily-initialized messages API wrapper. */\n private _messages: ConduitMessagesAPI | null = null;\n\n /** Lazily-initialized threads API wrapper. */\n private _threads: ConduitThreadsAPI | null = null;\n\n /** Lazily-initialized users API wrapper. */\n private _users: ConduitUsersAPI | null = null;\n\n /** Lazily-initialized account API wrapper. */\n private _account: ConduitAccountAPI | null = null;\n\n /** Configuration forwarded to the FCA layer on login. */\n private config: ConduitClientConfig;\n\n /**\n * Registry of middleware stacks keyed by Conduit event name.\n * Each stack is executed in insertion order via {@link runStack}.\n */\n private middlewares: Map<\n keyof ConduitEvents,\n Middleware<keyof ConduitEvents>[]\n >;\n\n /**\n * Guards against registering the `threadUpdate` fan-out listener more than once,\n * regardless of how many fan-out events are subscribed to.\n */\n private fanOutBound: boolean;\n\n /**\n * @param config - Client configuration passed through to the FCA bot.\n */\n constructor(config: ConduitClientConfig) {\n this._client = null;\n this.config = {\n ...config,\n logLevel: config.logLevel ?? \"silent\",\n };\n this.middlewares = new Map();\n this.fanOutBound = false;\n }\n\n /**\n * API for message operations.\n *\n * Provides methods for sending messages, replying to threads,\n * reacting to messages, editing content, deleting messages,\n * and other message-level interactions.\n */\n get messages(): ConduitMessagesAPI {\n return (this._messages ??= new ConduitMessagesAPI(this.client));\n }\n\n /**\n * API for thread management operations.\n *\n * Includes functionality for retrieving thread data,\n * managing participants, updating thread metadata (such as title),\n * and handling thread-level features like polls.\n */\n get threads(): ConduitThreadsAPI {\n return (this._threads ??= new ConduitThreadsAPI(this.client));\n }\n\n /**\n * API for user-related operations.\n *\n * Supports fetching user profiles, resolving user IDs,\n * and accessing social graph data such as friends or connections.\n */\n get users(): ConduitUsersAPI {\n return (this._users ??= new ConduitUsersAPI(this.client));\n }\n\n /**\n * API for account-level operations.\n *\n * Exposes actions tied to the authenticated account such as\n * retrieving the current user ID, managing friend requests,\n * blocking users, and logging out.\n */\n get account(): ConduitAccountAPI {\n return (this._account ??= new ConduitAccountAPI(this.client));\n }\n\n /**\n * Authenticates with Messenger and initialises the underlying FCA bot.\n * Must be called before any events can be received.\n *\n * @param credentials - App-state, cookies, or email/password credentials.\n * @returns The current instance for chaining.\n */\n public async login(credentials: ConduitCredentials): Promise<this> {\n this._client = await createMessengerBot(\n {\n appState: credentials.appstate,\n Cookie: credentials.cookies,\n email: credentials.account?.email,\n password: credentials.account?.password,\n },\n this.config,\n );\n return this;\n }\n\n /**\n * Registers one or more middleware handlers for a Conduit event.\n *\n * The first call for a given event also binds the corresponding FCA listener.\n * Fan-out events share a single `threadUpdate` FCA binding; all others get\n * their own dedicated listener via {@link bindConduitEvent}.\n *\n * @param event - The Conduit event name to subscribe to.\n * @param middlewares - Ordered middleware functions to push onto the stack.\n * @returns The current instance for chaining.\n */\n public on<K extends keyof ConduitEvents>(\n event: K,\n ...middlewares: Middleware<K>[]\n ): this {\n if (!this.middlewares.has(event)) {\n this.middlewares.set(event, []);\n\n if (FANOUT_EVENTS.has(event)) {\n this.bindFanOutEvents();\n } else {\n this.bindConduitEvent(event);\n }\n }\n this.middlewares\n .get(event)!\n .push(...(middlewares as Middleware<keyof ConduitEvents>[]));\n return this;\n }\n\n /**\n * Registers middleware directly against a raw FCA event, bypassing the\n * Conduit event abstraction entirely. Useful for events not yet mapped\n * by the Conduit layer.\n *\n * @param event - Raw FCA event name.\n * @param middlewares - Middleware functions receiving the raw FCA payload.\n * @returns The current instance for chaining.\n */\n public onFca(\n event: string,\n ...middlewares: ((data: any, next?: () => Promise<void>) => Promise<void>)[]\n ): this {\n this.client.on(event, async (data: any) => {\n await this.runStack(\n middlewares as Middleware<keyof ConduitEvents>[],\n data,\n );\n });\n return this;\n }\n\n /**\n * Uses the raw legacy api. Not recommended as this do not\n * have any type safety and auto-completion features. Use\n * at your own risk.\n *\n * @returns The raw api context.\n * */\n public get api(): any {\n return this.client.ctx.api;\n }\n\n /**\n * Translates a single Conduit event to its FCA equivalent and attaches a\n * listener that enriches the raw payload before running the middleware stack.\n *\n * @param event - The Conduit event to bind.\n */\n private bindConduitEvent<K extends keyof ConduitEvents>(event: K) {\n const fcaEvent = toFcaEvent(event);\n this.client.on(fcaEvent, async (raw: any) => {\n const stack = this.middlewares.get(event) ?? [];\n await this.runStack(stack, this.enrich(event, raw));\n });\n }\n\n /**\n * Returns the initialized Messenger client instance.\n *\n * This getter enforces the client lifecycle by ensuring that the underlying\n * FCA bot has been created via {@link login} before any access is allowed.\n *\n * @throws {ConduitError} If the client has not been initialized yet (login not called).\n * @returns {MessengerBot} The active Messenger bot instance.\n */\n private get client(): MessengerBot {\n if (this._client) return this._client;\n throw ConduitError.uninitializedClient();\n }\n\n /**\n * Attaches a single `threadUpdate` FCA listener that fans out to all\n * relevant Conduit events based on the incoming `logMessageType`.\n *\n * `thread:update` always fires with the raw payload when its stack is\n * non-empty. Specific sub-events (e.g. `thread:title_change`) fire only\n * when their stack is also non-empty and a matching `logMessageType` exists.\n *\n * Calling this method more than once is a no-op.\n */\n private bindFanOutEvents() {\n if (this.fanOutBound) return;\n this.fanOutBound = true;\n\n this.client.on(\"threadUpdate\", async (raw: any) => {\n const { logMessageType } = raw;\n\n const updateStack = this.middlewares.get(\"thread:update\") ?? [];\n if (updateStack.length > 0) {\n await this.runStack(updateStack, this.enrich(\"thread:update\", raw));\n }\n\n const conduitEvent = LOG_MESSAGE_TYPE_MAP[logMessageType];\n if (!conduitEvent) return;\n\n const stack = this.middlewares.get(conduitEvent) ?? [];\n if (stack.length === 0) return;\n\n await this.runStack(stack, this.enrich(conduitEvent, raw));\n });\n }\n\n /**\n * Augments a raw FCA payload with convenience helpers scoped to the event.\n *\n * All events receive a `send` helper for replying to the source thread.\n * Events in the `message:` namespace additionally receive:\n * - `reply` — sends a quoted reply to the triggering message.\n * - `react` — sets an emoji reaction on the triggering message.\n *\n * @param event - The Conduit event being enriched.\n * @param raw - The raw FCA payload.\n * @returns The enriched context object passed to middleware.\n */\n private enrich(event: keyof ConduitEvents, raw: any): any {\n const threadID = raw.threadID;\n const messageID = raw.messageID;\n\n const sendable = {\n send: (body: string) => this.messages.send(body, threadID),\n };\n\n if (event.startsWith(\"message:\")) {\n return {\n ...raw,\n ...sendable,\n reply: (body: string) => this.messages.reply(body, threadID, messageID),\n react: (emoji: string) =>\n this.messages.react(emoji, messageID, threadID),\n };\n }\n\n return { ...raw, ...sendable };\n }\n\n /**\n * Executes a middleware stack sequentially, where each handler must call\n * `next()` to advance to the following handler.\n *\n * @param stack - Ordered array of middleware functions to execute.\n * @param data - The enriched event payload threaded through the stack.\n */\n private async runStack(stack: Middleware<keyof ConduitEvents>[], data: any) {\n let i = 0;\n const next = async () => {\n if (i < stack.length) {\n await stack[i++](data as never, next);\n }\n };\n await next();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/toFcaEvent.ts","../src/errors/ConduitError.ts","../src/api/ConduitMessagesAPI.ts","../src/api/ConduitThreadsAPI.ts","../src/api/ConduitUsersAPI.ts","../src/api/ConduitAccountAPI.ts","../src/client/ConduitClient.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { ConduitEvents } from \"../types.js\";\n\nconst FCA_EVENT_MAP = {\n \"message:create\": \"message\",\n \"message:remove\": \"message_unsend\",\n \"message:react\": \"message_reaction\",\n \"message:respond\": \"message_reply\",\n \"message:writing\": \"typ\",\n \"message:read\": \"read_receipt\",\n\n \"user:create\": \"event\", // log:subscribe\n \"user:remove\": \"event\", // log:unsubscribe\n\n \"thread:update\": \"event\",\n \"thread:title_change\": \"event\", // log:thread-name\n \"thread:photo_replaced\": \"event\", // log:thread-image\n \"thread:theme_changed\": \"event\", // log:thread-color\n \"thread:nickname_changed\": \"event\", // log:user-nickname\n \"thread:admin_changed\": \"event\", // log:admin-text\n} as const satisfies Record<keyof ConduitEvents, string>;\n\ntype FcaEventName = (typeof FCA_EVENT_MAP)[keyof typeof FCA_EVENT_MAP];\n\nexport function toFcaEvent(event: keyof ConduitEvents): FcaEventName {\n return FCA_EVENT_MAP[event];\n}\n","export class ConduitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ConduitError\";\n }\n\n public static new(message: string) {\n return new ConduitError(message);\n }\n\n public static uninitializedClient() {\n return ConduitError.new(\n \"Conduit client not yet initialized. Please call the .login(credentials) method\",\n );\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\nimport { ConduitMessageBody } from \"../types.js\";\n\n/**\n * Provides message-related API methods wrapping the underlying FCA client.\n * Accessible via `client.messages`.\n */\nexport class ConduitMessagesAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Sends a message to a thread.\n * @param body - The message text.\n * @param threadID - The target thread ID.\n */\n send(body: string | ConduitMessageBody, threadID: string): Promise<any> {\n if (typeof body === \"string\") {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.sendMessage(\n { body },\n threadID,\n (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n },\n );\n });\n }\n\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.sendMessage(body, threadID, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Sends a quoted reply to a specific message.\n * @param body - The reply text.\n * @param threadID - The target thread ID.\n * @param messageID - The message ID to reply to.\n */\n reply(\n body: string | ConduitMessageBody,\n threadID: string,\n messageID: string,\n ): Promise<any> {\n if (typeof body === \"string\") {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.sendMessage(\n { body },\n threadID,\n (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n },\n messageID,\n );\n });\n }\n\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.sendMessage(\n body,\n threadID,\n (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n },\n messageID,\n );\n });\n }\n\n /**\n * Edits an existing message.\n * @param messageID - The message ID to edit.\n * @param body - The new message text.\n */\n edit(messageID: string, body: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.editMessage(body, messageID, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Unsends (retracts) a message sent by the bot.\n * @param messageID - The message ID to unsend.\n */\n unsend(messageID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.unsendMessage(messageID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Deletes a message.\n * @param messageID - The message ID to delete.\n */\n delete(messageID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.deleteMessage(messageID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Adds or removes a reaction on a message.\n * @param emoji - The emoji reaction string.\n * @param messageID - The target message ID.\n * @param threadID - The thread the message belongs to.\n */\n react(emoji: string, messageID: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.setMessageReaction(\n emoji,\n messageID,\n (err: any) => {\n if (err) reject(err);\n else resolve(null);\n },\n threadID,\n );\n });\n }\n\n /**\n * Sends a typing indicator to a thread.\n * @param threadID - The target thread ID.\n */\n sendTypingIndicator(threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.sendTypingIndicator(threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Marks a message as read.\n * @param messageID - The message ID to mark as read.\n */\n markAsRead(messageID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.markAsRead(messageID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Uploads a file attachment and returns an attachment object.\n * @param file - A readable stream or file buffer.\n */\n uploadAttachment(file: any): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.uploadAttachment(file, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Forwards an existing attachment to another thread.\n * @param attachmentID - The attachment ID to forward.\n * @param threadID - The target thread ID.\n */\n forwardAttachment(attachmentID: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.forwardAttachment(attachmentID, threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Shares a contact card to a thread.\n * @param userID - The user ID of the contact to share.\n * @param threadID - The target thread ID.\n */\n shareContact(userID: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.shareContact(userID, threadID, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Changes the color theme of a thread.\n * @param color - The color hex string.\n * @param threadID - The target thread ID.\n */\n changeThreadColor(color: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.changeThreadColor(color, threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Changes the quick-reaction emoji of a thread.\n * @param emoji - The emoji string.\n * @param threadID - The target thread ID.\n */\n changeThreadEmoji(emoji: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.changeThreadEmoji(emoji, threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Fetches a specific message by ID.\n * @param messageID - The message ID to fetch.\n */\n getMessage(messageID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getMessage(messageID, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Returns all available thread color themes.\n */\n getThreadColors(): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getThreadColors((err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\n\n/**\n * Provides thread-related API methods wrapping the underlying FCA client.\n * Accessible via `client.threads`.\n */\nexport class ConduitThreadsAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Fetches detailed info about a thread.\n * @param threadID - The thread ID to query.\n */\n getInfo(threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getThreadInfo(threadID, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Fetches a paginated list of threads.\n * @param limit - Number of threads to return.\n * @param cursor - Pagination cursor, or `null` for the first page.\n * @param folders - Folder filters e.g. `[\"INBOX\"]`.\n */\n getList(limit: number, cursor: any, folders: string[]): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getThreadList(\n limit,\n cursor,\n folders,\n (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n },\n );\n });\n }\n\n /**\n * Fetches message history for a thread.\n * @param threadID - The thread ID to query.\n * @param limit - Number of messages to return.\n */\n getHistory(threadID: string, limit: number): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getThreadHistory(\n threadID,\n limit,\n undefined,\n (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n },\n );\n });\n }\n\n /**\n * Searches for threads by name or keyword.\n * @param query - The search query string.\n */\n search(query: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.searchForThread(query, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Creates a new group conversation.\n * @param userIDs - Array of user IDs to add to the group.\n * @param name - Optional group name.\n */\n createGroup(userIDs: string[], name?: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.createNewGroup(userIDs, name, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Adds a user to an existing group thread.\n * @param userID - The user ID to add.\n * @param threadID - The target group thread ID.\n */\n addUser(userID: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.addUserToGroup(userID, threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Removes a user from a group thread.\n * @param userID - The user ID to remove.\n * @param threadID - The target group thread ID.\n */\n removeUser(userID: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.removeUserFromGroup(userID, threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Promotes or demotes a user's admin status in a group.\n * @param userID - The target user ID.\n * @param threadID - The group thread ID.\n * @param admin - `true` to promote, `false` to demote.\n */\n changeAdminStatus(\n userID: string,\n threadID: string,\n admin: boolean,\n ): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.changeAdminStatus(\n userID,\n threadID,\n admin,\n (err: any) => {\n if (err) reject(err);\n else resolve(null);\n },\n );\n });\n }\n\n /**\n * Updates the group's profile image.\n * @param image - A readable stream or file buffer.\n * @param threadID - The target group thread ID.\n */\n changeGroupImage(image: any, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.changeGroupImage(image, threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Sets a participant's nickname in a thread.\n * @param nickname - The new nickname. Pass an empty string to clear.\n * @param threadID - The thread ID.\n * @param userID - The target user ID.\n */\n changeNickname(\n nickname: string,\n threadID: string,\n userID: string,\n ): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.changeNickname(\n nickname,\n threadID,\n userID,\n (err: any) => {\n if (err) reject(err);\n else resolve(null);\n },\n );\n });\n }\n\n /**\n * Changes the title of a group thread.\n * @param title - The new group title.\n * @param threadID - The target group thread ID.\n */\n setTitle(title: string, threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.setTitle(title, threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Creates a poll in a thread.\n * @param title - The poll question.\n * @param threadID - The target thread ID.\n * @param options - Array of answer options.\n */\n createPoll(title: string, threadID: string, options: string[]): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.createPoll(\n title,\n threadID,\n options,\n (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n },\n );\n });\n }\n\n /**\n * Deletes a thread.\n * @param threadID - The thread ID to delete.\n */\n delete(threadID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.deleteThread(threadID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Mutes or unmutes notifications for a thread.\n * @param threadID - The target thread ID.\n * @param muteUntil - Timestamp (ms) to mute until. Pass `-1` to mute indefinitely, `0` to unmute.\n */\n mute(threadID: string, muteUntil: number): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.muteThread(threadID, muteUntil, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Accepts or declines a message request.\n * @param threadID - The thread ID of the request.\n * @param accept - `true` to accept, `false` to decline.\n */\n handleMessageRequest(threadID: string, accept: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.handleMessageRequest(threadID, accept, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\n\n/**\n * Provides user-related API methods wrapping the underlying FCA client.\n * Accessible via `client.users`.\n */\nexport class ConduitUsersAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Fetches info for one or more users by ID.\n * @param userID - A single user ID or an array of user IDs.\n */\n getInfo(userID: string | string[]): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getUserInfo(\n Array.isArray(userID) ? userID : [userID],\n (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n },\n );\n });\n }\n\n /**\n * Resolves a vanity URL or username to a Facebook user ID.\n * @param vanity - The vanity name or profile URL slug.\n */\n getID(vanity: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getUserID(vanity, (err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n /**\n * Returns the authenticated user's friends list.\n */\n getFriendsList(): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.getFriendsList((err: any, data: any) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n}\n","import { MessengerBot } from \"@dongdev/fca-unofficial\";\n\n/**\n * Provides account-related API methods wrapping the underlying FCA client.\n * Accessible via `client.account`.\n */\nexport class ConduitAccountAPI {\n constructor(private readonly bot: MessengerBot) {}\n\n /**\n * Returns the logged-in user's Facebook ID.\n */\n getCurrentUserID(): string {\n return this.bot.ctx.api.getCurrentUserID();\n }\n\n /**\n * Blocks or unblocks a user.\n * @param userID - The target user ID.\n * @param block - `true` to block, `false` to unblock.\n */\n blockUser(userID: string, block: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.changeBlockedStatus(userID, block, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Accepts or declines a friend request.\n * @param userID - The user ID who sent the request.\n * @param accept - `true` to accept, `false` to decline.\n */\n handleFriendRequest(userID: string, accept: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.handleFriendRequest(userID, accept, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Removes a user from the friends list.\n * @param userID - The target user ID.\n */\n unfriend(userID: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.unfriend(userID, (err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n\n /**\n * Ends the current session and invalidates cookies.\n */\n logout(): Promise<any> {\n return new Promise((resolve, reject) => {\n this.bot.ctx.api.logout((err: any) => {\n if (err) reject(err);\n else resolve(null);\n });\n });\n }\n}\n","import { createMessengerBot, MessengerBot } from \"@dongdev/fca-unofficial\";\nimport {\n ConduitClientConfig,\n ConduitCredentials,\n ConduitEvents,\n Middleware,\n} from \"../types.js\";\nimport { toFcaEvent } from \"../utils/toFcaEvent.js\";\nimport { ConduitError } from \"../errors/ConduitError.js\";\nimport { ConduitMessagesAPI } from \"../api/ConduitMessagesAPI.js\";\nimport { ConduitThreadsAPI } from \"../api/ConduitThreadsAPI.js\";\nimport { ConduitUsersAPI } from \"../api/ConduitUsersAPI.js\";\nimport { ConduitAccountAPI } from \"../api/ConduitAccountAPI.js\";\n\n/**\n * Set of Conduit events that are dispatched via the fan-out mechanism,\n * meaning they are all sourced from a single underlying `threadUpdate` FCA event.\n */\nconst FANOUT_EVENTS = new Set<keyof ConduitEvents>([\n \"user:create\",\n \"user:remove\",\n \"thread:update\",\n \"thread:title_change\",\n \"thread:photo_replaced\",\n \"thread:theme_changed\",\n \"thread:nickname_changed\",\n \"thread:admin_changed\",\n]);\n\n/**\n * Maps FCA `logMessageType` strings to their corresponding Conduit event keys.\n * Used during fan-out to route `threadUpdate` payloads to the correct event stack.\n */\nconst LOG_MESSAGE_TYPE_MAP: Record<string, keyof ConduitEvents> = {\n \"log:subscribe\": \"user:create\",\n \"log:unsubscribe\": \"user:remove\",\n \"log:thread-name\": \"thread:title_change\",\n \"log:thread-image\": \"thread:photo_replaced\",\n \"log:thread-color\": \"thread:theme_changed\",\n \"log:user-nickname\": \"thread:nickname_changed\",\n \"log:thread-admins\": \"thread:admin_changed\",\n};\n\n/**\n * High-level Messenger client that wraps the FCA unofficial API and exposes\n * a middleware-based event system modelled after Express/Koa.\n *\n * @example\n * ```ts\n * const conduit = new ConduitClient(config);\n * await conduit.login(credentials);\n * conduit.on(\"message:text\", async (ctx, next) => {\n * console.log(ctx.body);\n * await next();\n * });\n * ```\n */\nexport class ConduitClient {\n /** Underlying FCA bot instance. `null` until {@link login} resolves. */\n private _client: MessengerBot | null;\n\n /** Lazily-initialized messages API wrapper. */\n private _messages: ConduitMessagesAPI | null = null;\n\n /** Lazily-initialized threads API wrapper. */\n private _threads: ConduitThreadsAPI | null = null;\n\n /** Lazily-initialized users API wrapper. */\n private _users: ConduitUsersAPI | null = null;\n\n /** Lazily-initialized account API wrapper. */\n private _account: ConduitAccountAPI | null = null;\n\n /** Configuration forwarded to the FCA layer on login. */\n private config: ConduitClientConfig;\n\n /**\n * Registry of middleware stacks keyed by Conduit event name.\n * Each stack is executed in insertion order via {@link runStack}.\n */\n private middlewares: Map<\n keyof ConduitEvents,\n Middleware<keyof ConduitEvents>[]\n >;\n\n /**\n * Guards against registering the `threadUpdate` fan-out listener more than once,\n * regardless of how many fan-out events are subscribed to.\n */\n private fanOutBound: boolean;\n\n /**\n * @param config - Client configuration passed through to the FCA bot.\n */\n constructor(config: ConduitClientConfig) {\n this._client = null;\n this.config = {\n ...config,\n logLevel: config.logLevel ?? \"silent\",\n };\n this.middlewares = new Map();\n this.fanOutBound = false;\n }\n\n /**\n * API for message operations.\n *\n * Provides methods for sending messages, replying to threads,\n * reacting to messages, editing content, deleting messages,\n * and other message-level interactions.\n */\n get messages(): ConduitMessagesAPI {\n return (this._messages ??= new ConduitMessagesAPI(this.client));\n }\n\n /**\n * API for thread management operations.\n *\n * Includes functionality for retrieving thread data,\n * managing participants, updating thread metadata (such as title),\n * and handling thread-level features like polls.\n */\n get threads(): ConduitThreadsAPI {\n return (this._threads ??= new ConduitThreadsAPI(this.client));\n }\n\n /**\n * API for user-related operations.\n *\n * Supports fetching user profiles, resolving user IDs,\n * and accessing social graph data such as friends or connections.\n */\n get users(): ConduitUsersAPI {\n return (this._users ??= new ConduitUsersAPI(this.client));\n }\n\n /**\n * API for account-level operations.\n *\n * Exposes actions tied to the authenticated account such as\n * retrieving the current user ID, managing friend requests,\n * blocking users, and logging out.\n */\n get account(): ConduitAccountAPI {\n return (this._account ??= new ConduitAccountAPI(this.client));\n }\n\n /**\n * Authenticates with Messenger and initialises the underlying FCA bot.\n * Must be called before any events can be received.\n *\n * @param credentials - App-state, cookies, or email/password credentials.\n * @returns The current instance for chaining.\n */\n public async login(credentials: ConduitCredentials): Promise<this> {\n this._client = await createMessengerBot(\n {\n appState: credentials.appstate,\n Cookie: credentials.cookies,\n email: credentials.account?.email,\n password: credentials.account?.password,\n },\n this.config,\n );\n return this;\n }\n\n /**\n * Registers one or more middleware handlers for a Conduit event.\n *\n * The first call for a given event also binds the corresponding FCA listener.\n * Fan-out events share a single `threadUpdate` FCA binding; all others get\n * their own dedicated listener via {@link bindConduitEvent}.\n *\n * @param event - The Conduit event name to subscribe to.\n * @param middlewares - Ordered middleware functions to push onto the stack.\n * @returns The current instance for chaining.\n */\n public on<K extends keyof ConduitEvents>(\n event: K,\n ...middlewares: Middleware<K>[]\n ): this {\n if (!this.middlewares.has(event)) {\n this.middlewares.set(event, []);\n\n if (FANOUT_EVENTS.has(event)) {\n this.bindFanOutEvents();\n } else {\n this.bindConduitEvent(event);\n }\n }\n this.middlewares\n .get(event)!\n .push(...(middlewares as Middleware<keyof ConduitEvents>[]));\n return this;\n }\n\n /**\n * Registers middleware directly against a raw FCA event, bypassing the\n * Conduit event abstraction entirely. Useful for events not yet mapped\n * by the Conduit layer.\n *\n * @param event - Raw FCA event name.\n * @param middlewares - Middleware functions receiving the raw FCA payload.\n * @returns The current instance for chaining.\n */\n public onFca(\n event: string,\n ...middlewares: ((data: any, next?: () => Promise<void>) => Promise<void>)[]\n ): this {\n this.client.on(event, async (data: any) => {\n await this.runStack(\n middlewares as Middleware<keyof ConduitEvents>[],\n data,\n );\n });\n return this;\n }\n\n /**\n * Uses the raw legacy api. Not recommended as this do not\n * have any type safety and auto-completion features. Use\n * at your own risk.\n *\n * @returns The raw api context.\n * */\n public get api(): any {\n return this.client.ctx.api;\n }\n\n /**\n * Translates a single Conduit event to its FCA equivalent and attaches a\n * listener that enriches the raw payload before running the middleware stack.\n *\n * @param event - The Conduit event to bind.\n */\n private bindConduitEvent<K extends keyof ConduitEvents>(event: K) {\n const fcaEvent = toFcaEvent(event);\n this.client.on(fcaEvent, async (raw: any) => {\n const stack = this.middlewares.get(event) ?? [];\n await this.runStack(stack, this.enrich(event, raw));\n });\n }\n\n /**\n * Returns the initialized Messenger client instance.\n *\n * This getter enforces the client lifecycle by ensuring that the underlying\n * FCA bot has been created via {@link login} before any access is allowed.\n *\n * @throws {ConduitError} If the client has not been initialized yet (login not called).\n * @returns {MessengerBot} The active Messenger bot instance.\n */\n private get client(): MessengerBot {\n if (this._client) return this._client;\n throw ConduitError.uninitializedClient();\n }\n\n /**\n * Attaches a single `threadUpdate` FCA listener that fans out to all\n * relevant Conduit events based on the incoming `logMessageType`.\n *\n * `thread:update` always fires with the raw payload when its stack is\n * non-empty. Specific sub-events (e.g. `thread:title_change`) fire only\n * when their stack is also non-empty and a matching `logMessageType` exists.\n *\n * Calling this method more than once is a no-op.\n */\n private bindFanOutEvents() {\n if (this.fanOutBound) return;\n this.fanOutBound = true;\n\n this.client.on(\"threadUpdate\", async (raw: any) => {\n const { logMessageType } = raw;\n\n const updateStack = this.middlewares.get(\"thread:update\") ?? [];\n if (updateStack.length > 0) {\n await this.runStack(updateStack, this.enrich(\"thread:update\", raw));\n }\n\n const conduitEvent = LOG_MESSAGE_TYPE_MAP[logMessageType];\n if (!conduitEvent) return;\n\n const stack = this.middlewares.get(conduitEvent) ?? [];\n if (stack.length === 0) return;\n\n await this.runStack(stack, this.enrich(conduitEvent, raw));\n });\n }\n\n /**\n * Augments a raw FCA payload with convenience helpers scoped to the event.\n *\n * All events receive a `send` helper for replying to the source thread.\n * Events in the `message:` namespace additionally receive:\n * - `reply` — sends a quoted reply to the triggering message.\n * - `react` — sets an emoji reaction on the triggering message.\n *\n * @param event - The Conduit event being enriched.\n * @param raw - The raw FCA payload.\n * @returns The enriched context object passed to middleware.\n */\n private enrich(event: keyof ConduitEvents, raw: any): any {\n const threadID = raw.threadID;\n const messageID = raw.messageID;\n\n const sendable = {\n send: (body: string) => this.messages.send(body, threadID),\n };\n\n if (event.startsWith(\"message:\")) {\n return {\n ...raw,\n ...sendable,\n reply: (body: string) => this.messages.reply(body, threadID, messageID),\n react: (emoji: string) =>\n this.messages.react(emoji, messageID, threadID),\n };\n }\n\n return { ...raw, ...sendable };\n }\n\n /**\n * Executes a middleware stack sequentially, where each handler must call\n * `next()` to advance to the following handler.\n *\n * @param stack - Ordered array of middleware functions to execute.\n * @param data - The enriched event payload threaded through the stack.\n */\n private async runStack(stack: Middleware<keyof ConduitEvents>[], data: any) {\n let i = 0;\n const next = async () => {\n if (i < stack.length) {\n await stack[i++](data as never, next);\n }\n };\n await next();\n }\n}\n"]}
|
package/docs/DOCS.md
CHANGED
|
@@ -78,7 +78,7 @@ client.onFca(event: string, ...middlewares): this
|
|
|
78
78
|
|
|
79
79
|
### `.api`
|
|
80
80
|
|
|
81
|
-
Direct access to the raw FCA API.
|
|
81
|
+
Direct access to the raw FCA API. No type safety — use as a last resort.
|
|
82
82
|
|
|
83
83
|
```ts
|
|
84
84
|
client.api.getThreadList(10, null, ["INBOX"]);
|
|
@@ -100,20 +100,38 @@ Handles message-level operations.
|
|
|
100
100
|
|
|
101
101
|
### `.send(body, threadID)`
|
|
102
102
|
|
|
103
|
-
Sends a
|
|
103
|
+
Sends a message to a thread. Accepts a plain string or a `ConduitMessageBody` for rich messages.
|
|
104
104
|
|
|
105
105
|
```ts
|
|
106
106
|
await client.messages.send("hello", threadID);
|
|
107
|
+
|
|
108
|
+
await client.messages.send(
|
|
109
|
+
{
|
|
110
|
+
body: "hey @user",
|
|
111
|
+
mentions: [{ tag: "@user", id: "uid", fromIndex: 4 }],
|
|
112
|
+
attachment: [stream],
|
|
113
|
+
},
|
|
114
|
+
threadID,
|
|
115
|
+
);
|
|
107
116
|
```
|
|
108
117
|
|
|
109
118
|
---
|
|
110
119
|
|
|
111
120
|
### `.reply(body, threadID, messageID)`
|
|
112
121
|
|
|
113
|
-
Sends a reply to a specific message.
|
|
122
|
+
Sends a quoted reply to a specific message. Accepts a plain string or a `ConduitMessageBody`.
|
|
114
123
|
|
|
115
124
|
```ts
|
|
116
125
|
await client.messages.reply("got it", threadID, messageID);
|
|
126
|
+
|
|
127
|
+
await client.messages.reply(
|
|
128
|
+
{
|
|
129
|
+
body: "got it",
|
|
130
|
+
attachment: [stream],
|
|
131
|
+
},
|
|
132
|
+
threadID,
|
|
133
|
+
messageID,
|
|
134
|
+
);
|
|
117
135
|
```
|
|
118
136
|
|
|
119
137
|
---
|
|
@@ -395,11 +413,11 @@ await client.threads.delete(threadID);
|
|
|
395
413
|
|
|
396
414
|
### `.mute(threadID, muteUntil)`
|
|
397
415
|
|
|
398
|
-
Mutes or unmutes a thread.
|
|
416
|
+
Mutes or unmutes a thread. Pass `-1` to mute indefinitely, `0` to unmute.
|
|
399
417
|
|
|
400
418
|
```ts
|
|
401
|
-
await client.threads.mute(threadID, -1);
|
|
402
|
-
await client.threads.mute(threadID, 0);
|
|
419
|
+
await client.threads.mute(threadID, -1); // mute forever
|
|
420
|
+
await client.threads.mute(threadID, 0); // unmute
|
|
403
421
|
```
|
|
404
422
|
|
|
405
423
|
---
|
|
@@ -426,7 +444,7 @@ client.users;
|
|
|
426
444
|
|
|
427
445
|
### `.getInfo(userID)`
|
|
428
446
|
|
|
429
|
-
Fetches user info.
|
|
447
|
+
Fetches user info. Accepts a single ID or an array.
|
|
430
448
|
|
|
431
449
|
```ts
|
|
432
450
|
const user = await client.users.getInfo("uid");
|
|
@@ -437,7 +455,7 @@ const users = await client.users.getInfo(["uid1", "uid2"]);
|
|
|
437
455
|
|
|
438
456
|
### `.getID(vanity)`
|
|
439
457
|
|
|
440
|
-
Resolves username to ID.
|
|
458
|
+
Resolves a vanity username to a Facebook user ID.
|
|
441
459
|
|
|
442
460
|
```ts
|
|
443
461
|
const id = await client.users.getID("zuck");
|
|
@@ -447,7 +465,7 @@ const id = await client.users.getID("zuck");
|
|
|
447
465
|
|
|
448
466
|
### `.getFriendsList()`
|
|
449
467
|
|
|
450
|
-
Returns friends list.
|
|
468
|
+
Returns the authenticated user's friends list.
|
|
451
469
|
|
|
452
470
|
```ts
|
|
453
471
|
const friends = await client.users.getFriendsList();
|
|
@@ -467,7 +485,7 @@ client.account;
|
|
|
467
485
|
|
|
468
486
|
### `.getCurrentUserID()`
|
|
469
487
|
|
|
470
|
-
Returns current user ID.
|
|
488
|
+
Returns current user ID. Synchronous.
|
|
471
489
|
|
|
472
490
|
```ts
|
|
473
491
|
const myID = client.account.getCurrentUserID();
|
|
@@ -480,14 +498,15 @@ const myID = client.account.getCurrentUserID();
|
|
|
480
498
|
Blocks or unblocks a user.
|
|
481
499
|
|
|
482
500
|
```ts
|
|
483
|
-
await client.account.blockUser(userID, true);
|
|
501
|
+
await client.account.blockUser(userID, true); // block
|
|
502
|
+
await client.account.blockUser(userID, false); // unblock
|
|
484
503
|
```
|
|
485
504
|
|
|
486
505
|
---
|
|
487
506
|
|
|
488
507
|
### `.handleFriendRequest(userID, accept)`
|
|
489
508
|
|
|
490
|
-
|
|
509
|
+
Accepts or declines a friend request.
|
|
491
510
|
|
|
492
511
|
```ts
|
|
493
512
|
await client.account.handleFriendRequest(userID, true);
|
|
@@ -497,7 +516,7 @@ await client.account.handleFriendRequest(userID, true);
|
|
|
497
516
|
|
|
498
517
|
### `.unfriend(userID)`
|
|
499
518
|
|
|
500
|
-
Removes a
|
|
519
|
+
Removes a user from the friends list.
|
|
501
520
|
|
|
502
521
|
```ts
|
|
503
522
|
await client.account.unfriend(userID);
|
|
@@ -507,7 +526,7 @@ await client.account.unfriend(userID);
|
|
|
507
526
|
|
|
508
527
|
### `.logout()`
|
|
509
528
|
|
|
510
|
-
|
|
529
|
+
Ends the session and invalidates cookies.
|
|
511
530
|
|
|
512
531
|
```ts
|
|
513
532
|
await client.account.logout();
|
|
@@ -532,6 +551,20 @@ interface ConduitCredentials {
|
|
|
532
551
|
|
|
533
552
|
---
|
|
534
553
|
|
|
554
|
+
### `ConduitMessageBody`
|
|
555
|
+
|
|
556
|
+
Used by `send()` and `reply()` for rich messages with attachments and mentions.
|
|
557
|
+
|
|
558
|
+
```ts
|
|
559
|
+
interface ConduitMessageBody {
|
|
560
|
+
body?: string;
|
|
561
|
+
mentions?: { tag: string; id: string; fromIndex: number }[];
|
|
562
|
+
attachment?: any[];
|
|
563
|
+
}
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
---
|
|
567
|
+
|
|
535
568
|
### `Message`
|
|
536
569
|
|
|
537
570
|
```ts
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theophilusdev/conduit",
|
|
3
3
|
"description": "A simple FCA wrapper library with typescript support",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.1.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "tsup",
|
|
18
|
+
"publish": "npm run build && npm publish",
|
|
18
19
|
"typecheck": "tsc --noEmit"
|
|
19
20
|
},
|
|
20
21
|
"keywords": [
|