cdk-ecr-deployment 2.2.0 → 2.3.2
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/.jsii +44 -24
- package/API.md +2 -0
- package/README.md +6 -5
- package/changelog.md +3 -3
- package/lambda/Dockerfile +2 -2
- package/lambda/go.mod +19 -2
- package/lambda/go.sum +189 -27
- package/lambda/install.js +5 -3
- package/lib/index.d.ts +11 -0
- package/lib/index.js +12 -8
- package/node_modules/hpagent/.github/dependabot.yml +8 -0
- package/node_modules/hpagent/.github/workflows/build.yml +29 -0
- package/node_modules/hpagent/LICENSE +21 -0
- package/node_modules/hpagent/README.md +138 -0
- package/node_modules/hpagent/index.d.ts +26 -0
- package/node_modules/hpagent/index.js +101 -0
- package/node_modules/hpagent/index.mjs +5 -0
- package/node_modules/hpagent/package.json +49 -0
- package/node_modules/hpagent/test/got.test.js +111 -0
- package/node_modules/hpagent/test/http-http.test.js +351 -0
- package/node_modules/hpagent/test/http-https.test.js +313 -0
- package/node_modules/hpagent/test/https-http.test.js +313 -0
- package/node_modules/hpagent/test/https-https.test.js +313 -0
- package/node_modules/hpagent/test/index.test-d.ts +45 -0
- package/node_modules/hpagent/test/needle.test.js +103 -0
- package/node_modules/hpagent/test/node-fetch.test.js +103 -0
- package/node_modules/hpagent/test/simple-get.test.js +139 -0
- package/node_modules/hpagent/test/ssl.cert +19 -0
- package/node_modules/hpagent/test/ssl.key +27 -0
- package/node_modules/hpagent/test/utils.js +59 -0
- package/package.json +5 -3
- package/releasetag.txt +1 -1
- package/version.txt +1 -1
package/lambda/install.js
CHANGED
|
@@ -3,7 +3,7 @@ const got = require('got');
|
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const stream = require('stream');
|
|
5
5
|
const crypto = require('crypto');
|
|
6
|
-
|
|
6
|
+
const { HttpProxyAgent, HttpsProxyAgent } = require('hpagent');
|
|
7
7
|
const { promisify } = require('util');
|
|
8
8
|
const pipeline = promisify(stream.pipeline);
|
|
9
9
|
|
|
@@ -29,10 +29,12 @@ function sha256sum(p) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
async function download(url, dest) {
|
|
32
|
-
|
|
32
|
+
const agent = {};
|
|
33
|
+
agent.https = process.env.HTTPS_PROXY ? new HttpsProxyAgent({proxy: process.env.HTTPS_PROXY}): undefined;
|
|
34
|
+
agent.http = process.env.HTTP_PROXY ? new HttpProxyAgent({proxy: process.env.HTTP_PROXY}): undefined;
|
|
33
35
|
console.log(`download ${url}`);
|
|
34
36
|
await pipeline(
|
|
35
|
-
got.stream(url),
|
|
37
|
+
got.stream(url, { agent }),
|
|
36
38
|
fs.createWriteStream(dest)
|
|
37
39
|
);
|
|
38
40
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -4,6 +4,17 @@ import { Construct } from 'constructs';
|
|
|
4
4
|
* @stability stable
|
|
5
5
|
*/
|
|
6
6
|
export interface ECRDeploymentProps {
|
|
7
|
+
/**
|
|
8
|
+
* Image to use to build Golang lambda for custom resource, if download fails or is not wanted.
|
|
9
|
+
*
|
|
10
|
+
* Might be needed for local build if all images need to come from own registry.
|
|
11
|
+
*
|
|
12
|
+
* Note that image should use yum as a package manager and have golang available.
|
|
13
|
+
*
|
|
14
|
+
* @default public.ecr.aws/sam/build-go1.x:latest
|
|
15
|
+
* @stability stable
|
|
16
|
+
*/
|
|
17
|
+
readonly buildImage?: string;
|
|
7
18
|
/**
|
|
8
19
|
* The source of the docker image.
|
|
9
20
|
*
|
package/lib/index.js
CHANGED
|
@@ -9,7 +9,7 @@ const child_process = require("child_process");
|
|
|
9
9
|
const path = require("path");
|
|
10
10
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
11
11
|
const constructs_1 = require("constructs");
|
|
12
|
-
function getCode() {
|
|
12
|
+
function getCode(buildImage) {
|
|
13
13
|
const { CI, NO_PREBUILT_LAMBDA } = process.env;
|
|
14
14
|
if (!(CI && ['true', true, 1, '1'].includes(CI)) || (NO_PREBUILT_LAMBDA && ['true', true, 1, '1'].includes(NO_PREBUILT_LAMBDA))) {
|
|
15
15
|
try {
|
|
@@ -24,7 +24,11 @@ function getCode() {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
console.log('Build lambda from scratch');
|
|
27
|
-
return aws_cdk_lib_1.aws_lambda.Code.fromDockerBuild(path.join(__dirname, '../lambda')
|
|
27
|
+
return aws_cdk_lib_1.aws_lambda.Code.fromDockerBuild(path.join(__dirname, '../lambda'), {
|
|
28
|
+
buildArgs: {
|
|
29
|
+
buildImage,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
28
32
|
}
|
|
29
33
|
/**
|
|
30
34
|
* @stability stable
|
|
@@ -48,7 +52,7 @@ class DockerImageName {
|
|
|
48
52
|
}
|
|
49
53
|
exports.DockerImageName = DockerImageName;
|
|
50
54
|
_a = JSII_RTTI_SYMBOL_1;
|
|
51
|
-
DockerImageName[_a] = { fqn: "cdk-ecr-deployment.DockerImageName", version: "2.2
|
|
55
|
+
DockerImageName[_a] = { fqn: "cdk-ecr-deployment.DockerImageName", version: "2.3.2" };
|
|
52
56
|
/**
|
|
53
57
|
* @stability stable
|
|
54
58
|
*/
|
|
@@ -74,7 +78,7 @@ class S3ArchiveName {
|
|
|
74
78
|
}
|
|
75
79
|
exports.S3ArchiveName = S3ArchiveName;
|
|
76
80
|
_b = JSII_RTTI_SYMBOL_1;
|
|
77
|
-
S3ArchiveName[_b] = { fqn: "cdk-ecr-deployment.S3ArchiveName", version: "2.2
|
|
81
|
+
S3ArchiveName[_b] = { fqn: "cdk-ecr-deployment.S3ArchiveName", version: "2.3.2" };
|
|
78
82
|
/**
|
|
79
83
|
* @stability stable
|
|
80
84
|
*/
|
|
@@ -83,12 +87,12 @@ class ECRDeployment extends constructs_1.Construct {
|
|
|
83
87
|
* @stability stable
|
|
84
88
|
*/
|
|
85
89
|
constructor(scope, id, props) {
|
|
86
|
-
var _d;
|
|
90
|
+
var _d, _e;
|
|
87
91
|
super(scope, id);
|
|
88
92
|
const memoryLimit = (_d = props.memoryLimit) !== null && _d !== void 0 ? _d : 512;
|
|
89
93
|
const handler = new aws_cdk_lib_1.aws_lambda.SingletonFunction(this, 'CustomResourceHandler', {
|
|
90
94
|
uuid: this.renderSingletonUuid(memoryLimit),
|
|
91
|
-
code: getCode(),
|
|
95
|
+
code: getCode((_e = props.buildImage) !== null && _e !== void 0 ? _e : 'public.ecr.aws/sam/build-go1.x:latest'),
|
|
92
96
|
runtime: aws_cdk_lib_1.aws_lambda.Runtime.GO_1_X,
|
|
93
97
|
handler: 'main',
|
|
94
98
|
environment: props.environment,
|
|
@@ -157,5 +161,5 @@ class ECRDeployment extends constructs_1.Construct {
|
|
|
157
161
|
}
|
|
158
162
|
exports.ECRDeployment = ECRDeployment;
|
|
159
163
|
_c = JSII_RTTI_SYMBOL_1;
|
|
160
|
-
ECRDeployment[_c] = { fqn: "cdk-ecr-deployment.ECRDeployment", version: "2.2
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBR3RDLCtDQUErQztBQUMvQyw2QkFBNkI7QUFDN0IsNkNBQW9IO0FBQ3BILDJDQUF1QztBQWlDdkMsU0FBUyxPQUFPO0lBQ2QsTUFBTSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDL0MsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7UUFDL0gsSUFBSTtZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUUxQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzNELGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLGFBQWEsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBRTVFLE9BQU8sd0JBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzVDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO0tBQ0Y7SUFFRCxPQUFPLENBQUMs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Z0JBQ1AsY0FBYzthQUNmO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUosSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN6QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFdBQVc7WUFDakMsWUFBWSxFQUFFLDZCQUE2QjtZQUMzQyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztnQkFDdkIsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSztnQkFDekIsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFDekIsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSzthQUM1QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxXQUFvQjtRQUM5QyxJQUFJLElBQUksR0FBRyxzQ0FBc0MsQ0FBQztRQUVsRCwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDRDQUE0QztRQUM1QyxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksbUJBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsbUhBQW1ILENBQUMsQ0FBQzthQUN0STtZQUVELElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQTdFSCxzQ0E4RUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cblxuaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhd3NfZWMyIGFzIGVjMiwgYXdzX2lhbSBhcyBpYW0sIGF3c19sYW1iZGEgYXMgbGFtYmRhLCBEdXJhdGlvbiwgQ3VzdG9tUmVzb3VyY2UsIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRUNSRGVwbG95bWVudFByb3BzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBzcmM6IElJbWFnZU5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRlc3Q6IElJbWFnZU5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1lbW9yeUxpbWl0PzogbnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2cGNTdWJuZXRzPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VOYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdXJpOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBjcmVkcz86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0Q29kZSgpOiBsYW1iZGEuQXNzZXRDb2RlIHtcbiAgY29uc3QgeyBDSSwgTk9fUFJFQlVJTFRfTEFNQkRBIH0gPSBwcm9jZXNzLmVudjtcbiAgaWYgKCEoQ0kgJiYgWyd0cnVlJywgdHJ1ZSwgMSwgJzEnXS5pbmNsdWRlcyhDSSkpIHx8IChOT19QUkVCVUlMVF9MQU1CREEgJiYgWyd0cnVlJywgdHJ1ZSwgMSwgJzEnXS5pbmNsdWRlcyhOT19QUkVCVUlMVF9MQU1CREEpKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZygnVHJ5IHRvIGdldCBwcmVidWlsdCBsYW1iZGEnKTtcblxuICAgICAgY29uc3QgaW5zdGFsbFNjcmlwdCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvaW5zdGFsbC5qcycpO1xuICAgICAgY29uc3QgcHJlYnVpbHRQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9vdXQnKTtcbiAgICAgIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoYCR7cHJvY2Vzcy5hcmd2MH0gJHtpbnN0YWxsU2NyaXB0fSAke3ByZWJ1aWx0UGF0aH1gKTtcblxuICAgICAgcmV0dXJuIGxhbWJkYS5Db2RlLmZyb21Bc3NldChwcmVidWlsdFBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKGBDYW4gbm90IGdldCBwcmVidWlsdCBsYW1iZGE6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKCdCdWlsZCBsYW1iZGEgZnJvbSBzY3JhdGNoJyk7XG5cbiAgcmV0dXJuIGxhbWJkYS5Db2RlLmZyb21Eb2NrZXJCdWlsZChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhJykpO1xufVxuXG5leHBvcnQgY2xhc3MgRG9ja2VySW1hZ2VOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG5hbWU6IHN0cmluZywgcHVibGljIGNyZWRzPzogc3RyaW5nKSB7IH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBkb2NrZXI6Ly8ke3RoaXMubmFtZX1gOyB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM0FyY2hpdmVOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgY29uc3RydWN0b3IocDogc3RyaW5nLCByZWY/OiBzdHJpbmcsIHB1YmxpYyBjcmVkcz86IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IHA7XG4gICAgaWYgKHJlZikge1xuICAgICAgdGhpcy5uYW1lICs9ICc6JyArIHJlZjtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBzMzovLyR7dGhpcy5uYW1lfWA7IH1cbn1cblxuZXhwb3J0IGNsYXNzIEVDUkRlcGxveW1lbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUNSRGVwbG95bWVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBtZW1vcnlMaW1pdCA9IHByb3BzLm1lbW9yeUxpbWl0ID8/IDUxMjtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbih0aGlzLCAnQ3VzdG9tUmVzb3VyY2VIYW5kbGVyJywge1xuICAgICAgdXVpZDogdGhpcy5yZW5kZXJTaW5nbGV0b25VdWlkKG1lbW9yeUxpbWl0KSxcbiAgICAgIGNvZGU6IGdldENvZGUoKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLkdPXzFfWCxcbiAgICAgIGhhbmRsZXI6ICdtYWluJyxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIGxhbWJkYVB1cnBvc2U6ICdDdXN0b206OkNES0VDUkRlcGxveW1lbnQnLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgbWVtb3J5U2l6ZTogbWVtb3J5TGltaXQsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLnZwY1N1Ym5ldHMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYW5kbGVyUm9sZSA9IGhhbmRsZXIucm9sZTtcbiAgICBpZiAoIWhhbmRsZXJSb2xlKSB7IHRocm93IG5ldyBFcnJvcignbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBSb2xlJyk7IH1cblxuICAgIGhhbmRsZXJSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnZWNyOkdldEF1dGhvcml6YXRpb25Ub2tlbicsXG4gICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgJ2VjcjpHZXRSZXBvc2l0b3J5UG9saWN5JyxcbiAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAnZWNyOkxpc3RJbWFnZXMnLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZXMnLFxuICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgJ2VjcjpMaXN0VGFnc0ZvclJlc291cmNlJyxcbiAgICAgICAgICAnZWNyOkRlc2NyaWJlSW1hZ2VTY2FuRmluZGluZ3MnLFxuICAgICAgICAgICdlY3I6SW5pdGlhdGVMYXllclVwbG9hZCcsXG4gICAgICAgICAgJ2VjcjpVcGxvYWRMYXllclBhcnQnLFxuICAgICAgICAgICdlY3I6Q29tcGxldGVMYXllclVwbG9hZCcsXG4gICAgICAgICAgJ2VjcjpQdXRJbWFnZScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSk7XG4gICAgaGFuZGxlclJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnczM6R2V0T2JqZWN0JyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcblxuICAgIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQ3VzdG9tUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IGhhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkNES0J1Y2tldERlcGxveW1lbnQnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBTcmNJbWFnZTogcHJvcHMuc3JjLnVyaSxcbiAgICAgICAgU3JjQ3JlZHM6IHByb3BzLnNyYy5jcmVkcyxcbiAgICAgICAgRGVzdEltYWdlOiBwcm9wcy5kZXN0LnVyaSxcbiAgICAgICAgRGVzdENyZWRzOiBwcm9wcy5kZXN0LmNyZWRzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU2luZ2xldG9uVXVpZChtZW1vcnlMaW1pdD86IG51bWJlcikge1xuICAgIGxldCB1dWlkID0gJ2JkMDdjOTMwLWVkYjktNDExMi1hMjBmLTAzZjA5NmY1MzY2Nic7XG5cbiAgICAvLyBpZiB1c2VyIHNwZWNpZnkgYSBjdXN0b20gbWVtb3J5IGxpbWl0LCBkZWZpbmUgYW5vdGhlciBzaW5nbGV0b24gaGFuZGxlclxuICAgIC8vIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBvdGhlcndpc2UsIGl0IHdvbid0IGJlIHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZVxuICAgIC8vIGNvbmZpZ3VyYXRpb25zIHNpbmNlIHdlIGhhdmUgYSBzaW5nbGV0b24uXG4gICAgaWYgKG1lbW9yeUxpbWl0KSB7XG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG1lbW9yeUxpbWl0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgdXNlIHRva2VucyB3aGVuIHNwZWNpZnlpbmcgXCJtZW1vcnlMaW1pdFwiIHNpbmNlIHdlIHVzZSBpdCB0byBpZGVudGlmeSB0aGUgc2luZ2xldG9uIGN1c3RvbSByZXNvdXJjZSBoYW5kbGVyJyk7XG4gICAgICB9XG5cbiAgICAgIHV1aWQgKz0gYC0ke21lbW9yeUxpbWl0LnRvU3RyaW5nKCl9TWlCYDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXVpZDtcbiAgfVxufVxuIl19
|
|
164
|
+
ECRDeployment[_c] = { fqn: "cdk-ecr-deployment.ECRDeployment", version: "2.3.2" };
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBR3RDLCtDQUErQztBQUMvQyw2QkFBNkI7QUFDN0IsNkNBQW9IO0FBQ3BILDJDQUF1QztBQW9DdkMsU0FBUyxPQUFPLENBQUMsVUFBa0I7SUFDakMsTUFBTSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDL0MsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7UUFDL0gsSUFBSTtZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUUxQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzNELGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLGFBQWEsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBRTVFLE9BQU8sd0JBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzVDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO0tBQ0Y7SUFF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QyxJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3ZELE1BQU0sRUFBRSxxQkFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLE9BQU8sRUFBRTtnQkFDUCxjQUFjO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3pDLFlBQVksRUFBRSxPQUFPLENBQUMsV0FBVztZQUNqQyxZQUFZLEVBQUUsNkJBQTZCO1lBQzNDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHO2dCQUN2QixRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO2dCQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO2dCQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLO2FBQzVCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFdBQW9CO1FBQzlDLElBQUksSUFBSSxHQUFHLHNDQUFzQyxDQUFDO1FBRWxELDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0UsNENBQTRDO1FBQzVDLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtSEFBbUgsQ0FBQyxDQUFDO2FBQ3RJO1lBRUQsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7U0FDekM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBN0VILHNDQThFQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGF3c19lYzIgYXMgZWMyLCBhd3NfaWFtIGFzIGlhbSwgYXdzX2xhbWJkYSBhcyBsYW1iZGEsIER1cmF0aW9uLCBDdXN0b21SZXNvdXJjZSwgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBFQ1JEZXBsb3ltZW50UHJvcHMge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc3JjOiBJSW1hZ2VOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkZXN0OiBJSW1hZ2VOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBtZW1vcnlMaW1pdD86IG51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTmFtZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHVyaTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgY3JlZHM/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldENvZGUoYnVpbGRJbWFnZTogc3RyaW5nKTogbGFtYmRhLkFzc2V0Q29kZSB7XG4gIGNvbnN0IHsgQ0ksIE5PX1BSRUJVSUxUX0xBTUJEQSB9ID0gcHJvY2Vzcy5lbnY7XG4gIGlmICghKENJICYmIFsndHJ1ZScsIHRydWUsIDEsICcxJ10uaW5jbHVkZXMoQ0kpKSB8fCAoTk9fUFJFQlVJTFRfTEFNQkRBICYmIFsndHJ1ZScsIHRydWUsIDEsICcxJ10uaW5jbHVkZXMoTk9fUFJFQlVJTFRfTEFNQkRBKSkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ1RyeSB0byBnZXQgcHJlYnVpbHQgbGFtYmRhJyk7XG5cbiAgICAgIGNvbnN0IGluc3RhbGxTY3JpcHQgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2luc3RhbGwuanMnKTtcbiAgICAgIGNvbnN0IHByZWJ1aWx0UGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvb3V0Jyk7XG4gICAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGAke3Byb2Nlc3MuYXJndjB9ICR7aW5zdGFsbFNjcmlwdH0gJHtwcmVidWlsdFBhdGh9YCk7XG5cbiAgICAgIHJldHVybiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocHJlYnVpbHRQYXRoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ2FuIG5vdCBnZXQgcHJlYnVpbHQgbGFtYmRhOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZygnQnVpbGQgbGFtYmRhIGZyb20gc2NyYXRjaCcpO1xuXG4gIHJldHVybiBsYW1iZGEuQ29kZS5mcm9tRG9ja2VyQnVpbGQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYScpLCB7XG4gICAgYnVpbGRBcmdzOiB7XG4gICAgICBidWlsZEltYWdlLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgRG9ja2VySW1hZ2VOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG5hbWU6IHN0cmluZywgcHVibGljIGNyZWRzPzogc3RyaW5nKSB7IH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBkb2NrZXI6Ly8ke3RoaXMubmFtZX1gOyB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM0FyY2hpdmVOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgY29uc3RydWN0b3IocDogc3RyaW5nLCByZWY/OiBzdHJpbmcsIHB1YmxpYyBjcmVkcz86IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IHA7XG4gICAgaWYgKHJlZikge1xuICAgICAgdGhpcy5uYW1lICs9ICc6JyArIHJlZjtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBzMzovLyR7dGhpcy5uYW1lfWA7IH1cbn1cblxuZXhwb3J0IGNsYXNzIEVDUkRlcGxveW1lbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUNSRGVwbG95bWVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBtZW1vcnlMaW1pdCA9IHByb3BzLm1lbW9yeUxpbWl0ID8/IDUxMjtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbih0aGlzLCAnQ3VzdG9tUmVzb3VyY2VIYW5kbGVyJywge1xuICAgICAgdXVpZDogdGhpcy5yZW5kZXJTaW5nbGV0b25VdWlkKG1lbW9yeUxpbWl0KSxcbiAgICAgIGNvZGU6IGdldENvZGUocHJvcHMuYnVpbGRJbWFnZSA/PyAncHVibGljLmVjci5hd3Mvc2FtL2J1aWxkLWdvMS54OmxhdGVzdCcpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuR09fMV9YLFxuICAgICAgaGFuZGxlcjogJ21haW4nLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgbGFtYmRhUHVycG9zZTogJ0N1c3RvbTo6Q0RLRUNSRGVwbG95bWVudCcsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHJvbGU6IHByb3BzLnJvbGUsXG4gICAgICBtZW1vcnlTaXplOiBtZW1vcnlMaW1pdCxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhbmRsZXJSb2xlID0gaGFuZGxlci5yb2xlO1xuICAgIGlmICghaGFuZGxlclJvbGUpIHsgdGhyb3cgbmV3IEVycm9yKCdsYW1iZGEuU2luZ2xldG9uRnVuY3Rpb24gc2hvdWxkIGhhdmUgY3JlYXRlZCBhIFJvbGUnKTsgfVxuXG4gICAgaGFuZGxlclJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJyxcbiAgICAgICAgICAnZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eScsXG4gICAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgICAnZWNyOkdldFJlcG9zaXRvcnlQb2xpY3knLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICdlY3I6TGlzdEltYWdlcycsXG4gICAgICAgICAgJ2VjcjpEZXNjcmliZUltYWdlcycsXG4gICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAnZWNyOkxpc3RUYWdzRm9yUmVzb3VyY2UnLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZVNjYW5GaW5kaW5ncycsXG4gICAgICAgICAgJ2VjcjpJbml0aWF0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAnZWNyOlVwbG9hZExheWVyUGFydCcsXG4gICAgICAgICAgJ2VjcjpDb21wbGV0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAnZWNyOlB1dEltYWdlJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pKTtcbiAgICBoYW5kbGVyUm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdzMzpHZXRPYmplY3QnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdDdXN0b21SZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogaGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFNyY0ltYWdlOiBwcm9wcy5zcmMudXJpLFxuICAgICAgICBTcmNDcmVkczogcHJvcHMuc3JjLmNyZWRzLFxuICAgICAgICBEZXN0SW1hZ2U6IHByb3BzLmRlc3QudXJpLFxuICAgICAgICBEZXN0Q3JlZHM6IHByb3BzLmRlc3QuY3JlZHMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTaW5nbGV0b25VdWlkKG1lbW9yeUxpbWl0PzogbnVtYmVyKSB7XG4gICAgbGV0IHV1aWQgPSAnYmQwN2M5MzAtZWRiOS00MTEyLWEyMGYtMDNmMDk2ZjUzNjY2JztcblxuICAgIC8vIGlmIHVzZXIgc3BlY2lmeSBhIGN1c3RvbSBtZW1vcnkgbGltaXQsIGRlZmluZSBhbm90aGVyIHNpbmdsZXRvbiBoYW5kbGVyXG4gICAgLy8gd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24uIG90aGVyd2lzZSwgaXQgd29uJ3QgYmUgcG9zc2libGUgdG8gdXNlIG11bHRpcGxlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgc2luY2Ugd2UgaGF2ZSBhIHNpbmdsZXRvbi5cbiAgICBpZiAobWVtb3J5TGltaXQpIHtcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQobWVtb3J5TGltaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCB1c2UgdG9rZW5zIHdoZW4gc3BlY2lmeWluZyBcIm1lbW9yeUxpbWl0XCIgc2luY2Ugd2UgdXNlIGl0IHRvIGlkZW50aWZ5IHRoZSBzaW5nbGV0b24gY3VzdG9tIHJlc291cmNlIGhhbmRsZXInKTtcbiAgICAgIH1cblxuICAgICAgdXVpZCArPSBgLSR7bWVtb3J5TGltaXQudG9TdHJpbmcoKX1NaUJgO1xuICAgIH1cblxuICAgIHJldHVybiB1dWlkO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: build
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
test:
|
|
7
|
+
name: Test
|
|
8
|
+
runs-on: ${{ matrix.os }}
|
|
9
|
+
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
node-version: [10.x, 12.x, 14.x]
|
|
13
|
+
os: [ubuntu-latest, windows-latest, macOS-latest]
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v2
|
|
17
|
+
|
|
18
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
19
|
+
uses: actions/setup-node@v1
|
|
20
|
+
with:
|
|
21
|
+
node-version: ${{ matrix.node-version }}
|
|
22
|
+
|
|
23
|
+
- name: Install
|
|
24
|
+
run: |
|
|
25
|
+
npm install
|
|
26
|
+
|
|
27
|
+
- name: Test
|
|
28
|
+
run: |
|
|
29
|
+
npm test
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Tomas Della Vedova
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# hpagent
|
|
2
|
+
|
|
3
|
+
[](http://standardjs.com/) 
|
|
4
|
+
|
|
5
|
+
A ready to use http and https agent for working with proxies that keeps connections alive!
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
npm install hpagent
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
Based on your infrastructure, you should use the http agent or the https agent.
|
|
16
|
+
The following table will help you picking the right one.
|
|
17
|
+
|
|
18
|
+
| Type | Proxy | Server |
|
|
19
|
+
|-------------------|--------|--------|
|
|
20
|
+
| `HttpProxyAgent` | HTTP | HTTP |
|
|
21
|
+
| `HttpProxyAgent` | HTTPS | HTTP |
|
|
22
|
+
| `HttpsProxyAgent` | HTTP | HTTPS |
|
|
23
|
+
| `HttpsProxyAgent` | HTTPS | HTTPS |
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
const { HttpProxyAgent, HttpsProxyAgent } = require('hpagent')
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Once you have understood the right agent for your use case, you can instance it. It takes the same parameter of the Node.js core's http(s) agent and an additional `proxy` option, which is the url of your proxy.
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
const http = require('http')
|
|
33
|
+
const { HttpProxyAgent } = require('hpagent')
|
|
34
|
+
|
|
35
|
+
const agent = new HttpProxyAgent({
|
|
36
|
+
keepAlive: true,
|
|
37
|
+
keepAliveMsecs: 1000,
|
|
38
|
+
maxSockets: 256,
|
|
39
|
+
maxFreeSockets: 256,
|
|
40
|
+
proxy: 'http://localhost:8080'
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
http.get('http://localhost:9200', { agent })
|
|
44
|
+
.on('response', console.log)
|
|
45
|
+
.end()
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
If your proxy requires basic authentication, you can configure it in the proxy url:
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
const http = require('http')
|
|
52
|
+
const { HttpProxyAgent } = require('hpagent')
|
|
53
|
+
|
|
54
|
+
const agent = new HttpProxyAgent({
|
|
55
|
+
keepAlive: true,
|
|
56
|
+
keepAliveMsecs: 1000,
|
|
57
|
+
maxSockets: 256,
|
|
58
|
+
maxFreeSockets: 256,
|
|
59
|
+
proxy: 'http://user:pwd@localhost:8080'
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
http.get('http://localhost:9200', { agent })
|
|
63
|
+
.on('response', console.log)
|
|
64
|
+
.end()
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Integrations
|
|
68
|
+
|
|
69
|
+
Following you can find the list of userland http libraries that are tested with this agent.
|
|
70
|
+
|
|
71
|
+
### [got](https://github.com/sindresorhus/got)
|
|
72
|
+
|
|
73
|
+
```js
|
|
74
|
+
got('http://localhost:9200', {
|
|
75
|
+
agent: {
|
|
76
|
+
http: new HttpProxyAgent({
|
|
77
|
+
keepAlive: true,
|
|
78
|
+
keepAliveMsecs: 1000,
|
|
79
|
+
maxSockets: 256,
|
|
80
|
+
maxFreeSockets: 256,
|
|
81
|
+
scheduling: 'lifo',
|
|
82
|
+
proxy: 'http://localhost:8080'
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### [needle](https://github.com/tomas/needle)
|
|
89
|
+
|
|
90
|
+
```js
|
|
91
|
+
needle('get', 'http://localhost:9200', {
|
|
92
|
+
agent: new HttpProxyAgent({
|
|
93
|
+
keepAlive: true,
|
|
94
|
+
keepAliveMsecs: 1000,
|
|
95
|
+
maxSockets: 256,
|
|
96
|
+
maxFreeSockets: 256,
|
|
97
|
+
scheduling: 'lifo',
|
|
98
|
+
proxy: 'http://localhost:8080'
|
|
99
|
+
})
|
|
100
|
+
})
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### [node-fetch](https://github.com/node-fetch/node-fetch)
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
fetch('http://localhost:9200', {
|
|
107
|
+
agent: new HttpProxyAgent({
|
|
108
|
+
keepAlive: true,
|
|
109
|
+
keepAliveMsecs: 1000,
|
|
110
|
+
maxSockets: 256,
|
|
111
|
+
maxFreeSockets: 256,
|
|
112
|
+
scheduling: 'lifo',
|
|
113
|
+
proxy: 'http://localhost:8080'
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### [simple-get](https://github.com/feross/simple-get)
|
|
119
|
+
|
|
120
|
+
```js
|
|
121
|
+
sget.concat({
|
|
122
|
+
url: `http://${server.address().address}:${server.address().port}`,
|
|
123
|
+
agent: new HttpProxyAgent({
|
|
124
|
+
keepAlive: true,
|
|
125
|
+
keepAliveMsecs: 1000,
|
|
126
|
+
maxSockets: 256,
|
|
127
|
+
maxFreeSockets: 256,
|
|
128
|
+
scheduling: 'lifo',
|
|
129
|
+
proxy: `https://${proxy.address().address}:${proxy.address().port}`
|
|
130
|
+
})
|
|
131
|
+
}, function (err, response, data) {
|
|
132
|
+
// handle the response
|
|
133
|
+
})
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## License
|
|
137
|
+
|
|
138
|
+
This software is licensed under the [MIT](./LICENSE).
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as http from 'http'
|
|
2
|
+
import * as https from 'https'
|
|
3
|
+
import { URL } from 'url'
|
|
4
|
+
|
|
5
|
+
declare class HttpProxyAgent extends http.Agent {
|
|
6
|
+
constructor(options: HttpProxyAgentOptions)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface HttpProxyAgentOptions extends http.AgentOptions {
|
|
10
|
+
proxy: string | URL
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare class HttpsProxyAgent extends https.Agent {
|
|
14
|
+
constructor(options: HttpsProxyAgentOptions)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface HttpsProxyAgentOptions extends https.AgentOptions {
|
|
18
|
+
proxy: string | URL
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
HttpProxyAgent,
|
|
23
|
+
HttpProxyAgentOptions,
|
|
24
|
+
HttpsProxyAgent,
|
|
25
|
+
HttpsProxyAgentOptions
|
|
26
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const https = require('https')
|
|
4
|
+
const http = require('http')
|
|
5
|
+
const { URL } = require('url')
|
|
6
|
+
|
|
7
|
+
class HttpProxyAgent extends http.Agent {
|
|
8
|
+
constructor (options) {
|
|
9
|
+
const { proxy, ...opts } = options
|
|
10
|
+
super(opts)
|
|
11
|
+
this.proxy = typeof proxy === 'string'
|
|
12
|
+
? new URL(proxy)
|
|
13
|
+
: proxy
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
createConnection (options, callback) {
|
|
17
|
+
const requestOptions = {
|
|
18
|
+
method: 'CONNECT',
|
|
19
|
+
host: this.proxy.hostname,
|
|
20
|
+
port: this.proxy.port,
|
|
21
|
+
path: `${options.host}:${options.port}`,
|
|
22
|
+
setHost: false,
|
|
23
|
+
headers: { connection: this.keepAlive ? 'keep-alive' : 'close', host: `${options.host}:${options.port}` },
|
|
24
|
+
agent: false
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (this.proxy.username || this.proxy.password) {
|
|
28
|
+
const base64 = Buffer.from(`${this.proxy.username || ''}:${this.proxy.password || ''}`).toString('base64')
|
|
29
|
+
requestOptions.headers['proxy-authorization'] = `Basic ${base64}`
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const request = (this.proxy.protocol === 'http:' ? http : https).request(requestOptions)
|
|
33
|
+
request.once('connect', (response, socket, head) => {
|
|
34
|
+
request.removeAllListeners()
|
|
35
|
+
socket.removeAllListeners()
|
|
36
|
+
if (response.statusCode === 200) {
|
|
37
|
+
callback(null, socket)
|
|
38
|
+
} else {
|
|
39
|
+
callback(new Error(`Bad response: ${response.statusCode}`), null)
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
request.once('error', err => {
|
|
44
|
+
request.removeAllListeners()
|
|
45
|
+
callback(err, null)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
request.end()
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
class HttpsProxyAgent extends https.Agent {
|
|
53
|
+
constructor (options) {
|
|
54
|
+
const { proxy, ...opts } = options
|
|
55
|
+
super(opts)
|
|
56
|
+
this.proxy = typeof proxy === 'string'
|
|
57
|
+
? new URL(proxy)
|
|
58
|
+
: proxy
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
createConnection (options, callback) {
|
|
62
|
+
const requestOptions = {
|
|
63
|
+
method: 'CONNECT',
|
|
64
|
+
host: this.proxy.hostname,
|
|
65
|
+
port: this.proxy.port,
|
|
66
|
+
path: `${options.host}:${options.port}`,
|
|
67
|
+
setHost: false,
|
|
68
|
+
headers: { connection: this.keepAlive ? 'keep-alive' : 'close', host: `${options.host}:${options.port}` },
|
|
69
|
+
agent: false
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (this.proxy.username || this.proxy.password) {
|
|
73
|
+
const base64 = Buffer.from(`${this.proxy.username || ''}:${this.proxy.password || ''}`).toString('base64')
|
|
74
|
+
requestOptions.headers['proxy-authorization'] = `Basic ${base64}`
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const request = (this.proxy.protocol === 'http:' ? http : https).request(requestOptions)
|
|
78
|
+
request.once('connect', (response, socket, head) => {
|
|
79
|
+
request.removeAllListeners()
|
|
80
|
+
socket.removeAllListeners()
|
|
81
|
+
if (response.statusCode === 200) {
|
|
82
|
+
const secureSocket = super.createConnection({ ...options, socket })
|
|
83
|
+
callback(null, secureSocket)
|
|
84
|
+
} else {
|
|
85
|
+
callback(new Error(`Bad response: ${response.statusCode}`), null)
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
request.once('error', err => {
|
|
90
|
+
request.removeAllListeners()
|
|
91
|
+
callback(err, null)
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
request.end()
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
module.exports = {
|
|
99
|
+
HttpProxyAgent,
|
|
100
|
+
HttpsProxyAgent
|
|
101
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hpagent",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "A ready to use http and https agent for working with proxies that keeps connections alive!",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"require": "./index.js",
|
|
10
|
+
"import": "./index.mjs"
|
|
11
|
+
},
|
|
12
|
+
"./": "./"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"test": "standard && ava -v test/*.test.js && tsd"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/delvedor/hpagent.git"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"agent",
|
|
23
|
+
"http",
|
|
24
|
+
"https",
|
|
25
|
+
"secure",
|
|
26
|
+
"proxy",
|
|
27
|
+
"alive",
|
|
28
|
+
"keep-alive"
|
|
29
|
+
],
|
|
30
|
+
"author": "Tomas Della Vedova",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/delvedor/hpagent/issues"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/delvedor/hpagent#readme",
|
|
36
|
+
"tsd": {
|
|
37
|
+
"directory": "test"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"ava": "^3.10.1",
|
|
41
|
+
"got": "^11.5.1",
|
|
42
|
+
"needle": "^2.5.0",
|
|
43
|
+
"node-fetch": "^2.6.0",
|
|
44
|
+
"proxy": "^1.0.2",
|
|
45
|
+
"simple-get": "^4.0.0",
|
|
46
|
+
"standard": "^16.0.1",
|
|
47
|
+
"tsd": "^0.13.1"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const got = require('got')
|
|
4
|
+
const test = require('ava')
|
|
5
|
+
const {
|
|
6
|
+
createServer,
|
|
7
|
+
createSecureServer,
|
|
8
|
+
createProxy,
|
|
9
|
+
createSecureProxy
|
|
10
|
+
} = require('./utils')
|
|
11
|
+
const { HttpProxyAgent, HttpsProxyAgent } = require('../')
|
|
12
|
+
|
|
13
|
+
test('http to http', async t => {
|
|
14
|
+
const server = await createServer()
|
|
15
|
+
const proxy = await createProxy()
|
|
16
|
+
server.on('request', (req, res) => res.end('ok'))
|
|
17
|
+
|
|
18
|
+
const response = await got(`http://${server.address().address}:${server.address().port}`, {
|
|
19
|
+
agent: {
|
|
20
|
+
http: new HttpProxyAgent({
|
|
21
|
+
keepAlive: true,
|
|
22
|
+
keepAliveMsecs: 1000,
|
|
23
|
+
maxSockets: 256,
|
|
24
|
+
maxFreeSockets: 256,
|
|
25
|
+
scheduling: 'lifo',
|
|
26
|
+
proxy: `http://${proxy.address().address}:${proxy.address().port}`
|
|
27
|
+
})
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
t.is(response.body, 'ok')
|
|
32
|
+
t.is(response.statusCode, 200)
|
|
33
|
+
|
|
34
|
+
server.close()
|
|
35
|
+
proxy.close()
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
test('https to http', async t => {
|
|
39
|
+
const server = await createServer()
|
|
40
|
+
const proxy = await createSecureProxy()
|
|
41
|
+
server.on('request', (req, res) => res.end('ok'))
|
|
42
|
+
|
|
43
|
+
const response = await got(`http://${server.address().address}:${server.address().port}`, {
|
|
44
|
+
agent: {
|
|
45
|
+
http: new HttpProxyAgent({
|
|
46
|
+
keepAlive: true,
|
|
47
|
+
keepAliveMsecs: 1000,
|
|
48
|
+
maxSockets: 256,
|
|
49
|
+
maxFreeSockets: 256,
|
|
50
|
+
scheduling: 'lifo',
|
|
51
|
+
proxy: `https://${proxy.address().address}:${proxy.address().port}`
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
t.is(response.body, 'ok')
|
|
57
|
+
t.is(response.statusCode, 200)
|
|
58
|
+
|
|
59
|
+
server.close()
|
|
60
|
+
proxy.close()
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('http to https', async t => {
|
|
64
|
+
const server = await createSecureServer()
|
|
65
|
+
const proxy = await createProxy()
|
|
66
|
+
server.on('request', (req, res) => res.end('ok'))
|
|
67
|
+
|
|
68
|
+
const response = await got(`https://${server.address().address}:${server.address().port}`, {
|
|
69
|
+
agent: {
|
|
70
|
+
http: new HttpsProxyAgent({
|
|
71
|
+
keepAlive: true,
|
|
72
|
+
keepAliveMsecs: 1000,
|
|
73
|
+
maxSockets: 256,
|
|
74
|
+
maxFreeSockets: 256,
|
|
75
|
+
scheduling: 'lifo',
|
|
76
|
+
proxy: `http://${proxy.address().address}:${proxy.address().port}`
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
t.is(response.body, 'ok')
|
|
82
|
+
t.is(response.statusCode, 200)
|
|
83
|
+
|
|
84
|
+
server.close()
|
|
85
|
+
proxy.close()
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
test('https to https', async t => {
|
|
89
|
+
const server = await createSecureServer()
|
|
90
|
+
const proxy = await createSecureProxy()
|
|
91
|
+
server.on('request', (req, res) => res.end('ok'))
|
|
92
|
+
|
|
93
|
+
const response = await got(`https://${server.address().address}:${server.address().port}`, {
|
|
94
|
+
agent: {
|
|
95
|
+
http: new HttpsProxyAgent({
|
|
96
|
+
keepAlive: true,
|
|
97
|
+
keepAliveMsecs: 1000,
|
|
98
|
+
maxSockets: 256,
|
|
99
|
+
maxFreeSockets: 256,
|
|
100
|
+
scheduling: 'lifo',
|
|
101
|
+
proxy: `https://${proxy.address().address}:${proxy.address().port}`
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
t.is(response.body, 'ok')
|
|
107
|
+
t.is(response.statusCode, 200)
|
|
108
|
+
|
|
109
|
+
server.close()
|
|
110
|
+
proxy.close()
|
|
111
|
+
})
|