diff --git a/src/lock-publisher.mjs b/src/lock-publisher.mjs index dde9882..b88fe36 100644 --- a/src/lock-publisher.mjs +++ b/src/lock-publisher.mjs @@ -6,6 +6,8 @@ import { getRelayFallbacks, getMinActiveRelayPool, } from './torch-config.mjs'; +import { mergeRelayList, relayListLabel, withTimeout } from './utils.mjs'; +import { secureRandom } from './lock-utils.mjs'; import { defaultHealthManager, buildRelayHealthConfig } from './relay-health-manager.mjs'; import { relayListLabel } from './utils.mjs'; import { mergeRelayList, withTimeout } from './lock-utils.mjs'; diff --git a/src/relay-health.mjs b/src/relay-health.mjs index 3e4f921..6e09d0b 100644 --- a/src/relay-health.mjs +++ b/src/relay-health.mjs @@ -4,7 +4,7 @@ import WebSocket from 'ws'; import { finalizeEvent, generateSecretKey, getPublicKey } from 'nostr-tools/pure'; import { getNamespace, getRelays } from './torch-config.mjs'; import { MS_PER_SECOND } from './constants.mjs'; -import { withTimeout } from './lock-utils.mjs'; +import { withTimeout } from './utils.mjs'; const PROBE_KIND = 27235; diff --git a/src/utils.mjs b/src/utils.mjs index 4397000..82445aa 100644 --- a/src/utils.mjs +++ b/src/utils.mjs @@ -55,3 +55,13 @@ export function ensureDir(dir) { export function relayListLabel(relays) { return relays.join(', '); } + +export function withTimeout(promise, timeoutMs, timeoutMessage) { + let timeoutHandle; + const timeoutPromise = new Promise((_, reject) => { + timeoutHandle = setTimeout(() => reject(new Error(timeoutMessage)), timeoutMs); + }); + return Promise.race([promise, timeoutPromise]).finally(() => { + if (timeoutHandle) clearTimeout(timeoutHandle); + }); +} diff --git a/test/utils-async.test.mjs b/test/utils-async.test.mjs index c5d8749..66b602e 100644 --- a/test/utils-async.test.mjs +++ b/test/utils-async.test.mjs @@ -1,6 +1,6 @@ import { describe, it } from 'node:test'; import assert from 'node:assert'; -import { withTimeout } from '../src/lock-utils.mjs'; +import { withTimeout } from '../src/utils.mjs'; describe('Async Utilities', () => { describe('withTimeout', () => {