mirror of
https://fastgit.cc/github.com/openclaw/openclaw
synced 2026-04-20 21:02:10 +08:00
refactor: share native approval runtime types
This commit is contained in:
@@ -18,11 +18,11 @@ import type {
|
||||
ChannelApprovalNativeRuntimeAdapter,
|
||||
ChannelApprovalNativeRuntimeSpec,
|
||||
} from "./approval-handler-runtime-types.js";
|
||||
import type { ChannelApprovalNativePlannedTarget } from "./approval-native-delivery.js";
|
||||
import {
|
||||
createChannelNativeApprovalRuntime,
|
||||
type PreparedChannelNativeApprovalTarget,
|
||||
} from "./approval-native-runtime.js";
|
||||
import type {
|
||||
ChannelNativeApprovalDeliveryCallbacks,
|
||||
ChannelNativeApprovalTransportSpec,
|
||||
} from "./approval-native-runtime-types.js";
|
||||
import { createChannelNativeApprovalRuntime } from "./approval-native-runtime.js";
|
||||
import {
|
||||
buildExpiredApprovalView,
|
||||
buildPendingApprovalView,
|
||||
@@ -337,24 +337,7 @@ export type ChannelApprovalHandlerTransportSpec<
|
||||
TPreparedTarget,
|
||||
TPendingContent,
|
||||
TRequest extends ApprovalRequest = ApprovalRequest,
|
||||
> = {
|
||||
prepareTarget: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) =>
|
||||
| PreparedChannelNativeApprovalTarget<TPreparedTarget>
|
||||
| null
|
||||
| Promise<PreparedChannelNativeApprovalTarget<TPreparedTarget> | null>;
|
||||
deliverTarget: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: TPreparedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => TPendingEntry | null | Promise<TPendingEntry | null>;
|
||||
};
|
||||
> = ChannelNativeApprovalTransportSpec<TPendingEntry, TPreparedTarget, TPendingContent, TRequest>;
|
||||
|
||||
export type ChannelApprovalHandlerLifecycleSpec<
|
||||
TPendingEntry,
|
||||
@@ -362,29 +345,12 @@ export type ChannelApprovalHandlerLifecycleSpec<
|
||||
TPendingContent,
|
||||
TRequest extends ApprovalRequest = ApprovalRequest,
|
||||
TResolved extends ApprovalResolved = ApprovalResolved,
|
||||
> = {
|
||||
onDeliveryError?: (params: {
|
||||
error: unknown;
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => void;
|
||||
onDuplicateSkipped?: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: PreparedChannelNativeApprovalTarget<TPreparedTarget>;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => void;
|
||||
onDelivered?: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: PreparedChannelNativeApprovalTarget<TPreparedTarget>;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
entry: TPendingEntry;
|
||||
}) => void;
|
||||
> = ChannelNativeApprovalDeliveryCallbacks<
|
||||
TPendingEntry,
|
||||
TPreparedTarget,
|
||||
TPendingContent,
|
||||
TRequest
|
||||
> & {
|
||||
finalizeResolved: (params: {
|
||||
request: TRequest;
|
||||
resolved: TResolved;
|
||||
|
||||
61
src/infra/approval-native-runtime-types.ts
Normal file
61
src/infra/approval-native-runtime-types.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import type { ChannelApprovalNativePlannedTarget } from "./approval-native-delivery.js";
|
||||
import type { ChannelApprovalKind } from "./approval-types.js";
|
||||
|
||||
export type PreparedChannelNativeApprovalTarget<TPreparedTarget> = {
|
||||
dedupeKey: string;
|
||||
target: TPreparedTarget;
|
||||
};
|
||||
|
||||
export type ChannelNativeApprovalTransportSpec<
|
||||
TPendingEntry,
|
||||
TPreparedTarget,
|
||||
TPendingContent,
|
||||
TRequest,
|
||||
> = {
|
||||
prepareTarget: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) =>
|
||||
| PreparedChannelNativeApprovalTarget<TPreparedTarget>
|
||||
| null
|
||||
| Promise<PreparedChannelNativeApprovalTarget<TPreparedTarget> | null>;
|
||||
deliverTarget: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: TPreparedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => TPendingEntry | null | Promise<TPendingEntry | null>;
|
||||
};
|
||||
|
||||
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<TPreparedTarget>;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => void;
|
||||
onDelivered?: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: PreparedChannelNativeApprovalTarget<TPreparedTarget>;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
entry: TPendingEntry;
|
||||
}) => void;
|
||||
};
|
||||
@@ -6,6 +6,11 @@ import {
|
||||
type ChannelApprovalNativeDeliveryPlan,
|
||||
} from "./approval-native-delivery.js";
|
||||
import { createApprovalNativeRouteReporter } from "./approval-native-route-coordinator.js";
|
||||
import type {
|
||||
ChannelNativeApprovalDeliveryCallbacks,
|
||||
ChannelNativeApprovalTransportSpec,
|
||||
PreparedChannelNativeApprovalTarget,
|
||||
} from "./approval-native-runtime-types.js";
|
||||
import type { ChannelApprovalKind } from "./approval-types.js";
|
||||
import {
|
||||
createExecApprovalChannelRuntime,
|
||||
@@ -21,10 +26,7 @@ import type { PluginApprovalRequest } from "./plugin-approvals.js";
|
||||
type ApprovalRequest = ExecApprovalRequest | PluginApprovalRequest;
|
||||
type ApprovalResolved = ExecApprovalResolved | PluginApprovalResolved;
|
||||
|
||||
export type PreparedChannelNativeApprovalTarget<TPreparedTarget> = {
|
||||
dedupeKey: string;
|
||||
target: TPreparedTarget;
|
||||
};
|
||||
export type { PreparedChannelNativeApprovalTarget } from "./approval-native-runtime-types.js";
|
||||
|
||||
export type ChannelNativeApprovalPlanDeliveryResult<TPendingEntry> = {
|
||||
entries: TPendingEntry[];
|
||||
@@ -147,57 +149,26 @@ type ChannelNativeApprovalRuntimeAdapter<
|
||||
> = Omit<
|
||||
ExecApprovalChannelRuntimeAdapter<TPendingEntry, TRequest, TResolved>,
|
||||
"deliverRequested"
|
||||
> & {
|
||||
channel?: string;
|
||||
channelLabel?: string;
|
||||
accountId?: string | null;
|
||||
nativeAdapter?: ChannelApprovalNativeAdapter | null;
|
||||
resolveApprovalKind?: (request: TRequest) => ChannelApprovalKind;
|
||||
buildPendingContent: (params: {
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
nowMs: number;
|
||||
}) => TPendingContent | Promise<TPendingContent>;
|
||||
prepareTarget: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) =>
|
||||
| PreparedChannelNativeApprovalTarget<TPreparedTarget>
|
||||
| null
|
||||
| Promise<PreparedChannelNativeApprovalTarget<TPreparedTarget> | null>;
|
||||
deliverTarget: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: TPreparedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => TPendingEntry | null | Promise<TPendingEntry | null>;
|
||||
onDeliveryError?: (params: {
|
||||
error: unknown;
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => void;
|
||||
onDuplicateSkipped?: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: PreparedChannelNativeApprovalTarget<TPreparedTarget>;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
}) => void;
|
||||
onDelivered?: (params: {
|
||||
plannedTarget: ChannelApprovalNativePlannedTarget;
|
||||
preparedTarget: PreparedChannelNativeApprovalTarget<TPreparedTarget>;
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
pendingContent: TPendingContent;
|
||||
entry: TPendingEntry;
|
||||
}) => void;
|
||||
onStopped?: () => Promise<void> | void;
|
||||
};
|
||||
> &
|
||||
ChannelNativeApprovalTransportSpec<TPendingEntry, TPreparedTarget, TPendingContent, TRequest> &
|
||||
ChannelNativeApprovalDeliveryCallbacks<
|
||||
TPendingEntry,
|
||||
TPreparedTarget,
|
||||
TPendingContent,
|
||||
TRequest
|
||||
> & {
|
||||
channel?: string;
|
||||
channelLabel?: string;
|
||||
accountId?: string | null;
|
||||
nativeAdapter?: ChannelApprovalNativeAdapter | null;
|
||||
resolveApprovalKind?: (request: TRequest) => ChannelApprovalKind;
|
||||
buildPendingContent: (params: {
|
||||
request: TRequest;
|
||||
approvalKind: ChannelApprovalKind;
|
||||
nowMs: number;
|
||||
}) => TPendingContent | Promise<TPendingContent>;
|
||||
onStopped?: () => Promise<void> | void;
|
||||
};
|
||||
|
||||
export function createChannelNativeApprovalRuntime<
|
||||
TPendingEntry,
|
||||
|
||||
Reference in New Issue
Block a user