@fjall/components-infrastructure 0.87.20 → 0.88.1

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 (92) hide show
  1. package/dist/lib/app.d.ts +13 -17
  2. package/dist/lib/app.js +56 -40
  3. package/dist/lib/config/aws/accountId.js +1 -2
  4. package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
  5. package/dist/lib/config/aws/costAllocationTags.js +3 -4
  6. package/dist/lib/config/aws/identityCenter.js +1 -2
  7. package/dist/lib/config/aws/identityCenterGroupMembership.js +1 -6
  8. package/dist/lib/config/aws/index.d.ts +0 -1
  9. package/dist/lib/config/aws/index.js +1 -2
  10. package/dist/lib/config/aws/ipamDelegateAdmin.js +1 -2
  11. package/dist/lib/config/aws/ipamPoolId.js +1 -2
  12. package/dist/lib/config/aws/organisationId.js +1 -2
  13. package/dist/lib/config/aws/organisationsAccess.js +1 -2
  14. package/dist/lib/config/aws/ramSharing.js +1 -2
  15. package/dist/lib/patterns/aws/account.d.ts +12 -0
  16. package/dist/lib/patterns/aws/account.js +59 -0
  17. package/dist/lib/patterns/aws/buildkite.js +1 -2
  18. package/dist/lib/patterns/aws/cdn.d.ts +5 -10
  19. package/dist/lib/patterns/aws/cdn.js +5 -13
  20. package/dist/lib/patterns/aws/compute.d.ts +20 -3
  21. package/dist/lib/patterns/aws/compute.js +29 -5
  22. package/dist/lib/patterns/aws/database.d.ts +1 -1
  23. package/dist/lib/patterns/aws/database.js +16 -13
  24. package/dist/lib/patterns/aws/index.d.ts +4 -3
  25. package/dist/lib/patterns/aws/index.js +6 -4
  26. package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -1
  27. package/dist/lib/patterns/aws/interfaces/index.js +8 -5
  28. package/dist/lib/patterns/aws/interfaces/organisation.d.ts +22 -0
  29. package/dist/lib/patterns/aws/interfaces/organisation.js +28 -0
  30. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +5 -5
  31. package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
  32. package/dist/lib/patterns/aws/interfaces/storage.d.ts +10 -120
  33. package/dist/lib/patterns/aws/interfaces/storage.js +6 -43
  34. package/dist/lib/patterns/aws/organisation.d.ts +51 -0
  35. package/dist/lib/patterns/aws/organisation.js +150 -0
  36. package/dist/lib/patterns/aws/organisationFactory.d.ts +20 -0
  37. package/dist/lib/patterns/aws/organisationFactory.js +24 -0
  38. package/dist/lib/patterns/aws/pattern.d.ts +1 -1
  39. package/dist/lib/patterns/aws/pattern.js +1 -1
  40. package/dist/lib/patterns/aws/payload.d.ts +6 -5
  41. package/dist/lib/patterns/aws/payload.js +92 -42
  42. package/dist/lib/patterns/aws/platform.d.ts +11 -0
  43. package/dist/lib/patterns/aws/platform.js +29 -0
  44. package/dist/lib/patterns/aws/storage.d.ts +40 -125
  45. package/dist/lib/patterns/aws/storage.js +63 -191
  46. package/dist/lib/resources/aws/compute/ec2.d.ts +1 -1
  47. package/dist/lib/resources/aws/compute/ec2.js +3 -4
  48. package/dist/lib/resources/aws/compute/ecs.d.ts +6 -9
  49. package/dist/lib/resources/aws/compute/ecs.js +58 -26
  50. package/dist/lib/resources/aws/compute/lambda.d.ts +2 -0
  51. package/dist/lib/resources/aws/compute/lambda.js +11 -6
  52. package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
  53. package/dist/lib/resources/aws/database/rdsAurora.js +16 -16
  54. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
  55. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +14 -10
  56. package/dist/lib/resources/aws/database/rdsInstance.d.ts +5 -4
  57. package/dist/lib/resources/aws/database/rdsInstance.js +18 -7
  58. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +1 -2
  59. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -2
  60. package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -4
  61. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -4
  62. package/dist/lib/resources/aws/index.d.ts +1 -0
  63. package/dist/lib/resources/aws/index.js +2 -1
  64. package/dist/lib/resources/aws/logging/cloudTrail.js +7 -4
  65. package/dist/lib/resources/aws/networking/ipamPool.js +21 -3
  66. package/dist/lib/resources/aws/organisation/index.d.ts +4 -0
  67. package/dist/lib/resources/aws/organisation/index.js +10 -0
  68. package/dist/lib/resources/aws/organisation/organisation.d.ts +12 -0
  69. package/dist/lib/resources/aws/organisation/organisation.js +14 -0
  70. package/dist/lib/resources/aws/organisation/organisationAccount.d.ts +18 -0
  71. package/dist/lib/resources/aws/organisation/organisationAccount.js +31 -0
  72. package/dist/lib/resources/aws/organisation/organisationPolicy.d.ts +13 -0
  73. package/dist/lib/resources/aws/organisation/organisationPolicy.js +32 -0
  74. package/dist/lib/resources/aws/organisation/organisationalUnit.d.ts +10 -0
  75. package/dist/lib/resources/aws/organisation/organisationalUnit.js +9 -0
  76. package/dist/lib/resources/aws/secrets/kms.js +10 -7
  77. package/dist/lib/resources/aws/secrets/parameter.js +1 -2
  78. package/dist/lib/resources/aws/storage/ecr.d.ts +3 -1
  79. package/dist/lib/resources/aws/storage/ecr.js +5 -3
  80. package/dist/lib/resources/aws/storage/s3.d.ts +6 -39
  81. package/dist/lib/resources/aws/storage/s3.js +31 -34
  82. package/dist/lib/utils/capitaliseString.d.ts +12 -0
  83. package/dist/lib/utils/capitaliseString.js +30 -0
  84. package/dist/lib/utils/capitalizeString.d.ts +11 -0
  85. package/dist/lib/utils/capitalizeString.js +24 -1
  86. package/dist/lib/utils/getConfig.d.ts +1 -0
  87. package/dist/lib/utils/getConfig.js +9 -1
  88. package/dist/lib/utils/index.d.ts +1 -0
  89. package/dist/lib/utils/index.js +2 -1
  90. package/dist/lib/utils/resourceNaming.d.ts +22 -19
  91. package/dist/lib/utils/resourceNaming.js +42 -35
  92. package/package.json +3 -4
@@ -1,136 +1,26 @@
1
- /**
2
- * Type-safe storage interfaces.
3
- *
4
- * These interfaces provide compile-time type safety for storage resources.
5
- * All S3 bucket types are grouped under the Storage umbrella, with specific
6
- * interfaces for each bucket type.
7
- *
8
- * @example
9
- * const assets = app.addStorage(StorageFactory.build("Assets", { bucketType: "private" }));
10
- * assets.getBucketName(); // ✓ Available on all storage types
11
- *
12
- * const website = app.addStorage(StorageFactory.build("Site", { bucketType: "website" }));
13
- * website.getWebsiteUrl(); // ✓ Available on IWebsiteStorage
14
- */
15
- import { type IBucket, type EventType, type IBucketNotificationDestination, type NotificationKeyFilter } from "aws-cdk-lib/aws-s3";
16
- import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
17
- import { type Construct } from "constructs";
18
- /**
19
- * Storage type discriminator.
20
- * Maps to S3 bucket configurations.
21
- */
22
- export type StorageType = "private" | "website" | "publicRead";
23
- /**
24
- * Base storage interface.
25
- * All storage types implement this interface.
26
- */
1
+ import type { Construct } from "constructs";
2
+ import type { IBucket } from "aws-cdk-lib/aws-s3";
3
+ import type { Grant } from "aws-cdk-lib/aws-iam";
4
+ import type { IGrantable } from "aws-cdk-lib/aws-iam";
5
+ import type { EventType, NotificationKeyFilter, IBucketNotificationDestination } from "aws-cdk-lib/aws-s3";
6
+ import type { BucketDeployment } from "aws-cdk-lib/aws-s3-deployment";
27
7
  export interface IStorage {
28
- /** The type of storage resource. Used for runtime type narrowing. */
29
- readonly storageType: StorageType;
30
- /** The underlying CDK construct node. */
31
8
  readonly node: Construct["node"];
32
- /** Get the underlying S3 bucket. */
33
9
  getBucket(): IBucket;
34
- /** Get the bucket ARN. */
35
- getBucketArn(): string;
36
- /** Get the bucket name. */
37
10
  getBucketName(): string;
38
- /** Get the bucket domain name. */
11
+ getBucketArn(): string;
39
12
  getBucketDomainName(): string;
40
- /** Get the regional bucket domain name. */
41
13
  getBucketRegionalDomainName(): string;
42
- /**
43
- * Grant read permissions to a grantee.
44
- * @param grantee The principal to grant read permissions to
45
- */
14
+ getWebsiteUrl(): string | undefined;
15
+ getDeployment(): BucketDeployment | undefined;
46
16
  grantRead(grantee: IGrantable): Grant;
47
- /**
48
- * Grant write permissions to a grantee.
49
- * @param grantee The principal to grant write permissions to
50
- */
51
17
  grantWrite(grantee: IGrantable): Grant;
52
- /**
53
- * Grant read and write permissions to a grantee.
54
- * @param grantee The principal to grant permissions to
55
- */
56
18
  grantReadWrite(grantee: IGrantable): Grant;
57
- /**
58
- * Grant delete permissions to a grantee.
59
- * @param grantee The principal to grant delete permissions to
60
- */
61
19
  grantDelete(grantee: IGrantable): Grant;
62
- /**
63
- * Grant put permissions to a grantee.
64
- * @param grantee The principal to grant put permissions to
65
- */
66
20
  grantPut(grantee: IGrantable): Grant;
67
- /**
68
- * Add an event notification to the bucket.
69
- * @param event The event type to trigger on
70
- * @param dest The notification destination
71
- * @param filters Optional key filters
72
- */
21
+ grantPublicAccess(...keyPrefix: string[]): Grant;
73
22
  addEventNotification(event: EventType, dest: IBucketNotificationDestination, ...filters: NotificationKeyFilter[]): void;
74
- /**
75
- * Add an object created notification.
76
- * @param dest The notification destination
77
- * @param filters Optional key filters
78
- */
79
23
  addObjectCreatedNotification(dest: IBucketNotificationDestination, ...filters: NotificationKeyFilter[]): void;
80
- /**
81
- * Add an object removed notification.
82
- * @param dest The notification destination
83
- * @param filters Optional key filters
84
- */
85
24
  addObjectRemovedNotification(dest: IBucketNotificationDestination, ...filters: NotificationKeyFilter[]): void;
86
25
  }
87
- /**
88
- * Private storage interface.
89
- * Standard S3 bucket with optional encryption and versioning.
90
- */
91
- export interface IPrivateStorage extends IStorage {
92
- readonly storageType: "private";
93
- /**
94
- * Grant public access to objects under a prefix.
95
- * Use with caution - makes objects publicly readable.
96
- * @param keyPrefix Key prefixes to grant public access to
97
- */
98
- grantPublicAccess(...keyPrefix: string[]): Grant;
99
- }
100
- /**
101
- * Website storage interface.
102
- * S3 bucket configured for static website hosting.
103
- */
104
- export interface IWebsiteStorage extends IStorage {
105
- readonly storageType: "website";
106
- /** Get the website URL. */
107
- getWebsiteUrl(): string;
108
- }
109
- /**
110
- * Public read storage interface.
111
- * S3 bucket with public read access enabled.
112
- */
113
- export interface IPublicStorage extends IStorage {
114
- readonly storageType: "publicRead";
115
- }
116
- /**
117
- * Union type representing any storage interface.
118
- * Use with type guards for generic handling.
119
- */
120
- export type AnyStorage = IPrivateStorage | IWebsiteStorage | IPublicStorage;
121
- /**
122
- * Type guard to check if a storage is private.
123
- */
124
- export declare function isPrivateStorage(storage: IStorage): storage is IPrivateStorage;
125
- /**
126
- * Type guard to check if a storage is a website bucket.
127
- */
128
- export declare function isWebsiteStorage(storage: IStorage): storage is IWebsiteStorage;
129
- /**
130
- * Type guard to check if a storage is public read.
131
- */
132
- export declare function isPublicStorage(storage: IStorage): storage is IPublicStorage;
133
- /**
134
- * Type guard to check if a resource is any storage type.
135
- */
136
26
  export declare function isStorage(resource: unknown): resource is IStorage;
@@ -1,48 +1,11 @@
1
1
  "use strict";
2
- /**
3
- * Type-safe storage interfaces.
4
- *
5
- * These interfaces provide compile-time type safety for storage resources.
6
- * All S3 bucket types are grouped under the Storage umbrella, with specific
7
- * interfaces for each bucket type.
8
- *
9
- * @example
10
- * const assets = app.addStorage(StorageFactory.build("Assets", { bucketType: "private" }));
11
- * assets.getBucketName(); // ✓ Available on all storage types
12
- *
13
- * const website = app.addStorage(StorageFactory.build("Site", { bucketType: "website" }));
14
- * website.getWebsiteUrl(); // ✓ Available on IWebsiteStorage
15
- */
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isPrivateStorage = isPrivateStorage;
18
- exports.isWebsiteStorage = isWebsiteStorage;
19
- exports.isPublicStorage = isPublicStorage;
20
3
  exports.isStorage = isStorage;
21
- /**
22
- * Type guard to check if a storage is private.
23
- */
24
- function isPrivateStorage(storage) {
25
- return storage.storageType === "private";
26
- }
27
- /**
28
- * Type guard to check if a storage is a website bucket.
29
- */
30
- function isWebsiteStorage(storage) {
31
- return storage.storageType === "website";
32
- }
33
- /**
34
- * Type guard to check if a storage is public read.
35
- */
36
- function isPublicStorage(storage) {
37
- return storage.storageType === "publicRead";
38
- }
39
- /**
40
- * Type guard to check if a resource is any storage type.
41
- */
42
4
  function isStorage(resource) {
43
- return (resource !== null &&
44
- typeof resource === "object" &&
45
- "storageType" in resource &&
46
- typeof resource.storageType === "string");
5
+ return (typeof resource === "object" &&
6
+ resource !== null &&
7
+ "getBucket" in resource &&
8
+ "grantRead" in resource &&
9
+ "grantWrite" in resource);
47
10
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaW50ZXJmYWNlcy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQXFKSCw0Q0FJQztBQUtELDRDQUlDO0FBS0QsMENBRUM7QUFLRCw4QkFPQztBQW5DRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixPQUFpQjtJQUVqQixPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixPQUFpQjtJQUVqQixPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFpQjtJQUMvQyxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDO0FBQzlDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxRQUFpQjtJQUN6QyxPQUFPLENBQ0wsUUFBUSxLQUFLLElBQUk7UUFDakIsT0FBTyxRQUFRLEtBQUssUUFBUTtRQUM1QixhQUFhLElBQUksUUFBUTtRQUN6QixPQUFRLFFBQXFCLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FDdkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR5cGUtc2FmZSBzdG9yYWdlIGludGVyZmFjZXMuXG4gKlxuICogVGhlc2UgaW50ZXJmYWNlcyBwcm92aWRlIGNvbXBpbGUtdGltZSB0eXBlIHNhZmV0eSBmb3Igc3RvcmFnZSByZXNvdXJjZXMuXG4gKiBBbGwgUzMgYnVja2V0IHR5cGVzIGFyZSBncm91cGVkIHVuZGVyIHRoZSBTdG9yYWdlIHVtYnJlbGxhLCB3aXRoIHNwZWNpZmljXG4gKiBpbnRlcmZhY2VzIGZvciBlYWNoIGJ1Y2tldCB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhc3NldHMgPSBhcHAuYWRkU3RvcmFnZShTdG9yYWdlRmFjdG9yeS5idWlsZChcIkFzc2V0c1wiLCB7IGJ1Y2tldFR5cGU6IFwicHJpdmF0ZVwiIH0pKTtcbiAqIGFzc2V0cy5nZXRCdWNrZXROYW1lKCk7IC8vIOKckyBBdmFpbGFibGUgb24gYWxsIHN0b3JhZ2UgdHlwZXNcbiAqXG4gKiBjb25zdCB3ZWJzaXRlID0gYXBwLmFkZFN0b3JhZ2UoU3RvcmFnZUZhY3RvcnkuYnVpbGQoXCJTaXRlXCIsIHsgYnVja2V0VHlwZTogXCJ3ZWJzaXRlXCIgfSkpO1xuICogd2Vic2l0ZS5nZXRXZWJzaXRlVXJsKCk7IC8vIOKckyBBdmFpbGFibGUgb24gSVdlYnNpdGVTdG9yYWdlXG4gKi9cblxuaW1wb3J0IHtcbiAgdHlwZSBJQnVja2V0LFxuICB0eXBlIEV2ZW50VHlwZSxcbiAgdHlwZSBJQnVja2V0Tm90aWZpY2F0aW9uRGVzdGluYXRpb24sXG4gIHR5cGUgTm90aWZpY2F0aW9uS2V5RmlsdGVyXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IHR5cGUgSUdyYW50YWJsZSwgdHlwZSBHcmFudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogU3RvcmFnZSB0eXBlIGRpc2NyaW1pbmF0b3IuXG4gKiBNYXBzIHRvIFMzIGJ1Y2tldCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RvcmFnZVR5cGUgPSBcInByaXZhdGVcIiB8IFwid2Vic2l0ZVwiIHwgXCJwdWJsaWNSZWFkXCI7XG5cbi8qKlxuICogQmFzZSBzdG9yYWdlIGludGVyZmFjZS5cbiAqIEFsbCBzdG9yYWdlIHR5cGVzIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3RvcmFnZSB7XG4gIC8qKiBUaGUgdHlwZSBvZiBzdG9yYWdlIHJlc291cmNlLiBVc2VkIGZvciBydW50aW1lIHR5cGUgbmFycm93aW5nLiAqL1xuICByZWFkb25seSBzdG9yYWdlVHlwZTogU3RvcmFnZVR5cGU7XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIENESyBjb25zdHJ1Y3Qgbm9kZS4gKi9cbiAgcmVhZG9ubHkgbm9kZTogQ29uc3RydWN0W1wibm9kZVwiXTtcblxuICAvKiogR2V0IHRoZSB1bmRlcmx5aW5nIFMzIGJ1Y2tldC4gKi9cbiAgZ2V0QnVja2V0KCk6IElCdWNrZXQ7XG5cbiAgLyoqIEdldCB0aGUgYnVja2V0IEFSTi4gKi9cbiAgZ2V0QnVja2V0QXJuKCk6IHN0cmluZztcblxuICAvKiogR2V0IHRoZSBidWNrZXQgbmFtZS4gKi9cbiAgZ2V0QnVja2V0TmFtZSgpOiBzdHJpbmc7XG5cbiAgLyoqIEdldCB0aGUgYnVja2V0IGRvbWFpbiBuYW1lLiAqL1xuICBnZXRCdWNrZXREb21haW5OYW1lKCk6IHN0cmluZztcblxuICAvKiogR2V0IHRoZSByZWdpb25hbCBidWNrZXQgZG9tYWluIG5hbWUuICovXG4gIGdldEJ1Y2tldFJlZ2lvbmFsRG9tYWluTmFtZSgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHdyaXRlIHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZS5cbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCB3cml0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZS5cbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCBkZWxldGUgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGRlbGV0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnREZWxldGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCBwdXQgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHB1dCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRQdXQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgbm90aWZpY2F0aW9uIHRvIHRoZSBidWNrZXQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdHlwZSB0byB0cmlnZ2VyIG9uXG4gICAqIEBwYXJhbSBkZXN0IFRoZSBub3RpZmljYXRpb24gZGVzdGluYXRpb25cbiAgICogQHBhcmFtIGZpbHRlcnMgT3B0aW9uYWwga2V5IGZpbHRlcnNcbiAgICovXG4gIGFkZEV2ZW50Tm90aWZpY2F0aW9uKFxuICAgIGV2ZW50OiBFdmVudFR5cGUsXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvYmplY3QgY3JlYXRlZCBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSBkZXN0IFRoZSBub3RpZmljYXRpb24gZGVzdGluYXRpb25cbiAgICogQHBhcmFtIGZpbHRlcnMgT3B0aW9uYWwga2V5IGZpbHRlcnNcbiAgICovXG4gIGFkZE9iamVjdENyZWF0ZWROb3RpZmljYXRpb24oXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvYmplY3QgcmVtb3ZlZCBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSBkZXN0IFRoZSBub3RpZmljYXRpb24gZGVzdGluYXRpb25cbiAgICogQHBhcmFtIGZpbHRlcnMgT3B0aW9uYWwga2V5IGZpbHRlcnNcbiAgICovXG4gIGFkZE9iamVjdFJlbW92ZWROb3RpZmljYXRpb24oXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQ7XG59XG5cbi8qKlxuICogUHJpdmF0ZSBzdG9yYWdlIGludGVyZmFjZS5cbiAqIFN0YW5kYXJkIFMzIGJ1Y2tldCB3aXRoIG9wdGlvbmFsIGVuY3J5cHRpb24gYW5kIHZlcnNpb25pbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVByaXZhdGVTdG9yYWdlIGV4dGVuZHMgSVN0b3JhZ2Uge1xuICByZWFkb25seSBzdG9yYWdlVHlwZTogXCJwcml2YXRlXCI7XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1YmxpYyBhY2Nlc3MgdG8gb2JqZWN0cyB1bmRlciBhIHByZWZpeC5cbiAgICogVXNlIHdpdGggY2F1dGlvbiAtIG1ha2VzIG9iamVjdHMgcHVibGljbHkgcmVhZGFibGUuXG4gICAqIEBwYXJhbSBrZXlQcmVmaXggS2V5IHByZWZpeGVzIHRvIGdyYW50IHB1YmxpYyBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50UHVibGljQWNjZXNzKC4uLmtleVByZWZpeDogc3RyaW5nW10pOiBHcmFudDtcbn1cblxuLyoqXG4gKiBXZWJzaXRlIHN0b3JhZ2UgaW50ZXJmYWNlLlxuICogUzMgYnVja2V0IGNvbmZpZ3VyZWQgZm9yIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYnNpdGVTdG9yYWdlIGV4dGVuZHMgSVN0b3JhZ2Uge1xuICByZWFkb25seSBzdG9yYWdlVHlwZTogXCJ3ZWJzaXRlXCI7XG5cbiAgLyoqIEdldCB0aGUgd2Vic2l0ZSBVUkwuICovXG4gIGdldFdlYnNpdGVVcmwoKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFB1YmxpYyByZWFkIHN0b3JhZ2UgaW50ZXJmYWNlLlxuICogUzMgYnVja2V0IHdpdGggcHVibGljIHJlYWQgYWNjZXNzIGVuYWJsZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVB1YmxpY1N0b3JhZ2UgZXh0ZW5kcyBJU3RvcmFnZSB7XG4gIHJlYWRvbmx5IHN0b3JhZ2VUeXBlOiBcInB1YmxpY1JlYWRcIjtcbn1cblxuLyoqXG4gKiBVbmlvbiB0eXBlIHJlcHJlc2VudGluZyBhbnkgc3RvcmFnZSBpbnRlcmZhY2UuXG4gKiBVc2Ugd2l0aCB0eXBlIGd1YXJkcyBmb3IgZ2VuZXJpYyBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgQW55U3RvcmFnZSA9IElQcml2YXRlU3RvcmFnZSB8IElXZWJzaXRlU3RvcmFnZSB8IElQdWJsaWNTdG9yYWdlO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSBzdG9yYWdlIGlzIHByaXZhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ByaXZhdGVTdG9yYWdlKFxuICBzdG9yYWdlOiBJU3RvcmFnZVxuKTogc3RvcmFnZSBpcyBJUHJpdmF0ZVN0b3JhZ2Uge1xuICByZXR1cm4gc3RvcmFnZS5zdG9yYWdlVHlwZSA9PT0gXCJwcml2YXRlXCI7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHN0b3JhZ2UgaXMgYSB3ZWJzaXRlIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2Vic2l0ZVN0b3JhZ2UoXG4gIHN0b3JhZ2U6IElTdG9yYWdlXG4pOiBzdG9yYWdlIGlzIElXZWJzaXRlU3RvcmFnZSB7XG4gIHJldHVybiBzdG9yYWdlLnN0b3JhZ2VUeXBlID09PSBcIndlYnNpdGVcIjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgc3RvcmFnZSBpcyBwdWJsaWMgcmVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHVibGljU3RvcmFnZShzdG9yYWdlOiBJU3RvcmFnZSk6IHN0b3JhZ2UgaXMgSVB1YmxpY1N0b3JhZ2Uge1xuICByZXR1cm4gc3RvcmFnZS5zdG9yYWdlVHlwZSA9PT0gXCJwdWJsaWNSZWFkXCI7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHJlc291cmNlIGlzIGFueSBzdG9yYWdlIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0b3JhZ2UocmVzb3VyY2U6IHVua25vd24pOiByZXNvdXJjZSBpcyBJU3RvcmFnZSB7XG4gIHJldHVybiAoXG4gICAgcmVzb3VyY2UgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgcmVzb3VyY2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInN0b3JhZ2VUeXBlXCIgaW4gcmVzb3VyY2UgJiZcbiAgICB0eXBlb2YgKHJlc291cmNlIGFzIElTdG9yYWdlKS5zdG9yYWdlVHlwZSA9PT0gXCJzdHJpbmdcIlxuICApO1xufVxuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaW50ZXJmYWNlcy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNkNBLDhCQVFDO0FBUkQsU0FBZ0IsU0FBUyxDQUFDLFFBQWlCO0lBQ3pDLE9BQU8sQ0FDTCxPQUFPLFFBQVEsS0FBSyxRQUFRO1FBQzVCLFFBQVEsS0FBSyxJQUFJO1FBQ2pCLFdBQVcsSUFBSSxRQUFRO1FBQ3ZCLFdBQVcsSUFBSSxRQUFRO1FBQ3ZCLFlBQVksSUFBSSxRQUFRLENBQ3pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHR5cGUgeyBHcmFudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgdHlwZSB7IElHcmFudGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHR5cGUge1xuICBFdmVudFR5cGUsXG4gIE5vdGlmaWNhdGlvbktleUZpbHRlcixcbiAgSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB0eXBlIHsgQnVja2V0RGVwbG95bWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdG9yYWdlIHtcbiAgcmVhZG9ubHkgbm9kZTogQ29uc3RydWN0W1wibm9kZVwiXTtcblxuICBnZXRCdWNrZXQoKTogSUJ1Y2tldDtcbiAgZ2V0QnVja2V0TmFtZSgpOiBzdHJpbmc7XG4gIGdldEJ1Y2tldEFybigpOiBzdHJpbmc7XG4gIGdldEJ1Y2tldERvbWFpbk5hbWUoKTogc3RyaW5nO1xuICBnZXRCdWNrZXRSZWdpb25hbERvbWFpbk5hbWUoKTogc3RyaW5nO1xuXG4gIGdldFdlYnNpdGVVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBnZXREZXBsb3ltZW50KCk6IEJ1Y2tldERlcGxveW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudDtcbiAgZ3JhbnRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQ7XG4gIGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudDtcbiAgZ3JhbnREZWxldGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50O1xuICBncmFudFB1dChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQ7XG4gIGdyYW50UHVibGljQWNjZXNzKC4uLmtleVByZWZpeDogc3RyaW5nW10pOiBHcmFudDtcblxuICBhZGRFdmVudE5vdGlmaWNhdGlvbihcbiAgICBldmVudDogRXZlbnRUeXBlLFxuICAgIGRlc3Q6IElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgICAuLi5maWx0ZXJzOiBOb3RpZmljYXRpb25LZXlGaWx0ZXJbXVxuICApOiB2b2lkO1xuICBhZGRPYmplY3RDcmVhdGVkTm90aWZpY2F0aW9uKFxuICAgIGRlc3Q6IElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgICAuLi5maWx0ZXJzOiBOb3RpZmljYXRpb25LZXlGaWx0ZXJbXVxuICApOiB2b2lkO1xuICBhZGRPYmplY3RSZW1vdmVkTm90aWZpY2F0aW9uKFxuICAgIGRlc3Q6IElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgICAuLi5maWx0ZXJzOiBOb3RpZmljYXRpb25LZXlGaWx0ZXJbXVxuICApOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdG9yYWdlKHJlc291cmNlOiB1bmtub3duKTogcmVzb3VyY2UgaXMgSVN0b3JhZ2Uge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiByZXNvdXJjZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHJlc291cmNlICE9PSBudWxsICYmXG4gICAgXCJnZXRCdWNrZXRcIiBpbiByZXNvdXJjZSAmJlxuICAgIFwiZ3JhbnRSZWFkXCIgaW4gcmVzb3VyY2UgJiZcbiAgICBcImdyYW50V3JpdGVcIiBpbiByZXNvdXJjZVxuICApO1xufVxuIl19
@@ -0,0 +1,51 @@
1
+ import { type Environment, Stack, type StackProps } from "aws-cdk-lib";
2
+ import { type ICostAllocationTags } from "../../config/aws/costAllocationTags";
3
+ import { OrganisationResource } from "../../resources/aws/organisation";
4
+ type ExtendedStackProps = Omit<StackProps, "env"> & {
5
+ env?: Required<Pick<Environment, "region" | "account">> & Partial<Omit<Environment, "region" | "account">>;
6
+ };
7
+ export type AccountsConfig = {
8
+ readonly [key: string]: readonly string[] | string;
9
+ };
10
+ export interface OrganisationProps extends ExtendedStackProps {
11
+ organisationName: string;
12
+ accounts: AccountsConfig;
13
+ orgEmail: string;
14
+ accountIds?: Record<string, string>;
15
+ costAllocationTags?: ICostAllocationTags[];
16
+ identityCenter?: boolean;
17
+ backupSettings?: {
18
+ enableCrossAccountBackup?: boolean;
19
+ enableDelegatedAdministrator?: boolean;
20
+ enableMpa?: boolean;
21
+ };
22
+ }
23
+ /**
24
+ * Organisation CDK stack.
25
+ *
26
+ * OU creation and account-to-OU placement are handled by CLI pre-deploy steps
27
+ * (AwsAccountService). This stack focuses on:
28
+ * - Account CfnOutput references (for cross-stack consumption)
29
+ * - IPAM delegation, RAM sharing, trusted access
30
+ * - Cost allocation tags, Identity Center, backup settings
31
+ */
32
+ export declare class Organisation extends Stack {
33
+ readonly organisationType: "organisation";
34
+ private org;
35
+ private accountRefs;
36
+ private accountMap;
37
+ private accountsConfig;
38
+ constructor(id: string, props: OrganisationProps);
39
+ private createAccountReferences;
40
+ private setupOrganisationFeatures;
41
+ private getPlatformAccountId;
42
+ private setupIpamDelegation;
43
+ private enableRamSharing;
44
+ private enableTrustedAccess;
45
+ private enableCostAllocationTags;
46
+ private setupIdentityCenter;
47
+ private setupBackupGlobalSettings;
48
+ getOrganisation(): OrganisationResource;
49
+ getAccounts(): Record<string, string>;
50
+ }
51
+ export {};
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Organisation = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const app_1 = require("../../app");
6
+ const backupGlobalSettings_1 = require("../../config/aws/backupGlobalSettings");
7
+ const identityCenter_1 = require("../../config/aws/identityCenter");
8
+ const ipamDelegateAdmin_1 = require("../../config/aws/ipamDelegateAdmin");
9
+ const ramSharing_1 = require("../../config/aws/ramSharing");
10
+ const costAllocationTags_1 = require("../../config/aws/costAllocationTags");
11
+ const organisationsAccess_1 = require("../../config/aws/organisationsAccess");
12
+ const organisation_1 = require("../../resources/aws/organisation");
13
+ const stripAndCamelCase_1 = require("../../utils/stripAndCamelCase");
14
+ const getConfig_1 = require("../../utils/getConfig");
15
+ /**
16
+ * Organisation CDK stack.
17
+ *
18
+ * OU creation and account-to-OU placement are handled by CLI pre-deploy steps
19
+ * (AwsAccountService). This stack focuses on:
20
+ * - Account CfnOutput references (for cross-stack consumption)
21
+ * - IPAM delegation, RAM sharing, trusted access
22
+ * - Cost allocation tags, Identity Center, backup settings
23
+ */
24
+ class Organisation extends aws_cdk_lib_1.Stack {
25
+ constructor(id, props) {
26
+ const config = (0, getConfig_1.getConfig)();
27
+ const env = props.env ?? {
28
+ region: config.region,
29
+ account: config.accountId ?? ""
30
+ };
31
+ if (!env.account) {
32
+ throw new Error("Organisation requires an account ID. Provide it via env.account or ensure CDK context includes accountId.");
33
+ }
34
+ super(app_1.default.getInstance(), id, { ...props, env });
35
+ this.organisationType = "organisation";
36
+ this.accountRefs = [];
37
+ // Normalise account map keys to lowercase for case-insensitive lookups.
38
+ // providerAccounts stores names as lowercase; ACCOUNTS config uses PascalCase.
39
+ const rawMap = props.accountIds ?? config.accountIds ?? {};
40
+ this.accountMap = {};
41
+ for (const [key, value] of Object.entries(rawMap)) {
42
+ this.accountMap[key.toLowerCase()] = value;
43
+ }
44
+ this.accountsConfig = props.accounts;
45
+ const orgId = this.node.tryGetContext("orgId");
46
+ const rootId = this.node.tryGetContext("rootId");
47
+ const managementAccountId = this.node.tryGetContext("managementAccountId") ?? this.account;
48
+ if (!orgId || !rootId) {
49
+ throw new Error("orgId and rootId must be provided via CDK context. Run deployment through the Fjall CLI.");
50
+ }
51
+ this.org = new organisation_1.OrganisationResource(this, "Organisation", {
52
+ orgId,
53
+ rootId,
54
+ managementAccountId
55
+ });
56
+ this.createAccountReferences(props);
57
+ this.setupOrganisationFeatures(props.costAllocationTags ?? config.costAllocationTags, props.identityCenter ?? true, props.backupSettings);
58
+ }
59
+ createAccountReferences(props) {
60
+ for (const [, accountList] of Object.entries(props.accounts)) {
61
+ const accountsArray = Array.isArray(accountList)
62
+ ? accountList
63
+ : [accountList];
64
+ for (const accountName of accountsArray) {
65
+ const accountNameId = (0, stripAndCamelCase_1.stripAndCamelCase)(accountName);
66
+ const accountId = this.accountMap[accountName.toLowerCase()];
67
+ if (!accountId) {
68
+ continue;
69
+ }
70
+ const ref = new organisation_1.OrganisationAccount(this, `${accountNameId}Account`, {
71
+ accountId,
72
+ managementAccountId: this.account,
73
+ orgId: this.org.orgId
74
+ });
75
+ this.accountRefs.push(ref);
76
+ }
77
+ }
78
+ }
79
+ setupOrganisationFeatures(costAllocationTags, identityCenter, backupSettings) {
80
+ const platformAccountId = this.getPlatformAccountId();
81
+ // IPAM delegation requires the Platform account to exist.
82
+ // On first deploy the account IDs aren't yet in config — skip until next deploy.
83
+ if (platformAccountId) {
84
+ this.setupIpamDelegation(platformAccountId);
85
+ }
86
+ this.enableRamSharing();
87
+ this.enableTrustedAccess();
88
+ this.enableCostAllocationTags(costAllocationTags);
89
+ this.setupIdentityCenter(identityCenter);
90
+ this.setupBackupGlobalSettings(backupSettings);
91
+ }
92
+ getPlatformAccountId() {
93
+ const platformEntry = Object.entries(this.accountsConfig).find(([key]) => key.toLowerCase() === "platform");
94
+ if (!platformEntry) {
95
+ return undefined;
96
+ }
97
+ const account = platformEntry[1];
98
+ const platformAccount = Array.isArray(account) ? account[0] : account;
99
+ return this.accountMap[platformAccount.toLowerCase()];
100
+ }
101
+ setupIpamDelegation(platformAccountId) {
102
+ new ipamDelegateAdmin_1.IpamDelegateAdmin(this, "IpamDelegateAdmin", {
103
+ accountId: platformAccountId
104
+ });
105
+ }
106
+ enableRamSharing() {
107
+ new ramSharing_1.RamSharing(this, "RamSharing");
108
+ }
109
+ enableTrustedAccess() {
110
+ new organisationsAccess_1.ActivateOrganisationsAccess(this, "ActivateOrganisationsAccess", {
111
+ account: this.account,
112
+ region: this.region
113
+ });
114
+ }
115
+ enableCostAllocationTags(costAllocationTags) {
116
+ if (costAllocationTags.length > 0) {
117
+ new costAllocationTags_1.CostAllocationTags(this, "CostAllocationTags", {
118
+ costAllocationTags
119
+ });
120
+ }
121
+ }
122
+ setupIdentityCenter(identityCenter) {
123
+ if (identityCenter) {
124
+ new identityCenter_1.IdentityCenter(this, "IdentityCenter", {
125
+ accounts: this.accountMap
126
+ });
127
+ }
128
+ }
129
+ setupBackupGlobalSettings(backupSettings) {
130
+ const defaultSettings = {
131
+ enableCrossAccountBackup: true,
132
+ enableDelegatedAdministrator: true,
133
+ enableMpa: false
134
+ };
135
+ const settings = { ...defaultSettings, ...backupSettings };
136
+ new backupGlobalSettings_1.BackupGlobalSettings(this, "BackupGlobalSettings", {
137
+ account: this.account,
138
+ region: this.region,
139
+ ...settings
140
+ });
141
+ }
142
+ getOrganisation() {
143
+ return this.org;
144
+ }
145
+ getAccounts() {
146
+ return this.accountMap;
147
+ }
148
+ }
149
+ exports.Organisation = Organisation;
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9vcmdhbmlzYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVFO0FBRXZFLG1DQUE0QjtBQUU1QixnRkFBNkU7QUFDN0Usb0VBQWlFO0FBQ2pFLDBFQUF1RTtBQUN2RSw0REFBeUQ7QUFDekQsNEVBRzZDO0FBQzdDLDhFQUFtRjtBQUNuRixtRUFHMEM7QUFDMUMscUVBQWtFO0FBQ2xFLHFEQUFrRDtBQXlCbEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxtQkFBSztJQU9yQyxZQUFZLEVBQVUsRUFBRSxLQUF3QjtRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFTLEdBQUUsQ0FBQztRQUUzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFO1NBQ2hDLENBQUM7UUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkdBQTJHLENBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxDQUFDLGFBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBcEJsQyxxQkFBZ0IsR0FBRyxjQUF1QixDQUFDO1FBRW5ELGdCQUFXLEdBQTBCLEVBQUUsQ0FBQztRQW9COUMsd0VBQXdFO1FBQ3hFLCtFQUErRTtRQUMvRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JC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QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsa0JBQXlDO1FBQ3hFLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksdUNBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQUNqRCxrQkFBa0I7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxjQUF1QjtRQUNqRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksK0JBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVTthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUMvQixjQUFvRDtRQUVwRCxNQUFNLGVBQWUsR0FBRztZQUN0Qix3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLDRCQUE0QixFQUFFLElBQUk7WUFDbEMsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUzRCxJQUFJLDJDQUFvQixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUNyRCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsUUFBUTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBN0tELG9DQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRW52aXJvbm1lbnQsIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCB7IEJhY2t1cEdsb2JhbFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvYmFja3VwR2xvYmFsU2V0dGluZ3NcIjtcbmltcG9ydCB7IElkZW50aXR5Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7IElwYW1EZWxlZ2F0ZUFkbWluIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbURlbGVnYXRlQWRtaW5cIjtcbmltcG9ydCB7IFJhbVNoYXJpbmcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9yYW1TaGFyaW5nXCI7XG5pbXBvcnQge1xuICBDb3N0QWxsb2NhdGlvblRhZ3MsXG4gIHR5cGUgSUNvc3RBbGxvY2F0aW9uVGFnc1xufSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9jb3N0QWxsb2NhdGlvblRhZ3NcIjtcbmltcG9ydCB7IEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2VzcyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvbnNBY2Nlc3NcIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXNhdGlvblJlc291cmNlLFxuICBPcmdhbmlzYXRpb25BY2NvdW50XG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL29yZ2FuaXNhdGlvblwiO1xuaW1wb3J0IHsgc3RyaXBBbmRDYW1lbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaXBBbmRDYW1lbENhc2VcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9nZXRDb25maWdcIjtcblxudHlwZSBFeHRlbmRlZFN0YWNrUHJvcHMgPSBPbWl0PFN0YWNrUHJvcHMsIFwiZW52XCI+ICYge1xuICBlbnY/OiBSZXF1aXJlZDxQaWNrPEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+PiAmXG4gICAgUGFydGlhbDxPbWl0PEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY291bnRzQ29uZmlnID0ge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pc2F0aW9uUHJvcHMgZXh0ZW5kcyBFeHRlbmRlZFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbiAgb3JnRW1haWw6IHN0cmluZztcbiAgYWNjb3VudElkcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNvc3RBbGxvY2F0aW9uVGFncz86IElDb3N0QWxsb2NhdGlvblRhZ3NbXTtcbiAgaWRlbnRpdHlDZW50ZXI/OiBib29sZWFuO1xuICBiYWNrdXBTZXR0aW5ncz86IHtcbiAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA/OiBib29sZWFuO1xuICAgIGVuYWJsZURlbGVnYXRlZEFkbWluaXN0cmF0b3I/OiBib29sZWFuO1xuICAgIGVuYWJsZU1wYT86IGJvb2xlYW47XG4gIH07XG59XG5cbi8qKlxuICogT3JnYW5pc2F0aW9uIENESyBzdGFjay5cbiAqXG4gKiBPVSBjcmVhdGlvbiBhbmQgYWNjb3VudC10by1PVSBwbGFjZW1lbnQgYXJlIGhhbmRsZWQgYnkgQ0xJIHByZS1kZXBsb3kgc3RlcHNcbiAqIChBd3NBY2NvdW50U2VydmljZSkuIFRoaXMgc3RhY2sgZm9jdXNlcyBvbjpcbiAqIC0gQWNjb3VudCBDZm5PdXRwdXQgcmVmZXJlbmNlcyAoZm9yIGNyb3NzLXN0YWNrIGNvbnN1bXB0aW9uKVxuICogLSBJUEFNIGRlbGVnYXRpb24sIFJBTSBzaGFyaW5nLCB0cnVzdGVkIGFjY2Vzc1xuICogLSBDb3N0IGFsbG9jYXRpb24gdGFncywgSWRlbnRpdHkgQ2VudGVyLCBiYWNrdXAgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbiBleHRlbmRzIFN0YWNrIHtcbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXNhdGlvblR5cGUgPSBcIm9yZ2FuaXNhdGlvblwiIGFzIGNvbnN0O1xuICBwcml2YXRlIG9yZzogT3JnYW5pc2F0aW9uUmVzb3VyY2U7XG4gIHByaXZhdGUgYWNjb3VudFJlZnM6IE9yZ2FuaXNhdGlvbkFjY291bnRbXSA9IFtdO1xuICBwcml2YXRlIGFjY291bnRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgYWNjb3VudHNDb25maWc6IEFjY291bnRzQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHByb3BzOiBPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuXG4gICAgY29uc3QgZW52ID0gcHJvcHMuZW52ID8/IHtcbiAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50SWQgPz8gXCJcIlxuICAgIH07XG5cbiAgICBpZiAoIWVudi5hY2NvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT3JnYW5pc2F0aW9uIHJlcXVpcmVzIGFuIGFjY291bnQgSUQuIFByb3ZpZGUgaXQgdmlhIGVudi5hY2NvdW50IG9yIGVuc3VyZSBDREsgY29udGV4dCBpbmNsdWRlcyBhY2NvdW50SWQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIoQXBwLmdldEluc3RhbmNlKCksIGlkLCB7IC4uLnByb3BzLCBlbnYgfSk7XG5cbiAgICAvLyBOb3JtYWxpc2UgYWNjb3VudCBtYXAga2V5cyB0byBsb3dlcmNhc2UgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbG9va3Vwcy5cbiAgICAvLyBwcm92aWRlckFjY291bnRzIHN0b3JlcyBuYW1lcyBhcyBsb3dlcmNhc2U7IEFDQ09VTlRTIGNvbmZpZyB1c2VzIFBhc2NhbENhc2UuXG4gICAgY29uc3QgcmF3TWFwID0gcHJvcHMuYWNjb3VudElkcyA/PyBjb25maWcuYWNjb3VudElkcyA/PyB7fTtcbiAgICB0aGlzLmFjY291bnRNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXdNYXApKSB7XG4gICAgICB0aGlzLmFjY291bnRNYXBba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuYWNjb3VudHNDb25maWcgPSBwcm9wcy5hY2NvdW50cztcblxuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJvcmdJZFwiKTtcbiAgICBjb25zdCByb290SWQgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcInJvb3RJZFwiKTtcbiAgICBjb25zdCBtYW5hZ2VtZW50QWNjb3VudElkID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlbWVudEFjY291bnRJZFwiKSA/PyB0aGlzLmFjY291bnQ7XG5cbiAgICBpZiAoIW9yZ0lkIHx8ICFyb290SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJvcmdJZCBhbmQgcm9vdElkIG11c3QgYmUgcHJvdmlkZWQgdmlhIENESyBjb250ZXh0LiBSdW4gZGVwbG95bWVudCB0aHJvdWdoIHRoZSBGamFsbCBDTEkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmcgPSBuZXcgT3JnYW5pc2F0aW9uUmVzb3VyY2UodGhpcywgXCJPcmdhbmlzYXRpb25cIiwge1xuICAgICAgb3JnSWQsXG4gICAgICByb290SWQsXG4gICAgICBtYW5hZ2VtZW50QWNjb3VudElkXG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wcyk7XG4gICAgdGhpcy5zZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKFxuICAgICAgcHJvcHMuY29zdEFsbG9jYXRpb25UYWdzID8/IGNvbmZpZy5jb3N0QWxsb2NhdGlvblRhZ3MsXG4gICAgICBwcm9wcy5pZGVudGl0eUNlbnRlciA/PyB0cnVlLFxuICAgICAgcHJvcHMuYmFja3VwU2V0dGluZ3NcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wczogT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IFssIGFjY291bnRMaXN0XSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykpIHtcbiAgICAgIGNvbnN0IGFjY291bnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGFjY291bnRMaXN0KVxuICAgICAgICA/IGFjY291bnRMaXN0XG4gICAgICAgIDogW2FjY291bnRMaXN0XTtcblxuICAgICAgZm9yIChjb25zdCBhY2NvdW50TmFtZSBvZiBhY2NvdW50c0FycmF5KSB7XG4gICAgICAgIGNvbnN0IGFjY291bnROYW1lSWQgPSBzdHJpcEFuZENhbWVsQ2FzZShhY2NvdW50TmFtZSk7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IHRoaXMuYWNjb3VudE1hcFthY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoIWFjY291bnRJZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gbmV3IE9yZ2FuaXNhdGlvbkFjY291bnQodGhpcywgYCR7YWNjb3VudE5hbWVJZH1BY2NvdW50YCwge1xuICAgICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgICBtYW5hZ2VtZW50QWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMub3JnLm9yZ0lkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWNjb3VudFJlZnMucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyhcbiAgICBjb3N0QWxsb2NhdGlvblRhZ3M6IElDb3N0QWxsb2NhdGlvblRhZ3NbXSxcbiAgICBpZGVudGl0eUNlbnRlcjogYm9vbGVhbixcbiAgICBiYWNrdXBTZXR0aW5ncz86IE9yZ2FuaXNhdGlvblByb3BzW1wiYmFja3VwU2V0dGluZ3NcIl1cbiAgKSB7XG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50SWQgPSB0aGlzLmdldFBsYXRmb3JtQWNjb3VudElkKCk7XG5cbiAgICAvLyBJUEFNIGRlbGVnYXRpb24gcmVxdWlyZXMgdGhlIFBsYXRmb3JtIGFjY291bnQgdG8gZXhpc3QuXG4gICAgLy8gT24gZmlyc3QgZGVwbG95IHRoZSBhY2NvdW50IElEcyBhcmVuJ3QgeWV0IGluIGNvbmZpZyDigJQgc2tpcCB1bnRpbCBuZXh0IGRlcGxveS5cbiAgICBpZiAocGxhdGZvcm1BY2NvdW50SWQpIHtcbiAgICAgIHRoaXMuc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVSYW1TaGFyaW5nKCk7XG4gICAgdGhpcy5lbmFibGVUcnVzdGVkQWNjZXNzKCk7XG4gICAgdGhpcy5lbmFibGVDb3N0QWxsb2NhdGlvblRhZ3MoY29zdEFsbG9jYXRpb25UYWdzKTtcbiAgICB0aGlzLnNldHVwSWRlbnRpdHlDZW50ZXIoaWRlbnRpdHlDZW50ZXIpO1xuICAgIHRoaXMuc2V0dXBCYWNrdXBHbG9iYWxTZXR0aW5ncyhiYWNrdXBTZXR0aW5ncyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBsYXRmb3JtQWNjb3VudElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGxhdGZvcm1FbnRyeSA9IE9iamVjdC5lbnRyaWVzKHRoaXMuYWNjb3VudHNDb25maWcpLmZpbmQoXG4gICAgICAoW2tleV0pID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBcInBsYXRmb3JtXCJcbiAgICApO1xuXG4gICAgaWYgKCFwbGF0Zm9ybUVudHJ5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnQgPSBwbGF0Zm9ybUVudHJ5WzFdO1xuICAgIGNvbnN0IHBsYXRmb3JtQWNjb3VudCA9IEFycmF5LmlzQXJyYXkoYWNjb3VudCkgPyBhY2NvdW50WzBdIDogYWNjb3VudDtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50TWFwW3BsYXRmb3JtQWNjb3VudC50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZDogc3RyaW5nKSB7XG4gICAgbmV3IElwYW1EZWxlZ2F0ZUFkbWluKHRoaXMsIFwiSXBhbURlbGVnYXRlQWRtaW5cIiwge1xuICAgICAgYWNjb3VudElkOiBwbGF0Zm9ybUFjY291bnRJZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVSYW1TaGFyaW5nKCkge1xuICAgIG5ldyBSYW1TaGFyaW5nKHRoaXMsIFwiUmFtU2hhcmluZ1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlVHJ1c3RlZEFjY2VzcygpIHtcbiAgICBuZXcgQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzKHRoaXMsIFwiQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzXCIsIHtcbiAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb25cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKGNvc3RBbGxvY2F0aW9uVGFnczogSUNvc3RBbGxvY2F0aW9uVGFnc1tdKSB7XG4gICAgaWYgKGNvc3RBbGxvY2F0aW9uVGFncy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXcgQ29zdEFsbG9jYXRpb25UYWdzKHRoaXMsIFwiQ29zdEFsbG9jYXRpb25UYWdzXCIsIHtcbiAgICAgICAgY29zdEFsbG9jYXRpb25UYWdzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWRlbnRpdHlDZW50ZXIoaWRlbnRpdHlDZW50ZXI6IGJvb2xlYW4pIHtcbiAgICBpZiAoaWRlbnRpdHlDZW50ZXIpIHtcbiAgICAgIG5ldyBJZGVudGl0eUNlbnRlcih0aGlzLCBcIklkZW50aXR5Q2VudGVyXCIsIHtcbiAgICAgICAgYWNjb3VudHM6IHRoaXMuYWNjb3VudE1hcFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJhY2t1cEdsb2JhbFNldHRpbmdzKFxuICAgIGJhY2t1cFNldHRpbmdzPzogT3JnYW5pc2F0aW9uUHJvcHNbXCJiYWNrdXBTZXR0aW5nc1wiXVxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA6IHRydWUsXG4gICAgICBlbmFibGVEZWxlZ2F0ZWRBZG1pbmlzdHJhdG9yOiB0cnVlLFxuICAgICAgZW5hYmxlTXBhOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHsgLi4uZGVmYXVsdFNldHRpbmdzLCAuLi5iYWNrdXBTZXR0aW5ncyB9O1xuXG4gICAgbmV3IEJhY2t1cEdsb2JhbFNldHRpbmdzKHRoaXMsIFwiQmFja3VwR2xvYmFsU2V0dGluZ3NcIiwge1xuICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T3JnYW5pc2F0aW9uKCk6IE9yZ2FuaXNhdGlvblJlc291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5vcmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjb3VudHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudE1hcDtcbiAgfVxufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { type Construct } from "constructs";
2
+ import { Organisation, type OrganisationProps, type AccountsConfig } from "./organisation";
3
+ import { Platform, type PlatformProps } from "./platform";
4
+ import { Account, type AccountProps } from "./account";
5
+ export interface IOrganisationProps extends OrganisationProps {
6
+ type: "organisation";
7
+ }
8
+ export interface IPlatformProps extends PlatformProps {
9
+ type: "platform";
10
+ }
11
+ export interface IAccountProps extends AccountProps {
12
+ type: "account";
13
+ }
14
+ export type AnyOrganisationProps = IOrganisationProps | IPlatformProps | IAccountProps;
15
+ export declare class OrganisationFactory {
16
+ static build(id: string, props: IOrganisationProps): Organisation;
17
+ static build(id: string, props: IPlatformProps): (scope: Construct) => Platform;
18
+ static build(id: string, props: IAccountProps): (scope: Construct) => Account;
19
+ }
20
+ export type { AccountsConfig };
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OrganisationFactory = void 0;
4
+ const organisation_1 = require("./organisation");
5
+ const platform_1 = require("./platform");
6
+ const account_1 = require("./account");
7
+ class OrganisationFactory {
8
+ static build(id, props) {
9
+ switch (props.type) {
10
+ case "organisation":
11
+ return new organisation_1.Organisation(id, props);
12
+ case "platform":
13
+ return (scope) => new platform_1.Platform(scope, id, props);
14
+ case "account":
15
+ return (scope) => new account_1.Account(scope, id, props);
16
+ default: {
17
+ const _exhaustive = props;
18
+ throw new Error(`Unsupported organisation type: ${String(_exhaustive.type)}`);
19
+ }
20
+ }
21
+ }
22
+ }
23
+ exports.OrganisationFactory = OrganisationFactory;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvb3JnYW5pc2F0aW9uRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFJd0I7QUFDeEIseUNBQTBEO0FBQzFELHVDQUF1RDtBQW1CdkQsTUFBYSxtQkFBbUI7SUFPOUIsTUFBTSxDQUFDLEtBQUssQ0FDVixFQUFVLEVBQ1YsS0FBMkI7UUFFM0IsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsS0FBSyxjQUFjO2dCQUNqQixPQUFPLElBQUksMkJBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckMsS0FBSyxVQUFVO2dCQUNiLE9BQU8sQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLG1CQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksaUJBQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsTUFBTSxXQUFXLEdBQVUsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUNiLGtDQUFrQyxNQUFNLENBQUUsV0FBb0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN2RixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExQkQsa0RBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgT3JnYW5pc2F0aW9uLFxuICB0eXBlIE9yZ2FuaXNhdGlvblByb3BzLFxuICB0eXBlIEFjY291bnRzQ29uZmlnXG59IGZyb20gXCIuL29yZ2FuaXNhdGlvblwiO1xuaW1wb3J0IHsgUGxhdGZvcm0sIHR5cGUgUGxhdGZvcm1Qcm9wcyB9IGZyb20gXCIuL3BsYXRmb3JtXCI7XG5pbXBvcnQgeyBBY2NvdW50LCB0eXBlIEFjY291bnRQcm9wcyB9IGZyb20gXCIuL2FjY291bnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJT3JnYW5pc2F0aW9uUHJvcHMgZXh0ZW5kcyBPcmdhbmlzYXRpb25Qcm9wcyB7XG4gIHR5cGU6IFwib3JnYW5pc2F0aW9uXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBsYXRmb3JtUHJvcHMgZXh0ZW5kcyBQbGF0Zm9ybVByb3BzIHtcbiAgdHlwZTogXCJwbGF0Zm9ybVwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBY2NvdW50UHJvcHMgZXh0ZW5kcyBBY2NvdW50UHJvcHMge1xuICB0eXBlOiBcImFjY291bnRcIjtcbn1cblxuZXhwb3J0IHR5cGUgQW55T3JnYW5pc2F0aW9uUHJvcHMgPVxuICB8IElPcmdhbmlzYXRpb25Qcm9wc1xuICB8IElQbGF0Zm9ybVByb3BzXG4gIHwgSUFjY291bnRQcm9wcztcblxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbkZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM6IElPcmdhbmlzYXRpb25Qcm9wcyk6IE9yZ2FuaXNhdGlvbjtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElQbGF0Zm9ybVByb3BzXG4gICk6IChzY29wZTogQ29uc3RydWN0KSA9PiBQbGF0Zm9ybTtcbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBJQWNjb3VudFByb3BzKTogKHNjb3BlOiBDb25zdHJ1Y3QpID0+IEFjY291bnQ7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBbnlPcmdhbmlzYXRpb25Qcm9wc1xuICApOiBPcmdhbmlzYXRpb24gfCAoKHNjb3BlOiBDb25zdHJ1Y3QpID0+IFBsYXRmb3JtIHwgQWNjb3VudCkge1xuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSBcIm9yZ2FuaXNhdGlvblwiOlxuICAgICAgICByZXR1cm4gbmV3IE9yZ2FuaXNhdGlvbihpZCwgcHJvcHMpO1xuICAgICAgY2FzZSBcInBsYXRmb3JtXCI6XG4gICAgICAgIHJldHVybiAoc2NvcGU6IENvbnN0cnVjdCkgPT4gbmV3IFBsYXRmb3JtKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgICAgY2FzZSBcImFjY291bnRcIjpcbiAgICAgICAgcmV0dXJuIChzY29wZTogQ29uc3RydWN0KSA9PiBuZXcgQWNjb3VudChzY29wZSwgaWQsIHByb3BzKTtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gcHJvcHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5zdXBwb3J0ZWQgb3JnYW5pc2F0aW9uIHR5cGU6ICR7U3RyaW5nKChfZXhoYXVzdGl2ZSBhcyBBbnlPcmdhbmlzYXRpb25Qcm9wcykudHlwZSl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSB7IEFjY291bnRzQ29uZmlnIH07XG4iXX0=
@@ -49,7 +49,7 @@ export declare class PatternFactory {
49
49
  * - S3 buckets (assets, cache, media)
50
50
  * - DynamoDB table (tag cache)
51
51
  * - SQS FIFO queue (revalidation)
52
- * - Lambda functions (server, image optimization, revalidation)
52
+ * - Lambda functions (server, image optimisation, revalidation)
53
53
  * - CloudFront distribution
54
54
  *
55
55
  * @param id - Construct ID (used for resource naming)
@@ -66,4 +66,4 @@ exports.PatternFactory = PatternFactory;
66
66
  var pattern_js_1 = require("./interfaces/pattern.js");
67
67
  Object.defineProperty(exports, "isPayloadPattern", { enumerable: true, get: function () { return pattern_js_1.isPayloadPattern; } });
68
68
  Object.defineProperty(exports, "isPattern", { enumerable: true, get: function () { return pattern_js_1.isPattern; } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF0dGVybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7OztBQUtILDZDQUF1QztBQWtFOUIsd0ZBbEVBLG9CQUFPLE9Ba0VBO0FBM0RoQjs7Ozs7R0FLRztBQUNILE1BQWEsY0FBYztJQTZCekI7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FDVixFQUFVLEVBQ1YsS0FBb0I7UUFFcEIsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFjLEVBQUU7WUFDaEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztZQUN2QixRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssU0FBUztvQkFDWixPQUFPLElBQUksb0JBQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUix5REFBeUQ7b0JBQ3pELE1BQU0sV0FBVyxHQUFVLElBQUksQ0FBQztvQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFsREQsd0NBa0RDO0FBY0Qsd0JBQXdCO0FBQ3hCLHNEQUFzRTtBQUE3RCw4R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLHVHQUFBLFNBQVMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGF0dGVybiBGYWN0b3J5IGZvciBIaWdoLUxldmVsIEluZnJhc3RydWN0dXJlIFBhdHRlcm5zLlxuICpcbiAqIFBhdHRlcm5GYWN0b3J5IGNyZWF0ZXMgY29tcG9zaXRlIGluZnJhc3RydWN0dXJlIHBhdHRlcm5zIHRoYXQgZW5jYXBzdWxhdGVcbiAqIG11bHRpcGxlIHJlbGF0ZWQgcmVzb3VyY2VzIGludG8gYSBzaW5nbGUsIGNvaGVzaXZlIHVuaXQuIFRoaXMgcmVkdWNlc1xuICogYm9pbGVycGxhdGUgYW5kIGVuc3VyZXMgYmVzdCBwcmFjdGljZXMgZm9yIGNvbW1vbiBkZXBsb3ltZW50IHNjZW5hcmlvcy5cbiAqXG4gKiBDdXJyZW50bHkgc3VwcG9ydGVkIHBhdHRlcm5zOlxuICogLSBgcGF5bG9hZGA6IFBheWxvYWQgQ01TIGRlcGxveW1lbnQgd2l0aCBPcGVuTmV4dFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNaW5pbWFsIC0gd29ya3Mgb3V0IG9mIGJveFxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiLFxuICogICBzb3VyY2U6IFwiLi4vLi5cIlxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b21pc2VkIHdpdGggZXNjYXBlIGhhdGNoZXNcbiAqIGNvbnN0IHBheWxvYWQgPSBhcHAuYWRkUGF0dGVybihQYXR0ZXJuRmFjdG9yeS5idWlsZChcIlBheWxvYWRBcHBcIiwge1xuICogICB0eXBlOiBcInBheWxvYWRcIixcbiAqICAgbmFtZTogXCJteS1jbXNcIixcbiAqICAgc291cmNlOiBcIi4uLy4uXCIsXG4gKiAgIGRhdGFiYXNlOiB7IHR5cGU6IFwiQXVyb3JhXCIsIHB1YmxpY2x5QWNjZXNzaWJsZTogZmFsc2UgfSxcbiAqICAgY29tcHV0ZTogeyBtZW1vcnlTaXplOiAyMDQ4IH1cbiAqIH0pKTtcbiAqXG4gKiAvLyBBY2Nlc3MgdW5kZXJseWluZyByZXNvdXJjZXMgZm9yIGFkdmFuY2VkIGN1c3RvbWlzYXRpb25cbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICogcGF5bG9hZC5nZXRTZXJ2ZXIoKS5nZXRMYW1iZGFGdW5jdGlvbigpLmFkZEVudmlyb25tZW50KFwiQ1VTVE9NXCIsIFwidmFsdWVcIik7XG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcC5qc1wiO1xuaW1wb3J0IHsgUGF5bG9hZCB9IGZyb20gXCIuL3BheWxvYWQuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgSVBheWxvYWRQcm9wcyxcbiAgdHlwZSBJUGF0dGVyblByb3BzLFxuICB0eXBlIEFueVBhdHRlcm5cbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXR0ZXJuLmpzXCI7XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgaGlnaC1sZXZlbCBpbmZyYXN0cnVjdHVyZSBwYXR0ZXJucy5cbiAqXG4gKiBVc2VzIGRpc2NyaW1pbmF0ZWQgdW5pb24gKHR5cGU6IFwicGF5bG9hZFwiIHwgLi4uKSB0byByb3V0ZSB0byBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuXG4gKiBFYWNoIHBhdHRlcm4gdHlwZSBoYXMgc3BlY2lmaWMgcHJvcHMgYW5kIHJldHVybnMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXR0ZXJuRmFjdG9yeSB7XG4gIC8qKlxuICAgKiBCdWlsZCBhIFBheWxvYWQgQ01TIHBhdHRlcm4uXG4gICAqXG4gICAqIENyZWF0ZXMgYSBjb21wbGV0ZSBQYXlsb2FkIENNUyBpbmZyYXN0cnVjdHVyZTpcbiAgICogLSBSRFMgUG9zdGdyZVNRTCBkYXRhYmFzZSAoQXVyb3JhIG9yIEluc3RhbmNlKVxuICAgKiAtIFMzIGJ1Y2tldHMgKGFzc2V0cywgY2FjaGUsIG1lZGlhKVxuICAgKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUpXG4gICAqIC0gU1FTIEZJRk8gcXVldWUgKHJldmFsaWRhdGlvbilcbiAgICogLSBMYW1iZGEgZnVuY3Rpb25zIChzZXJ2ZXIsIGltYWdlIG9wdGltaXphdGlvbiwgcmV2YWxpZGF0aW9uKVxuICAgKiAtIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBJRCAodXNlZCBmb3IgcmVzb3VyY2UgbmFtaW5nKVxuICAgKiBAcGFyYW0gcHJvcHMgLSBQYXlsb2FkIHBhdHRlcm4gY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgcGF0dGVyblxuICAgKi9cbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElQYXlsb2FkUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBQYXlsb2FkO1xuXG4gIC8qKlxuICAgKiBHZW5lcmljIGJ1aWxkIG1ldGhvZCAoaW1wbGVtZW50YXRpb24gc2lnbmF0dXJlKS5cbiAgICovXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJUGF0dGVyblByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQW55UGF0dGVybjtcblxuICAvKipcbiAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGJ1aWxkIG1ldGhvZC5cbiAgICogUm91dGVzIHRvIHNwZWNpZmljIHBhdHRlcm4gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHR5cGUgZGlzY3JpbWluYXRvci5cbiAgICovXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJUGF0dGVyblByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQW55UGF0dGVybiB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCk6IEFueVBhdHRlcm4gPT4ge1xuICAgICAgY29uc3QgeyB0eXBlIH0gPSBwcm9wcztcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwicGF5bG9hZFwiOlxuICAgICAgICAgIHJldHVybiBuZXcgUGF5bG9hZChzY29wZSwgaWQsIGFwcCwgcHJvcHMpO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgLy8gRXhoYXVzdGl2ZSBjaGVjayBlbnN1cmVzIGFsbCBwYXR0ZXJuIHR5cGVzIGFyZSBoYW5kbGVkXG4gICAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gdHlwZTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHBhdHRlcm4gdHlwZTogJHtTdHJpbmcoX2V4aGF1c3RpdmUpfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyBSZS1leHBvcnQgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBQYXlsb2FkIH07XG5leHBvcnQgdHlwZSB7XG4gIElQYXlsb2FkUHJvcHMsXG4gIElQYXR0ZXJuUHJvcHMsXG4gIEFueVBhdHRlcm4sXG4gIElQYXlsb2FkLFxuICBQYXlsb2FkRGF0YWJhc2VDb25maWcsXG4gIFBheWxvYWRDb21wdXRlQ29uZmlnLFxuICBQYXlsb2FkQ2RuQ29uZmlnXG59IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuXG4vLyBSZS1leHBvcnQgdHlwZSBndWFyZHNcbmV4cG9ydCB7IGlzUGF5bG9hZFBhdHRlcm4sIGlzUGF0dGVybiB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF0dGVybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7OztBQUtILDZDQUF1QztBQWtFOUIsd0ZBbEVBLG9CQUFPLE9Ba0VBO0FBM0RoQjs7Ozs7R0FLRztBQUNILE1BQWEsY0FBYztJQTZCekI7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FDVixFQUFVLEVBQ1YsS0FBb0I7UUFFcEIsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFjLEVBQUU7WUFDaEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztZQUN2QixRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssU0FBUztvQkFDWixPQUFPLElBQUksb0JBQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUix5REFBeUQ7b0JBQ3pELE1BQU0sV0FBVyxHQUFVLElBQUksQ0FBQztvQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFsREQsd0NBa0RDO0FBY0Qsd0JBQXdCO0FBQ3hCLHNEQUFzRTtBQUE3RCw4R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLHVHQUFBLFNBQVMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGF0dGVybiBGYWN0b3J5IGZvciBIaWdoLUxldmVsIEluZnJhc3RydWN0dXJlIFBhdHRlcm5zLlxuICpcbiAqIFBhdHRlcm5GYWN0b3J5IGNyZWF0ZXMgY29tcG9zaXRlIGluZnJhc3RydWN0dXJlIHBhdHRlcm5zIHRoYXQgZW5jYXBzdWxhdGVcbiAqIG11bHRpcGxlIHJlbGF0ZWQgcmVzb3VyY2VzIGludG8gYSBzaW5nbGUsIGNvaGVzaXZlIHVuaXQuIFRoaXMgcmVkdWNlc1xuICogYm9pbGVycGxhdGUgYW5kIGVuc3VyZXMgYmVzdCBwcmFjdGljZXMgZm9yIGNvbW1vbiBkZXBsb3ltZW50IHNjZW5hcmlvcy5cbiAqXG4gKiBDdXJyZW50bHkgc3VwcG9ydGVkIHBhdHRlcm5zOlxuICogLSBgcGF5bG9hZGA6IFBheWxvYWQgQ01TIGRlcGxveW1lbnQgd2l0aCBPcGVuTmV4dFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNaW5pbWFsIC0gd29ya3Mgb3V0IG9mIGJveFxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiLFxuICogICBzb3VyY2U6IFwiLi4vLi5cIlxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b21pc2VkIHdpdGggZXNjYXBlIGhhdGNoZXNcbiAqIGNvbnN0IHBheWxvYWQgPSBhcHAuYWRkUGF0dGVybihQYXR0ZXJuRmFjdG9yeS5idWlsZChcIlBheWxvYWRBcHBcIiwge1xuICogICB0eXBlOiBcInBheWxvYWRcIixcbiAqICAgbmFtZTogXCJteS1jbXNcIixcbiAqICAgc291cmNlOiBcIi4uLy4uXCIsXG4gKiAgIGRhdGFiYXNlOiB7IHR5cGU6IFwiQXVyb3JhXCIsIHB1YmxpY2x5QWNjZXNzaWJsZTogZmFsc2UgfSxcbiAqICAgY29tcHV0ZTogeyBtZW1vcnlTaXplOiAyMDQ4IH1cbiAqIH0pKTtcbiAqXG4gKiAvLyBBY2Nlc3MgdW5kZXJseWluZyByZXNvdXJjZXMgZm9yIGFkdmFuY2VkIGN1c3RvbWlzYXRpb25cbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICogcGF5bG9hZC5nZXRTZXJ2ZXIoKS5nZXRMYW1iZGFGdW5jdGlvbigpLmFkZEVudmlyb25tZW50KFwiQ1VTVE9NXCIsIFwidmFsdWVcIik7XG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcC5qc1wiO1xuaW1wb3J0IHsgUGF5bG9hZCB9IGZyb20gXCIuL3BheWxvYWQuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgSVBheWxvYWRQcm9wcyxcbiAgdHlwZSBJUGF0dGVyblByb3BzLFxuICB0eXBlIEFueVBhdHRlcm5cbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXR0ZXJuLmpzXCI7XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgaGlnaC1sZXZlbCBpbmZyYXN0cnVjdHVyZSBwYXR0ZXJucy5cbiAqXG4gKiBVc2VzIGRpc2NyaW1pbmF0ZWQgdW5pb24gKHR5cGU6IFwicGF5bG9hZFwiIHwgLi4uKSB0byByb3V0ZSB0byBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuXG4gKiBFYWNoIHBhdHRlcm4gdHlwZSBoYXMgc3BlY2lmaWMgcHJvcHMgYW5kIHJldHVybnMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXR0ZXJuRmFjdG9yeSB7XG4gIC8qKlxuICAgKiBCdWlsZCBhIFBheWxvYWQgQ01TIHBhdHRlcm4uXG4gICAqXG4gICAqIENyZWF0ZXMgYSBjb21wbGV0ZSBQYXlsb2FkIENNUyBpbmZyYXN0cnVjdHVyZTpcbiAgICogLSBSRFMgUG9zdGdyZVNRTCBkYXRhYmFzZSAoQXVyb3JhIG9yIEluc3RhbmNlKVxuICAgKiAtIFMzIGJ1Y2tldHMgKGFzc2V0cywgY2FjaGUsIG1lZGlhKVxuICAgKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUpXG4gICAqIC0gU1FTIEZJRk8gcXVldWUgKHJldmFsaWRhdGlvbilcbiAgICogLSBMYW1iZGEgZnVuY3Rpb25zIChzZXJ2ZXIsIGltYWdlIG9wdGltaXNhdGlvbiwgcmV2YWxpZGF0aW9uKVxuICAgKiAtIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBJRCAodXNlZCBmb3IgcmVzb3VyY2UgbmFtaW5nKVxuICAgKiBAcGFyYW0gcHJvcHMgLSBQYXlsb2FkIHBhdHRlcm4gY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgcGF0dGVyblxuICAgKi9cbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElQYXlsb2FkUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBQYXlsb2FkO1xuXG4gIC8qKlxuICAgKiBHZW5lcmljIGJ1aWxkIG1ldGhvZCAoaW1wbGVtZW50YXRpb24gc2lnbmF0dXJlKS5cbiAgICovXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJUGF0dGVyblByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQW55UGF0dGVybjtcblxuICAvKipcbiAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGJ1aWxkIG1ldGhvZC5cbiAgICogUm91dGVzIHRvIHNwZWNpZmljIHBhdHRlcm4gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHR5cGUgZGlzY3JpbWluYXRvci5cbiAgICovXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJUGF0dGVyblByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQW55UGF0dGVybiB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCk6IEFueVBhdHRlcm4gPT4ge1xuICAgICAgY29uc3QgeyB0eXBlIH0gPSBwcm9wcztcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwicGF5bG9hZFwiOlxuICAgICAgICAgIHJldHVybiBuZXcgUGF5bG9hZChzY29wZSwgaWQsIGFwcCwgcHJvcHMpO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgLy8gRXhoYXVzdGl2ZSBjaGVjayBlbnN1cmVzIGFsbCBwYXR0ZXJuIHR5cGVzIGFyZSBoYW5kbGVkXG4gICAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gdHlwZTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHBhdHRlcm4gdHlwZTogJHtTdHJpbmcoX2V4aGF1c3RpdmUpfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyBSZS1leHBvcnQgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBQYXlsb2FkIH07XG5leHBvcnQgdHlwZSB7XG4gIElQYXlsb2FkUHJvcHMsXG4gIElQYXR0ZXJuUHJvcHMsXG4gIEFueVBhdHRlcm4sXG4gIElQYXlsb2FkLFxuICBQYXlsb2FkRGF0YWJhc2VDb25maWcsXG4gIFBheWxvYWRDb21wdXRlQ29uZmlnLFxuICBQYXlsb2FkQ2RuQ29uZmlnXG59IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuXG4vLyBSZS1leHBvcnQgdHlwZSBndWFyZHNcbmV4cG9ydCB7IGlzUGF5bG9hZFBhdHRlcm4sIGlzUGF0dGVybiB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuIl19
@@ -26,7 +26,7 @@ import type App from "../../app.js";
26
26
  import { type IPayloadProps, type IPayload } from "./interfaces/pattern.js";
27
27
  import { type RelationalDatabase, type DynamoDBDatabase } from "./database.js";
28
28
  import { type LambdaCompute } from "./compute.js";
29
- import { type PrivateStorage } from "./storage.js";
29
+ import { type Storage } from "./storage.js";
30
30
  import { type QueueMessaging } from "./messaging.js";
31
31
  import { type Cdn } from "./cdn.js";
32
32
  /**
@@ -39,7 +39,7 @@ export declare class Payload extends Construct implements IPayload {
39
39
  private readonly app;
40
40
  private readonly props;
41
41
  private readonly pascalName;
42
- private readonly payloadSecret;
42
+ private _payloadSecret;
43
43
  private _database;
44
44
  private _server;
45
45
  private _imageOptimisation;
@@ -75,13 +75,14 @@ export declare class Payload extends Construct implements IPayload {
75
75
  private resolveSimpleDomain;
76
76
  private resolveAdvancedDomain;
77
77
  private createDnsRecord;
78
+ private exportPatternOutputs;
78
79
  getDatabase(): RelationalDatabase;
79
80
  getServer(): LambdaCompute;
80
81
  getImageOptimisation(): LambdaCompute;
81
82
  getRevalidation(): LambdaCompute;
82
- getAssetsBucket(): PrivateStorage;
83
- getCacheBucket(): PrivateStorage;
84
- getMediaBucket(): PrivateStorage;
83
+ getAssetsBucket(): Storage;
84
+ getCacheBucket(): Storage;
85
+ getMediaBucket(): Storage;
85
86
  getTagCache(): DynamoDBDatabase;
86
87
  getRevalidationQueue(): QueueMessaging;
87
88
  getCdn(): Cdn;