@bgord/bun 0.29.15 → 0.30.1
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/certificate-inspector-noop.adapter.d.ts +7 -0
- package/dist/certificate-inspector-noop.adapter.d.ts.map +1 -0
- package/dist/certificate-inspector-noop.adapter.js +10 -0
- package/dist/certificate-inspector-noop.adapter.js.map +1 -0
- package/dist/certificate-inspector-tls.adapter.d.ts +13 -0
- package/dist/certificate-inspector-tls.adapter.d.ts.map +1 -0
- package/dist/certificate-inspector-tls.adapter.js +35 -0
- package/dist/certificate-inspector-tls.adapter.js.map +1 -0
- package/dist/certificate-inspector.port.d.ts +10 -0
- package/dist/certificate-inspector.port.d.ts.map +1 -0
- package/dist/certificate-inspector.port.js +2 -0
- package/dist/certificate-inspector.port.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.d.ts +5 -2
- package/dist/prerequisites/ssl-certificate-expiry.d.ts.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.js +10 -14
- package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -1
- package/dist/setup.service.js +1 -1
- package/dist/setup.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -2
- package/readme.md +3 -0
- package/src/certificate-inspector-noop.adapter.ts +9 -0
- package/src/certificate-inspector-tls.adapter.ts +43 -0
- package/src/certificate-inspector.port.ts +5 -0
- package/src/index.ts +3 -0
- package/src/prerequisites/ssl-certificate-expiry.ts +17 -13
- package/src/setup.service.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bgord/bun",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Bartosz Gordon",
|
|
@@ -51,7 +51,6 @@
|
|
|
51
51
|
"node-cache": "5.1.2",
|
|
52
52
|
"nodemailer": "7.0.9",
|
|
53
53
|
"sharp": "0.34.4",
|
|
54
|
-
"ssl-checker": "2.0.10",
|
|
55
54
|
"winston": "3.18.3",
|
|
56
55
|
"yazl": "3.3.1"
|
|
57
56
|
},
|
package/readme.md
CHANGED
|
@@ -35,6 +35,9 @@ src/
|
|
|
35
35
|
├── cache-file.service.ts
|
|
36
36
|
├── cache-resolver.service.ts
|
|
37
37
|
├── cache-response.middleware.ts
|
|
38
|
+
├── certificate-inspector-noop.adapter.ts
|
|
39
|
+
├── certificate-inspector-tls.adapter.ts
|
|
40
|
+
├── certificate-inspector.port.ts
|
|
38
41
|
├── client-from-hono.adapter.ts
|
|
39
42
|
├── client.vo.ts
|
|
40
43
|
├── clock-fixed.adapter.ts
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CertificateInspection, CertificateInspectorPort } from "./certificate-inspector.port";
|
|
2
|
+
|
|
3
|
+
export class CertificateInspectorNoopAdapter implements CertificateInspectorPort {
|
|
4
|
+
constructor(private readonly daysRemaining: number) {}
|
|
5
|
+
|
|
6
|
+
async inspect(_hostname: string): Promise<CertificateInspection> {
|
|
7
|
+
return { success: true, daysRemaining: this.daysRemaining };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import tls from "node:tls";
|
|
2
|
+
import * as tools from "@bgord/tools";
|
|
3
|
+
import type { CertificateInspection, CertificateInspectorPort } from "./certificate-inspector.port";
|
|
4
|
+
import type { ClockPort } from "./clock.port";
|
|
5
|
+
|
|
6
|
+
type Dependencies = { Clock: ClockPort };
|
|
7
|
+
|
|
8
|
+
export class CertificateInspectorTLSAdapter implements CertificateInspectorPort {
|
|
9
|
+
private static readonly ROUNDING = new tools.RoundToNearest();
|
|
10
|
+
|
|
11
|
+
constructor(private readonly deps: Dependencies) {}
|
|
12
|
+
|
|
13
|
+
async inspect(hostname: string): Promise<CertificateInspection> {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
const settle = (value: CertificateInspection) => {
|
|
16
|
+
try {
|
|
17
|
+
socket.end();
|
|
18
|
+
socket.destroy();
|
|
19
|
+
} finally {
|
|
20
|
+
resolve(value);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const socket = tls.connect(
|
|
25
|
+
{ host: hostname, port: 443, servername: hostname, rejectUnauthorized: false },
|
|
26
|
+
() => {
|
|
27
|
+
const certificate = socket.getPeerCertificate();
|
|
28
|
+
if (!certificate?.valid_to) return settle({ success: false });
|
|
29
|
+
|
|
30
|
+
const validToMs = new Date(certificate.valid_to).getTime();
|
|
31
|
+
const daysRemaining = tools.Duration.Ms(validToMs - this.deps.Clock.nowMs()).days;
|
|
32
|
+
|
|
33
|
+
settle({
|
|
34
|
+
success: true,
|
|
35
|
+
daysRemaining: CertificateInspectorTLSAdapter.ROUNDING.round(daysRemaining),
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
socket.once("error", () => settle({ success: false }));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -9,6 +9,9 @@ export * from "./build-info-repository.service";
|
|
|
9
9
|
export * from "./cache-file.service";
|
|
10
10
|
export * from "./cache-resolver.service";
|
|
11
11
|
export * from "./cache-response.middleware";
|
|
12
|
+
export * from "./certificate-inspector.port";
|
|
13
|
+
export * from "./certificate-inspector-noop.adapter";
|
|
14
|
+
export * from "./certificate-inspector-tls.adapter";
|
|
12
15
|
export * from "./client.vo";
|
|
13
16
|
export * from "./client-from-hono.adapter";
|
|
14
17
|
export * from "./clock.port";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { CertificateInspectorPort } from "../certificate-inspector.port";
|
|
2
2
|
import * as prereqs from "../prerequisites.service";
|
|
3
3
|
|
|
4
4
|
export class PrerequisiteSSLCertificateExpiry implements prereqs.Prerequisite {
|
|
@@ -7,29 +7,33 @@ export class PrerequisiteSSLCertificateExpiry implements prereqs.Prerequisite {
|
|
|
7
7
|
readonly enabled?: boolean = true;
|
|
8
8
|
|
|
9
9
|
private readonly host: string;
|
|
10
|
-
private readonly
|
|
10
|
+
private readonly days: number;
|
|
11
|
+
private readonly inspector: CertificateInspectorPort;
|
|
11
12
|
|
|
12
|
-
constructor(
|
|
13
|
+
constructor(
|
|
14
|
+
config: prereqs.PrerequisiteConfigType & {
|
|
15
|
+
host: string;
|
|
16
|
+
days: number;
|
|
17
|
+
inspector: CertificateInspectorPort;
|
|
18
|
+
},
|
|
19
|
+
) {
|
|
13
20
|
this.label = config.label;
|
|
14
21
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
15
22
|
|
|
16
23
|
this.host = config.host;
|
|
17
|
-
this.
|
|
24
|
+
this.days = config.days;
|
|
25
|
+
this.inspector = config.inspector;
|
|
18
26
|
}
|
|
19
27
|
|
|
20
28
|
async verify(): Promise<prereqs.VerifyOutcome> {
|
|
21
29
|
if (!this.enabled) return prereqs.Verification.undetermined();
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
const result = await sslChecker(this.host);
|
|
31
|
+
const result = await this.inspector.inspect(this.host);
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
return prereqs.Verification.success();
|
|
31
|
-
} catch (error) {
|
|
32
|
-
return prereqs.Verification.failure(error as Error);
|
|
33
|
+
if (!result.success) return prereqs.Verification.failure({ message: "Unavailable" });
|
|
34
|
+
if (result.daysRemaining <= this.days) {
|
|
35
|
+
return prereqs.Verification.failure({ message: `${result.daysRemaining} days remaining` });
|
|
33
36
|
}
|
|
37
|
+
return prereqs.Verification.success();
|
|
34
38
|
}
|
|
35
39
|
}
|
package/src/setup.service.ts
CHANGED
|
@@ -37,7 +37,7 @@ type Dependencies = {
|
|
|
37
37
|
export class Setup {
|
|
38
38
|
static essentials(deps: Dependencies, overrides?: SetupOverridesType) {
|
|
39
39
|
const corsOptions = overrides?.cors ?? { origin: "*" };
|
|
40
|
-
const secureHeadersOptions = overrides?.secureHeaders
|
|
40
|
+
const secureHeadersOptions = { crossOriginResourcePolicy: "cross-origin", ...overrides?.secureHeaders };
|
|
41
41
|
|
|
42
42
|
return [
|
|
43
43
|
secureHeaders(secureHeadersOptions),
|