/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 'use strict'; const ConnectionManager = require('./connectionmanager'); /** * Base class representing a connection to a business network. * @private * @abstract * @class * @memberof module:composer-common */ class Connection { /** * Constructor. * @param {ConnectionManager} connectionManager The owning connection manager. * @param {string} connectionProfile The name of the connection profile associated with this connection * @param {string} businessNetworkIdentifier The identifier of the business network for this connection, or null if an admin connection */ constructor(connectionManager, connectionProfile, businessNetworkIdentifier) { if (!(connectionManager instanceof ConnectionManager)) { throw new Error('connectionManager not specified'); } else if (!connectionProfile) { throw new Error('connectionProfile not specified'); } this.connectionManager = connectionManager; this.connectionProfile = connectionProfile; this.businessNetworkIdentifier = businessNetworkIdentifier; } /** * Get the connection manager that owns this connection. * @return {ConnectionManager} The owning connection manager. */ getConnectionManager() { return this.connectionManager; } /** * Returns a string that can be used to identify this connection. * @return {string} the identifier of this connection */ getIdentifier() { if(this.businessNetworkIdentifier) { return this.businessNetworkIdentifier + '@' + this.connectionProfile; } else { return this.connectionProfile; } } /** * Terminate the connection to the business network. * @abstract * @return {Promise} A promise that is resolved once the connection has been * terminated, or rejected with an error. */ disconnect() { return Promise.reject(new Error('abstract function called')); } /** * Login as a participant on the business network. * @abstract * @param {string} enrollmentID The enrollment ID of the participant. * @param {string} enrollmentSecret The enrollment secret of the participant. * @return {Promise} A promise that is resolved with a {@link SecurityContext} * object representing the logged in participant, or rejected with a login error. */ login(enrollmentID, enrollmentSecret) { return Promise.reject(new Error('abstract function called')); } /** * Deploy a business network definition. * @abstract * @param {SecurityContext} securityContext The participant's security context. * @param {boolean} [force] Force the deployment of the business network artifacts. * @param {BusinessNetworkDefinition} businessNetworkDefinition The BusinessNetworkDefinition to deploy * @return {Promise} A promise that is resolved once the business network * artifacts have been deployed, or rejected with an error. */ deploy(securityContext, force, businessNetworkDefinition) { return Promise.reject(new Error('abstract function called')); } /** * Updates an existing deployed business network definition. * @abstract * @param {SecurityContext} securityContext The participant's security context. * @param {BusinessNetworkDefinition} businessNetworkDefinition The BusinessNetworkDefinition to deploy * @return {Promise} A promise that is resolved once the business network * artifacts have been updated, or rejected with an error. */ update(securityContext, businessNetworkDefinition) { return Promise.reject(new Error('abstract function called')); } /** * Undeploy a business network definition. * @abstract * @param {SecurityContext} securityContext The participant's security context. * @param {string} businessNetworkIdentifier The identifier of the business network to remove * @return {Promise} A promise that is resolved once the business network * artifacts have been undeployed, or rejected with an error. */ undeploy(securityContext, businessNetworkIdentifier) { return Promise.reject(new Error('abstract function called')); } /** * Test ("ping") the connection to the business network. * @abstract * @param {SecurityContext} securityContext The participant's security context. * @return {Promise} A promise that is resolved once the connection to the * business network has been tested, or rejected with an error. */ ping(securityContext) { return Promise.reject(new Error('abstract function called')); } /** * Invoke a "query" chaincode function with the specified name and arguments. * @abstract * @param {SecurityContext} securityContext The participant's security context. * @param {string} functionName The name of the chaincode function to invoke. * @param {string[]} args The arguments to pass to the chaincode function. * @return {Promise} A promise that is resolved with the data returned by the * chaincode function once it has been invoked, or rejected with an error. */ queryChainCode(securityContext, functionName, args) { return Promise.reject(new Error('abstract function called')); } /** * Invoke a "invoke" chaincode function with the specified name and arguments. * @abstract * @param {SecurityContext} securityContext The participant's security context. * @param {string} functionName The name of the chaincode function to invoke. * @param {string[]} args The arguments to pass to the chaincode function. * @return {Promise} A promise that is resolved once the chaincode function * has been invoked, or rejected with an error. */ invokeChainCode(securityContext, functionName, args) { return Promise.reject(new Error('abstract function called')); } /** * Create a new identity for the specified user ID. * @param {SecurityContext} securityContext The participant's security context. * @param {string} userID The user ID. * @param {object} [options] Options for the new identity. * @param {boolean} [options.issuer] Whether or not the new identity should have * permissions to create additional new identities. False by default. * @param {string} [options.affiliation] Specify the affiliation for the new * identity. Defaults to 'institution_a'. * @return {Promise} A promise that is resolved with a generated user * secret once the new identity has been created, or rejected with an error. */ createIdentity(securityContext, userID, options) { return Promise.reject(new Error('abstract function called')); } /** * List all of the deployed business networks. The connection must * be connected for this method to succeed. * @param {SecurityContext} securityContext The participant's security context. * @return {Promise} A promise that will be resolved with an array of * business network identifiers, or rejected with an error. */ list(securityContext) { return Promise.reject(new Error('abstract function called')); } /** * Stop serialization of this object. * @return {Object} An empty object. */ toJSON() { return {}; } } module.exports = Connection;