import type { CanonResolveAdmissionResult, CreateContactRequestResult, CreateConversationOptions, CreateConversationResult, ResolveAdmissionTargetInput, SendMessageOptions } from './types.js'; import type { SendToInput, SendToResult, VerbSessionConfig } from '@canonmsg/backend-contracts'; export interface CanonReachOutClient { resolveAdmission(target: string | ResolveAdmissionTargetInput): Promise; createConversation(options: CreateConversationOptions): Promise; sendMessage(conversationId: string, text: string, options?: SendMessageOptions): Promise<{ messageId: string; }>; createContactRequest(targetUserId: string, message?: string | null): Promise; /** * Canonical first-party path. Optional so existing structural adapters keep * their public compatibility; CanonClient implements it. */ sendTo?(options: SendToInput): Promise; } export interface CanonReachOutBaseOptions { text?: string | null; requestMessage?: string | null; sendMessageOptions?: SendMessageOptions; sessionConfig?: VerbSessionConfig | null; sessionSelection?: CreateConversationOptions['sessionSelection']; } export type CanonReachOutOptions = CanonReachOutBaseOptions & ResolveAdmissionTargetInput; export type CanonReachOutResult = { status: 'messaged'; conversationId: string; messageId?: string; selfContextId?: string; created?: boolean; reused?: boolean; sessionSelection?: CreateConversationResult['sessionSelection']; } | { status: 'requested'; requestId: string | null; deferredIntentId?: string | null; } | { status: 'pending'; requestId: string | null; deferredIntentId?: string | null; } | { status: 'setup_required'; reason: string; } | { status: 'no_session'; reason: string; } | { status: 'blocked' | 'unavailable'; reason: string; }; /** * Admission-aware direct reach-out for runtime clients. It deliberately keeps * backend conversation creation fail-closed; callers choose this helper when * their product behavior is "message if reachable, otherwise request access." */ export declare function reachOutToCanonContact(client: CanonReachOutClient, options: CanonReachOutOptions): Promise;