121 lines
3.5 KiB
JavaScript
121 lines
3.5 KiB
JavaScript
var AWS = require('../core');
|
|
|
|
/**
|
|
* Constructs a service interface object. Each API operation is exposed as a
|
|
* function on service.
|
|
*
|
|
* ### Sending a Request Using CloudSearchDomain
|
|
*
|
|
* ```javascript
|
|
* var csd = new AWS.CloudSearchDomain({endpoint: 'my.host.tld'});
|
|
* csd.search(params, function (err, data) {
|
|
* if (err) console.log(err, err.stack); // an error occurred
|
|
* else console.log(data); // successful response
|
|
* });
|
|
* ```
|
|
*
|
|
* ### Locking the API Version
|
|
*
|
|
* In order to ensure that the CloudSearchDomain object uses this specific API,
|
|
* you can construct the object by passing the `apiVersion` option to the
|
|
* constructor:
|
|
*
|
|
* ```javascript
|
|
* var csd = new AWS.CloudSearchDomain({
|
|
* endpoint: 'my.host.tld',
|
|
* apiVersion: '2013-01-01'
|
|
* });
|
|
* ```
|
|
*
|
|
* You can also set the API version globally in `AWS.config.apiVersions` using
|
|
* the **cloudsearchdomain** service identifier:
|
|
*
|
|
* ```javascript
|
|
* AWS.config.apiVersions = {
|
|
* cloudsearchdomain: '2013-01-01',
|
|
* // other service API versions
|
|
* };
|
|
*
|
|
* var csd = new AWS.CloudSearchDomain({endpoint: 'my.host.tld'});
|
|
* ```
|
|
*
|
|
* @note You *must* provide an `endpoint` configuration parameter when
|
|
* constructing this service. See {constructor} for more information.
|
|
*
|
|
* @!method constructor(options = {})
|
|
* Constructs a service object. This object has one method for each
|
|
* API operation.
|
|
*
|
|
* @example Constructing a CloudSearchDomain object
|
|
* var csd = new AWS.CloudSearchDomain({endpoint: 'my.host.tld'});
|
|
* @note You *must* provide an `endpoint` when constructing this service.
|
|
* @option (see AWS.Config.constructor)
|
|
*
|
|
* @service cloudsearchdomain
|
|
* @version 2013-01-01
|
|
*/
|
|
AWS.util.update(AWS.CloudSearchDomain.prototype, {
|
|
/**
|
|
* @api private
|
|
*/
|
|
validateService: function validateService() {
|
|
if (!this.config.endpoint || this.config.endpoint.indexOf('{') >= 0) {
|
|
var msg = 'AWS.CloudSearchDomain requires an explicit ' +
|
|
'`endpoint\' configuration option.';
|
|
throw AWS.util.error(new Error(),
|
|
{name: 'InvalidEndpoint', message: msg});
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @api private
|
|
*/
|
|
setupRequestListeners: function setupRequestListeners(request) {
|
|
request.removeListener('validate',
|
|
AWS.EventListeners.Core.VALIDATE_CREDENTIALS
|
|
);
|
|
request.onAsync('validate', this.validateCredentials);
|
|
request.addListener('validate', this.updateRegion);
|
|
if (request.operation === 'search') {
|
|
request.addListener('build', this.convertGetToPost);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @api private
|
|
*/
|
|
validateCredentials: function(req, done) {
|
|
if (!req.service.api.signatureVersion) return done(); // none
|
|
req.service.config.getCredentials(function(err) {
|
|
if (err) {
|
|
req.removeListener('sign', AWS.EventListeners.Core.SIGN);
|
|
}
|
|
done();
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @api private
|
|
*/
|
|
convertGetToPost: function(request) {
|
|
var httpRequest = request.httpRequest;
|
|
// convert queries to POST to avoid length restrictions
|
|
var path = httpRequest.path.split('?');
|
|
httpRequest.method = 'POST';
|
|
httpRequest.path = path[0];
|
|
httpRequest.body = path[1];
|
|
httpRequest.headers['Content-Length'] = httpRequest.body.length;
|
|
httpRequest.headers['Content-Type'] = 'application/x-www-form-urlencoded';
|
|
},
|
|
|
|
/**
|
|
* @api private
|
|
*/
|
|
updateRegion: function updateRegion(request) {
|
|
var endpoint = request.httpRequest.endpoint.hostname;
|
|
var zones = endpoint.split('.');
|
|
request.httpRequest.region = zones[1] || request.httpRequest.region;
|
|
}
|
|
|
|
});
|