lib/discover_endpoint.js
function optionalDiscoverEndpoint(request) {
  var service = request.service;
  var api = service.api;
  var operationModel = api.operations ? api.operations[request.operation] : undefined;
  var inputShape = operationModel ? operationModel.input : undefined;

  var identifiers = marshallCustomIdentifiers(request, inputShape);
  var cacheKey = getCacheKey(request);
  if (Object.keys(identifiers).length > 0) {
    cacheKey = util.update(cacheKey, identifiers);
    if (operationModel) cacheKey.operation = operationModel.name;
  }
  var endpoints = AWS.endpointCache.get(cacheKey);
  if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {
    //endpoint operation is being made but response not yet received
    //or endpoint operation just failed in 1 minute
    return;
  } else if (endpoints && endpoints.length > 0) {
    //found endpoint record from cache
    request.httpRequest.updateEndpoint(endpoints[0].Address);
  } else {
    //endpoint record not in cache or outdated. make discovery operation
    var endpointRequest = service.makeRequest(api.endpointOperation, {
      Operation: operationModel.name,
      Identifiers: identifiers,
    });
    addApiVersionHeader(endpointRequest);
    endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);
    endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK);
    //put in a placeholder for endpoints already requested, prevent
    //too much in-flight calls
    AWS.endpointCache.put(cacheKey, [{
      Address: '',
      CachePeriodInMinutes: 1
    }]);
    endpointRequest.send(function(err, data) {
      if (data && data.Endpoints) {
        AWS.endpointCache.put(cacheKey, data.Endpoints);
      } else if (err) {
        AWS.endpointCache.put(cacheKey, [{
          Address: '',
          CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute
        }]);
      }
    });
  }
}
function optionalDiscoverEndpoint(request) {
  var service = request.service;
  var api = service.api;
  var operationModel = api.operations ? api.operations[request.operation] : undefined;
  var inputShape = operationModel ? operationModel.input : undefined;

  var identifiers = marshallCustomIdentifiers(request, inputShape);
  var cacheKey = getCacheKey(request);
  if (Object.keys(identifiers).length > 0) {
    cacheKey = util.update(cacheKey, identifiers);
    if (operationModel) cacheKey.operation = operationModel.name;
  }
  var endpoints = AWS.endpointCache.get(cacheKey);
  if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {
    //endpoint operation is being made but response not yet received
    //or endpoint operation just failed in 1 minute
    return;
  } else if (endpoints && endpoints.length > 0) {
    //found endpoint record from cache
    request.httpRequest.updateEndpoint(endpoints[0].Address);
  } else {
    //endpoint record not in cache or outdated. make discovery operation
    var endpointRequest = service.makeRequest(api.endpointOperation, {
      Operation: operationModel.name,
      Identifiers: identifiers,
    });
    addApiVersionHeader(endpointRequest);
    endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);
    endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK);
    //put in a placeholder for endpoints already requested, prevent
    //too much in-flight calls
    AWS.endpointCache.put(cacheKey, [{
      Address: '',
      CachePeriodInMinutes: 1
    }]);
    endpointRequest.send(function(err, data) {
      if (data && data.Endpoints) {
        AWS.endpointCache.put(cacheKey, data.Endpoints);
      } else if (err) {
        AWS.endpointCache.put(cacheKey, [{
          Address: '',
          CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute
        }]);
      }
    });
  }
}
function optionalDiscoverEndpoint ( request ) { var service = request . service ; var api = service . api ; var operationModel = api . operations ? api . operations [ request . operation ] : undefined ; var inputShape = operationModel ? operationModel . input : undefined ; var identifiers = marshallCustomIdentifiers ( request , inputShape ) ; var cacheKey = getCacheKey ( request ) ; if ( Object . keys ( identifiers ) . length > 0 ) { cacheKey = util . update ( cacheKey , identifiers ) ; if ( operationModel ) cacheKey . operation = operationModel . name ; } var endpoints = AWS . endpointCache . get ( cacheKey ) ; if ( endpoints && endpoints . length === 1 && endpoints [ 0 ] . Address === '' ) { //endpoint operation is being made but response not yet received //or endpoint operation just failed in 1 minute return ; } else if ( endpoints && endpoints . length > 0 ) { //found endpoint record from cache request . httpRequest . updateEndpoint ( endpoints [ 0 ] . Address ) ; } else { //endpoint record not in cache or outdated. make discovery operation var endpointRequest = service . makeRequest ( api . endpointOperation , { Operation : operationModel . name , Identifiers : identifiers , } ) ; addApiVersionHeader ( endpointRequest ) ; endpointRequest . removeListener ( 'validate' , AWS . EventListeners . Core . VALIDATE_PARAMETERS ) ; endpointRequest . removeListener ( 'retry' , AWS . EventListeners . Core . RETRY_CHECK ) ; //put in a placeholder for endpoints already requested, prevent //too much in-flight calls AWS . endpointCache . put ( cacheKey , [ { Address : '' , CachePeriodInMinutes : 1 } ] ) ; endpointRequest . send ( function ( err , data ) { if ( data && data . Endpoints ) { AWS . endpointCache . put ( cacheKey , data . Endpoints ) ; } else if ( err ) { AWS . endpointCache . put ( cacheKey , [ { Address : '' , CachePeriodInMinutes : 1 //not to make more endpoint operation in next 1 minute } ] ) ; } } ) ; } }
Call endpoint discovery operation when it's optional.
When endpoint is available in cache then use the cached endpoints. If endpoints
are unavailable then use regional endpoints and call endpoint discovery operation
asynchronously. This is turned off by default.
@param [object] request object
@api private
Call endpoint discovery operation when it s optional . When endpoint is available in cache then use the cached endpoints . If endpoints are unavailable then use regional endpoints and call endpoint discovery operation asynchronously . This is turned off by default .