// Defines native approval runtime delivery transport contracts. import type { ChannelApprovalNativePlannedTarget } from "./approval-native-delivery.js"; import type { ChannelApprovalKind } from "./approval-types.js"; /** Prepared delivery target plus the stable key used to avoid duplicate native messages. */ export type PreparedChannelNativeApprovalTarget = { dedupeKey: string; target: TPreparedTarget; }; /** Channel hooks that prepare adapter targets and deliver pending approval content. */ export type ChannelNativeApprovalTransportSpec< TPendingEntry, TPreparedTarget, TPendingContent, TRequest, > = { prepareTarget: (params: { plannedTarget: ChannelApprovalNativePlannedTarget; request: TRequest; approvalKind: ChannelApprovalKind; pendingContent: TPendingContent; }) => | PreparedChannelNativeApprovalTarget | null | Promise | null>; deliverTarget: (params: { plannedTarget: ChannelApprovalNativePlannedTarget; preparedTarget: TPreparedTarget; request: TRequest; approvalKind: ChannelApprovalKind; pendingContent: TPendingContent; }) => TPendingEntry | null | Promise; }; /** Optional observer hooks for per-target native approval delivery outcomes. */ export type ChannelNativeApprovalDeliveryCallbacks< TPendingEntry, TPreparedTarget, TPendingContent, TRequest, > = { onDeliveryError?: (params: { error: unknown; plannedTarget: ChannelApprovalNativePlannedTarget; request: TRequest; approvalKind: ChannelApprovalKind; pendingContent: TPendingContent; }) => void; onDuplicateSkipped?: (params: { plannedTarget: ChannelApprovalNativePlannedTarget; preparedTarget: PreparedChannelNativeApprovalTarget; request: TRequest; approvalKind: ChannelApprovalKind; pendingContent: TPendingContent; }) => void; onDelivered?: (params: { plannedTarget: ChannelApprovalNativePlannedTarget; preparedTarget: PreparedChannelNativeApprovalTarget; request: TRequest; approvalKind: ChannelApprovalKind; pendingContent: TPendingContent; entry: TPendingEntry; }) => void; };