/
githubmirror
/
novu
Обзор
Документация
Войти
/
githubmirror
/
novu
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
next
packages/js/src/base-module.ts
64 строки
2 KB
Adam Chmara
fix(api-service,js): sync 402 on web chat accept when plan limits block fixes NV-8575 (#12307)
11 авг 2026, 16:09
Не верифицирован
11 авг 2026, 16:09
81982fc
Код
Авторство
О чём код?
import { InboxService } from './api'; import { NovuEventEmitter } from './event-emitter'; import { Result, Session } from './types'; import { NovuError } from './utils/errors'; interface CallQueueItem { fn: () => Promise<unknown>; resolve: (value: any | PromiseLike<any>) => void; reject: (reason?: unknown) => void; } export class BaseModule { _inboxService: InboxService; _emitter: NovuEventEmitter; #callsQueue: CallQueueItem[] = []; #sessionError: unknown; constructor({ inboxServiceInstance, eventEmitterInstance, }: { inboxServiceInstance: InboxService; eventEmitterInstance: NovuEventEmitter; }) { this._emitter = eventEmitterInstance; this._inboxService = inboxServiceInstance; this._emitter.on('session.initialize.resolved', ({ error, data }) => { if (data) { this.onSessionSuccess(data); this.#callsQueue.forEach(async ({ fn, resolve }) => { resolve(await fn()); }); this.#callsQueue = []; } else if (error) { this.onSessionError(error); this.#sessionError = error; this.#callsQueue.forEach(({ resolve }) => { resolve({ error: new NovuError('Failed to initialize session, please contact the support', error) }); }); this.#callsQueue = []; } }); } protected onSessionSuccess(_: Session): void {} protected onSessionError(_: unknown): void {} async callWithSession<T, E = NovuError>(fn: () => Result<T, E>): Result<T, E> { if (this._inboxService.isSessionInitialized) { return fn(); } if (this.#sessionError) { return Promise.resolve({ error: new NovuError('Failed to initialize session, please contact the support', this.#sessionError), }) as Result<T, E>; } return new Promise((resolve, reject) => { this.#callsQueue.push({ fn, resolve, reject }); }); } }