(params: {
req: DaemonRequest;
sessionName: string;
sessionStore: SessionStore;
})
| 12 | }; |
| 13 | |
| 14 | export async function resolveRequestExecutionLockKeys(params: { |
| 15 | req: DaemonRequest; |
| 16 | sessionName: string; |
| 17 | sessionStore: SessionStore; |
| 18 | }): Promise<RequestExecutionLockKey[]> { |
| 19 | const { req, sessionName, sessionStore } = params; |
| 20 | const existingSession = sessionStore.get(sessionName); |
| 21 | if (existingSession) { |
| 22 | return [deviceExecutionLockKey(existingSession.device.id)]; |
| 23 | } |
| 24 | |
| 25 | const keys = new Set<RequestExecutionLockKey>([sessionExecutionLockKey(sessionName)]); |
| 26 | const bindingReq = resolveFreshSessionBindingRequest(req); |
| 27 | if (shouldResolveFreshSessionDeviceLock(bindingReq)) { |
| 28 | try { |
| 29 | // This is advisory lock selection before the request enters the lock; the |
| 30 | // locked request still resolves and binds the target device authoritatively. |
| 31 | const device = await resolveTargetDevice(bindingReq.flags ?? {}); |
| 32 | keys.add(deviceExecutionLockKey(device.id)); |
| 33 | } catch { |
| 34 | // Fall back to session scoping when device resolution is not yet available. |
| 35 | } |
| 36 | } |
| 37 | return orderRequestExecutionLockKeys(keys); |
| 38 | } |
| 39 | |
| 40 | export function prepareLockedRequestBinding(params: { |
| 41 | req: DaemonRequest; |
no test coverage detected