




















@@ -154,8 +154,22 @@ async function loadState(baseDir?: string): Promise<DevicePairingStateFile> {
154154return state;
155155}
156156157-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+) {
158164const { 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+}
159173await Promise.all([
160174writeJsonAtomic(pendingPath, state.pendingById),
161175writeJsonAtomic(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};
637651delete state.pendingById[requestId];
638652state.pairedByDeviceId[device.deviceId] = device;
639-await persistState(state, baseDir);
653+await persistState(state, baseDir, "both");
640654return { status: "approved", requestId, device };
641655});
642656}
@@ -723,7 +737,7 @@ export async function approveBootstrapDevicePairing(
723737};
724738delete state.pendingById[requestId];
725739state.pairedByDeviceId[device.deviceId] = device;
726-await persistState(state, baseDir);
740+await persistState(state, baseDir, "both");
727741return { status: "approved", requestId, device };
728742});
729743}
@@ -741,7 +755,7 @@ export async function rejectDevicePairing(
741755 requestId,
742756idKey: "deviceId",
743757loadState: () => loadState(baseDir),
744-persistState: (state) => persistState(state, baseDir),
758+persistState: (state) => persistState(state, baseDir, "pending"),
745759getId: (pending: DevicePairingPendingRequest) => pending.deviceId,
746760});
747761});
@@ -763,7 +777,7 @@ export async function removePairedDevice(
763777delete state.pendingById[requestId];
764778}
765779}
766-await persistState(state, baseDir);
780+await persistState(state, baseDir, "both");
767781return { deviceId: normalized };
768782});
769783}
@@ -794,7 +808,7 @@ export async function updatePairedDeviceMetadata(
794808next.remoteIp = patch.remoteIp;
795809}
796810state.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: {
862876device.tokens ??= {};
863877device.tokens[role] = entry;
864878state.pairedByDeviceId[device.deviceId] = device;
865-await persistState(state, params.baseDir);
879+await persistState(state, params.baseDir, "paired");
866880return { ok: true };
867881});
868882}
@@ -919,7 +933,7 @@ export async function ensureDeviceToken(params: {
919933tokens[role] = next;
920934device.tokens = tokens;
921935state.pairedByDeviceId[device.deviceId] = device;
922-await persistState(state, params.baseDir);
936+await persistState(state, params.baseDir, "paired");
923937return next;
924938});
925939}
@@ -996,7 +1010,7 @@ export async function rotateDeviceToken(params: {
9961010tokens[role] = next;
9971011device.tokens = tokens;
9981012state.pairedByDeviceId[device.deviceId] = device;
999-await persistState(state, params.baseDir);
1013+await persistState(state, params.baseDir, "paired");
10001014return { ok: true, entry: next };
10011015});
10021016}
@@ -1024,7 +1038,7 @@ export async function revokeDeviceToken(params: {
10241038tokens[role] = entry;
10251039device.tokens = tokens;
10261040state.pairedByDeviceId[device.deviceId] = device;
1027-await persistState(state, params.baseDir);
1041+await persistState(state, params.baseDir, "paired");
10281042return entry;
10291043});
10301044}
@@ -1037,7 +1051,7 @@ export async function clearDevicePairing(deviceId: string, baseDir?: string): Pr
10371051return false;
10381052}
10391053delete state.pairedByDeviceId[normalizedId];
1040-await persistState(state, baseDir);
1054+await persistState(state, baseDir, "paired");
10411055return true;
10421056});
10431057}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。