import type { ChannelApprovalNativePlannedTarget } from "./approval-native-delivery.js"; import type { ChannelApprovalKind } from "./approval-types.js"; export type PreparedChannelNativeApprovalTarget = { dedupeKey: string; target: TPreparedTarget; }; export type ChannelNativeApprovalTransportSpec = { 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; }; export type ChannelNativeApprovalDeliveryCallbacks = { 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; };