UNPKG

@ydbjs/topic

Version:

YDB Topics client for publish-subscribe messaging. Provides at-least-once delivery, exactly-once publishing, FIFO guarantees, and scalable message processing for unstructured data.

57 lines 1.82 kB
import { loggers } from '@ydbjs/debug'; import { setInterval } from 'node:timers/promises'; import { _send_update_token_request } from './_update_token.js'; let dbg = loggers.topic.extend('reader'); /** * Initialize custom codecs if provided in options */ export function _initialize_codecs(codecs, codecMap) { if (codecMap) { for (let [key, codec] of codecMap) { codecs.set(key, codec); } } } /** * Start background token refresher * @param getOutgoingQueue - Getter function to get the current queue (since queue may be recreated on retry) */ export async function _start_background_token_refresher(driver, outgoingQueue, updateTokenIntervalMs, signal) { try { for await (let _ of setInterval(updateTokenIntervalMs, void 0, { signal, })) { _send_update_token_request({ queue: outgoingQueue, token: await driver.token, }); } } catch (error) { // Handle abort signal or other errors silently during disposal if (!signal.aborted) { dbg.log('background token refresher error: %O', error); } } } /** * Create disposal functions for readers */ export function _create_disposal_functions(reader, readerType) { return { [Symbol.dispose]() { reader.destroy(); }, async [Symbol.asyncDispose]() { // Graceful async disposal: wait for existing messages to be sent try { await reader.close(); // Use graceful close } catch (error) { dbg.log('error during async dispose close: %O', error); } reader.destroy(new Error(`${readerType} async disposed`)); }, }; } //# sourceMappingURL=_shared.js.map