fanqiang 2.2.1 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +2 -0
- package/lib/core/TerraformTunnelProxyOperations.d.ts.map +1 -1
- package/lib/core/TerraformTunnelProxyOperations.js +24 -0
- package/lib/core/TerraformTunnelProxyOperations.js.map +1 -1
- package/lib/core/TerraformTunnelProxyOperations.ts +23 -0
- package/lib/core/terraform.js +1 -1
- package/lib/core/terraform.js.map +1 -1
- package/lib/core/terraform.ts +7 -10
- package/package.json +1 -1
package/README.md
CHANGED
@@ -33,6 +33,8 @@ Options:
|
|
33
33
|
[string] [default: "us-east-1"]
|
34
34
|
--tunnel-region Aliyun region for tunnel deployment
|
35
35
|
[string] [default: "cn-shanghai"]
|
36
|
+
--bucket AWS S3 bucket name, used to store clash client configuration file
|
37
|
+
[string] [default: "fanqiang-$USER"]
|
36
38
|
--help Show help [boolean]
|
37
39
|
--version Show version number [boolean]
|
38
40
|
```
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"TerraformTunnelProxyOperations.d.ts","sourceRoot":"","sources":["TerraformTunnelProxyOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"TerraformTunnelProxyOperations.d.ts","sourceRoot":"","sources":["TerraformTunnelProxyOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD,qBAAa,8BAA+B,YAAW,qBAAqB;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEnD,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAoB/E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
|
@@ -5,12 +5,23 @@ const tslib_1 = require("tslib");
|
|
5
5
|
const terraform = tslib_1.__importStar(require("./terraform"));
|
6
6
|
const AwsS3CloudStorage_1 = require("./AwsS3CloudStorage");
|
7
7
|
const fs = tslib_1.__importStar(require("fs-extra"));
|
8
|
+
const net = tslib_1.__importStar(require("net"));
|
9
|
+
const promise_retry_1 = tslib_1.__importDefault(require("promise-retry"));
|
8
10
|
class TerraformTunnelProxyOperations {
|
9
11
|
constructor(configuration) {
|
10
12
|
this.configuration = configuration;
|
11
13
|
}
|
12
14
|
async create(request) {
|
13
15
|
const applyResult = await terraform.apply(request, this.configuration.terraformWorkspace, this.configuration.aliyun.credentials);
|
16
|
+
await promise_retry_1.default(async (retry) => {
|
17
|
+
try {
|
18
|
+
await checkServiceAvailable(request.port, applyResult.address, 2000);
|
19
|
+
}
|
20
|
+
catch (error) {
|
21
|
+
console.log("Service is not ready, waiting...");
|
22
|
+
retry(error);
|
23
|
+
}
|
24
|
+
});
|
14
25
|
return {
|
15
26
|
address: applyResult.address,
|
16
27
|
cloudStorage: new AwsS3CloudStorage_1.AwsS3CloudStorage(request.proxyRegion, request.bucket, applyResult.bucketDomain),
|
@@ -22,4 +33,17 @@ class TerraformTunnelProxyOperations {
|
|
22
33
|
}
|
23
34
|
}
|
24
35
|
exports.TerraformTunnelProxyOperations = TerraformTunnelProxyOperations;
|
36
|
+
async function checkServiceAvailable(port, host, timeout) {
|
37
|
+
const socket = net.connect({ port, host, family: 4, timeout });
|
38
|
+
try {
|
39
|
+
await new Promise((resolve, reject) => {
|
40
|
+
socket.once("connect", resolve);
|
41
|
+
socket.once("timeout", () => reject("timeout"));
|
42
|
+
socket.once("error", (err) => reject(err));
|
43
|
+
});
|
44
|
+
}
|
45
|
+
finally {
|
46
|
+
socket.destroy();
|
47
|
+
}
|
48
|
+
}
|
25
49
|
//# sourceMappingURL=TerraformTunnelProxyOperations.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"TerraformTunnelProxyOperations.js","sourceRoot":"","sources":["TerraformTunnelProxyOperations.ts"],"names":[],"mappings":";;;;AAKA,+DAAyC;AAEzC,2DAAwD;AACxD,qDAA+B;
|
1
|
+
{"version":3,"file":"TerraformTunnelProxyOperations.js","sourceRoot":"","sources":["TerraformTunnelProxyOperations.ts"],"names":[],"mappings":";;;;AAKA,+DAAyC;AAEzC,2DAAwD;AACxD,qDAA+B;AAC/B,iDAA2B;AAC3B,0EAAyC;AAEzC,MAAa,8BAA8B;IACzC,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,KAAK,CAAC,MAAM,CAAC,OAAmC;QAC9C,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,KAAK,CACvC,OAAO,EACP,IAAI,CAAC,aAAa,CAAC,kBAAkB,EACrC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CACtC,CAAC;QACF,MAAM,uBAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI;gBACF,MAAM,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACtE;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAChD,KAAK,CAAC,KAAK,CAAC,CAAC;aACd;QACH,CAAC,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,YAAY,EAAE,IAAI,qCAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC;SACnG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtG,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;CACF;AA3BD,wEA2BC;AAED,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe;IAC9E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,IAAI;QACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;KACJ;YAAS;QACR,MAAM,CAAC,OAAO,EAAE,CAAC;KAClB;AACH,CAAC"}
|
@@ -7,6 +7,8 @@ import * as terraform from "./terraform";
|
|
7
7
|
import { Configuration } from "./Configuration";
|
8
8
|
import { AwsS3CloudStorage } from "./AwsS3CloudStorage";
|
9
9
|
import * as fs from "fs-extra";
|
10
|
+
import * as net from "net";
|
11
|
+
import promiseRetry from "promise-retry";
|
10
12
|
|
11
13
|
export class TerraformTunnelProxyOperations implements TunnelProxyOperations {
|
12
14
|
constructor(private readonly configuration: Configuration) {}
|
@@ -17,6 +19,14 @@ export class TerraformTunnelProxyOperations implements TunnelProxyOperations {
|
|
17
19
|
this.configuration.terraformWorkspace,
|
18
20
|
this.configuration.aliyun.credentials
|
19
21
|
);
|
22
|
+
await promiseRetry(async (retry) => {
|
23
|
+
try {
|
24
|
+
await checkServiceAvailable(request.port, applyResult.address, 2000);
|
25
|
+
} catch (error) {
|
26
|
+
console.log("Service is not ready, waiting...");
|
27
|
+
retry(error);
|
28
|
+
}
|
29
|
+
});
|
20
30
|
return {
|
21
31
|
address: applyResult.address,
|
22
32
|
cloudStorage: new AwsS3CloudStorage(request.proxyRegion, request.bucket, applyResult.bucketDomain),
|
@@ -28,3 +38,16 @@ export class TerraformTunnelProxyOperations implements TunnelProxyOperations {
|
|
28
38
|
await fs.rm(this.configuration.terraformWorkspace, { force: true, recursive: true });
|
29
39
|
}
|
30
40
|
}
|
41
|
+
|
42
|
+
async function checkServiceAvailable(port: number, host: string, timeout: number): Promise<void> {
|
43
|
+
const socket = net.connect({ port, host, family: 4, timeout });
|
44
|
+
try {
|
45
|
+
await new Promise((resolve, reject) => {
|
46
|
+
socket.once("connect", resolve);
|
47
|
+
socket.once("timeout", () => reject("timeout"));
|
48
|
+
socket.once("error", (err) => reject(err));
|
49
|
+
});
|
50
|
+
} finally {
|
51
|
+
socket.destroy();
|
52
|
+
}
|
53
|
+
}
|
package/lib/core/terraform.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"terraform.js","sourceRoot":"","sources":["terraform.ts"],"names":[],"mappings":";;;;AAAA,qEAA+C;AAC/C,2DAAyF;AACzF,mDAA6B;AAE7B,yDAAmC;AACnC,qDAA+B;AAC/B,mDAA6B;AAC7B,0EAAyC;AAElC,KAAK,UAAU,KAAK,CACzB,OAAmC,EACnC,OAAe,EACf,WAA8B;IAE9B,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,iBAAiB,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,mDAA+B,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3G,OAAO;QACL,OAAO,EAAE,MAAM,UAAU,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QACjE,YAAY,EAAE,MAAM,UAAU,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAClF,CAAC;AACJ,CAAC;AAXD,sBAWC;AAEM,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,WAA8B;IAC3E,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;QACnC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO;KACR;IACD,MAAM,iBAAiB,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,mDAA+B,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/G,CAAC;AAND,0BAMC;AAED,KAAK,UAAU,IAAI,CAAC,OAAmC,EAAE,OAAe;IACtE,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,EAAE;QAC9D,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,aAAa,EAAE,OAAO,CAAC,YAAY;QACnC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,oBAAoB,EAAE,OAAO,CAAC,mBAAmB;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE;QAC5D,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/G,MAAM,iBAAiB,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;KAC5C;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAc,EAAE,GAAW,EAAE,YAAoC,EAAE;IAClG,MAAM,uBAAY,
|
1
|
+
{"version":3,"file":"terraform.js","sourceRoot":"","sources":["terraform.ts"],"names":[],"mappings":"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"}
|
package/lib/core/terraform.ts
CHANGED
@@ -45,16 +45,13 @@ async function init(request: TunnelProxyCreatingRequest, workdir: string): Promi
|
|
45
45
|
}
|
46
46
|
|
47
47
|
async function provisioningRetry(args: string[], cwd: string, customEnv: Record<string, string> = {}): Promise<void> {
|
48
|
-
await promiseRetry(
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
},
|
56
|
-
{ retries: 3 }
|
57
|
-
);
|
48
|
+
await promiseRetry(async (retry) => {
|
49
|
+
try {
|
50
|
+
await provisioning(args, cwd, customEnv);
|
51
|
+
} catch (error) {
|
52
|
+
retry(error);
|
53
|
+
}
|
54
|
+
});
|
58
55
|
}
|
59
56
|
|
60
57
|
async function provisioning(args: string[], cwd: string, customEnv: Record<string, string>): Promise<void> {
|