@composurecdk/s3 0.7.0 → 0.8.0

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/commonjs/alarm-config.d.ts.map +1 -0
  2. package/dist/commonjs/alarm-config.js +3 -0
  3. package/dist/{alarm-config.js.map → commonjs/alarm-config.js.map} +1 -1
  4. package/dist/commonjs/alarm-defaults.d.ts.map +1 -0
  5. package/dist/commonjs/alarm-defaults.js +27 -0
  6. package/dist/commonjs/alarm-defaults.js.map +1 -0
  7. package/dist/commonjs/bucket-alarms.d.ts.map +1 -0
  8. package/dist/commonjs/bucket-alarms.js +100 -0
  9. package/dist/commonjs/bucket-alarms.js.map +1 -0
  10. package/dist/commonjs/bucket-builder.d.ts.map +1 -0
  11. package/dist/commonjs/bucket-builder.js +118 -0
  12. package/dist/commonjs/bucket-builder.js.map +1 -0
  13. package/dist/commonjs/bucket-deployment-builder.d.ts.map +1 -0
  14. package/dist/commonjs/bucket-deployment-builder.js +116 -0
  15. package/dist/commonjs/bucket-deployment-builder.js.map +1 -0
  16. package/dist/commonjs/bucket-deployment-defaults.d.ts.map +1 -0
  17. package/dist/commonjs/bucket-deployment-defaults.js +68 -0
  18. package/dist/commonjs/bucket-deployment-defaults.js.map +1 -0
  19. package/dist/commonjs/bucket-deployment-props.d.ts.map +1 -0
  20. package/dist/commonjs/bucket-deployment-props.js +3 -0
  21. package/dist/commonjs/bucket-deployment-props.js.map +1 -0
  22. package/dist/commonjs/defaults.d.ts.map +1 -0
  23. package/dist/commonjs/defaults.js +118 -0
  24. package/dist/commonjs/defaults.js.map +1 -0
  25. package/dist/commonjs/index.d.ts.map +1 -0
  26. package/dist/commonjs/index.js +16 -0
  27. package/dist/commonjs/index.js.map +1 -0
  28. package/dist/commonjs/package.json +3 -0
  29. package/dist/esm/alarm-config.d.ts +48 -0
  30. package/dist/esm/alarm-config.d.ts.map +1 -0
  31. package/dist/esm/alarm-config.js.map +1 -0
  32. package/dist/esm/alarm-defaults.d.ts +14 -0
  33. package/dist/esm/alarm-defaults.d.ts.map +1 -0
  34. package/dist/esm/alarm-defaults.js.map +1 -0
  35. package/dist/esm/bucket-alarms.d.ts +34 -0
  36. package/dist/esm/bucket-alarms.d.ts.map +1 -0
  37. package/dist/esm/bucket-alarms.js.map +1 -0
  38. package/dist/esm/bucket-builder.d.ts +130 -0
  39. package/dist/esm/bucket-builder.d.ts.map +1 -0
  40. package/dist/esm/bucket-builder.js.map +1 -0
  41. package/dist/esm/bucket-deployment-builder.d.ts +113 -0
  42. package/dist/esm/bucket-deployment-builder.d.ts.map +1 -0
  43. package/dist/esm/bucket-deployment-builder.js.map +1 -0
  44. package/dist/esm/bucket-deployment-defaults.d.ts +51 -0
  45. package/dist/esm/bucket-deployment-defaults.d.ts.map +1 -0
  46. package/dist/esm/bucket-deployment-defaults.js.map +1 -0
  47. package/dist/esm/bucket-deployment-props.d.ts +18 -0
  48. package/dist/esm/bucket-deployment-props.d.ts.map +1 -0
  49. package/dist/esm/bucket-deployment-props.js.map +1 -0
  50. package/dist/esm/defaults.d.ts +28 -0
  51. package/dist/esm/defaults.d.ts.map +1 -0
  52. package/dist/esm/defaults.js.map +1 -0
  53. package/dist/esm/index.d.ts +8 -0
  54. package/dist/esm/index.d.ts.map +1 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/package.json +3 -0
  57. package/package.json +36 -18
  58. package/dist/alarm-config.d.ts.map +0 -1
  59. package/dist/alarm-defaults.d.ts.map +0 -1
  60. package/dist/alarm-defaults.js.map +0 -1
  61. package/dist/bucket-alarms.d.ts.map +0 -1
  62. package/dist/bucket-alarms.js.map +0 -1
  63. package/dist/bucket-builder.d.ts.map +0 -1
  64. package/dist/bucket-builder.js.map +0 -1
  65. package/dist/bucket-deployment-builder.d.ts.map +0 -1
  66. package/dist/bucket-deployment-builder.js.map +0 -1
  67. package/dist/bucket-deployment-defaults.d.ts.map +0 -1
  68. package/dist/bucket-deployment-defaults.js.map +0 -1
  69. package/dist/bucket-deployment-props.d.ts.map +0 -1
  70. package/dist/bucket-deployment-props.js.map +0 -1
  71. package/dist/defaults.d.ts.map +0 -1
  72. package/dist/defaults.js.map +0 -1
  73. package/dist/index.d.ts.map +0 -1
  74. package/dist/index.js.map +0 -1
  75. /package/dist/{alarm-config.d.ts → commonjs/alarm-config.d.ts} +0 -0
  76. /package/dist/{alarm-defaults.d.ts → commonjs/alarm-defaults.d.ts} +0 -0
  77. /package/dist/{bucket-alarms.d.ts → commonjs/bucket-alarms.d.ts} +0 -0
  78. /package/dist/{bucket-builder.d.ts → commonjs/bucket-builder.d.ts} +0 -0
  79. /package/dist/{bucket-deployment-builder.d.ts → commonjs/bucket-deployment-builder.d.ts} +0 -0
  80. /package/dist/{bucket-deployment-defaults.d.ts → commonjs/bucket-deployment-defaults.d.ts} +0 -0
  81. /package/dist/{bucket-deployment-props.d.ts → commonjs/bucket-deployment-props.d.ts} +0 -0
  82. /package/dist/{defaults.d.ts → commonjs/defaults.d.ts} +0 -0
  83. /package/dist/{index.d.ts → commonjs/index.d.ts} +0 -0
  84. /package/dist/{alarm-config.js → esm/alarm-config.js} +0 -0
  85. /package/dist/{alarm-defaults.js → esm/alarm-defaults.js} +0 -0
  86. /package/dist/{bucket-alarms.js → esm/bucket-alarms.js} +0 -0
  87. /package/dist/{bucket-builder.js → esm/bucket-builder.js} +0 -0
  88. /package/dist/{bucket-deployment-builder.js → esm/bucket-deployment-builder.js} +0 -0
  89. /package/dist/{bucket-deployment-defaults.js → esm/bucket-deployment-defaults.js} +0 -0
  90. /package/dist/{bucket-deployment-props.js → esm/bucket-deployment-props.js} +0 -0
  91. /package/dist/{defaults.js → esm/defaults.js} +0 -0
  92. /package/dist/{index.js → esm/index.js} +0 -0
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BUCKET_DEPLOYMENT_DEFAULTS = exports.createBucketDeploymentBuilder = exports.BUCKET_ALARM_DEFAULTS = exports.DEFAULT_BUCKET_LIFECYCLE_RULES = exports.DEFAULT_ACCESS_LOG_BUCKET_LIFECYCLE_RULES = exports.BUCKET_DEFAULTS = exports.createBucketBuilder = void 0;
4
+ var bucket_builder_js_1 = require("./bucket-builder.js");
5
+ Object.defineProperty(exports, "createBucketBuilder", { enumerable: true, get: function () { return bucket_builder_js_1.createBucketBuilder; } });
6
+ var defaults_js_1 = require("./defaults.js");
7
+ Object.defineProperty(exports, "BUCKET_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.BUCKET_DEFAULTS; } });
8
+ Object.defineProperty(exports, "DEFAULT_ACCESS_LOG_BUCKET_LIFECYCLE_RULES", { enumerable: true, get: function () { return defaults_js_1.DEFAULT_ACCESS_LOG_BUCKET_LIFECYCLE_RULES; } });
9
+ Object.defineProperty(exports, "DEFAULT_BUCKET_LIFECYCLE_RULES", { enumerable: true, get: function () { return defaults_js_1.DEFAULT_BUCKET_LIFECYCLE_RULES; } });
10
+ var alarm_defaults_js_1 = require("./alarm-defaults.js");
11
+ Object.defineProperty(exports, "BUCKET_ALARM_DEFAULTS", { enumerable: true, get: function () { return alarm_defaults_js_1.BUCKET_ALARM_DEFAULTS; } });
12
+ var bucket_deployment_builder_js_1 = require("./bucket-deployment-builder.js");
13
+ Object.defineProperty(exports, "createBucketDeploymentBuilder", { enumerable: true, get: function () { return bucket_deployment_builder_js_1.createBucketDeploymentBuilder; } });
14
+ var bucket_deployment_defaults_js_1 = require("./bucket-deployment-defaults.js");
15
+ Object.defineProperty(exports, "BUCKET_DEPLOYMENT_DEFAULTS", { enumerable: true, get: function () { return bucket_deployment_defaults_js_1.BUCKET_DEPLOYMENT_DEFAULTS; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAM6B;AAL3B,wHAAA,mBAAmB,OAAA;AAMrB,6CAIuB;AAHrB,8GAAA,eAAe,OAAA;AACf,wIAAA,yCAAyC,OAAA;AACzC,6HAAA,8BAA8B,OAAA;AAGhC,yDAA4D;AAAnD,0HAAA,qBAAqB,OAAA;AAC9B,+EAIwC;AAHtC,6IAAA,6BAA6B,OAAA;AAK/B,iFAA6E;AAApE,2IAAA,0BAA0B,OAAA"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,48 @@
1
+ import type { AlarmConfig } from "@composurecdk/cloudwatch";
2
+ /**
3
+ * Controls which recommended alarms are created for an S3 bucket.
4
+ * All applicable alarms are enabled by default with AWS-recommended thresholds.
5
+ * Set individual alarms to `false` to disable them, or provide an
6
+ * {@link AlarmConfig} to tune thresholds.
7
+ *
8
+ * S3 request metric alarms (5xxErrors, 4xxErrors) require
9
+ * [CloudWatch request metrics](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configure-request-metrics-bucket.html)
10
+ * to be enabled on the bucket. Alarms are automatically created for each
11
+ * entry in the bucket's {@link BucketProps.metrics} array, keyed by the
12
+ * metrics configuration ID (e.g. `serverErrors:EntireBucket`).
13
+ *
14
+ * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
15
+ */
16
+ export interface BucketAlarmConfig {
17
+ /**
18
+ * Master switch: set to `false` to disable all recommended alarms.
19
+ * Individual alarms can also be disabled via their own entry.
20
+ * @default true
21
+ */
22
+ enabled?: boolean;
23
+ /**
24
+ * Alarm when S3 returns server-side errors (5xx HTTP status codes).
25
+ *
26
+ * Metric: `AWS/S3 5xxErrors`, statistic Sum, period 5 minutes.
27
+ * Default threshold: > 0 errors.
28
+ *
29
+ * Only created when the bucket has request metrics configured via
30
+ * {@link BucketProps.metrics}. One alarm per metrics configuration.
31
+ *
32
+ * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
33
+ */
34
+ serverErrors?: AlarmConfig | false;
35
+ /**
36
+ * Alarm when S3 returns client-side errors (4xx HTTP status codes).
37
+ *
38
+ * Metric: `AWS/S3 4xxErrors`, statistic Sum, period 5 minutes.
39
+ * Default threshold: > 0 errors.
40
+ *
41
+ * Only created when the bucket has request metrics configured via
42
+ * {@link BucketProps.metrics}. One alarm per metrics configuration.
43
+ *
44
+ * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
45
+ */
46
+ clientErrors?: AlarmConfig | false;
47
+ }
48
+ //# sourceMappingURL=alarm-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm-config.d.ts","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEnC;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CACpC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm-config.js","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { AlarmConfigDefaults } from "@composurecdk/cloudwatch";
2
+ interface BucketAlarmDefaults {
3
+ enabled: true;
4
+ serverErrors: AlarmConfigDefaults;
5
+ clientErrors: AlarmConfigDefaults;
6
+ }
7
+ /**
8
+ * AWS-recommended default alarm configuration for S3 buckets.
9
+ *
10
+ * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
11
+ */
12
+ export declare const BUCKET_ALARM_DEFAULTS: BucketAlarmDefaults;
13
+ export {};
14
+ //# sourceMappingURL=alarm-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,mBAAmB;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,YAAY,EAAE,mBAAmB,CAAC;IAClC,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAkBnC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm-defaults.js","sourceRoot":"","sources":["../../src/alarm-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAS9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,OAAO,EAAE,IAAI;IAEb,iEAAiE;IACjE,YAAY,EAAE;QACZ,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED,yEAAyE;IACzE,YAAY,EAAE;QACZ,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
2
+ import type { Bucket, BucketMetrics } from "aws-cdk-lib/aws-s3";
3
+ import type { IConstruct } from "constructs";
4
+ import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
5
+ import type { AlarmDefinition } from "@composurecdk/cloudwatch";
6
+ import type { BucketAlarmConfig } from "./alarm-config.js";
7
+ /**
8
+ * Resolves the recommended alarm configuration into fully-resolved
9
+ * {@link AlarmDefinition}s for an S3 bucket.
10
+ *
11
+ * Creates alarms for each entry in `metricsConfigs`, keyed as
12
+ * `{alarmType}:{filterId}` (e.g. `serverErrors:EntireBucket`).
13
+ */
14
+ export declare function resolveBucketAlarmDefinitions(bucket: Bucket, config: BucketAlarmConfig | undefined, metricsConfigs: BucketMetrics[]): AlarmDefinition[];
15
+ /**
16
+ * Creates AWS-recommended CloudWatch alarms for an S3 bucket,
17
+ * merging recommended definitions with any custom alarm builders.
18
+ *
19
+ * Alarms are created for each entry in `metricsConfigs` (from
20
+ * {@link BucketProps.metrics}). If no metrics configurations are
21
+ * provided, only custom alarms are created.
22
+ *
23
+ * @param scope - CDK construct scope for creating alarm constructs.
24
+ * @param id - Base identifier for alarm construct ids.
25
+ * @param bucket - The S3 bucket to create alarms for.
26
+ * @param config - User-provided alarm configuration, or `false` to disable all.
27
+ * @param metricsConfigs - The bucket's request metrics configurations.
28
+ * @param customAlarms - Custom alarm builders added via `addAlarm()`.
29
+ * @returns A record mapping alarm keys to their created Alarm constructs.
30
+ *
31
+ * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
32
+ */
33
+ export declare function createBucketAlarms(scope: IConstruct, id: string, bucket: Bucket, config: BucketAlarmConfig | false | undefined, metricsConfigs: BucketMetrics[], customAlarms?: AlarmDefinitionBuilder<Bucket>[]): Record<string, Alarm>;
34
+ //# sourceMappingURL=bucket-alarms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-alarms.d.ts","sourceRoot":"","sources":["../../src/bucket-alarms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAqC,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAoC,MAAM,0BAA0B,CAAC;AACpG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AA2B3D;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACrC,cAAc,EAAE,aAAa,EAAE,GAC9B,eAAe,EAAE,CAyCnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,GAAG,KAAK,GAAG,SAAS,EAC7C,cAAc,EAAE,aAAa,EAAE,EAC/B,YAAY,GAAE,sBAAsB,CAAC,MAAM,CAAC,EAAO,GAClD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAUvB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-alarms.js","sourceRoot":"","sources":["../../src/bucket-alarms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
2
+ import { Bucket, type BucketProps, type IBucket } from "aws-cdk-lib/aws-s3";
3
+ import { type IConstruct } from "constructs";
4
+ import { COPY_STATE, type Lifecycle } from "@composurecdk/core";
5
+ import { type ITaggedBuilder } from "@composurecdk/cloudformation";
6
+ import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
7
+ import type { BucketAlarmConfig } from "./alarm-config.js";
8
+ /**
9
+ * Configures how server access logs are handled. Pass `false` to disable
10
+ * logging; pass an object to wire a destination, prefix, or customize the
11
+ * auto-created sub-builder.
12
+ *
13
+ * `configure` cannot be combined with `destination` — a user-managed
14
+ * destination is not built by this builder.
15
+ */
16
+ export type ServerAccessLogsConfig = false | {
17
+ destination?: IBucket;
18
+ prefix?: string;
19
+ /**
20
+ * Customize the auto-created logging sub-builder. Receives a builder
21
+ * pre-seeded with `versioned: false`, `removalPolicy: RETAIN`, and
22
+ * recursive access logging disabled.
23
+ */
24
+ configure?: (b: IBucketBuilder) => IBucketBuilder;
25
+ };
26
+ /**
27
+ * Configuration properties for the S3 bucket builder. Extends CDK
28
+ * {@link BucketProps} with builder-specific options.
29
+ */
30
+ export interface BucketBuilderProps extends Omit<BucketProps, "serverAccessLogsBucket" | "serverAccessLogsPrefix"> {
31
+ /** See {@link ServerAccessLogsConfig}. Defaults to `{ prefix: "logs/" }`. */
32
+ serverAccessLogs?: ServerAccessLogsConfig;
33
+ /**
34
+ * Configuration for AWS-recommended CloudWatch alarms.
35
+ *
36
+ * S3 request metric alarms (5xxErrors, 4xxErrors) require
37
+ * [CloudWatch request metrics](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configure-request-metrics-bucket.html)
38
+ * to be enabled on the bucket. Set {@link BucketAlarmConfig.requestMetricsFilterId}
39
+ * to the ID of the request metrics configuration to create these alarms.
40
+ *
41
+ * No alarm actions are configured by default since notification
42
+ * methods are user-specific. Access alarms from the build result
43
+ * or use an `afterBuild` hook to apply actions.
44
+ *
45
+ * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
46
+ */
47
+ recommendedAlarms?: BucketAlarmConfig | false;
48
+ }
49
+ /**
50
+ * The build output of a {@link IBucketBuilder}. Contains the CDK constructs
51
+ * created during {@link Lifecycle.build}, keyed by role.
52
+ */
53
+ export interface BucketBuilderResult {
54
+ /** The S3 bucket construct created by the builder. */
55
+ bucket: Bucket;
56
+ /**
57
+ * The S3 bucket created for access logging, or `undefined` if access
58
+ * logging was disabled or the user provided their own destination.
59
+ */
60
+ accessLogsBucket?: Bucket;
61
+ /**
62
+ * CloudWatch alarms created for the bucket, keyed by alarm name.
63
+ *
64
+ * Includes both AWS-recommended alarms and any custom alarms added
65
+ * via {@link IBucketBuilder.addAlarm}. Access individual alarms
66
+ * by key (e.g., `result.alarms.serverErrors`).
67
+ *
68
+ * No alarm actions are configured — apply them via the result or an
69
+ * `afterBuild` hook.
70
+ *
71
+ * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
72
+ */
73
+ alarms: Record<string, Alarm>;
74
+ }
75
+ /**
76
+ * A fluent builder for configuring and creating an Amazon S3 bucket.
77
+ *
78
+ * Each configuration property from the CDK {@link BucketProps} is exposed
79
+ * as an overloaded method: call with a value to set it (returns the builder
80
+ * for chaining), or call with no arguments to read the current value.
81
+ *
82
+ * The builder implements {@link Lifecycle}, so it can be used directly as a
83
+ * component in a {@link compose | composed system}. When built, it creates
84
+ * an S3 bucket with the configured properties and returns a
85
+ * {@link BucketBuilderResult}.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * const site = createBucketBuilder()
90
+ * .bucketName("my-website-bucket")
91
+ * .versioned(false);
92
+ * ```
93
+ */
94
+ export type IBucketBuilder = ITaggedBuilder<BucketBuilderProps, BucketBuilder>;
95
+ declare class BucketBuilder implements Lifecycle<BucketBuilderResult> {
96
+ #private;
97
+ props: Partial<BucketBuilderProps>;
98
+ addAlarm(key: string, configure: (alarm: AlarmDefinitionBuilder<Bucket>) => AlarmDefinitionBuilder<Bucket>): this;
99
+ /** @internal — see ADR-0005. */
100
+ [COPY_STATE](target: BucketBuilder): void;
101
+ build(scope: IConstruct, id: string): BucketBuilderResult;
102
+ }
103
+ /**
104
+ * Creates a new {@link IBucketBuilder} for configuring an Amazon S3 bucket.
105
+ *
106
+ * This is the entry point for defining an S3 bucket component. The returned
107
+ * builder exposes every {@link BucketProps} property as a fluent setter/getter
108
+ * and implements {@link Lifecycle} for use with {@link compose}.
109
+ *
110
+ * @returns A fluent builder for an Amazon S3 bucket.
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * const site = createBucketBuilder()
115
+ * .bucketName("my-site")
116
+ * .versioned(false);
117
+ *
118
+ * // Use standalone:
119
+ * const result = site.build(stack, "SiteBucket");
120
+ *
121
+ * // Or compose into a system:
122
+ * const system = compose(
123
+ * { site, cdn: createDistributionBuilder() },
124
+ * { site: [], cdn: ["site"] },
125
+ * );
126
+ * ```
127
+ */
128
+ export declare function createBucketBuilder(): IBucketBuilder;
129
+ export {};
130
+ //# sourceMappingURL=bucket-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-builder.d.ts","sourceRoot":"","sources":["../../src/bucket-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAC9B,KAAK,GACL;IACE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,cAAc,CAAC;CACnD,CAAC;AAEN;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAC9C,WAAW,EACX,wBAAwB,GAAG,wBAAwB,CACpD;IACC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAE1C;;;;;;;;;;;;;OAaG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAE/E,cAAM,aAAc,YAAW,SAAS,CAAC,mBAAmB,CAAC;;IAC3D,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAM;IAGxC,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,KAAK,sBAAsB,CAAC,MAAM,CAAC,GACnF,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAIzC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,mBAAmB;CA+B1D;AAgED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAEpD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-builder.js","sourceRoot":"","sources":["../../src/bucket-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { BucketDeployment } from "aws-cdk-lib/aws-s3-deployment";
2
+ import { type IBucket } from "aws-cdk-lib/aws-s3";
3
+ import { type IDistribution } from "aws-cdk-lib/aws-cloudfront";
4
+ import type { LogGroup } from "aws-cdk-lib/aws-logs";
5
+ import { type IConstruct } from "constructs";
6
+ import { COPY_STATE, type Lifecycle, type Resolvable } from "@composurecdk/core";
7
+ import { type ITaggedBuilder } from "@composurecdk/cloudformation";
8
+ import { type BucketDeploymentBuilderProps } from "./bucket-deployment-props.js";
9
+ /**
10
+ * The build output of a {@link IBucketDeploymentBuilder}.
11
+ */
12
+ export interface BucketDeploymentBuilderResult {
13
+ /** The CDK BucketDeployment construct created by the builder. */
14
+ deployment: BucketDeployment;
15
+ /**
16
+ * The CloudWatch LogGroup created for the deployment's backing Lambda,
17
+ * or `undefined` if the user provided their own via the `logGroup`
18
+ * property.
19
+ *
20
+ * By default the builder creates a managed LogGroup using
21
+ * {@link createLogGroupBuilder} with well-architected defaults (retention
22
+ * policy, removal policy). This prevents the backing Lambda from
23
+ * creating an auto-managed log group with infinite retention.
24
+ *
25
+ * @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3_deployment.BucketDeploymentProps.html#loggroup
26
+ */
27
+ logGroup?: LogGroup;
28
+ }
29
+ /**
30
+ * A fluent builder for configuring and creating an S3 BucketDeployment.
31
+ *
32
+ * Each configuration property from the CDK {@link BucketDeploymentProps} is
33
+ * exposed as an overloaded method: call with a value to set it (returns the
34
+ * builder for chaining), or call with no arguments to read the current value.
35
+ *
36
+ * The `destinationBucket` and `distribution` are set via dedicated methods
37
+ * that accept {@link Resolvable} values for cross-component wiring.
38
+ *
39
+ * The builder implements {@link Lifecycle}, so it can be used directly as a
40
+ * component in a {@link compose | composed system}.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * const deploy = createBucketDeploymentBuilder()
45
+ * .sources([Source.asset("./site")])
46
+ * .destinationBucket(ref("site", (r: BucketBuilderResult) => r.bucket))
47
+ * .distribution(ref("cdn", (r: DistributionBuilderResult) => r.distribution))
48
+ * .distributionPaths(["/*"]);
49
+ * ```
50
+ */
51
+ export type IBucketDeploymentBuilder = ITaggedBuilder<BucketDeploymentBuilderProps, BucketDeploymentBuilder>;
52
+ declare class BucketDeploymentBuilder implements Lifecycle<BucketDeploymentBuilderResult> {
53
+ #private;
54
+ props: Partial<BucketDeploymentBuilderProps>;
55
+ /**
56
+ * Sets the destination bucket for the deployment.
57
+ *
58
+ * Accepts a concrete {@link IBucket} or a {@link Ref} that resolves to one
59
+ * at build time.
60
+ *
61
+ * @param bucket - The bucket or a Ref to one.
62
+ * @returns This builder for chaining.
63
+ */
64
+ destinationBucket(bucket: Resolvable<IBucket>): this;
65
+ /**
66
+ * Sets the CloudFront distribution to invalidate on deployment.
67
+ *
68
+ * Accepts a concrete {@link IDistribution} or a {@link Ref} that resolves
69
+ * to one at build time. This is optional — deployments can target a bucket
70
+ * without CloudFront invalidation.
71
+ *
72
+ * @param distribution - The distribution or a Ref to one.
73
+ * @returns This builder for chaining.
74
+ */
75
+ distribution(distribution: Resolvable<IDistribution>): this;
76
+ /** @internal — see ADR-0005. */
77
+ [COPY_STATE](target: BucketDeploymentBuilder): void;
78
+ build(scope: IConstruct, id: string, context?: Record<string, object>): BucketDeploymentBuilderResult;
79
+ }
80
+ /**
81
+ * Creates a new {@link IBucketDeploymentBuilder} for deploying content to an
82
+ * S3 bucket with optional CloudFront cache invalidation.
83
+ *
84
+ * This is the entry point for defining an S3 deployment component. The
85
+ * returned builder exposes {@link BucketDeploymentBuilderProps} properties as
86
+ * fluent setters/getters, plus {@link IBucketDeploymentBuilder.destinationBucket | destinationBucket()}
87
+ * and {@link IBucketDeploymentBuilder.distribution | distribution()} for
88
+ * cross-component wiring with Ref support. It implements {@link Lifecycle}
89
+ * for use with {@link compose}.
90
+ *
91
+ * @returns A fluent builder for an S3 BucketDeployment.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * const deploy = createBucketDeploymentBuilder()
96
+ * .sources([Source.asset("./site")])
97
+ * .destinationBucket(ref("site", (r: BucketBuilderResult) => r.bucket))
98
+ * .distribution(ref("cdn", (r: DistributionBuilderResult) => r.distribution))
99
+ * .distributionPaths(["/*"]);
100
+ *
101
+ * // Use standalone:
102
+ * const result = deploy.build(stack, "Deploy");
103
+ *
104
+ * // Or compose into a system:
105
+ * const system = compose(
106
+ * { site: createBucketBuilder(), cdn: createDistributionBuilder(), deploy },
107
+ * { site: [], cdn: ["site"], deploy: ["site", "cdn"] },
108
+ * );
109
+ * ```
110
+ */
111
+ export declare function createBucketDeploymentBuilder(): IBucketDeploymentBuilder;
112
+ export {};
113
+ //# sourceMappingURL=bucket-deployment-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-deployment-builder.d.ts","sourceRoot":"","sources":["../../src/bucket-deployment-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA8B,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAGlF,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,iEAAiE;IACjE,UAAU,EAAE,gBAAgB,CAAC;IAE7B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,wBAAwB,GAAG,cAAc,CACnD,4BAA4B,EAC5B,uBAAuB,CACxB,CAAC;AAEF,cAAM,uBAAwB,YAAW,SAAS,CAAC,6BAA6B,CAAC;;IAC/E,KAAK,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAM;IAIlD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;IAKpD;;;;;;;;;OASG;IACH,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI;IAK3D,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAKnD,KAAK,CACH,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,6BAA6B;CAiDjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,6BAA6B,IAAI,wBAAwB,CAIxE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-deployment-builder.js","sourceRoot":"","sources":["../../src/bucket-deployment-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA8B,MAAM,+BAA+B,CAAC;AAK7F,OAAO,EAAE,UAAU,EAAkB,OAAO,EAAmB,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAuB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAoDpE,MAAM,uBAAuB;IAC3B,KAAK,GAA0C,EAAE,CAAC;IAClD,kBAAkB,CAAuB;IACzC,aAAa,CAA6B;IAE1C;;;;;;;;OAQG;IACH,iBAAiB,CAAC,MAA2B;QAC3C,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;OASG;IACH,YAAY,CAAC,YAAuC;QAClD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAA+B;QAC1C,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACpD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED,KAAK,CACH,KAAiB,EACjB,EAAU,EACV,OAAgC;QAEhC,MAAM,GAAG,GAAG,OAAO,IAAI,EAAE,CAAC;QAE1B,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB;YAC5C,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,4BAA4B,EAAE,mCAAmC;gBAC/D,4DAA4D,CAC/D,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE/C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,4BAA4B,EAAE,kCAAkC;gBAC9D,2CAA2C,CAC9C,CAAC;QACJ,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/F,qEAAqE;QACrE,2EAA2E;QAC3E,IAAI,QAA8B,CAAC;QACnC,IAAI,aAAa,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,QAAQ,GAAG,qBAAqB,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC;YAC1E,aAAa,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC;YAC5C,GAAG,aAAa;YAChB,GAAG,WAAW;YACd,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,OAAO;YACP,iBAAiB,EAAE,cAAc;SACT,CAAC;QAE3B,OAAO;YACL,UAAU,EAAE,IAAI,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC;YACxD,QAAQ;SACT,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO,aAAa,CAClB,uBAAuB,CACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { BucketDeploymentBuilderProps } from "./bucket-deployment-props.js";
2
+ /**
3
+ * Secure, AWS-recommended defaults applied to every S3 BucketDeployment
4
+ * built with {@link createBucketDeploymentBuilder}. Each property can be
5
+ * individually overridden via the builder's fluent API.
6
+ */
7
+ export declare const BUCKET_DEPLOYMENT_DEFAULTS: {
8
+ sources?: import("aws-cdk-lib/aws-s3-deployment").ISource[];
9
+ accessControl?: import("aws-cdk-lib/aws-s3").BucketAccessControl;
10
+ destinationKeyPrefix?: string;
11
+ extract?: boolean;
12
+ exclude?: string[];
13
+ include?: string[];
14
+ prune?: boolean;
15
+ retainOnDelete?: boolean;
16
+ distributionPaths?: string[];
17
+ waitForDistributionInvalidation?: boolean;
18
+ logRetention?: import("aws-cdk-lib/aws-logs").RetentionDays;
19
+ logGroup?: import("aws-cdk-lib/aws-logs").ILogGroupRef;
20
+ memoryLimit?: number;
21
+ ephemeralStorageSize?: import("aws-cdk-lib").Size;
22
+ useEfs?: boolean;
23
+ role?: import("aws-cdk-lib/aws-iam").IRole;
24
+ metadata?: {
25
+ [key: string]: string;
26
+ };
27
+ cacheControl?: import("aws-cdk-lib/aws-s3-deployment").CacheControl[];
28
+ contentDisposition?: string;
29
+ contentEncoding?: string;
30
+ contentLanguage?: string;
31
+ contentType?: string;
32
+ expires?: import("aws-cdk-lib").Expiration;
33
+ serverSideEncryption?: import("aws-cdk-lib/aws-s3-deployment").ServerSideEncryption;
34
+ storageClass?: import("aws-cdk-lib/aws-s3-deployment").StorageClass;
35
+ websiteRedirectLocation?: string;
36
+ serverSideEncryptionAwsKmsKeyId?: string;
37
+ serverSideEncryptionCustomerAlgorithm?: string;
38
+ vpc?: import("aws-cdk-lib/aws-ec2").IVpc;
39
+ vpcSubnets?: import("aws-cdk-lib/aws-ec2").SubnetSelection;
40
+ signContent?: boolean;
41
+ outputObjectKeys?: boolean;
42
+ securityGroups?: import("aws-cdk-lib/aws-ec2").ISecurityGroup[];
43
+ };
44
+ /**
45
+ * Returns the appropriate defaults based on whether a CloudFront
46
+ * distribution is present. CDK throws if `distributionPaths` is set
47
+ * without a distribution, so distribution-specific defaults are only
48
+ * included when applicable.
49
+ */
50
+ export declare function effectiveDefaults(hasDistribution: boolean): Partial<BucketDeploymentBuilderProps>;
51
+ //# sourceMappingURL=bucket-deployment-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-deployment-defaults.d.ts","sourceRoot":"","sources":["../../src/bucket-deployment-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAmDjF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGtC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAEjG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-deployment-defaults.js","sourceRoot":"","sources":["../../src/bucket-deployment-defaults.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,aAAa,GAA0C;IAC3D;;;;;OAKG;IACH,KAAK,EAAE,IAAI;IAEX;;;;;;OAMG;IACH,WAAW,EAAE,GAAG;IAEhB;;;;;;;OAOG;IACH,cAAc,EAAE,KAAK;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,qBAAqB,GAA0C;IACnE;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,IAAI,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,aAAa;IAChB,GAAG,qBAAqB;CACzB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,eAAwB;IACxD,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,qBAAqB,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { BucketDeploymentProps, ISource } from "aws-cdk-lib/aws-s3-deployment";
2
+ /**
3
+ * Configuration properties for the S3 bucket deployment builder.
4
+ *
5
+ * Extends the CDK {@link BucketDeploymentProps} but replaces
6
+ * `destinationBucket` and `distribution` with builder-managed fields that
7
+ * support {@link Resolvable} for cross-component wiring via {@link ref}.
8
+ *
9
+ * `sources` is set via the builder's fluent API rather than the constructor.
10
+ */
11
+ export interface BucketDeploymentBuilderProps extends Omit<BucketDeploymentProps, "sources" | "destinationBucket" | "distribution"> {
12
+ /**
13
+ * The sources from which to deploy content. Typically created with
14
+ * `Source.asset("./path")` or `Source.data("key", "content")`.
15
+ */
16
+ sources?: ISource[];
17
+ }
18
+ //# sourceMappingURL=bucket-deployment-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-deployment-props.d.ts","sourceRoot":"","sources":["../../src/bucket-deployment-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAEpF;;;;;;;;GAQG;AACH,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CACxD,qBAAqB,EACrB,SAAS,GAAG,mBAAmB,GAAG,cAAc,CACjD;IACC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;CACrB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-deployment-props.js","sourceRoot":"","sources":["../../src/bucket-deployment-props.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { type LifecycleRule } from "aws-cdk-lib/aws-s3";
2
+ import type { BucketBuilderProps } from "./bucket-builder.js";
3
+ /**
4
+ * Lifecycle rules applied to general-purpose buckets built with
5
+ * {@link createBucketBuilder}. Bounds storage cost from orphaned multipart
6
+ * parts and from accumulated noncurrent versions of objects in versioned
7
+ * buckets, while preserving a generous recovery window.
8
+ *
9
+ * Users who need different rules can override the entire set via the
10
+ * `.lifecycleRules([...])` builder method.
11
+ */
12
+ export declare const DEFAULT_BUCKET_LIFECYCLE_RULES: LifecycleRule[];
13
+ /**
14
+ * Lifecycle rules applied to auto-created S3 server access log buckets and
15
+ * CloudFront access log buckets. Mirrors the 2-year retention used by
16
+ * {@link LOG_GROUP_DEFAULTS} so the audit window is consistent across log
17
+ * destinations in the library.
18
+ *
19
+ * @see https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_detect_investigate_events_app_service_logging.html
20
+ */
21
+ export declare const DEFAULT_ACCESS_LOG_BUCKET_LIFECYCLE_RULES: LifecycleRule[];
22
+ /**
23
+ * Secure, AWS-recommended defaults applied to every S3 bucket built
24
+ * with {@link createBucketBuilder}. Each property can be individually
25
+ * overridden via the builder's fluent API.
26
+ */
27
+ export declare const BUCKET_DEFAULTS: Partial<BucketBuilderProps>;
28
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAe9D;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,EAAE,aAAa,EAczD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,yCAAyC,EAAE,aAAa,EAMpE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,kBAAkB,CA6DvD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGtD;;;;;;;GAOG;AACH,MAAM,kCAAkC,GAAkB;IACxD,EAAE,EAAE,0CAA0C;IAC9C,mCAAmC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAoB;IAC7D,kCAAkC;IAClC;QACE;;;;;;;WAOG;QACH,EAAE,EAAE,sCAAsC;QAC1C,2BAA2B,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;KAChD;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yCAAyC,GAAoB;IACxE,kCAAkC;IAClC;QACE,EAAE,EAAE,6BAA6B;QACjC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;KAC/B;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgC;IAC1D;;;;;;;OAOG;IACH,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;IAErC;;;;;OAKG;IACH,iBAAiB,EAAE,iBAAiB,CAAC,SAAS;IAE9C;;;;OAIG;IACH,UAAU,EAAE,gBAAgB,CAAC,UAAU;IAEvC;;;OAGG;IACH,UAAU,EAAE,IAAI;IAEhB;;;;OAIG;IACH,SAAS,EAAE,IAAI;IAEf;;;;;;;;;OASG;IACH,cAAc,EAAE,8BAA8B;IAE9C;;;;;;;;OAQG;IACH,aAAa,EAAE,aAAa,CAAC,MAAM;CACpC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { createBucketBuilder, type BucketBuilderProps, type BucketBuilderResult, type IBucketBuilder, type ServerAccessLogsConfig, } from "./bucket-builder.js";
2
+ export { BUCKET_DEFAULTS, DEFAULT_ACCESS_LOG_BUCKET_LIFECYCLE_RULES, DEFAULT_BUCKET_LIFECYCLE_RULES, } from "./defaults.js";
3
+ export { type BucketAlarmConfig } from "./alarm-config.js";
4
+ export { BUCKET_ALARM_DEFAULTS } from "./alarm-defaults.js";
5
+ export { createBucketDeploymentBuilder, type BucketDeploymentBuilderResult, type IBucketDeploymentBuilder, } from "./bucket-deployment-builder.js";
6
+ export { type BucketDeploymentBuilderProps } from "./bucket-deployment-props.js";
7
+ export { BUCKET_DEPLOYMENT_DEFAULTS } from "./bucket-deployment-defaults.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,yCAAyC,EACzC,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,6BAA6B,EAC7B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,GAC9B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAKpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,yCAAyC,EACzC,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,6BAA6B,GAG9B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }