Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | 1x 1x 1x 1x 1x 1x | import { injectable } from '@biorate/inversion';
import { Connector } from '@biorate/connector';
import { Client } from '@opensearch-project/opensearch';
import { IOpenSearchConfig, IOpenSearchConnection } from './interfaces';
import { OpenSearchCantConnectError } from './errors';
export * from './errors';
export * from './interfaces';
/**
* @description OpenSearch connector
*
* ### Features:
* - connector manager for OpenSearch
*
* @example
* ```
* import { inject, container, Types, Core } from '@biorate/inversion';
* import { IConfig, Config } from '@biorate/config';
* import { OpenSearchConnector, IOpenSearchConnector } from '../../src';
*
* export class Root extends Core() {
* @inject(Types.Config) public config: IConfig;
*
* @inject(OpenSearchConnector) public opensearchConnector: IOpenSearchConnector;
* }
*
* container.bind<IConfig>(Types.Config).to(Config).inSingletonScope();
* container.bind<IOpenSearchConnector>(OpenSearchConnector).toSelf().inSingletonScope();
* container.bind<Root>(Root).toSelf().inSingletonScope();
*
* container.get<IConfig>(Types.Config).merge({
* OpenSearch: [
* {
* name: 'dev',
* options: {
* node: 'https://admin:admin_pass@localhost:9200',
* ssl: {
* rejectUnauthorized: false,
* },
* },
* },
* ],
* });
*
* (async () => {
* root = container.get<Root>(Root);
* await root.$run();
*
* await root.opensearchConnector.current!.indices.create({
* index: 'test_index',
* body: {
* settings: {
* index: {
* number_of_shards: 1,
* number_of_replicas: 1,
* },
* },
* },
* });
* })();
* ```
*/
@injectable()
export class OpenSearchConnector extends Connector<
IOpenSearchConfig,
IOpenSearchConnection
> {
/**
* @description Private connections storage
*/
private '#connections': Map<string, IOpenSearchConnection>;
/**
* @description Private link to selected (used) connection
*/
private '#current': IOpenSearchConnection | undefined;
/**
* @description Namespace path for fetching configuration
*/
protected readonly namespace = 'OpenSearch';
protected async connect(config: IOpenSearchConfig) {
let connection: IOpenSearchConnection;
try {
connection = new Client(config.options);
await connection.ping();
} catch (e: unknown) {
throw new OpenSearchCantConnectError(<Error>e);
}
return connection;
}
}
|