quidproquo-deploy-awscdk 0.0.76 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/constructs/feature/core/eventBus/QpqCoreEventBusConstruct.d.ts +18 -0
- package/lib/constructs/feature/core/eventBus/QpqCoreEventBusConstruct.js +62 -0
- package/lib/constructs/feature/core/eventBus/index.d.ts +1 -0
- package/lib/constructs/feature/core/eventBus/index.js +17 -0
- package/lib/constructs/feature/core/index.d.ts +1 -0
- package/lib/constructs/feature/core/index.js +1 -0
- package/lib/constructs/feature/core/queue/QpqApiCoreQueueConstruct.js +15 -0
- package/lib/constructs/feature/core/queue/QpqCoreQueueConstruct.js +14 -0
- package/lib/constructs/feature/core/storageDrive/QpqCoreStorageDriveConstruct.js +1 -0
- package/lib/lambdas/lambdaAPIGatewayEvent.js +1 -1
- package/lib/lambdas/lambdaEventBridgeEvent.js +1 -1
- package/lib/lambdas/lambdaSQSEvent.js +1 -1
- package/lib/stacks/InfQpqServiceStack.js +6 -0
- package/lib/utils/qpqDeployAwsCdkUtils.d.ts +1 -0
- package/lib/utils/qpqDeployAwsCdkUtils.js +12 -1
- package/package.json +1 -1
- package/src/constructs/feature/core/eventBus/QpqCoreEventBusConstruct.ts +74 -0
- package/src/constructs/feature/core/eventBus/index.ts +1 -0
- package/src/constructs/feature/core/index.ts +1 -0
- package/src/constructs/feature/core/queue/QpqApiCoreQueueConstruct.ts +27 -1
- package/src/constructs/feature/core/queue/QpqCoreQueueConstruct.ts +17 -0
- package/src/constructs/feature/core/storageDrive/QpqCoreStorageDriveConstruct.ts +1 -0
- package/src/lambdas/lambdaAPIGatewayEvent.ts +2 -0
- package/src/lambdas/lambdaEventBridgeEvent.ts +2 -0
- package/src/lambdas/lambdaSQSEvent.ts +2 -0
- package/src/stacks/InfQpqServiceStack.ts +12 -0
- package/src/utils/qpqDeployAwsCdkUtils.ts +25 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EventBusQPQConfigSetting, QPQConfig } from 'quidproquo-core';
|
|
2
|
+
import { QpqConstructBlock, QpqConstructBlockProps } from '../../../base/QpqConstructBlock';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
import { aws_sns, aws_iam } from 'aws-cdk-lib';
|
|
5
|
+
export interface QpqCoreEventBusConstructProps extends QpqConstructBlockProps {
|
|
6
|
+
eventBusConfig: EventBusQPQConfigSetting;
|
|
7
|
+
}
|
|
8
|
+
export declare abstract class QpqCoreEventBusConstructBase extends QpqConstructBlock {
|
|
9
|
+
abstract topic: aws_sns.ITopic;
|
|
10
|
+
grantRead(grantee: aws_iam.IGrantable): void;
|
|
11
|
+
grantWrite(grantee: aws_iam.IGrantable): void;
|
|
12
|
+
grantAll(grantee: aws_iam.IGrantable): void;
|
|
13
|
+
}
|
|
14
|
+
export declare class QpqCoreEventBusConstruct extends QpqCoreEventBusConstructBase {
|
|
15
|
+
topic: aws_sns.ITopic;
|
|
16
|
+
static fromOtherStack(scope: Construct, id: string, qpqConfig: QPQConfig, awsAccountId: string, eventBusName: string, applicationOverride?: string): QpqCoreEventBusConstructBase;
|
|
17
|
+
constructor(scope: Construct, id: string, props: QpqCoreEventBusConstructProps);
|
|
18
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.QpqCoreEventBusConstruct = exports.QpqCoreEventBusConstructBase = void 0;
|
|
27
|
+
const quidproquo_actionprocessor_awslambda_1 = require("quidproquo-actionprocessor-awslambda");
|
|
28
|
+
const QpqConstructBlock_1 = require("../../../base/QpqConstructBlock");
|
|
29
|
+
const qpqDeployAwsCdkUtils = __importStar(require("../../../../utils"));
|
|
30
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
31
|
+
class QpqCoreEventBusConstructBase extends QpqConstructBlock_1.QpqConstructBlock {
|
|
32
|
+
grantRead(grantee) { }
|
|
33
|
+
grantWrite(grantee) {
|
|
34
|
+
this.topic.grantPublish(grantee);
|
|
35
|
+
}
|
|
36
|
+
grantAll(grantee) {
|
|
37
|
+
this.grantRead(grantee);
|
|
38
|
+
this.grantWrite(grantee);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.QpqCoreEventBusConstructBase = QpqCoreEventBusConstructBase;
|
|
42
|
+
class QpqCoreEventBusConstruct extends QpqCoreEventBusConstructBase {
|
|
43
|
+
static fromOtherStack(scope, id, qpqConfig, awsAccountId, eventBusName, applicationOverride) {
|
|
44
|
+
const topicArn = qpqDeployAwsCdkUtils.importStackValue(quidproquo_actionprocessor_awslambda_1.awsNamingUtils.getCFExportNameSnsTopicArnFromConfig(eventBusName, qpqConfig, applicationOverride));
|
|
45
|
+
class Import extends QpqCoreEventBusConstructBase {
|
|
46
|
+
constructor() {
|
|
47
|
+
super(...arguments);
|
|
48
|
+
this.topic = aws_cdk_lib_1.aws_sns.Topic.fromTopicArn(this, 'topic-arn', topicArn);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return new Import(scope, id, { qpqConfig, awsAccountId });
|
|
52
|
+
}
|
|
53
|
+
constructor(scope, id, props) {
|
|
54
|
+
super(scope, id, props);
|
|
55
|
+
this.topic = new aws_cdk_lib_1.aws_sns.Topic(this, 'topic', {
|
|
56
|
+
topicName: this.resourceName(props.eventBusConfig.name),
|
|
57
|
+
displayName: props.eventBusConfig.name,
|
|
58
|
+
});
|
|
59
|
+
qpqDeployAwsCdkUtils.exportStackValue(this, quidproquo_actionprocessor_awslambda_1.awsNamingUtils.getCFExportNameSnsTopicArnFromConfig(props.eventBusConfig.name, props.qpqConfig), this.topic.topicArn);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.QpqCoreEventBusConstruct = QpqCoreEventBusConstruct;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './QpqCoreEventBusConstruct';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./QpqCoreEventBusConstruct"), exports);
|
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./auth"), exports);
|
|
18
|
+
__exportStar(require("./eventBus"), exports);
|
|
18
19
|
__exportStar(require("./parameter"), exports);
|
|
19
20
|
__exportStar(require("./queue"), exports);
|
|
20
21
|
__exportStar(require("./schedule"), exports);
|
|
@@ -27,6 +27,7 @@ exports.QpqApiCoreQueueConstruct = void 0;
|
|
|
27
27
|
const quidproquo_core_1 = require("quidproquo-core");
|
|
28
28
|
const QpqConstructBlock_1 = require("../../../base/QpqConstructBlock");
|
|
29
29
|
const QpqCoreQueueConstruct_1 = require("./QpqCoreQueueConstruct");
|
|
30
|
+
const QpqCoreEventBusConstruct_1 = require("../eventBus/QpqCoreEventBusConstruct");
|
|
30
31
|
const Function_1 = require("../../../basic/Function");
|
|
31
32
|
const qpqDeployAwsCdkUtils = __importStar(require("../../../../utils"));
|
|
32
33
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
@@ -53,6 +54,20 @@ class QpqApiCoreQueueConstruct extends QpqConstructBlock_1.QpqConstructBlock {
|
|
|
53
54
|
});
|
|
54
55
|
// ///////// end todo
|
|
55
56
|
const queueResource = QpqCoreQueueConstruct_1.QpqCoreQueueConstruct.fromOtherStack(this, 'queue', props.qpqConfig, props.queueConfig, props.awsAccountId);
|
|
57
|
+
props.queueConfig.eventBusSubscriptions.forEach((eventBusName) => {
|
|
58
|
+
const eventBus = QpqCoreEventBusConstruct_1.QpqCoreEventBusConstruct.fromOtherStack(this, `event-bus-${eventBusName}`, props.qpqConfig, props.awsAccountId, eventBusName);
|
|
59
|
+
eventBus.topic.addSubscription(new aws_cdk_lib_1.aws_sns_subscriptions.SqsSubscription(queueResource.queue, {
|
|
60
|
+
rawMessageDelivery: true,
|
|
61
|
+
// No wildcard support :(
|
|
62
|
+
// filterPolicy: {
|
|
63
|
+
// type: aws_sns.SubscriptionFilter.stringFilter({
|
|
64
|
+
// allowlist: Object.keys(props.queueConfig.qpqQueueProcessors).map((type) =>
|
|
65
|
+
// type.replaceAll(/{(.+?)}/g, '*'),
|
|
66
|
+
// ),
|
|
67
|
+
// }),
|
|
68
|
+
// },
|
|
69
|
+
}));
|
|
70
|
+
});
|
|
56
71
|
queueFunction.lambdaFunction.addEventSource(new aws_cdk_lib_1.aws_lambda_event_sources.SqsEventSource(queueResource.queue, {
|
|
57
72
|
batchSize: props.queueConfig.batchSize,
|
|
58
73
|
maxBatchingWindow: cdk.Duration.seconds(props.queueConfig.batchWindowInSeconds),
|
|
@@ -67,6 +67,20 @@ class QpqCoreQueueConstruct extends QpqCoreQueueConstructBase {
|
|
|
67
67
|
}),
|
|
68
68
|
},
|
|
69
69
|
});
|
|
70
|
+
// This has to be any topic arn as we want other services / apps to be able
|
|
71
|
+
// to publish to this queue
|
|
72
|
+
this.queue.addToResourcePolicy(new aws_cdk_lib_1.aws_iam.PolicyStatement({
|
|
73
|
+
sid: 'AllowSNSServicePrincipal',
|
|
74
|
+
effect: aws_cdk_lib_1.aws_iam.Effect.ALLOW,
|
|
75
|
+
principals: [new aws_cdk_lib_1.aws_iam.ServicePrincipal('sns.amazonaws.com')],
|
|
76
|
+
actions: ['sqs:SendMessage'],
|
|
77
|
+
resources: [this.queue.queueArn],
|
|
78
|
+
conditions: {
|
|
79
|
+
ArnEquals: {
|
|
80
|
+
'aws:SourceArn': `arn:aws:sns:*:${props.awsAccountId}:*`,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
}));
|
|
70
84
|
}
|
|
71
85
|
}
|
|
72
86
|
exports.QpqCoreQueueConstruct = QpqCoreQueueConstruct;
|
|
@@ -62,6 +62,7 @@ class QpqCoreStorageDriveConstruct extends QpqCoreStorageDriveConstructBase {
|
|
|
62
62
|
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
63
63
|
autoDeleteObjects: true,
|
|
64
64
|
});
|
|
65
|
+
// TODO: Only do this IF a cloud front dist wants to use it
|
|
65
66
|
this.bucket.addToResourcePolicy(new aws_cdk_lib_1.aws_iam.PolicyStatement({
|
|
66
67
|
sid: 'AllowCloudFrontServicePrincipal',
|
|
67
68
|
effect: aws_cdk_lib_1.aws_iam.Effect.ALLOW,
|
|
@@ -45,7 +45,7 @@ const getAPIGatewayEventExecutor = (dynamicModuleLoader, getCustomActionProcesso
|
|
|
45
45
|
const cdkConfig = yield (0, lambdaConfig_1.getLambdaConfigs)();
|
|
46
46
|
// Build a processor for the session and stuff
|
|
47
47
|
// Remove the non route ones ~ let the story execute action add them
|
|
48
|
-
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getAPIGatewayEventActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
48
|
+
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getAPIGatewayEventActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
49
49
|
const logger = (result) => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
50
|
// addResult(
|
|
51
51
|
// envConfig.appName,
|
|
@@ -30,7 +30,7 @@ const getEventBridgeEventExecutor = (dynamicModuleLoader, getCustomActionProcess
|
|
|
30
30
|
const lambdaRuntimeConfig = JSON.parse(process.env.lambdaRuntimeConfig || '{}');
|
|
31
31
|
// Build a processor for the session and stuff
|
|
32
32
|
// Remove the non event ones
|
|
33
|
-
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getEventBridgeEventActionProcessor)(lambdaRuntimeConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
33
|
+
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getEventBridgeEventActionProcessor)(lambdaRuntimeConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
34
34
|
const logger = (result) => __awaiter(void 0, void 0, void 0, function* () { });
|
|
35
35
|
// Run the callback
|
|
36
36
|
const resolveStory = (0, quidproquo_core_1.createRuntime)({}, storyActionProcessor, getDateNow, logger, quidproquo_actionprocessor_awslambda_1.awsLambdaUtils.randomGuid);
|
|
@@ -28,7 +28,7 @@ const getStoryActionRuntime = (dynamicModuleLoader, getCustomActionProcessors =
|
|
|
28
28
|
const cdkConfig = yield (0, lambdaConfig_1.getLambdaConfigs)();
|
|
29
29
|
// Build a processor for the session and stuff
|
|
30
30
|
// Remove the non route ones ~ let the story execute action add them
|
|
31
|
-
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getSQSEventRecordActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
31
|
+
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getSQSEventRecordActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
32
32
|
const logger = (result) => __awaiter(void 0, void 0, void 0, function* () { });
|
|
33
33
|
// Run the callback
|
|
34
34
|
const resolveStory = (0, quidproquo_core_1.createRuntime)({}, storyActionProcessor, getDateNow, logger, quidproquo_actionprocessor_awslambda_1.awsLambdaUtils.randomGuid);
|
|
@@ -50,6 +50,12 @@ class InfQpqServiceStack extends QpqServiceStack_1.QpqServiceStack {
|
|
|
50
50
|
qpqConfig: props.qpqConfig,
|
|
51
51
|
apiKeyConfig: setting,
|
|
52
52
|
}));
|
|
53
|
+
// Event Busses
|
|
54
|
+
const busses = quidproquo_core_1.qpqCoreUtils.getAllEventBusConfigs(props.qpqConfig).map((setting) => new constructs_1.QpqCoreEventBusConstruct(this, quidproquo_core_1.qpqCoreUtils.getUniqueKeyForSetting(setting), {
|
|
55
|
+
awsAccountId: props.awsAccountId,
|
|
56
|
+
qpqConfig: props.qpqConfig,
|
|
57
|
+
eventBusConfig: setting,
|
|
58
|
+
}));
|
|
53
59
|
}
|
|
54
60
|
}
|
|
55
61
|
exports.InfQpqServiceStack = InfQpqServiceStack;
|
|
@@ -8,6 +8,7 @@ export declare const getQqpParameterGrantables: (scope: Construct, id: string, q
|
|
|
8
8
|
export declare const getQqpStorageDriveGrantables: (scope: Construct, id: string, qpqConfig: QPQConfig, awsAccountId: string) => QpqResource[];
|
|
9
9
|
export declare const getQqpQueueGrantables: (scope: Construct, id: string, qpqConfig: QPQConfig, awsAccountId: string) => QpqResource[];
|
|
10
10
|
export declare const getQqpUserPoolGrantables: (scope: Construct, id: string, qpqConfig: QPQConfig, awsAccountId: string) => QpqResource[];
|
|
11
|
+
export declare const getQqpTopicGrantables: (scope: Construct, id: string, qpqConfig: QPQConfig, awsAccountId: string) => QpqResource[];
|
|
11
12
|
export declare const getQqpUserPoolGrantablesForApiConfig: (scope: Construct, id: string, qpqConfig: QPQConfig, awsAccountId: string, config: ApiQPQWebServerConfigSetting) => QpqResource[];
|
|
12
13
|
export declare const serviceNeedsServiceHostedZone: (qpqConfig: QPQConfig) => boolean;
|
|
13
14
|
export declare const getQqpGrantableResources: (scope: Construct, id: string, qpqConfig: QPQConfig, awsAccountId: string) => QpqResource[];
|
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.importStackValue = exports.exportStackValue = exports.getQqpGrantableResourcesForApiConfig = exports.getQqpGrantableResources = exports.serviceNeedsServiceHostedZone = exports.getQqpUserPoolGrantablesForApiConfig = exports.getQqpUserPoolGrantables = exports.getQqpQueueGrantables = exports.getQqpStorageDriveGrantables = exports.getQqpParameterGrantables = exports.getQqpSecretGrantables = void 0;
|
|
26
|
+
exports.importStackValue = exports.exportStackValue = exports.getQqpGrantableResourcesForApiConfig = exports.getQqpGrantableResources = exports.serviceNeedsServiceHostedZone = exports.getQqpUserPoolGrantablesForApiConfig = exports.getQqpTopicGrantables = exports.getQqpUserPoolGrantables = exports.getQqpQueueGrantables = exports.getQqpStorageDriveGrantables = exports.getQqpParameterGrantables = exports.getQqpSecretGrantables = void 0;
|
|
27
27
|
const cdk = __importStar(require("aws-cdk-lib"));
|
|
28
28
|
const quidproquo_core_1 = require("quidproquo-core");
|
|
29
29
|
const quidproquo_webserver_1 = require("quidproquo-webserver");
|
|
@@ -76,6 +76,16 @@ const getQqpUserPoolGrantables = (scope, id, qpqConfig, awsAccountId) => {
|
|
|
76
76
|
return userDirectoryResources;
|
|
77
77
|
};
|
|
78
78
|
exports.getQqpUserPoolGrantables = getQqpUserPoolGrantables;
|
|
79
|
+
const getQqpTopicGrantables = (scope, id, qpqConfig, awsAccountId) => {
|
|
80
|
+
const eventBusConfigs = quidproquo_core_1.qpqCoreUtils
|
|
81
|
+
.getAllEventBusConfigs(qpqConfig)
|
|
82
|
+
.filter((ebc) => !ebc.deprecated);
|
|
83
|
+
const eventBuses = eventBusConfigs.map((eventBus) => {
|
|
84
|
+
return constructs_1.QpqCoreEventBusConstruct.fromOtherStack(scope, `${id}-${quidproquo_core_1.qpqCoreUtils.getUniqueKeyForSetting(eventBus)}-grantable`, qpqConfig, awsAccountId, eventBus.name);
|
|
85
|
+
});
|
|
86
|
+
return eventBuses;
|
|
87
|
+
};
|
|
88
|
+
exports.getQqpTopicGrantables = getQqpTopicGrantables;
|
|
79
89
|
const getQqpUserPoolGrantablesForApiConfig = (scope, id, qpqConfig, awsAccountId, config) => {
|
|
80
90
|
const routesWithAuth = quidproquo_webserver_1.qpqWebServerUtils
|
|
81
91
|
.getAllRoutesForApi(config.apiName, qpqConfig)
|
|
@@ -109,6 +119,7 @@ const getQqpGrantableResources = (scope, id, qpqConfig, awsAccountId) => {
|
|
|
109
119
|
...(0, exports.getQqpStorageDriveGrantables)(scope, id, qpqConfig, awsAccountId),
|
|
110
120
|
...(0, exports.getQqpQueueGrantables)(scope, id, qpqConfig, awsAccountId),
|
|
111
121
|
...(0, exports.getQqpUserPoolGrantables)(scope, id, qpqConfig, awsAccountId),
|
|
122
|
+
...(0, exports.getQqpTopicGrantables)(scope, id, qpqConfig, awsAccountId),
|
|
112
123
|
];
|
|
113
124
|
};
|
|
114
125
|
exports.getQqpGrantableResources = getQqpGrantableResources;
|
package/package.json
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { awsNamingUtils } from 'quidproquo-actionprocessor-awslambda';
|
|
2
|
+
import { EventBusQPQConfigSetting, qpqCoreUtils, QPQConfig } from 'quidproquo-core';
|
|
3
|
+
|
|
4
|
+
import { QpqConstructBlock, QpqConstructBlockProps } from '../../../base/QpqConstructBlock';
|
|
5
|
+
import { QpqResource } from '../../../base/QpqResource';
|
|
6
|
+
|
|
7
|
+
import * as qpqDeployAwsCdkUtils from '../../../../utils';
|
|
8
|
+
|
|
9
|
+
import { Construct } from 'constructs';
|
|
10
|
+
import { aws_sns, aws_iam } from 'aws-cdk-lib';
|
|
11
|
+
|
|
12
|
+
export interface QpqCoreEventBusConstructProps extends QpqConstructBlockProps {
|
|
13
|
+
eventBusConfig: EventBusQPQConfigSetting;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export abstract class QpqCoreEventBusConstructBase extends QpqConstructBlock {
|
|
17
|
+
abstract topic: aws_sns.ITopic;
|
|
18
|
+
|
|
19
|
+
public grantRead(grantee: aws_iam.IGrantable) {}
|
|
20
|
+
|
|
21
|
+
public grantWrite(grantee: aws_iam.IGrantable): void {
|
|
22
|
+
this.topic.grantPublish(grantee);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public grantAll(grantee: aws_iam.IGrantable): void {
|
|
26
|
+
this.grantRead(grantee);
|
|
27
|
+
this.grantWrite(grantee);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class QpqCoreEventBusConstruct extends QpqCoreEventBusConstructBase {
|
|
32
|
+
topic: aws_sns.ITopic;
|
|
33
|
+
|
|
34
|
+
static fromOtherStack(
|
|
35
|
+
scope: Construct,
|
|
36
|
+
id: string,
|
|
37
|
+
qpqConfig: QPQConfig,
|
|
38
|
+
awsAccountId: string,
|
|
39
|
+
eventBusName: string,
|
|
40
|
+
applicationOverride?: string,
|
|
41
|
+
): QpqCoreEventBusConstructBase {
|
|
42
|
+
const topicArn = qpqDeployAwsCdkUtils.importStackValue(
|
|
43
|
+
awsNamingUtils.getCFExportNameSnsTopicArnFromConfig(
|
|
44
|
+
eventBusName,
|
|
45
|
+
qpqConfig,
|
|
46
|
+
applicationOverride,
|
|
47
|
+
),
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
class Import extends QpqCoreEventBusConstructBase {
|
|
51
|
+
topic = aws_sns.Topic.fromTopicArn(this, 'topic-arn', topicArn);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return new Import(scope, id, { qpqConfig, awsAccountId });
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
constructor(scope: Construct, id: string, props: QpqCoreEventBusConstructProps) {
|
|
58
|
+
super(scope, id, props);
|
|
59
|
+
|
|
60
|
+
this.topic = new aws_sns.Topic(this, 'topic', {
|
|
61
|
+
topicName: this.resourceName(props.eventBusConfig.name),
|
|
62
|
+
displayName: props.eventBusConfig.name,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
qpqDeployAwsCdkUtils.exportStackValue(
|
|
66
|
+
this,
|
|
67
|
+
awsNamingUtils.getCFExportNameSnsTopicArnFromConfig(
|
|
68
|
+
props.eventBusConfig.name,
|
|
69
|
+
props.qpqConfig,
|
|
70
|
+
),
|
|
71
|
+
this.topic.topicArn,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './QpqCoreEventBusConstruct';
|
|
@@ -2,13 +2,14 @@ import { QueueQPQConfigSetting, qpqCoreUtils, QPQConfig } from 'quidproquo-core'
|
|
|
2
2
|
|
|
3
3
|
import { QpqConstructBlock, QpqConstructBlockProps } from '../../../base/QpqConstructBlock';
|
|
4
4
|
import { QpqCoreQueueConstruct } from './QpqCoreQueueConstruct';
|
|
5
|
+
import { QpqCoreEventBusConstruct } from '../eventBus/QpqCoreEventBusConstruct';
|
|
5
6
|
|
|
6
7
|
import { Function } from '../../../basic/Function';
|
|
7
8
|
|
|
8
9
|
import * as qpqDeployAwsCdkUtils from '../../../../utils';
|
|
9
10
|
|
|
10
11
|
import { Construct } from 'constructs';
|
|
11
|
-
import { aws_lambda_event_sources, aws_lambda } from 'aws-cdk-lib';
|
|
12
|
+
import { aws_lambda_event_sources, aws_lambda, aws_sns, aws_sns_subscriptions } from 'aws-cdk-lib';
|
|
12
13
|
import * as cdk from 'aws-cdk-lib';
|
|
13
14
|
|
|
14
15
|
export interface QpqApiCoreQueueConstructProps extends QpqConstructBlockProps {
|
|
@@ -58,6 +59,31 @@ export class QpqApiCoreQueueConstruct extends QpqConstructBlock {
|
|
|
58
59
|
props.awsAccountId,
|
|
59
60
|
);
|
|
60
61
|
|
|
62
|
+
props.queueConfig.eventBusSubscriptions.forEach((eventBusName) => {
|
|
63
|
+
const eventBus = QpqCoreEventBusConstruct.fromOtherStack(
|
|
64
|
+
this,
|
|
65
|
+
`event-bus-${eventBusName}`,
|
|
66
|
+
props.qpqConfig,
|
|
67
|
+
props.awsAccountId,
|
|
68
|
+
eventBusName,
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
eventBus.topic.addSubscription(
|
|
72
|
+
new aws_sns_subscriptions.SqsSubscription(queueResource.queue, {
|
|
73
|
+
rawMessageDelivery: true,
|
|
74
|
+
|
|
75
|
+
// No wildcard support :(
|
|
76
|
+
// filterPolicy: {
|
|
77
|
+
// type: aws_sns.SubscriptionFilter.stringFilter({
|
|
78
|
+
// allowlist: Object.keys(props.queueConfig.qpqQueueProcessors).map((type) =>
|
|
79
|
+
// type.replaceAll(/{(.+?)}/g, '*'),
|
|
80
|
+
// ),
|
|
81
|
+
// }),
|
|
82
|
+
// },
|
|
83
|
+
}),
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
|
|
61
87
|
queueFunction.lambdaFunction.addEventSource(
|
|
62
88
|
new aws_lambda_event_sources.SqsEventSource(queueResource.queue, {
|
|
63
89
|
batchSize: props.queueConfig.batchSize,
|
|
@@ -72,5 +72,22 @@ export class QpqCoreQueueConstruct extends QpqCoreQueueConstructBase {
|
|
|
72
72
|
}),
|
|
73
73
|
},
|
|
74
74
|
});
|
|
75
|
+
|
|
76
|
+
// This has to be any topic arn as we want other services / apps to be able
|
|
77
|
+
// to publish to this queue
|
|
78
|
+
this.queue.addToResourcePolicy(
|
|
79
|
+
new aws_iam.PolicyStatement({
|
|
80
|
+
sid: 'AllowSNSServicePrincipal',
|
|
81
|
+
effect: aws_iam.Effect.ALLOW,
|
|
82
|
+
principals: [new aws_iam.ServicePrincipal('sns.amazonaws.com')],
|
|
83
|
+
actions: ['sqs:SendMessage'],
|
|
84
|
+
resources: [this.queue.queueArn],
|
|
85
|
+
conditions: {
|
|
86
|
+
ArnEquals: {
|
|
87
|
+
'aws:SourceArn': `arn:aws:sns:*:${props.awsAccountId}:*`,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
}),
|
|
91
|
+
);
|
|
75
92
|
}
|
|
76
93
|
}
|
|
@@ -67,6 +67,7 @@ export class QpqCoreStorageDriveConstruct extends QpqCoreStorageDriveConstructBa
|
|
|
67
67
|
autoDeleteObjects: true,
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
+
// TODO: Only do this IF a cloud front dist wants to use it
|
|
70
71
|
this.bucket.addToResourcePolicy(
|
|
71
72
|
new aws_iam.PolicyStatement({
|
|
72
73
|
sid: 'AllowCloudFrontServicePrincipal',
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
getSystemActionProcessor,
|
|
6
6
|
getFileActionProcessor,
|
|
7
7
|
getQueueActionProcessor,
|
|
8
|
+
getEventBusActionProcessor,
|
|
8
9
|
getConfigGetSecretActionProcessor,
|
|
9
10
|
getConfigGetParameterActionProcessor,
|
|
10
11
|
getConfigGetParametersActionProcessor,
|
|
@@ -70,6 +71,7 @@ export const getAPIGatewayEventExecutor = (
|
|
|
70
71
|
...getFileActionProcessor(cdkConfig.qpqConfig),
|
|
71
72
|
...getConfigActionProcessor(cdkConfig.qpqConfig),
|
|
72
73
|
...getQueueActionProcessor(cdkConfig.qpqConfig),
|
|
74
|
+
...getEventBusActionProcessor(cdkConfig.qpqConfig),
|
|
73
75
|
...getUserDirectoryActionProcessor(cdkConfig.qpqConfig),
|
|
74
76
|
|
|
75
77
|
...getCustomActionProcessors(cdkConfig.qpqConfig),
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
getSystemActionProcessor,
|
|
6
6
|
getFileActionProcessor,
|
|
7
7
|
getQueueActionProcessor,
|
|
8
|
+
getEventBusActionProcessor,
|
|
8
9
|
getUserDirectoryActionProcessor,
|
|
9
10
|
getConfigGetSecretActionProcessor,
|
|
10
11
|
getConfigGetParameterActionProcessor,
|
|
@@ -57,6 +58,7 @@ export const getEventBridgeEventExecutor = (
|
|
|
57
58
|
...getConfigGetParametersActionProcessor(cdkConfig.qpqConfig),
|
|
58
59
|
...getConfigActionProcessor(cdkConfig.qpqConfig),
|
|
59
60
|
...getQueueActionProcessor(cdkConfig.qpqConfig),
|
|
61
|
+
...getEventBusActionProcessor(cdkConfig.qpqConfig),
|
|
60
62
|
...getUserDirectoryActionProcessor(cdkConfig.qpqConfig),
|
|
61
63
|
|
|
62
64
|
...getCustomActionProcessors(cdkConfig.qpqConfig),
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
getSystemActionProcessor,
|
|
8
8
|
getFileActionProcessor,
|
|
9
9
|
getQueueActionProcessor,
|
|
10
|
+
getEventBusActionProcessor,
|
|
10
11
|
getConfigGetSecretActionProcessor,
|
|
11
12
|
getConfigGetParameterActionProcessor,
|
|
12
13
|
getConfigGetParametersActionProcessor,
|
|
@@ -58,6 +59,7 @@ export const getStoryActionRuntime = async (
|
|
|
58
59
|
...getFileActionProcessor(cdkConfig.qpqConfig),
|
|
59
60
|
...getConfigActionProcessor(cdkConfig.qpqConfig),
|
|
60
61
|
...getQueueActionProcessor(cdkConfig.qpqConfig),
|
|
62
|
+
...getEventBusActionProcessor(cdkConfig.qpqConfig),
|
|
61
63
|
...getUserDirectoryActionProcessor(cdkConfig.qpqConfig),
|
|
62
64
|
|
|
63
65
|
...getCustomActionProcessors(cdkConfig.qpqConfig),
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
QpqCoreParameterConstruct,
|
|
10
10
|
QpqCoreQueueConstruct,
|
|
11
11
|
QpqCoreSecretConstruct,
|
|
12
|
+
QpqCoreEventBusConstruct,
|
|
12
13
|
QpqWebserverDomainConstruct,
|
|
13
14
|
QpqCoreUserDirectoryConstruct,
|
|
14
15
|
QpqWebserverApiKeyConstruct,
|
|
@@ -96,5 +97,16 @@ export class InfQpqServiceStack extends QpqServiceStack {
|
|
|
96
97
|
apiKeyConfig: setting,
|
|
97
98
|
}),
|
|
98
99
|
);
|
|
100
|
+
|
|
101
|
+
// Event Busses
|
|
102
|
+
const busses = qpqCoreUtils.getAllEventBusConfigs(props.qpqConfig).map(
|
|
103
|
+
(setting) =>
|
|
104
|
+
new QpqCoreEventBusConstruct(this, qpqCoreUtils.getUniqueKeyForSetting(setting), {
|
|
105
|
+
awsAccountId: props.awsAccountId,
|
|
106
|
+
qpqConfig: props.qpqConfig,
|
|
107
|
+
|
|
108
|
+
eventBusConfig: setting,
|
|
109
|
+
}),
|
|
110
|
+
);
|
|
99
111
|
}
|
|
100
112
|
}
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
QpqCoreStorageDriveConstruct,
|
|
25
25
|
QpqCoreQueueConstruct,
|
|
26
26
|
QpqCoreUserDirectoryConstruct,
|
|
27
|
+
QpqCoreEventBusConstruct,
|
|
27
28
|
} from '../constructs';
|
|
28
29
|
|
|
29
30
|
export const getQqpSecretGrantables = (
|
|
@@ -151,6 +152,29 @@ export const getQqpUserPoolGrantables = (
|
|
|
151
152
|
return userDirectoryResources;
|
|
152
153
|
};
|
|
153
154
|
|
|
155
|
+
export const getQqpTopicGrantables = (
|
|
156
|
+
scope: Construct,
|
|
157
|
+
id: string,
|
|
158
|
+
qpqConfig: QPQConfig,
|
|
159
|
+
awsAccountId: string,
|
|
160
|
+
): QpqResource[] => {
|
|
161
|
+
const eventBusConfigs = qpqCoreUtils
|
|
162
|
+
.getAllEventBusConfigs(qpqConfig)
|
|
163
|
+
.filter((ebc) => !ebc.deprecated);
|
|
164
|
+
|
|
165
|
+
const eventBuses = eventBusConfigs.map((eventBus) => {
|
|
166
|
+
return QpqCoreEventBusConstruct.fromOtherStack(
|
|
167
|
+
scope,
|
|
168
|
+
`${id}-${qpqCoreUtils.getUniqueKeyForSetting(eventBus)}-grantable`,
|
|
169
|
+
qpqConfig,
|
|
170
|
+
awsAccountId,
|
|
171
|
+
eventBus.name,
|
|
172
|
+
);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
return eventBuses;
|
|
176
|
+
};
|
|
177
|
+
|
|
154
178
|
export const getQqpUserPoolGrantablesForApiConfig = (
|
|
155
179
|
scope: Construct,
|
|
156
180
|
id: string,
|
|
@@ -206,6 +230,7 @@ export const getQqpGrantableResources = (
|
|
|
206
230
|
...getQqpStorageDriveGrantables(scope, id, qpqConfig, awsAccountId),
|
|
207
231
|
...getQqpQueueGrantables(scope, id, qpqConfig, awsAccountId),
|
|
208
232
|
...getQqpUserPoolGrantables(scope, id, qpqConfig, awsAccountId),
|
|
233
|
+
...getQqpTopicGrantables(scope, id, qpqConfig, awsAccountId),
|
|
209
234
|
];
|
|
210
235
|
};
|
|
211
236
|
|