From 8676c074488beb6e9775f06e6374b2d1f2cbde1b Mon Sep 17 00:00:00 2001 From: Gabi Simons Date: Mon, 13 Apr 2026 11:09:00 +0000 Subject: [PATCH] feat(v2): support async channel adapter factories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Channel adapter factories can now return a Promise, enabling adapters that need async initialization like loading auth state from disk (e.g. WhatsApp reading credentials via useMultiFileAuthState). Existing sync factories are unaffected — await on a sync return is a no-op. All current adapters remain synchronous. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/channels/adapter.ts | 2 +- src/channels/channel-registry.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/channels/adapter.ts b/src/channels/adapter.ts index 4d18a0e..1ae34bc 100644 --- a/src/channels/adapter.ts +++ b/src/channels/adapter.ts @@ -97,7 +97,7 @@ export interface ChannelAdapter { } /** Factory function that creates a channel adapter (returns null if credentials missing). */ -export type ChannelAdapterFactory = () => ChannelAdapter | null; +export type ChannelAdapterFactory = () => ChannelAdapter | Promise | null; /** Registration entry for a channel adapter. */ export interface ChannelRegistration { diff --git a/src/channels/channel-registry.ts b/src/channels/channel-registry.ts index a2981a6..7778cfd 100644 --- a/src/channels/channel-registry.ts +++ b/src/channels/channel-registry.ts @@ -47,7 +47,7 @@ export function getChannelContainerConfig(name: string): ChannelRegistration['co export async function initChannelAdapters(setupFn: (adapter: ChannelAdapter) => ChannelSetup): Promise { for (const [name, registration] of registry) { try { - const adapter = registration.factory(); + const adapter = await registration.factory(); if (!adapter) { log.warn('Channel credentials missing, skipping', { channel: name }); continue;