alchemy 2.0.0-beta.17 → 2.0.0-beta.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.js +1 -1
- package/bin/alchemy.js.map +1 -1
- package/lib/AWS/CloudFront/CachePolicy.d.ts +106 -0
- package/lib/AWS/CloudFront/CachePolicy.d.ts.map +1 -0
- package/lib/AWS/CloudFront/CachePolicy.js +147 -0
- package/lib/AWS/CloudFront/CachePolicy.js.map +1 -0
- package/lib/AWS/CloudFront/KeyGroup.d.ts +72 -0
- package/lib/AWS/CloudFront/KeyGroup.d.ts.map +1 -0
- package/lib/AWS/CloudFront/KeyGroup.js +136 -0
- package/lib/AWS/CloudFront/KeyGroup.js.map +1 -0
- package/lib/AWS/CloudFront/OriginRequestPolicy.d.ts +84 -0
- package/lib/AWS/CloudFront/OriginRequestPolicy.d.ts.map +1 -0
- package/lib/AWS/CloudFront/OriginRequestPolicy.js +139 -0
- package/lib/AWS/CloudFront/OriginRequestPolicy.js.map +1 -0
- package/lib/AWS/CloudFront/PublicKey.d.ts +72 -0
- package/lib/AWS/CloudFront/PublicKey.d.ts.map +1 -0
- package/lib/AWS/CloudFront/PublicKey.js +137 -0
- package/lib/AWS/CloudFront/PublicKey.js.map +1 -0
- package/lib/AWS/CloudFront/ResponseHeadersPolicy.d.ts +114 -0
- package/lib/AWS/CloudFront/ResponseHeadersPolicy.d.ts.map +1 -0
- package/lib/AWS/CloudFront/ResponseHeadersPolicy.js +162 -0
- package/lib/AWS/CloudFront/ResponseHeadersPolicy.js.map +1 -0
- package/lib/AWS/CloudFront/index.d.ts +5 -0
- package/lib/AWS/CloudFront/index.d.ts.map +1 -1
- package/lib/AWS/CloudFront/index.js +5 -0
- package/lib/AWS/CloudFront/index.js.map +1 -1
- package/lib/AWS/ECS/CapacityProvider.d.ts +102 -0
- package/lib/AWS/ECS/CapacityProvider.d.ts.map +1 -0
- package/lib/AWS/ECS/CapacityProvider.js +217 -0
- package/lib/AWS/ECS/CapacityProvider.js.map +1 -0
- package/lib/AWS/ECS/index.d.ts +1 -0
- package/lib/AWS/ECS/index.d.ts.map +1 -1
- package/lib/AWS/ECS/index.js +1 -0
- package/lib/AWS/ECS/index.js.map +1 -1
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +7 -1
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/GitHub/Secrets.d.ts +45 -0
- package/lib/GitHub/Secrets.d.ts.map +1 -0
- package/lib/GitHub/Secrets.js +30 -0
- package/lib/GitHub/Secrets.js.map +1 -0
- package/lib/GitHub/index.d.ts +1 -0
- package/lib/GitHub/index.d.ts.map +1 -1
- package/lib/GitHub/index.js +1 -0
- package/lib/GitHub/index.js.map +1 -1
- package/package.json +1 -1
- package/src/AWS/CloudFront/CachePolicy.ts +271 -0
- package/src/AWS/CloudFront/KeyGroup.ts +233 -0
- package/src/AWS/CloudFront/OriginRequestPolicy.ts +256 -0
- package/src/AWS/CloudFront/PublicKey.ts +245 -0
- package/src/AWS/CloudFront/ResponseHeadersPolicy.ts +308 -0
- package/src/AWS/CloudFront/index.ts +11 -0
- package/src/AWS/ECS/CapacityProvider.ts +336 -0
- package/src/AWS/ECS/index.ts +4 -0
- package/src/AWS/Providers.ts +12 -0
- package/src/GitHub/Secrets.ts +66 -0
- package/src/GitHub/index.ts +1 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as cloudfront from "@distilled.cloud/aws/cloudfront";
|
|
2
|
+
import * as Provider from "../../Provider.ts";
|
|
3
|
+
import { Resource } from "../../Resource.ts";
|
|
4
|
+
import type { Providers } from "../Providers.ts";
|
|
5
|
+
export interface CachePolicyProps {
|
|
6
|
+
/**
|
|
7
|
+
* Name of the cache policy. If omitted, a deterministic name is generated.
|
|
8
|
+
*
|
|
9
|
+
* Names must be unique per AWS account. Changing the name triggers
|
|
10
|
+
* a replacement.
|
|
11
|
+
*/
|
|
12
|
+
name?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Optional comment describing the policy.
|
|
15
|
+
*/
|
|
16
|
+
comment?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Minimum amount of time, in seconds, that objects stay in the cache.
|
|
19
|
+
*/
|
|
20
|
+
minTTL: number;
|
|
21
|
+
/**
|
|
22
|
+
* Default amount of time, in seconds, that objects stay in the cache when
|
|
23
|
+
* the origin does not send `Cache-Control` or `Expires` headers.
|
|
24
|
+
*/
|
|
25
|
+
defaultTTL?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Maximum amount of time, in seconds, that objects stay in the cache.
|
|
28
|
+
*/
|
|
29
|
+
maxTTL?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Controls which request values become part of the cache key and which
|
|
32
|
+
* additional headers/cookies/query strings CloudFront forwards to the origin.
|
|
33
|
+
*/
|
|
34
|
+
parametersInCacheKeyAndForwardedToOrigin?: cloudfront.ParametersInCacheKeyAndForwardedToOrigin;
|
|
35
|
+
}
|
|
36
|
+
export interface CachePolicy extends Resource<"AWS.CloudFront.CachePolicy", CachePolicyProps, {
|
|
37
|
+
/**
|
|
38
|
+
* CloudFront-assigned cache policy identifier.
|
|
39
|
+
*/
|
|
40
|
+
cachePolicyId: string;
|
|
41
|
+
/**
|
|
42
|
+
* Name of the cache policy.
|
|
43
|
+
*/
|
|
44
|
+
name: string;
|
|
45
|
+
/**
|
|
46
|
+
* Most recent entity tag for update/delete operations.
|
|
47
|
+
*/
|
|
48
|
+
etag: string | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Current comment on the policy.
|
|
51
|
+
*/
|
|
52
|
+
comment: string | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Current minimum TTL.
|
|
55
|
+
*/
|
|
56
|
+
minTTL: number;
|
|
57
|
+
/**
|
|
58
|
+
* Current default TTL.
|
|
59
|
+
*/
|
|
60
|
+
defaultTTL: number | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Current maximum TTL.
|
|
63
|
+
*/
|
|
64
|
+
maxTTL: number | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Current cache-key/forwarded-value configuration.
|
|
67
|
+
*/
|
|
68
|
+
parametersInCacheKeyAndForwardedToOrigin: cloudfront.ParametersInCacheKeyAndForwardedToOrigin | undefined;
|
|
69
|
+
}, never, Providers> {
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A CloudFront cache policy.
|
|
73
|
+
*
|
|
74
|
+
* Cache policies determine the values CloudFront includes in the cache key,
|
|
75
|
+
* the headers, cookies and query strings it forwards to the origin, and the
|
|
76
|
+
* TTL bounds for cached responses. Policies are referenced by ID on a
|
|
77
|
+
* Distribution's default behavior or per-path cache behaviors.
|
|
78
|
+
*
|
|
79
|
+
* For AWS-managed policies (CachingOptimized, CachingDisabled,
|
|
80
|
+
* AllViewerExceptHostHeader) reference them by ID via the constants in
|
|
81
|
+
* {@link ManagedPolicies} instead of creating a custom policy.
|
|
82
|
+
*
|
|
83
|
+
* @section Creating Cache Policies
|
|
84
|
+
* @example Cache by query string and Authorization header
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const cachePolicy = yield* CachePolicy("ApiCachePolicy", {
|
|
87
|
+
* comment: "Cache GETs by query string + Authorization",
|
|
88
|
+
* minTTL: 0,
|
|
89
|
+
* defaultTTL: 60,
|
|
90
|
+
* maxTTL: 3600,
|
|
91
|
+
* parametersInCacheKeyAndForwardedToOrigin: {
|
|
92
|
+
* EnableAcceptEncodingGzip: true,
|
|
93
|
+
* EnableAcceptEncodingBrotli: true,
|
|
94
|
+
* HeadersConfig: {
|
|
95
|
+
* HeaderBehavior: "whitelist",
|
|
96
|
+
* Headers: { Quantity: 1, Items: ["Authorization"] },
|
|
97
|
+
* },
|
|
98
|
+
* CookiesConfig: { CookieBehavior: "none" },
|
|
99
|
+
* QueryStringsConfig: { QueryStringBehavior: "all" },
|
|
100
|
+
* },
|
|
101
|
+
* });
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare const CachePolicy: import("../../Resource.ts").ResourceClass<CachePolicy>;
|
|
105
|
+
export declare const CachePolicyProvider: () => import("effect/Layer").Layer<Provider.Provider<CachePolicy>, never, import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | import("../../Stack.ts").Stack | import("@distilled.cloud/aws/Region").Region | import("@distilled.cloud/aws/Credentials").Credentials>;
|
|
106
|
+
//# sourceMappingURL=CachePolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CachePolicy.d.ts","sourceRoot":"","sources":["../../../src/AWS/CloudFront/CachePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAC;AAI9D,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,wCAAwC,CAAC,EAAE,UAAU,CAAC,wCAAwC,CAAC;CAChG;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ,CAC3C,4BAA4B,EAC5B,gBAAgB,EAChB;IACE;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;OAEG;IACH,wCAAwC,EACpC,UAAU,CAAC,wCAAwC,GACnD,SAAS,CAAC;CACf,EACD,KAAK,EACL,SAAS,CACV;CAAG;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,WAAW,wDAAsD,CAAC;AAE/E,eAAO,MAAM,mBAAmB,2SAmJ7B,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import * as cloudfront from "@distilled.cloud/aws/cloudfront";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { isResolved } from "../../Diff.js";
|
|
4
|
+
import { createPhysicalName } from "../../PhysicalName.js";
|
|
5
|
+
import * as Provider from "../../Provider.js";
|
|
6
|
+
import { Resource } from "../../Resource.js";
|
|
7
|
+
/**
|
|
8
|
+
* A CloudFront cache policy.
|
|
9
|
+
*
|
|
10
|
+
* Cache policies determine the values CloudFront includes in the cache key,
|
|
11
|
+
* the headers, cookies and query strings it forwards to the origin, and the
|
|
12
|
+
* TTL bounds for cached responses. Policies are referenced by ID on a
|
|
13
|
+
* Distribution's default behavior or per-path cache behaviors.
|
|
14
|
+
*
|
|
15
|
+
* For AWS-managed policies (CachingOptimized, CachingDisabled,
|
|
16
|
+
* AllViewerExceptHostHeader) reference them by ID via the constants in
|
|
17
|
+
* {@link ManagedPolicies} instead of creating a custom policy.
|
|
18
|
+
*
|
|
19
|
+
* @section Creating Cache Policies
|
|
20
|
+
* @example Cache by query string and Authorization header
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const cachePolicy = yield* CachePolicy("ApiCachePolicy", {
|
|
23
|
+
* comment: "Cache GETs by query string + Authorization",
|
|
24
|
+
* minTTL: 0,
|
|
25
|
+
* defaultTTL: 60,
|
|
26
|
+
* maxTTL: 3600,
|
|
27
|
+
* parametersInCacheKeyAndForwardedToOrigin: {
|
|
28
|
+
* EnableAcceptEncodingGzip: true,
|
|
29
|
+
* EnableAcceptEncodingBrotli: true,
|
|
30
|
+
* HeadersConfig: {
|
|
31
|
+
* HeaderBehavior: "whitelist",
|
|
32
|
+
* Headers: { Quantity: 1, Items: ["Authorization"] },
|
|
33
|
+
* },
|
|
34
|
+
* CookiesConfig: { CookieBehavior: "none" },
|
|
35
|
+
* QueryStringsConfig: { QueryStringBehavior: "all" },
|
|
36
|
+
* },
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export const CachePolicy = Resource("AWS.CloudFront.CachePolicy");
|
|
41
|
+
export const CachePolicyProvider = () => Provider.effect(CachePolicy, Effect.gen(function* () {
|
|
42
|
+
const getById = Effect.fn(function* (id) {
|
|
43
|
+
const config = yield* cloudfront
|
|
44
|
+
.getCachePolicyConfig({ Id: id })
|
|
45
|
+
.pipe(Effect.catchTag("NoSuchCachePolicy", () => Effect.succeed(undefined)));
|
|
46
|
+
if (!config?.CachePolicyConfig)
|
|
47
|
+
return undefined;
|
|
48
|
+
return { config: config.CachePolicyConfig, etag: config.ETag };
|
|
49
|
+
});
|
|
50
|
+
const getByName = Effect.fn(function* (name) {
|
|
51
|
+
const listed = yield* cloudfront.listCachePolicies({ Type: "custom" });
|
|
52
|
+
const summary = listed.CachePolicyList?.Items?.find((item) => item.CachePolicy?.CachePolicyConfig?.Name === name);
|
|
53
|
+
if (!summary?.CachePolicy?.Id)
|
|
54
|
+
return undefined;
|
|
55
|
+
return yield* getById(summary.CachePolicy.Id).pipe(Effect.map((found) => found ? { id: summary.CachePolicy.Id, ...found } : undefined));
|
|
56
|
+
});
|
|
57
|
+
const buildConfig = (name, props) => ({
|
|
58
|
+
Name: name,
|
|
59
|
+
Comment: props.comment,
|
|
60
|
+
MinTTL: props.minTTL,
|
|
61
|
+
DefaultTTL: props.defaultTTL,
|
|
62
|
+
MaxTTL: props.maxTTL,
|
|
63
|
+
ParametersInCacheKeyAndForwardedToOrigin: props.parametersInCacheKeyAndForwardedToOrigin,
|
|
64
|
+
});
|
|
65
|
+
const toAttrs = (id, config, etag) => ({
|
|
66
|
+
cachePolicyId: id,
|
|
67
|
+
name: config.Name,
|
|
68
|
+
etag,
|
|
69
|
+
comment: config.Comment,
|
|
70
|
+
minTTL: config.MinTTL,
|
|
71
|
+
defaultTTL: config.DefaultTTL,
|
|
72
|
+
maxTTL: config.MaxTTL,
|
|
73
|
+
parametersInCacheKeyAndForwardedToOrigin: config.ParametersInCacheKeyAndForwardedToOrigin,
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
stables: ["cachePolicyId"],
|
|
77
|
+
diff: Effect.fn(function* ({ id, news, olds }) {
|
|
78
|
+
if (!isResolved(news))
|
|
79
|
+
return undefined;
|
|
80
|
+
if ((yield* createName(id, olds ?? {})) !==
|
|
81
|
+
(yield* createName(id, news))) {
|
|
82
|
+
return { action: "replace" };
|
|
83
|
+
}
|
|
84
|
+
}),
|
|
85
|
+
read: Effect.fn(function* ({ id, olds, output }) {
|
|
86
|
+
if (output?.cachePolicyId) {
|
|
87
|
+
const found = yield* getById(output.cachePolicyId);
|
|
88
|
+
if (found)
|
|
89
|
+
return toAttrs(output.cachePolicyId, found.config, found.etag);
|
|
90
|
+
}
|
|
91
|
+
const name = yield* createName(id, olds ?? {});
|
|
92
|
+
const found = yield* getByName(name);
|
|
93
|
+
if (!found)
|
|
94
|
+
return undefined;
|
|
95
|
+
return toAttrs(found.id, found.config, found.etag);
|
|
96
|
+
}),
|
|
97
|
+
create: Effect.fn(function* ({ id, news, session }) {
|
|
98
|
+
const name = yield* createName(id, news);
|
|
99
|
+
const created = yield* cloudfront
|
|
100
|
+
.createCachePolicy({ CachePolicyConfig: buildConfig(name, news) })
|
|
101
|
+
.pipe(Effect.catchTag("CachePolicyAlreadyExists", () => getByName(name).pipe(Effect.flatMap((existing) => existing
|
|
102
|
+
? Effect.succeed({
|
|
103
|
+
CachePolicy: {
|
|
104
|
+
Id: existing.id,
|
|
105
|
+
LastModifiedTime: new Date(),
|
|
106
|
+
CachePolicyConfig: existing.config,
|
|
107
|
+
},
|
|
108
|
+
ETag: existing.etag,
|
|
109
|
+
Location: undefined,
|
|
110
|
+
})
|
|
111
|
+
: Effect.fail(new Error(`Cache policy '${name}' already exists but could not be recovered`))))));
|
|
112
|
+
if (!created.CachePolicy?.Id) {
|
|
113
|
+
return yield* Effect.fail(new Error("createCachePolicy returned no identifier"));
|
|
114
|
+
}
|
|
115
|
+
yield* session.note(created.CachePolicy.Id);
|
|
116
|
+
return toAttrs(created.CachePolicy.Id, created.CachePolicy.CachePolicyConfig, created.ETag);
|
|
117
|
+
}),
|
|
118
|
+
update: Effect.fn(function* ({ news, output, session }) {
|
|
119
|
+
const current = yield* getById(output.cachePolicyId);
|
|
120
|
+
const updated = yield* cloudfront.updateCachePolicy({
|
|
121
|
+
Id: output.cachePolicyId,
|
|
122
|
+
IfMatch: current?.etag ?? output.etag,
|
|
123
|
+
CachePolicyConfig: buildConfig(output.name, news),
|
|
124
|
+
});
|
|
125
|
+
if (!updated.CachePolicy?.Id) {
|
|
126
|
+
return yield* Effect.fail(new Error("updateCachePolicy returned no identifier"));
|
|
127
|
+
}
|
|
128
|
+
yield* session.note(output.cachePolicyId);
|
|
129
|
+
return toAttrs(updated.CachePolicy.Id, updated.CachePolicy.CachePolicyConfig, updated.ETag);
|
|
130
|
+
}),
|
|
131
|
+
delete: Effect.fn(function* ({ output }) {
|
|
132
|
+
const current = yield* getById(output.cachePolicyId);
|
|
133
|
+
if (!current)
|
|
134
|
+
return;
|
|
135
|
+
yield* cloudfront
|
|
136
|
+
.deleteCachePolicy({
|
|
137
|
+
Id: output.cachePolicyId,
|
|
138
|
+
IfMatch: current.etag,
|
|
139
|
+
})
|
|
140
|
+
.pipe(Effect.catchTag("NoSuchCachePolicy", () => Effect.void));
|
|
141
|
+
}),
|
|
142
|
+
};
|
|
143
|
+
}));
|
|
144
|
+
const createName = (id, props) => props.name
|
|
145
|
+
? Effect.succeed(props.name)
|
|
146
|
+
: createPhysicalName({ id, maxLength: 128, lowercase: true });
|
|
147
|
+
//# sourceMappingURL=CachePolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CachePolicy.js","sourceRoot":"","sources":["../../../src/AWS/CloudFront/CachePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAC;AAC9D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA8E7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAc,4BAA4B,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CACtC,QAAQ,CAAC,MAAM,CACb,WAAW,EACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAU;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU;aAC7B,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;aAChC,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACtE,CAAC;QACJ,IAAI,CAAC,MAAM,EAAE,iBAAiB;YAAE,OAAO,SAAS,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAY;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CACjD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,IAAI,KAAK,IAAI,CAC7D,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE;YAAE,OAAO,SAAS,CAAC;QAChD,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAChD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7D,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,CAClB,IAAY,EACZ,KAAuB,EACO,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,wCAAwC,EACtC,KAAK,CAAC,wCAAwC;KACjD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CACd,EAAU,EACV,MAAoC,EACpC,IAAwB,EACxB,EAAE,CAAC,CAAC;QACJ,aAAa,EAAE,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI;QACJ,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,wCAAwC,EACtC,MAAM,CAAC,wCAAwC;KAClD,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,CAAC,eAAe,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACxC,IACE,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBACnC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAC7B,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAW,CAAC;YACxC,CAAC;QACH,CAAC,CAAC;QACF,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC7C,IAAI,MAAM,EAAE,aAAa,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,KAAK;oBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5E,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU;iBAC9B,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;iBACjE,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAC/C,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAClB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC1B,QAAQ;gBACN,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACb,WAAW,EAAE;wBACX,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,gBAAgB,EAAE,IAAI,IAAI,EAAE;wBAC5B,iBAAiB,EAAE,QAAQ,CAAC,MAAM;qBACnC;oBACD,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,QAAQ,EAAE,SAAS;iBACpB,CAAC;gBACJ,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,KAAK,CACP,iBAAiB,IAAI,6CAA6C,CACnE,CACF,CACN,CACF,CACF,CACF,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,KAAK,CAAC,0CAA0C,CAAC,CACtD,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,OAAO,CACZ,OAAO,CAAC,WAAW,CAAC,EAAE,EACtB,OAAO,CAAC,WAAW,CAAC,iBAAiB,EACrC,OAAO,CAAC,IAAI,CACb,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBAClD,EAAE,EAAE,MAAM,CAAC,aAAa;gBACxB,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI;gBACrC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;aAClD,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,KAAK,CAAC,0CAA0C,CAAC,CACtD,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1C,OAAO,OAAO,CACZ,OAAO,CAAC,WAAW,CAAC,EAAE,EACtB,OAAO,CAAC,WAAW,CAAC,iBAAiB,EACrC,OAAO,CAAC,IAAI,CACb,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,KAAK,CAAC,CAAC,UAAU;iBACd,iBAAiB,CAAC;gBACjB,EAAE,EAAE,MAAM,CAAC,aAAa;gBACxB,OAAO,EAAE,OAAO,CAAC,IAAI;aACtB,CAAC;iBACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC,CACH,CAAC;AAEJ,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,KAAuB,EAAE,EAAE,CACzD,KAAK,CAAC,IAAI;IACR,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Input } from "../../Input.ts";
|
|
2
|
+
import * as Provider from "../../Provider.ts";
|
|
3
|
+
import { Resource } from "../../Resource.ts";
|
|
4
|
+
import type { Providers } from "../Providers.ts";
|
|
5
|
+
export interface KeyGroupProps {
|
|
6
|
+
/**
|
|
7
|
+
* Name of the key group. If omitted, a deterministic name is generated.
|
|
8
|
+
*
|
|
9
|
+
* Names must be unique per AWS account. Changing the name triggers
|
|
10
|
+
* a replacement.
|
|
11
|
+
*/
|
|
12
|
+
name?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Public key IDs that belong to the group. Order is preserved.
|
|
15
|
+
*/
|
|
16
|
+
items: Input<string>[];
|
|
17
|
+
/**
|
|
18
|
+
* Optional comment describing the group.
|
|
19
|
+
*/
|
|
20
|
+
comment?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface KeyGroup extends Resource<"AWS.CloudFront.KeyGroup", KeyGroupProps, {
|
|
23
|
+
/**
|
|
24
|
+
* CloudFront-assigned key group identifier. Used by Distributions in
|
|
25
|
+
* `TrustedKeyGroups` to authorize signed URLs/cookies.
|
|
26
|
+
*/
|
|
27
|
+
keyGroupId: string;
|
|
28
|
+
/**
|
|
29
|
+
* Name of the key group.
|
|
30
|
+
*/
|
|
31
|
+
name: string;
|
|
32
|
+
/**
|
|
33
|
+
* Public key IDs that belong to the group.
|
|
34
|
+
*/
|
|
35
|
+
items: string[];
|
|
36
|
+
/**
|
|
37
|
+
* Most recent entity tag for update/delete operations.
|
|
38
|
+
*/
|
|
39
|
+
etag: string | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Current comment on the group.
|
|
42
|
+
*/
|
|
43
|
+
comment: string | undefined;
|
|
44
|
+
}, never, Providers> {
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A CloudFront key group.
|
|
48
|
+
*
|
|
49
|
+
* Key groups bundle one or more {@link PublicKey} resources for use as
|
|
50
|
+
* `TrustedKeyGroups` on a Distribution's cache behavior. CloudFront uses
|
|
51
|
+
* the keys in the group to verify the signatures on signed URLs and
|
|
52
|
+
* signed cookies for that behavior.
|
|
53
|
+
*
|
|
54
|
+
* @section Creating Key Groups
|
|
55
|
+
* @example Group two public keys for signed URL verification
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const primary = yield* PublicKey("PrimarySigningKey", {
|
|
58
|
+
* encodedKey: yield* fs.readFileString("./primary.pem"),
|
|
59
|
+
* });
|
|
60
|
+
* const secondary = yield* PublicKey("SecondarySigningKey", {
|
|
61
|
+
* encodedKey: yield* fs.readFileString("./secondary.pem"),
|
|
62
|
+
* });
|
|
63
|
+
*
|
|
64
|
+
* const keyGroup = yield* KeyGroup("SignedUrlKeys", {
|
|
65
|
+
* comment: "Trusted signers for /private",
|
|
66
|
+
* items: [primary.publicKeyId, secondary.publicKeyId],
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare const KeyGroup: import("../../Resource.ts").ResourceClass<KeyGroup>;
|
|
71
|
+
export declare const KeyGroupProvider: () => import("effect/Layer").Layer<Provider.Provider<KeyGroup>, never, import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | import("../../Stack.ts").Stack | import("@distilled.cloud/aws/Region").Region | import("@distilled.cloud/aws/Credentials").Credentials>;
|
|
72
|
+
//# sourceMappingURL=KeyGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyGroup.d.ts","sourceRoot":"","sources":["../../../src/AWS/CloudFront/KeyGroup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ,CACxC,yBAAyB,EACzB,aAAa,EACb;IACE;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,EACD,KAAK,EACL,SAAS,CACV;CAAG;AAEJ;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,QAAQ,qDAAgD,CAAC;AAEtE,eAAO,MAAM,gBAAgB,wSAgJ1B,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import * as cloudfront from "@distilled.cloud/aws/cloudfront";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { isResolved } from "../../Diff.js";
|
|
4
|
+
import { createPhysicalName } from "../../PhysicalName.js";
|
|
5
|
+
import * as Provider from "../../Provider.js";
|
|
6
|
+
import { Resource } from "../../Resource.js";
|
|
7
|
+
/**
|
|
8
|
+
* A CloudFront key group.
|
|
9
|
+
*
|
|
10
|
+
* Key groups bundle one or more {@link PublicKey} resources for use as
|
|
11
|
+
* `TrustedKeyGroups` on a Distribution's cache behavior. CloudFront uses
|
|
12
|
+
* the keys in the group to verify the signatures on signed URLs and
|
|
13
|
+
* signed cookies for that behavior.
|
|
14
|
+
*
|
|
15
|
+
* @section Creating Key Groups
|
|
16
|
+
* @example Group two public keys for signed URL verification
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const primary = yield* PublicKey("PrimarySigningKey", {
|
|
19
|
+
* encodedKey: yield* fs.readFileString("./primary.pem"),
|
|
20
|
+
* });
|
|
21
|
+
* const secondary = yield* PublicKey("SecondarySigningKey", {
|
|
22
|
+
* encodedKey: yield* fs.readFileString("./secondary.pem"),
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* const keyGroup = yield* KeyGroup("SignedUrlKeys", {
|
|
26
|
+
* comment: "Trusted signers for /private",
|
|
27
|
+
* items: [primary.publicKeyId, secondary.publicKeyId],
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export const KeyGroup = Resource("AWS.CloudFront.KeyGroup");
|
|
32
|
+
export const KeyGroupProvider = () => Provider.effect(KeyGroup, Effect.gen(function* () {
|
|
33
|
+
const getById = Effect.fn(function* (id) {
|
|
34
|
+
const config = yield* cloudfront
|
|
35
|
+
.getKeyGroupConfig({ Id: id })
|
|
36
|
+
.pipe(Effect.catchTag("NoSuchResource", () => Effect.succeed(undefined)));
|
|
37
|
+
if (!config?.KeyGroupConfig)
|
|
38
|
+
return undefined;
|
|
39
|
+
return { config: config.KeyGroupConfig, etag: config.ETag };
|
|
40
|
+
});
|
|
41
|
+
const getByName = Effect.fn(function* (name) {
|
|
42
|
+
const listed = yield* cloudfront.listKeyGroups({});
|
|
43
|
+
const summary = listed.KeyGroupList?.Items?.find((item) => item.KeyGroup?.KeyGroupConfig?.Name === name);
|
|
44
|
+
if (!summary?.KeyGroup?.Id)
|
|
45
|
+
return undefined;
|
|
46
|
+
return yield* getById(summary.KeyGroup.Id).pipe(Effect.map((found) => found ? { id: summary.KeyGroup.Id, ...found } : undefined));
|
|
47
|
+
});
|
|
48
|
+
const buildConfig = (name, items, comment) => ({
|
|
49
|
+
Name: name,
|
|
50
|
+
Items: items,
|
|
51
|
+
Comment: comment,
|
|
52
|
+
});
|
|
53
|
+
const toAttrs = (id, config, etag) => ({
|
|
54
|
+
keyGroupId: id,
|
|
55
|
+
name: config.Name,
|
|
56
|
+
items: config.Items,
|
|
57
|
+
etag,
|
|
58
|
+
comment: config.Comment,
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
stables: ["keyGroupId"],
|
|
62
|
+
diff: Effect.fn(function* ({ id, news, olds }) {
|
|
63
|
+
if (!isResolved(news))
|
|
64
|
+
return undefined;
|
|
65
|
+
if ((yield* createName(id, olds ?? {})) !==
|
|
66
|
+
(yield* createName(id, news))) {
|
|
67
|
+
return { action: "replace" };
|
|
68
|
+
}
|
|
69
|
+
}),
|
|
70
|
+
read: Effect.fn(function* ({ id, olds, output }) {
|
|
71
|
+
if (output?.keyGroupId) {
|
|
72
|
+
const found = yield* getById(output.keyGroupId);
|
|
73
|
+
if (found)
|
|
74
|
+
return toAttrs(output.keyGroupId, found.config, found.etag);
|
|
75
|
+
}
|
|
76
|
+
const name = yield* createName(id, olds ?? {});
|
|
77
|
+
const found = yield* getByName(name);
|
|
78
|
+
if (!found)
|
|
79
|
+
return undefined;
|
|
80
|
+
return toAttrs(found.id, found.config, found.etag);
|
|
81
|
+
}),
|
|
82
|
+
create: Effect.fn(function* ({ id, news, session }) {
|
|
83
|
+
const name = yield* createName(id, news);
|
|
84
|
+
const items = news.items;
|
|
85
|
+
const created = yield* cloudfront
|
|
86
|
+
.createKeyGroup({
|
|
87
|
+
KeyGroupConfig: buildConfig(name, items, news.comment),
|
|
88
|
+
})
|
|
89
|
+
.pipe(Effect.catchTag("KeyGroupAlreadyExists", () => getByName(name).pipe(Effect.flatMap((existing) => existing
|
|
90
|
+
? Effect.succeed({
|
|
91
|
+
KeyGroup: {
|
|
92
|
+
Id: existing.id,
|
|
93
|
+
LastModifiedTime: new Date(),
|
|
94
|
+
KeyGroupConfig: existing.config,
|
|
95
|
+
},
|
|
96
|
+
ETag: existing.etag,
|
|
97
|
+
Location: undefined,
|
|
98
|
+
})
|
|
99
|
+
: Effect.fail(new Error(`Key group '${name}' already exists but could not be recovered`))))));
|
|
100
|
+
if (!created.KeyGroup?.Id) {
|
|
101
|
+
return yield* Effect.fail(new Error("createKeyGroup returned no identifier"));
|
|
102
|
+
}
|
|
103
|
+
yield* session.note(created.KeyGroup.Id);
|
|
104
|
+
return toAttrs(created.KeyGroup.Id, created.KeyGroup.KeyGroupConfig, created.ETag);
|
|
105
|
+
}),
|
|
106
|
+
update: Effect.fn(function* ({ news, output, session }) {
|
|
107
|
+
const current = yield* getById(output.keyGroupId);
|
|
108
|
+
const items = news.items;
|
|
109
|
+
const updated = yield* cloudfront.updateKeyGroup({
|
|
110
|
+
Id: output.keyGroupId,
|
|
111
|
+
IfMatch: current?.etag ?? output.etag,
|
|
112
|
+
KeyGroupConfig: buildConfig(output.name, items, news.comment),
|
|
113
|
+
});
|
|
114
|
+
if (!updated.KeyGroup?.Id) {
|
|
115
|
+
return yield* Effect.fail(new Error("updateKeyGroup returned no identifier"));
|
|
116
|
+
}
|
|
117
|
+
yield* session.note(output.keyGroupId);
|
|
118
|
+
return toAttrs(updated.KeyGroup.Id, updated.KeyGroup.KeyGroupConfig, updated.ETag);
|
|
119
|
+
}),
|
|
120
|
+
delete: Effect.fn(function* ({ output }) {
|
|
121
|
+
const current = yield* getById(output.keyGroupId);
|
|
122
|
+
if (!current)
|
|
123
|
+
return;
|
|
124
|
+
yield* cloudfront
|
|
125
|
+
.deleteKeyGroup({
|
|
126
|
+
Id: output.keyGroupId,
|
|
127
|
+
IfMatch: current.etag,
|
|
128
|
+
})
|
|
129
|
+
.pipe(Effect.catchTag("NoSuchResource", () => Effect.void));
|
|
130
|
+
}),
|
|
131
|
+
};
|
|
132
|
+
}));
|
|
133
|
+
const createName = (id, props) => props.name
|
|
134
|
+
? Effect.succeed(props.name)
|
|
135
|
+
: createPhysicalName({ id, maxLength: 128, lowercase: true });
|
|
136
|
+
//# sourceMappingURL=KeyGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyGroup.js","sourceRoot":"","sources":["../../../src/AWS/CloudFront/KeyGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as cloudfront from "@distilled.cloud/aws/cloudfront";
|
|
2
|
+
import * as Provider from "../../Provider.ts";
|
|
3
|
+
import { Resource } from "../../Resource.ts";
|
|
4
|
+
import type { Providers } from "../Providers.ts";
|
|
5
|
+
export interface OriginRequestPolicyProps {
|
|
6
|
+
/**
|
|
7
|
+
* Name of the origin request policy. If omitted, a deterministic name is
|
|
8
|
+
* generated. Names must be unique per AWS account. Changing the name
|
|
9
|
+
* triggers a replacement.
|
|
10
|
+
*/
|
|
11
|
+
name?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Optional comment describing the policy.
|
|
14
|
+
*/
|
|
15
|
+
comment?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Headers to forward to the origin (in addition to the cache key).
|
|
18
|
+
*/
|
|
19
|
+
headersConfig: cloudfront.OriginRequestPolicyHeadersConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Cookies to forward to the origin (in addition to the cache key).
|
|
22
|
+
*/
|
|
23
|
+
cookiesConfig: cloudfront.OriginRequestPolicyCookiesConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Query strings to forward to the origin (in addition to the cache key).
|
|
26
|
+
*/
|
|
27
|
+
queryStringsConfig: cloudfront.OriginRequestPolicyQueryStringsConfig;
|
|
28
|
+
}
|
|
29
|
+
export interface OriginRequestPolicy extends Resource<"AWS.CloudFront.OriginRequestPolicy", OriginRequestPolicyProps, {
|
|
30
|
+
/**
|
|
31
|
+
* CloudFront-assigned origin request policy identifier.
|
|
32
|
+
*/
|
|
33
|
+
originRequestPolicyId: string;
|
|
34
|
+
/**
|
|
35
|
+
* Name of the origin request policy.
|
|
36
|
+
*/
|
|
37
|
+
name: string;
|
|
38
|
+
/**
|
|
39
|
+
* Most recent entity tag for update/delete operations.
|
|
40
|
+
*/
|
|
41
|
+
etag: string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Current comment on the policy.
|
|
44
|
+
*/
|
|
45
|
+
comment: string | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Current headers configuration.
|
|
48
|
+
*/
|
|
49
|
+
headersConfig: cloudfront.OriginRequestPolicyHeadersConfig;
|
|
50
|
+
/**
|
|
51
|
+
* Current cookies configuration.
|
|
52
|
+
*/
|
|
53
|
+
cookiesConfig: cloudfront.OriginRequestPolicyCookiesConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Current query strings configuration.
|
|
56
|
+
*/
|
|
57
|
+
queryStringsConfig: cloudfront.OriginRequestPolicyQueryStringsConfig;
|
|
58
|
+
}, never, Providers> {
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A CloudFront origin request policy.
|
|
62
|
+
*
|
|
63
|
+
* Origin request policies control which values from the viewer request (in
|
|
64
|
+
* addition to those used in the cache key) CloudFront includes when sending
|
|
65
|
+
* a request to the origin. They are referenced by ID on a Distribution's
|
|
66
|
+
* default behavior or per-path cache behaviors.
|
|
67
|
+
*
|
|
68
|
+
* @section Creating Origin Request Policies
|
|
69
|
+
* @example Forward all viewer headers and cookies
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const originRequestPolicy = yield* OriginRequestPolicy("AppOriginRequest", {
|
|
72
|
+
* comment: "Forward auth + locale",
|
|
73
|
+
* headersConfig: {
|
|
74
|
+
* HeaderBehavior: "whitelist",
|
|
75
|
+
* Headers: { Quantity: 2, Items: ["Authorization", "Accept-Language"] },
|
|
76
|
+
* },
|
|
77
|
+
* cookiesConfig: { CookieBehavior: "all" },
|
|
78
|
+
* queryStringsConfig: { QueryStringBehavior: "all" },
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare const OriginRequestPolicy: import("../../Resource.ts").ResourceClass<OriginRequestPolicy>;
|
|
83
|
+
export declare const OriginRequestPolicyProvider: () => import("effect/Layer").Layer<Provider.Provider<OriginRequestPolicy>, never, import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | import("../../Stack.ts").Stack | import("@distilled.cloud/aws/Region").Region | import("@distilled.cloud/aws/Credentials").Credentials>;
|
|
84
|
+
//# sourceMappingURL=OriginRequestPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OriginRequestPolicy.d.ts","sourceRoot":"","sources":["../../../src/AWS/CloudFront/OriginRequestPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAC;AAI9D,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC,gCAAgC,CAAC;IAC3D;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC,gCAAgC,CAAC;IAC3D;;OAEG;IACH,kBAAkB,EAAE,UAAU,CAAC,qCAAqC,CAAC;CACtE;AAED,MAAM,WAAW,mBAAoB,SAAQ,QAAQ,CACnD,oCAAoC,EACpC,wBAAwB,EACxB;IACE;;OAEG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC,gCAAgC,CAAC;IAC3D;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC,gCAAgC,CAAC;IAC3D;;OAEG;IACH,kBAAkB,EAAE,UAAU,CAAC,qCAAqC,CAAC;CACtE,EACD,KAAK,EACL,SAAS,CACV;CAAG;AAEJ;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,mBAAmB,gEAE/B,CAAC;AAEF,eAAO,MAAM,2BAA2B,mTA0JrC,CAAC"}
|