diff --git a/packages/status-js/src/index.ts b/packages/status-js/src/index.ts index 1727675d..591e9412 100644 --- a/packages/status-js/src/index.ts +++ b/packages/status-js/src/index.ts @@ -15,7 +15,7 @@ export { EthereumClient } from './ethereum-client/ethereum-client' export type { ChannelInfo } from './request-client/map-channel' export type { CommunityInfo } from './request-client/map-community' export type { UserInfo } from './request-client/map-user' -export type { RequestClient } from './request-client/request-client' +export { RequestClient } from './request-client/request-client' export { createRequestClient } from './request-client/request-client' export { deserializePublicKey } from './utils/deserialize-public-key' export { diff --git a/packages/status-js/src/request-client/request-client.ts b/packages/status-js/src/request-client/request-client.ts index e179632a..93a6e2f2 100644 --- a/packages/status-js/src/request-client/request-client.ts +++ b/packages/status-js/src/request-client/request-client.ts @@ -38,9 +38,12 @@ class RequestClient { /** Cache. */ public readonly wakuMessages: Set - constructor(waku: WakuLight) { + private started: boolean + + constructor(waku: WakuLight, started = false) { this.waku = waku this.wakuMessages = new Set() + this.started = started } static async start(options: RequestClientOptions): Promise { @@ -67,7 +70,8 @@ class RequestClient { await waku.start() await waitForRemotePeer(waku, [Protocols.Store], 10 * 1000) - client = new RequestClient(waku) + const started = true + client = new RequestClient(waku, started) } catch (error) { if (waku) { await waku.stop() @@ -80,7 +84,13 @@ class RequestClient { } public async stop() { + if (!this.started) { + throw new Error('Waku instance not created by class initialization') + } + await this.waku.stop() + + this.started = false } public fetchCommunity = async ( @@ -127,8 +137,8 @@ class RequestClient { return mapUser(contactCodeAdvertisement, publicKey) } - private fetchCommunityDescription = async ( - /** Uncompressed */ + public fetchCommunityDescription = async ( + /** Compressed */ publicKey: string ): Promise => { const contentTopic = idToContentTopic(publicKey) @@ -317,4 +327,4 @@ export async function createRequestClient( return await RequestClient.start(options) } -export type { RequestClient } +export { RequestClient }