diff --git a/src/lock-ops.mjs b/src/lock-ops.mjs index e3fbcad..b899d83 100644 --- a/src/lock-ops.mjs +++ b/src/lock-ops.mjs @@ -13,7 +13,6 @@ import { defaultHealthManager, buildRelayHealthConfig, RelayHealthManager } from import { publishLock, LockPublisher } from './lock-publisher.mjs'; import { withTimeout, - relayListLabel, mergeRelayList, secureRandom, } from './lock-utils.mjs'; @@ -61,20 +60,6 @@ function filterActiveLocks(locks) { return locks.filter((lock) => !lock.expiresAt || lock.expiresAt > now); } -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); - }); -} - -function mergeRelayList(primaryRelays, fallbackRelays) { - return [...new Set([...primaryRelays, ...fallbackRelays])]; -} - /** * Queries relays for active lock events matching the criteria. * Uses a tiered approach: tries primary relays first, then falls back to others if needed. diff --git a/src/lock-publisher.mjs b/src/lock-publisher.mjs index 61fba13..58b2025 100644 --- a/src/lock-publisher.mjs +++ b/src/lock-publisher.mjs @@ -6,9 +6,9 @@ import { getRelayFallbacks, getMinActiveRelayPool, } from './torch-config.mjs'; -import { mergeRelayList } from './utils.mjs'; +import { randomInt } from 'node:crypto'; import { defaultHealthManager, buildRelayHealthConfig } from './relay-health-manager.mjs'; -import { relayListLabel } from './utils.mjs'; +import { relayListLabel, mergeRelayList } from './utils.mjs'; function withTimeout(promise, timeoutMs, timeoutMessage) { let timeoutHandle; @@ -20,10 +20,6 @@ function withTimeout(promise, timeoutMs, timeoutMessage) { }); } -function mergeRelayList(primaryRelays, fallbackRelays) { - return [...new Set([...primaryRelays, ...fallbackRelays])]; -} - const PUBLISH_ERROR_CODES = { TIMEOUT: 'publish_timeout', DNS: 'dns_resolution', diff --git a/src/lock-utils.mjs b/src/lock-utils.mjs index dbe1820..64319d3 100644 --- a/src/lock-utils.mjs +++ b/src/lock-utils.mjs @@ -51,7 +51,15 @@ export async function getCompletedAgents(cadence, logDir, deps) { return completed; } -export { withTimeout }; +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); + }); +} export function mergeRelayList(primaryRelays, fallbackRelays) { return [...new Set([...primaryRelays, ...fallbackRelays])]; diff --git a/test/utils-async.test.mjs b/test/utils-async.test.mjs index 66b602e..c5d8749 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/utils.mjs'; +import { withTimeout } from '../src/lock-utils.mjs'; describe('Async Utilities', () => { describe('withTimeout', () => { diff --git a/test/utils.test.mjs b/test/utils.test.mjs index 7051687..40db583 100644 --- a/test/utils.test.mjs +++ b/test/utils.test.mjs @@ -2,7 +2,7 @@ import { describe, it, after } from 'node:test'; import assert from 'node:assert'; import fs from 'node:fs'; import path from 'node:path'; -import { getIsoWeekStr, todayDateStr, nowUnix, ensureDir, detectPlatform, relayListLabel } from '../src/utils.mjs'; +import { getIsoWeekStr, todayDateStr, nowUnix, ensureDir, detectPlatform, relayListLabel, mergeRelayList } from '../src/utils.mjs'; describe('Date Utilities', () => { describe('todayDateStr', () => {