builder-doctor 1.0.6 → 1.0.7
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 +12 -84
- package/dist/index.js.map +1 -1
- package/dist/network.d.ts +2 -12
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +78 -3
- package/dist/network.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const rules_1 = require("./rules");
|
|
5
|
-
const network_1 = require("./network");
|
|
6
5
|
const setup_1 = require("./setup");
|
|
7
6
|
const env_1 = require("./env");
|
|
7
|
+
const network_1 = require("./network");
|
|
8
8
|
const args = process.argv.slice(2);
|
|
9
|
-
|
|
9
|
+
const verbose = args.includes("--verbose");
|
|
10
|
+
const rules = args.includes("rules");
|
|
11
|
+
const network = args.includes("network");
|
|
12
|
+
const setup = args.includes("setup");
|
|
13
|
+
const env = args.includes("env");
|
|
14
|
+
const all = !rules && !network && !setup && !env;
|
|
15
|
+
if (args.includes("--help") || args.includes("-h") || all) {
|
|
10
16
|
console.log(`
|
|
11
17
|
builder-doctor - A CLI tool for Builder.io diagnostics
|
|
12
18
|
|
|
@@ -23,7 +29,7 @@ Options:
|
|
|
23
29
|
--help, -h Show this help message
|
|
24
30
|
|
|
25
31
|
Examples:
|
|
26
|
-
builder-doctor
|
|
32
|
+
builder-doctor Show this help
|
|
27
33
|
builder-doctor network Run only network checks
|
|
28
34
|
builder-doctor rules Run only rules checks
|
|
29
35
|
builder-doctor setup Get project setup instructions from Builder.io agent
|
|
@@ -32,90 +38,12 @@ Examples:
|
|
|
32
38
|
`);
|
|
33
39
|
process.exit(0);
|
|
34
40
|
}
|
|
35
|
-
const verbose = args.includes("--verbose");
|
|
36
|
-
const rules = args.includes("rules");
|
|
37
|
-
const network = args.includes("network");
|
|
38
|
-
const setup = args.includes("setup");
|
|
39
|
-
const env = args.includes("env");
|
|
40
|
-
const all = !rules && !network && !setup && !env;
|
|
41
41
|
async function main() {
|
|
42
42
|
try {
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
await (0, network_1.check)({
|
|
46
|
-
host: "firestore.googleapis.com",
|
|
47
|
-
url: "https://firestore.googleapis.com/",
|
|
48
|
-
verbose,
|
|
49
|
-
expectedStatus: 404,
|
|
50
|
-
expectedContent: "<span id=logo aria-label=Google>",
|
|
51
|
-
});
|
|
52
|
-
await (0, network_1.check)({
|
|
53
|
-
host: "firebasestorage.googleapis.com",
|
|
54
|
-
url: "https://firebasestorage.googleapis.com/",
|
|
55
|
-
verbose,
|
|
56
|
-
expectedStatus: 404,
|
|
57
|
-
expectedContent: "<span id=logo aria-label=Google>",
|
|
58
|
-
});
|
|
59
|
-
await (0, network_1.check)({
|
|
60
|
-
host: "builder.io",
|
|
61
|
-
url: "https://www.builder.io/",
|
|
62
|
-
verbose,
|
|
63
|
-
expectedStatus: 200,
|
|
64
|
-
expectedContent: "<body>",
|
|
65
|
-
});
|
|
66
|
-
await (0, network_1.check)({
|
|
67
|
-
host: "builder.io app",
|
|
68
|
-
url: "https://builder.io/content",
|
|
69
|
-
verbose,
|
|
70
|
-
expectedStatus: 200,
|
|
71
|
-
expectedContent: "<body>",
|
|
72
|
-
});
|
|
73
|
-
await (0, network_1.check)({
|
|
74
|
-
host: "cdn.builder.io",
|
|
75
|
-
url: "https://cdn.builder.io/static/media/builder-logo.bff0faae.png",
|
|
76
|
-
verbose,
|
|
77
|
-
expectedStatus: 200,
|
|
78
|
-
expectedHeader: "content-type",
|
|
79
|
-
expectedHeaderValue: "image/png",
|
|
80
|
-
});
|
|
81
|
-
await (0, network_1.check)({
|
|
82
|
-
host: "*.builder.codes",
|
|
83
|
-
url: "https://stuff.builder.codes/",
|
|
84
|
-
verbose,
|
|
85
|
-
expectedStatus: 404,
|
|
86
|
-
expectedHeader: "server",
|
|
87
|
-
expectedHeaderValue: "Google Frontend",
|
|
88
|
-
});
|
|
89
|
-
await (0, network_1.check)({
|
|
90
|
-
host: "*.builder.my",
|
|
91
|
-
url: "https://www.builder.my/",
|
|
92
|
-
verbose,
|
|
93
|
-
expectedStatus: 200,
|
|
94
|
-
expectedHeader: "x-powered-by",
|
|
95
|
-
expectedHeaderValue: "Next.js",
|
|
96
|
-
});
|
|
97
|
-
await (0, network_1.check)({
|
|
98
|
-
host: "*.fly.dev",
|
|
99
|
-
url: "https://status.flyio.net/",
|
|
100
|
-
verbose,
|
|
101
|
-
expectedStatus: 200,
|
|
102
|
-
message: " (Unknown status)",
|
|
103
|
-
});
|
|
104
|
-
await (0, network_1.check)({
|
|
105
|
-
host: "ai.builder.io",
|
|
106
|
-
url: "https://ai.builder.io/",
|
|
107
|
-
verbose,
|
|
108
|
-
expectedStatus: 200,
|
|
109
|
-
});
|
|
110
|
-
await (0, network_1.check)({
|
|
111
|
-
host: "34.136.119.149",
|
|
112
|
-
verbose,
|
|
113
|
-
message: " (ping)",
|
|
114
|
-
additionalErrorInfo: "This is the Static IP address that Builder.io uses",
|
|
115
|
-
ping: true,
|
|
116
|
-
});
|
|
43
|
+
if (network) {
|
|
44
|
+
await (0, network_1.runNetwork)({ verbose });
|
|
117
45
|
}
|
|
118
|
-
if (
|
|
46
|
+
if (rules) {
|
|
119
47
|
await (0, rules_1.checkRules)({
|
|
120
48
|
verbose,
|
|
121
49
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,mCAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,mCAAqC;AACrC,mCAAmC;AACnC,+BAA+B;AAC/B,uCAAuC;AAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACrC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC;AAEjD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAID,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAA,oBAAU,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAA,kBAAU,EAAC;gBACf,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,GAAG,EAAE,CAAC;YACR,IAAA,YAAM,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACtB,CAAC;IACH,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/network.d.ts
CHANGED
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import { IncomingHttpHeaders } from "http2";
|
|
2
|
+
export declare function runNetwork(options: NetworkOptions): Promise<void>;
|
|
2
3
|
export interface Response {
|
|
3
4
|
statusCode?: number;
|
|
4
5
|
statusMessage?: string;
|
|
5
6
|
body: string;
|
|
6
7
|
headers: IncomingHttpHeaders;
|
|
7
8
|
}
|
|
8
|
-
interface
|
|
9
|
-
host: string;
|
|
10
|
-
url?: string;
|
|
9
|
+
interface NetworkOptions {
|
|
11
10
|
verbose: boolean;
|
|
12
|
-
expectedStatus?: number;
|
|
13
|
-
expectedContent?: string;
|
|
14
|
-
expectedHeader?: string;
|
|
15
|
-
expectedHeaderValue?: string;
|
|
16
|
-
message?: string;
|
|
17
|
-
additionalErrorInfo?: string;
|
|
18
|
-
ping?: boolean;
|
|
19
11
|
}
|
|
20
|
-
export declare function get(url: string): Promise<Response>;
|
|
21
|
-
export declare function check(options: CheckOptions): Promise<void>;
|
|
22
12
|
export {};
|
|
23
13
|
//# sourceMappingURL=network.d.ts.map
|
package/dist/network.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAM5C,
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAM5C,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsFvE;AAED,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;AA+ID,UAAU,cAAc;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
package/dist/network.js
CHANGED
|
@@ -33,13 +33,88 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
37
|
-
exports.check = check;
|
|
36
|
+
exports.runNetwork = runNetwork;
|
|
38
37
|
const https = __importStar(require("https"));
|
|
39
38
|
const http = __importStar(require("http"));
|
|
40
39
|
const child_process_1 = require("child_process");
|
|
41
40
|
const util_1 = require("util");
|
|
42
41
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
42
|
+
async function runNetwork(options) {
|
|
43
|
+
const { verbose } = options;
|
|
44
|
+
console.log(`Checking connectivity to Builder.io services...`);
|
|
45
|
+
await check({
|
|
46
|
+
host: "firestore.googleapis.com",
|
|
47
|
+
url: "https://firestore.googleapis.com/",
|
|
48
|
+
verbose,
|
|
49
|
+
expectedStatus: 404,
|
|
50
|
+
expectedContent: "<span id=logo aria-label=Google>",
|
|
51
|
+
});
|
|
52
|
+
await check({
|
|
53
|
+
host: "firebasestorage.googleapis.com",
|
|
54
|
+
url: "https://firebasestorage.googleapis.com/",
|
|
55
|
+
verbose,
|
|
56
|
+
expectedStatus: 404,
|
|
57
|
+
expectedContent: "<span id=logo aria-label=Google>",
|
|
58
|
+
});
|
|
59
|
+
await check({
|
|
60
|
+
host: "builder.io",
|
|
61
|
+
url: "https://www.builder.io/",
|
|
62
|
+
verbose,
|
|
63
|
+
expectedStatus: 200,
|
|
64
|
+
expectedContent: "<body>",
|
|
65
|
+
});
|
|
66
|
+
await check({
|
|
67
|
+
host: "builder.io app",
|
|
68
|
+
url: "https://builder.io/content",
|
|
69
|
+
verbose,
|
|
70
|
+
expectedStatus: 200,
|
|
71
|
+
expectedContent: "<body>",
|
|
72
|
+
});
|
|
73
|
+
await check({
|
|
74
|
+
host: "cdn.builder.io",
|
|
75
|
+
url: "https://cdn.builder.io/static/media/builder-logo.bff0faae.png",
|
|
76
|
+
verbose,
|
|
77
|
+
expectedStatus: 200,
|
|
78
|
+
expectedHeader: "content-type",
|
|
79
|
+
expectedHeaderValue: "image/png",
|
|
80
|
+
});
|
|
81
|
+
await check({
|
|
82
|
+
host: "*.builder.codes",
|
|
83
|
+
url: "https://stuff.builder.codes/",
|
|
84
|
+
verbose,
|
|
85
|
+
expectedStatus: 404,
|
|
86
|
+
expectedHeader: "server",
|
|
87
|
+
expectedHeaderValue: "Google Frontend",
|
|
88
|
+
});
|
|
89
|
+
await check({
|
|
90
|
+
host: "*.builder.my",
|
|
91
|
+
url: "https://www.builder.my/",
|
|
92
|
+
verbose,
|
|
93
|
+
expectedStatus: 200,
|
|
94
|
+
expectedHeader: "x-powered-by",
|
|
95
|
+
expectedHeaderValue: "Next.js",
|
|
96
|
+
});
|
|
97
|
+
await check({
|
|
98
|
+
host: "*.fly.dev",
|
|
99
|
+
url: "https://status.flyio.net/",
|
|
100
|
+
verbose,
|
|
101
|
+
expectedStatus: 200,
|
|
102
|
+
message: " (Unknown status)",
|
|
103
|
+
});
|
|
104
|
+
await check({
|
|
105
|
+
host: "ai.builder.io",
|
|
106
|
+
url: "https://ai.builder.io/",
|
|
107
|
+
verbose,
|
|
108
|
+
expectedStatus: 200,
|
|
109
|
+
});
|
|
110
|
+
await check({
|
|
111
|
+
host: "34.136.119.149",
|
|
112
|
+
verbose,
|
|
113
|
+
message: " (ping)",
|
|
114
|
+
additionalErrorInfo: "This is the Static IP address that Builder.io uses",
|
|
115
|
+
ping: true,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
43
118
|
async function get(url) {
|
|
44
119
|
return new Promise((resolve, reject) => {
|
|
45
120
|
const parsedUrl = new URL(url);
|
|
@@ -133,7 +208,7 @@ function checkPing(options) {
|
|
|
133
208
|
const pingCommand = isWindows
|
|
134
209
|
? `ping -n 1 ${options.host}`
|
|
135
210
|
: `ping -c 1 ${options.host}`;
|
|
136
|
-
const {
|
|
211
|
+
const { stderr } = await execAsync(pingCommand);
|
|
137
212
|
if (stderr) {
|
|
138
213
|
resolve({
|
|
139
214
|
reason: `Ping to ${options.host} failed: ${stderr}`,
|
package/dist/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|