From 3349cc5ea0976d5c450712953232c1c466541eb4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 22:20:32 +0100 Subject: [PATCH] refactor: share approval native adapter types --- src/infra/approval-handler-runtime-types.ts | 164 +++++++------------- 1 file changed, 59 insertions(+), 105 deletions(-) diff --git a/src/infra/approval-handler-runtime-types.ts b/src/infra/approval-handler-runtime-types.ts index 16ab6b8d276..1ff46b620bd 100644 --- a/src/infra/approval-handler-runtime-types.ts +++ b/src/infra/approval-handler-runtime-types.ts @@ -69,18 +69,19 @@ export type ChannelApprovalNativePresentationAdapter< | Promise>; }; -export type ChannelApprovalNativeTransportAdapter< +type ChannelApprovalNativeTransportAdapterForView< TPreparedTarget = unknown, TPendingEntry = unknown, TPendingPayload = unknown, TFinalPayload = unknown, + TPendingView extends PendingApprovalView = PendingApprovalView, > = { prepareTarget: ( params: ChannelApprovalCapabilityHandlerContext & { plannedTarget: ChannelApprovalNativePlannedTarget; request: ApprovalRequest; approvalKind: ChannelApprovalKind; - view: PendingApprovalView; + view: TPendingView; pendingPayload: TPendingPayload; }, ) => @@ -93,7 +94,7 @@ export type ChannelApprovalNativeTransportAdapter< preparedTarget: TPreparedTarget; request: ApprovalRequest; approvalKind: ChannelApprovalKind; - view: PendingApprovalView; + view: TPendingView; pendingPayload: TPendingPayload; }, ) => TPendingEntry | null | Promise; @@ -112,14 +113,31 @@ export type ChannelApprovalNativeTransportAdapter< ) => Promise; }; -export type ChannelApprovalNativeInteractionAdapter = { +export type ChannelApprovalNativeTransportAdapter< + TPreparedTarget = unknown, + TPendingEntry = unknown, + TPendingPayload = unknown, + TFinalPayload = unknown, +> = ChannelApprovalNativeTransportAdapterForView< + TPreparedTarget, + TPendingEntry, + TPendingPayload, + TFinalPayload +>; + +type ChannelApprovalNativeInteractionAdapterForView< + TPendingEntry = unknown, + TBinding = unknown, + TPendingPayload = unknown, + TPendingView extends PendingApprovalView = PendingApprovalView, +> = { bindPending?: ( params: ChannelApprovalCapabilityHandlerContext & { entry: TPendingEntry; request: ApprovalRequest; approvalKind: ChannelApprovalKind; - view: PendingApprovalView; - pendingPayload: unknown; + view: TPendingView; + pendingPayload: TPendingPayload; }, ) => TBinding | null | Promise; unbindPending?: ( @@ -138,10 +156,16 @@ export type ChannelApprovalNativeInteractionAdapter Promise; }; -export type ChannelApprovalNativeObserveAdapter< +export type ChannelApprovalNativeInteractionAdapter< + TPendingEntry = unknown, + TBinding = unknown, +> = ChannelApprovalNativeInteractionAdapterForView; + +type ChannelApprovalNativeObserveAdapterForView< TPreparedTarget = unknown, TPendingPayload = unknown, TPendingEntry = unknown, + TPendingView extends PendingApprovalView = PendingApprovalView, > = { onDeliveryError?: ( params: ChannelApprovalCapabilityHandlerContext & { @@ -149,7 +173,7 @@ export type ChannelApprovalNativeObserveAdapter< plannedTarget: ChannelApprovalNativePlannedTarget; request: ApprovalRequest; approvalKind: ChannelApprovalKind; - view: PendingApprovalView; + view: TPendingView; pendingPayload: TPendingPayload; }, ) => void; @@ -159,7 +183,7 @@ export type ChannelApprovalNativeObserveAdapter< preparedTarget: PreparedChannelNativeApprovalTarget; request: ApprovalRequest; approvalKind: ChannelApprovalKind; - view: PendingApprovalView; + view: TPendingView; pendingPayload: TPendingPayload; }, ) => void; @@ -169,13 +193,19 @@ export type ChannelApprovalNativeObserveAdapter< preparedTarget: PreparedChannelNativeApprovalTarget; request: ApprovalRequest; approvalKind: ChannelApprovalKind; - view: PendingApprovalView; + view: TPendingView; pendingPayload: TPendingPayload; entry: TPendingEntry; }, ) => void; }; +export type ChannelApprovalNativeObserveAdapter< + TPreparedTarget = unknown, + TPendingPayload = unknown, + TPendingEntry = unknown, +> = ChannelApprovalNativeObserveAdapterForView; + export type ChannelApprovalNativeRuntimeAdapter< TPendingPayload = unknown, TPreparedTarget = unknown, @@ -239,99 +269,23 @@ export type ChannelApprovalNativeRuntimeSpec< | ChannelApprovalNativeFinalAction | Promise>; }; - transport: { - prepareTarget: ( - params: ChannelApprovalCapabilityHandlerContext & { - plannedTarget: ChannelApprovalNativePlannedTarget; - request: ApprovalRequest; - approvalKind: ChannelApprovalKind; - view: TPendingView; - pendingPayload: TPendingPayload; - }, - ) => - | PreparedChannelNativeApprovalTarget - | null - | Promise | null>; - deliverPending: ( - params: ChannelApprovalCapabilityHandlerContext & { - plannedTarget: ChannelApprovalNativePlannedTarget; - preparedTarget: TPreparedTarget; - request: ApprovalRequest; - approvalKind: ChannelApprovalKind; - view: TPendingView; - pendingPayload: TPendingPayload; - }, - ) => TPendingEntry | null | Promise; - updateEntry?: ( - params: ChannelApprovalCapabilityHandlerContext & { - entry: TPendingEntry; - payload: TFinalPayload; - phase: "resolved" | "expired"; - }, - ) => Promise; - deleteEntry?: ( - params: ChannelApprovalCapabilityHandlerContext & { - entry: TPendingEntry; - phase: "resolved" | "expired"; - }, - ) => Promise; - }; - interactions?: { - bindPending?: ( - params: ChannelApprovalCapabilityHandlerContext & { - entry: TPendingEntry; - request: ApprovalRequest; - approvalKind: ChannelApprovalKind; - view: TPendingView; - pendingPayload: TPendingPayload; - }, - ) => TBinding | null | Promise; - unbindPending?: ( - params: ChannelApprovalCapabilityHandlerContext & { - entry: TPendingEntry; - binding: TBinding; - request: ApprovalRequest; - approvalKind: ChannelApprovalKind; - }, - ) => Promise | void; - clearPendingActions?: ( - params: ChannelApprovalCapabilityHandlerContext & { - entry: TPendingEntry; - phase: "resolved" | "expired"; - }, - ) => Promise; - }; - observe?: { - onDeliveryError?: ( - params: ChannelApprovalCapabilityHandlerContext & { - error: unknown; - plannedTarget: ChannelApprovalNativePlannedTarget; - request: ApprovalRequest; - approvalKind: ChannelApprovalKind; - view: TPendingView; - pendingPayload: TPendingPayload; - }, - ) => void; - onDuplicateSkipped?: ( - params: ChannelApprovalCapabilityHandlerContext & { - plannedTarget: ChannelApprovalNativePlannedTarget; - preparedTarget: PreparedChannelNativeApprovalTarget; - request: ApprovalRequest; - approvalKind: ChannelApprovalKind; - view: TPendingView; - pendingPayload: TPendingPayload; - }, - ) => void; - onDelivered?: ( - params: ChannelApprovalCapabilityHandlerContext & { - plannedTarget: ChannelApprovalNativePlannedTarget; - preparedTarget: PreparedChannelNativeApprovalTarget; - request: ApprovalRequest; - approvalKind: ChannelApprovalKind; - view: TPendingView; - pendingPayload: TPendingPayload; - entry: TPendingEntry; - }, - ) => void; - }; + transport: ChannelApprovalNativeTransportAdapterForView< + TPreparedTarget, + TPendingEntry, + TPendingPayload, + TFinalPayload, + TPendingView + >; + interactions?: ChannelApprovalNativeInteractionAdapterForView< + TPendingEntry, + TBinding, + TPendingPayload, + TPendingView + >; + observe?: ChannelApprovalNativeObserveAdapterForView< + TPreparedTarget, + TPendingPayload, + TPendingEntry, + TPendingView + >; };