@@ -30,7 +30,7 @@ module.exports = (() => {
3030 constructor ( configuration ) {
3131 super ( ) ;
3232
33- assert . argumentIsRequired ( configuration , 'configuration' ) ;
33+ assert . argumentIsRequired ( configuration , 'configuration' , Object ) ;
3434 assert . argumentIsRequired ( configuration . region , 'configuration.region' , String ) ;
3535 assert . argumentIsRequired ( configuration . prefix , 'configuration.prefix' , String ) ;
3636 assert . argumentIsOptional ( configuration . apiVersion , 'configuration.apiVersion' , String ) ;
@@ -148,9 +148,10 @@ module.exports = (() => {
148148 *
149149 * @public
150150 * @param {string } queueName - The name of the queue to find.
151+ * @param {Object= } createOptions - Options to use when queue does not exist and must be created.
151152 * @returns {Promise<String> }
152153 */
153- getQueueUrl ( queueName ) {
154+ getQueueUrl ( queueName , createOptions ) {
154155 return Promise . resolve ( )
155156 . then ( ( ) => {
156157 assert . argumentIsRequired ( queueName , 'queueName' , String ) ;
@@ -168,7 +169,19 @@ module.exports = (() => {
168169 if ( ! this . _queueUrlPromises . hasOwnProperty ( qualifiedQueueName ) ) {
169170 logger . debug ( 'The SqsProvider has not cached the queue URL. Issuing request to create queue.' ) ;
170171
171- this . _queueUrlPromises [ qualifiedQueueName ] = this . createQueue ( queueName ) ;
172+ let retentionTime = null ;
173+
174+ if ( createOptions && is . number ( createOptions . retentionTime ) ) {
175+ retentionTime = createOptions . retentionTime ;
176+ }
177+
178+ let tags = null ;
179+
180+ if ( createOptions && is . object ( createOptions . tags ) ) {
181+ tags = createOptions . tags ;
182+ }
183+
184+ this . _queueUrlPromises [ qualifiedQueueName ] = this . createQueue ( queueName , retentionTime , tags ) ;
172185 }
173186
174187 return this . _queueUrlPromises [ qualifiedQueueName ] ;
@@ -230,9 +243,10 @@ module.exports = (() => {
230243 *
231244 * @public
232245 * @param {string } queueName - The name of the queue to find.
246+ * @param {Object= } createOptions - Options to use when queue does not exist and must be created.
233247 * @returns {Promise<String> }
234248 */
235- getQueueArn ( queueName ) {
249+ getQueueArn ( queueName , createOptions ) {
236250 return Promise . resolve ( )
237251 . then ( ( ) => {
238252 assert . argumentIsRequired ( queueName , 'queueName' , String ) ;
@@ -248,7 +262,7 @@ module.exports = (() => {
248262 const qualifiedQueueName = getQualifiedQueueName ( this . _configuration . prefix , queueName ) ;
249263
250264 if ( ! this . _queueArnPromises . hasOwnProperty ( qualifiedQueueName ) ) {
251- this . _queueArnPromises [ qualifiedQueueName ] = this . getQueueUrl ( queueName )
265+ this . _queueArnPromises [ qualifiedQueueName ] = this . getQueueUrl ( queueName , createOptions )
252266 . then ( ( queueUrl ) => {
253267 return promise . build (
254268 ( resolveCallback , rejectCallback ) => {
@@ -286,13 +300,15 @@ module.exports = (() => {
286300 * @public
287301 * @param {string } queueName - The name of the queue to create.
288302 * @param {Number= } retentionTime - The length of time a queue will retain a message in seconds.
303+ * @param {Object= } tags - Tags to assign to the queue.
289304 * @returns {Promise<String> }
290305 */
291- createQueue ( queueName , retentionTime ) {
306+ createQueue ( queueName , retentionTime , tags ) {
292307 return Promise . resolve ( )
293308 . then ( ( ) => {
294309 assert . argumentIsRequired ( queueName , 'queueName' , String ) ;
295310 assert . argumentIsOptional ( retentionTime , 'retentionTime' , Number ) ;
311+ assert . argumentIsOptional ( tags , 'tags' , Object ) ;
296312
297313 if ( this . getIsDisposed ( ) ) {
298314 throw new Error ( 'The SqsProvider has been disposed.' ) ;
@@ -318,6 +334,25 @@ module.exports = (() => {
318334 } ;
319335 }
320336
337+ if ( is . object ( tags ) ) {
338+ const keys = object . keys ( tags ) ;
339+
340+ const t = keys . reduce ( ( accumulator , key ) => {
341+ const tag = { } ;
342+
343+ tag . Key = key ;
344+ tag . Value = tags [ key ] ;
345+
346+ accumulator . push ( tag ) ;
347+
348+ return accumulator ;
349+ } , [ ] ) ;
350+
351+ if ( t . length > 0 ) {
352+ payload . Tags = t ;
353+ }
354+ }
355+
321356 this . _sqs . createQueue ( payload , ( error , data ) => {
322357 if ( error === null ) {
323358 logger . info ( 'Queue created [' , qualifiedQueueName , ']' ) ;
@@ -400,9 +435,10 @@ module.exports = (() => {
400435 * @param {string } queueName - The name of the queue to add the message to.
401436 * @param {Object } payload - The message to enqueue (will be serialized to JSON).
402437 * @param {Number= } delaySeconds - The number of seconds to prevent message from being retrieved from the queue.
438+ * @param {Object= } createOptions - Options to use when queue does not exist and must be created.
403439 * @returns {Promise }
404440 */
405- send ( queueName , payload , delaySeconds ) {
441+ send ( queueName , payload , delaySeconds , createOptions ) {
406442 return Promise . resolve ( )
407443 . then ( ( ) => {
408444 assert . argumentIsRequired ( queueName , 'queueName' , String ) ;
@@ -417,7 +453,7 @@ module.exports = (() => {
417453 throw new Error ( 'The SqsProvider has not been started.' ) ;
418454 }
419455
420- return this . getQueueUrl ( queueName )
456+ return this . getQueueUrl ( queueName , createOptions )
421457 . then ( ( queueUrl ) => {
422458 return promise . build (
423459 ( resolveCallback , rejectCallback ) => {
@@ -462,9 +498,10 @@ module.exports = (() => {
462498 * @public
463499 * @param {string } queueName - The name of the queue to add the message to.
464500 * @param {Object[] } batch - The messages to enqueue (each will be serialized to JSON).
501+ * @param {Object= } createOptions - Options to use when queue does not exist and must be created.
465502 * @returns {Promise }
466503 */
467- sendBatch ( queueName , batch ) {
504+ sendBatch ( queueName , batch , createOptions ) {
468505 return Promise . resolve ( )
469506 . then ( ( ) => {
470507 assert . argumentIsRequired ( queueName , 'queueName' , String ) ;
@@ -486,7 +523,7 @@ module.exports = (() => {
486523 throw new Error ( 'The SqsProvider has not been started.' ) ;
487524 }
488525
489- return this . getQueueUrl ( queueName )
526+ return this . getQueueUrl ( queueName , createOptions )
490527 . then ( ( queueUrl ) => {
491528 return promise . build (
492529 ( resolveCallback , rejectCallback ) => {
@@ -674,9 +711,10 @@ module.exports = (() => {
674711 * @param {Number= } pollInterval - The milliseconds to wait between polling the queue.
675712 * @param {Number= } pollDuration - The maximum amount of time the server-side long-poll will wait for messages to become available.
676713 * @param {Number= } maximumMessages - The maximum number of messages to read per request (cannot be more than 10).
714+ * @param {Object= } createOptions - Options to use when queue does not exist and must be created.
677715 * @returns {Disposable }
678716 */
679- observe ( queueName , callback , pollInterval , pollDuration , batchSize ) {
717+ observe ( queueName , callback , pollInterval , pollDuration , batchSize , createOptions ) {
680718 assert . argumentIsRequired ( queueName , 'queueName' , String ) ;
681719 assert . argumentIsRequired ( callback , 'callback' , Function ) ;
682720 assert . argumentIsOptional ( pollInterval , 'pollInterval' , Number ) ;
@@ -716,7 +754,7 @@ module.exports = (() => {
716754
717755 let delay ;
718756
719- receiveMessages . call ( this , queueName , pollDuration , batchSize , false )
757+ receiveMessages . call ( this , queueName , pollDuration , batchSize , false , createOptions )
720758 . then ( ( messages ) => {
721759 return Promise . all ( messages . map ( ( message ) => {
722760 if ( disposed ) {
@@ -849,7 +887,7 @@ module.exports = (() => {
849887 }
850888 }
851889
852- function receiveMessages ( queueName , waitTime , maximumMessages , synchronousDelete ) {
890+ function receiveMessages ( queueName , waitTime , maximumMessages , synchronousDelete , createOptions ) {
853891 if ( this . getIsDisposed ( ) ) {
854892 throw new Error ( 'The SqsProvider has been disposed.' ) ;
855893 }
@@ -878,7 +916,7 @@ module.exports = (() => {
878916 maximumMessagesToUse = 1 ;
879917 }
880918
881- return this . getQueueUrl ( queueName )
919+ return this . getQueueUrl ( queueName , createOptions )
882920 . then ( ( queueUrl ) => {
883921 return promise . build (
884922 ( resolveCallback , rejectCallback ) => {
0 commit comments