import { Connector, type Locator, type bindings } from '@toa.io/core' import { type Label } from './discovery' import { type Branch } from './Branch' import type * as RTD from './RTD/syntax' export class Tenant extends Connector { private readonly broadcast: Broadcast private readonly branch: Branch public constructor (broadcast: Broadcast, locator: Locator, node: RTD.Node) { super() this.broadcast = broadcast this.branch = { namespace: locator.namespace, component: locator.name, isolated: locator.namespace === 'identity', node } this.depends(broadcast) } public override async open (): Promise { await this.expose() await this.broadcast.receive('ping', this.expose.bind(this)) console.info('Exposition Tenant for ' + `'${this.branch.namespace}.${this.branch.component}' has started.`) } public override async dispose (): Promise { console.info('Exposition Tenant for ' + `'${this.branch.namespace}.${this.branch.component}' has been stopped.`) } private async expose (): Promise { await this.broadcast.transmit('expose', this.branch) } } type Broadcast = bindings.Broadcast