UNPKG

@squareboat/nest-queue-sqs

Version:

The AWS SQS queue package for your NestJS Applications

95 lines (94 loc) 3.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SqsQueueDriver = void 0; const AWS = require("aws-sdk"); const job_1 = require("./job"); const aws_sdk_1 = require("aws-sdk"); class SqsQueueDriver { constructor(options) { this.options = options; AWS.config.update({ region: options.region }); if (options.profile) { options["credentials"] = new AWS.SharedIniFileCredentials({ profile: options.profile, }); } else if (options.accessKey && options.secretKey) { options["credentials"] = new aws_sdk_1.Credentials({ accessKeyId: options.accessKey, secretAccessKey: options.secretKey, }); } this.client = new AWS.SQS({ apiVersion: options.apiVersion, credentials: options.credentials, }); this.queueUrl = options.prefix + "/" + options.queue; } push(message, rawPayload) { return __awaiter(this, void 0, void 0, function* () { const params = { DelaySeconds: rawPayload.delay, MessageBody: message, QueueUrl: this.options.prefix + "/" + rawPayload.queue, }; yield this.client.sendMessage(params).promise().then(); return; }); } pull(options) { return __awaiter(this, void 0, void 0, function* () { const params = { MaxNumberOfMessages: 1, MessageAttributeNames: ["All"], QueueUrl: this.options.prefix + "/" + options.queue, VisibilityTimeout: 30, WaitTimeSeconds: 20, }; const response = yield this.client.receiveMessage(params).promise(); const message = response.Messages ? response.Messages[0] : null; return message ? new job_1.SqsJob(message) : null; }); } remove(job, options) { return __awaiter(this, void 0, void 0, function* () { const params = { QueueUrl: this.options.prefix + "/" + options.queue, ReceiptHandle: job.data.ReceiptHandle, }; yield this.client.deleteMessage(params).promise(); return; }); } purge(options) { return __awaiter(this, void 0, void 0, function* () { const params = { QueueUrl: this.options.prefix + "/" + options.queue, }; yield this.client.purgeQueue(params).promise(); return; }); } count(options) { return __awaiter(this, void 0, void 0, function* () { const params = { QueueUrl: this.options.prefix + "/" + options.queue, AttributeNames: ["ApproximateNumberOfMessages"], }; const response = yield this.client .getQueueAttributes(params) .promise(); return +response.Attributes.ApproximateNumberOfMessages; }); } } exports.SqsQueueDriver = SqsQueueDriver;