import { CompositeFactory, ConfigParams, Descriptor } from 'pip-services4-components-node'; import { ManagedReferences } from 'pip-services4-container-node'; import { ClientFacadeFactory } from '../../src/build/ClientFacadeFactory'; import { FacadeFactory } from '../../src/build/FacadeFactory'; import { FacadeControllerV1 } from '../../src/controllers/version1/FacadeControllerV1'; import { DefaultHttpFactory, HttpEndpoint } from 'pip-services4-http-node'; import { ServiceFacadeFactory } from '../../src/build/ServiceFacadeFactory'; export class TestReferences extends ManagedReferences { private _factory = new CompositeFactory(); private _controller = new FacadeControllerV1(); private STRIPE_ACCESS_KEY = process.env["STRIPE_ACCESS_KEY"]; public constructor() { super(); this.setupFactories(); this.appendDependencies(); this.configureService(); } private setupFactories() { this._factory.add(new ServiceFacadeFactory()); this._factory.add(new ClientFacadeFactory()); this._factory.add(new FacadeFactory()); this._factory.add(new DefaultHttpFactory()); } public append(descriptor: Descriptor): void { const component = this._factory.create(descriptor); this.put(descriptor, component); } private appendDependencies() { // Add factories this.put(null, this._factory); // Add service this._controller.configure(ConfigParams.fromTuples( 'payment_system', 'stripe', 'credential.access_key', this.STRIPE_ACCESS_KEY )); this.put('facade-controller', this._controller); // Add clients this.append(new Descriptor('service-products', 'client', 'direct', 'default', '*')); this.append(new Descriptor('service-products', 'persistence', 'memory', 'default', '*')); this.append(new Descriptor('service-products', 'service', 'default', 'default', '*')); this.append(new Descriptor('service-purchaseorders', 'client', 'direct', 'default', '*')); this.append(new Descriptor('service-purchaseorders', 'persistence', 'memory', 'default', '*')); this.append(new Descriptor('service-purchaseorders', 'service', 'default', 'default', '*')); this.append(new Descriptor('service-payments', 'client', 'memory', 'default', '*')); this.append(new Descriptor('service-payments', 'service', 'default', 'default', '*')); } private configureService(): void { // Configure Facade service const endpoint = this.getOneRequired( new Descriptor('pip-services', 'endpoint', 'http', 'default', '*') ); endpoint.configure(ConfigParams.fromTuples( 'root_path', '', 'connection.protocol', 'http', 'connection.host', '0.0.0.0', 'connection.port', 3000 )); } }