@liflig/cdk 2.17.0 → 2.18.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.
- package/package.json +12 -12
- package/assets/cloudtrail-slack-integration-lambda/main.py +0 -267
- package/assets/pipeline-slack-notification-lambda/index.py +0 -300
- package/assets/prepare-cdk-source-lambda/index.py +0 -159
- package/assets/slack-alarm-lambda/index.py +0 -103
- package/lib/alarms/database-alarms.d.ts +0 -125
- package/lib/alarms/database-alarms.js +0 -171
- package/lib/alarms/index.d.ts +0 -3
- package/lib/alarms/index.js +0 -10
- package/lib/alarms/service-alarms.d.ts +0 -145
- package/lib/alarms/service-alarms.js +0 -148
- package/lib/alarms/ses-alarms.d.ts +0 -67
- package/lib/alarms/ses-alarms.js +0 -49
- package/lib/alarms/slack-alarm.d.ts +0 -25
- package/lib/alarms/slack-alarm.js +0 -47
- package/lib/bastion-host.d.ts +0 -41
- package/lib/bastion-host.js +0 -86
- package/lib/bin/cdk-create-snapshots.d.ts +0 -2
- package/lib/bin/fetch-pipeline-variables.d.ts +0 -2
- package/lib/build-artifacts/index.d.ts +0 -68
- package/lib/build-artifacts/index.js +0 -118
- package/lib/cdk-deploy/cdk-deploy.d.ts +0 -63
- package/lib/cdk-deploy/cdk-deploy.js +0 -175
- package/lib/cdk-deploy/index.d.ts +0 -1
- package/lib/cdk-deploy/index.js +0 -6
- package/lib/cdk-deploy/start-deploy-handler.d.ts +0 -8
- package/lib/cdk-deploy/start-deploy-handler.js +0 -72
- package/lib/cdk-deploy/status-handler.d.ts +0 -6
- package/lib/cdk-deploy/status-handler.js +0 -83
- package/lib/cdk-pipelines/cloud-assembly-lookup-handler.d.ts +0 -6
- package/lib/cdk-pipelines/cloud-assembly-lookup-handler.js +0 -63
- package/lib/cdk-pipelines/index.d.ts +0 -3
- package/lib/cdk-pipelines/index.js +0 -10
- package/lib/cdk-pipelines/liflig-cdk-pipeline.d.ts +0 -110
- package/lib/cdk-pipelines/liflig-cdk-pipeline.js +0 -232
- package/lib/cdk-pipelines/slack-notification.d.ts +0 -51
- package/lib/cdk-pipelines/slack-notification.js +0 -54
- package/lib/cdk-pipelines/variables.d.ts +0 -15
- package/lib/cdk-pipelines/variables.js +0 -80
- package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.d.ts +0 -47
- package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.js +0 -211
- package/lib/cloudtrail-slack-integration/index.d.ts +0 -1
- package/lib/cloudtrail-slack-integration/index.js +0 -6
- package/lib/configure-parameters/configure-parameters.d.ts +0 -61
- package/lib/configure-parameters/configure-parameters.js +0 -94
- package/lib/configure-parameters/index.d.ts +0 -1
- package/lib/configure-parameters/index.js +0 -6
- package/lib/cross-region-ssm-parameter.d.ts +0 -13
- package/lib/cross-region-ssm-parameter.js +0 -46
- package/lib/ecs/cluster.d.ts +0 -25
- package/lib/ecs/cluster.js +0 -70
- package/lib/ecs/fargate-service.d.ts +0 -62
- package/lib/ecs/fargate-service.js +0 -99
- package/lib/ecs/index.d.ts +0 -3
- package/lib/ecs/index.js +0 -10
- package/lib/ecs/listener-rule.d.ts +0 -25
- package/lib/ecs/listener-rule.js +0 -27
- package/lib/ecs-update-image/artifact-status.d.ts +0 -39
- package/lib/ecs-update-image/artifact-status.js +0 -41
- package/lib/ecs-update-image/ecs-update-image.d.ts +0 -41
- package/lib/ecs-update-image/ecs-update-image.js +0 -98
- package/lib/ecs-update-image/index.d.ts +0 -3
- package/lib/ecs-update-image/index.js +0 -10
- package/lib/ecs-update-image/start-deploy-handler.d.ts +0 -6
- package/lib/ecs-update-image/start-deploy-handler.js +0 -104
- package/lib/ecs-update-image/status-handler.d.ts +0 -11
- package/lib/ecs-update-image/status-handler.js +0 -74
- package/lib/ecs-update-image/tag.d.ts +0 -47
- package/lib/ecs-update-image/tag.js +0 -67
- package/lib/feature-flags.d.ts +0 -18
- package/lib/feature-flags.js +0 -48
- package/lib/griid/artefact-bucket.d.ts +0 -7
- package/lib/griid/artefact-bucket.js +0 -30
- package/lib/griid/index.d.ts +0 -4
- package/lib/griid/index.js +0 -18
- package/lib/hosted-zone-with-param.d.ts +0 -29
- package/lib/hosted-zone-with-param.js +0 -65
- package/lib/index.d.ts +0 -32
- package/lib/kinesis/index.d.ts +0 -1
- package/lib/kinesis/index.js +0 -6
- package/lib/kinesis/kinesis-to-datadog-stream.d.ts +0 -28
- package/lib/kinesis/kinesis-to-datadog-stream.js +0 -126
- package/lib/load-balancer/index.d.ts +0 -1
- package/lib/load-balancer/index.js +0 -6
- package/lib/load-balancer/load-balancer.d.ts +0 -16
- package/lib/load-balancer/load-balancer.js +0 -60
- package/lib/pipelines/conventions.d.ts +0 -14
- package/lib/pipelines/conventions.js +0 -24
- package/lib/pipelines/deploy-env.d.ts +0 -18
- package/lib/pipelines/deploy-env.js +0 -96
- package/lib/pipelines/index.d.ts +0 -2
- package/lib/pipelines/index.js +0 -8
- package/lib/pipelines/liflig-cdk-deployer-deps.d.ts +0 -13
- package/lib/pipelines/liflig-cdk-deployer-deps.js +0 -35
- package/lib/pipelines/pipeline.d.ts +0 -78
- package/lib/pipelines/pipeline.js +0 -224
- package/lib/platform/index.d.ts +0 -1
- package/lib/platform/index.js +0 -7
- package/lib/platform/platform.d.ts +0 -37
- package/lib/platform/platform.js +0 -57
- package/lib/rds/database.d.ts +0 -49
- package/lib/rds/database.js +0 -60
- package/lib/rds/index.d.ts +0 -1
- package/lib/rds/index.js +0 -6
- package/lib/ses/configurationsetdeliveryoptions/index.d.ts +0 -26
- package/lib/ses/configurationsetdeliveryoptions/index.js +0 -48
- package/lib/ses/configurationsetsnsdestination/handler.d.ts +0 -17
- package/lib/ses/configurationsetsnsdestination/handler.js +0 -75
- package/lib/ses/configurationsetsnsdestination/index.d.ts +0 -29
- package/lib/ses/configurationsetsnsdestination/index.js +0 -75
- package/lib/ses/index.d.ts +0 -4
- package/lib/ses/index.js +0 -12
- package/lib/ses/sesdomain/handler.d.ts +0 -10
- package/lib/ses/sesdomain/handler.js +0 -82
- package/lib/ses/sesdomain/index.d.ts +0 -57
- package/lib/ses/sesdomain/index.js +0 -94
- package/lib/ses/sesverifyemail/handler.d.ts +0 -9
- package/lib/ses/sesverifyemail/handler.js +0 -25
- package/lib/ses/sesverifyemail/index.d.ts +0 -13
- package/lib/ses/sesverifyemail/index.js +0 -51
- package/lib/snapshots.d.ts +0 -4
- package/lib/snapshots.js +0 -214
- package/lib/ssm-parameter-backed-resource.d.ts +0 -45
- package/lib/ssm-parameter-backed-resource.js +0 -67
- package/lib/ssm-parameter-reader.d.ts +0 -21
- package/lib/ssm-parameter-reader.js +0 -48
- package/lib/tags.d.ts +0 -8
- package/lib/tags.js +0 -36
- package/lib/utils.d.ts +0 -2
- package/lib/utils.js +0 -17
- package/lib/webapp/index.d.ts +0 -3
- package/lib/webapp/index.js +0 -10
- package/lib/webapp/monitor.d.ts +0 -187
- package/lib/webapp/monitor.js +0 -156
- package/lib/webapp/security-headers.d.ts +0 -38
- package/lib/webapp/security-headers.js +0 -129
- package/lib/webapp/webapp.d.ts +0 -116
- package/lib/webapp/webapp.js +0 -118
- package/lib/webapp-deploy-via-role.d.ts +0 -25
- package/lib/webapp-deploy-via-role.js +0 -32
package/lib/snapshots.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createCloudAssemblySnapshot = void 0;
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
5
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
6
|
-
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
7
|
-
const cpy = require("cpy");
|
|
8
|
-
const del = require("del");
|
|
9
|
-
const fs = require("fs");
|
|
10
|
-
const glob = require("glob");
|
|
11
|
-
const path = require("path");
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
-
function removeVersion(data) {
|
|
14
|
-
const cp = {
|
|
15
|
-
...data,
|
|
16
|
-
};
|
|
17
|
-
delete cp.version;
|
|
18
|
-
return cp;
|
|
19
|
-
}
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
-
function removeTrace(data) {
|
|
22
|
-
if (data instanceof Array) {
|
|
23
|
-
return data.map(removeTrace);
|
|
24
|
-
}
|
|
25
|
-
if (data === Object(data)) {
|
|
26
|
-
return Object.fromEntries(Object.entries(data)
|
|
27
|
-
.filter(([key]) => key !== "trace")
|
|
28
|
-
.map(([key, value]) => [key, removeTrace(value)]));
|
|
29
|
-
}
|
|
30
|
-
return data;
|
|
31
|
-
}
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
-
function removeRuntimeLibraries(data) {
|
|
34
|
-
const cp = {
|
|
35
|
-
...data,
|
|
36
|
-
};
|
|
37
|
-
if (data.runtime) {
|
|
38
|
-
cp.runtime = {
|
|
39
|
-
...data.runtime,
|
|
40
|
-
};
|
|
41
|
-
delete cp.runtime.libraries;
|
|
42
|
-
}
|
|
43
|
-
return cp;
|
|
44
|
-
}
|
|
45
|
-
const currentVersionRegex = /^(.+CurrentVersion[0-9A-F]{8})[0-9a-f]{32}$/;
|
|
46
|
-
/**
|
|
47
|
-
* Match a resource created by `lambda.Function.currentVersion`, which
|
|
48
|
-
* will include the asset hash as part of the reousrce name and return
|
|
49
|
-
* a snapshot-friendly version of it if found.
|
|
50
|
-
*/
|
|
51
|
-
function rewriteCurrentVersionIfFound(value) {
|
|
52
|
-
const match = currentVersionRegex.exec(value);
|
|
53
|
-
return match ? `${match[1]}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` : null;
|
|
54
|
-
}
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
-
function removeAssetDetailsFromTemplate(data) {
|
|
57
|
-
if (data instanceof Array) {
|
|
58
|
-
return data.map(removeAssetDetailsFromTemplate);
|
|
59
|
-
}
|
|
60
|
-
if (data === Object(data)) {
|
|
61
|
-
return Object.fromEntries(Object.entries(data)
|
|
62
|
-
.map(([key, value]) => {
|
|
63
|
-
const newCurrentVersion = rewriteCurrentVersionIfFound(key);
|
|
64
|
-
if (newCurrentVersion) {
|
|
65
|
-
return [newCurrentVersion, removeAssetDetailsFromTemplate(value)];
|
|
66
|
-
}
|
|
67
|
-
else if (key.includes("AssetParameter")) {
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
else if (key === "Ref" &&
|
|
71
|
-
typeof value === "string" &&
|
|
72
|
-
value.includes("AssetParameters")) {
|
|
73
|
-
return [key, "snapshot-value"];
|
|
74
|
-
}
|
|
75
|
-
else if (key === "aws:asset:path" &&
|
|
76
|
-
typeof value === "string" &&
|
|
77
|
-
/asset\.[0-9a-f]{64}/.test(value)) {
|
|
78
|
-
return [key, "asset.snapshot-value"];
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
return [key, removeAssetDetailsFromTemplate(value)];
|
|
82
|
-
}
|
|
83
|
-
})
|
|
84
|
-
.filter((it) => it != null));
|
|
85
|
-
}
|
|
86
|
-
if (typeof data === "string") {
|
|
87
|
-
const newCurrentVersion = rewriteCurrentVersionIfFound(data);
|
|
88
|
-
if (newCurrentVersion) {
|
|
89
|
-
return newCurrentVersion;
|
|
90
|
-
}
|
|
91
|
-
// Handle typical content hashes.
|
|
92
|
-
return data.replace(/[0-9a-f]{64}/g, "snapshot-value");
|
|
93
|
-
}
|
|
94
|
-
return data;
|
|
95
|
-
}
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
|
-
function removeAssetDetailsFromManifest(data) {
|
|
98
|
-
if (data instanceof Array) {
|
|
99
|
-
return data.map(removeAssetDetailsFromManifest);
|
|
100
|
-
}
|
|
101
|
-
if (data === Object(data)) {
|
|
102
|
-
// aws:cdk:asset in metadata
|
|
103
|
-
if (data["type"] === "aws:cdk:asset" && "data" in data) {
|
|
104
|
-
return {
|
|
105
|
-
...data,
|
|
106
|
-
data: "snapshot-value",
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
return Object.fromEntries(Object.entries(data)
|
|
110
|
-
.map(([key, value]) => {
|
|
111
|
-
if (key.includes("AssetParameters")) {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
return [key, removeAssetDetailsFromManifest(value)];
|
|
116
|
-
}
|
|
117
|
-
})
|
|
118
|
-
.filter((it) => it != null));
|
|
119
|
-
}
|
|
120
|
-
if (typeof data === "string") {
|
|
121
|
-
const newCurrentVersion = rewriteCurrentVersionIfFound(data);
|
|
122
|
-
if (newCurrentVersion) {
|
|
123
|
-
return newCurrentVersion;
|
|
124
|
-
}
|
|
125
|
-
// Handle typical content hashes.
|
|
126
|
-
return data.replace(/[0-9a-f]{64}/g, "snapshot-value");
|
|
127
|
-
}
|
|
128
|
-
return data;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Remove the CDKMetadata resources that is part of the synthesized
|
|
132
|
-
* template since CDK 1.63.0.
|
|
133
|
-
*/
|
|
134
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
135
|
-
function removeCdkMetadataResourceFromTemplate(data) {
|
|
136
|
-
const cp = {
|
|
137
|
-
...data,
|
|
138
|
-
Resources: {
|
|
139
|
-
...data.Resources,
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
delete cp.Resources.CDKMetadata;
|
|
143
|
-
return cp;
|
|
144
|
-
}
|
|
145
|
-
function prepareManifestForSnapshot(content) {
|
|
146
|
-
const input = JSON.parse(content);
|
|
147
|
-
const output = [
|
|
148
|
-
removeVersion,
|
|
149
|
-
// Remove the runtime version information so it don't conflict with CI
|
|
150
|
-
// or other users generating the snapshots.
|
|
151
|
-
removeRuntimeLibraries,
|
|
152
|
-
// Remove the trace from manifest for now.
|
|
153
|
-
removeTrace,
|
|
154
|
-
// Avoid details (hashes) from assets.
|
|
155
|
-
removeAssetDetailsFromManifest,
|
|
156
|
-
].reduce((acc, fn) => fn(acc), input);
|
|
157
|
-
return JSON.stringify(output, undefined, " ");
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Transform the Cloud Assembly manifest file so that it can be persisted
|
|
161
|
-
* as a snapshot without causing invalidations for every synthesize.
|
|
162
|
-
*/
|
|
163
|
-
async function prepareManifestFileForSnapshot(file) {
|
|
164
|
-
const result = prepareManifestForSnapshot(await fs.promises.readFile(file, "utf8"));
|
|
165
|
-
await fs.promises.writeFile(file, result);
|
|
166
|
-
}
|
|
167
|
-
function prepareTemplateForSnapshot(content) {
|
|
168
|
-
const input = JSON.parse(content);
|
|
169
|
-
const output = [
|
|
170
|
-
removeCdkMetadataResourceFromTemplate,
|
|
171
|
-
// Avoid details (hashes) from assets.
|
|
172
|
-
removeAssetDetailsFromTemplate,
|
|
173
|
-
].reduce((acc, fn) => fn(acc), input);
|
|
174
|
-
return JSON.stringify(output, undefined, " ");
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Transform a Cloud Assembly template file so that it can be persisted
|
|
178
|
-
* as a snapshot without causing invalidations for minor changes.
|
|
179
|
-
*/
|
|
180
|
-
async function prepareTemplateFileForSnapshot(file) {
|
|
181
|
-
const result = prepareTemplateForSnapshot(await fs.promises.readFile(file, "utf8"));
|
|
182
|
-
await fs.promises.writeFile(file, result);
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Convert a Cloud Assembly to a snapshot.
|
|
186
|
-
*/
|
|
187
|
-
async function createCloudAssemblySnapshot(src, dst) {
|
|
188
|
-
const base = path.join(process.cwd(), dst);
|
|
189
|
-
await cpy(".", base, {
|
|
190
|
-
parents: true,
|
|
191
|
-
cwd: path.join(process.cwd(), src),
|
|
192
|
-
});
|
|
193
|
-
// Don't keep track of manifest version.
|
|
194
|
-
await del(path.join(dst, "**/cdk.out"));
|
|
195
|
-
// The tree file doesn't give us much value as part of the snapshot.
|
|
196
|
-
await del(path.join(dst, "tree.json"));
|
|
197
|
-
// Remove asset contents for now.
|
|
198
|
-
await del(path.join(dst, "**/asset.*"));
|
|
199
|
-
// Remove asset configs so we don't have to update
|
|
200
|
-
// snapshots for asset changes.
|
|
201
|
-
await del(path.join(dst, "**/*.assets.json"));
|
|
202
|
-
// Remove graphviz files generated when using CDK Pipelines
|
|
203
|
-
await del(path.join(dst, "**/*.dot"));
|
|
204
|
-
// Transform the manifest to be more snapshot friendly.
|
|
205
|
-
for (const file of glob.sync("**/manifest.json", { cwd: base })) {
|
|
206
|
-
await prepareManifestFileForSnapshot(path.join(base, file));
|
|
207
|
-
}
|
|
208
|
-
// Transform all templates.
|
|
209
|
-
for (const file of glob.sync("**/*.template.json", { cwd: base })) {
|
|
210
|
-
await prepareTemplateFileForSnapshot(path.join(base, file));
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
exports.createCloudAssemblySnapshot = createCloudAssemblySnapshot;
|
|
214
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NuYXBzaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0REFBNEQ7QUFDNUQsK0RBQStEO0FBQy9ELHdEQUF3RDtBQUN4RCwyQkFBMEI7QUFDMUIsMkJBQTBCO0FBQzFCLHlCQUF3QjtBQUN4Qiw2QkFBNEI7QUFDNUIsNkJBQTRCO0FBRTVCLDhEQUE4RDtBQUM5RCxTQUFTLGFBQWEsQ0FBQyxJQUFTO0lBQzlCLE1BQU0sRUFBRSxHQUFHO1FBQ1QsR0FBRyxJQUFJO0tBQ1IsQ0FBQTtJQUVELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQTtJQUNqQixPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsU0FBUyxXQUFXLENBQUMsSUFBUztJQUM1QixJQUFJLElBQUksWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUErQixDQUFDO2FBQzVDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3BELENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsOERBQThEO0FBQzlELFNBQVMsc0JBQXNCLENBQUMsSUFBUztJQUN2QyxNQUFNLEVBQUUsR0FBRztRQUNULEdB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QyxpQ0FBaUM7SUFDakMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQTtJQUV2QyxrREFBa0Q7SUFDbEQsK0JBQStCO0lBQy9CLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtJQUU3QywyREFBMkQ7SUFDM0QsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUVyQyx1REFBdUQ7SUFDdkQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2xFLE1BQU0sOEJBQThCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0FBQ0gsQ0FBQztBQXBDRCxrRUFvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4gKi9cbmltcG9ydCAqIGFzIGNweSBmcm9tIFwiY3B5XCJcbmltcG9ydCAqIGFzIGRlbCBmcm9tIFwiZGVsXCJcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgKiBhcyBnbG9iIGZyb20gXCJnbG9iXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlVmVyc2lvbihkYXRhOiBhbnkpOiBhbnkge1xuICBjb25zdCBjcCA9IHtcbiAgICAuLi5kYXRhLFxuICB9XG5cbiAgZGVsZXRlIGNwLnZlcnNpb25cbiAgcmV0dXJuIGNwXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiByZW1vdmVUcmFjZShkYXRhOiBhbnkpOiBhbnkge1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKHJlbW92ZVRyYWNlKVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSBcInRyYWNlXCIpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW2tleSwgcmVtb3ZlVHJhY2UodmFsdWUpXSksXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHJlbW92ZVJ1bnRpbWVMaWJyYXJpZXMoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgY3AgPSB7XG4gICAgLi4uZGF0YSxcbiAgfVxuXG4gIGlmIChkYXRhLnJ1bnRpbWUpIHtcbiAgICBjcC5ydW50aW1lID0ge1xuICAgICAgLi4uZGF0YS5ydW50aW1lLFxuICAgIH1cblxuICAgIGRlbGV0ZSBjcC5ydW50aW1lLmxpYnJhcmllc1xuICB9XG5cbiAgcmV0dXJuIGNwXG59XG5cbmNvbnN0IGN1cnJlbnRWZXJzaW9uUmVnZXggPSAvXiguK0N1cnJlbnRWZXJzaW9uWzAtOUEtRl17OH0pWzAtOWEtZl17MzJ9JC9cblxuLyoqXG4gKiBNYXRjaCBhIHJlc291cmNlIGNyZWF0ZWQgYnkgYGxhbWJkYS5GdW5jdGlvbi5jdXJyZW50VmVyc2lvbmAsIHdoaWNoXG4gKiB3aWxsIGluY2x1ZGUgdGhlIGFzc2V0IGhhc2ggYXMgcGFydCBvZiB0aGUgcmVvdXNyY2UgbmFtZSBhbmQgcmV0dXJuXG4gKiBhIHNuYXBzaG90LWZyaWVuZGx5IHZlcnNpb24gb2YgaXQgaWYgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IGN1cnJlbnRWZXJzaW9uUmVnZXguZXhlYyh2YWx1ZSlcbiAgcmV0dXJuIG1hdGNoID8gYCR7bWF0Y2hbMV19eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhgIDogbnVsbFxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKGRhdGE6IGFueSk6IGFueSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdDdXJyZW50VmVyc2lvbiA9IHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQoa2V5KVxuICAgICAgICAgIGlmIChuZXdDdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXdDdXJyZW50VmVyc2lvbiwgcmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKHZhbHVlKV1cbiAgICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmNsdWRlcyhcIkFzc2V0UGFyYW1ldGVyXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBrZXkgPT09IFwiUmVmXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdmFsdWUuaW5jbHVkZXMoXCJBc3NldFBhcmFtZXRlcnNcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCBcInNuYXBzaG90LXZhbHVlXCJdXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGtleSA9PT0gXCJhd3M6YXNzZXQ6cGF0aFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIC9hc3NldFxcLlswLTlhLWZdezY0fS8udGVzdCh2YWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCBcImFzc2V0LnNuYXBzaG90LXZhbHVlXCJdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCByZW1vdmVBc3NldERldGFpbHNGcm9tVGVtcGxhdGUodmFsdWUpXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoaXQpOiBpdCBpcyBbXSA9PiBpdCAhPSBudWxsKSxcbiAgICApXG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBuZXdDdXJyZW50VmVyc2lvbiA9IHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQoZGF0YSlcbiAgICBpZiAobmV3Q3VycmVudFZlcnNpb24pIHtcbiAgICAgIHJldHVybiBuZXdDdXJyZW50VmVyc2lvblxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0eXBpY2FsIGNvbnRlbnQgaGFzaGVzLlxuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL1swLTlhLWZdezY0fS9nLCBcInNuYXBzaG90LXZhbHVlXCIpXG4gIH1cblxuICByZXR1cm4gZGF0YVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0KGRhdGE6IGFueSk6IGFueSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0KVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIC8vIGF3czpjZGs6YXNzZXQgaW4gbWV0YWRhdGFcbiAgICBpZiAoZGF0YVtcInR5cGVcIl0gPT09IFwiYXdzOmNkazphc3NldFwiICYmIFwiZGF0YVwiIGluIGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGRhdGE6IFwic25hcHNob3QtdmFsdWVcIixcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIkFzc2V0UGFyYW1ldGVyc1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHJlbW92ZUFzc2V0RGV0YWlsc0Zyb21NYW5pZmVzdCh2YWx1ZSldXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChpdCk6IGl0IGlzIFtdID0+IGl0ICE9IG51bGwpLFxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG5ld0N1cnJlbnRWZXJzaW9uID0gcmV3cml0ZUN1cnJlbnRWZXJzaW9uSWZGb3VuZChkYXRhKVxuICAgIGlmIChuZXdDdXJyZW50VmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ld0N1cnJlbnRWZXJzaW9uXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHR5cGljYWwgY29udGVudCBoYXNoZXMuXG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvWzAtOWEtZl17NjR9L2csIFwic25hcHNob3QtdmFsdWVcIilcbiAgfVxuXG4gIHJldHVybiBkYXRhXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBDREtNZXRhZGF0YSByZXNvdXJjZXMgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzeW50aGVzaXplZFxuICogdGVtcGxhdGUgc2luY2UgQ0RLIDEuNjMuMC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHJlbW92ZUNka01ldGFkYXRhUmVzb3VyY2VGcm9tVGVtcGxhdGUoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgY3AgPSB7XG4gICAgLi4uZGF0YSxcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIC4uLmRhdGEuUmVzb3VyY2VzLFxuICAgIH0sXG4gIH1cblxuICBkZWxldGUgY3AuUmVzb3VyY2VzLkNES01ldGFkYXRhXG4gIHJldHVybiBjcFxufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWFuaWZlc3RGb3JTbmFwc2hvdChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBpbnB1dCA9IEpTT04ucGFyc2UoY29udGVudClcbiAgY29uc3Qgb3V0cHV0ID0gW1xuICAgIHJlbW92ZVZlcnNpb24sXG4gICAgLy8gUmVtb3ZlIHRoZSBydW50aW1lIHZlcnNpb24gaW5mb3JtYXRpb24gc28gaXQgZG9uJ3QgY29uZmxpY3Qgd2l0aCBDSVxuICAgIC8vIG9yIG90aGVyIHVzZXJzIGdlbmVyYXRpbmcgdGhlIHNuYXBzaG90cy5cbiAgICByZW1vdmVSdW50aW1lTGlicmFyaWVzLFxuICAgIC8vIFJlbW92ZSB0aGUgdHJhY2UgZnJvbSBtYW5pZmVzdCBmb3Igbm93LlxuICAgIHJlbW92ZVRyYWNlLFxuICAgIC8vIEF2b2lkIGRldGFpbHMgKGhhc2hlcykgZnJvbSBhc3NldHMuXG4gICAgcmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0LFxuICBdLnJlZHVjZSgoYWNjLCBmbikgPT4gZm4oYWNjKSwgaW5wdXQpXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG91dHB1dCwgdW5kZWZpbmVkLCBcIiAgXCIpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBDbG91ZCBBc3NlbWJseSBtYW5pZmVzdCBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHBlcnNpc3RlZFxuICogYXMgYSBzbmFwc2hvdCB3aXRob3V0IGNhdXNpbmcgaW52YWxpZGF0aW9ucyBmb3IgZXZlcnkgc3ludGhlc2l6ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZU1hbmlmZXN0RmlsZUZvclNuYXBzaG90KGZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXN1bHQgPSBwcmVwYXJlTWFuaWZlc3RGb3JTbmFwc2hvdChcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlLCBcInV0ZjhcIiksXG4gIClcblxuICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZSwgcmVzdWx0KVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVGVtcGxhdGVGb3JTbmFwc2hvdChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBpbnB1dCA9IEpTT04ucGFyc2UoY29udGVudClcbiAgY29uc3Qgb3V0cHV0ID0gW1xuICAgIHJlbW92ZUNka01ldGFkYXRhUmVzb3VyY2VGcm9tVGVtcGxhdGUsXG4gICAgLy8gQXZvaWQgZGV0YWlscyAoaGFzaGVzKSBmcm9tIGFzc2V0cy5cbiAgICByZW1vdmVBc3NldERldGFpbHNGcm9tVGVtcGxhdGUsXG4gIF0ucmVkdWNlKChhY2MsIGZuKSA9PiBmbihhY2MpLCBpbnB1dClcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3V0cHV0LCB1bmRlZmluZWQsIFwiICBcIilcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBDbG91ZCBBc3NlbWJseSB0ZW1wbGF0ZSBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHBlcnNpc3RlZFxuICogYXMgYSBzbmFwc2hvdCB3aXRob3V0IGNhdXNpbmcgaW52YWxpZGF0aW9ucyBmb3IgbWlub3IgY2hhbmdlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRlbXBsYXRlRmlsZUZvclNuYXBzaG90KGZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXN1bHQgPSBwcmVwYXJlVGVtcGxhdGVGb3JTbmFwc2hvdChcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlLCBcInV0ZjhcIiksXG4gIClcblxuICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZSwgcmVzdWx0KVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBDbG91ZCBBc3NlbWJseSB0byBhIHNuYXBzaG90LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ2xvdWRBc3NlbWJseVNuYXBzaG90KFxuICBzcmM6IHN0cmluZyxcbiAgZHN0OiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmFzZSA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBkc3QpXG5cbiAgYXdhaXQgY3B5KFwiLlwiLCBiYXNlLCB7XG4gICAgcGFyZW50czogdHJ1ZSxcbiAgICBjd2Q6IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBzcmMpLFxuICB9KVxuXG4gIC8vIERvbid0IGtlZXAgdHJhY2sgb2YgbWFuaWZlc3QgdmVyc2lvbi5cbiAgYXdhaXQgZGVsKHBhdGguam9pbihkc3QsIFwiKiovY2RrLm91dFwiKSlcblxuICAvLyBUaGUgdHJlZSBmaWxlIGRvZXNuJ3QgZ2l2ZSB1cyBtdWNoIHZhbHVlIGFzIHBhcnQgb2YgdGhlIHNuYXBzaG90LlxuICBhd2FpdCBkZWwocGF0aC5qb2luKGRzdCwgXCJ0cmVlLmpzb25cIikpXG5cbiAgLy8gUmVtb3ZlIGFzc2V0IGNvbnRlbnRzIGZvciBub3cuXG4gIGF3YWl0IGRlbChwYXRoLmpvaW4oZHN0LCBcIioqL2Fzc2V0LipcIikpXG5cbiAgLy8gUmVtb3ZlIGFzc2V0IGNvbmZpZ3Mgc28gd2UgZG9uJ3QgaGF2ZSB0byB1cGRhdGVcbiAgLy8gc25hcHNob3RzIGZvciBhc3NldCBjaGFuZ2VzLlxuICBhd2FpdCBkZWwocGF0aC5qb2luKGRzdCwgXCIqKi8qLmFzc2V0cy5qc29uXCIpKVxuXG4gIC8vIFJlbW92ZSBncmFwaHZpeiBmaWxlcyBnZW5lcmF0ZWQgd2hlbiB1c2luZyBDREsgUGlwZWxpbmVzXG4gIGF3YWl0IGRlbChwYXRoLmpvaW4oZHN0LCBcIioqLyouZG90XCIpKVxuXG4gIC8vIFRyYW5zZm9ybSB0aGUgbWFuaWZlc3QgdG8gYmUgbW9yZSBzbmFwc2hvdCBmcmllbmRseS5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGdsb2Iuc3luYyhcIioqL21hbmlmZXN0Lmpzb25cIiwgeyBjd2Q6IGJhc2UgfSkpIHtcbiAgICBhd2FpdCBwcmVwYXJlTWFuaWZlc3RGaWxlRm9yU25hcHNob3QocGF0aC5qb2luKGJhc2UsIGZpbGUpKVxuICB9XG5cbiAgLy8gVHJhbnNmb3JtIGFsbCB0ZW1wbGF0ZXMuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBnbG9iLnN5bmMoXCIqKi8qLnRlbXBsYXRlLmpzb25cIiwgeyBjd2Q6IGJhc2UgfSkpIHtcbiAgICBhd2FpdCBwcmVwYXJlVGVtcGxhdGVGaWxlRm9yU25hcHNob3QocGF0aC5qb2luKGJhc2UsIGZpbGUpKVxuICB9XG59XG4iXX0=
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import * as constructs from "constructs";
|
|
2
|
-
type ReferenceToResource<T> = (scope: constructs.Construct, id: string, reference: string) => T;
|
|
3
|
-
interface Props<T> {
|
|
4
|
-
/**
|
|
5
|
-
* The nonce can be used to force the stack to update to check
|
|
6
|
-
* for a new value.
|
|
7
|
-
*
|
|
8
|
-
* @default Date.now().toString()
|
|
9
|
-
*/
|
|
10
|
-
nonce?: string;
|
|
11
|
-
parameterName: string;
|
|
12
|
-
resource: T;
|
|
13
|
-
resourceToReference(resource: T): string;
|
|
14
|
-
referenceToResource: ReferenceToResource<T>;
|
|
15
|
-
/**
|
|
16
|
-
* List of regions that can retrieve this resource from an SSM Parameter.
|
|
17
|
-
*/
|
|
18
|
-
regions: string[];
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Register SSM Parameters in other regions storing a reference to
|
|
22
|
-
* a resource, which can then be resolved in the other region by
|
|
23
|
-
* reading from the parameter.
|
|
24
|
-
*
|
|
25
|
-
* Storing the SSM Parameters in the other regions speeds up the
|
|
26
|
-
* resolving of parameters, since we can use CloudFormation SSM
|
|
27
|
-
* Parameters instead of custom resources.
|
|
28
|
-
*
|
|
29
|
-
* If the resource is in the same region, the resource will be returned
|
|
30
|
-
* like normally in CDK, causing an export/import if cross-stack.
|
|
31
|
-
*/
|
|
32
|
-
export declare class SsmParameterBackedResource<T> extends constructs.Construct {
|
|
33
|
-
private readonly nonce;
|
|
34
|
-
private readonly parameterName;
|
|
35
|
-
private readonly resource;
|
|
36
|
-
private readonly referenceToResource;
|
|
37
|
-
private readonly regions;
|
|
38
|
-
constructor(scope: constructs.Construct, id: string, props: Props<T>);
|
|
39
|
-
/**
|
|
40
|
-
* Get the resource by resolving the value from SSM Parameter Store
|
|
41
|
-
* in case we are cross-region or cross-stage.
|
|
42
|
-
*/
|
|
43
|
-
get(scope: constructs.Construct, id: string): T;
|
|
44
|
-
}
|
|
45
|
-
export {};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SsmParameterBackedResource = void 0;
|
|
4
|
-
const constructs = require("constructs");
|
|
5
|
-
const ssm = require("aws-cdk-lib/aws-ssm");
|
|
6
|
-
const cdk = require("aws-cdk-lib");
|
|
7
|
-
const cross_region_ssm_parameter_1 = require("./cross-region-ssm-parameter");
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
/**
|
|
10
|
-
* Register SSM Parameters in other regions storing a reference to
|
|
11
|
-
* a resource, which can then be resolved in the other region by
|
|
12
|
-
* reading from the parameter.
|
|
13
|
-
*
|
|
14
|
-
* Storing the SSM Parameters in the other regions speeds up the
|
|
15
|
-
* resolving of parameters, since we can use CloudFormation SSM
|
|
16
|
-
* Parameters instead of custom resources.
|
|
17
|
-
*
|
|
18
|
-
* If the resource is in the same region, the resource will be returned
|
|
19
|
-
* like normally in CDK, causing an export/import if cross-stack.
|
|
20
|
-
*/
|
|
21
|
-
class SsmParameterBackedResource extends constructs.Construct {
|
|
22
|
-
constructor(scope, id, props) {
|
|
23
|
-
var _a;
|
|
24
|
-
super(scope, id);
|
|
25
|
-
this.nonce = (_a = props.nonce) !== null && _a !== void 0 ? _a : Date.now().toString();
|
|
26
|
-
this.parameterName = props.parameterName;
|
|
27
|
-
this.resource = props.resource;
|
|
28
|
-
this.referenceToResource = props.referenceToResource;
|
|
29
|
-
this.regions = props.regions;
|
|
30
|
-
const value = props.resourceToReference(props.resource);
|
|
31
|
-
for (const region of props.regions) {
|
|
32
|
-
new cross_region_ssm_parameter_1.CrossRegionSsmParameter(this, `Param${region}`, {
|
|
33
|
-
name: this.parameterName,
|
|
34
|
-
region,
|
|
35
|
-
value,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get the resource by resolving the value from SSM Parameter Store
|
|
41
|
-
* in case we are cross-region or cross-stage.
|
|
42
|
-
*/
|
|
43
|
-
get(scope, id) {
|
|
44
|
-
const producerRegion = cdk.Stack.of(this).region;
|
|
45
|
-
const consumerRegion = cdk.Stack.of(scope).region;
|
|
46
|
-
const sameStageOrApp = (0, utils_1.getStageOrApp)(this) === (0, utils_1.getStageOrApp)(scope);
|
|
47
|
-
// Fast-path: Same region and parent stage/app.
|
|
48
|
-
if (producerRegion === consumerRegion && sameStageOrApp) {
|
|
49
|
-
return this.resource;
|
|
50
|
-
}
|
|
51
|
-
if (!this.regions.includes(consumerRegion)) {
|
|
52
|
-
throw new Error(`The region ${consumerRegion} is not registered for the parameter`);
|
|
53
|
-
}
|
|
54
|
-
// Only add dependency if within same app/stage. If not it
|
|
55
|
-
// is the caller responsibility to ensure deployment order.
|
|
56
|
-
if (sameStageOrApp) {
|
|
57
|
-
scope.node.addDependency(this);
|
|
58
|
-
}
|
|
59
|
-
new cdk.CfnParameter(scope, `${id}Nonce`, {
|
|
60
|
-
default: this.nonce,
|
|
61
|
-
});
|
|
62
|
-
const reference = ssm.StringParameter.valueForStringParameter(scope, this.parameterName);
|
|
63
|
-
return this.referenceToResource(scope, id, reference);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
exports.SsmParameterBackedResource = SsmParameterBackedResource;
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlci1iYWNrZWQtcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3NtLXBhcmFtZXRlci1iYWNrZWQtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBQ3hDLDJDQUEwQztBQUMxQyxtQ0FBa0M7QUFDbEMsNkVBQXNFO0FBQ3RFLG1DQUF1QztBQTBCdkM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLDBCQUE4QixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBT3JFLFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBZTs7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUEsS0FBSyxDQUFDLEtBQUssbUNBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQTtRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUE7UUFFNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2RCxLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLG9EQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFFO2dCQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3hCLE1BQU07Z0JBQ04sS0FBSzthQUNOLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksR0FBRyxDQUFDLEtBQTJCLEVBQUUsRUFBVTtRQUNoRCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDaEQsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBRWpELE1BQU0sY0FBYyxHQUFHLElBQUEscUJBQWEsRUFBQyxJQUFJLENBQUMsS0FBSyxJQUFBLHFCQUFhLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFFbkUsK0NBQStDO1FBQy9DLElBQUksY0FBYyxLQUFLLGNBQWMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQ2IsY0FBYyxjQUFjLHNDQUFzQyxDQUNuRSxDQUFBO1FBQ0gsQ0FBQztRQUVELDBEQUEwRDtRQUMxRCwyREFBMkQ7UUFDM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQyxDQUFDO1FBRUQsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSztTQUNwQixDQUFDLENBQUE7UUFFRixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUMzRCxLQUFLLEVBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDdkQsQ0FBQztDQUNGO0FBL0RELGdFQStEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ3Jvc3NSZWdpb25Tc21QYXJhbWV0ZXIgfSBmcm9tIFwiLi9jcm9zcy1yZWdpb24tc3NtLXBhcmFtZXRlclwiXG5pbXBvcnQgeyBnZXRTdGFnZU9yQXBwIH0gZnJvbSBcIi4vdXRpbHNcIlxuXG50eXBlIFJlZmVyZW5jZVRvUmVzb3VyY2U8VD4gPSAoXG4gIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZyxcbiAgcmVmZXJlbmNlOiBzdHJpbmcsXG4pID0+IFRcblxuaW50ZXJmYWNlIFByb3BzPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSBub25jZSBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhY2sgdG8gdXBkYXRlIHRvIGNoZWNrXG4gICAqIGZvciBhIG5ldyB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgRGF0ZS5ub3coKS50b1N0cmluZygpXG4gICAqL1xuICBub25jZT86IHN0cmluZ1xuICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdcbiAgcmVzb3VyY2U6IFRcbiAgcmVzb3VyY2VUb1JlZmVyZW5jZShyZXNvdXJjZTogVCk6IHN0cmluZ1xuICByZWZlcmVuY2VUb1Jlc291cmNlOiBSZWZlcmVuY2VUb1Jlc291cmNlPFQ+XG4gIC8qKlxuICAgKiBMaXN0IG9mIHJlZ2lvbnMgdGhhdCBjYW4gcmV0cmlldmUgdGhpcyByZXNvdXJjZSBmcm9tIGFuIFNTTSBQYXJhbWV0ZXIuXG4gICAqL1xuICByZWdpb25zOiBzdHJpbmdbXVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIFNTTSBQYXJhbWV0ZXJzIGluIG90aGVyIHJlZ2lvbnMgc3RvcmluZyBhIHJlZmVyZW5jZSB0b1xuICogYSByZXNvdXJjZSwgd2hpY2ggY2FuIHRoZW4gYmUgcmVzb2x2ZWQgaW4gdGhlIG90aGVyIHJlZ2lvbiBieVxuICogcmVhZGluZyBmcm9tIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogU3RvcmluZyB0aGUgU1NNIFBhcmFtZXRlcnMgaW4gdGhlIG90aGVyIHJlZ2lvbnMgc3BlZWRzIHVwIHRoZVxuICogcmVzb2x2aW5nIG9mIHBhcmFtZXRlcnMsIHNpbmNlIHdlIGNhbiB1c2UgQ2xvdWRGb3JtYXRpb24gU1NNXG4gKiBQYXJhbWV0ZXJzIGluc3RlYWQgb2YgY3VzdG9tIHJlc291cmNlcy5cbiAqXG4gKiBJZiB0aGUgcmVzb3VyY2UgaXMgaW4gdGhlIHNhbWUgcmVnaW9uLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSByZXR1cm5lZFxuICogbGlrZSBub3JtYWxseSBpbiBDREssIGNhdXNpbmcgYW4gZXhwb3J0L2ltcG9ydCBpZiBjcm9zcy1zdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFNzbVBhcmFtZXRlckJhY2tlZFJlc291cmNlPFQ+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IG5vbmNlOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogVFxuICBwcml2YXRlIHJlYWRvbmx5IHJlZmVyZW5jZVRvUmVzb3VyY2U6IFJlZmVyZW5jZVRvUmVzb3VyY2U8VD5cbiAgcHJpdmF0ZSByZWFkb25seSByZWdpb25zOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3BzPFQ+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuICAgIHRoaXMubm9uY2UgPSBwcm9wcy5ub25jZSA/PyBEYXRlLm5vdygpLnRvU3RyaW5nKClcbiAgICB0aGlzLnBhcmFtZXRlck5hbWUgPSBwcm9wcy5wYXJhbWV0ZXJOYW1lXG4gICAgdGhpcy5yZXNvdXJjZSA9IHByb3BzLnJlc291cmNlXG4gICAgdGhpcy5yZWZlcmVuY2VUb1Jlc291cmNlID0gcHJvcHMucmVmZXJlbmNlVG9SZXNvdXJjZVxuICAgIHRoaXMucmVnaW9ucyA9IHByb3BzLnJlZ2lvbnNcblxuICAgIGNvbnN0IHZhbHVlID0gcHJvcHMucmVzb3VyY2VUb1JlZmVyZW5jZShwcm9wcy5yZXNvdXJjZSlcblxuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHByb3BzLnJlZ2lvbnMpIHtcbiAgICAgIG5ldyBDcm9zc1JlZ2lvblNzbVBhcmFtZXRlcih0aGlzLCBgUGFyYW0ke3JlZ2lvbn1gLCB7XG4gICAgICAgIG5hbWU6IHRoaXMucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICB2YWx1ZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVzb3VyY2UgYnkgcmVzb2x2aW5nIHRoZSB2YWx1ZSBmcm9tIFNTTSBQYXJhbWV0ZXIgU3RvcmVcbiAgICogaW4gY2FzZSB3ZSBhcmUgY3Jvc3MtcmVnaW9uIG9yIGNyb3NzLXN0YWdlLlxuICAgKi9cbiAgcHVibGljIGdldChzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcpOiBUIHtcbiAgICBjb25zdCBwcm9kdWNlclJlZ2lvbiA9IGNkay5TdGFjay5vZih0aGlzKS5yZWdpb25cbiAgICBjb25zdCBjb25zdW1lclJlZ2lvbiA9IGNkay5TdGFjay5vZihzY29wZSkucmVnaW9uXG5cbiAgICBjb25zdCBzYW1lU3RhZ2VPckFwcCA9IGdldFN0YWdlT3JBcHAodGhpcykgPT09IGdldFN0YWdlT3JBcHAoc2NvcGUpXG5cbiAgICAvLyBGYXN0LXBhdGg6IFNhbWUgcmVnaW9uIGFuZCBwYXJlbnQgc3RhZ2UvYXBwLlxuICAgIGlmIChwcm9kdWNlclJlZ2lvbiA9PT0gY29uc3VtZXJSZWdpb24gJiYgc2FtZVN0YWdlT3JBcHApIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlZ2lvbnMuaW5jbHVkZXMoY29uc3VtZXJSZWdpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgcmVnaW9uICR7Y29uc3VtZXJSZWdpb259IGlzIG5vdCByZWdpc3RlcmVkIGZvciB0aGUgcGFyYW1ldGVyYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFkZCBkZXBlbmRlbmN5IGlmIHdpdGhpbiBzYW1lIGFwcC9zdGFnZS4gSWYgbm90IGl0XG4gICAgLy8gaXMgdGhlIGNhbGxlciByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgZGVwbG95bWVudCBvcmRlci5cbiAgICBpZiAoc2FtZVN0YWdlT3JBcHApIHtcbiAgICAgIHNjb3BlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzKVxuICAgIH1cblxuICAgIG5ldyBjZGsuQ2ZuUGFyYW1ldGVyKHNjb3BlLCBgJHtpZH1Ob25jZWAsIHtcbiAgICAgIGRlZmF1bHQ6IHRoaXMubm9uY2UsXG4gICAgfSlcblxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzY29wZSxcbiAgICAgIHRoaXMucGFyYW1ldGVyTmFtZSxcbiAgICApXG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVG9SZXNvdXJjZShzY29wZSwgaWQsIHJlZmVyZW5jZSlcbiAgfVxufVxuIl19
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as constructs from "constructs";
|
|
2
|
-
import * as cr from "aws-cdk-lib/custom-resources";
|
|
3
|
-
interface Props {
|
|
4
|
-
parameterName: string;
|
|
5
|
-
region: string;
|
|
6
|
-
/**
|
|
7
|
-
* Value that must be updated to check if the parameter has a new value.
|
|
8
|
-
*
|
|
9
|
-
* @default Date.now().toString()
|
|
10
|
-
*/
|
|
11
|
-
nonce?: string;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Get value of a SSM parameter dynamically during deployment
|
|
15
|
-
* with support to read cross-region.
|
|
16
|
-
*/
|
|
17
|
-
export declare class SsmParameterReader extends cr.AwsCustomResource {
|
|
18
|
-
constructor(scope: constructs.Construct, id: string, props: Props);
|
|
19
|
-
getParameterValue(): string;
|
|
20
|
-
}
|
|
21
|
-
export {};
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SsmParameterReader = void 0;
|
|
4
|
-
const cdk = require("aws-cdk-lib");
|
|
5
|
-
const cr = require("aws-cdk-lib/custom-resources");
|
|
6
|
-
function removeLeadingSlash(value) {
|
|
7
|
-
return value.slice(0, 1) == "/" ? value.slice(1) : value;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Get value of a SSM parameter dynamically during deployment
|
|
11
|
-
* with support to read cross-region.
|
|
12
|
-
*/
|
|
13
|
-
class SsmParameterReader extends cr.AwsCustomResource {
|
|
14
|
-
constructor(scope, id, props) {
|
|
15
|
-
var _a;
|
|
16
|
-
super(scope, id, {
|
|
17
|
-
onUpdate: {
|
|
18
|
-
service: "SSM",
|
|
19
|
-
action: "getParameter",
|
|
20
|
-
parameters: {
|
|
21
|
-
Name: props.parameterName,
|
|
22
|
-
},
|
|
23
|
-
region: props.region,
|
|
24
|
-
// Update physical id to fetch the latest version.
|
|
25
|
-
physicalResourceId: cr.PhysicalResourceId.of(props.parameterName),
|
|
26
|
-
},
|
|
27
|
-
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
28
|
-
resources: [
|
|
29
|
-
cdk.Arn.format({
|
|
30
|
-
service: "ssm",
|
|
31
|
-
region: props.region,
|
|
32
|
-
resource: "parameter",
|
|
33
|
-
resourceName: removeLeadingSlash(props.parameterName),
|
|
34
|
-
}, cdk.Stack.of(scope)),
|
|
35
|
-
],
|
|
36
|
-
}),
|
|
37
|
-
});
|
|
38
|
-
const r = this.node.findChild("Resource").node
|
|
39
|
-
.defaultChild;
|
|
40
|
-
r.cfnOptions.metadata = r.cfnOptions.metadata || {};
|
|
41
|
-
r.cfnOptions.metadata.Nonce = (_a = props.nonce) !== null && _a !== void 0 ? _a : Date.now().toString();
|
|
42
|
-
}
|
|
43
|
-
getParameterValue() {
|
|
44
|
-
return this.getResponseField("Parameter.Value");
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.SsmParameterReader = SsmParameterReader;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlci1yZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3NtLXBhcmFtZXRlci1yZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQWtDO0FBQ2xDLG1EQUFrRDtBQWFsRCxTQUFTLGtCQUFrQixDQUFDLEtBQWE7SUFDdkMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtBQUMxRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxFQUFFLENBQUMsaUJBQWlCO0lBQzFELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBWTs7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLGFBQWE7aUJBQzFCO2dCQUNELE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsa0RBQWtEO2dCQUNsRCxrQkFBa0IsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7YUFDbEU7WUFDRCxNQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztnQkFDOUMsU0FBUyxFQUFFO29CQUNULEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUNaO3dCQUNFLE9BQU8sRUFBRSxLQUFLO3dCQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTt3QkFDcEIsUUFBUSxFQUFFLFdBQVc7d0JBQ3JCLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO3FCQUN0RCxFQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUNwQjtpQkFDRjthQUNGLENBQUM7U0FDSCxDQUFDLENBQUE7UUFFRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJO2FBQzNDLFlBQStCLENBQUE7UUFDbEMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFBO1FBQ25ELENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxNQUFBLEtBQUssQ0FBQyxLQUFLLG1DQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNwRSxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDakQsQ0FBQztDQUNGO0FBckNELGdEQXFDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgKiBhcyBjciBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIHBhcmFtZXRlck5hbWU6IHN0cmluZ1xuICByZWdpb246IHN0cmluZ1xuICAvKipcbiAgICogVmFsdWUgdGhhdCBtdXN0IGJlIHVwZGF0ZWQgdG8gY2hlY2sgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBuZXcgdmFsdWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IERhdGUubm93KCkudG9TdHJpbmcoKVxuICAgKi9cbiAgbm9uY2U/OiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTGVhZGluZ1NsYXNoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUuc2xpY2UoMCwgMSkgPT0gXCIvXCIgPyB2YWx1ZS5zbGljZSgxKSA6IHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHZhbHVlIG9mIGEgU1NNIHBhcmFtZXRlciBkeW5hbWljYWxseSBkdXJpbmcgZGVwbG95bWVudFxuICogd2l0aCBzdXBwb3J0IHRvIHJlYWQgY3Jvc3MtcmVnaW9uLlxuICovXG5leHBvcnQgY2xhc3MgU3NtUGFyYW1ldGVyUmVhZGVyIGV4dGVuZHMgY3IuQXdzQ3VzdG9tUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJTU01cIixcbiAgICAgICAgYWN0aW9uOiBcImdldFBhcmFtZXRlclwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgTmFtZTogcHJvcHMucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICAgIC8vIFVwZGF0ZSBwaHlzaWNhbCBpZCB0byBmZXRjaCB0aGUgbGF0ZXN0IHZlcnNpb24uXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3IuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKHByb3BzLnBhcmFtZXRlck5hbWUpLFxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgY2RrLkFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6IFwic3NtXCIsXG4gICAgICAgICAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgICAgICAgICByZXNvdXJjZTogXCJwYXJhbWV0ZXJcIixcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiByZW1vdmVMZWFkaW5nU2xhc2gocHJvcHMucGFyYW1ldGVyTmFtZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKSxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfSlcblxuICAgIGNvbnN0IHIgPSB0aGlzLm5vZGUuZmluZENoaWxkKFwiUmVzb3VyY2VcIikubm9kZVxuICAgICAgLmRlZmF1bHRDaGlsZCBhcyBjZGsuQ2ZuUmVzb3VyY2VcbiAgICByLmNmbk9wdGlvbnMubWV0YWRhdGEgPSByLmNmbk9wdGlvbnMubWV0YWRhdGEgfHwge31cbiAgICByLmNmbk9wdGlvbnMubWV0YWRhdGEuTm9uY2UgPSBwcm9wcy5ub25jZSA/PyBEYXRlLm5vdygpLnRvU3RyaW5nKClcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc3BvbnNlRmllbGQoXCJQYXJhbWV0ZXIuVmFsdWVcIilcbiAgfVxufVxuIl19
|
package/lib/tags.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as constructs from "constructs";
|
|
2
|
-
import * as cdk from "aws-cdk-lib";
|
|
3
|
-
/**
|
|
4
|
-
* Tag all supported resources within an application.
|
|
5
|
-
*
|
|
6
|
-
* CDK will propagate tags too all resources that support it.
|
|
7
|
-
*/
|
|
8
|
-
export declare function tagResources(scope: constructs.Construct, tags: (stack: cdk.Stack) => Record<string, string>): void;
|
package/lib/tags.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tagResources = void 0;
|
|
4
|
-
const cdk = require("aws-cdk-lib");
|
|
5
|
-
const cm = require("aws-cdk-lib/aws-certificatemanager");
|
|
6
|
-
function shouldTag(construct) {
|
|
7
|
-
// See https://github.com/aws/aws-cdk/issues/14519#issuecomment-833103147
|
|
8
|
-
if (construct instanceof cm.DnsValidatedCertificate) {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
return true;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Tag all supported resources within an application.
|
|
15
|
-
*
|
|
16
|
-
* CDK will propagate tags too all resources that support it.
|
|
17
|
-
*/
|
|
18
|
-
function tagResources(scope, tags) {
|
|
19
|
-
cdk.Aspects.of(scope).add({
|
|
20
|
-
visit(construct) {
|
|
21
|
-
if (cdk.TagManager.isTaggable(construct) && shouldTag(construct)) {
|
|
22
|
-
// We pick the last stack in chain to support stages where
|
|
23
|
-
// there are multiple stacks.
|
|
24
|
-
const allStacks = construct.node.scopes.filter((it) => cdk.Stack.isStack(it));
|
|
25
|
-
const stack = allStacks.length > 0 ? allStacks[allStacks.length - 1] : undefined;
|
|
26
|
-
if (stack != null) {
|
|
27
|
-
for (const [key, value] of Object.entries(tags(stack))) {
|
|
28
|
-
construct.tags.setTag(key, value, 100, true);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
exports.tagResources = tagResources;
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1DQUFrQztBQUNsQyx5REFBd0Q7QUFFeEQsU0FBUyxTQUFTLENBQUMsU0FBZ0M7SUFDakQseUVBQXlFO0lBQ3pFLElBQUksU0FBUyxZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3BELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixZQUFZLENBQzFCLEtBQTJCLEVBQzNCLElBQWtEO0lBRWxELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QixLQUFLLENBQUMsU0FBZ0M7WUFDcEMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDakUsMERBQTBEO2dCQUMxRCw2QkFBNkI7Z0JBQzdCLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBbUIsRUFBRSxDQUNyRSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FDdEIsQ0FBQTtnQkFFRCxNQUFNLEtBQUssR0FDVCxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtnQkFDcEUsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ2xCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO29CQUM5QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUMsQ0FBQTtBQUNKLENBQUM7QUF2QkQsb0NBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGNtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCJcblxuZnVuY3Rpb24gc2hvdWxkVGFnKGNvbnN0cnVjdDogY29uc3RydWN0cy5JQ29uc3RydWN0KSB7XG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE0NTE5I2lzc3VlY29tbWVudC04MzMxMDMxNDdcbiAgaWYgKGNvbnN0cnVjdCBpbnN0YW5jZW9mIGNtLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIFRhZyBhbGwgc3VwcG9ydGVkIHJlc291cmNlcyB3aXRoaW4gYW4gYXBwbGljYXRpb24uXG4gKlxuICogQ0RLIHdpbGwgcHJvcGFnYXRlIHRhZ3MgdG9vIGFsbCByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFnUmVzb3VyY2VzKFxuICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gIHRhZ3M6IChzdGFjazogY2RrLlN0YWNrKSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogdm9pZCB7XG4gIGNkay5Bc3BlY3RzLm9mKHNjb3BlKS5hZGQoe1xuICAgIHZpc2l0KGNvbnN0cnVjdDogY29uc3RydWN0cy5JQ29uc3RydWN0KSB7XG4gICAgICBpZiAoY2RrLlRhZ01hbmFnZXIuaXNUYWdnYWJsZShjb25zdHJ1Y3QpICYmIHNob3VsZFRhZyhjb25zdHJ1Y3QpKSB7XG4gICAgICAgIC8vIFdlIHBpY2sgdGhlIGxhc3Qgc3RhY2sgaW4gY2hhaW4gdG8gc3VwcG9ydCBzdGFnZXMgd2hlcmVcbiAgICAgICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIHN0YWNrcy5cbiAgICAgICAgY29uc3QgYWxsU3RhY2tzID0gY29uc3RydWN0Lm5vZGUuc2NvcGVzLmZpbHRlcigoaXQpOiBpdCBpcyBjZGsuU3RhY2sgPT5cbiAgICAgICAgICBjZGsuU3RhY2suaXNTdGFjayhpdCksXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBzdGFjayA9XG4gICAgICAgICAgYWxsU3RhY2tzLmxlbmd0aCA+IDAgPyBhbGxTdGFja3NbYWxsU3RhY2tzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkXG4gICAgICAgIGlmIChzdGFjayAhPSBudWxsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncyhzdGFjaykpKSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3QudGFncy5zZXRUYWcoa2V5LCB2YWx1ZSwgMTAwLCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG4iXX0=
|
package/lib/utils.d.ts
DELETED
package/lib/utils.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getStageOrApp = void 0;
|
|
4
|
-
const cdk = require("aws-cdk-lib");
|
|
5
|
-
function getStageOrApp(scope) {
|
|
6
|
-
const stage = cdk.Stage.of(scope);
|
|
7
|
-
if (stage != null) {
|
|
8
|
-
return stage;
|
|
9
|
-
}
|
|
10
|
-
const app = scope.node.root;
|
|
11
|
-
if (!cdk.App.isApp(app)) {
|
|
12
|
-
throw new Error(`Could not locate cdk App for ${scope.node.id}`);
|
|
13
|
-
}
|
|
14
|
-
return app;
|
|
15
|
-
}
|
|
16
|
-
exports.getStageOrApp = getStageOrApp;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQWtDO0FBRWxDLFNBQWdCLGFBQWEsQ0FDM0IsS0FBMkI7SUFFM0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUM7QUFiRCxzQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFnZU9yQXBwKFxuICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4pOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIGNvbnN0IHN0YWdlID0gY2RrLlN0YWdlLm9mKHNjb3BlKVxuICBpZiAoc3RhZ2UgIT0gbnVsbCkge1xuICAgIHJldHVybiBzdGFnZVxuICB9XG5cbiAgY29uc3QgYXBwID0gc2NvcGUubm9kZS5yb290XG4gIGlmICghY2RrLkFwcC5pc0FwcChhcHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgbG9jYXRlIGNkayBBcHAgZm9yICR7c2NvcGUubm9kZS5pZH1gKVxuICB9XG4gIHJldHVybiBhcHBcbn1cbiJdfQ==
|
package/lib/webapp/index.d.ts
DELETED
package/lib/webapp/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WebappMonitor = exports.generateContentSecurityPolicyHeader = exports.Webapp = void 0;
|
|
4
|
-
var webapp_1 = require("./webapp");
|
|
5
|
-
Object.defineProperty(exports, "Webapp", { enumerable: true, get: function () { return webapp_1.Webapp; } });
|
|
6
|
-
var security_headers_1 = require("./security-headers");
|
|
7
|
-
Object.defineProperty(exports, "generateContentSecurityPolicyHeader", { enumerable: true, get: function () { return security_headers_1.generateContentSecurityPolicyHeader; } });
|
|
8
|
-
var monitor_1 = require("./monitor");
|
|
9
|
-
Object.defineProperty(exports, "WebappMonitor", { enumerable: true, get: function () { return monitor_1.WebappMonitor; } });
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2ViYXBwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE4QztBQUFyQyxnR0FBQSxNQUFNLE9BQUE7QUFDZix1REFBd0U7QUFBL0QsdUlBQUEsbUNBQW1DLE9BQUE7QUFDNUMscUNBQXlDO0FBQWhDLHdHQUFBLGFBQWEsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFdlYmFwcCwgV2ViYXBwUHJvcHMgfSBmcm9tIFwiLi93ZWJhcHBcIlxuZXhwb3J0IHsgZ2VuZXJhdGVDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXIgfSBmcm9tIFwiLi9zZWN1cml0eS1oZWFkZXJzXCJcbmV4cG9ydCB7IFdlYmFwcE1vbml0b3IgfSBmcm9tIFwiLi9tb25pdG9yXCJcbiJdfQ==
|