UNPKG

@getanthill/datastore

Version:

Event-Sourced Datastore

73 lines (57 loc) 1.83 kB
import type { Services } from '../typings'; import type { DatastoreConfig } from '../sdk/Datastore'; import { ok } from 'node:assert'; import { EventEmitter } from 'events'; import * as telemetry from '@getanthill/telemetry'; import { MongoDbConnector } from '@getanthill/mongodb-connector'; import MQTTClient from './mqtt'; import AMQPClient from './amqp'; import FullyHomomorphicEncryptionClient from './fhe'; import _config from '../config'; import * as metrics from '../constants/metrics'; import api from '../api'; import events from '../api/events'; import { init as initModels } from '../models'; import { Datastore } from '../sdk'; import Authz from './authz'; export function getDatastores(config: { datastores: { name: string; config: DatastoreConfig; }[]; }) { const datastores = new Map<string, Datastore>( config.datastores.map((c) => { ok(!!c.name, 'Missing Datastore configuration name'); return [ c.name, new Datastore({ ...c.config, telemetry, }), ]; }), ); return datastores; } const services: Services = build(_config); export function build(config: typeof _config = _config): Services { const mongodb = new (<any>MongoDbConnector).default(config.mongodb); const _services: Partial<Services> = { telemetry, config, api, events, mongodb, mqtt: new MQTTClient(config.mqtt, telemetry), amqp: new AMQPClient(config.amqp, telemetry), fhe: new FullyHomomorphicEncryptionClient(config.fhe), datastores: getDatastores(config), signals: new EventEmitter(), metrics, }; _services.models = initModels(config.models, _services as Services); _services.authz = new Authz(config.authz, _services as Services); return _services as Services; } export default services;