@@ -154,8 +154,22 @@ async function loadState(baseDir?: string): Promise<DevicePairingStateFile> {
154154 return state ;
155155}
156156
157- async function persistState ( state : DevicePairingStateFile , baseDir ?: string ) {
157+ type DevicePairingPersistTarget = "pending" | "paired" | "both" ;
158+
159+ async function persistState (
160+ state : DevicePairingStateFile ,
161+ baseDir : string | undefined ,
162+ target : DevicePairingPersistTarget ,
163+ ) {
158164 const { pendingPath, pairedPath } = resolvePairingPaths ( baseDir , "devices" ) ;
165+ if ( target === "pending" ) {
166+ await writeJsonAtomic ( pendingPath , state . pendingById ) ;
167+ return ;
168+ }
169+ if ( target === "paired" ) {
170+ await writeJsonAtomic ( pairedPath , state . pairedByDeviceId ) ;
171+ return ;
172+ }
159173 await Promise . all ( [
160174 writeJsonAtomic ( pendingPath , state . pendingById ) ,
161175 writeJsonAtomic ( pairedPath , state . pairedByDeviceId ) ,
@@ -526,7 +540,7 @@ export async function requestDevicePairing(
526540 } ,
527541 } ) ;
528542 } ,
529- persist : async ( ) => await persistState ( state , baseDir ) ,
543+ persist : async ( ) => await persistState ( state , baseDir , "pending" ) ,
530544 } ) ;
531545 } ) ;
532546}
@@ -636,7 +650,7 @@ export async function approveDevicePairing(
636650 } ;
637651 delete state . pendingById [ requestId ] ;
638652 state . pairedByDeviceId [ device . deviceId ] = device ;
639- await persistState ( state , baseDir ) ;
653+ await persistState ( state , baseDir , "both" ) ;
640654 return { status : "approved" , requestId, device } ;
641655 } ) ;
642656}
@@ -723,7 +737,7 @@ export async function approveBootstrapDevicePairing(
723737 } ;
724738 delete state . pendingById [ requestId ] ;
725739 state . pairedByDeviceId [ device . deviceId ] = device ;
726- await persistState ( state , baseDir ) ;
740+ await persistState ( state , baseDir , "both" ) ;
727741 return { status : "approved" , requestId, device } ;
728742 } ) ;
729743}
@@ -741,7 +755,7 @@ export async function rejectDevicePairing(
741755 requestId,
742756 idKey : "deviceId" ,
743757 loadState : ( ) => loadState ( baseDir ) ,
744- persistState : ( state ) => persistState ( state , baseDir ) ,
758+ persistState : ( state ) => persistState ( state , baseDir , "pending" ) ,
745759 getId : ( pending : DevicePairingPendingRequest ) => pending . deviceId ,
746760 } ) ;
747761 } ) ;
@@ -763,7 +777,7 @@ export async function removePairedDevice(
763777 delete state . pendingById [ requestId ] ;
764778 }
765779 }
766- await persistState ( state , baseDir ) ;
780+ await persistState ( state , baseDir , "both" ) ;
767781 return { deviceId : normalized } ;
768782 } ) ;
769783}
@@ -794,7 +808,7 @@ export async function updatePairedDeviceMetadata(
794808 next . remoteIp = patch . remoteIp ;
795809 }
796810 state . pairedByDeviceId [ normalizedDeviceId ] = next ;
797- await persistState ( state , baseDir ) ;
811+ await persistState ( state , baseDir , "paired" ) ;
798812 } ) ;
799813}
800814
@@ -862,7 +876,7 @@ export async function verifyDeviceToken(params: {
862876 device . tokens ??= { } ;
863877 device . tokens [ role ] = entry ;
864878 state . pairedByDeviceId [ device . deviceId ] = device ;
865- await persistState ( state , params . baseDir ) ;
879+ await persistState ( state , params . baseDir , "paired" ) ;
866880 return { ok : true } ;
867881 } ) ;
868882}
@@ -919,7 +933,7 @@ export async function ensureDeviceToken(params: {
919933 tokens [ role ] = next ;
920934 device . tokens = tokens ;
921935 state . pairedByDeviceId [ device . deviceId ] = device ;
922- await persistState ( state , params . baseDir ) ;
936+ await persistState ( state , params . baseDir , "paired" ) ;
923937 return next ;
924938 } ) ;
925939}
@@ -996,7 +1010,7 @@ export async function rotateDeviceToken(params: {
9961010 tokens [ role ] = next ;
9971011 device . tokens = tokens ;
9981012 state . pairedByDeviceId [ device . deviceId ] = device ;
999- await persistState ( state , params . baseDir ) ;
1013+ await persistState ( state , params . baseDir , "paired" ) ;
10001014 return { ok : true , entry : next } ;
10011015 } ) ;
10021016}
@@ -1024,7 +1038,7 @@ export async function revokeDeviceToken(params: {
10241038 tokens [ role ] = entry ;
10251039 device . tokens = tokens ;
10261040 state . pairedByDeviceId [ device . deviceId ] = device ;
1027- await persistState ( state , params . baseDir ) ;
1041+ await persistState ( state , params . baseDir , "paired" ) ;
10281042 return entry ;
10291043 } ) ;
10301044}
@@ -1037,7 +1051,7 @@ export async function clearDevicePairing(deviceId: string, baseDir?: string): Pr
10371051 return false ;
10381052 }
10391053 delete state . pairedByDeviceId [ normalizedId ] ;
1040- await persistState ( state , baseDir ) ;
1054+ await persistState ( state , baseDir , "paired" ) ;
10411055 return true ;
10421056 } ) ;
10431057}
0 commit comments