@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
JavaScript
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