@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,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe database interfaces.
|
|
3
|
+
*
|
|
4
|
+
* These interfaces provide compile-time type safety for database resources.
|
|
5
|
+
* Both relational (Aurora, RDS) and NoSQL (DynamoDB) databases are grouped
|
|
6
|
+
* under the Database umbrella, matching the user mental model of "where data lives".
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const aurora = app.addDatabase(DatabaseFactory.build("Main", { type: "Aurora", ... }));
|
|
10
|
+
* aurora.getHostEndpoint(); // ✓ Available on IRelationalDatabase
|
|
11
|
+
*
|
|
12
|
+
* const dynamo = app.addDatabase(DatabaseFactory.build("Cache", { type: "DynamoDB", ... }));
|
|
13
|
+
* dynamo.getTableName(); // ✓ Available on IDynamoDBDatabase
|
|
14
|
+
* dynamo.getHostEndpoint(); // ✗ Compile error - not on IDynamoDBDatabase
|
|
15
|
+
*/
|
|
16
|
+
import { type ITable } from "aws-cdk-lib/aws-dynamodb";
|
|
17
|
+
import { type IConnectable } from "aws-cdk-lib/aws-ec2";
|
|
18
|
+
import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
|
|
19
|
+
import { type Construct } from "constructs";
|
|
20
|
+
import { type Secret } from "../../../resources/aws/secrets";
|
|
21
|
+
/**
|
|
22
|
+
* Database type discriminator.
|
|
23
|
+
* Relational types share the IRelationalDatabase interface.
|
|
24
|
+
* DynamoDB has its own IDynamoDBDatabase interface.
|
|
25
|
+
*/
|
|
26
|
+
export type DatabaseType = "Aurora" | "Instance" | "GlobalAurora" | "DynamoDB";
|
|
27
|
+
/**
|
|
28
|
+
* Relational database type discriminator.
|
|
29
|
+
*/
|
|
30
|
+
export type RelationalDatabaseType = "Aurora" | "Instance" | "GlobalAurora";
|
|
31
|
+
/**
|
|
32
|
+
* Base database interface.
|
|
33
|
+
* All database types implement this interface.
|
|
34
|
+
*/
|
|
35
|
+
export interface IDatabase {
|
|
36
|
+
/** The type of database resource. Used for runtime type narrowing. */
|
|
37
|
+
readonly databaseType: DatabaseType;
|
|
38
|
+
/** The underlying CDK construct node. */
|
|
39
|
+
readonly node: Construct["node"];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Relational database interface (Aurora, RDS Instance, GlobalAurora).
|
|
43
|
+
* Provides access to connection details, credentials, and security group connections.
|
|
44
|
+
*/
|
|
45
|
+
export interface IRelationalDatabase extends IDatabase, IConnectable {
|
|
46
|
+
readonly databaseType: RelationalDatabaseType;
|
|
47
|
+
/** Get the database host endpoint. */
|
|
48
|
+
getHostEndpoint(): string;
|
|
49
|
+
/** Get the database port. */
|
|
50
|
+
getHostPort(): string;
|
|
51
|
+
/** Get the database name. */
|
|
52
|
+
getDatabaseName(): string;
|
|
53
|
+
/** Get the database credentials secret (Fjall Secret wrapper with getImport() support). */
|
|
54
|
+
getCredentials(): Secret;
|
|
55
|
+
/**
|
|
56
|
+
* Grant connect permissions to a grantee.
|
|
57
|
+
* This adds the grantee to the database security group.
|
|
58
|
+
* @param grantee The principal to grant connect permissions to
|
|
59
|
+
*/
|
|
60
|
+
grantConnect(grantee: IConnectable): void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* DynamoDB database interface.
|
|
64
|
+
* Provides access to table-specific methods and IAM grants.
|
|
65
|
+
*/
|
|
66
|
+
export interface IDynamoDBDatabase extends IDatabase {
|
|
67
|
+
readonly databaseType: "DynamoDB";
|
|
68
|
+
/** Get the table name. */
|
|
69
|
+
getTableName(): string;
|
|
70
|
+
/** Get the table ARN. */
|
|
71
|
+
getTableArn(): string;
|
|
72
|
+
/** Get the underlying DynamoDB table construct. */
|
|
73
|
+
getTable(): ITable;
|
|
74
|
+
/** Get the stream ARN if streams are enabled. */
|
|
75
|
+
getStreamArn(): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Grant read access to the table.
|
|
78
|
+
* @param grantee The principal to grant read access to
|
|
79
|
+
*/
|
|
80
|
+
grantReadData(grantee: IGrantable): Grant;
|
|
81
|
+
/**
|
|
82
|
+
* Grant write access to the table.
|
|
83
|
+
* @param grantee The principal to grant write access to
|
|
84
|
+
*/
|
|
85
|
+
grantWriteData(grantee: IGrantable): Grant;
|
|
86
|
+
/**
|
|
87
|
+
* Grant read and write access to the table.
|
|
88
|
+
* @param grantee The principal to grant access to
|
|
89
|
+
*/
|
|
90
|
+
grantReadWriteData(grantee: IGrantable): Grant;
|
|
91
|
+
/**
|
|
92
|
+
* Grant full access to the table (read, write, and stream).
|
|
93
|
+
* @param grantee The principal to grant full access to
|
|
94
|
+
*/
|
|
95
|
+
grantFullAccess(grantee: IGrantable): Grant;
|
|
96
|
+
/**
|
|
97
|
+
* Grant read access to the table stream.
|
|
98
|
+
* @param grantee The principal to grant stream read access to
|
|
99
|
+
*/
|
|
100
|
+
grantStreamRead(grantee: IGrantable): Grant;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Union type representing any database interface.
|
|
104
|
+
* Use with type guards for generic handling.
|
|
105
|
+
*/
|
|
106
|
+
export type AnyDatabase = IRelationalDatabase | IDynamoDBDatabase;
|
|
107
|
+
/**
|
|
108
|
+
* Type guard to check if a database is relational (Aurora, Instance, GlobalAurora).
|
|
109
|
+
*/
|
|
110
|
+
export declare function isRelationalDatabase(database: IDatabase): database is IRelationalDatabase;
|
|
111
|
+
/**
|
|
112
|
+
* Type guard to check if a database is DynamoDB.
|
|
113
|
+
*/
|
|
114
|
+
export declare function isDynamoDBDatabase(database: IDatabase): database is IDynamoDBDatabase;
|
|
115
|
+
/**
|
|
116
|
+
* Type guard to check if a database is Aurora.
|
|
117
|
+
*/
|
|
118
|
+
export declare function isAuroraDatabase(database: IDatabase): database is IRelationalDatabase & {
|
|
119
|
+
readonly databaseType: "Aurora";
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Type guard to check if a database is a single RDS Instance.
|
|
123
|
+
*/
|
|
124
|
+
export declare function isInstanceDatabase(database: IDatabase): database is IRelationalDatabase & {
|
|
125
|
+
readonly databaseType: "Instance";
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Type guard to check if a database is GlobalAurora.
|
|
129
|
+
*/
|
|
130
|
+
export declare function isGlobalAuroraDatabase(database: IDatabase): database is IRelationalDatabase & {
|
|
131
|
+
readonly databaseType: "GlobalAurora";
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Type guard to check if a resource is any database type.
|
|
135
|
+
*/
|
|
136
|
+
export declare function isDatabase(resource: unknown): resource is IDatabase;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Type-safe database interfaces.
|
|
4
|
+
*
|
|
5
|
+
* These interfaces provide compile-time type safety for database resources.
|
|
6
|
+
* Both relational (Aurora, RDS) and NoSQL (DynamoDB) databases are grouped
|
|
7
|
+
* under the Database umbrella, matching the user mental model of "where data lives".
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const aurora = app.addDatabase(DatabaseFactory.build("Main", { type: "Aurora", ... }));
|
|
11
|
+
* aurora.getHostEndpoint(); // ✓ Available on IRelationalDatabase
|
|
12
|
+
*
|
|
13
|
+
* const dynamo = app.addDatabase(DatabaseFactory.build("Cache", { type: "DynamoDB", ... }));
|
|
14
|
+
* dynamo.getTableName(); // ✓ Available on IDynamoDBDatabase
|
|
15
|
+
* dynamo.getHostEndpoint(); // ✗ Compile error - not on IDynamoDBDatabase
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.isRelationalDatabase = isRelationalDatabase;
|
|
19
|
+
exports.isDynamoDBDatabase = isDynamoDBDatabase;
|
|
20
|
+
exports.isAuroraDatabase = isAuroraDatabase;
|
|
21
|
+
exports.isInstanceDatabase = isInstanceDatabase;
|
|
22
|
+
exports.isGlobalAuroraDatabase = isGlobalAuroraDatabase;
|
|
23
|
+
exports.isDatabase = isDatabase;
|
|
24
|
+
/**
|
|
25
|
+
* Type guard to check if a database is relational (Aurora, Instance, GlobalAurora).
|
|
26
|
+
*/
|
|
27
|
+
function isRelationalDatabase(database) {
|
|
28
|
+
return (database.databaseType === "Aurora" ||
|
|
29
|
+
database.databaseType === "Instance" ||
|
|
30
|
+
database.databaseType === "GlobalAurora");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Type guard to check if a database is DynamoDB.
|
|
34
|
+
*/
|
|
35
|
+
function isDynamoDBDatabase(database) {
|
|
36
|
+
return database.databaseType === "DynamoDB";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Type guard to check if a database is Aurora.
|
|
40
|
+
*/
|
|
41
|
+
function isAuroraDatabase(database) {
|
|
42
|
+
return database.databaseType === "Aurora";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Type guard to check if a database is a single RDS Instance.
|
|
46
|
+
*/
|
|
47
|
+
function isInstanceDatabase(database) {
|
|
48
|
+
return database.databaseType === "Instance";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Type guard to check if a database is GlobalAurora.
|
|
52
|
+
*/
|
|
53
|
+
function isGlobalAuroraDatabase(database) {
|
|
54
|
+
return database.databaseType === "GlobalAurora";
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Type guard to check if a resource is any database type.
|
|
58
|
+
*/
|
|
59
|
+
function isDatabase(resource) {
|
|
60
|
+
return (resource !== null &&
|
|
61
|
+
typeof resource === "object" &&
|
|
62
|
+
"databaseType" in resource &&
|
|
63
|
+
typeof resource.databaseType === "string");
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2ludGVyZmFjZXMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOztBQXNISCxvREFRQztBQUtELGdEQUlDO0FBS0QsNENBSUM7QUFLRCxnREFJQztBQUtELHdEQUlDO0FBS0QsZ0NBT0M7QUEzREQ7O0dBRUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FDbEMsUUFBbUI7SUFFbkIsT0FBTyxDQUNMLFFBQVEsQ0FBQyxZQUFZLEtBQUssUUFBUTtRQUNsQyxRQUFRLENBQUMsWUFBWSxLQUFLLFVBQVU7UUFDcEMsUUFBUSxDQUFDLFlBQVksS0FBSyxjQUFjLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBbUI7SUFFbkIsT0FBTyxRQUFRLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsUUFBbUI7SUFFbkIsT0FBTyxRQUFRLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBbUI7SUFFbkIsT0FBTyxRQUFRLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FDcEMsUUFBbUI7SUFFbkIsT0FBTyxRQUFRLENBQUMsWUFBWSxLQUFLLGNBQWMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixVQUFVLENBQUMsUUFBaUI7SUFDMUMsT0FBTyxDQUNMLFFBQVEsS0FBSyxJQUFJO1FBQ2pCLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDNUIsY0FBYyxJQUFJLFFBQVE7UUFDMUIsT0FBUSxRQUFzQixDQUFDLFlBQVksS0FBSyxRQUFRLENBQ3pELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlLXNhZmUgZGF0YWJhc2UgaW50ZXJmYWNlcy5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIHByb3ZpZGUgY29tcGlsZS10aW1lIHR5cGUgc2FmZXR5IGZvciBkYXRhYmFzZSByZXNvdXJjZXMuXG4gKiBCb3RoIHJlbGF0aW9uYWwgKEF1cm9yYSwgUkRTKSBhbmQgTm9TUUwgKER5bmFtb0RCKSBkYXRhYmFzZXMgYXJlIGdyb3VwZWRcbiAqIHVuZGVyIHRoZSBEYXRhYmFzZSB1bWJyZWxsYSwgbWF0Y2hpbmcgdGhlIHVzZXIgbWVudGFsIG1vZGVsIG9mIFwid2hlcmUgZGF0YSBsaXZlc1wiLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhdXJvcmEgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiTWFpblwiLCB7IHR5cGU6IFwiQXVyb3JhXCIsIC4uLiB9KSk7XG4gKiBhdXJvcmEuZ2V0SG9zdEVuZHBvaW50KCk7IC8vIOKckyBBdmFpbGFibGUgb24gSVJlbGF0aW9uYWxEYXRhYmFzZVxuICpcbiAqIGNvbnN0IGR5bmFtbyA9IGFwcC5hZGREYXRhYmFzZShEYXRhYmFzZUZhY3RvcnkuYnVpbGQoXCJDYWNoZVwiLCB7IHR5cGU6IFwiRHluYW1vREJcIiwgLi4uIH0pKTtcbiAqIGR5bmFtby5nZXRUYWJsZU5hbWUoKTsgLy8g4pyTIEF2YWlsYWJsZSBvbiBJRHluYW1vREJEYXRhYmFzZVxuICogZHluYW1vLmdldEhvc3RFbmRwb2ludCgpOyAvLyDinJcgQ29tcGlsZSBlcnJvciAtIG5vdCBvbiBJRHluYW1vREJEYXRhYmFzZVxuICovXG5cbmltcG9ydCB7IHR5cGUgSVRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgdHlwZSBJQ29ubmVjdGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0IH0gZnJvbSBcIi4uLy4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG4vKipcbiAqIERhdGFiYXNlIHR5cGUgZGlzY3JpbWluYXRvci5cbiAqIFJlbGF0aW9uYWwgdHlwZXMgc2hhcmUgdGhlIElSZWxhdGlvbmFsRGF0YWJhc2UgaW50ZXJmYWNlLlxuICogRHluYW1vREIgaGFzIGl0cyBvd24gSUR5bmFtb0RCRGF0YWJhc2UgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgdHlwZSBEYXRhYmFzZVR5cGUgPSBcIkF1cm9yYVwiIHwgXCJJbnN0YW5jZVwiIHwgXCJHbG9iYWxBdXJvcmFcIiB8IFwiRHluYW1vREJcIjtcblxuLyoqXG4gKiBSZWxhdGlvbmFsIGRhdGFiYXNlIHR5cGUgZGlzY3JpbWluYXRvci5cbiAqL1xuZXhwb3J0IHR5cGUgUmVsYXRpb25hbERhdGFiYXNlVHlwZSA9IFwiQXVyb3JhXCIgfCBcIkluc3RhbmNlXCIgfCBcIkdsb2JhbEF1cm9yYVwiO1xuXG4vKipcbiAqIEJhc2UgZGF0YWJhc2UgaW50ZXJmYWNlLlxuICogQWxsIGRhdGFiYXNlIHR5cGVzIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YWJhc2Uge1xuICAvKiogVGhlIHR5cGUgb2YgZGF0YWJhc2UgcmVzb3VyY2UuIFVzZWQgZm9yIHJ1bnRpbWUgdHlwZSBuYXJyb3dpbmcuICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlVHlwZTogRGF0YWJhc2VUeXBlO1xuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBDREsgY29uc3RydWN0IG5vZGUuICovXG4gIHJlYWRvbmx5IG5vZGU6IENvbnN0cnVjdFtcIm5vZGVcIl07XG59XG5cbi8qKlxuICogUmVsYXRpb25hbCBkYXRhYmFzZSBpbnRlcmZhY2UgKEF1cm9yYSwgUkRTIEluc3RhbmNlLCBHbG9iYWxBdXJvcmEpLlxuICogUHJvdmlkZXMgYWNjZXNzIHRvIGNvbm5lY3Rpb24gZGV0YWlscywgY3JlZGVudGlhbHMsIGFuZCBzZWN1cml0eSBncm91cCBjb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVsYXRpb25hbERhdGFiYXNlIGV4dGVuZHMgSURhdGFiYXNlLCBJQ29ubmVjdGFibGUge1xuICByZWFkb25seSBkYXRhYmFzZVR5cGU6IFJlbGF0aW9uYWxEYXRhYmFzZVR5cGU7XG5cbiAgLyoqIEdldCB0aGUgZGF0YWJhc2UgaG9zdCBlbmRwb2ludC4gKi9cbiAgZ2V0SG9zdEVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKiogR2V0IHRoZSBkYXRhYmFzZSBwb3J0LiAqL1xuICBnZXRIb3N0UG9ydCgpOiBzdHJpbmc7XG5cbiAgLyoqIEdldCB0aGUgZGF0YWJhc2UgbmFtZS4gKi9cbiAgZ2V0RGF0YWJhc2VOYW1lKCk6IHN0cmluZztcblxuICAvKiogR2V0IHRoZSBkYXRhYmFzZSBjcmVkZW50aWFscyBzZWNyZXQgKEZqYWxsIFNlY3JldCB3cmFwcGVyIHdpdGggZ2V0SW1wb3J0KCkgc3VwcG9ydCkuICovXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldDtcblxuICAvKipcbiAgICogR3JhbnQgY29ubmVjdCBwZXJtaXNzaW9ucyB0byBhIGdyYW50ZWUuXG4gICAqIFRoaXMgYWRkcyB0aGUgZ3JhbnRlZSB0byB0aGUgZGF0YWJhc2Ugc2VjdXJpdHkgZ3JvdXAuXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgY29ubmVjdCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRDb25uZWN0KGdyYW50ZWU6IElDb25uZWN0YWJsZSk6IHZvaWQ7XG59XG5cbi8qKlxuICogRHluYW1vREIgZGF0YWJhc2UgaW50ZXJmYWNlLlxuICogUHJvdmlkZXMgYWNjZXNzIHRvIHRhYmxlLXNwZWNpZmljIG1ldGhvZHMgYW5kIElBTSBncmFudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUR5bmFtb0RCRGF0YWJhc2UgZXh0ZW5kcyBJRGF0YWJhc2Uge1xuICByZWFkb25seSBkYXRhYmFzZVR5cGU6IFwiRHluYW1vREJcIjtcblxuICAvKiogR2V0IHRoZSB0YWJsZSBuYW1lLiAqL1xuICBnZXRUYWJsZU5hbWUoKTogc3RyaW5nO1xuXG4gIC8qKiBHZXQgdGhlIHRhYmxlIEFSTi4gKi9cbiAgZ2V0VGFibGVBcm4oKTogc3RyaW5nO1xuXG4gIC8qKiBHZXQgdGhlIHVuZGVybHlpbmcgRHluYW1vREIgdGFibGUgY29uc3RydWN0LiAqL1xuICBnZXRUYWJsZSgpOiBJVGFibGU7XG5cbiAgLyoqIEdldCB0aGUgc3RyZWFtIEFSTiBpZiBzdHJlYW1zIGFyZSBlbmFibGVkLiAqL1xuICBnZXRTdHJlYW1Bcm4oKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50UmVhZERhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCB3cml0ZSBhY2Nlc3MgdG8gdGhlIHRhYmxlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHdyaXRlIGFjY2VzcyB0b1xuICAgKi9cbiAgZ3JhbnRXcml0ZURhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlIHRhYmxlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGFjY2VzcyB0b1xuICAgKi9cbiAgZ3JhbnRSZWFkV3JpdGVEYXRhKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgZnVsbCBhY2Nlc3MgdG8gdGhlIHRhYmxlIChyZWFkLCB3cml0ZSwgYW5kIHN0cmVhbSkuXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgZnVsbCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSB0YWJsZSBzdHJlYW0uXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgc3RyZWFtIHJlYWQgYWNjZXNzIHRvXG4gICAqL1xuICBncmFudFN0cmVhbVJlYWQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xufVxuXG4vKipcbiAqIFVuaW9uIHR5cGUgcmVwcmVzZW50aW5nIGFueSBkYXRhYmFzZSBpbnRlcmZhY2UuXG4gKiBVc2Ugd2l0aCB0eXBlIGd1YXJkcyBmb3IgZ2VuZXJpYyBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgQW55RGF0YWJhc2UgPSBJUmVsYXRpb25hbERhdGFiYXNlIHwgSUR5bmFtb0RCRGF0YWJhc2U7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIGRhdGFiYXNlIGlzIHJlbGF0aW9uYWwgKEF1cm9yYSwgSW5zdGFuY2UsIEdsb2JhbEF1cm9yYSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGF0aW9uYWxEYXRhYmFzZShcbiAgZGF0YWJhc2U6IElEYXRhYmFzZVxuKTogZGF0YWJhc2UgaXMgSVJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gIHJldHVybiAoXG4gICAgZGF0YWJhc2UuZGF0YWJhc2VUeXBlID09PSBcIkF1cm9yYVwiIHx8XG4gICAgZGF0YWJhc2UuZGF0YWJhc2VUeXBlID09PSBcIkluc3RhbmNlXCIgfHxcbiAgICBkYXRhYmFzZS5kYXRhYmFzZVR5cGUgPT09IFwiR2xvYmFsQXVyb3JhXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgZGF0YWJhc2UgaXMgRHluYW1vREIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtb0RCRGF0YWJhc2UoXG4gIGRhdGFiYXNlOiBJRGF0YWJhc2Vcbik6IGRhdGFiYXNlIGlzIElEeW5hbW9EQkRhdGFiYXNlIHtcbiAgcmV0dXJuIGRhdGFiYXNlLmRhdGFiYXNlVHlwZSA9PT0gXCJEeW5hbW9EQlwiO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSBkYXRhYmFzZSBpcyBBdXJvcmEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0F1cm9yYURhdGFiYXNlKFxuICBkYXRhYmFzZTogSURhdGFiYXNlXG4pOiBkYXRhYmFzZSBpcyBJUmVsYXRpb25hbERhdGFiYXNlICYgeyByZWFkb25seSBkYXRhYmFzZVR5cGU6IFwiQXVyb3JhXCIgfSB7XG4gIHJldHVybiBkYXRhYmFzZS5kYXRhYmFzZVR5cGUgPT09IFwiQXVyb3JhXCI7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIGRhdGFiYXNlIGlzIGEgc2luZ2xlIFJEUyBJbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdGFuY2VEYXRhYmFzZShcbiAgZGF0YWJhc2U6IElEYXRhYmFzZVxuKTogZGF0YWJhc2UgaXMgSVJlbGF0aW9uYWxEYXRhYmFzZSAmIHsgcmVhZG9ubHkgZGF0YWJhc2VUeXBlOiBcIkluc3RhbmNlXCIgfSB7XG4gIHJldHVybiBkYXRhYmFzZS5kYXRhYmFzZVR5cGUgPT09IFwiSW5zdGFuY2VcIjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgZGF0YWJhc2UgaXMgR2xvYmFsQXVyb3JhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iYWxBdXJvcmFEYXRhYmFzZShcbiAgZGF0YWJhc2U6IElEYXRhYmFzZVxuKTogZGF0YWJhc2UgaXMgSVJlbGF0aW9uYWxEYXRhYmFzZSAmIHsgcmVhZG9ubHkgZGF0YWJhc2VUeXBlOiBcIkdsb2JhbEF1cm9yYVwiIH0ge1xuICByZXR1cm4gZGF0YWJhc2UuZGF0YWJhc2VUeXBlID09PSBcIkdsb2JhbEF1cm9yYVwiO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSByZXNvdXJjZSBpcyBhbnkgZGF0YWJhc2UgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YWJhc2UocmVzb3VyY2U6IHVua25vd24pOiByZXNvdXJjZSBpcyBJRGF0YWJhc2Uge1xuICByZXR1cm4gKFxuICAgIHJlc291cmNlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHJlc291cmNlID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJkYXRhYmFzZVR5cGVcIiBpbiByZXNvdXJjZSAmJlxuICAgIHR5cGVvZiAocmVzb3VyY2UgYXMgSURhdGFiYXNlKS5kYXRhYmFzZVR5cGUgPT09IFwic3RyaW5nXCJcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe interfaces for Fjall infrastructure factories.
|
|
3
|
+
*
|
|
4
|
+
* This module exports all interfaces and type guards for type-safe
|
|
5
|
+
* factory pattern implementations.
|
|
6
|
+
*/
|
|
7
|
+
export { type ComputeType, type ICompute, type IEcsCompute, type ILambdaCompute, type IEc2Compute, type AnyCompute, isCompute, isEcsCompute, isLambdaCompute, isEc2Compute } from "./compute.js";
|
|
8
|
+
export { type DatabaseType, type RelationalDatabaseType, type IDatabase, type IRelationalDatabase, type IDynamoDBDatabase, type AnyDatabase, isDatabase, isRelationalDatabase, isDynamoDBDatabase, isAuroraDatabase, isInstanceDatabase, isGlobalAuroraDatabase } from "./database.js";
|
|
9
|
+
export { type MessagingType, type IMessaging, type IQueueMessaging, type ITopicMessaging, type IEventBusMessaging, type AnyMessaging, isMessaging, isQueueMessaging, isTopicMessaging, isEventBusMessaging } from "./messaging.js";
|
|
10
|
+
export { type StorageType, type IStorage, type IPrivateStorage, type IWebsiteStorage, type IPublicStorage, type AnyStorage, isStorage, isPrivateStorage, isWebsiteStorage, isPublicStorage } from "./storage.js";
|
|
11
|
+
export { type ConnectorType, type ConnectionAccess, type MessagingAccess, type IConnector, type IStorageConnector, type IDynamoDBConnector, type IQueueConnector, type ISecurityGroupConnector, type AnyConnector, type ConnectionConfig, type ConnectionSpec, type ConnectionResult, isConnector, isConnectable, isConnectionConfig, isStorageConnector, isDynamoDBConnector, isQueueConnector, isSecurityGroupConnector } from "./connector.js";
|
|
12
|
+
export { type PatternType, type IPattern, type IPayload, type IPayloadProps, type IPatternProps, type AnyPattern, type PayloadDatabaseConfig, type PayloadComputeConfig, type PayloadCdnConfig, isPayloadPattern, isPattern } from "./pattern.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Type-safe interfaces for Fjall infrastructure factories.
|
|
4
|
+
*
|
|
5
|
+
* This module exports all interfaces and type guards for type-safe
|
|
6
|
+
* factory pattern implementations.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.isPattern = exports.isPayloadPattern = exports.isSecurityGroupConnector = exports.isQueueConnector = exports.isDynamoDBConnector = exports.isStorageConnector = exports.isConnectionConfig = exports.isConnectable = exports.isConnector = exports.isPublicStorage = exports.isWebsiteStorage = exports.isPrivateStorage = exports.isStorage = exports.isEventBusMessaging = exports.isTopicMessaging = exports.isQueueMessaging = exports.isMessaging = exports.isGlobalAuroraDatabase = exports.isInstanceDatabase = exports.isAuroraDatabase = exports.isDynamoDBDatabase = exports.isRelationalDatabase = exports.isDatabase = exports.isEc2Compute = exports.isLambdaCompute = exports.isEcsCompute = exports.isCompute = void 0;
|
|
10
|
+
// Compute interfaces
|
|
11
|
+
var compute_js_1 = require("./compute.js");
|
|
12
|
+
Object.defineProperty(exports, "isCompute", { enumerable: true, get: function () { return compute_js_1.isCompute; } });
|
|
13
|
+
Object.defineProperty(exports, "isEcsCompute", { enumerable: true, get: function () { return compute_js_1.isEcsCompute; } });
|
|
14
|
+
Object.defineProperty(exports, "isLambdaCompute", { enumerable: true, get: function () { return compute_js_1.isLambdaCompute; } });
|
|
15
|
+
Object.defineProperty(exports, "isEc2Compute", { enumerable: true, get: function () { return compute_js_1.isEc2Compute; } });
|
|
16
|
+
// Database interfaces
|
|
17
|
+
var database_js_1 = require("./database.js");
|
|
18
|
+
Object.defineProperty(exports, "isDatabase", { enumerable: true, get: function () { return database_js_1.isDatabase; } });
|
|
19
|
+
Object.defineProperty(exports, "isRelationalDatabase", { enumerable: true, get: function () { return database_js_1.isRelationalDatabase; } });
|
|
20
|
+
Object.defineProperty(exports, "isDynamoDBDatabase", { enumerable: true, get: function () { return database_js_1.isDynamoDBDatabase; } });
|
|
21
|
+
Object.defineProperty(exports, "isAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isAuroraDatabase; } });
|
|
22
|
+
Object.defineProperty(exports, "isInstanceDatabase", { enumerable: true, get: function () { return database_js_1.isInstanceDatabase; } });
|
|
23
|
+
Object.defineProperty(exports, "isGlobalAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isGlobalAuroraDatabase; } });
|
|
24
|
+
// Messaging interfaces
|
|
25
|
+
var messaging_js_1 = require("./messaging.js");
|
|
26
|
+
Object.defineProperty(exports, "isMessaging", { enumerable: true, get: function () { return messaging_js_1.isMessaging; } });
|
|
27
|
+
Object.defineProperty(exports, "isQueueMessaging", { enumerable: true, get: function () { return messaging_js_1.isQueueMessaging; } });
|
|
28
|
+
Object.defineProperty(exports, "isTopicMessaging", { enumerable: true, get: function () { return messaging_js_1.isTopicMessaging; } });
|
|
29
|
+
Object.defineProperty(exports, "isEventBusMessaging", { enumerable: true, get: function () { return messaging_js_1.isEventBusMessaging; } });
|
|
30
|
+
// Storage interfaces
|
|
31
|
+
var storage_js_1 = require("./storage.js");
|
|
32
|
+
Object.defineProperty(exports, "isStorage", { enumerable: true, get: function () { return storage_js_1.isStorage; } });
|
|
33
|
+
Object.defineProperty(exports, "isPrivateStorage", { enumerable: true, get: function () { return storage_js_1.isPrivateStorage; } });
|
|
34
|
+
Object.defineProperty(exports, "isWebsiteStorage", { enumerable: true, get: function () { return storage_js_1.isWebsiteStorage; } });
|
|
35
|
+
Object.defineProperty(exports, "isPublicStorage", { enumerable: true, get: function () { return storage_js_1.isPublicStorage; } });
|
|
36
|
+
// Connector interfaces
|
|
37
|
+
var connector_js_1 = require("./connector.js");
|
|
38
|
+
Object.defineProperty(exports, "isConnector", { enumerable: true, get: function () { return connector_js_1.isConnector; } });
|
|
39
|
+
Object.defineProperty(exports, "isConnectable", { enumerable: true, get: function () { return connector_js_1.isConnectable; } });
|
|
40
|
+
Object.defineProperty(exports, "isConnectionConfig", { enumerable: true, get: function () { return connector_js_1.isConnectionConfig; } });
|
|
41
|
+
Object.defineProperty(exports, "isStorageConnector", { enumerable: true, get: function () { return connector_js_1.isStorageConnector; } });
|
|
42
|
+
Object.defineProperty(exports, "isDynamoDBConnector", { enumerable: true, get: function () { return connector_js_1.isDynamoDBConnector; } });
|
|
43
|
+
Object.defineProperty(exports, "isQueueConnector", { enumerable: true, get: function () { return connector_js_1.isQueueConnector; } });
|
|
44
|
+
Object.defineProperty(exports, "isSecurityGroupConnector", { enumerable: true, get: function () { return connector_js_1.isSecurityGroupConnector; } });
|
|
45
|
+
// Pattern interfaces
|
|
46
|
+
var pattern_js_1 = require("./pattern.js");
|
|
47
|
+
Object.defineProperty(exports, "isPayloadPattern", { enumerable: true, get: function () { return pattern_js_1.isPayloadPattern; } });
|
|
48
|
+
Object.defineProperty(exports, "isPattern", { enumerable: true, get: function () { return pattern_js_1.isPattern; } });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7QUFFSCxxQkFBcUI7QUFDckIsMkNBV3NCO0FBSnBCLHVHQUFBLFNBQVMsT0FBQTtBQUNULDBHQUFBLFlBQVksT0FBQTtBQUNaLDZHQUFBLGVBQWUsT0FBQTtBQUNmLDBHQUFBLFlBQVksT0FBQTtBQUdkLHNCQUFzQjtBQUN0Qiw2Q0FhdUI7QUFOckIseUdBQUEsVUFBVSxPQUFBO0FBQ1YsbUhBQUEsb0JBQW9CLE9BQUE7QUFDcEIsaUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIsK0dBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsaUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIscUhBQUEsc0JBQXNCLE9BQUE7QUFHeEIsdUJBQXVCO0FBQ3ZCLCtDQVd3QjtBQUp0QiwyR0FBQSxXQUFXLE9BQUE7QUFDWCxnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQixnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQixtSEFBQSxtQkFBbUIsT0FBQTtBQUdyQixxQkFBcUI7QUFDckIsMkNBV3NCO0FBSnBCLHVHQUFBLFNBQVMsT0FBQTtBQUNULDhHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDhHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDZHQUFBLGVBQWUsT0FBQTtBQUdqQix1QkFBdUI7QUFDdkIsK0NBb0J3QjtBQVB0QiwyR0FBQSxXQUFXLE9BQUE7QUFDWCw2R0FBQSxhQUFhLE9BQUE7QUFDYixrSEFBQSxrQkFBa0IsT0FBQTtBQUNsQixrSEFBQSxrQkFBa0IsT0FBQTtBQUNsQixtSEFBQSxtQkFBbUIsT0FBQTtBQUNuQixnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQix3SEFBQSx3QkFBd0IsT0FBQTtBQUcxQixxQkFBcUI7QUFDckIsMkNBWXNCO0FBRnBCLDhHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHVHQUFBLFNBQVMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHlwZS1zYWZlIGludGVyZmFjZXMgZm9yIEZqYWxsIGluZnJhc3RydWN0dXJlIGZhY3Rvcmllcy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGFsbCBpbnRlcmZhY2VzIGFuZCB0eXBlIGd1YXJkcyBmb3IgdHlwZS1zYWZlXG4gKiBmYWN0b3J5IHBhdHRlcm4gaW1wbGVtZW50YXRpb25zLlxuICovXG5cbi8vIENvbXB1dGUgaW50ZXJmYWNlc1xuZXhwb3J0IHtcbiAgdHlwZSBDb21wdXRlVHlwZSxcbiAgdHlwZSBJQ29tcHV0ZSxcbiAgdHlwZSBJRWNzQ29tcHV0ZSxcbiAgdHlwZSBJTGFtYmRhQ29tcHV0ZSxcbiAgdHlwZSBJRWMyQ29tcHV0ZSxcbiAgdHlwZSBBbnlDb21wdXRlLFxuICBpc0NvbXB1dGUsXG4gIGlzRWNzQ29tcHV0ZSxcbiAgaXNMYW1iZGFDb21wdXRlLFxuICBpc0VjMkNvbXB1dGVcbn0gZnJvbSBcIi4vY29tcHV0ZS5qc1wiO1xuXG4vLyBEYXRhYmFzZSBpbnRlcmZhY2VzXG5leHBvcnQge1xuICB0eXBlIERhdGFiYXNlVHlwZSxcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2VUeXBlLFxuICB0eXBlIElEYXRhYmFzZSxcbiAgdHlwZSBJUmVsYXRpb25hbERhdGFiYXNlLFxuICB0eXBlIElEeW5hbW9EQkRhdGFiYXNlLFxuICB0eXBlIEFueURhdGFiYXNlLFxuICBpc0RhdGFiYXNlLFxuICBpc1JlbGF0aW9uYWxEYXRhYmFzZSxcbiAgaXNEeW5hbW9EQkRhdGFiYXNlLFxuICBpc0F1cm9yYURhdGFiYXNlLFxuICBpc0luc3RhbmNlRGF0YWJhc2UsXG4gIGlzR2xvYmFsQXVyb3JhRGF0YWJhc2Vcbn0gZnJvbSBcIi4vZGF0YWJhc2UuanNcIjtcblxuLy8gTWVzc2FnaW5nIGludGVyZmFjZXNcbmV4cG9ydCB7XG4gIHR5cGUgTWVzc2FnaW5nVHlwZSxcbiAgdHlwZSBJTWVzc2FnaW5nLFxuICB0eXBlIElRdWV1ZU1lc3NhZ2luZyxcbiAgdHlwZSBJVG9waWNNZXNzYWdpbmcsXG4gIHR5cGUgSUV2ZW50QnVzTWVzc2FnaW5nLFxuICB0eXBlIEFueU1lc3NhZ2luZyxcbiAgaXNNZXNzYWdpbmcsXG4gIGlzUXVldWVNZXNzYWdpbmcsXG4gIGlzVG9waWNNZXNzYWdpbmcsXG4gIGlzRXZlbnRCdXNNZXNzYWdpbmdcbn0gZnJvbSBcIi4vbWVzc2FnaW5nLmpzXCI7XG5cbi8vIFN0b3JhZ2UgaW50ZXJmYWNlc1xuZXhwb3J0IHtcbiAgdHlwZSBTdG9yYWdlVHlwZSxcbiAgdHlwZSBJU3RvcmFnZSxcbiAgdHlwZSBJUHJpdmF0ZVN0b3JhZ2UsXG4gIHR5cGUgSVdlYnNpdGVTdG9yYWdlLFxuICB0eXBlIElQdWJsaWNTdG9yYWdlLFxuICB0eXBlIEFueVN0b3JhZ2UsXG4gIGlzU3RvcmFnZSxcbiAgaXNQcml2YXRlU3RvcmFnZSxcbiAgaXNXZWJzaXRlU3RvcmFnZSxcbiAgaXNQdWJsaWNTdG9yYWdlXG59IGZyb20gXCIuL3N0b3JhZ2UuanNcIjtcblxuLy8gQ29ubmVjdG9yIGludGVyZmFjZXNcbmV4cG9ydCB7XG4gIHR5cGUgQ29ubmVjdG9yVHlwZSxcbiAgdHlwZSBDb25uZWN0aW9uQWNjZXNzLFxuICB0eXBlIE1lc3NhZ2luZ0FjY2VzcyxcbiAgdHlwZSBJQ29ubmVjdG9yLFxuICB0eXBlIElTdG9yYWdlQ29ubmVjdG9yLFxuICB0eXBlIElEeW5hbW9EQkNvbm5lY3RvcixcbiAgdHlwZSBJUXVldWVDb25uZWN0b3IsXG4gIHR5cGUgSVNlY3VyaXR5R3JvdXBDb25uZWN0b3IsXG4gIHR5cGUgQW55Q29ubmVjdG9yLFxuICB0eXBlIENvbm5lY3Rpb25Db25maWcsXG4gIHR5cGUgQ29ubmVjdGlvblNwZWMsXG4gIHR5cGUgQ29ubmVjdGlvblJlc3VsdCxcbiAgaXNDb25uZWN0b3IsXG4gIGlzQ29ubmVjdGFibGUsXG4gIGlzQ29ubmVjdGlvbkNvbmZpZyxcbiAgaXNTdG9yYWdlQ29ubmVjdG9yLFxuICBpc0R5bmFtb0RCQ29ubmVjdG9yLFxuICBpc1F1ZXVlQ29ubmVjdG9yLFxuICBpc1NlY3VyaXR5R3JvdXBDb25uZWN0b3Jcbn0gZnJvbSBcIi4vY29ubmVjdG9yLmpzXCI7XG5cbi8vIFBhdHRlcm4gaW50ZXJmYWNlc1xuZXhwb3J0IHtcbiAgdHlwZSBQYXR0ZXJuVHlwZSxcbiAgdHlwZSBJUGF0dGVybixcbiAgdHlwZSBJUGF5bG9hZCxcbiAgdHlwZSBJUGF5bG9hZFByb3BzLFxuICB0eXBlIElQYXR0ZXJuUHJvcHMsXG4gIHR5cGUgQW55UGF0dGVybixcbiAgdHlwZSBQYXlsb2FkRGF0YWJhc2VDb25maWcsXG4gIHR5cGUgUGF5bG9hZENvbXB1dGVDb25maWcsXG4gIHR5cGUgUGF5bG9hZENkbkNvbmZpZyxcbiAgaXNQYXlsb2FkUGF0dGVybixcbiAgaXNQYXR0ZXJuXG59IGZyb20gXCIuL3BhdHRlcm4uanNcIjtcbiJdfQ==
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe messaging interfaces.
|
|
3
|
+
*
|
|
4
|
+
* These interfaces provide compile-time type safety for messaging resources.
|
|
5
|
+
* All messaging types (SQS, SNS, EventBridge, Kinesis) are grouped under the
|
|
6
|
+
* Messaging umbrella, matching the user mental model of "how systems communicate".
|
|
7
|
+
*
|
|
8
|
+
* Currently implemented:
|
|
9
|
+
* - Queue (SQS)
|
|
10
|
+
* - Topic (SNS)
|
|
11
|
+
* - EventBus (EventBridge)
|
|
12
|
+
*
|
|
13
|
+
* Future:
|
|
14
|
+
* - Stream (Kinesis)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const queue = app.addMessaging(MessagingFactory.build("Events", { type: "queue", ... }));
|
|
18
|
+
* queue.getQueueUrl(); // ✓ Available on IQueueMessaging
|
|
19
|
+
*
|
|
20
|
+
* const topic = app.addMessaging(MessagingFactory.build("Alerts", { type: "topic", ... }));
|
|
21
|
+
* topic.getTopicArn(); // ✓ Available on ITopicMessaging
|
|
22
|
+
*/
|
|
23
|
+
import { type IQueue } from "aws-cdk-lib/aws-sqs";
|
|
24
|
+
import { type ITopic } from "aws-cdk-lib/aws-sns";
|
|
25
|
+
import { type IEventBus } from "aws-cdk-lib/aws-events";
|
|
26
|
+
import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
|
|
27
|
+
import { type Construct } from "constructs";
|
|
28
|
+
export type { IQueue, ITopic, IEventBus };
|
|
29
|
+
/**
|
|
30
|
+
* Messaging type discriminator.
|
|
31
|
+
*/
|
|
32
|
+
export type MessagingType = "queue" | "topic" | "eventBus";
|
|
33
|
+
/**
|
|
34
|
+
* Base messaging interface.
|
|
35
|
+
* All messaging types implement this interface.
|
|
36
|
+
*/
|
|
37
|
+
export interface IMessaging {
|
|
38
|
+
/** The type of messaging resource. Used for runtime type narrowing. */
|
|
39
|
+
readonly messagingType: MessagingType;
|
|
40
|
+
/** The underlying CDK construct node. */
|
|
41
|
+
readonly node: Construct["node"];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Queue messaging interface (SQS).
|
|
45
|
+
* Provides access to queue-specific resources and permissions.
|
|
46
|
+
*/
|
|
47
|
+
export interface IQueueMessaging extends IMessaging {
|
|
48
|
+
readonly messagingType: "queue";
|
|
49
|
+
/** Get the queue URL. */
|
|
50
|
+
getQueueUrl(): string;
|
|
51
|
+
/** Get the queue ARN. */
|
|
52
|
+
getQueueArn(): string;
|
|
53
|
+
/** Get the queue name. */
|
|
54
|
+
getQueueName(): string;
|
|
55
|
+
/** Get the underlying SQS queue construct. */
|
|
56
|
+
getQueue(): IQueue;
|
|
57
|
+
/** Get the dead letter queue if one was created. Returns the raw IQueue. */
|
|
58
|
+
getDeadLetterQueue(): IQueue | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Grant send permissions to a grantee.
|
|
61
|
+
* @param grantee The principal to grant send permissions to
|
|
62
|
+
*/
|
|
63
|
+
grantSendMessages(grantee: IGrantable): Grant;
|
|
64
|
+
/**
|
|
65
|
+
* Grant consume (receive and delete) permissions to a grantee.
|
|
66
|
+
* @param grantee The principal to grant consume permissions to
|
|
67
|
+
*/
|
|
68
|
+
grantConsumeMessages(grantee: IGrantable): Grant;
|
|
69
|
+
/**
|
|
70
|
+
* Grant purge permissions to a grantee.
|
|
71
|
+
* @param grantee The principal to grant purge permissions to
|
|
72
|
+
*/
|
|
73
|
+
grantPurge(grantee: IGrantable): Grant;
|
|
74
|
+
/**
|
|
75
|
+
* Grant full access (send, consume, purge) to a grantee.
|
|
76
|
+
* @param grantee The principal to grant full access to
|
|
77
|
+
*/
|
|
78
|
+
grant(grantee: IGrantable, ...actions: string[]): Grant;
|
|
79
|
+
/**
|
|
80
|
+
* Grant full access (send and consume) to a grantee.
|
|
81
|
+
* Convenience method that grants both send and consume permissions.
|
|
82
|
+
* @param grantee The principal to grant full access to
|
|
83
|
+
*/
|
|
84
|
+
grantFull(grantee: IGrantable): Grant;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Topic messaging interface (SNS).
|
|
88
|
+
* Provides access to topic-specific resources and permissions.
|
|
89
|
+
*/
|
|
90
|
+
export interface ITopicMessaging extends IMessaging {
|
|
91
|
+
readonly messagingType: "topic";
|
|
92
|
+
/** Get the topic ARN. */
|
|
93
|
+
getTopicArn(): string;
|
|
94
|
+
/** Get the topic name. */
|
|
95
|
+
getTopicName(): string;
|
|
96
|
+
/** Get the underlying SNS topic construct. */
|
|
97
|
+
getTopic(): ITopic;
|
|
98
|
+
/**
|
|
99
|
+
* Grant publish permissions to a grantee.
|
|
100
|
+
* @param grantee The principal to grant publish permissions to
|
|
101
|
+
*/
|
|
102
|
+
grantPublish(grantee: IGrantable): Grant;
|
|
103
|
+
/**
|
|
104
|
+
* Grant subscribe permissions to a grantee.
|
|
105
|
+
* @param grantee The principal to grant subscribe permissions to
|
|
106
|
+
*/
|
|
107
|
+
grantSubscribe(grantee: IGrantable): Grant;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* EventBus messaging interface (EventBridge).
|
|
111
|
+
* Provides access to event bus-specific resources and permissions.
|
|
112
|
+
*/
|
|
113
|
+
export interface IEventBusMessaging extends IMessaging {
|
|
114
|
+
readonly messagingType: "eventBus";
|
|
115
|
+
/** Get the event bus ARN. */
|
|
116
|
+
getEventBusArn(): string;
|
|
117
|
+
/** Get the event bus name. */
|
|
118
|
+
getEventBusName(): string;
|
|
119
|
+
/** Get the underlying EventBridge event bus construct. */
|
|
120
|
+
getEventBus(): IEventBus;
|
|
121
|
+
/**
|
|
122
|
+
* Grant put events permissions to a grantee.
|
|
123
|
+
* @param grantee The principal to grant put events permissions to
|
|
124
|
+
*/
|
|
125
|
+
grantPutEventsTo(grantee: IGrantable): Grant;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Union type representing any messaging interface.
|
|
129
|
+
*/
|
|
130
|
+
export type AnyMessaging = IQueueMessaging | ITopicMessaging | IEventBusMessaging;
|
|
131
|
+
/**
|
|
132
|
+
* Type guard to check if a messaging resource is a queue.
|
|
133
|
+
*/
|
|
134
|
+
export declare function isQueueMessaging(messaging: IMessaging): messaging is IQueueMessaging;
|
|
135
|
+
/**
|
|
136
|
+
* Type guard to check if a messaging resource is a topic.
|
|
137
|
+
*/
|
|
138
|
+
export declare function isTopicMessaging(messaging: IMessaging): messaging is ITopicMessaging;
|
|
139
|
+
/**
|
|
140
|
+
* Type guard to check if a messaging resource is an event bus.
|
|
141
|
+
*/
|
|
142
|
+
export declare function isEventBusMessaging(messaging: IMessaging): messaging is IEventBusMessaging;
|
|
143
|
+
/**
|
|
144
|
+
* Type guard to check if a resource is any messaging type.
|
|
145
|
+
*/
|
|
146
|
+
export declare function isMessaging(resource: unknown): resource is IMessaging;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Type-safe messaging interfaces.
|
|
4
|
+
*
|
|
5
|
+
* These interfaces provide compile-time type safety for messaging resources.
|
|
6
|
+
* All messaging types (SQS, SNS, EventBridge, Kinesis) are grouped under the
|
|
7
|
+
* Messaging umbrella, matching the user mental model of "how systems communicate".
|
|
8
|
+
*
|
|
9
|
+
* Currently implemented:
|
|
10
|
+
* - Queue (SQS)
|
|
11
|
+
* - Topic (SNS)
|
|
12
|
+
* - EventBus (EventBridge)
|
|
13
|
+
*
|
|
14
|
+
* Future:
|
|
15
|
+
* - Stream (Kinesis)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const queue = app.addMessaging(MessagingFactory.build("Events", { type: "queue", ... }));
|
|
19
|
+
* queue.getQueueUrl(); // ✓ Available on IQueueMessaging
|
|
20
|
+
*
|
|
21
|
+
* const topic = app.addMessaging(MessagingFactory.build("Alerts", { type: "topic", ... }));
|
|
22
|
+
* topic.getTopicArn(); // ✓ Available on ITopicMessaging
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.isQueueMessaging = isQueueMessaging;
|
|
26
|
+
exports.isTopicMessaging = isTopicMessaging;
|
|
27
|
+
exports.isEventBusMessaging = isEventBusMessaging;
|
|
28
|
+
exports.isMessaging = isMessaging;
|
|
29
|
+
/**
|
|
30
|
+
* Type guard to check if a messaging resource is a queue.
|
|
31
|
+
*/
|
|
32
|
+
function isQueueMessaging(messaging) {
|
|
33
|
+
return messaging.messagingType === "queue";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Type guard to check if a messaging resource is a topic.
|
|
37
|
+
*/
|
|
38
|
+
function isTopicMessaging(messaging) {
|
|
39
|
+
return messaging.messagingType === "topic";
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Type guard to check if a messaging resource is an event bus.
|
|
43
|
+
*/
|
|
44
|
+
function isEventBusMessaging(messaging) {
|
|
45
|
+
return messaging.messagingType === "eventBus";
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Type guard to check if a resource is any messaging type.
|
|
49
|
+
*/
|
|
50
|
+
function isMessaging(resource) {
|
|
51
|
+
return (resource !== null &&
|
|
52
|
+
typeof resource === "object" &&
|
|
53
|
+
"messagingType" in resource &&
|
|
54
|
+
typeof resource.messagingType === "string");
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9pbnRlcmZhY2VzL21lc3NhZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRzs7QUFpSkgsNENBSUM7QUFLRCw0Q0FJQztBQUtELGtEQUlDO0FBS0Qsa0NBT0M7QUFyQ0Q7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsU0FBcUI7SUFFckIsT0FBTyxTQUFTLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQztBQUM3QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsU0FBcUI7SUFFckIsT0FBTyxTQUFTLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQztBQUM3QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsU0FBcUI7SUFFckIsT0FBTyxTQUFTLENBQUMsYUFBYSxLQUFLLFVBQVUsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixXQUFXLENBQUMsUUFBaUI7SUFDM0MsT0FBTyxDQUNMLFFBQVEsS0FBSyxJQUFJO1FBQ2pCLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDNUIsZUFBZSxJQUFJLFFBQVE7UUFDM0IsT0FBUSxRQUF1QixDQUFDLGFBQWEsS0FBSyxRQUFRLENBQzNELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlLXNhZmUgbWVzc2FnaW5nIGludGVyZmFjZXMuXG4gKlxuICogVGhlc2UgaW50ZXJmYWNlcyBwcm92aWRlIGNvbXBpbGUtdGltZSB0eXBlIHNhZmV0eSBmb3IgbWVzc2FnaW5nIHJlc291cmNlcy5cbiAqIEFsbCBtZXNzYWdpbmcgdHlwZXMgKFNRUywgU05TLCBFdmVudEJyaWRnZSwgS2luZXNpcykgYXJlIGdyb3VwZWQgdW5kZXIgdGhlXG4gKiBNZXNzYWdpbmcgdW1icmVsbGEsIG1hdGNoaW5nIHRoZSB1c2VyIG1lbnRhbCBtb2RlbCBvZiBcImhvdyBzeXN0ZW1zIGNvbW11bmljYXRlXCIuXG4gKlxuICogQ3VycmVudGx5IGltcGxlbWVudGVkOlxuICogLSBRdWV1ZSAoU1FTKVxuICogLSBUb3BpYyAoU05TKVxuICogLSBFdmVudEJ1cyAoRXZlbnRCcmlkZ2UpXG4gKlxuICogRnV0dXJlOlxuICogLSBTdHJlYW0gKEtpbmVzaXMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHF1ZXVlID0gYXBwLmFkZE1lc3NhZ2luZyhNZXNzYWdpbmdGYWN0b3J5LmJ1aWxkKFwiRXZlbnRzXCIsIHsgdHlwZTogXCJxdWV1ZVwiLCAuLi4gfSkpO1xuICogcXVldWUuZ2V0UXVldWVVcmwoKTsgLy8g4pyTIEF2YWlsYWJsZSBvbiBJUXVldWVNZXNzYWdpbmdcbiAqXG4gKiBjb25zdCB0b3BpYyA9IGFwcC5hZGRNZXNzYWdpbmcoTWVzc2FnaW5nRmFjdG9yeS5idWlsZChcIkFsZXJ0c1wiLCB7IHR5cGU6IFwidG9waWNcIiwgLi4uIH0pKTtcbiAqIHRvcGljLmdldFRvcGljQXJuKCk7IC8vIOKckyBBdmFpbGFibGUgb24gSVRvcGljTWVzc2FnaW5nXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBJUXVldWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHsgdHlwZSBJVG9waWMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNuc1wiO1xuaW1wb3J0IHsgdHlwZSBJRXZlbnRCdXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBJUXVldWUsIElUb3BpYywgSUV2ZW50QnVzIH07XG5cbi8qKlxuICogTWVzc2FnaW5nIHR5cGUgZGlzY3JpbWluYXRvci5cbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnaW5nVHlwZSA9IFwicXVldWVcIiB8IFwidG9waWNcIiB8IFwiZXZlbnRCdXNcIjtcblxuLyoqXG4gKiBCYXNlIG1lc3NhZ2luZyBpbnRlcmZhY2UuXG4gKiBBbGwgbWVzc2FnaW5nIHR5cGVzIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnaW5nIHtcbiAgLyoqIFRoZSB0eXBlIG9mIG1lc3NhZ2luZyByZXNvdXJjZS4gVXNlZCBmb3IgcnVudGltZSB0eXBlIG5hcnJvd2luZy4gKi9cbiAgcmVhZG9ubHkgbWVzc2FnaW5nVHlwZTogTWVzc2FnaW5nVHlwZTtcblxuICAvKiogVGhlIHVuZGVybHlpbmcgQ0RLIGNvbnN0cnVjdCBub2RlLiAqL1xuICByZWFkb25seSBub2RlOiBDb25zdHJ1Y3RbXCJub2RlXCJdO1xufVxuXG4vKipcbiAqIFF1ZXVlIG1lc3NhZ2luZyBpbnRlcmZhY2UgKFNRUykuXG4gKiBQcm92aWRlcyBhY2Nlc3MgdG8gcXVldWUtc3BlY2lmaWMgcmVzb3VyY2VzIGFuZCBwZXJtaXNzaW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUXVldWVNZXNzYWdpbmcgZXh0ZW5kcyBJTWVzc2FnaW5nIHtcbiAgcmVhZG9ubHkgbWVzc2FnaW5nVHlwZTogXCJxdWV1ZVwiO1xuXG4gIC8qKiBHZXQgdGhlIHF1ZXVlIFVSTC4gKi9cbiAgZ2V0UXVldWVVcmwoKTogc3RyaW5nO1xuXG4gIC8qKiBHZXQgdGhlIHF1ZXVlIEFSTi4gKi9cbiAgZ2V0UXVldWVBcm4oKTogc3RyaW5nO1xuXG4gIC8qKiBHZXQgdGhlIHF1ZXVlIG5hbWUuICovXG4gIGdldFF1ZXVlTmFtZSgpOiBzdHJpbmc7XG5cbiAgLyoqIEdldCB0aGUgdW5kZXJseWluZyBTUVMgcXVldWUgY29uc3RydWN0LiAqL1xuICBnZXRRdWV1ZSgpOiBJUXVldWU7XG5cbiAgLyoqIEdldCB0aGUgZGVhZCBsZXR0ZXIgcXVldWUgaWYgb25lIHdhcyBjcmVhdGVkLiBSZXR1cm5zIHRoZSByYXcgSVF1ZXVlLiAqL1xuICBnZXREZWFkTGV0dGVyUXVldWUoKTogSVF1ZXVlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBHcmFudCBzZW5kIHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZS5cbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBzZW5kIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBncmFudFNlbmRNZXNzYWdlcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IGNvbnN1bWUgKHJlY2VpdmUgYW5kIGRlbGV0ZSkgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGNvbnN1bWUgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50Q29uc3VtZU1lc3NhZ2VzKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcHVyZ2UgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHB1cmdlIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBncmFudFB1cmdlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgZnVsbCBhY2Nlc3MgKHNlbmQsIGNvbnN1bWUsIHB1cmdlKSB0byBhIGdyYW50ZWUuXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgZnVsbCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IElHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IGZ1bGwgYWNjZXNzIChzZW5kIGFuZCBjb25zdW1lKSB0byBhIGdyYW50ZWUuXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGdyYW50cyBib3RoIHNlbmQgYW5kIGNvbnN1bWUgcGVybWlzc2lvbnMuXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgZnVsbCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50RnVsbChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQ7XG59XG5cbi8qKlxuICogVG9waWMgbWVzc2FnaW5nIGludGVyZmFjZSAoU05TKS5cbiAqIFByb3ZpZGVzIGFjY2VzcyB0byB0b3BpYy1zcGVjaWZpYyByZXNvdXJjZXMgYW5kIHBlcm1pc3Npb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUb3BpY01lc3NhZ2luZyBleHRlbmRzIElNZXNzYWdpbmcge1xuICByZWFkb25seSBtZXNzYWdpbmdUeXBlOiBcInRvcGljXCI7XG5cbiAgLyoqIEdldCB0aGUgdG9waWMgQVJOLiAqL1xuICBnZXRUb3BpY0FybigpOiBzdHJpbmc7XG5cbiAgLyoqIEdldCB0aGUgdG9waWMgbmFtZS4gKi9cbiAgZ2V0VG9waWNOYW1lKCk6IHN0cmluZztcblxuICAvKiogR2V0IHRoZSB1bmRlcmx5aW5nIFNOUyB0b3BpYyBjb25zdHJ1Y3QuICovXG4gIGdldFRvcGljKCk6IElUb3BpYztcblxuICAvKipcbiAgICogR3JhbnQgcHVibGlzaCBwZXJtaXNzaW9ucyB0byBhIGdyYW50ZWUuXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcHVibGlzaCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRQdWJsaXNoKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgc3Vic2NyaWJlIHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZS5cbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBzdWJzY3JpYmUgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50U3Vic2NyaWJlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudDtcbn1cblxuLyoqXG4gKiBFdmVudEJ1cyBtZXNzYWdpbmcgaW50ZXJmYWNlIChFdmVudEJyaWRnZSkuXG4gKiBQcm92aWRlcyBhY2Nlc3MgdG8gZXZlbnQgYnVzLXNwZWNpZmljIHJlc291cmNlcyBhbmQgcGVybWlzc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50QnVzTWVzc2FnaW5nIGV4dGVuZHMgSU1lc3NhZ2luZyB7XG4gIHJlYWRvbmx5IG1lc3NhZ2luZ1R5cGU6IFwiZXZlbnRCdXNcIjtcblxuICAvKiogR2V0IHRoZSBldmVudCBidXMgQVJOLiAqL1xuICBnZXRFdmVudEJ1c0FybigpOiBzdHJpbmc7XG5cbiAgLyoqIEdldCB0aGUgZXZlbnQgYnVzIG5hbWUuICovXG4gIGdldEV2ZW50QnVzTmFtZSgpOiBzdHJpbmc7XG5cbiAgLyoqIEdldCB0aGUgdW5kZXJseWluZyBFdmVudEJyaWRnZSBldmVudCBidXMgY29uc3RydWN0LiAqL1xuICBnZXRFdmVudEJ1cygpOiBJRXZlbnRCdXM7XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1dCBldmVudHMgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHB1dCBldmVudHMgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50UHV0RXZlbnRzVG8oZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xufVxuXG4vKipcbiAqIFVuaW9uIHR5cGUgcmVwcmVzZW50aW5nIGFueSBtZXNzYWdpbmcgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgdHlwZSBBbnlNZXNzYWdpbmcgPVxuICB8IElRdWV1ZU1lc3NhZ2luZ1xuICB8IElUb3BpY01lc3NhZ2luZ1xuICB8IElFdmVudEJ1c01lc3NhZ2luZztcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgbWVzc2FnaW5nIHJlc291cmNlIGlzIGEgcXVldWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXVlTWVzc2FnaW5nKFxuICBtZXNzYWdpbmc6IElNZXNzYWdpbmdcbik6IG1lc3NhZ2luZyBpcyBJUXVldWVNZXNzYWdpbmcge1xuICByZXR1cm4gbWVzc2FnaW5nLm1lc3NhZ2luZ1R5cGUgPT09IFwicXVldWVcIjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgbWVzc2FnaW5nIHJlc291cmNlIGlzIGEgdG9waWMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcGljTWVzc2FnaW5nKFxuICBtZXNzYWdpbmc6IElNZXNzYWdpbmdcbik6IG1lc3NhZ2luZyBpcyBJVG9waWNNZXNzYWdpbmcge1xuICByZXR1cm4gbWVzc2FnaW5nLm1lc3NhZ2luZ1R5cGUgPT09IFwidG9waWNcIjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgbWVzc2FnaW5nIHJlc291cmNlIGlzIGFuIGV2ZW50IGJ1cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRCdXNNZXNzYWdpbmcoXG4gIG1lc3NhZ2luZzogSU1lc3NhZ2luZ1xuKTogbWVzc2FnaW5nIGlzIElFdmVudEJ1c01lc3NhZ2luZyB7XG4gIHJldHVybiBtZXNzYWdpbmcubWVzc2FnaW5nVHlwZSA9PT0gXCJldmVudEJ1c1wiO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSByZXNvdXJjZSBpcyBhbnkgbWVzc2FnaW5nIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2luZyhyZXNvdXJjZTogdW5rbm93bik6IHJlc291cmNlIGlzIElNZXNzYWdpbmcge1xuICByZXR1cm4gKFxuICAgIHJlc291cmNlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHJlc291cmNlID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJtZXNzYWdpbmdUeXBlXCIgaW4gcmVzb3VyY2UgJiZcbiAgICB0eXBlb2YgKHJlc291cmNlIGFzIElNZXNzYWdpbmcpLm1lc3NhZ2luZ1R5cGUgPT09IFwic3RyaW5nXCJcbiAgKTtcbn1cbiJdfQ==
|