builder-doctor 1.0.1 → 1.0.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/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +4 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +72 -28
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -66,6 +66,13 @@ async function main() {
|
|
|
66
66
|
expectedStatus: 200,
|
|
67
67
|
message: " (Unknown status)",
|
|
68
68
|
});
|
|
69
|
+
await (0, utils_1.check)({
|
|
70
|
+
host: "34.136.119.149",
|
|
71
|
+
verbose,
|
|
72
|
+
message: " (ping)",
|
|
73
|
+
additionalErrorInfo: "This is the Static IP address that Builder.io uses",
|
|
74
|
+
ping: true,
|
|
75
|
+
});
|
|
69
76
|
}
|
|
70
77
|
catch (error) {
|
|
71
78
|
console.error("An error occurred:", error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,mCAAqC;AAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAE/D,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,0BAA0B;YAChC,GAAG,EAAE,mCAAmC;YACxC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,kCAAkC;SACpD,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,gCAAgC;YACtC,GAAG,EAAE,yCAAyC;YAC9C,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,kCAAkC;SACpD,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,yBAAyB;YAC9B,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,4BAA4B;YACjC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,+DAA+D;YACpE,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,cAAc;YAC9B,mBAAmB,EAAE,WAAW;SACjC,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,8BAA8B;YACnC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,QAAQ;YACxB,mBAAmB,EAAE,iBAAiB;SACvC,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,yBAAyB;YAC9B,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,cAAc;YAC9B,mBAAmB,EAAE,SAAS;SAC/B,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,2BAA2B;YAChC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,mCAAqC;AAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAE/D,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,0BAA0B;YAChC,GAAG,EAAE,mCAAmC;YACxC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,kCAAkC;SACpD,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,gCAAgC;YACtC,GAAG,EAAE,yCAAyC;YAC9C,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,kCAAkC;SACpD,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,yBAAyB;YAC9B,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,4BAA4B;YACjC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,+DAA+D;YACpE,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,cAAc;YAC9B,mBAAmB,EAAE,WAAW;SACjC,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,8BAA8B;YACnC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,QAAQ;YACxB,mBAAmB,EAAE,iBAAiB;SACvC,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,yBAAyB;YAC9B,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,cAAc,EAAE,cAAc;YAC9B,mBAAmB,EAAE,SAAS;SAC/B,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,2BAA2B;YAChC,OAAO;YACP,cAAc,EAAE,GAAG;YACnB,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC;YACV,IAAI,EAAE,gBAAgB;YACtB,OAAO;YACP,OAAO,EAAE,SAAS;YAClB,mBAAmB,EAAE,oDAAoD;YACzE,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -7,13 +7,15 @@ export interface Response {
|
|
|
7
7
|
}
|
|
8
8
|
interface CheckOptions {
|
|
9
9
|
host: string;
|
|
10
|
-
url
|
|
10
|
+
url?: string;
|
|
11
11
|
verbose: boolean;
|
|
12
|
-
expectedStatus
|
|
12
|
+
expectedStatus?: number;
|
|
13
13
|
expectedContent?: string;
|
|
14
14
|
expectedHeader?: string;
|
|
15
15
|
expectedHeaderValue?: string;
|
|
16
16
|
message?: string;
|
|
17
|
+
additionalErrorInfo?: string;
|
|
18
|
+
ping?: boolean;
|
|
17
19
|
}
|
|
18
20
|
export declare function get(url: string): Promise<Response>;
|
|
19
21
|
export declare function check(options: CheckOptions): Promise<void>;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAM5C,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0BxD;AAWD,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChE"}
|
package/dist/utils.js
CHANGED
|
@@ -37,6 +37,9 @@ exports.get = get;
|
|
|
37
37
|
exports.check = check;
|
|
38
38
|
const https = __importStar(require("https"));
|
|
39
39
|
const http = __importStar(require("http"));
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const util_1 = require("util");
|
|
42
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
40
43
|
async function get(url) {
|
|
41
44
|
return new Promise((resolve, reject) => {
|
|
42
45
|
const parsedUrl = new URL(url);
|
|
@@ -52,7 +55,7 @@ async function get(url) {
|
|
|
52
55
|
statusCode: res.statusCode || 0,
|
|
53
56
|
body: data,
|
|
54
57
|
statusMessage: res.statusMessage || "",
|
|
55
|
-
headers: res.headers
|
|
58
|
+
headers: res.headers,
|
|
56
59
|
});
|
|
57
60
|
});
|
|
58
61
|
})
|
|
@@ -65,47 +68,88 @@ const red = "\x1b[31m";
|
|
|
65
68
|
const green = "\x1b[32m";
|
|
66
69
|
const reset = "\x1b[0m";
|
|
67
70
|
async function check(options) {
|
|
68
|
-
let
|
|
69
|
-
let details = '';
|
|
71
|
+
let result = { reason: "", details: "" };
|
|
70
72
|
try {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
reason = `The domain ${options.host} appears to be blocked. An unexpected status code was reported ${response.statusCode}. Check your network settings (eg VPN connection, network status, Wifi).`;
|
|
73
|
+
if (options.ping) {
|
|
74
|
+
result = await checkPing(options);
|
|
74
75
|
}
|
|
75
|
-
else
|
|
76
|
-
|
|
77
|
-
reason = `The domain ${options.host} appears to be blocked. An unexpected response was found. Check your network settings (eg VPN connection, network status, Wifi).`;
|
|
78
|
-
if (options.verbose) {
|
|
79
|
-
details = "Body" + response.body;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
else if (options.expectedHeader &&
|
|
83
|
-
response.headers[options.expectedHeader] !== options.expectedHeaderValue) {
|
|
84
|
-
reason = `The domain ${options.host} appears to be blocked. An unexpected response header for "${options.expectedHeader}" was found. Check your network settings (eg VPN connection, network status, Wifi).`;
|
|
85
|
-
if (options.verbose) {
|
|
86
|
-
details = `Headers: ${JSON.stringify(response.headers)}`;
|
|
87
|
-
}
|
|
76
|
+
else {
|
|
77
|
+
result = await checkHttp(options);
|
|
88
78
|
}
|
|
89
|
-
if (reason == "") {
|
|
90
|
-
console.log(`${green}✓${reset} ${options.host}${options.message ??
|
|
79
|
+
if (result.reason == "") {
|
|
80
|
+
console.log(`${green}✓${reset} ${options.host}${options.message ?? ""}`);
|
|
91
81
|
}
|
|
92
82
|
}
|
|
93
83
|
catch (err) {
|
|
94
84
|
let msg = `${err}`;
|
|
95
85
|
// Eg turn off Wifi
|
|
96
86
|
if (msg.includes(`Error: getaddrinfo`)) {
|
|
97
|
-
reason = `You may not have internet connectivity or the domain ${options.host} is not accessible.`;
|
|
87
|
+
result.reason = `You may not have internet connectivity or the domain ${options.host} is not accessible.`;
|
|
98
88
|
}
|
|
99
89
|
// Not a known error then report back the actual error
|
|
100
|
-
if (reason == "") {
|
|
101
|
-
reason = msg;
|
|
90
|
+
if (result.reason == "") {
|
|
91
|
+
result.reason = msg;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (result.reason !== "") {
|
|
95
|
+
console.log(`${red}✗ ${options.host} ${red}Failed${reset}: ${result.reason}`);
|
|
96
|
+
if (options.additionalErrorInfo) {
|
|
97
|
+
console.log(options.additionalErrorInfo);
|
|
102
98
|
}
|
|
103
99
|
}
|
|
104
|
-
if (
|
|
105
|
-
console.log(
|
|
100
|
+
if (result.details !== "") {
|
|
101
|
+
console.log(result.details);
|
|
106
102
|
}
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
}
|
|
104
|
+
async function checkHttp(options) {
|
|
105
|
+
let reason = "";
|
|
106
|
+
let details = "";
|
|
107
|
+
if (!options.url)
|
|
108
|
+
throw new Error("URL is required for HTTP checks");
|
|
109
|
+
const response = await get(options.url);
|
|
110
|
+
if (response.statusCode !== options.expectedStatus) {
|
|
111
|
+
reason = `The domain ${options.host} appears to be blocked. An unexpected status code was reported ${response.statusCode}. Check your network settings (eg VPN connection, network status, Wifi).`;
|
|
112
|
+
}
|
|
113
|
+
else if (options.expectedContent &&
|
|
114
|
+
response.body.indexOf(options.expectedContent) === -1) {
|
|
115
|
+
reason = `The domain ${options.host} appears to be blocked. An unexpected response was found. Check your network settings (eg VPN connection, network status, Wifi).`;
|
|
116
|
+
if (options.verbose) {
|
|
117
|
+
details = "Body" + response.body;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (options.expectedHeader &&
|
|
121
|
+
response.headers[options.expectedHeader] !== options.expectedHeaderValue) {
|
|
122
|
+
reason = `The domain ${options.host} appears to be blocked. An unexpected response header for "${options.expectedHeader}" was found. Check your network settings (eg VPN connection, network status, Wifi).`;
|
|
123
|
+
if (options.verbose) {
|
|
124
|
+
details = `Headers: ${JSON.stringify(response.headers)}`;
|
|
125
|
+
}
|
|
109
126
|
}
|
|
127
|
+
return { reason, details };
|
|
128
|
+
}
|
|
129
|
+
function checkPing(options) {
|
|
130
|
+
return new Promise(async (resolve) => {
|
|
131
|
+
try {
|
|
132
|
+
const isWindows = process.platform === "win32";
|
|
133
|
+
const pingCommand = isWindows
|
|
134
|
+
? `ping -n 1 ${options.host}`
|
|
135
|
+
: `ping -c 1 ${options.host}`;
|
|
136
|
+
const { stdout, stderr } = await execAsync(pingCommand);
|
|
137
|
+
if (stderr) {
|
|
138
|
+
resolve({
|
|
139
|
+
reason: `Ping to ${options.host} failed: ${stderr}`,
|
|
140
|
+
details: "",
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
resolve({ reason: "", details: "" });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
resolve({
|
|
149
|
+
reason: `Unable to ping ${options.host}. The host may be unreachable or blocking ICMP requests. ${error}`,
|
|
150
|
+
details: options.verbose ? `${error}` : "",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
110
154
|
}
|
|
111
155
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|