aws-sdk
Advanced tools
Comparing version 0.9.2-pre.3 to 0.9.3-pre.4
@@ -39,10 +39,8 @@ /** | ||
} | ||
world.eventually(callback, function (retry) { | ||
world.eventually(callback, function (next) { | ||
next.condition = function() { | ||
return this.data.Table.TableStatus === 'ACTIVE'; | ||
}; | ||
params = { TableName: world.tableName }; | ||
world.client.describeTable(params, function(err, data) { | ||
if (data.Table && data.Table.TableStatus === 'ACTIVE') | ||
callback(); | ||
else | ||
retry(); | ||
}); | ||
world.request(null, 'describeTable', params, next); | ||
}, {maxTime: 500, delay: 10, backoff: 0}); | ||
@@ -74,14 +72,8 @@ }); | ||
var params = {TableName: this.tableName, Key: {HashKeyElement: {S: key}}}; | ||
this.client.getItem(params, function(err, data) { | ||
world.resp = this; | ||
world.error = err; | ||
next(); | ||
}); | ||
this.request(null, 'getItem', params, next); | ||
}); | ||
this.Then(/^it should have attribute "([^"]*)" containing "([^"]*)"$/, function(attr, value, next) { | ||
if (this.resp.data.Item[attr].S !== value) | ||
next.fail("Attr value " + this.resp.data.Item[attr].S + " does not match " + value); | ||
else | ||
next(); | ||
this.assert.equal(this.data.Item[attr].S, value); | ||
next(); | ||
}); | ||
@@ -94,14 +86,13 @@ | ||
this.Then(/^the table should eventually not exist$/, function(next) { | ||
var world = this; | ||
world.eventually(next, function (retry) { | ||
world.client.listTables(function(err, data) { | ||
for (var i = 0; i < data.TableNames.length; i++) { | ||
if (data.TableNames[i] == world.tableName) { | ||
retry(); | ||
return; | ||
this.Then(/^the table should eventually not exist$/, function(callback) { | ||
this.eventually(callback, function (next) { | ||
next.condition = function() { | ||
for (var i = 0; i < this.data.TableNames.length; i++) { | ||
if (this.data.TableNames[i] == this.tableName) { | ||
return false; | ||
} | ||
} | ||
next(); | ||
}); | ||
return true; | ||
}; | ||
this.request(null, 'listTables', {}, next); | ||
}); | ||
@@ -124,3 +115,4 @@ }); | ||
req.on('complete', function(resp) { | ||
world.resp = resp; | ||
world.error = resp.error; | ||
world.response = resp; | ||
if (resp.error) callback.fail(resp.error); | ||
@@ -133,4 +125,4 @@ else callback(); | ||
this.Then(/^the request should( not)? be retried$/, function(retry, callback) { | ||
if (retry && this.resp.retryCount > 0) callback.fail('Request was incorrectly retried'); | ||
if (!retry && this.resp.retryCount == 0) callback.fail('Request was incorrectly retried'); | ||
if (retry && this.response.retryCount > 0) callback.fail('Request was incorrectly retried'); | ||
if (!retry && this.response.retryCount == 0) callback.fail('Request was incorrectly retried'); | ||
callback(); | ||
@@ -147,3 +139,4 @@ }); | ||
req.on('complete', function(resp) { | ||
world.resp = resp; | ||
world.error = resp.error; | ||
world.response = resp; | ||
callback(); | ||
@@ -155,3 +148,3 @@ }); | ||
this.When(/^the request is retried the maximum number of times$/, function(callback) { | ||
if (this.resp.retryCount != 2) callback.fail('Incorrect retry count'); | ||
if (this.response.retryCount != 2) callback.fail('Incorrect retry count'); | ||
callback(); | ||
@@ -161,6 +154,14 @@ }); | ||
this.Then(/^the request should( not)? fail with a CRC checking error$/, function(failed, callback) { | ||
if (failed && this.resp.error) callback.fail(this.resp.error); | ||
if (!failed && !this.resp.error) callback.fail('Did not fail when should have'); | ||
if (failed && this.error) callback.fail(this.error); | ||
if (!failed && !this.error) callback.fail('Did not fail when should have'); | ||
callback(); | ||
}); | ||
this.Given(/^I try to delete an item with key "([^"]*)" from table "([^"]*)"$/, function(key, table, callback) { | ||
this.request(null, 'deleteItem', {TableName: table, Key: key}, callback, false); | ||
}); | ||
this.Given(/^I try to delete an item with no table parameter$/, function(callback) { | ||
this.request(null, 'deleteItem', {}, callback, false); | ||
}); | ||
}; |
@@ -26,5 +26,5 @@ /** | ||
this.bucket = 'aws-sdk-js-integration-elastictranscoder'; | ||
this.bucket = 'aws-sdk-js-integration-elastictranscoder-' + timestamp; | ||
new this.AWS.S3.Client().createBucket({Bucket:this.bucket}, function(err, data) { | ||
if (err) callback.fail('Could not create bucket ' + world.bucket); | ||
if (err) callback.fail(err); | ||
@@ -56,9 +56,7 @@ var config = JSON.parse(world.AWS.util.readFileSync('configuration')); | ||
this.Then(/^the list should contain the pipeline$/, function(callback) { | ||
for (var idx in this.resp.data.Pipelines) { | ||
if (this.resp.data.Pipelines[idx].Id === this.pipelineId) { | ||
callback(); | ||
return; | ||
} | ||
} | ||
callback.fail('Pipeline ' + this.pipelineId + ' is not in pipelines'); | ||
var id = this.pipelineId; | ||
this.assert.contains(this.data.Pipelines, function (pipeline) { | ||
return pipeline.Id === id; | ||
}); | ||
callback(); | ||
}); | ||
@@ -75,10 +73,9 @@ | ||
this.Then(/^the pipeline status should be "([^"]*)"$/, function(status, callback) { | ||
if (this.resp.data.Pipeline.Status === status) callback(); | ||
else callback.fail('Expected status ' + status + ', got ' + this.resp.data.Pipeline.Status); | ||
this.assert.equal(this.data.Pipeline.Status, status); | ||
callback(); | ||
}); | ||
this.Then(/^I delete the pipeline$/, function(callback) { | ||
var world = this; | ||
this.request(null, 'deletePipeline', {Id: this.pipelineId}, function() { | ||
world.request(new world.AWS.S3.Client(), 'deleteBucket', {Bucket: world.bucket}, callback); | ||
this.request(new this.AWS.S3.Client(), 'deleteBucket', {Bucket: this.bucket}, callback); | ||
}); | ||
@@ -88,10 +85,4 @@ }); | ||
this.Given(/^I create a pipeline with invalid parameters$/, function(callback) { | ||
var world = this; | ||
this.client.createPipeline({}, function() { world.resp = this; callback(); }); | ||
this.request(null, 'createPipeline', {}, callback, false); | ||
}); | ||
this.Then(/^the error code should be "([^"]*)"$/, function(code, callback) { | ||
if (this.resp.error.code === code) callback(); | ||
else callback.fail('Expected code ' + code + ', got ' + this.resp.error.code); | ||
}); | ||
}; |
@@ -27,3 +27,3 @@ /** | ||
this.AWS.util.date.unixTimestamp() * 1000; | ||
var params = { Bucket: this.bucket, LocationConstraint: loc }; | ||
var params = { Bucket: this.bucket, CreateBucketConfiguration: {LocationConstraint: loc} }; | ||
this.request('s3', 'createBucket', params, next); | ||
@@ -34,5 +34,3 @@ }); | ||
this.eventually(next, function (retry) { | ||
this.s3.headBucket({Bucket:this.bucket}, function(err) { | ||
err ? retry() : next(); | ||
}); | ||
this.request('s3', 'headBucket', {Bucket:this.bucket}, retry); | ||
}); | ||
@@ -47,5 +45,6 @@ }); | ||
this.eventually(next, function (retry) { | ||
this.s3.headBucket({Bucket:this.bucket}, function(err) { | ||
err && err.code == 'NotFound' ? next() : retry(); | ||
}); | ||
retry.condition = function() { | ||
return this.error && this.error.code === 'NotFound'; | ||
} | ||
this.request('s3', 'headBucket', {Bucket:this.bucket}, retry, false); | ||
}); | ||
@@ -52,0 +51,0 @@ }); |
@@ -42,10 +42,4 @@ /** | ||
this.Then(/^the object with the key "([^"]*)" should contain "([^"]*)"$/, function(key, contents, next) { | ||
this.eventually(next, function (retry) { | ||
this.s3.getObject({Bucket:this.sharedBucket,Key:key}, function(err, data) { | ||
if (data && data.Body.toString().replace("\n", "") == contents) | ||
next(); | ||
else | ||
retry(); | ||
}); | ||
}); | ||
this.assert.equal(this.data.Body.toString().replace("\n", ""), contents); | ||
next(); | ||
}); | ||
@@ -68,9 +62,10 @@ | ||
this.eventually(next, function (retry) { | ||
this.s3.headObject(params, function(err, data) { | ||
retry.condition = function() { | ||
if (shouldNotExist) { | ||
(err && err.code == 'NotFound') ? next() : retry(); | ||
} else { // should exist | ||
err ? retry() : next(); | ||
return this.error && this.error.code == 'NoSuchKey'; | ||
} else { | ||
return !this.error; | ||
} | ||
}); | ||
}; | ||
this.request('s3', 'getObject', params, retry, false); | ||
}); | ||
@@ -77,0 +72,0 @@ }); |
@@ -22,8 +22,2 @@ /** | ||
this.Then(/^the status code should be (\d+)$/, function(status, next) { | ||
if (parseInt(status) !== this.resp.httpResponse.statusCode) { | ||
next.fail("Expected status " + status + ", got " + this.resp.httpResponse.statusCode) | ||
} else { next(); } | ||
}); | ||
this.When(/^I check quota$/, function(next) { | ||
@@ -34,4 +28,4 @@ this.request(null, 'getSendQuota', {}, next); | ||
this.Then(/^the result should include (\S+) "([^"]*)"$/, function(type, attr, next) { | ||
if (this.resp.data[attr] === undefined) next.fail("Missing " + attr); | ||
if (typeof this.resp.data[attr] !== type) next.fail("Incorrect type " + attr); | ||
if (this.data[attr] === undefined) next.fail("Missing " + attr); | ||
if (typeof this.data[attr] !== type) next.fail("Incorrect type " + attr); | ||
next(); | ||
@@ -45,9 +39,2 @@ }); | ||
}); | ||
this.Then(/^I should get the error:$/, function(table, next) { | ||
var err = table.hashes()[0] | ||
if (err.code !== this.error.code || err.message !== this.error.message) { | ||
next.fail("Expected " + err.code + ", " + err.message + ", got " + this.resp.error); | ||
} else { next(); } | ||
}); | ||
}; |
@@ -19,33 +19,21 @@ /** | ||
this.When(/^I send the message "([^"]*)"$/, function(message, callback) { | ||
var world = this; | ||
this.client.sendMessage({QueueUrl:this.queueUrl,MessageBody:message}, function(err, data) { | ||
if (err) callback.fail(); | ||
world.data = data; | ||
callback(); | ||
}); | ||
this.request(null, 'sendMessage', {QueueUrl:this.queueUrl,MessageBody:message}, callback); | ||
}); | ||
this.Then(/^the result should include a message ID$/, function(callback) { | ||
if (this.data.MessageId) callback(); | ||
else callback.fail(); | ||
this.assert.compare(this.data.MessageId.length, '>', 0); | ||
callback(); | ||
}); | ||
this.Then(/^the result should have an MD5 digest of "([^"]*)"$/, function(digest, callback) { | ||
if (this.data.MD5OfMessageBody === digest) callback(); | ||
else callback.fail(); | ||
this.assert.equal(this.data.MD5OfMessageBody, digest); | ||
callback(); | ||
}); | ||
this.Then(/^I should eventually be able to receive "([^"]*)" from the queue$/, function(message, callback) { | ||
var world = this; | ||
this.eventually(callback, function (retry) { | ||
this.client.receiveMessage({QueueUrl:world.queueUrl}, function(err, data) { | ||
if (err) retry(); | ||
else { | ||
var params = {QueueUrl:world.queueUrl,ReceiptHandle:data.Messages[0].ReceiptHandle}; | ||
var success = data.Messages[0].Body === message; | ||
world.client.deleteMessage(params, function(err, data) { | ||
(!success && err) ? callback.fail(err) : callback(); | ||
}); | ||
} | ||
}); | ||
this.eventually(callback, function (next) { | ||
next.condition = function() { | ||
return this.data.Messages[0].Body === message; | ||
}; | ||
this.request(null, 'receiveMessage', {QueueUrl:this.queueUrl}, next); | ||
}); | ||
@@ -52,0 +40,0 @@ }); |
@@ -43,7 +43,7 @@ /** | ||
this.eventually(callback, function (retry) { | ||
if(this.createdQueues.length == count) { | ||
callback(); | ||
this.eventually(callback, function (next) { | ||
if (this.createdQueues.length == count) { | ||
next(); | ||
} else { | ||
retry(); | ||
next.fail(); | ||
} | ||
@@ -54,20 +54,15 @@ }, { maxTime: 20 }); | ||
this.Then(/^list queues should eventually return the queue urls$/, function(callback) { | ||
var world = this; | ||
var createdQueues = this.createdQueues; | ||
this.eventually(callback, function (retry) { | ||
this.client.listQueues(function (err, data) { | ||
this.eventually(callback, function (next) { | ||
next.condition = function() { | ||
var matchingCount = 0; | ||
if (err) callback.fail(err); | ||
for (var i = 0; i < createdQueues.length; ++i) { | ||
for (var j = 0; j < data.QueueUrls.length; ++j) { | ||
if (createdQueues[i] == data.QueueUrls[j]) { | ||
matchingCount += 1; | ||
for (var i = 0; i < this.createdQueues.length; ++i) { | ||
for (var j = 0; j < this.data.QueueUrls.length; ++j) { | ||
if (this.createdQueues[i] == this.data.QueueUrls[j]) { | ||
matchingCount++; | ||
} | ||
} | ||
} | ||
if (matchingCount == createdQueues.length) | ||
callback(); | ||
else | ||
retry(); | ||
}); | ||
return matchingCount == this.createdQueues.length; | ||
}; | ||
this.request(null, 'listQueues', {}, next); | ||
}, { maxTime: 60 }); | ||
@@ -82,7 +77,7 @@ }); | ||
this.eventually(callback, function (retry) { | ||
if(this.deletedQueues.length == this.createdQueues.length) { | ||
callback(); | ||
this.eventually(callback, function (next) { | ||
if (this.deletedQueues.length == this.createdQueues.length) { | ||
next(); | ||
} else { | ||
retry(); | ||
next.fail(); | ||
} | ||
@@ -89,0 +84,0 @@ }, { maxTime: 20 }); |
@@ -18,2 +18,9 @@ /** | ||
assert: require('./assertions').assert, | ||
uniqueName: function uniqueName(base) { | ||
if (base === "") return ""; | ||
return base + '-' + new Date().getTime(); | ||
}, | ||
/** | ||
@@ -24,8 +31,8 @@ * Call this function with a block that will be executed multiple times | ||
* this.When(/^I something is eventually consistent$/, function(callback) { | ||
* this.eventually(callback, function(retry) { | ||
* this.eventually(callback, function(next) { | ||
* doSomething(function(response) { | ||
* if (response != notWhatIExpect) { | ||
* retry(); | ||
* next.fail(); | ||
* } else { | ||
* callback(); | ||
* next(); | ||
* } | ||
@@ -53,4 +60,4 @@ * }); | ||
var self = this; | ||
var retry = function() { | ||
var retry = function() { callback(); }; | ||
retry.fail = function(err) { | ||
var now = self.AWS.util.date.getDate(); | ||
@@ -63,5 +70,4 @@ if (now - started < options.maxTime * 1000) { | ||
} else { | ||
callback.fail(); | ||
callback.fail(err || new Error('Eventually block timed out')); | ||
} | ||
}; | ||
@@ -84,13 +90,27 @@ | ||
svc[operation](params, function(err, data) { | ||
world.response = this; | ||
world.error = err; | ||
world.resp = this; | ||
if (extra) { | ||
extra.call(world, this); | ||
next(); | ||
world.data = data; | ||
try { | ||
if (typeof next.condition === 'function') { | ||
var condition = next.condition.call(world, world); | ||
if (!condition) { | ||
next.fail(new Error('Request success condition failed')); | ||
return; | ||
} | ||
} | ||
if (extra) { | ||
extra.call(world, world.response); | ||
next.call(world); | ||
} | ||
else if (extra !== false && err) { | ||
world.unexpectedError(world.response, next); | ||
} else { | ||
next.call(world); | ||
} | ||
} catch (err) { | ||
next.fail(err); | ||
} | ||
else if (err) { | ||
world.unexpectedError(this, next); | ||
} else { | ||
next(); | ||
} | ||
}); | ||
@@ -110,5 +130,5 @@ }, | ||
var err = 'Received unexpected error from ' + svc + '.' + op + ', ' + code + ': ' + msg; | ||
next.fail(err); | ||
next.fail(new Error(err)); | ||
} | ||
}; |
@@ -20,2 +20,29 @@ /** | ||
/* Global error code steps */ | ||
this.Then(/^the error code should be "([^"]*)"$/, function(code, callback) { | ||
this.assert.ok(this.error, 'Response does not contain an error'); | ||
this.assert.equal(this.error.code, code); | ||
callback(); | ||
}); | ||
this.Then(/^the error message should (be|equal|match|contain):$/, function(matcher, message, callback) { | ||
if (matcher === 'be') matcher = 'equal'; | ||
if (matcher === 'contain') matcher = 'match'; | ||
this.assert.ok(this.error, 'Response does not contain an error'); | ||
this.assert[matcher](this.error.message, message); | ||
callback(); | ||
}); | ||
this.Then(/^the status code should be (\d+)$/, function(status, callback) { | ||
this.assert.equal(this.response.httpResponse.statusCode, parseInt(status)); | ||
callback(); | ||
}); | ||
this.Then(/^I should get the error:$/, function(table, callback) { | ||
var err = table.hashes()[0] | ||
this.assert.equal(this.error.code, err.code); | ||
this.assert.equal(this.error.message, err.message); | ||
callback(); | ||
}); | ||
}; |
@@ -19,8 +19,16 @@ /** | ||
require('./services/autoscaling'); | ||
require('./services/cloudwatch'); | ||
require('./services/dynamodb'); | ||
require('./services/ec2'); | ||
require('./services/elastictranscoder'); | ||
require('./services/elb'); | ||
require('./services/emr'); | ||
require('./services/iam'); | ||
require('./services/s3'); | ||
require('./services/ses'); | ||
require('./services/simpledb'); | ||
require('./services/simpleworkflow'); | ||
require('./services/sns'); | ||
require('./services/sqs'); | ||
require('./services/sts'); |
@@ -60,5 +60,7 @@ /** | ||
addAllRequestListeners: function addAllRequestListeners(request) { | ||
var svc = this.serviceInterface(); | ||
request.addListeners(AWS.EventListeners.Core); | ||
if (svc) request.addListeners(svc); | ||
var list = [AWS.events, AWS.EventListeners.Core, | ||
this.serviceInterface()]; | ||
for (var i = 0; i < list.length; i++) { | ||
if (list[i]) request.addListeners(list[i]); | ||
} | ||
this.setupRequestListeners(request); | ||
@@ -134,2 +136,4 @@ }, | ||
this.endpoint = new AWS.Endpoint(endpoint, this.config); | ||
} else if (this.api.globalEndpoint) { | ||
this.endpoint = new AWS.Endpoint(this.api.globalEndpoint, this.config); | ||
} else { | ||
@@ -148,5 +152,5 @@ var host = this.api.serviceName + '.' + this.config.region + '.amazonaws.com'; | ||
*/ | ||
defineMethods: function defineMethods(svc) { | ||
AWS.util.each(svc.prototype.api.operations, function iterator(method) { | ||
svc.prototype[method] = function (params, callback) { | ||
defineMethods: function defineMethods(client) { | ||
AWS.util.each(client.prototype.api.operations, function iterator(method) { | ||
client.prototype[method] = function (params, callback) { | ||
return this.makeRequest(method, params, callback); | ||
@@ -153,0 +157,0 @@ }; |
@@ -17,2 +17,4 @@ /** | ||
var AWS = require('./core'); | ||
require('./event_listeners'); | ||
require('./event_emitter'); | ||
var inherit = AWS.util.inherit; | ||
@@ -151,3 +153,3 @@ | ||
} | ||
if (defaultValue instanceof Function) { | ||
if (typeof defaultValue === 'function') { | ||
this[property] = defaultValue.call(this); | ||
@@ -443,3 +445,3 @@ } else { | ||
var creds; | ||
if (provider instanceof Function) { | ||
if (typeof provider === 'function') { | ||
creds = provider.call(); | ||
@@ -446,0 +448,0 @@ } else { |
@@ -28,3 +28,3 @@ /** | ||
*/ | ||
VERSION: 'v0.9.2-pre.3', | ||
VERSION: 'v0.9.3-pre.4', | ||
@@ -51,1 +51,18 @@ /** | ||
require('./request_signer'); | ||
/** | ||
* @readonly | ||
* @return [AWS.EventEmitter] a collection of global event listeners that are | ||
* attached to every sent request. | ||
* @see AWS.Request AWS.Request for a list of events to listen for | ||
* @example Logging the time taken to send a request | ||
* AWS.events.on('send', function startSend(resp) { | ||
* resp.startTime = new Date().getTime(); | ||
* }).on('complete', function calculateTime(resp) { | ||
* var time = (new Date().getTime() - resp.startTime) / 1000; | ||
* console.log('Request took ' + time + ' seconds'); | ||
* }); | ||
* | ||
* new AWS.S3.Client().listBuckets(); // prints 'Request took 0.285 seconds' | ||
*/ | ||
AWS.events = new AWS.EventEmitter(); |
@@ -37,3 +37,3 @@ /** | ||
* containing listeners to add to this emitter object. | ||
* @return [null] | ||
* @return [AWS.EventEmitter] the emitter object, for chaining. | ||
* @example Adding listeners from a map of listeners | ||
@@ -62,3 +62,3 @@ * emitter.addListeners({ | ||
AWS.util.each(listeners, function(event, callbacks) { | ||
if (callbacks instanceof Function) callbacks = [callbacks]; | ||
if (typeof callbacks === 'function') callbacks = [callbacks]; | ||
AWS.util.arrayEach(callbacks, function(callback) { | ||
@@ -68,2 +68,4 @@ self.on(event, callback); | ||
}); | ||
return self; | ||
}, | ||
@@ -70,0 +72,0 @@ |
@@ -150,3 +150,4 @@ /** | ||
if (resp.httpResponse.buffers.length > 0) { | ||
resp.httpResponse.body = Buffer.concat(resp.httpResponse.buffers); | ||
var body = AWS.util.buffer.concat(resp.httpResponse.buffers); | ||
resp.httpResponse.body = body; | ||
} | ||
@@ -153,0 +154,0 @@ delete resp.httpResponse.buffers; |
@@ -184,7 +184,7 @@ /** | ||
var stream = client.request(options, function onResponse(httpResponse) { | ||
request.emit('httpHeaders', httpResponse.statusCode, | ||
httpResponse.headers, response); | ||
request.emitEvent('httpHeaders', response, httpResponse.statusCode, | ||
httpResponse.headers, response); | ||
httpResponse.on('data', function onData(data) { | ||
request.emit('httpData', data, response); | ||
request.emitEvent('httpData', response, data, response); | ||
}); | ||
@@ -198,3 +198,3 @@ | ||
stream.on('error', function (err) { | ||
request.emit('httpError', AWS.util.error(err, | ||
request.emitEvent('httpError', response, AWS.util.error(err, | ||
{code: 'NetworkingError', retryable: true}), response); | ||
@@ -201,0 +201,0 @@ }); |
@@ -309,3 +309,3 @@ /** | ||
if (this.listeners('error').length > 0) { | ||
this.emit('error', response.error, response); | ||
this.emitEvent('error', response); | ||
} | ||
@@ -351,3 +351,10 @@ } else { | ||
try { | ||
this.emit(eventName, this.eventParameters(eventName, response)); | ||
var args; | ||
if (arguments.length > 2) { | ||
// TODO: accept any amount of arguments | ||
args = [eventName, arguments[2], arguments[3], arguments[4], arguments[5]]; | ||
} else { | ||
args = this.eventParameters(eventName, response); | ||
} | ||
this.emit.apply(this, args); | ||
} catch (err) { | ||
@@ -362,8 +369,11 @@ response.error = err; | ||
eventParameters: function eventParameters(eventName, response) { | ||
/*jshint maxcomplexity:8*/ | ||
switch (eventName) { | ||
case 'validate': case 'sign': | ||
case 'build': case 'afterBuild': | ||
return this; | ||
return [eventName, this]; | ||
case 'error': | ||
return [eventName, response.error, response]; | ||
default: | ||
return response; | ||
return [eventName, response]; | ||
} | ||
@@ -370,0 +380,0 @@ } |
@@ -56,2 +56,3 @@ /** | ||
if (data.Errors) data = data.Errors; | ||
if (data.Error) data = data.Error; | ||
@@ -149,3 +150,3 @@ if (data.Code) { | ||
toString: function toString() { | ||
return this.value ? | ||
return this.value !== undefined && this.value !== null ? | ||
this.encode(this.name) + '=' + this.encode(this.value) : | ||
@@ -162,5 +163,4 @@ this.encode(this.name); | ||
constructor: function QueryParamSerializer(rules, memberedLists) { | ||
constructor: function QueryParamSerializer(rules) { | ||
this.rules = rules; | ||
this.memberedLists = memberedLists; | ||
}, | ||
@@ -200,9 +200,16 @@ | ||
var that = this; | ||
var memberRules = rules.m || {}; | ||
AWS.util.arrayEach(list, function (v, n) { | ||
var suffix = '.' + (n + 1); | ||
if (that.memberedLists) | ||
suffix = '.' + (rules.n || 'member') + suffix; | ||
else if(rules.n) | ||
name = rules.n; | ||
that.serializeMember(name + suffix, v, rules, fn); | ||
if (rules.f) { | ||
if (memberRules.n) { | ||
var parts = name.split('.'); | ||
parts.pop(); | ||
parts.push(memberRules.n); | ||
name = parts.join('.'); | ||
} | ||
} else { | ||
suffix = '.' + (memberRules.n || 'member') + suffix; | ||
} | ||
that.serializeMember(name + suffix, v, memberRules, fn); | ||
}); | ||
@@ -215,3 +222,3 @@ }, | ||
else if (rules.t === 'a') | ||
this.serializeList(name, value, rules.m || {}, fn); | ||
this.serializeList(name, value, rules, fn); | ||
else if (rules.t === 'm') | ||
@@ -218,0 +225,0 @@ this.serializeMap(name, value, rules, fn); |
@@ -33,2 +33,4 @@ /** | ||
var data = new AWS.XML.Parser({}).parse(resp.httpResponse.body.toString()); | ||
if (data.Errors) data = data.Errors; | ||
if (data.Error) data = data.Error; | ||
if (data.Code) { | ||
@@ -55,4 +57,8 @@ resp.error = AWS.util.error(new Error(), { | ||
if (rules.Body && rules.Body.t === 'bl') { | ||
resp.data.Body = httpResponse.body; | ||
if (operation.op) { | ||
var payload = httpResponse.body; | ||
if (rules[operation.op] && !rules[operation.op].s) { | ||
payload = payload.toString(); // payload is not binary | ||
} | ||
resp.data[operation.op] = payload; | ||
} else if (httpResponse.body.length > 0) { | ||
@@ -59,0 +65,0 @@ var parser = new AWS.XML.Parser(rules); |
@@ -47,2 +47,11 @@ /** | ||
var header = (rule.n || name).toLowerCase(); | ||
if (rule.t == 'm') { | ||
data[name] = {}; | ||
AWS.util.each(r.headers, function (k, v) { | ||
var result = k.match(new RegExp('^' + rule.n + '(.+)', 'i')); | ||
if (result !== null) { | ||
data[name][result[1]] = v; | ||
} | ||
}); | ||
} | ||
if (headers[header] !== undefined) { | ||
@@ -49,0 +58,0 @@ data[name] = headers[header]; |
@@ -33,4 +33,3 @@ /** | ||
} | ||
}, | ||
o: null | ||
} | ||
}, | ||
@@ -335,4 +334,3 @@ createJob: { | ||
} | ||
}, | ||
o: null | ||
} | ||
}, | ||
@@ -349,4 +347,3 @@ deletePreset: { | ||
} | ||
}, | ||
o: null | ||
} | ||
}, | ||
@@ -353,0 +350,0 @@ listJobsByPipeline: { |
@@ -20,2 +20,3 @@ /** | ||
serviceName: 's3', | ||
globalEndpoint: 's3.amazonaws.com', | ||
xmlNamespace: 'http://s3.amazonaws.com/doc/2006-03-01/', | ||
@@ -57,6 +58,2 @@ timestampFormat: 'rfc822', | ||
}, | ||
UploadId: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
MultipartUpload: { | ||
@@ -74,6 +71,6 @@ n: 'CompleteMultipartUpload', | ||
m: { | ||
ETag: { | ||
}, | ||
PartNumber: { | ||
t: 'i' | ||
}, | ||
ETag: { | ||
} | ||
@@ -84,2 +81,6 @@ } | ||
} | ||
}, | ||
UploadId: { | ||
r: 1, | ||
l: 'uri' | ||
} | ||
@@ -119,2 +120,6 @@ } | ||
m: { | ||
ACL: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
}, | ||
Bucket: { | ||
@@ -124,10 +129,22 @@ r: 1, | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
CacheControl: { | ||
l: 'header', | ||
n: 'Cache-Control' | ||
}, | ||
MetadataDirective: { | ||
ContentDisposition: { | ||
l: 'header', | ||
n: 'x-amz-metadata-directive' | ||
n: 'Content-Disposition' | ||
}, | ||
ContentEncoding: { | ||
l: 'header', | ||
n: 'Content-Encoding' | ||
}, | ||
ContentLanguage: { | ||
l: 'header', | ||
n: 'Content-Language' | ||
}, | ||
ContentType: { | ||
l: 'header', | ||
n: 'Content-Type' | ||
}, | ||
CopySource: { | ||
@@ -143,2 +160,7 @@ l: 'header', | ||
}, | ||
CopySourceIfModifiedSince: { | ||
t: 't', | ||
l: 'header', | ||
n: 'x-amz-copy-source-if-modified-since' | ||
}, | ||
CopySourceIfNoneMatch: { | ||
@@ -154,15 +176,11 @@ t: 't', | ||
}, | ||
CopySourceIfModifiedSince: { | ||
Expires: { | ||
t: 't', | ||
l: 'header', | ||
n: 'x-amz-copy-source-if-modified-since' | ||
n: 'Expires' | ||
}, | ||
StorageClass: { | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-storage-class' | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
ACL: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
}, | ||
GrantRead: { | ||
@@ -180,43 +198,26 @@ l: 'header', | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
CacheControl: { | ||
Metadata: { | ||
t: 'm', | ||
l: 'header', | ||
n: 'Cache-Control' | ||
n: 'x-amz-meta-' | ||
}, | ||
ContentDisposition: { | ||
MetadataDirective: { | ||
l: 'header', | ||
n: 'Content-Disposition' | ||
n: 'x-amz-metadata-directive' | ||
}, | ||
ContentEncoding: { | ||
ServerSideEncryption: { | ||
l: 'header', | ||
n: 'Content-Encoding' | ||
n: 'x-amz-server-side-encryption' | ||
}, | ||
ContentLanguage: { | ||
StorageClass: { | ||
l: 'header', | ||
n: 'Content-Language' | ||
n: 'x-amz-storage-class' | ||
}, | ||
ContentType: { | ||
l: 'header', | ||
n: 'Content-Type' | ||
}, | ||
Expires: { | ||
t: 't', | ||
l: 'header', | ||
n: 'Expires' | ||
}, | ||
WebsiteRedirectLocation: { | ||
l: 'header', | ||
n: 'x-amz-website-redirect-location' | ||
}, | ||
ServerSideEncryption: { | ||
l: 'header', | ||
n: 'x-amz-server-side-encryption' | ||
}, | ||
Metadata: { | ||
t: 'm', | ||
l: 'header', | ||
n: 'x-amz-meta-' | ||
} | ||
@@ -255,2 +256,6 @@ } | ||
m: { | ||
ACL: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
}, | ||
Bucket: { | ||
@@ -268,5 +273,5 @@ r: 1, | ||
}, | ||
ACL: { | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
@@ -277,2 +282,6 @@ GrantRead: { | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWrite: { | ||
@@ -282,13 +291,5 @@ l: 'header', | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWriteACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-write-acp' | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
} | ||
@@ -309,14 +310,2 @@ } | ||
m: { | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
StorageClass: { | ||
l: 'header', | ||
n: 'x-amz-storage-class' | ||
}, | ||
ACL: { | ||
@@ -326,18 +315,6 @@ l: 'header', | ||
}, | ||
GrantRead: { | ||
l: 'header', | ||
n: 'x-amz-grant-read' | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWriteACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-write-acp' | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
CacheControl: { | ||
@@ -368,10 +345,22 @@ l: 'header', | ||
}, | ||
WebsiteRedirectLocation: { | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-website-redirect-location' | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
ServerSideEncryption: { | ||
GrantRead: { | ||
l: 'header', | ||
n: 'x-amz-server-side-encryption' | ||
n: 'x-amz-grant-read' | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWriteACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-write-acp' | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
Metadata: { | ||
@@ -381,2 +370,14 @@ t: 'm', | ||
n: 'x-amz-meta-' | ||
}, | ||
ServerSideEncryption: { | ||
l: 'header', | ||
n: 'x-amz-server-side-encryption' | ||
}, | ||
StorageClass: { | ||
l: 'header', | ||
n: 'x-amz-storage-class' | ||
}, | ||
WebsiteRedirectLocation: { | ||
l: 'header', | ||
n: 'x-amz-website-redirect-location' | ||
} | ||
@@ -511,5 +512,2 @@ } | ||
m: { | ||
Quiet: { | ||
t: 'b' | ||
}, | ||
Objects: { | ||
@@ -530,2 +528,5 @@ n: 'Object', | ||
} | ||
}, | ||
Quiet: { | ||
t: 'b' | ||
} | ||
@@ -838,2 +839,3 @@ } | ||
}, | ||
op: 'Policy', | ||
o: { | ||
@@ -985,2 +987,20 @@ Policy: { | ||
}, | ||
IfMatch: { | ||
l: 'header', | ||
n: 'If-Match' | ||
}, | ||
IfModifiedSince: { | ||
t: 't', | ||
l: 'header', | ||
n: 'If-Modified-Since' | ||
}, | ||
IfNoneMatch: { | ||
l: 'header', | ||
n: 'If-None-Match' | ||
}, | ||
IfUnmodifiedSince: { | ||
t: 't', | ||
l: 'header', | ||
n: 'If-Unmodified-Since' | ||
}, | ||
Key: { | ||
@@ -990,19 +1010,22 @@ r: 1, | ||
}, | ||
ResponseContentType: { | ||
Range: { | ||
l: 'header' | ||
}, | ||
ResponseCacheControl: { | ||
l: 'uri' | ||
}, | ||
ResponseContentLanguage: { | ||
ResponseContentDisposition: { | ||
l: 'uri' | ||
}, | ||
ResponseExpires: { | ||
t: 't', | ||
ResponseContentEncoding: { | ||
l: 'uri' | ||
}, | ||
ResponseCacheControl: { | ||
ResponseContentLanguage: { | ||
l: 'uri' | ||
}, | ||
ResponseContentDisposition: { | ||
ResponseContentType: { | ||
l: 'uri' | ||
}, | ||
ResponseContentEncoding: { | ||
ResponseExpires: { | ||
t: 't', | ||
l: 'uri' | ||
@@ -1013,26 +1036,6 @@ }, | ||
n: 'versionId' | ||
}, | ||
Range: { | ||
l: 'header' | ||
}, | ||
IfModifiedSince: { | ||
t: 't', | ||
l: 'header', | ||
n: 'If-Modified-Since' | ||
}, | ||
IfUnmodifiedSince: { | ||
t: 't', | ||
l: 'header', | ||
n: 'If-Unmodified-Since' | ||
}, | ||
IfMatch: { | ||
l: 'header', | ||
n: 'If-Match' | ||
}, | ||
IfNoneMatch: { | ||
l: 'header', | ||
n: 'If-None-Match' | ||
} | ||
} | ||
}, | ||
op: 'Body', | ||
o: { | ||
@@ -1197,2 +1200,3 @@ Body: { | ||
}, | ||
op: 'Body', | ||
o: { | ||
@@ -1227,13 +1231,6 @@ Body: { | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
IfMatch: { | ||
l: 'header', | ||
n: 'If-Match' | ||
}, | ||
VersionId: { | ||
l: 'uri', | ||
n: 'versionId' | ||
}, | ||
Range: { | ||
l: 'header' | ||
}, | ||
IfModifiedSince: { | ||
@@ -1244,2 +1241,6 @@ t: 't', | ||
}, | ||
IfNoneMatch: { | ||
l: 'header', | ||
n: 'If-None-Match' | ||
}, | ||
IfUnmodifiedSince: { | ||
@@ -1250,9 +1251,12 @@ t: 't', | ||
}, | ||
IfMatch: { | ||
l: 'header', | ||
n: 'If-Match' | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
IfNoneMatch: { | ||
l: 'header', | ||
n: 'If-None-Match' | ||
Range: { | ||
l: 'header' | ||
}, | ||
VersionId: { | ||
l: 'uri', | ||
n: 'versionId' | ||
} | ||
@@ -1374,6 +1378,6 @@ } | ||
}, | ||
Prefix: { | ||
Delimiter: { | ||
l: 'uri' | ||
}, | ||
Delimiter: { | ||
KeyMarker: { | ||
l: 'uri' | ||
@@ -1385,3 +1389,3 @@ }, | ||
}, | ||
KeyMarker: { | ||
Prefix: { | ||
l: 'uri' | ||
@@ -1459,6 +1463,6 @@ }, | ||
}, | ||
KeyMarker: { | ||
Delimiter: { | ||
l: 'uri' | ||
}, | ||
VersionIdMarker: { | ||
KeyMarker: { | ||
l: 'uri' | ||
@@ -1470,6 +1474,6 @@ }, | ||
}, | ||
Delimiter: { | ||
Prefix: { | ||
l: 'uri' | ||
}, | ||
Prefix: { | ||
VersionIdMarker: { | ||
l: 'uri' | ||
@@ -1480,2 +1484,5 @@ } | ||
o: { | ||
IsTruncated: { | ||
t: 'b' | ||
}, | ||
KeyMarker: { | ||
@@ -1560,5 +1567,2 @@ }, | ||
}, | ||
IsTruncated: { | ||
t: 'b' | ||
}, | ||
CommonPrefixes: { | ||
@@ -1586,2 +1590,5 @@ t: 'a', | ||
}, | ||
Delimiter: { | ||
l: 'uri' | ||
}, | ||
Marker: { | ||
@@ -1594,5 +1601,2 @@ l: 'uri' | ||
}, | ||
Delimiter: { | ||
l: 'uri' | ||
}, | ||
Prefix: { | ||
@@ -1604,2 +1608,5 @@ l: 'uri' | ||
o: { | ||
IsTruncated: { | ||
t: 'b' | ||
}, | ||
Marker: { | ||
@@ -1644,5 +1651,2 @@ }, | ||
}, | ||
IsTruncated: { | ||
t: 'b' | ||
}, | ||
CommonPrefixes: { | ||
@@ -1674,6 +1678,2 @@ t: 'a', | ||
}, | ||
UploadId: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
MaxParts: { | ||
@@ -1685,2 +1685,6 @@ t: 'i', | ||
l: 'uri' | ||
}, | ||
UploadId: { | ||
r: 1, | ||
l: 'uri' | ||
} | ||
@@ -1756,5 +1760,5 @@ } | ||
m: { | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
ACL: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
}, | ||
@@ -1765,11 +1769,2 @@ AccessControlPolicy: { | ||
m: { | ||
Owner: { | ||
t: 'o', | ||
m: { | ||
ID: { | ||
}, | ||
DisplayName: { | ||
} | ||
} | ||
}, | ||
Grants: { | ||
@@ -1789,2 +1784,8 @@ n: 'AccessControlList', | ||
m: { | ||
DisplayName: { | ||
}, | ||
EmailAddress: { | ||
}, | ||
ID: { | ||
}, | ||
Type: { | ||
@@ -1795,8 +1796,2 @@ n: 'xsi:type', | ||
}, | ||
ID: { | ||
}, | ||
DisplayName: { | ||
}, | ||
EmailAddress: { | ||
}, | ||
URI: { | ||
@@ -1810,9 +1805,26 @@ } | ||
} | ||
}, | ||
Owner: { | ||
t: 'o', | ||
m: { | ||
DisplayName: { | ||
}, | ||
ID: { | ||
} | ||
} | ||
} | ||
} | ||
}, | ||
ACL: { | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
n: 'Content-MD5' | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
GrantRead: { | ||
@@ -1822,2 +1834,6 @@ l: 'header', | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWrite: { | ||
@@ -1827,17 +1843,5 @@ l: 'header', | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWriteACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-write-acp' | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -1867,2 +1871,7 @@ } | ||
m: { | ||
AllowedMethods: { | ||
n: 'AllowedMethod', | ||
t: 'a', | ||
f: 1 | ||
}, | ||
AllowedOrigins: { | ||
@@ -1873,4 +1882,4 @@ n: 'AllowedOrigin', | ||
}, | ||
AllowedMethods: { | ||
n: 'AllowedMethod', | ||
ExposeHeaders: { | ||
n: 'ExposeHeader', | ||
t: 'a', | ||
@@ -1881,7 +1890,2 @@ f: 1 | ||
t: 'i' | ||
}, | ||
ExposeHeaders: { | ||
n: 'ExposeHeader', | ||
t: 'a', | ||
f: 1 | ||
} | ||
@@ -1909,2 +1913,6 @@ } | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
}, | ||
LifecycleConfiguration: { | ||
@@ -1922,2 +1930,15 @@ t: 'o', | ||
m: { | ||
Expiration: { | ||
t: 'o', | ||
m: { | ||
Date: { | ||
t: 't', | ||
tf: 'iso8601' | ||
}, | ||
Days: { | ||
t: 'i', | ||
r: 1 | ||
} | ||
} | ||
}, | ||
ID: { | ||
@@ -1934,5 +1955,2 @@ }, | ||
m: { | ||
Days: { | ||
t: 'i' | ||
}, | ||
Date: { | ||
@@ -1942,16 +1960,6 @@ t: 't', | ||
}, | ||
StorageClass: { | ||
} | ||
} | ||
}, | ||
Expiration: { | ||
t: 'o', | ||
m: { | ||
Days: { | ||
t: 'i', | ||
r: 1 | ||
t: 'i' | ||
}, | ||
Date: { | ||
t: 't', | ||
tf: 'iso8601' | ||
StorageClass: { | ||
} | ||
@@ -1964,6 +1972,2 @@ } | ||
} | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -1993,4 +1997,2 @@ } | ||
}, | ||
TargetPrefix: { | ||
}, | ||
TargetGrants: { | ||
@@ -2009,2 +2011,8 @@ t: 'a', | ||
m: { | ||
DisplayName: { | ||
}, | ||
EmailAddress: { | ||
}, | ||
ID: { | ||
}, | ||
Type: { | ||
@@ -2015,8 +2023,2 @@ n: 'xsi:type', | ||
}, | ||
ID: { | ||
}, | ||
DisplayName: { | ||
}, | ||
EmailAddress: { | ||
}, | ||
URI: { | ||
@@ -2030,2 +2032,4 @@ } | ||
} | ||
}, | ||
TargetPrefix: { | ||
} | ||
@@ -2052,2 +2056,6 @@ } | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
}, | ||
NotificationConfiguration: { | ||
@@ -2062,5 +2070,5 @@ t: 'o', | ||
m: { | ||
Event: { | ||
}, | ||
Topic: { | ||
}, | ||
Event: { | ||
} | ||
@@ -2070,6 +2078,2 @@ } | ||
} | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -2088,9 +2092,9 @@ } | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
}, | ||
Policy: { | ||
r: 1, | ||
l: 'body' | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -2109,2 +2113,6 @@ } | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
}, | ||
RequestPaymentConfiguration: { | ||
@@ -2119,6 +2127,2 @@ t: 'o', | ||
} | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -2137,2 +2141,6 @@ } | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
}, | ||
Tagging: { | ||
@@ -2161,6 +2169,2 @@ t: 'o', | ||
} | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -2179,2 +2183,10 @@ } | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
}, | ||
MFA: { | ||
l: 'header', | ||
n: 'x-amz-mfa' | ||
}, | ||
VersioningConfiguration: { | ||
@@ -2185,15 +2197,7 @@ t: 'o', | ||
m: { | ||
MFADelete: { | ||
}, | ||
Status: { | ||
}, | ||
MFADelete: { | ||
} | ||
} | ||
}, | ||
MFA: { | ||
l: 'header', | ||
n: 'x-amz-mfa' | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -2212,2 +2216,6 @@ } | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
}, | ||
WebsiteConfiguration: { | ||
@@ -2218,9 +2226,7 @@ t: 'o', | ||
m: { | ||
RedirectAllRequestsTo: { | ||
ErrorDocument: { | ||
t: 'o', | ||
m: { | ||
HostName: { | ||
Key: { | ||
r: 1 | ||
}, | ||
Protocol: { | ||
} | ||
@@ -2237,7 +2243,9 @@ } | ||
}, | ||
ErrorDocument: { | ||
RedirectAllRequestsTo: { | ||
t: 'o', | ||
m: { | ||
Key: { | ||
HostName: { | ||
r: 1 | ||
}, | ||
Protocol: { | ||
} | ||
@@ -2255,8 +2263,13 @@ } | ||
m: { | ||
HttpErrorCodeReturnedEquals: { | ||
}, | ||
KeyPrefixEquals: { | ||
}, | ||
HttpErrorCodeReturnedEquals: { | ||
} | ||
} | ||
}, | ||
HostName: { | ||
r: 1 | ||
}, | ||
Protocol: { | ||
}, | ||
Redirect: { | ||
@@ -2266,14 +2279,9 @@ t: 'o', | ||
m: { | ||
HttpRedirectCode: { | ||
}, | ||
ReplaceKeyPrefixWith: { | ||
}, | ||
ReplaceKeyWith: { | ||
}, | ||
HttpRedirectCode: { | ||
} | ||
} | ||
}, | ||
HostName: { | ||
r: 1 | ||
}, | ||
Protocol: { | ||
} | ||
@@ -2284,6 +2292,2 @@ } | ||
} | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
} | ||
@@ -2298,10 +2302,6 @@ } | ||
m: { | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
ACL: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
Body: { | ||
@@ -2312,26 +2312,6 @@ t: 'bl', | ||
}, | ||
StorageClass: { | ||
l: 'header', | ||
n: 'x-amz-storage-class' | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
ACL: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
}, | ||
GrantRead: { | ||
l: 'header', | ||
n: 'x-amz-grant-read' | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWriteACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-write-acp' | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
CacheControl: { | ||
@@ -2362,10 +2342,22 @@ l: 'header', | ||
}, | ||
WebsiteRedirectLocation: { | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-website-redirect-location' | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
ServerSideEncryption: { | ||
GrantRead: { | ||
l: 'header', | ||
n: 'x-amz-server-side-encryption' | ||
n: 'x-amz-grant-read' | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWriteACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-write-acp' | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
Metadata: { | ||
@@ -2375,2 +2367,14 @@ t: 'm', | ||
n: 'x-amz-meta-' | ||
}, | ||
ServerSideEncryption: { | ||
l: 'header', | ||
n: 'x-amz-server-side-encryption' | ||
}, | ||
StorageClass: { | ||
l: 'header', | ||
n: 'x-amz-storage-class' | ||
}, | ||
WebsiteRedirectLocation: { | ||
l: 'header', | ||
n: 'x-amz-website-redirect-location' | ||
} | ||
@@ -2404,10 +2408,6 @@ } | ||
m: { | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
ACL: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
AccessControlPolicy: { | ||
@@ -2417,11 +2417,2 @@ t: 'o', | ||
m: { | ||
Owner: { | ||
t: 'o', | ||
m: { | ||
ID: { | ||
}, | ||
DisplayName: { | ||
} | ||
} | ||
}, | ||
Grants: { | ||
@@ -2441,2 +2432,8 @@ n: 'AccessControlList', | ||
m: { | ||
DisplayName: { | ||
}, | ||
EmailAddress: { | ||
}, | ||
ID: { | ||
}, | ||
Type: { | ||
@@ -2447,8 +2444,2 @@ n: 'xsi:type', | ||
}, | ||
ID: { | ||
}, | ||
DisplayName: { | ||
}, | ||
EmailAddress: { | ||
}, | ||
URI: { | ||
@@ -2462,9 +2453,26 @@ } | ||
} | ||
}, | ||
Owner: { | ||
t: 'o', | ||
m: { | ||
DisplayName: { | ||
}, | ||
ID: { | ||
} | ||
} | ||
} | ||
} | ||
}, | ||
ACL: { | ||
Bucket: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'x-amz-acl' | ||
n: 'Content-MD5' | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
GrantRead: { | ||
@@ -2474,2 +2482,6 @@ l: 'header', | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWrite: { | ||
@@ -2479,6 +2491,2 @@ l: 'header', | ||
}, | ||
GrantReadACP: { | ||
l: 'header', | ||
n: 'x-amz-grant-read-acp' | ||
}, | ||
GrantWriteACP: { | ||
@@ -2488,9 +2496,5 @@ l: 'header', | ||
}, | ||
GrantFullControl: { | ||
l: 'header', | ||
n: 'x-amz-grant-full-control' | ||
}, | ||
ContentMD5: { | ||
l: 'header', | ||
n: 'Content-MD5' | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
} | ||
@@ -2531,2 +2535,7 @@ } | ||
m: { | ||
Body: { | ||
t: 'bl', | ||
l: 'body', | ||
s: 1 | ||
}, | ||
Bucket: { | ||
@@ -2540,14 +2549,9 @@ r: 1, | ||
}, | ||
UploadId: { | ||
PartNumber: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
PartNumber: { | ||
UploadId: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
Body: { | ||
t: 'bl', | ||
l: 'body', | ||
s: 1 | ||
} | ||
@@ -2576,18 +2580,2 @@ } | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
UploadId: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
PartNumber: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
CopySourceRange: { | ||
l: 'header', | ||
n: 'x-amz-copy-source-range' | ||
}, | ||
CopySource: { | ||
@@ -2603,2 +2591,7 @@ l: 'header', | ||
}, | ||
CopySourceIfModifiedSince: { | ||
t: 't', | ||
l: 'header', | ||
n: 'x-amz-copy-source-if-modified-since' | ||
}, | ||
CopySourceIfNoneMatch: { | ||
@@ -2614,6 +2607,17 @@ t: 't', | ||
}, | ||
CopySourceIfModifiedSince: { | ||
t: 't', | ||
CopySourceRange: { | ||
l: 'header', | ||
n: 'x-amz-copy-source-if-modified-since' | ||
n: 'x-amz-copy-source-range' | ||
}, | ||
Key: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
PartNumber: { | ||
r: 1, | ||
l: 'uri' | ||
}, | ||
UploadId: { | ||
r: 1, | ||
l: 'uri' | ||
} | ||
@@ -2620,0 +2624,0 @@ } |
@@ -195,3 +195,3 @@ /** | ||
} else { | ||
this.endpoint = new AWS.Endpoint('s3.amazonaws.com', this.config); | ||
this.endpoint = new AWS.Endpoint(this.api.globalEndpoint, this.config); | ||
} | ||
@@ -202,3 +202,3 @@ } | ||
AWS.S3.Client.prototype.createBucket = function createBucket(params, options) { | ||
AWS.S3.Client.prototype.createBucket = function createBucket(params, callback) { | ||
// When creating a bucket *outside* the classic region, the location | ||
@@ -211,9 +211,9 @@ // constraint must be set for the bucket and it must match the endpoint. | ||
var hostname = this.endpoint.hostname; | ||
if (hostname != 's3.amazonaws.com' && !params.CreateBucketConfiguration) { | ||
if (hostname != this.api.globalEndpoint && !params.CreateBucketConfiguration) { | ||
params.CreateBucketConfiguration = {}; | ||
params.CreateBucketConfiguration.LocationConstraint = this.config.region; | ||
} | ||
return this.makeRequest('createBucket', params, options); | ||
return this.makeRequest('createBucket', params, callback); | ||
}; | ||
module.exports = AWS.S3; |
@@ -33,4 +33,3 @@ /** | ||
} | ||
}, | ||
o: null | ||
} | ||
}, | ||
@@ -315,4 +314,3 @@ deleteVerifiedEmailAddress: { | ||
} | ||
}, | ||
o: null | ||
} | ||
}, | ||
@@ -331,4 +329,3 @@ setIdentityFeedbackForwardingEnabled: { | ||
} | ||
}, | ||
o: null | ||
} | ||
}, | ||
@@ -348,4 +345,3 @@ setIdentityNotificationTopic: { | ||
} | ||
}, | ||
o: null | ||
} | ||
}, | ||
@@ -399,6 +395,5 @@ verifyDomainDkim: { | ||
} | ||
}, | ||
o: null | ||
} | ||
} | ||
} | ||
}; |
@@ -45,3 +45,11 @@ /** | ||
/*jshint undef:false */ | ||
return encodeURIComponent(string).replace(/[^A-Za-z0-9_.~\-%]+/g, escape); | ||
var output = encodeURIComponent(string); | ||
output = output.replace(/[^A-Za-z0-9_.~\-%]+/g, escape); | ||
// AWS percent-encodes some extra non-standard characters in a URI | ||
output = output.replace(/[*]/g, function(ch) { | ||
return '%' + ch.charCodeAt(0).toString(16).toUpperCase(); | ||
}); | ||
return output; | ||
}, | ||
@@ -73,2 +81,26 @@ | ||
buffer: { | ||
/** | ||
* Concatenates a list of Buffer objects. | ||
*/ | ||
concat: function(buffers) { | ||
var length = 0, | ||
offset = 0, | ||
buffer = null, i; | ||
for (i = 0; i < buffers.length; i++) { | ||
length += buffers[i].length; | ||
} | ||
buffer = new Buffer(length); | ||
for (i = 0; i < buffers.length; i++) { | ||
buffers[i].copy(buffer, offset); | ||
offset += buffers[i].length; | ||
} | ||
return buffer; | ||
} | ||
}, | ||
string: { | ||
@@ -75,0 +107,0 @@ byteLength: function byteLength(string) { |
@@ -73,2 +73,18 @@ /** | ||
parseMap: function parseMap(map, rules) { | ||
var data = {}; | ||
var keyRules = rules.k || {}; | ||
var valueRules = rules.m || {}; | ||
var keyName = keyRules.n || 'key'; | ||
var valueName = valueRules.n || 'value'; | ||
if (!rules.f) { | ||
map = map[0].entry; | ||
} | ||
AWS.util.arrayEach.call(this, map, function (entry) { | ||
var value = this.parseMember(entry[valueName], valueRules); | ||
data[entry[keyName][0]] = value; | ||
}); | ||
return data; | ||
}, | ||
parseList: function parseList(list, rules) { | ||
@@ -112,2 +128,6 @@ var data = []; | ||
} else if (rules.t === 'm') { // objects (maps) | ||
return this.parseMap(values, rules); | ||
} else if (rules.t === 'a') { // list (array) | ||
@@ -114,0 +134,0 @@ |
{ | ||
"name": "aws-sdk", | ||
"description": "AWS SDK for JavaScript", | ||
"version": "v0.9.2-pre.3", | ||
"version": "v0.9.3-pre.4", | ||
"author": { | ||
@@ -55,6 +55,5 @@ "name":"Amazon Web Services", | ||
"scripts" : { | ||
"test" : "npm -s run-script lint && (([ -f configuration ] && jasmine-node --coffee test && cucumber.js) || ([ ! -f configuration ] && npm -s run-script unit))", | ||
"test" : "npm -s run-script lint && npm -s run-script unit && ([ -f configuration ] && npm -s run-script integration) || true", | ||
"unit" : "jasmine-node --noColor --coffee test/unit", | ||
"integration": "jasmine-node --noColor --coffee test/integration", | ||
"features": "cucumber.js", | ||
"integration": "cucumber.js", | ||
"lint" : "jshint lib", | ||
@@ -61,0 +60,0 @@ "console": "./scripts/console" |
@@ -64,2 +64,29 @@ # AWS SDK for Node.js [![Build Status](https://travis-ci.org/aws/aws-sdk-js.png?branch=master)](https://travis-ci.org/aws/aws-sdk-js) | ||
## Supported Services | ||
The SDK currently supports the following services: | ||
<table> | ||
<thead> | ||
<th>Service Name</th> | ||
<th>Class Name</th> | ||
</thead> | ||
<tbody> | ||
<tr><td>Auto Scaling</td><td>AWS.AutoScaling</td></tr> | ||
<tr><td>Amazon CloudWatch</td><td>AWS.CloudWatch</td></tr> | ||
<tr><td>Amazon DynamoDB</td><td>AWS.DynamoDB</td></tr> | ||
<tr><td>Amazon EC2</td><td>AWS.EC2</td></tr> | ||
<tr><td>Amazon Elastic Transcoder</td><td>AWS.ElasticTranscoder</td></tr> | ||
<tr><td>Elastic Load Balancing</td><td>AWS.ELB</td></tr> | ||
<tr><td>Amazon Elastic MapReduce</td><td>AWS.EMR</td></tr> | ||
<tr><td>AWS Identity and Access Management</td><td>AWS.IAM</td></tr> | ||
<tr><td>Amazon S3</td><td>AWS.S3</td></tr> | ||
<tr><td>Amazon Simple Email Service</td><td>AWS.SES</td></tr> | ||
<tr><td>Amazon SimpleDB</td><td>AWS.SimpleDB</td></tr> | ||
<tr><td>Amazon Simple Notification Service</td><td>AWS.SNS</td></tr> | ||
<tr><td>Amazon Simple Queue Service</td><td>AWS.SQS</td></tr> | ||
<tr><td>AWS Security Token Service</td><td>AWS.STS</td></tr> | ||
</tbody> | ||
</table> | ||
## License | ||
@@ -66,0 +93,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
2162045
159
45602
111
4