/
nayvok
/
livecoding
Обзор
Документация
Войти
/
nayvok
/
livecoding
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
backend/src/networkGuard.ts
50 строк
1 KB
nayvok
fix: harden sessions and WebRTC recovery
17 июн 2026, 22:02
17 июн 2026, 22:02
37b9a92
Код
Авторство
О чём код?
import { lookup } from 'node:dns/promises' function normalizeAddress(address: string): string { return address.startsWith('::ffff:') ? address.slice(7) : address } export function isLoopbackServiceUrl(serviceUrl: string): boolean { const hostname = new URL(serviceUrl).hostname.replace(/^\[|\]$/g, '') return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' } export function isBlockedSourceAddress( remoteAddress: string | undefined, blockedAddresses: ReadonlySet<string>, ): boolean { if (!remoteAddress) return false return blockedAddresses.has(normalizeAddress(remoteAddress)) } export async function resolveServiceAddresses( serviceUrl: string, ): Promise<Set<string>> { const hostname = new URL(serviceUrl).hostname const results = await lookup(hostname, { all: true }) return new Set(results.map((result) => normalizeAddress(result.address))) } export interface RunnerAddressCache { getAddresses: () => ReadonlySet<string> refresh: () => Promise<void> } export function createRunnerAddressCache( resolver: () => Promise<Set<string>>, ): RunnerAddressCache { let addresses = new Set<string>() return { getAddresses() { return addresses }, async refresh() { const next = await resolver() if (next.size === 0) { throw new Error('Runner DNS resolution returned no addresses') } addresses = new Set(next) }, } }