@message-queue-toolkit/sqs
Version:
SQS adapter for message-queue-toolkit
30 lines • 1.65 kB
JavaScript
// See https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_version.html
import { SQS_RESOURCE_ANY, SQS_RESOURCE_CURRENT_QUEUE, } from "../sqs/AbstractSqsService.js";
const POLICY_VERSION = '2012-10-17';
export function generateQueuePublishForTopicPolicy(queueArn, supportedSnsTopicArnPrefix) {
return `{"Version":"${POLICY_VERSION}","Id":"__default_policy_ID","Statement":[{"Sid":"AllowSNSPublish","Effect":"Allow","Principal":{"AWS":"*"},"Action":"sqs:SendMessage","Resource":"${queueArn}","Condition":{"ArnLike":{"aws:SourceArn":"${supportedSnsTopicArnPrefix}"}}}]}`;
}
export function generateQueuePolicyFromPolicyConfig(queueArn, policyConfig) {
const resource = policyConfig.resource === SQS_RESOURCE_CURRENT_QUEUE
? queueArn
: policyConfig.resource === SQS_RESOURCE_ANY
? `arn:aws:sqs:*:*:*`
: policyConfig.resource;
const statements = (Array.isArray(policyConfig.statements) ? policyConfig.statements : [policyConfig.statements]).map((statement) => ({
Effect: statement?.Effect ?? 'Allow',
Principal: { AWS: statement?.Principal ?? '*' },
Action: statement?.Action ?? ['sqs:SendMessage', 'sqs:GetQueueAttributes', 'sqs:GetQueueUrl'],
Resource: resource,
}));
return JSON.stringify({
Version: POLICY_VERSION,
Statement: statements,
});
}
export function generateWildcardSqsArn(sqsQueueArnPrefix) {
return `arn:aws:sqs:*:*:${sqsQueueArnPrefix}`;
}
export function generateWildcardSnsArn(snsTopicArnPrefix) {
return `arn:aws:sns:*:*:${snsTopicArnPrefix}`;
}
//# sourceMappingURL=sqsAttributeUtils.js.map