type PendingState = { pendingById: Record; }; export async function rejectPendingPairingRequest< TPending, TState extends PendingState, TIdKey extends string, >(params: { requestId: string; idKey: TIdKey; loadState: () => Promise; persistState: (state: TState) => Promise; getId: (pending: TPending) => string; }): Promise<({ requestId: string } & Record) | null> { const state = await params.loadState(); const pending = state.pendingById[params.requestId]; if (!pending) { return null; } delete state.pendingById[params.requestId]; await params.persistState(state); return { requestId: params.requestId, [params.idKey]: params.getId(pending), } as { requestId: string } & Record; }