@das3mical/adonis-mercure
Version:
A simple AdonisJS provider to interact with Mercure hub
44 lines (36 loc) • 1.26 kB
text/typescript
import { TokenGenerator } from './token_generator.js'
import { Publisher } from './publisher.js'
import type { MercureConfig, MercureContract, SendOptions } from './types/main.js'
export class Mercure implements MercureContract {
#config: MercureConfig
#tokenGenerator: TokenGenerator
#publisher: Publisher
constructor(config: MercureConfig) {
this.#config = config
this.#tokenGenerator = new TokenGenerator(config)
this.#publisher = new Publisher(config)
}
generate(payload: Record<string, unknown>): Promise<string> {
return this.#tokenGenerator.generate(payload)
}
generateSubscribeToken(topics: string[]): Promise<string> {
return this.#tokenGenerator.generateSubscribeToken(topics)
}
send(
topics: string | string[],
data: Record<string, unknown> = {},
isPrivateOrOptions: boolean | SendOptions = false
): Promise<Response> {
const options: SendOptions =
typeof isPrivateOrOptions === 'boolean' ? { private: isPrivateOrOptions } : isPrivateOrOptions
return this.#publisher.publish(topics, data, options)
}
async ping(): Promise<boolean> {
try {
await fetch(this.#config.endpoint, { method: 'HEAD' })
return true
} catch {
return false
}
}
}