UNPKG

pip-services3-aws-node

Version:
137 lines (127 loc) 5.84 kB
/** @module connect */ /** @hidden */ let _ = require('lodash'); /** @hidden */ let async = require('async'); import { IConfigurable } from 'pip-services3-commons-node'; import { IReferenceable } from 'pip-services3-commons-node'; import { IReferences } from 'pip-services3-commons-node'; import { ConfigParams } from 'pip-services3-commons-node'; import { ConnectionResolver } from 'pip-services3-components-node'; import { ConnectionParams } from 'pip-services3-components-node'; import { CredentialResolver } from 'pip-services3-components-node'; import { CredentialParams } from 'pip-services3-components-node'; import { AwsConnectionParams } from './AwsConnectionParams'; /** * Helper class to retrieve AWS connection and credential parameters, * validate them and compose a [[AwsConnectionParams]] value. * * ### Configuration parameters ### * * - connections: * - discovery_key: (optional) a key to retrieve the connection from [[https://pip-services3-node.github.io/pip-services3-components-node/interfaces/connect.idiscovery.html IDiscovery]] * - region: (optional) AWS region * - partition: (optional) AWS partition * - service: (optional) AWS service * - resource_type: (optional) AWS resource type * - resource: (optional) AWS resource id * - arn: (optional) AWS resource ARN * - credentials: * - store_key: (optional) a key to retrieve the credentials from [[https://pip-services3-node.github.io/pip-services3-components-node/interfaces/auth.icredentialstore.html ICredentialStore]] * - access_id: AWS access/client id * - access_key: AWS access/client id * * ### References ### * * - <code>\*:discovery:\*:\*:1.0</code> (optional) [[https://pip-services3-node.github.io/pip-services3-components-node/interfaces/connect.idiscovery.html IDiscovery]] services to resolve connections * - <code>\*:credential-store:\*:\*:1.0</code> (optional) Credential stores to resolve credentials * * @see [[https://pip-services3-node.github.io/pip-services3-components-node/classes/connect.connectionparams.html ConnectionParams]] (in the Pip.Services components package) * @see [[https://pip-services3-node.github.io/pip-services3-components-node/interfaces/connect.idiscovery.html IDiscovery]] (in the Pip.Services components package) * * ### Example ### * * let config = ConfigParams.fromTuples( * "connection.region", "us-east1", * "connection.service", "s3", * "connection.bucket", "mybucket", * "credential.access_id", "XXXXXXXXXX", * "credential.access_key", "XXXXXXXXXX" * ); * * let connectionResolver = new AwsConnectionResolver(); * connectionResolver.configure(config); * connectionResolver.setReferences(references); * * connectionResolver.resolve("123", (err, connection) => { * // Now use connection... * }); */ export class AwsConnectionResolver implements IConfigurable, IReferenceable { /** * The connection resolver. */ protected _connectionResolver: ConnectionResolver = new ConnectionResolver(); /** * The credential resolver. */ protected _credentialResolver: CredentialResolver = new CredentialResolver(); /** * Configures component by passing configuration parameters. * * @param config configuration parameters to be set. */ public configure(config: ConfigParams): void { this._connectionResolver.configure(config); this._credentialResolver.configure(config); } /** * Sets references to dependent components. * * @param references references to locate the component dependencies. */ public setReferences(references: IReferences): void { this._connectionResolver.setReferences(references); this._credentialResolver.setReferences(references); } /** * Resolves connection and credental parameters and generates a single * AWSConnectionParams value. * * @param correlationId (optional) transaction id to trace execution through call chain. * @param callback callback function that receives AWSConnectionParams value or error. * * @see [[https://pip-services3-node.github.io/pip-services3-components-node/interfaces/connect.idiscovery.html IDiscovery]] (in the Pip.Services components package) */ public resolve(correlationId: string, callback: (err: any, connection: AwsConnectionParams) => void): void { let connection = new AwsConnectionParams(); let credential = null; async.series([ (callback) => { this._connectionResolver.resolve(correlationId, (err: any, data: ConnectionParams) => { if (err == null && data != null) connection.append(data); callback(err); }); }, (callback) => { this._credentialResolver.lookup(correlationId, (err: any, data: CredentialParams) => { if (err == null && data != null) connection.append(data); callback(err); }); }, (callback) => { // Force ARN parsing connection.setArn(connection.getArn()); // Perform validation let err = connection.validate(correlationId); callback(err); } ], (err) => { connection = err == null ? connection : null; callback(err, connection); }); } }