Enforce check interval correctly

This commit is contained in:
pleb
2026-07-12 15:53:13 -07:00
parent ec51dcc52e
commit 30146c65ce
+28 -28
View File
@@ -69,29 +69,29 @@ async function waitForEvent(
const elapsed = Date.now() - started; const elapsed = Date.now() - started;
const remainingMs = Math.max(1, timeoutMs - elapsed); const remainingMs = Math.max(1, timeoutMs - elapsed);
const queryTimeoutMs = Math.max(200, Math.min(1_000, remainingMs)); const queryTimeoutMs = Math.max(200, Math.min(1_000, remainingMs));
const found = await withTimeout<boolean>( const found = await new Promise<boolean>((resolve) => {
new Promise<boolean>((resolve) => { let settled = false;
let settled = false; let sub: ReturnType<Relay["subscribe"]> | undefined;
const sub = relay.subscribe([filter], { const finish = (found: boolean): void => {
onevent: (evt) => { if (settled) return;
if (settled) return; settled = true;
if (evt.id === expectedEventId) { clearTimeout(timer);
settled = true; sub?.close();
sub.close(); resolve(found);
resolve(true); };
} const timer = setTimeout(() => finish(false), queryTimeoutMs);
},
oneose: () => { sub = relay.subscribe([filter], {
if (settled) return; onevent: (evt) => {
settled = true; if (evt.id === expectedEventId) {
sub.close(); finish(true);
resolve(false); }
}, },
}); oneose: () => {
}), finish(false);
queryTimeoutMs, },
"write confirm read-after-write query", });
).catch(() => false); });
if (found) return true; if (found) return true;
@@ -142,20 +142,20 @@ export async function runWriteConfirm(input: WriteConfirmInput): Promise<WriteCo
}; };
} }
const elapsedMs = performance.now() - startedAt;
const remainingMs = Math.max(1, input.timeoutMs - Math.floor(elapsedMs));
const confirmed = await waitForEvent( const confirmed = await waitForEvent(
relay, relay,
{ {
ids: [event.id],
authors: [derivedPubkey], authors: [derivedPubkey],
kinds: [input.kind], kinds: [input.kind],
"#d": [dTag], "#d": [dTag],
limit: 1,
since: Math.max(0, createdAt - 5), since: Math.max(0, createdAt - 5),
}, },
event.id, event.id,
remainingMs, // Connect and publish each have their own timeout, so read-after-write
// must receive one too. Charging all three stages to a single timeout
// can reduce this to 1 ms after a slow, successful publish.
input.timeoutMs,
); );
return { return {