From 8645e8655efdd8930a39439b63f8874b94bdd956 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 14:24:51 +0100 Subject: [PATCH] refactor: share pairing connect detail assembly --- src/gateway/protocol/connect-error-details.ts | 65 ++++++++++++------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/src/gateway/protocol/connect-error-details.ts b/src/gateway/protocol/connect-error-details.ts index 24c4e27e29a..16fb7305cb4 100644 --- a/src/gateway/protocol/connect-error-details.ts +++ b/src/gateway/protocol/connect-error-details.ts @@ -238,6 +238,29 @@ function normalizeStringArray(value: unknown): string[] | undefined { return normalized.length > 0 ? normalized : []; } +function createPairingConnectErrorDetails(params: { + reason?: ConnectPairingRequiredReason; + requestId?: string; + remediationHint?: string; + deviceId?: string; + requestedRole?: string; + requestedScopes?: string[]; + approvedRoles?: string[]; + approvedScopes?: string[]; +}): PairingConnectErrorDetails { + return { + code: ConnectErrorDetailCodes.PAIRING_REQUIRED, + ...(params.reason ? { reason: params.reason } : {}), + ...(params.requestId ? { requestId: params.requestId } : {}), + ...(params.remediationHint ? { remediationHint: params.remediationHint } : {}), + ...(params.deviceId ? { deviceId: params.deviceId } : {}), + ...(params.requestedRole ? { requestedRole: params.requestedRole } : {}), + ...(params.requestedScopes ? { requestedScopes: params.requestedScopes } : {}), + ...(params.approvedRoles ? { approvedRoles: params.approvedRoles } : {}), + ...(params.approvedScopes ? { approvedScopes: params.approvedScopes } : {}), + }; +} + export function describePairingConnectRequirement( reason: ConnectPairingRequiredReason | undefined, ): string { @@ -289,17 +312,16 @@ export function buildPairingConnectErrorDetails(params: { const requestedScopes = normalizeStringArray(params.requestedScopes); const approvedRoles = normalizeStringArray(params.approvedRoles); const approvedScopes = normalizeStringArray(params.approvedScopes); - return { - code: ConnectErrorDetailCodes.PAIRING_REQUIRED, - ...(params.reason ? { reason: params.reason } : {}), - ...(requestId ? { requestId } : {}), - ...(remediationHint ? { remediationHint } : {}), - ...(deviceId ? { deviceId } : {}), - ...(requestedRole ? { requestedRole } : {}), - ...(requestedScopes ? { requestedScopes } : {}), - ...(approvedRoles ? { approvedRoles } : {}), - ...(approvedScopes ? { approvedScopes } : {}), - }; + return createPairingConnectErrorDetails({ + reason: params.reason, + requestId, + remediationHint, + deviceId, + requestedRole, + requestedScopes, + approvedRoles, + approvedScopes, + }); } export function buildPairingConnectCloseReason(params: { @@ -339,17 +361,16 @@ export function readPairingConnectErrorDetails( const requestedScopes = normalizeStringArray(raw.requestedScopes); const approvedRoles = normalizeStringArray(raw.approvedRoles); const approvedScopes = normalizeStringArray(raw.approvedScopes); - return { - code: ConnectErrorDetailCodes.PAIRING_REQUIRED, - ...(reason ? { reason } : {}), - ...(requestId ? { requestId } : {}), - ...(remediationHint ? { remediationHint } : {}), - ...(deviceId ? { deviceId } : {}), - ...(requestedRole ? { requestedRole } : {}), - ...(requestedScopes ? { requestedScopes } : {}), - ...(approvedRoles ? { approvedRoles } : {}), - ...(approvedScopes ? { approvedScopes } : {}), - }; + return createPairingConnectErrorDetails({ + reason, + requestId, + remediationHint, + deviceId, + requestedRole, + requestedScopes, + approvedRoles, + approvedScopes, + }); } export function readConnectPairingRequiredDetails(