@fjall/components-infrastructure 0.86.0 → 0.87.3

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.
Files changed (112) hide show
  1. package/README.md +3 -3
  2. package/dist/lib/app.d.ts +166 -6
  3. package/dist/lib/app.js +212 -20
  4. package/dist/lib/aspects/resourceInventory.d.ts +4 -4
  5. package/dist/lib/aspects/resourceInventory.js +3 -3
  6. package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
  7. package/dist/lib/config/aws/identityCenter.js +1 -5
  8. package/dist/lib/config/aws/organisation.js +1 -4
  9. package/dist/lib/index.d.ts +1 -0
  10. package/dist/lib/index.js +7 -1
  11. package/dist/lib/patterns/aws/buildkite.js +3 -2
  12. package/dist/lib/patterns/aws/cdn.d.ts +164 -0
  13. package/dist/lib/patterns/aws/cdn.js +264 -0
  14. package/dist/lib/patterns/aws/compute.d.ts +278 -59
  15. package/dist/lib/patterns/aws/compute.js +384 -188
  16. package/dist/lib/patterns/aws/connections.d.ts +46 -0
  17. package/dist/lib/patterns/aws/connections.js +159 -0
  18. package/dist/lib/patterns/aws/database.d.ts +124 -11
  19. package/dist/lib/patterns/aws/database.js +188 -66
  20. package/dist/lib/patterns/aws/hostedZone.js +1 -1
  21. package/dist/lib/patterns/aws/index.d.ts +3 -0
  22. package/dist/lib/patterns/aws/index.js +4 -1
  23. package/dist/lib/patterns/aws/interfaces/compute.d.ts +121 -0
  24. package/dist/lib/patterns/aws/interfaces/compute.js +48 -0
  25. package/dist/lib/patterns/aws/interfaces/connector.d.ts +183 -0
  26. package/dist/lib/patterns/aws/interfaces/connector.js +117 -0
  27. package/dist/lib/patterns/aws/interfaces/database.d.ts +136 -0
  28. package/dist/lib/patterns/aws/interfaces/database.js +65 -0
  29. package/dist/lib/patterns/aws/interfaces/index.d.ts +12 -0
  30. package/dist/lib/patterns/aws/interfaces/index.js +49 -0
  31. package/dist/lib/patterns/aws/interfaces/messaging.d.ts +146 -0
  32. package/dist/lib/patterns/aws/interfaces/messaging.js +56 -0
  33. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +403 -0
  34. package/dist/lib/patterns/aws/interfaces/pattern.js +36 -0
  35. package/dist/lib/patterns/aws/interfaces/storage.d.ts +136 -0
  36. package/dist/lib/patterns/aws/interfaces/storage.js +48 -0
  37. package/dist/lib/patterns/aws/messaging.d.ts +183 -0
  38. package/dist/lib/patterns/aws/messaging.js +239 -0
  39. package/dist/lib/patterns/aws/network.js +4 -4
  40. package/dist/lib/patterns/aws/pattern.d.ts +67 -0
  41. package/dist/lib/patterns/aws/pattern.js +69 -0
  42. package/dist/lib/patterns/aws/payload.d.ts +87 -0
  43. package/dist/lib/patterns/aws/payload.js +526 -0
  44. package/dist/lib/patterns/aws/storage.d.ts +127 -15
  45. package/dist/lib/patterns/aws/storage.js +234 -38
  46. package/dist/lib/resources/aws/backup/backupPlan.js +1 -6
  47. package/dist/lib/resources/aws/backup/backupVault.js +1 -2
  48. package/dist/lib/resources/aws/base/awsStack.d.ts +0 -2
  49. package/dist/lib/resources/aws/base/awsStack.js +1 -7
  50. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +71 -0
  51. package/dist/lib/resources/aws/cdn/cloudFront.js +176 -0
  52. package/dist/lib/resources/aws/cdn/index.d.ts +1 -0
  53. package/dist/lib/resources/aws/cdn/index.js +18 -0
  54. package/dist/lib/resources/aws/compute/ec2.d.ts +5 -0
  55. package/dist/lib/resources/aws/compute/ec2.js +33 -6
  56. package/dist/lib/resources/aws/compute/ecs.d.ts +32 -25
  57. package/dist/lib/resources/aws/compute/ecs.js +31 -115
  58. package/dist/lib/resources/aws/compute/lambda.d.ts +94 -5
  59. package/dist/lib/resources/aws/compute/lambda.js +209 -32
  60. package/dist/lib/resources/aws/database/database.js +1 -1
  61. package/dist/lib/resources/aws/database/dynamodb.d.ts +70 -0
  62. package/dist/lib/resources/aws/database/dynamodb.js +181 -0
  63. package/dist/lib/resources/aws/database/index.d.ts +1 -0
  64. package/dist/lib/resources/aws/database/index.js +2 -1
  65. package/dist/lib/resources/aws/database/migrationLambda.d.ts +80 -0
  66. package/dist/lib/resources/aws/database/migrationLambda.js +119 -0
  67. package/dist/lib/resources/aws/database/rdsAurora.d.ts +15 -0
  68. package/dist/lib/resources/aws/database/rdsAurora.js +41 -18
  69. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +12 -8
  70. package/dist/lib/resources/aws/database/rdsInstance.js +2 -2
  71. package/dist/lib/resources/aws/index.d.ts +2 -0
  72. package/dist/lib/resources/aws/index.js +3 -1
  73. package/dist/lib/resources/aws/messaging/eventbridge.d.ts +28 -0
  74. package/dist/lib/resources/aws/messaging/eventbridge.js +53 -0
  75. package/dist/lib/resources/aws/messaging/index.d.ts +3 -0
  76. package/dist/lib/resources/aws/messaging/index.js +20 -0
  77. package/dist/lib/resources/aws/messaging/sns.d.ts +35 -0
  78. package/dist/lib/resources/aws/messaging/sns.js +70 -0
  79. package/dist/lib/resources/aws/messaging/sqs.d.ts +105 -0
  80. package/dist/lib/resources/aws/messaging/sqs.js +231 -0
  81. package/dist/lib/resources/aws/messaging/utils.d.ts +3 -0
  82. package/dist/lib/resources/aws/messaging/utils.js +7 -0
  83. package/dist/lib/resources/aws/networking/ipam.js +1 -2
  84. package/dist/lib/resources/aws/networking/ipamPool.js +3 -2
  85. package/dist/lib/resources/aws/networking/vpc.js +1 -2
  86. package/dist/lib/resources/aws/storage/ecr.js +8 -5
  87. package/dist/lib/resources/aws/storage/s3.js +1 -2
  88. package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -1
  89. package/dist/lib/resources/aws/utilities/customResource.js +1 -1
  90. package/dist/lib/utils/getConfig.js +3 -2
  91. package/dist/lib/utils/index.d.ts +1 -0
  92. package/dist/lib/utils/index.js +2 -1
  93. package/dist/lib/utils/manifestWriter.d.ts +174 -0
  94. package/dist/lib/utils/manifestWriter.js +233 -0
  95. package/dist/lib/utils/standardTagsAspect.js +1 -8
  96. package/dist/lib/utils/validationLogger.d.ts +34 -0
  97. package/dist/lib/utils/validationLogger.js +83 -0
  98. package/package.json +3 -3
  99. package/dist/lib/__tests__/setup.d.ts +0 -48
  100. package/dist/lib/__tests__/setup.js +0 -1
  101. package/dist/lib/patterns/aws/cicdRole.d.ts +0 -67
  102. package/dist/lib/patterns/aws/cicdRole.js +0 -68
  103. package/dist/lib/resources/aws/cicd/cicdRole.d.ts +0 -65
  104. package/dist/lib/resources/aws/cicd/cicdRole.js +0 -191
  105. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +0 -75
  106. package/dist/lib/resources/aws/compute/ecsFreeTier.js +0 -1
  107. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +0 -75
  108. package/dist/lib/resources/aws/compute/ecsSpot.js +0 -1
  109. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.d.ts +0 -20
  110. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +0 -1
  111. package/dist/lib/resources/aws/utilities/cfnOutput.d.ts +0 -5
  112. 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==