@fjall/components-infrastructure 0.86.1 → 0.87.4
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/README.md +3 -3
- package/dist/lib/app.d.ts +166 -6
- package/dist/lib/app.js +212 -20
- package/dist/lib/aspects/resourceInventory.d.ts +4 -4
- package/dist/lib/aspects/resourceInventory.js +3 -3
- package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
- package/dist/lib/config/aws/identityCenter.js +1 -5
- package/dist/lib/config/aws/organisation.js +1 -4
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +7 -1
- package/dist/lib/patterns/aws/buildkite.js +3 -2
- package/dist/lib/patterns/aws/cdn.d.ts +164 -0
- package/dist/lib/patterns/aws/cdn.js +264 -0
- package/dist/lib/patterns/aws/compute.d.ts +278 -59
- package/dist/lib/patterns/aws/compute.js +384 -188
- package/dist/lib/patterns/aws/connections.d.ts +46 -0
- package/dist/lib/patterns/aws/connections.js +159 -0
- package/dist/lib/patterns/aws/database.d.ts +124 -11
- package/dist/lib/patterns/aws/database.js +188 -66
- package/dist/lib/patterns/aws/hostedZone.js +1 -1
- package/dist/lib/patterns/aws/index.d.ts +3 -0
- package/dist/lib/patterns/aws/index.js +4 -1
- package/dist/lib/patterns/aws/interfaces/compute.d.ts +121 -0
- package/dist/lib/patterns/aws/interfaces/compute.js +48 -0
- package/dist/lib/patterns/aws/interfaces/connector.d.ts +183 -0
- package/dist/lib/patterns/aws/interfaces/connector.js +117 -0
- package/dist/lib/patterns/aws/interfaces/database.d.ts +136 -0
- package/dist/lib/patterns/aws/interfaces/database.js +65 -0
- package/dist/lib/patterns/aws/interfaces/index.d.ts +12 -0
- package/dist/lib/patterns/aws/interfaces/index.js +49 -0
- package/dist/lib/patterns/aws/interfaces/messaging.d.ts +146 -0
- package/dist/lib/patterns/aws/interfaces/messaging.js +56 -0
- package/dist/lib/patterns/aws/interfaces/pattern.d.ts +403 -0
- package/dist/lib/patterns/aws/interfaces/pattern.js +36 -0
- package/dist/lib/patterns/aws/interfaces/storage.d.ts +136 -0
- package/dist/lib/patterns/aws/interfaces/storage.js +48 -0
- package/dist/lib/patterns/aws/messaging.d.ts +183 -0
- package/dist/lib/patterns/aws/messaging.js +239 -0
- package/dist/lib/patterns/aws/network.js +4 -4
- package/dist/lib/patterns/aws/pattern.d.ts +67 -0
- package/dist/lib/patterns/aws/pattern.js +69 -0
- package/dist/lib/patterns/aws/payload.d.ts +87 -0
- package/dist/lib/patterns/aws/payload.js +526 -0
- package/dist/lib/patterns/aws/storage.d.ts +127 -15
- package/dist/lib/patterns/aws/storage.js +234 -38
- package/dist/lib/resources/aws/backup/backupPlan.js +1 -6
- package/dist/lib/resources/aws/backup/backupVault.js +1 -2
- package/dist/lib/resources/aws/base/awsStack.d.ts +0 -2
- package/dist/lib/resources/aws/base/awsStack.js +1 -7
- package/dist/lib/resources/aws/cdn/cloudFront.d.ts +71 -0
- package/dist/lib/resources/aws/cdn/cloudFront.js +176 -0
- package/dist/lib/resources/aws/cdn/index.d.ts +1 -0
- package/dist/lib/resources/aws/cdn/index.js +18 -0
- package/dist/lib/resources/aws/compute/ec2.d.ts +5 -0
- package/dist/lib/resources/aws/compute/ec2.js +33 -6
- package/dist/lib/resources/aws/compute/ecs.d.ts +32 -25
- package/dist/lib/resources/aws/compute/ecs.js +31 -115
- package/dist/lib/resources/aws/compute/lambda.d.ts +94 -5
- package/dist/lib/resources/aws/compute/lambda.js +209 -32
- package/dist/lib/resources/aws/database/database.js +1 -1
- package/dist/lib/resources/aws/database/dynamodb.d.ts +70 -0
- package/dist/lib/resources/aws/database/dynamodb.js +181 -0
- package/dist/lib/resources/aws/database/index.d.ts +1 -0
- package/dist/lib/resources/aws/database/index.js +2 -1
- package/dist/lib/resources/aws/database/migrationLambda.d.ts +80 -0
- package/dist/lib/resources/aws/database/migrationLambda.js +119 -0
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +15 -0
- package/dist/lib/resources/aws/database/rdsAurora.js +41 -18
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +12 -8
- package/dist/lib/resources/aws/database/rdsInstance.js +2 -2
- package/dist/lib/resources/aws/index.d.ts +2 -0
- package/dist/lib/resources/aws/index.js +3 -1
- package/dist/lib/resources/aws/messaging/eventbridge.d.ts +28 -0
- package/dist/lib/resources/aws/messaging/eventbridge.js +53 -0
- package/dist/lib/resources/aws/messaging/index.d.ts +3 -0
- package/dist/lib/resources/aws/messaging/index.js +20 -0
- package/dist/lib/resources/aws/messaging/sns.d.ts +35 -0
- package/dist/lib/resources/aws/messaging/sns.js +70 -0
- package/dist/lib/resources/aws/messaging/sqs.d.ts +105 -0
- package/dist/lib/resources/aws/messaging/sqs.js +231 -0
- package/dist/lib/resources/aws/messaging/utils.d.ts +3 -0
- package/dist/lib/resources/aws/messaging/utils.js +7 -0
- package/dist/lib/resources/aws/networking/ipam.js +1 -2
- package/dist/lib/resources/aws/networking/ipamPool.js +3 -2
- package/dist/lib/resources/aws/networking/vpc.js +1 -2
- package/dist/lib/resources/aws/storage/ecr.js +8 -5
- package/dist/lib/resources/aws/storage/s3.js +1 -2
- package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -1
- package/dist/lib/resources/aws/utilities/customResource.js +1 -1
- package/dist/lib/utils/getConfig.js +3 -2
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/dist/lib/utils/manifestWriter.d.ts +174 -0
- package/dist/lib/utils/manifestWriter.js +233 -0
- package/dist/lib/utils/standardTagsAspect.js +1 -8
- package/dist/lib/utils/validationLogger.d.ts +34 -0
- package/dist/lib/utils/validationLogger.js +83 -0
- package/package.json +6 -3
- package/dist/lib/__tests__/setup.d.ts +0 -48
- package/dist/lib/__tests__/setup.js +0 -1
- package/dist/lib/patterns/aws/cicdRole.d.ts +0 -67
- package/dist/lib/patterns/aws/cicdRole.js +0 -68
- package/dist/lib/resources/aws/cicd/cicdRole.d.ts +0 -65
- package/dist/lib/resources/aws/cicd/cicdRole.js +0 -191
- package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +0 -75
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +0 -1
- package/dist/lib/resources/aws/compute/ecsSpot.d.ts +0 -75
- package/dist/lib/resources/aws/compute/ecsSpot.js +0 -1
- package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.d.ts +0 -20
- package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +0 -1
- package/dist/lib/resources/aws/utilities/cfnOutput.d.ts +0 -5
- package/dist/lib/resources/aws/utilities/cfnOutput.js +0 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { type Construct } from "constructs";
|
|
2
|
+
import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import type App from "../../app";
|
|
4
|
+
import { SQSQueue } from "../../resources/aws/messaging/sqs";
|
|
5
|
+
import { SNSTopic } from "../../resources/aws/messaging/sns";
|
|
6
|
+
import { EventBridgeBus } from "../../resources/aws/messaging/eventbridge";
|
|
7
|
+
import { type IQueueMessaging, type ITopicMessaging, type IEventBusMessaging, type AnyMessaging } from "./interfaces/messaging.js";
|
|
8
|
+
import { type IQueueConnector } from "./interfaces/connector.js";
|
|
9
|
+
/**
|
|
10
|
+
* Queue messaging props with type discriminator.
|
|
11
|
+
*/
|
|
12
|
+
export interface IQueueProps {
|
|
13
|
+
/** Type discriminator for messaging type. */
|
|
14
|
+
type: "queue";
|
|
15
|
+
queueType?: "standard" | "fifo";
|
|
16
|
+
visibilityTimeout?: number;
|
|
17
|
+
messageRetentionPeriod?: number;
|
|
18
|
+
receiveMessageWaitTime?: number;
|
|
19
|
+
maxMessageSize?: number;
|
|
20
|
+
deliveryDelay?: number;
|
|
21
|
+
deadLetterQueue?: {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
maxReceiveCount?: number;
|
|
24
|
+
};
|
|
25
|
+
encryption?: "SSE_SQS" | "SSE_KMS" | "NONE";
|
|
26
|
+
kmsKeyArn?: string;
|
|
27
|
+
contentBasedDeduplication?: boolean;
|
|
28
|
+
fifoThroughputLimit?: "perQueue" | "perMessageGroupId";
|
|
29
|
+
deduplicationScope?: "queue" | "messageGroup";
|
|
30
|
+
removalPolicy?: "DESTROY" | "RETAIN";
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Topic messaging props with type discriminator.
|
|
34
|
+
*/
|
|
35
|
+
export interface ITopicProps {
|
|
36
|
+
/** Type discriminator for messaging type. */
|
|
37
|
+
type: "topic";
|
|
38
|
+
topicName?: string;
|
|
39
|
+
displayName?: string;
|
|
40
|
+
fifo?: boolean;
|
|
41
|
+
contentBasedDeduplication?: boolean;
|
|
42
|
+
removalPolicy?: "DESTROY" | "RETAIN";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* EventBus messaging props with type discriminator.
|
|
46
|
+
*/
|
|
47
|
+
export interface IEventBusProps {
|
|
48
|
+
/** Type discriminator for messaging type. */
|
|
49
|
+
type: "eventBus";
|
|
50
|
+
eventBusName?: string;
|
|
51
|
+
removalPolicy?: "DESTROY" | "RETAIN";
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Union type for all messaging props.
|
|
55
|
+
*/
|
|
56
|
+
export type IMessagingProps = IQueueProps | ITopicProps | IEventBusProps;
|
|
57
|
+
/**
|
|
58
|
+
* SQS queue messaging wrapper implementing IQueueMessaging interface.
|
|
59
|
+
* Provides grant methods and Fjall patterns for queue messaging.
|
|
60
|
+
*/
|
|
61
|
+
export declare class QueueMessaging extends SQSQueue implements IQueueMessaging, IQueueConnector {
|
|
62
|
+
/** Type discriminator for runtime type narrowing. */
|
|
63
|
+
readonly messagingType: "queue";
|
|
64
|
+
/** The connector type for unified connection processing. */
|
|
65
|
+
readonly connectorType: "queue";
|
|
66
|
+
constructor(scope: Construct, id: string, props: IQueueProps);
|
|
67
|
+
/**
|
|
68
|
+
* Grant send message permissions to the grantee.
|
|
69
|
+
* Implements IQueueMessaging.grantSendMessages.
|
|
70
|
+
*/
|
|
71
|
+
grantSendMessages(grantee: IGrantable): Grant;
|
|
72
|
+
/**
|
|
73
|
+
* Grant consume (receive and delete) message permissions to the grantee.
|
|
74
|
+
* Implements IQueueMessaging.grantConsumeMessages.
|
|
75
|
+
*/
|
|
76
|
+
grantConsumeMessages(grantee: IGrantable): Grant;
|
|
77
|
+
/**
|
|
78
|
+
* Grant purge permissions to the grantee.
|
|
79
|
+
* Implements IQueueMessaging.grantPurge.
|
|
80
|
+
*/
|
|
81
|
+
grantPurge(grantee: IGrantable): Grant;
|
|
82
|
+
/**
|
|
83
|
+
* Grant specific actions to the grantee.
|
|
84
|
+
* Implements IQueueMessaging.grant.
|
|
85
|
+
*/
|
|
86
|
+
grant(grantee: IGrantable, ...actions: string[]): Grant;
|
|
87
|
+
/**
|
|
88
|
+
* Grant full access (send and consume) to the grantee.
|
|
89
|
+
* Implements IQueueMessaging.grantFull and IQueueConnector.grantFull.
|
|
90
|
+
*/
|
|
91
|
+
grantFull(grantee: IGrantable): Grant;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* SNS topic messaging wrapper implementing ITopicMessaging interface.
|
|
95
|
+
* Provides grant methods and Fjall patterns for topic messaging.
|
|
96
|
+
*/
|
|
97
|
+
export declare class TopicMessaging extends SNSTopic implements ITopicMessaging {
|
|
98
|
+
/** Type discriminator for runtime type narrowing. */
|
|
99
|
+
readonly messagingType: "topic";
|
|
100
|
+
constructor(scope: Construct, id: string, props: ITopicProps);
|
|
101
|
+
/**
|
|
102
|
+
* Grant publish permissions to the grantee.
|
|
103
|
+
* Implements ITopicMessaging.grantPublish.
|
|
104
|
+
*/
|
|
105
|
+
grantPublish(grantee: IGrantable): Grant;
|
|
106
|
+
/**
|
|
107
|
+
* Grant subscribe permissions to the grantee.
|
|
108
|
+
* Implements ITopicMessaging.grantSubscribe.
|
|
109
|
+
*/
|
|
110
|
+
grantSubscribe(grantee: IGrantable): Grant;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* EventBridge event bus messaging wrapper implementing IEventBusMessaging interface.
|
|
114
|
+
* Provides grant methods and Fjall patterns for event-driven messaging.
|
|
115
|
+
*/
|
|
116
|
+
export declare class EventBusMessaging extends EventBridgeBus implements IEventBusMessaging {
|
|
117
|
+
/** Type discriminator for runtime type narrowing. */
|
|
118
|
+
readonly messagingType: "eventBus";
|
|
119
|
+
constructor(scope: Construct, id: string, props: IEventBusProps);
|
|
120
|
+
/**
|
|
121
|
+
* Grant put events permissions to the grantee.
|
|
122
|
+
* Implements IEventBusMessaging.grantPutEventsTo.
|
|
123
|
+
*/
|
|
124
|
+
grantPutEventsTo(grantee: IGrantable): Grant;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Factory for creating messaging resources.
|
|
128
|
+
*
|
|
129
|
+
* Supports:
|
|
130
|
+
* - Queue (SQS)
|
|
131
|
+
* - Topic (SNS)
|
|
132
|
+
* - EventBus (EventBridge)
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* // Standard queue with DLQ
|
|
136
|
+
* const notifications = app.addMessaging(MessagingFactory.build("Notifications", {
|
|
137
|
+
* type: "queue",
|
|
138
|
+
* queueType: "standard",
|
|
139
|
+
* deadLetterQueue: { enabled: true, maxReceiveCount: 3 }
|
|
140
|
+
* }));
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* // SNS Topic for pub/sub
|
|
144
|
+
* const alerts = app.addMessaging(MessagingFactory.build("Alerts", {
|
|
145
|
+
* type: "topic",
|
|
146
|
+
* displayName: "Alert Notifications"
|
|
147
|
+
* }));
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* // EventBridge for event-driven architecture
|
|
151
|
+
* const events = app.addMessaging(MessagingFactory.build("DomainEvents", {
|
|
152
|
+
* type: "eventBus"
|
|
153
|
+
* }));
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* // Grant permissions
|
|
157
|
+
* notifications.grantSendMessages(producerLambda);
|
|
158
|
+
* alerts.grantPublish(apiService);
|
|
159
|
+
* events.grantPutEventsTo(orderService);
|
|
160
|
+
*/
|
|
161
|
+
export declare class MessagingFactory {
|
|
162
|
+
/**
|
|
163
|
+
* Build a queue messaging factory function.
|
|
164
|
+
*/
|
|
165
|
+
static build(id: string, props: IQueueProps): (app: App, scope: Construct) => QueueMessaging;
|
|
166
|
+
/**
|
|
167
|
+
* Build a topic messaging factory function.
|
|
168
|
+
*/
|
|
169
|
+
static build(id: string, props: ITopicProps): (app: App, scope: Construct) => TopicMessaging;
|
|
170
|
+
/**
|
|
171
|
+
* Build an event bus messaging factory function.
|
|
172
|
+
*/
|
|
173
|
+
static build(id: string, props: IEventBusProps): (app: App, scope: Construct) => EventBusMessaging;
|
|
174
|
+
/**
|
|
175
|
+
* Build a messaging factory function (generic).
|
|
176
|
+
*/
|
|
177
|
+
static build(id: string, props: IMessagingProps): (app: App, scope: Construct) => AnyMessaging;
|
|
178
|
+
}
|
|
179
|
+
export type { SQSQueueProps } from "../../resources/aws/messaging/sqs";
|
|
180
|
+
export type { SNSTopicProps } from "../../resources/aws/messaging/sns";
|
|
181
|
+
export type { EventBridgeBusProps } from "../../resources/aws/messaging/eventbridge";
|
|
182
|
+
export type { IQueueMessaging, ITopicMessaging, IEventBusMessaging, AnyMessaging, IQueue, ITopic, IEventBus } from "./interfaces/messaging.js";
|
|
183
|
+
export { isQueueMessaging, isTopicMessaging, isEventBusMessaging } from "./interfaces/messaging.js";
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isEventBusMessaging = exports.isTopicMessaging = exports.isQueueMessaging = exports.MessagingFactory = exports.EventBusMessaging = exports.TopicMessaging = exports.QueueMessaging = void 0;
|
|
4
|
+
const sqs_1 = require("../../resources/aws/messaging/sqs");
|
|
5
|
+
const sns_1 = require("../../resources/aws/messaging/sns");
|
|
6
|
+
const eventbridge_1 = require("../../resources/aws/messaging/eventbridge");
|
|
7
|
+
const validationLogger_js_1 = require("../../utils/validationLogger.js");
|
|
8
|
+
/**
|
|
9
|
+
* Validates SQS props and logs warnings for misconfigured options.
|
|
10
|
+
*/
|
|
11
|
+
function validateSQSProps(props) {
|
|
12
|
+
// Validate visibility timeout range (0-43200 seconds = 12 hours)
|
|
13
|
+
if (props.visibilityTimeout !== undefined &&
|
|
14
|
+
(props.visibilityTimeout < 0 || props.visibilityTimeout > 43200)) {
|
|
15
|
+
throw new Error("visibilityTimeout must be between 0 and 43200 seconds (12 hours)");
|
|
16
|
+
}
|
|
17
|
+
// Validate message retention period (60-1209600 seconds = 1 minute to 14 days)
|
|
18
|
+
if (props.messageRetentionPeriod !== undefined &&
|
|
19
|
+
(props.messageRetentionPeriod < 60 ||
|
|
20
|
+
props.messageRetentionPeriod > 1209600)) {
|
|
21
|
+
throw new Error("messageRetentionPeriod must be between 60 and 1209600 seconds (1 minute to 14 days)");
|
|
22
|
+
}
|
|
23
|
+
// Warn about FIFO-specific options on standard queues
|
|
24
|
+
if (props.queueType !== "fifo") {
|
|
25
|
+
if (props.contentBasedDeduplication !== undefined) {
|
|
26
|
+
validationLogger_js_1.FjallLogger.warn("'contentBasedDeduplication' is only applicable to FIFO queues. " +
|
|
27
|
+
"This setting will be ignored for standard queues.");
|
|
28
|
+
}
|
|
29
|
+
if (props.fifoThroughputLimit !== undefined) {
|
|
30
|
+
validationLogger_js_1.FjallLogger.warn("'fifoThroughputLimit' is only applicable to FIFO queues. " +
|
|
31
|
+
"This setting will be ignored for standard queues.");
|
|
32
|
+
}
|
|
33
|
+
if (props.deduplicationScope !== undefined) {
|
|
34
|
+
validationLogger_js_1.FjallLogger.warn("'deduplicationScope' is only applicable to FIFO queues. " +
|
|
35
|
+
"This setting will be ignored for standard queues.");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Validate KMS encryption
|
|
39
|
+
if (props.kmsKeyArn && props.encryption !== "SSE_KMS") {
|
|
40
|
+
validationLogger_js_1.FjallLogger.warn("'kmsKeyArn' provided but 'encryption' is not SSE_KMS. " +
|
|
41
|
+
"The KMS key will be ignored.");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validates SNS Topic props.
|
|
46
|
+
*/
|
|
47
|
+
function validateTopicProps(props) {
|
|
48
|
+
// Warn about FIFO-specific options on standard topics
|
|
49
|
+
if (!props.fifo && props.contentBasedDeduplication !== undefined) {
|
|
50
|
+
validationLogger_js_1.FjallLogger.warn("'contentBasedDeduplication' is only applicable to FIFO topics. " +
|
|
51
|
+
"This setting will be ignored for standard topics.");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* SQS queue messaging wrapper implementing IQueueMessaging interface.
|
|
56
|
+
* Provides grant methods and Fjall patterns for queue messaging.
|
|
57
|
+
*/
|
|
58
|
+
class QueueMessaging extends sqs_1.SQSQueue {
|
|
59
|
+
constructor(scope, id, props) {
|
|
60
|
+
const queueProps = {
|
|
61
|
+
queueType: props.queueType,
|
|
62
|
+
visibilityTimeout: props.visibilityTimeout,
|
|
63
|
+
messageRetentionPeriod: props.messageRetentionPeriod,
|
|
64
|
+
receiveMessageWaitTime: props.receiveMessageWaitTime,
|
|
65
|
+
maxMessageSize: props.maxMessageSize,
|
|
66
|
+
deliveryDelay: props.deliveryDelay,
|
|
67
|
+
deadLetterQueue: props.deadLetterQueue,
|
|
68
|
+
encryption: props.encryption,
|
|
69
|
+
kmsKeyArn: props.kmsKeyArn,
|
|
70
|
+
contentBasedDeduplication: props.contentBasedDeduplication,
|
|
71
|
+
fifoThroughputLimit: props.fifoThroughputLimit,
|
|
72
|
+
deduplicationScope: props.deduplicationScope,
|
|
73
|
+
removalPolicy: props.removalPolicy
|
|
74
|
+
};
|
|
75
|
+
super(scope, id, queueProps);
|
|
76
|
+
/** Type discriminator for runtime type narrowing. */
|
|
77
|
+
this.messagingType = "queue";
|
|
78
|
+
/** The connector type for unified connection processing. */
|
|
79
|
+
this.connectorType = "queue";
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Grant send message permissions to the grantee.
|
|
83
|
+
* Implements IQueueMessaging.grantSendMessages.
|
|
84
|
+
*/
|
|
85
|
+
grantSendMessages(grantee) {
|
|
86
|
+
return this.getQueue().grantSendMessages(grantee);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Grant consume (receive and delete) message permissions to the grantee.
|
|
90
|
+
* Implements IQueueMessaging.grantConsumeMessages.
|
|
91
|
+
*/
|
|
92
|
+
grantConsumeMessages(grantee) {
|
|
93
|
+
return this.getQueue().grantConsumeMessages(grantee);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Grant purge permissions to the grantee.
|
|
97
|
+
* Implements IQueueMessaging.grantPurge.
|
|
98
|
+
*/
|
|
99
|
+
grantPurge(grantee) {
|
|
100
|
+
return this.getQueue().grantPurge(grantee);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Grant specific actions to the grantee.
|
|
104
|
+
* Implements IQueueMessaging.grant.
|
|
105
|
+
*/
|
|
106
|
+
grant(grantee, ...actions) {
|
|
107
|
+
return this.getQueue().grant(grantee, ...actions);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Grant full access (send and consume) to the grantee.
|
|
111
|
+
* Implements IQueueMessaging.grantFull and IQueueConnector.grantFull.
|
|
112
|
+
*/
|
|
113
|
+
grantFull(grantee) {
|
|
114
|
+
this.grantSendMessages(grantee);
|
|
115
|
+
return this.grantConsumeMessages(grantee);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.QueueMessaging = QueueMessaging;
|
|
119
|
+
/**
|
|
120
|
+
* SNS topic messaging wrapper implementing ITopicMessaging interface.
|
|
121
|
+
* Provides grant methods and Fjall patterns for topic messaging.
|
|
122
|
+
*/
|
|
123
|
+
class TopicMessaging extends sns_1.SNSTopic {
|
|
124
|
+
constructor(scope, id, props) {
|
|
125
|
+
const topicProps = {
|
|
126
|
+
topicName: props.topicName,
|
|
127
|
+
displayName: props.displayName,
|
|
128
|
+
fifo: props.fifo,
|
|
129
|
+
contentBasedDeduplication: props.contentBasedDeduplication,
|
|
130
|
+
removalPolicy: props.removalPolicy
|
|
131
|
+
};
|
|
132
|
+
super(scope, id, topicProps);
|
|
133
|
+
/** Type discriminator for runtime type narrowing. */
|
|
134
|
+
this.messagingType = "topic";
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Grant publish permissions to the grantee.
|
|
138
|
+
* Implements ITopicMessaging.grantPublish.
|
|
139
|
+
*/
|
|
140
|
+
grantPublish(grantee) {
|
|
141
|
+
return this.getTopic().grantPublish(grantee);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Grant subscribe permissions to the grantee.
|
|
145
|
+
* Implements ITopicMessaging.grantSubscribe.
|
|
146
|
+
*/
|
|
147
|
+
grantSubscribe(grantee) {
|
|
148
|
+
return this.getTopic().grantSubscribe(grantee);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.TopicMessaging = TopicMessaging;
|
|
152
|
+
/**
|
|
153
|
+
* EventBridge event bus messaging wrapper implementing IEventBusMessaging interface.
|
|
154
|
+
* Provides grant methods and Fjall patterns for event-driven messaging.
|
|
155
|
+
*/
|
|
156
|
+
class EventBusMessaging extends eventbridge_1.EventBridgeBus {
|
|
157
|
+
constructor(scope, id, props) {
|
|
158
|
+
const eventBusProps = {
|
|
159
|
+
eventBusName: props.eventBusName,
|
|
160
|
+
removalPolicy: props.removalPolicy
|
|
161
|
+
};
|
|
162
|
+
super(scope, id, eventBusProps);
|
|
163
|
+
/** Type discriminator for runtime type narrowing. */
|
|
164
|
+
this.messagingType = "eventBus";
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Grant put events permissions to the grantee.
|
|
168
|
+
* Implements IEventBusMessaging.grantPutEventsTo.
|
|
169
|
+
*/
|
|
170
|
+
grantPutEventsTo(grantee) {
|
|
171
|
+
return this.getEventBus().grantPutEventsTo(grantee);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.EventBusMessaging = EventBusMessaging;
|
|
175
|
+
/**
|
|
176
|
+
* Factory for creating messaging resources.
|
|
177
|
+
*
|
|
178
|
+
* Supports:
|
|
179
|
+
* - Queue (SQS)
|
|
180
|
+
* - Topic (SNS)
|
|
181
|
+
* - EventBus (EventBridge)
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* // Standard queue with DLQ
|
|
185
|
+
* const notifications = app.addMessaging(MessagingFactory.build("Notifications", {
|
|
186
|
+
* type: "queue",
|
|
187
|
+
* queueType: "standard",
|
|
188
|
+
* deadLetterQueue: { enabled: true, maxReceiveCount: 3 }
|
|
189
|
+
* }));
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* // SNS Topic for pub/sub
|
|
193
|
+
* const alerts = app.addMessaging(MessagingFactory.build("Alerts", {
|
|
194
|
+
* type: "topic",
|
|
195
|
+
* displayName: "Alert Notifications"
|
|
196
|
+
* }));
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* // EventBridge for event-driven architecture
|
|
200
|
+
* const events = app.addMessaging(MessagingFactory.build("DomainEvents", {
|
|
201
|
+
* type: "eventBus"
|
|
202
|
+
* }));
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* // Grant permissions
|
|
206
|
+
* notifications.grantSendMessages(producerLambda);
|
|
207
|
+
* alerts.grantPublish(apiService);
|
|
208
|
+
* events.grantPutEventsTo(orderService);
|
|
209
|
+
*/
|
|
210
|
+
class MessagingFactory {
|
|
211
|
+
/**
|
|
212
|
+
* Implementation of the build method.
|
|
213
|
+
*/
|
|
214
|
+
static build(id, props) {
|
|
215
|
+
return (_app, scope) => {
|
|
216
|
+
switch (props.type) {
|
|
217
|
+
case "queue":
|
|
218
|
+
validateSQSProps(props);
|
|
219
|
+
return new QueueMessaging(scope, id, props);
|
|
220
|
+
case "topic":
|
|
221
|
+
validateTopicProps(props);
|
|
222
|
+
return new TopicMessaging(scope, id, props);
|
|
223
|
+
case "eventBus":
|
|
224
|
+
return new EventBusMessaging(scope, id, props);
|
|
225
|
+
default: {
|
|
226
|
+
const _exhaustive = props;
|
|
227
|
+
throw new Error(`Unsupported messaging type: ${_exhaustive.type}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.MessagingFactory = MessagingFactory;
|
|
234
|
+
// Re-export type guards
|
|
235
|
+
var messaging_js_1 = require("./interfaces/messaging.js");
|
|
236
|
+
Object.defineProperty(exports, "isQueueMessaging", { enumerable: true, get: function () { return messaging_js_1.isQueueMessaging; } });
|
|
237
|
+
Object.defineProperty(exports, "isTopicMessaging", { enumerable: true, get: function () { return messaging_js_1.isTopicMessaging; } });
|
|
238
|
+
Object.defineProperty(exports, "isEventBusMessaging", { enumerable: true, get: function () { return messaging_js_1.isEventBusMessaging; } });
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tZXNzYWdpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsMkRBRzJDO0FBQzNDLDJEQUcyQztBQUMzQywyRUFHbUQ7QUFDbkQseUVBQThEO0FBNkQ5RDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBa0I7SUFDMUMsaUVBQWlFO0lBQ2pFLElBQ0UsS0FBSyxDQUFDLGlCQUFpQixLQUFLLFNBQVM7UUFDckMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsRUFDaEUsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQsK0VBQStFO0lBQy9FLElBQ0UsS0FBSyxDQUFDLHNCQUFzQixLQUFLLFNBQVM7UUFDMUMsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEdBQUcsRUFBRTtZQUNoQyxLQUFLLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLEVBQ3pDLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHFGQUFxRixDQUN0RixDQUFDO0lBQ0osQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMseUJBQXlCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEQsaUNBQVcsQ0FBQyxJQUFJLENBQ2QsaUVBQWlFO2dCQUMvRCxtREFBbUQsQ0FDdEQsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QyxpQ0FBVyxDQUFDLElBQUksQ0FDZCwyREFBMkQ7Z0JBQ3pELG1EQUFtRCxDQUN0RCxDQUFDO1FBQ0osQ0FBQztRQUNE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IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyB0eXBlIElHcmFudGFibGUsIHR5cGUgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgU1FTUXVldWUsXG4gIHR5cGUgU1FTUXVldWVQcm9wc1xufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9tZXNzYWdpbmcvc3FzXCI7XG5pbXBvcnQge1xuICBTTlNUb3BpYyxcbiAgdHlwZSBTTlNUb3BpY1Byb3BzXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL21lc3NhZ2luZy9zbnNcIjtcbmltcG9ydCB7XG4gIEV2ZW50QnJpZGdlQnVzLFxuICB0eXBlIEV2ZW50QnJpZGdlQnVzUHJvcHNcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbWVzc2FnaW5nL2V2ZW50YnJpZGdlXCI7XG5pbXBvcnQgeyBGamFsbExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIElRdWV1ZU1lc3NhZ2luZyxcbiAgdHlwZSBJVG9waWNNZXNzYWdpbmcsXG4gIHR5cGUgSUV2ZW50QnVzTWVzc2FnaW5nLFxuICB0eXBlIEFueU1lc3NhZ2luZ1xufSBmcm9tIFwiLi9pbnRlcmZhY2VzL21lc3NhZ2luZy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBJUXVldWVDb25uZWN0b3IgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Nvbm5lY3Rvci5qc1wiO1xuXG4vKipcbiAqIFF1ZXVlIG1lc3NhZ2luZyBwcm9wcyB3aXRoIHR5cGUgZGlzY3JpbWluYXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUXVldWVQcm9wcyB7XG4gIC8qKiBUeXBlIGRpc2NyaW1pbmF0b3IgZm9yIG1lc3NhZ2luZyB0eXBlLiAqL1xuICB0eXBlOiBcInF1ZXVlXCI7XG4gIHF1ZXVlVHlwZT86IFwic3RhbmRhcmRcIiB8IFwiZmlmb1wiO1xuICB2aXNpYmlsaXR5VGltZW91dD86IG51bWJlcjtcbiAgbWVzc2FnZVJldGVudGlvblBlcmlvZD86IG51bWJlcjtcbiAgcmVjZWl2ZU1lc3NhZ2VXYWl0VGltZT86IG51bWJlcjtcbiAgbWF4TWVzc2FnZVNpemU/OiBudW1iZXI7XG4gIGRlbGl2ZXJ5RGVsYXk/OiBudW1iZXI7XG4gIGRlYWRMZXR0ZXJRdWV1ZT86IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIG1heFJlY2VpdmVDb3VudD86IG51bWJlcjtcbiAgfTtcbiAgZW5jcnlwdGlvbj86IFwiU1NFX1NRU1wiIHwgXCJTU0VfS01TXCIgfCBcIk5PTkVcIjtcbiAga21zS2V5QXJuPzogc3RyaW5nO1xuICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uPzogYm9vbGVhbjtcbiAgZmlmb1Rocm91Z2hwdXRMaW1pdD86IFwicGVyUXVldWVcIiB8IFwicGVyTWVzc2FnZUdyb3VwSWRcIjtcbiAgZGVkdXBsaWNhdGlvblNjb3BlPzogXCJxdWV1ZVwiIHwgXCJtZXNzYWdlR3JvdXBcIjtcbiAgcmVtb3ZhbFBvbGljeT86IFwiREVTVFJPWVwiIHwgXCJSRVRBSU5cIjtcbn1cblxuLyoqXG4gKiBUb3BpYyBtZXNzYWdpbmcgcHJvcHMgd2l0aCB0eXBlIGRpc2NyaW1pbmF0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRvcGljUHJvcHMge1xuICAvKiogVHlwZSBkaXNjcmltaW5hdG9yIGZvciBtZXNzYWdpbmcgdHlwZS4gKi9cbiAgdHlwZTogXCJ0b3BpY1wiO1xuICB0b3BpY05hbWU/OiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBmaWZvPzogYm9vbGVhbjtcbiAgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbj86IGJvb2xlYW47XG4gIHJlbW92YWxQb2xpY3k/OiBcIkRFU1RST1lcIiB8IFwiUkVUQUlOXCI7XG59XG5cbi8qKlxuICogRXZlbnRCdXMgbWVzc2FnaW5nIHByb3BzIHdpdGggdHlwZSBkaXNjcmltaW5hdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudEJ1c1Byb3BzIHtcbiAgLyoqIFR5cGUgZGlzY3JpbWluYXRvciBmb3IgbWVzc2FnaW5nIHR5cGUuICovXG4gIHR5cGU6IFwiZXZlbnRCdXNcIjtcbiAgZXZlbnRCdXNOYW1lPzogc3RyaW5nO1xuICByZW1vdmFsUG9saWN5PzogXCJERVNUUk9ZXCIgfCBcIlJFVEFJTlwiO1xufVxuXG4vKipcbiAqIFVuaW9uIHR5cGUgZm9yIGFsbCBtZXNzYWdpbmcgcHJvcHMuXG4gKi9cbmV4cG9ydCB0eXBlIElNZXNzYWdpbmdQcm9wcyA9IElRdWV1ZVByb3BzIHwgSVRvcGljUHJvcHMgfCBJRXZlbnRCdXNQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgU1FTIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU1FTUHJvcHMocHJvcHM6IElRdWV1ZVByb3BzKTogdm9pZCB7XG4gIC8vIFZhbGlkYXRlIHZpc2liaWxpdHkgdGltZW91dCByYW5nZSAoMC00MzIwMCBzZWNvbmRzID0gMTIgaG91cnMpXG4gIGlmIChcbiAgICBwcm9wcy52aXNpYmlsaXR5VGltZW91dCAhPT0gdW5kZWZpbmVkICYmXG4gICAgKHByb3BzLnZpc2liaWxpdHlUaW1lb3V0IDwgMCB8fCBwcm9wcy52aXNpYmlsaXR5VGltZW91dCA+IDQzMjAwKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcInZpc2liaWxpdHlUaW1lb3V0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA0MzIwMCBzZWNvbmRzICgxMiBob3VycylcIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBtZXNzYWdlIHJldGVudGlvbiBwZXJpb2QgKDYwLTEyMDk2MDAgc2Vjb25kcyA9IDEgbWludXRlIHRvIDE0IGRheXMpXG4gIGlmIChcbiAgICBwcm9wcy5tZXNzYWdlUmV0ZW50aW9uUGVyaW9kICE9PSB1bmRlZmluZWQgJiZcbiAgICAocHJvcHMubWVzc2FnZVJldGVudGlvblBlcmlvZCA8IDYwIHx8XG4gICAgICBwcm9wcy5tZXNzYWdlUmV0ZW50aW9uUGVyaW9kID4gMTIwOTYwMClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJtZXNzYWdlUmV0ZW50aW9uUGVyaW9kIG11c3QgYmUgYmV0d2VlbiA2MCBhbmQgMTIwOTYwMCBzZWNvbmRzICgxIG1pbnV0ZSB0byAxNCBkYXlzKVwiXG4gICAgKTtcbiAgfVxuXG4gIC8vIFdhcm4gYWJvdXQgRklGTy1zcGVjaWZpYyBvcHRpb25zIG9uIHN0YW5kYXJkIHF1ZXVlc1xuICBpZiAocHJvcHMucXVldWVUeXBlICE9PSBcImZpZm9cIikge1xuICAgIGlmIChwcm9wcy5jb250ZW50QmFzZWREZWR1cGxpY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIFwiJ2NvbnRlbnRCYXNlZERlZHVwbGljYXRpb24nIGlzIG9ubHkgYXBwbGljYWJsZSB0byBGSUZPIHF1ZXVlcy4gXCIgK1xuICAgICAgICAgIFwiVGhpcyBzZXR0aW5nIHdpbGwgYmUgaWdub3JlZCBmb3Igc3RhbmRhcmQgcXVldWVzLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZmlmb1Rocm91Z2hwdXRMaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgICBcIidmaWZvVGhyb3VnaHB1dExpbWl0JyBpcyBvbmx5IGFwcGxpY2FibGUgdG8gRklGTyBxdWV1ZXMuIFwiICtcbiAgICAgICAgICBcIlRoaXMgc2V0dGluZyB3aWxsIGJlIGlnbm9yZWQgZm9yIHN0YW5kYXJkIHF1ZXVlcy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmRlZHVwbGljYXRpb25TY29wZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgICBcIidkZWR1cGxpY2F0aW9uU2NvcGUnIGlzIG9ubHkgYXBwbGljYWJsZSB0byBGSUZPIHF1ZXVlcy4gXCIgK1xuICAgICAgICAgIFwiVGhpcyBzZXR0aW5nIHdpbGwgYmUgaWdub3JlZCBmb3Igc3RhbmRhcmQgcXVldWVzLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIEtNUyBlbmNyeXB0aW9uXG4gIGlmIChwcm9wcy5rbXNLZXlBcm4gJiYgcHJvcHMuZW5jcnlwdGlvbiAhPT0gXCJTU0VfS01TXCIpIHtcbiAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgXCIna21zS2V5QXJuJyBwcm92aWRlZCBidXQgJ2VuY3J5cHRpb24nIGlzIG5vdCBTU0VfS01TLiBcIiArXG4gICAgICAgIFwiVGhlIEtNUyBrZXkgd2lsbCBiZSBpZ25vcmVkLlwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBTTlMgVG9waWMgcHJvcHMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlVG9waWNQcm9wcyhwcm9wczogSVRvcGljUHJvcHMpOiB2b2lkIHtcbiAgLy8gV2FybiBhYm91dCBGSUZPLXNwZWNpZmljIG9wdGlvbnMgb24gc3RhbmRhcmQgdG9waWNzXG4gIGlmICghcHJvcHMuZmlmbyAmJiBwcm9wcy5jb250ZW50QmFzZWREZWR1cGxpY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgXCInY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbicgaXMgb25seSBhcHBsaWNhYmxlIHRvIEZJRk8gdG9waWNzLiBcIiArXG4gICAgICAgIFwiVGhpcyBzZXR0aW5nIHdpbGwgYmUgaWdub3JlZCBmb3Igc3RhbmRhcmQgdG9waWNzLlwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFNRUyBxdWV1ZSBtZXNzYWdpbmcgd3JhcHBlciBpbXBsZW1lbnRpbmcgSVF1ZXVlTWVzc2FnaW5nIGludGVyZmFjZS5cbiAqIFByb3ZpZGVzIGdyYW50IG1ldGhvZHMgYW5kIEZqYWxsIHBhdHRlcm5zIGZvciBxdWV1ZSBtZXNzYWdpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWV1ZU1lc3NhZ2luZ1xuICBleHRlbmRzIFNRU1F1ZXVlXG4gIGltcGxlbWVudHMgSVF1ZXVlTWVzc2FnaW5nLCBJUXVldWVDb25uZWN0b3JcbntcbiAgLyoqIFR5cGUgZGlzY3JpbWluYXRvciBmb3IgcnVudGltZSB0eXBlIG5hcnJvd2luZy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2luZ1R5cGUgPSBcInF1ZXVlXCIgYXMgY29uc3Q7XG5cbiAgLyoqIFRoZSBjb25uZWN0b3IgdHlwZSBmb3IgdW5pZmllZCBjb25uZWN0aW9uIHByb2Nlc3NpbmcuICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0b3JUeXBlID0gXCJxdWV1ZVwiIGFzIGNvbnN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJUXVldWVQcm9wcykge1xuICAgIGNvbnN0IHF1ZXVlUHJvcHM6IFNRU1F1ZXVlUHJvcHMgPSB7XG4gICAgICBxdWV1ZVR5cGU6IHByb3BzLnF1ZXVlVHlwZSxcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBwcm9wcy52aXNpYmlsaXR5VGltZW91dCxcbiAgICAgIG1lc3NhZ2VSZXRlbnRpb25QZXJpb2Q6IHByb3BzLm1lc3NhZ2VSZXRlbnRpb25QZXJpb2QsXG4gICAgICByZWNlaXZlTWVzc2FnZVdhaXRUaW1lOiBwcm9wcy5yZWNlaXZlTWVzc2FnZVdhaXRUaW1lLFxuICAgICAgbWF4TWVzc2FnZVNpemU6IHByb3BzLm1heE1lc3NhZ2VTaXplLFxuICAgICAgZGVsaXZlcnlEZWxheTogcHJvcHMuZGVsaXZlcnlEZWxheSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZTogcHJvcHMuZGVhZExldHRlclF1ZXVlLFxuICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgIGttc0tleUFybjogcHJvcHMua21zS2V5QXJuLFxuICAgICAgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbjogcHJvcHMuY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbixcbiAgICAgIGZpZm9UaHJvdWdocHV0TGltaXQ6IHByb3BzLmZpZm9UaHJvdWdocHV0TGltaXQsXG4gICAgICBkZWR1cGxpY2F0aW9uU2NvcGU6IHByb3BzLmRlZHVwbGljYXRpb25TY29wZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3lcbiAgICB9O1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcXVldWVQcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgc2VuZCBtZXNzYWdlIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKiBJbXBsZW1lbnRzIElRdWV1ZU1lc3NhZ2luZy5ncmFudFNlbmRNZXNzYWdlcy5cbiAgICovXG4gIHB1YmxpYyBncmFudFNlbmRNZXNzYWdlcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXVlKCkuZ3JhbnRTZW5kTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgY29uc3VtZSAocmVjZWl2ZSBhbmQgZGVsZXRlKSBtZXNzYWdlIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKiBJbXBsZW1lbnRzIElRdWV1ZU1lc3NhZ2luZy5ncmFudENvbnN1bWVNZXNzYWdlcy5cbiAgICovXG4gIHB1YmxpYyBncmFudENvbnN1bWVNZXNzYWdlcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXVlKCkuZ3JhbnRDb25zdW1lTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcHVyZ2UgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqIEltcGxlbWVudHMgSVF1ZXVlTWVzc2FnaW5nLmdyYW50UHVyZ2UuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQdXJnZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXVlKCkuZ3JhbnRQdXJnZShncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBzcGVjaWZpYyBhY3Rpb25zIHRvIHRoZSBncmFudGVlLlxuICAgKiBJbXBsZW1lbnRzIElRdWV1ZU1lc3NhZ2luZy5ncmFudC5cbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBJR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWV1ZSgpLmdyYW50KGdyYW50ZWUsIC4uLmFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGZ1bGwgYWNjZXNzIChzZW5kIGFuZCBjb25zdW1lKSB0byB0aGUgZ3JhbnRlZS5cbiAgICogSW1wbGVtZW50cyBJUXVldWVNZXNzYWdpbmcuZ3JhbnRGdWxsIGFuZCBJUXVldWVDb25uZWN0b3IuZ3JhbnRGdWxsLlxuICAgKi9cbiAgcHVibGljIGdyYW50RnVsbChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHRoaXMuZ3JhbnRTZW5kTWVzc2FnZXMoZ3JhbnRlZSk7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnRDb25zdW1lTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTTlMgdG9waWMgbWVzc2FnaW5nIHdyYXBwZXIgaW1wbGVtZW50aW5nIElUb3BpY01lc3NhZ2luZyBpbnRlcmZhY2UuXG4gKiBQcm92aWRlcyBncmFudCBtZXRob2RzIGFuZCBGamFsbCBwYXR0ZXJucyBmb3IgdG9waWMgbWVzc2FnaW5nLlxuICovXG5leHBvcnQgY2xhc3MgVG9waWNNZXNzYWdpbmcgZXh0ZW5kcyBTTlNUb3BpYyBpbXBsZW1lbnRzIElUb3BpY01lc3NhZ2luZyB7XG4gIC8qKiBUeXBlIGRpc2NyaW1pbmF0b3IgZm9yIHJ1bnRpbWUgdHlwZSBuYXJyb3dpbmcuICovXG4gIHB1YmxpYyByZWFkb25seSBtZXNzYWdpbmdUeXBlID0gXCJ0b3BpY1wiIGFzIGNvbnN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJVG9waWNQcm9wcykge1xuICAgIGNvbnN0IHRvcGljUHJvcHM6IFNOU1RvcGljUHJvcHMgPSB7XG4gICAgICB0b3BpY05hbWU6IHByb3BzLnRvcGljTmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBwcm9wcy5kaXNwbGF5TmFtZSxcbiAgICAgIGZpZm86IHByb3BzLmZpZm8sXG4gICAgICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uOiBwcm9wcy5jb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeVxuICAgIH07XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB0b3BpY1Byb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwdWJsaXNoIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKiBJbXBsZW1lbnRzIElUb3BpY01lc3NhZ2luZy5ncmFudFB1Ymxpc2guXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQdWJsaXNoKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9waWMoKS5ncmFudFB1Ymxpc2goZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgc3Vic2NyaWJlIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKiBJbXBsZW1lbnRzIElUb3BpY01lc3NhZ2luZy5ncmFudFN1YnNjcmliZS5cbiAgICovXG4gIHB1YmxpYyBncmFudFN1YnNjcmliZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdldFRvcGljKCkuZ3JhbnRTdWJzY3JpYmUoZ3JhbnRlZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmVudEJyaWRnZSBldmVudCBidXMgbWVzc2FnaW5nIHdyYXBwZXIgaW1wbGVtZW50aW5nIElFdmVudEJ1c01lc3NhZ2luZyBpbnRlcmZhY2UuXG4gKiBQcm92aWRlcyBncmFudCBtZXRob2RzIGFuZCBGamFsbCBwYXR0ZXJucyBmb3IgZXZlbnQtZHJpdmVuIG1lc3NhZ2luZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50QnVzTWVzc2FnaW5nXG4gIGV4dGVuZHMgRXZlbnRCcmlkZ2VCdXNcbiAgaW1wbGVtZW50cyBJRXZlbnRCdXNNZXNzYWdpbmdcbntcbiAgLyoqIFR5cGUgZGlzY3JpbWluYXRvciBmb3IgcnVudGltZSB0eXBlIG5hcnJvd2luZy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2luZ1R5cGUgPSBcImV2ZW50QnVzXCIgYXMgY29uc3Q7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElFdmVudEJ1c1Byb3BzKSB7XG4gICAgY29uc3QgZXZlbnRCdXNQcm9wczogRXZlbnRCcmlkZ2VCdXNQcm9wcyA9IHtcbiAgICAgIGV2ZW50QnVzTmFtZTogcHJvcHMuZXZlbnRCdXNOYW1lLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeVxuICAgIH07XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBldmVudEJ1c1Byb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwdXQgZXZlbnRzIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKiBJbXBsZW1lbnRzIElFdmVudEJ1c01lc3NhZ2luZy5ncmFudFB1dEV2ZW50c1RvLlxuICAgKi9cbiAgcHVibGljIGdyYW50UHV0RXZlbnRzVG8oZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5nZXRFdmVudEJ1cygpLmdyYW50UHV0RXZlbnRzVG8oZ3JhbnRlZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGYWN0b3J5IGZvciBjcmVhdGluZyBtZXNzYWdpbmcgcmVzb3VyY2VzLlxuICpcbiAqIFN1cHBvcnRzOlxuICogLSBRdWV1ZSAoU1FTKVxuICogLSBUb3BpYyAoU05TKVxuICogLSBFdmVudEJ1cyAoRXZlbnRCcmlkZ2UpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0YW5kYXJkIHF1ZXVlIHdpdGggRExRXG4gKiBjb25zdCBub3RpZmljYXRpb25zID0gYXBwLmFkZE1lc3NhZ2luZyhNZXNzYWdpbmdGYWN0b3J5LmJ1aWxkKFwiTm90aWZpY2F0aW9uc1wiLCB7XG4gKiAgIHR5cGU6IFwicXVldWVcIixcbiAqICAgcXVldWVUeXBlOiBcInN0YW5kYXJkXCIsXG4gKiAgIGRlYWRMZXR0ZXJRdWV1ZTogeyBlbmFibGVkOiB0cnVlLCBtYXhSZWNlaXZlQ291bnQ6IDMgfVxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTTlMgVG9waWMgZm9yIHB1Yi9zdWJcbiAqIGNvbnN0IGFsZXJ0cyA9IGFwcC5hZGRNZXNzYWdpbmcoTWVzc2FnaW5nRmFjdG9yeS5idWlsZChcIkFsZXJ0c1wiLCB7XG4gKiAgIHR5cGU6IFwidG9waWNcIixcbiAqICAgZGlzcGxheU5hbWU6IFwiQWxlcnQgTm90aWZpY2F0aW9uc1wiXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEV2ZW50QnJpZGdlIGZvciBldmVudC1kcml2ZW4gYXJjaGl0ZWN0dXJlXG4gKiBjb25zdCBldmVudHMgPSBhcHAuYWRkTWVzc2FnaW5nKE1lc3NhZ2luZ0ZhY3RvcnkuYnVpbGQoXCJEb21haW5FdmVudHNcIiwge1xuICogICB0eXBlOiBcImV2ZW50QnVzXCJcbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR3JhbnQgcGVybWlzc2lvbnNcbiAqIG5vdGlmaWNhdGlvbnMuZ3JhbnRTZW5kTWVzc2FnZXMocHJvZHVjZXJMYW1iZGEpO1xuICogYWxlcnRzLmdyYW50UHVibGlzaChhcGlTZXJ2aWNlKTtcbiAqIGV2ZW50cy5ncmFudFB1dEV2ZW50c1RvKG9yZGVyU2VydmljZSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBNZXNzYWdpbmdGYWN0b3J5IHtcbiAgLyoqXG4gICAqIEJ1aWxkIGEgcXVldWUgbWVzc2FnaW5nIGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqL1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSVF1ZXVlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBRdWV1ZU1lc3NhZ2luZztcblxuICAvKipcbiAgICogQnVpbGQgYSB0b3BpYyBtZXNzYWdpbmcgZmFjdG9yeSBmdW5jdGlvbi5cbiAgICovXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJVG9waWNQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFRvcGljTWVzc2FnaW5nO1xuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiBldmVudCBidXMgbWVzc2FnaW5nIGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqL1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUV2ZW50QnVzUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBFdmVudEJ1c01lc3NhZ2luZztcblxuICAvKipcbiAgICogQnVpbGQgYSBtZXNzYWdpbmcgZmFjdG9yeSBmdW5jdGlvbiAoZ2VuZXJpYykuXG4gICAqL1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSU1lc3NhZ2luZ1Byb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQW55TWVzc2FnaW5nO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnVpbGQgbWV0aG9kLlxuICAgKi9cbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElNZXNzYWdpbmdQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEFueU1lc3NhZ2luZyB7XG4gICAgcmV0dXJuIChfYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBBbnlNZXNzYWdpbmcgPT4ge1xuICAgICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJxdWV1ZVwiOlxuICAgICAgICAgIHZhbGlkYXRlU1FTUHJvcHMocHJvcHMpO1xuICAgICAgICAgIHJldHVybiBuZXcgUXVldWVNZXNzYWdpbmcoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgICAgIGNhc2UgXCJ0b3BpY1wiOlxuICAgICAgICAgIHZhbGlkYXRlVG9waWNQcm9wcyhwcm9wcyk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUb3BpY01lc3NhZ2luZyhzY29wZSwgaWQsIHByb3BzKTtcbiAgICAgICAgY2FzZSBcImV2ZW50QnVzXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBFdmVudEJ1c01lc3NhZ2luZyhzY29wZSwgaWQsIHByb3BzKTtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHByb3BzO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBVbnN1cHBvcnRlZCBtZXNzYWdpbmcgdHlwZTogJHsoX2V4aGF1c3RpdmUgYXMgSU1lc3NhZ2luZ1Byb3BzKS50eXBlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyBSZS1leHBvcnQgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IFNRU1F1ZXVlUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9tZXNzYWdpbmcvc3FzXCI7XG5leHBvcnQgdHlwZSB7IFNOU1RvcGljUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9tZXNzYWdpbmcvc25zXCI7XG5leHBvcnQgdHlwZSB7IEV2ZW50QnJpZGdlQnVzUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9tZXNzYWdpbmcvZXZlbnRicmlkZ2VcIjtcblxuLy8gUmUtZXhwb3J0IGludGVyZmFjZSB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBJUXVldWVNZXNzYWdpbmcsXG4gIElUb3BpY01lc3NhZ2luZyxcbiAgSUV2ZW50QnVzTWVzc2FnaW5nLFxuICBBbnlNZXNzYWdpbmcsXG4gIElRdWV1ZSxcbiAgSVRvcGljLFxuICBJRXZlbnRCdXNcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tZXNzYWdpbmcuanNcIjtcblxuLy8gUmUtZXhwb3J0IHR5cGUgZ3VhcmRzXG5leHBvcnQge1xuICBpc1F1ZXVlTWVzc2FnaW5nLFxuICBpc1RvcGljTWVzc2FnaW5nLFxuICBpc0V2ZW50QnVzTWVzc2FnaW5nXG59IGZyb20gXCIuL2ludGVyZmFjZXMvbWVzc2FnaW5nLmpzXCI7XG4iXX0=
|
|
@@ -4,16 +4,17 @@ exports.Network = exports.NetworkFactory = void 0;
|
|
|
4
4
|
const constructs_1 = require("constructs");
|
|
5
5
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
6
|
const vpc_1 = require("../../resources/aws/networking/vpc");
|
|
7
|
+
const validationLogger_js_1 = require("../../utils/validationLogger.js");
|
|
7
8
|
function validateNetworkProps(props) {
|
|
8
9
|
if (props.maxAzs !== undefined && (props.maxAzs < 1 || props.maxAzs > 3)) {
|
|
9
|
-
|
|
10
|
+
validationLogger_js_1.FjallLogger.warn(`'maxAzs' should be between 1 and 3. Got: ${props.maxAzs}.`);
|
|
10
11
|
}
|
|
11
12
|
if (typeof props.natGateways === "object" &&
|
|
12
13
|
props.natGateways !== null &&
|
|
13
14
|
props.natGateways.count !== undefined) {
|
|
14
15
|
const maxAzs = props.maxAzs ?? 3;
|
|
15
16
|
if (props.natGateways.count > maxAzs) {
|
|
16
|
-
|
|
17
|
+
validationLogger_js_1.FjallLogger.warn(`'natGateways.count' (${props.natGateways.count}) exceeds maxAzs (${maxAzs}).`);
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
if (props.transitGateway && !props.transitGateway.id) {
|
|
@@ -78,7 +79,6 @@ class Network extends constructs_1.Construct {
|
|
|
78
79
|
resolveEndpointsConfig(config) {
|
|
79
80
|
if (config === false)
|
|
80
81
|
return false;
|
|
81
|
-
// Default: gateway endpoints enabled
|
|
82
82
|
if (config === undefined) {
|
|
83
83
|
return { gateway: { s3: true, dynamodb: true } };
|
|
84
84
|
}
|
|
@@ -97,4 +97,4 @@ class Network extends constructs_1.Construct {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
exports.Network = Network;
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQWlDO0FBSWpDLDREQUF3RTtBQXVFeEUsU0FBUyxvQkFBb0IsQ0FBQyxLQUFvQjtJQUNoRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNkRBQTZELEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FDN0UsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUNFLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxRQUFRO1FBQ3JDLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSTtRQUMxQixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQ3JDLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQ1YseUNBQXlDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxxQkFBcUIsTUFBTSxJQUFJLENBQ2hHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFB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SUFBSSxNQUFNLEtBQUssS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRW5DLHFDQUFxQztRQUNyQyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNuRCxDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFDTCxNQUFNLENBQUMsT0FBTyxLQUFLLEtBQUs7Z0JBQ3RCLENBQUMsQ0FBQyxLQUFLO2dCQUNQLENBQUMsQ0FBQztvQkFDRSxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSTtvQkFDOUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUk7aUJBQzNDO1lBQ1AsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1NBQ2pFLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUF0R0QsMEJBc0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEZuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHsgVnBjLCB0eXBlIFZwY1Byb3BzIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOYXRDb25maWcge1xuICBjb3VudD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93TG9nQ29uZmlnIHtcbiAgZGVzdGluYXRpb24/OiBcImNsb3Vkd2F0Y2hcIiB8IFwiczNcIjtcbiAgcmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgdHJhZmZpY1R5cGU/OiBcIkFMTFwiIHwgXCJBQ0NFUFRcIiB8IFwiUkVKRUNUXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheUVuZHBvaW50c0NvbmZpZyB7XG4gIHMzPzogYm9vbGVhbjtcbiAgZHluYW1vZGI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZUVuZHBvaW50c0NvbmZpZyB7XG4gIGVjcj86IGJvb2xlYW47XG4gIHNlY3JldHNNYW5hZ2VyPzogYm9vbGVhbjtcbiAga21zPzogYm9vbGVhbjtcbiAgY2xvdWR3YXRjaExvZ3M/OiBib29sZWFuO1xuICBzc20/OiBib29sZWFuO1xuICBzdHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZwY0VuZHBvaW50c0NvbmZpZyB7XG4gIGdhdGV3YXk/OiBHYXRld2F5RW5kcG9pbnRzQ29uZmlnIHwgZmFsc2U7XG4gIGludGVyZmFjZT86IEludGVyZmFjZUVuZHBvaW50c0NvbmZpZyB8IGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldENvbmZpZyB7XG4gIGNpZHJNYXNrPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldHNDb25maWcge1xuICBwdWJsaWM/OiBTdWJuZXRDb25maWc7XG4gIHByaXZhdGU/OiBTdWJuZXRDb25maWc7XG4gIGlzb2xhdGVkPzogU3VibmV0Q29uZmlnIHwgZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNpdEdhdGV3YXlDb25maWcge1xuICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5ldHdvcmsgKFZQQykgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTWluaW1hbCBjb3N0IFZQQyAobm8gTkFULCBnYXRld2F5IGVuZHBvaW50cyBvbmx5KVxuICogeyBuYXRHYXRld2F5czogZmFsc2UgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQcm9kdWN0aW9uIFZQQyB3aXRoIDEgTkFUIGdhdGV3YXlcbiAqIHsgbmF0R2F0ZXdheXM6IHsgY291bnQ6IDEgfSwgZmxvd0xvZ3M6IHt9IH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSGlnaC1hdmFpbGFiaWxpdHkgVlBDIHdpdGggaW50ZXJmYWNlIGVuZHBvaW50c1xuICogeyBtYXhBenM6IDMsIG5hdEdhdGV3YXlzOiB7IGNvdW50OiAzIH0sIHZwY0VuZHBvaW50czogeyBpbnRlcmZhY2U6IHsgZWNyOiB0cnVlIH0gfSB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU5ldHdvcmtQcm9wcyB7XG4gIHZwY05hbWU/OiBzdHJpbmc7XG4gIG1heEF6cz86IG51bWJlcjtcbiAgY2lkck1hc2s/OiBudW1iZXI7XG4gIG5hdEdhdGV3YXlzPzogTmF0Q29uZmlnIHwgZmFsc2U7XG4gIGZsb3dMb2dzPzogRmxvd0xvZ0NvbmZpZyB8IGZhbHNlO1xuICB2cGNFbmRwb2ludHM/OiBWcGNFbmRwb2ludHNDb25maWcgfCBmYWxzZTtcbiAgc3VibmV0cz86IFN1Ym5ldHNDb25maWc7XG4gIHRyYW5zaXRHYXRld2F5PzogVHJhbnNpdEdhdGV3YXlDb25maWc7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTmV0d29ya1Byb3BzKHByb3BzOiBJTmV0d29ya1Byb3BzKTogdm9pZCB7XG4gIGlmIChwcm9wcy5tYXhBenMgIT09IHVuZGVmaW5lZCAmJiAocHJvcHMubWF4QXpzIDwgMSB8fCBwcm9wcy5tYXhBenMgPiAzKSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdtYXhBenMnIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMuIEdvdDogJHtwcm9wcy5tYXhBenN9LmBcbiAgICApO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBwcm9wcy5uYXRHYXRld2F5cyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHByb3BzLm5hdEdhdGV3YXlzICE9PSBudWxsICYmXG4gICAgcHJvcHMubmF0R2F0ZXdheXMuY291bnQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBjb25zdCBtYXhBenMgPSBwcm9wcy5tYXhBenMgPz8gMztcbiAgICBpZiAocHJvcHMubmF0R2F0ZXdheXMuY291bnQgPiBtYXhBenMpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ25hdEdhdGV3YXlzLmNvdW50JyAoJHtwcm9wcy5uYXRHYXRld2F5cy5jb3VudH0pIGV4Y2VlZHMgbWF4QXpzICgke21heEF6c30pLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLnRyYW5zaXRHYXRld2F5ICYmICFwcm9wcy50cmFuc2l0R2F0ZXdheS5pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRyYW5zaXQgR2F0ZXdheSBjb25maWd1cmF0aW9uIHJlcXVpcmVzICdpZCcuXCIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOZXR3b3JrRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSU5ldHdvcmtQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIHZhbGlkYXRlTmV0d29ya1Byb3BzKHByb3BzKTtcbiAgICAgIHJldHVybiBuZXcgTmV0d29yayhzY29wZSwgaWQsIHByb3BzLCBhcHApO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmsgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjOiBWcGM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElOZXR3b3JrUHJvcHMsIGFwcDogQXBwKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnZwYyA9IHRoaXMuY3JlYXRlVnBjKGlkLCBwcm9wcywgYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVnBjKGlkOiBzdHJpbmcsIHByb3BzOiBJTmV0d29ya1Byb3BzLCBhcHA6IEFwcCk6IFZwYyB7XG4gICAgY29uc3QgYWNjb3VudElkID1cbiAgICAgIGFwcC5ub2RlLnRyeUdldENvbnRleHQoXCJhY2NvdW50SWRcIikgfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVDtcbiAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG4gICAgY29uc3QgaXNNYW5hZ2VkQWNjb3VudCA9XG4gICAgICBhcHAubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlZEFjY291bnRcIikgPT09IFwidHJ1ZVwiO1xuXG4gICAgbGV0IGlwdjRJcGFtUG9vbElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGlzTWFuYWdlZEFjY291bnQgJiYgYWNjb3VudElkICYmIHJlZ2lvbikge1xuICAgICAgY29uc3QgcmVnaW9uU3VmZml4ID0gcmVnaW9uLnJlcGxhY2UoLy0vZywgXCJcIik7XG4gICAgICBpcHY0SXBhbVBvb2xJZCA9IEZuLmltcG9ydFZhbHVlKGBJcGFtUG9vbElkJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjUHJvcHM6IFZwY1Byb3BzID0ge1xuICAgICAgdnBjTmFtZTogcHJvcHMudnBjTmFtZSxcbiAgICAgIGFjY291bnRJZCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGlwdjRJcGFtUG9vbElkLFxuICAgICAgbWF4QXpzOiBwcm9wcy5tYXhBenMsXG4gICAgICB2cGNDaWRyTWFzazogcHJvcHMuY2lkck1hc2ssXG4gICAgICBzdWJuZXRDaWRyTWFzazogcHJvcHMuc3VibmV0cz8ucHJpdmF0ZT8uY2lkck1hc2ssXG4gICAgICBuYXRHYXRld2F5Q29uZmlnOiB0aGlzLnJlc29sdmVOYXRDb25maWcocHJvcHMubmF0R2F0ZXdheXMpLFxuICAgICAgZmxvd0xvZ0NvbmZpZzogdGhpcy5yZXNvbHZlRmxvd0xvZ0NvbmZpZyhwcm9wcy5mbG93TG9ncyksXG4gICAgICBlbmRwb2ludHNDb25maWc6IHRoaXMucmVzb2x2ZUVuZHBvaW50c0NvbmZpZyhwcm9wcy52cGNFbmRwb2ludHMpXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgVnBjKHRoaXMsIGlkLCB2cGNQcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVOYXRDb25maWcoXG4gICAgY29uZmlnOiBOYXRDb25maWcgfCBmYWxzZSB8IHVuZGVmaW5lZFxuICApOiB7IGNvdW50PzogbnVtYmVyIH0gfCBmYWxzZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHsgY291bnQ6IGNvbmZpZy5jb3VudCB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRmxvd0xvZ0NvbmZpZyhjb25maWc6IEZsb3dMb2dDb25maWcgfCBmYWxzZSB8IHVuZGVmaW5lZCk6XG4gICAgfCB7XG4gICAgICAgIGRlc3RpbmF0aW9uPzogXCJjbG91ZHdhdGNoXCIgfCBcInMzXCI7XG4gICAgICAgIHJldGVudGlvbkRheXM/OiBudW1iZXI7XG4gICAgICAgIHRyYWZmaWNUeXBlPzogXCJBTExcIiB8IFwiQUNDRVBUXCIgfCBcIlJFSkVDVFwiO1xuICAgICAgfVxuICAgIHwgZmFsc2VcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25maWcuZGVzdGluYXRpb24sXG4gICAgICByZXRlbnRpb25EYXlzOiBjb25maWcucmV0ZW50aW9uRGF5cyxcbiAgICAgIHRyYWZmaWNUeXBlOiBjb25maWcudHJhZmZpY1R5cGVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW5kcG9pbnRzQ29uZmlnKFxuICAgIGNvbmZpZzogVnBjRW5kcG9pbnRzQ29uZmlnIHwgZmFsc2UgfCB1bmRlZmluZWRcbiAgKTpcbiAgICB8IHtcbiAgICAgICAgZ2F0ZXdheT86IHsgczM/OiBib29sZWFuOyBkeW5hbW9kYj86IGJvb2xlYW4gfSB8IGZhbHNlO1xuICAgICAgICBpbnRlcmZhY2U/OlxuICAgICAgICAgIHwge1xuICAgICAgICAgICAgICBlY3I/OiBib29sZWFuO1xuICAgICAgICAgICAgICBzZWNyZXRzTWFuYWdlcj86IGJvb2xlYW47XG4gICAgICAgICAgICAgIGttcz86IGJvb2xlYW47XG4gICAgICAgICAgICAgIGNsb3Vkd2F0Y2hMb2dzPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgc3NtPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgc3RzPzogYm9vbGVhbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB8IGZhbHNlO1xuICAgICAgfVxuICAgIHwgZmFsc2VcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbmZpZyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIERlZmF1bHQ6IGdhdGV3YXkgZW5kcG9pbnRzIGVuYWJsZWRcbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7IGdhdGV3YXk6IHsgczM6IHRydWUsIGR5bmFtb2RiOiB0cnVlIH0gfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2F0ZXdheTpcbiAgICAgICAgY29uZmlnLmdhdGV3YXkgPT09IGZhbHNlXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBzMzogY29uZmlnLmdhdGV3YXk/LnMzID8/IHRydWUsXG4gICAgICAgICAgICAgIGR5bmFtb2RiOiBjb25maWcuZ2F0ZXdheT8uZHluYW1vZGIgPz8gdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgIGludGVyZmFjZTogY29uZmlnLmludGVyZmFjZSA9PT0gZmFsc2UgPyBmYWxzZSA6IGNvbmZpZy5pbnRlcmZhY2VcbiAgICB9O1xuICB9XG5cbiAgZ2V0VnBjKCk6IElWcGMge1xuICAgIHJldHVybiB0aGlzLnZwYztcbiAgfVxufVxuIl19
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQWlDO0FBSWpDLDREQUF3RTtBQUN4RSx5RUFBOEQ7QUF1RTlELFNBQVMsb0JBQW9CLENBQUMsS0FBb0I7SUFDaEQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxpQ0FBVyxDQUFDLElBQUksQ0FDZCw0Q0FBNEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQ0UsT0FBTyxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVE7UUFDckMsS0FBSyxDQUFDLFdBQVcsS0FBSyxJQUFJO1FBQzFCLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFDckMsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDckMsaUNBQVcsQ0FBQyxJQUFJLENBQ2Qsd0JBQXdCLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxxQkFBcUIsTUFBTSxJQUFJLENBQy9FLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxjQUFjO0lBQ3pCLE1BQU0sQ0FB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QixNQUE4QztRQWlCOUMsSUFBSSxNQUFNLEtBQUssS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRW5DLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUNMLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSztnQkFDdEIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDO29CQUNFLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJO29CQUM5QixRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSTtpQkFDM0M7WUFDUCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVM7U0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7Q0FDRjtBQXJHRCwwQkFxR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRm4gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5pbXBvcnQgeyBWcGMsIHR5cGUgVnBjUHJvcHMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgRmphbGxMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdmFsaWRhdGlvbkxvZ2dlci5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdENvbmZpZyB7XG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dMb2dDb25maWcge1xuICBkZXN0aW5hdGlvbj86IFwiY2xvdWR3YXRjaFwiIHwgXCJzM1wiO1xuICByZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICB0cmFmZmljVHlwZT86IFwiQUxMXCIgfCBcIkFDQ0VQVFwiIHwgXCJSRUpFQ1RcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5RW5kcG9pbnRzQ29uZmlnIHtcbiAgczM/OiBib29sZWFuO1xuICBkeW5hbW9kYj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlRW5kcG9pbnRzQ29uZmlnIHtcbiAgZWNyPzogYm9vbGVhbjtcbiAgc2VjcmV0c01hbmFnZXI/OiBib29sZWFuO1xuICBrbXM/OiBib29sZWFuO1xuICBjbG91ZHdhdGNoTG9ncz86IGJvb2xlYW47XG4gIHNzbT86IGJvb2xlYW47XG4gIHN0cz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBjRW5kcG9pbnRzQ29uZmlnIHtcbiAgZ2F0ZXdheT86IEdhdGV3YXlFbmRwb2ludHNDb25maWcgfCBmYWxzZTtcbiAgaW50ZXJmYWNlPzogSW50ZXJmYWNlRW5kcG9pbnRzQ29uZmlnIHwgZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0Q29uZmlnIHtcbiAgY2lkck1hc2s/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0c0NvbmZpZyB7XG4gIHB1YmxpYz86IFN1Ym5ldENvbmZpZztcbiAgcHJpdmF0ZT86IFN1Ym5ldENvbmZpZztcbiAgaXNvbGF0ZWQ/OiBTdWJuZXRDb25maWcgfCBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2l0R2F0ZXdheUNvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTmV0d29yayAoVlBDKSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNaW5pbWFsIGNvc3QgVlBDIChubyBOQVQsIGdhdGV3YXkgZW5kcG9pbnRzIG9ubHkpXG4gKiB7IG5hdEdhdGV3YXlzOiBmYWxzZSB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFByb2R1Y3Rpb24gVlBDIHdpdGggMSBOQVQgZ2F0ZXdheVxuICogeyBuYXRHYXRld2F5czogeyBjb3VudDogMSB9LCBmbG93TG9nczoge30gfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIaWdoLWF2YWlsYWJpbGl0eSBWUEMgd2l0aCBpbnRlcmZhY2UgZW5kcG9pbnRzXG4gKiB7IG1heEF6czogMywgbmF0R2F0ZXdheXM6IHsgY291bnQ6IDMgfSwgdnBjRW5kcG9pbnRzOiB7IGludGVyZmFjZTogeyBlY3I6IHRydWUgfSB9IH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTmV0d29ya1Byb3BzIHtcbiAgdnBjTmFtZT86IHN0cmluZztcbiAgbWF4QXpzPzogbnVtYmVyO1xuICBjaWRyTWFzaz86IG51bWJlcjtcbiAgbmF0R2F0ZXdheXM/OiBOYXRDb25maWcgfCBmYWxzZTtcbiAgZmxvd0xvZ3M/OiBGbG93TG9nQ29uZmlnIHwgZmFsc2U7XG4gIHZwY0VuZHBvaW50cz86IFZwY0VuZHBvaW50c0NvbmZpZyB8IGZhbHNlO1xuICBzdWJuZXRzPzogU3VibmV0c0NvbmZpZztcbiAgdHJhbnNpdEdhdGV3YXk/OiBUcmFuc2l0R2F0ZXdheUNvbmZpZztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOZXR3b3JrUHJvcHMocHJvcHM6IElOZXR3b3JrUHJvcHMpOiB2b2lkIHtcbiAgaWYgKHByb3BzLm1heEF6cyAhPT0gdW5kZWZpbmVkICYmIChwcm9wcy5tYXhBenMgPCAxIHx8IHByb3BzLm1heEF6cyA+IDMpKSB7XG4gICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgIGAnbWF4QXpzJyBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzLiBHb3Q6ICR7cHJvcHMubWF4QXpzfS5gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgcHJvcHMubmF0R2F0ZXdheXMgPT09IFwib2JqZWN0XCIgJiZcbiAgICBwcm9wcy5uYXRHYXRld2F5cyAhPT0gbnVsbCAmJlxuICAgIHByb3BzLm5hdEdhdGV3YXlzLmNvdW50ICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgY29uc3QgbWF4QXpzID0gcHJvcHMubWF4QXpzID8/IDM7XG4gICAgaWYgKHByb3BzLm5hdEdhdGV3YXlzLmNvdW50ID4gbWF4QXpzKSB7XG4gICAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgICBgJ25hdEdhdGV3YXlzLmNvdW50JyAoJHtwcm9wcy5uYXRHYXRld2F5cy5jb3VudH0pIGV4Y2VlZHMgbWF4QXpzICgke21heEF6c30pLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLnRyYW5zaXRHYXRld2F5ICYmICFwcm9wcy50cmFuc2l0R2F0ZXdheS5pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRyYW5zaXQgR2F0ZXdheSBjb25maWd1cmF0aW9uIHJlcXVpcmVzICdpZCcuXCIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOZXR3b3JrRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSU5ldHdvcmtQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIHZhbGlkYXRlTmV0d29ya1Byb3BzKHByb3BzKTtcbiAgICAgIHJldHVybiBuZXcgTmV0d29yayhzY29wZSwgaWQsIHByb3BzLCBhcHApO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmsgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjOiBWcGM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElOZXR3b3JrUHJvcHMsIGFwcDogQXBwKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnZwYyA9IHRoaXMuY3JlYXRlVnBjKGlkLCBwcm9wcywgYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVnBjKGlkOiBzdHJpbmcsIHByb3BzOiBJTmV0d29ya1Byb3BzLCBhcHA6IEFwcCk6IFZwYyB7XG4gICAgY29uc3QgYWNjb3VudElkID1cbiAgICAgIGFwcC5ub2RlLnRyeUdldENvbnRleHQoXCJhY2NvdW50SWRcIikgfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVDtcbiAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG4gICAgY29uc3QgaXNNYW5hZ2VkQWNjb3VudCA9XG4gICAgICBhcHAubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlZEFjY291bnRcIikgPT09IFwidHJ1ZVwiO1xuXG4gICAgbGV0IGlwdjRJcGFtUG9vbElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGlzTWFuYWdlZEFjY291bnQgJiYgYWNjb3VudElkICYmIHJlZ2lvbikge1xuICAgICAgY29uc3QgcmVnaW9uU3VmZml4ID0gcmVnaW9uLnJlcGxhY2UoLy0vZywgXCJcIik7XG4gICAgICBpcHY0SXBhbVBvb2xJZCA9IEZuLmltcG9ydFZhbHVlKGBJcGFtUG9vbElkJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjUHJvcHM6IFZwY1Byb3BzID0ge1xuICAgICAgdnBjTmFtZTogcHJvcHMudnBjTmFtZSxcbiAgICAgIGFjY291bnRJZCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGlwdjRJcGFtUG9vbElkLFxuICAgICAgbWF4QXpzOiBwcm9wcy5tYXhBenMsXG4gICAgICB2cGNDaWRyTWFzazogcHJvcHMuY2lkck1hc2ssXG4gICAgICBzdWJuZXRDaWRyTWFzazogcHJvcHMuc3VibmV0cz8ucHJpdmF0ZT8uY2lkck1hc2ssXG4gICAgICBuYXRHYXRld2F5Q29uZmlnOiB0aGlzLnJlc29sdmVOYXRDb25maWcocHJvcHMubmF0R2F0ZXdheXMpLFxuICAgICAgZmxvd0xvZ0NvbmZpZzogdGhpcy5yZXNvbHZlRmxvd0xvZ0NvbmZpZyhwcm9wcy5mbG93TG9ncyksXG4gICAgICBlbmRwb2ludHNDb25maWc6IHRoaXMucmVzb2x2ZUVuZHBvaW50c0NvbmZpZyhwcm9wcy52cGNFbmRwb2ludHMpXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgVnBjKHRoaXMsIGlkLCB2cGNQcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVOYXRDb25maWcoXG4gICAgY29uZmlnOiBOYXRDb25maWcgfCBmYWxzZSB8IHVuZGVmaW5lZFxuICApOiB7IGNvdW50PzogbnVtYmVyIH0gfCBmYWxzZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHsgY291bnQ6IGNvbmZpZy5jb3VudCB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRmxvd0xvZ0NvbmZpZyhjb25maWc6IEZsb3dMb2dDb25maWcgfCBmYWxzZSB8IHVuZGVmaW5lZCk6XG4gICAgfCB7XG4gICAgICAgIGRlc3RpbmF0aW9uPzogXCJjbG91ZHdhdGNoXCIgfCBcInMzXCI7XG4gICAgICAgIHJldGVudGlvbkRheXM/OiBudW1iZXI7XG4gICAgICAgIHRyYWZmaWNUeXBlPzogXCJBTExcIiB8IFwiQUNDRVBUXCIgfCBcIlJFSkVDVFwiO1xuICAgICAgfVxuICAgIHwgZmFsc2VcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25maWcuZGVzdGluYXRpb24sXG4gICAgICByZXRlbnRpb25EYXlzOiBjb25maWcucmV0ZW50aW9uRGF5cyxcbiAgICAgIHRyYWZmaWNUeXBlOiBjb25maWcudHJhZmZpY1R5cGVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW5kcG9pbnRzQ29uZmlnKFxuICAgIGNvbmZpZzogVnBjRW5kcG9pbnRzQ29uZmlnIHwgZmFsc2UgfCB1bmRlZmluZWRcbiAgKTpcbiAgICB8IHtcbiAgICAgICAgZ2F0ZXdheT86IHsgczM/OiBib29sZWFuOyBkeW5hbW9kYj86IGJvb2xlYW4gfSB8IGZhbHNlO1xuICAgICAgICBpbnRlcmZhY2U/OlxuICAgICAgICAgIHwge1xuICAgICAgICAgICAgICBlY3I/OiBib29sZWFuO1xuICAgICAgICAgICAgICBzZWNyZXRzTWFuYWdlcj86IGJvb2xlYW47XG4gICAgICAgICAgICAgIGttcz86IGJvb2xlYW47XG4gICAgICAgICAgICAgIGNsb3Vkd2F0Y2hMb2dzPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgc3NtPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgc3RzPzogYm9vbGVhbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB8IGZhbHNlO1xuICAgICAgfVxuICAgIHwgZmFsc2VcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbmZpZyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHsgZ2F0ZXdheTogeyBzMzogdHJ1ZSwgZHluYW1vZGI6IHRydWUgfSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBnYXRld2F5OlxuICAgICAgICBjb25maWcuZ2F0ZXdheSA9PT0gZmFsc2VcbiAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHMzOiBjb25maWcuZ2F0ZXdheT8uczMgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgZHluYW1vZGI6IGNvbmZpZy5nYXRld2F5Py5keW5hbW9kYiA/PyB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgaW50ZXJmYWNlOiBjb25maWcuaW50ZXJmYWNlID09PSBmYWxzZSA/IGZhbHNlIDogY29uZmlnLmludGVyZmFjZVxuICAgIH07XG4gIH1cblxuICBnZXRWcGMoKTogSVZwYyB7XG4gICAgcmV0dXJuIHRoaXMudnBjO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Factory for High-Level Infrastructure Patterns.
|
|
3
|
+
*
|
|
4
|
+
* PatternFactory creates composite infrastructure patterns that encapsulate
|
|
5
|
+
* multiple related resources into a single, cohesive unit. This reduces
|
|
6
|
+
* boilerplate and ensures best practices for common deployment scenarios.
|
|
7
|
+
*
|
|
8
|
+
* Currently supported patterns:
|
|
9
|
+
* - `payload`: Payload CMS deployment with OpenNext
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Minimal - works out of box
|
|
13
|
+
* const payload = app.addPattern(PatternFactory.build("PayloadApp", {
|
|
14
|
+
* type: "payload",
|
|
15
|
+
* name: "my-cms",
|
|
16
|
+
* source: "../.."
|
|
17
|
+
* }));
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* // Customised with escape hatches
|
|
21
|
+
* const payload = app.addPattern(PatternFactory.build("PayloadApp", {
|
|
22
|
+
* type: "payload",
|
|
23
|
+
* name: "my-cms",
|
|
24
|
+
* source: "../..",
|
|
25
|
+
* database: { type: "Aurora", publiclyAccessible: false },
|
|
26
|
+
* compute: { memorySize: 2048 }
|
|
27
|
+
* }));
|
|
28
|
+
*
|
|
29
|
+
* // Access underlying resources for advanced customisation
|
|
30
|
+
* payload.getDatabase().grantConnect(otherLambda);
|
|
31
|
+
* payload.getServer().getLambdaFunction().addEnvironment("CUSTOM", "value");
|
|
32
|
+
*/
|
|
33
|
+
import { type Construct } from "constructs";
|
|
34
|
+
import type App from "../../app.js";
|
|
35
|
+
import { Payload } from "./payload.js";
|
|
36
|
+
import { type IPayloadProps, type IPatternProps, type AnyPattern } from "./interfaces/pattern.js";
|
|
37
|
+
/**
|
|
38
|
+
* Factory for creating high-level infrastructure patterns.
|
|
39
|
+
*
|
|
40
|
+
* Uses discriminated union (type: "payload" | ...) to route to specific implementations.
|
|
41
|
+
* Each pattern type has specific props and returns a specific interface.
|
|
42
|
+
*/
|
|
43
|
+
export declare class PatternFactory {
|
|
44
|
+
/**
|
|
45
|
+
* Build a Payload CMS pattern.
|
|
46
|
+
*
|
|
47
|
+
* Creates a complete Payload CMS infrastructure:
|
|
48
|
+
* - RDS PostgreSQL database (Aurora or Instance)
|
|
49
|
+
* - S3 buckets (assets, cache, media)
|
|
50
|
+
* - DynamoDB table (tag cache)
|
|
51
|
+
* - SQS FIFO queue (revalidation)
|
|
52
|
+
* - Lambda functions (server, image optimization, revalidation)
|
|
53
|
+
* - CloudFront distribution
|
|
54
|
+
*
|
|
55
|
+
* @param id - Construct ID (used for resource naming)
|
|
56
|
+
* @param props - Payload pattern configuration
|
|
57
|
+
* @returns Factory function to create the pattern
|
|
58
|
+
*/
|
|
59
|
+
static build(id: string, props: IPayloadProps): (app: App, scope: Construct) => Payload;
|
|
60
|
+
/**
|
|
61
|
+
* Generic build method (implementation signature).
|
|
62
|
+
*/
|
|
63
|
+
static build(id: string, props: IPatternProps): (app: App, scope: Construct) => AnyPattern;
|
|
64
|
+
}
|
|
65
|
+
export { Payload };
|
|
66
|
+
export type { IPayloadProps, IPatternProps, AnyPattern, IPayload, PayloadDatabaseConfig, PayloadComputeConfig, PayloadCdnConfig } from "./interfaces/pattern.js";
|
|
67
|
+
export { isPayloadPattern, isPattern } from "./interfaces/pattern.js";
|