mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 22:24:31 +00:00
refactor: dedupe pending pairing request flow and add reuse tests
This commit is contained in:
@@ -24,3 +24,27 @@ export function pruneExpiredPending<T extends { ts: number }>(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export type PendingPairingRequestResult<TPending> = {
|
||||
status: "pending";
|
||||
request: TPending;
|
||||
created: boolean;
|
||||
};
|
||||
|
||||
export async function upsertPendingPairingRequest<TPending extends { requestId: string }>(params: {
|
||||
pendingById: Record<string, TPending>;
|
||||
isExisting: (pending: TPending) => boolean;
|
||||
createRequest: (isRepair: boolean) => TPending;
|
||||
isRepair: boolean;
|
||||
persist: () => Promise<void>;
|
||||
}): Promise<PendingPairingRequestResult<TPending>> {
|
||||
const existing = Object.values(params.pendingById).find(params.isExisting);
|
||||
if (existing) {
|
||||
return { status: "pending", request: existing, created: false };
|
||||
}
|
||||
|
||||
const request = params.createRequest(params.isRepair);
|
||||
params.pendingById[request.requestId] = request;
|
||||
await params.persist();
|
||||
return { status: "pending", request, created: true };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user