@squareboat/nest-queue-sqs
Version:
The AWS SQS queue package for your NestJS Applications
95 lines (94 loc) • 3.82 kB
JavaScript
;
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;