@bgord/bun 1.23.12 → 1.24.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/atomic-file-writer-collecting.adapter.d.ts +8 -0
- package/dist/atomic-file-writer-collecting.adapter.d.ts.map +1 -0
- package/dist/atomic-file-writer-collecting.adapter.js +7 -0
- package/dist/atomic-file-writer-collecting.adapter.js.map +1 -0
- package/dist/atomic-file-writer-noop.adapter.d.ts +7 -0
- package/dist/atomic-file-writer-noop.adapter.d.ts.map +1 -0
- package/dist/atomic-file-writer-noop.adapter.js +4 -0
- package/dist/atomic-file-writer-noop.adapter.js.map +1 -0
- package/dist/atomic-file-writer.adapter.d.ts +19 -0
- package/dist/atomic-file-writer.adapter.d.ts.map +1 -0
- package/dist/atomic-file-writer.adapter.js +18 -0
- package/dist/atomic-file-writer.adapter.js.map +1 -0
- package/dist/atomic-file-writer.port.d.ts +6 -0
- package/dist/atomic-file-writer.port.d.ts.map +1 -0
- package/dist/atomic-file-writer.port.js +2 -0
- package/dist/atomic-file-writer.port.js.map +1 -0
- package/dist/encryption-aes-gcm.adapter.d.ts +2 -2
- package/dist/encryption-aes-gcm.adapter.d.ts.map +1 -1
- package/dist/encryption-aes-gcm.adapter.js +2 -2
- package/dist/encryption-aes-gcm.adapter.js.map +1 -1
- package/dist/event-sourced-repository.adapter.d.ts +27 -0
- package/dist/event-sourced-repository.adapter.d.ts.map +1 -0
- package/dist/event-sourced-repository.adapter.js +16 -0
- package/dist/event-sourced-repository.adapter.js.map +1 -0
- package/dist/event-stream-accept.service.d.ts +4 -0
- package/dist/event-stream-accept.service.d.ts.map +1 -0
- package/dist/event-stream-accept.service.js +11 -0
- package/dist/event-stream-accept.service.js.map +1 -0
- package/dist/gzip.adapter.d.ts +2 -2
- package/dist/gzip.adapter.d.ts.map +1 -1
- package/dist/gzip.adapter.js +1 -1
- package/dist/gzip.adapter.js.map +1 -1
- package/dist/healthcheck.handler.d.ts +4 -2
- package/dist/healthcheck.handler.d.ts.map +1 -1
- package/dist/healthcheck.handler.js +4 -11
- package/dist/healthcheck.handler.js.map +1 -1
- package/dist/http-exception-errors.js +2 -2
- package/dist/http-exception-errors.js.map +1 -1
- package/dist/http-logger-hono.middleware.d.ts +1 -0
- package/dist/http-logger-hono.middleware.d.ts.map +1 -1
- package/dist/http-logger-hono.middleware.js +10 -6
- package/dist/http-logger-hono.middleware.js.map +1 -1
- package/dist/http-logger.middleware.d.ts.map +1 -1
- package/dist/http-logger.middleware.js +4 -6
- package/dist/http-logger.middleware.js.map +1 -1
- package/dist/image-blur.adapter.d.ts +2 -6
- package/dist/image-blur.adapter.d.ts.map +1 -1
- package/dist/image-blur.adapter.js +1 -4
- package/dist/image-blur.adapter.js.map +1 -1
- package/dist/image-compressor.adapter.d.ts +2 -6
- package/dist/image-compressor.adapter.d.ts.map +1 -1
- package/dist/image-compressor.adapter.js +1 -4
- package/dist/image-compressor.adapter.js.map +1 -1
- package/dist/image-exif-clear.adapter.d.ts +2 -6
- package/dist/image-exif-clear.adapter.d.ts.map +1 -1
- package/dist/image-exif-clear.adapter.js +1 -3
- package/dist/image-exif-clear.adapter.js.map +1 -1
- package/dist/image-formatter.adapter.d.ts +2 -6
- package/dist/image-formatter.adapter.d.ts.map +1 -1
- package/dist/image-formatter.adapter.js +1 -3
- package/dist/image-formatter.adapter.js.map +1 -1
- package/dist/image-grayscale.adapter.d.ts +2 -6
- package/dist/image-grayscale.adapter.d.ts.map +1 -1
- package/dist/image-grayscale.adapter.js +1 -4
- package/dist/image-grayscale.adapter.js.map +1 -1
- package/dist/image-processor.adapter.d.ts +2 -6
- package/dist/image-processor.adapter.d.ts.map +1 -1
- package/dist/image-processor.adapter.js +1 -3
- package/dist/image-processor.adapter.js.map +1 -1
- package/dist/image-resizer.adapter.d.ts +2 -6
- package/dist/image-resizer.adapter.d.ts.map +1 -1
- package/dist/image-resizer.adapter.js +1 -4
- package/dist/image-resizer.adapter.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/job-pruner-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-pruner-sqlite.adapter.js +2 -1
- package/dist/job-pruner-sqlite.adapter.js.map +1 -1
- package/dist/job-queue-stats-provider-sqlite.adapter.js +4 -4
- package/dist/job-queue-stats-provider-sqlite.adapter.js.map +1 -1
- package/dist/job-recoverer-collecting.adapter.d.ts +7 -0
- package/dist/job-recoverer-collecting.adapter.d.ts.map +1 -0
- package/dist/job-recoverer-collecting.adapter.js +10 -0
- package/dist/job-recoverer-collecting.adapter.js.map +1 -0
- package/dist/job-recoverer-noop.adapter.d.ts +6 -0
- package/dist/job-recoverer-noop.adapter.d.ts.map +1 -0
- package/dist/job-recoverer-noop.adapter.js +7 -0
- package/dist/job-recoverer-noop.adapter.js.map +1 -0
- package/dist/job-recoverer-sqlite.adapter.d.ts +13 -0
- package/dist/job-recoverer-sqlite.adapter.d.ts.map +1 -0
- package/dist/job-recoverer-sqlite.adapter.js +14 -0
- package/dist/job-recoverer-sqlite.adapter.js.map +1 -0
- package/dist/job-recoverer.port.d.ts +5 -0
- package/dist/job-recoverer.port.d.ts.map +1 -0
- package/dist/job-recoverer.port.js +2 -0
- package/dist/job-recoverer.port.js.map +1 -0
- package/dist/memory-consumption.service.d.ts +1 -2
- package/dist/memory-consumption.service.d.ts.map +1 -1
- package/dist/memory-consumption.service.js.map +1 -1
- package/dist/message-bus-strict.adapter.d.ts +19 -0
- package/dist/message-bus-strict.adapter.d.ts.map +1 -0
- package/dist/message-bus-strict.adapter.js +24 -0
- package/dist/message-bus-strict.adapter.js.map +1 -0
- package/dist/path-matcher.service.d.ts +6 -0
- package/dist/path-matcher.service.d.ts.map +1 -0
- package/dist/path-matcher.service.js +13 -0
- package/dist/path-matcher.service.js.map +1 -0
- package/dist/remote-file-storage-disk.adapter.d.ts +2 -6
- package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-disk.adapter.js +1 -9
- package/dist/remote-file-storage-disk.adapter.js.map +1 -1
- package/dist/request-context-hono.adapter.d.ts +1 -1
- package/dist/request-context-hono.adapter.d.ts.map +1 -1
- package/dist/request-context-hono.adapter.js +3 -3
- package/dist/request-context-hono.adapter.js.map +1 -1
- package/dist/request-context.port.d.ts +4 -0
- package/dist/request-context.port.d.ts.map +1 -1
- package/dist/request-context.port.js +4 -1
- package/dist/request-context.port.js.map +1 -1
- package/dist/runtime-stats-provider-noop.adapter.d.ts +5 -0
- package/dist/runtime-stats-provider-noop.adapter.d.ts.map +1 -0
- package/dist/runtime-stats-provider-noop.adapter.js +14 -0
- package/dist/runtime-stats-provider-noop.adapter.js.map +1 -0
- package/dist/runtime-stats-provider-system.adapter.d.ts +12 -0
- package/dist/runtime-stats-provider-system.adapter.d.ts.map +1 -0
- package/dist/runtime-stats-provider-system.adapter.js +21 -0
- package/dist/runtime-stats-provider-system.adapter.js.map +1 -0
- package/dist/runtime-stats-provider.port.d.ts +18 -0
- package/dist/runtime-stats-provider.port.d.ts.map +1 -0
- package/dist/runtime-stats-provider.port.js +2 -0
- package/dist/runtime-stats-provider.port.js.map +1 -0
- package/dist/security-rule-violation-threshold.strategy.js +1 -1
- package/dist/security-rule-violation-threshold.strategy.js.map +1 -1
- package/dist/setup-hono.service.js +1 -1
- package/dist/setup-hono.service.js.map +1 -1
- package/dist/shield-auth-hono.strategy.d.ts.map +1 -1
- package/dist/shield-auth-hono.strategy.js +4 -3
- package/dist/shield-auth-hono.strategy.js.map +1 -1
- package/dist/shield-auth.strategy.d.ts +1 -5
- package/dist/shield-auth.strategy.d.ts.map +1 -1
- package/dist/shield-auth.strategy.js +3 -6
- package/dist/shield-auth.strategy.js.map +1 -1
- package/dist/shield-maintenance.strategy.d.ts.map +1 -1
- package/dist/shield-maintenance.strategy.js +2 -5
- package/dist/shield-maintenance.strategy.js.map +1 -1
- package/dist/temporary-file-absolute.adapter.d.ts +2 -6
- package/dist/temporary-file-absolute.adapter.d.ts.map +1 -1
- package/dist/temporary-file-absolute.adapter.js +1 -9
- package/dist/temporary-file-absolute.adapter.js.map +1 -1
- package/dist/timing.middleware.d.ts +0 -1
- package/dist/timing.middleware.d.ts.map +1 -1
- package/dist/timing.middleware.js +2 -9
- package/dist/timing.middleware.js.map +1 -1
- package/package.json +5 -5
- package/readme.md +15 -0
- package/src/atomic-file-writer-collecting.adapter.ts +14 -0
- package/src/atomic-file-writer-noop.adapter.ts +10 -0
- package/src/atomic-file-writer.adapter.ts +34 -0
- package/src/atomic-file-writer.port.ts +6 -0
- package/src/encryption-aes-gcm.adapter.ts +4 -4
- package/src/event-sourced-repository.adapter.ts +48 -0
- package/src/event-stream-accept.service.ts +10 -0
- package/src/gzip.adapter.ts +3 -3
- package/src/healthcheck.handler.ts +8 -11
- package/src/http-exception-errors.ts +2 -2
- package/src/http-logger-hono.middleware.ts +12 -6
- package/src/http-logger.middleware.ts +4 -7
- package/src/image-blur.adapter.ts +3 -13
- package/src/image-compressor.adapter.ts +3 -12
- package/src/image-exif-clear.adapter.ts +3 -11
- package/src/image-formatter.adapter.ts +3 -12
- package/src/image-grayscale.adapter.ts +3 -13
- package/src/image-processor.adapter.ts +3 -11
- package/src/image-resizer.adapter.ts +3 -12
- package/src/index.ts +13 -0
- package/src/job-pruner-sqlite.adapter.ts +2 -1
- package/src/job-queue-stats-provider-sqlite.adapter.ts +4 -4
- package/src/job-recoverer-collecting.adapter.ts +14 -0
- package/src/job-recoverer-noop.adapter.ts +8 -0
- package/src/job-recoverer-sqlite.adapter.ts +20 -0
- package/src/job-recoverer.port.ts +5 -0
- package/src/memory-consumption.service.ts +4 -1
- package/src/message-bus-strict.adapter.ts +33 -0
- package/src/path-matcher.service.ts +14 -0
- package/src/remote-file-storage-disk.adapter.ts +3 -17
- package/src/request-context-hono.adapter.ts +3 -4
- package/src/request-context.port.ts +5 -0
- package/src/runtime-stats-provider-noop.adapter.ts +16 -0
- package/src/runtime-stats-provider-system.adapter.ts +24 -0
- package/src/runtime-stats-provider.port.ts +16 -0
- package/src/security-rule-violation-threshold.strategy.ts +2 -2
- package/src/setup-hono.service.ts +1 -1
- package/src/shield-auth-hono.strategy.ts +4 -3
- package/src/shield-auth.strategy.ts +3 -8
- package/src/shield-maintenance.strategy.ts +2 -6
- package/src/temporary-file-absolute.adapter.ts +3 -18
- package/src/timing.middleware.ts +2 -10
|
@@ -2,8 +2,9 @@ import type hono from "hono";
|
|
|
2
2
|
import { createMiddleware } from "hono/factory";
|
|
3
3
|
import { HTTPException } from "hono/http-exception";
|
|
4
4
|
import type { AuthSessionReaderPort } from "./auth-session-reader.port";
|
|
5
|
+
import { RequestIdentityError } from "./request-context.port";
|
|
5
6
|
import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
|
|
6
|
-
import { ShieldAuthStrategy
|
|
7
|
+
import { ShieldAuthStrategy } from "./shield-auth.strategy";
|
|
7
8
|
|
|
8
9
|
type Dependencies<User, Session> = { AuthSessionReader: AuthSessionReaderPort<User, Session> };
|
|
9
10
|
|
|
@@ -27,13 +28,13 @@ export class ShieldAuthHonoStrategy<User, Session> {
|
|
|
27
28
|
const user = c.get("user");
|
|
28
29
|
|
|
29
30
|
if (this.strategy.verify(user)) return next();
|
|
30
|
-
throw new HTTPException(401, { message:
|
|
31
|
+
throw new HTTPException(401, { message: RequestIdentityError.Rejected });
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
reverse = createMiddleware(async (c: hono.Context, next: hono.Next) => {
|
|
34
35
|
const user = c.get("user");
|
|
35
36
|
|
|
36
37
|
if (this.strategy.reverse(user)) return next();
|
|
37
|
-
throw new HTTPException(403, { message:
|
|
38
|
+
throw new HTTPException(403, { message: RequestIdentityError.Rejected });
|
|
38
39
|
});
|
|
39
40
|
}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import type { AuthSessionReaderPort, AuthSessionType } from "./auth-session-reader.port";
|
|
2
|
-
import type
|
|
2
|
+
import { type HasRequestHeaders, RequestIdentityError } from "./request-context.port";
|
|
3
3
|
|
|
4
4
|
type Dependencies<User, Session> = { AuthSessionReader: AuthSessionReaderPort<User, Session> };
|
|
5
5
|
|
|
6
|
-
export const ShieldAuthStrategyError = {
|
|
7
|
-
Rejected: "shield.auth.rejected",
|
|
8
|
-
NotAttached: "shield.auth.not.attached",
|
|
9
|
-
};
|
|
10
|
-
|
|
11
6
|
export class ShieldAuthStrategy<User, Session> {
|
|
12
7
|
constructor(private readonly deps: Dependencies<User, Session>) {}
|
|
13
8
|
|
|
@@ -16,12 +11,12 @@ export class ShieldAuthStrategy<User, Session> {
|
|
|
16
11
|
}
|
|
17
12
|
|
|
18
13
|
verify(user: User | null | undefined): boolean {
|
|
19
|
-
if (user === undefined) throw new Error(
|
|
14
|
+
if (user === undefined) throw new Error(RequestIdentityError.NotAttached);
|
|
20
15
|
return user !== null;
|
|
21
16
|
}
|
|
22
17
|
|
|
23
18
|
reverse(user: User | null | undefined): boolean {
|
|
24
|
-
if (user === undefined) throw new Error(
|
|
19
|
+
if (user === undefined) throw new Error(RequestIdentityError.NotAttached);
|
|
25
20
|
return user === null;
|
|
26
21
|
}
|
|
27
22
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as tools from "@bgord/tools";
|
|
2
2
|
import * as v from "valibot";
|
|
3
|
+
import { PathMatcher } from "./path-matcher.service";
|
|
3
4
|
import type { ReactiveConfigPort } from "./reactive-config.port";
|
|
4
5
|
import type { HasRequestPath } from "./request-context.port";
|
|
5
6
|
|
|
@@ -31,12 +32,7 @@ export class ShieldMaintenanceStrategy {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
shouldSkip(context: HasRequestPath): boolean {
|
|
34
|
-
return (
|
|
35
|
-
this.config?.skip?.some((rule) => {
|
|
36
|
-
if (rule instanceof URLPattern) return rule.test({ pathname: context.request.path });
|
|
37
|
-
return context.request.path.startsWith(rule);
|
|
38
|
-
}) ?? false
|
|
39
|
-
);
|
|
35
|
+
return PathMatcher.matches(this.config?.skip, context.request.path);
|
|
40
36
|
}
|
|
41
37
|
|
|
42
38
|
async evaluate(): Promise<ShieldMaintenanceResult> {
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import * as tools from "@bgord/tools";
|
|
2
|
+
import type { AtomicFileWriterPort } from "./atomic-file-writer.port";
|
|
2
3
|
import type { FileCleanerPort } from "./file-cleaner.port";
|
|
3
|
-
import type { FileRenamerPort } from "./file-renamer.port";
|
|
4
|
-
import type { FileWriterPort } from "./file-writer.port";
|
|
5
|
-
import type { NonceProviderPort } from "./nonce-provider.port";
|
|
6
4
|
import type { TemporaryFilePort } from "./temporary-file.port";
|
|
7
5
|
|
|
8
6
|
type Dependencies = {
|
|
7
|
+
AtomicFileWriter: AtomicFileWriterPort;
|
|
9
8
|
FileCleaner: FileCleanerPort;
|
|
10
|
-
FileRenamer: FileRenamerPort;
|
|
11
|
-
FileWriter: FileWriterPort;
|
|
12
|
-
NonceProvider: NonceProviderPort;
|
|
13
9
|
};
|
|
14
10
|
|
|
15
11
|
export class TemporaryFileAbsoluteAdapter implements TemporaryFilePort {
|
|
@@ -19,20 +15,9 @@ export class TemporaryFileAbsoluteAdapter implements TemporaryFilePort {
|
|
|
19
15
|
) {}
|
|
20
16
|
|
|
21
17
|
async write(filename: tools.Filename, content: File): Promise<tools.FilePathAbsolute> {
|
|
22
|
-
const temporary = tools.FilePathAbsolute.fromPartsSafe(
|
|
23
|
-
this.directory,
|
|
24
|
-
filename.withSuffix(`-part-${this.deps.NonceProvider.generate()}`),
|
|
25
|
-
);
|
|
26
18
|
const final = tools.FilePathAbsolute.fromPartsSafe(this.directory, filename);
|
|
27
19
|
|
|
28
|
-
await this.deps.
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
await this.deps.FileRenamer.rename(temporary, final);
|
|
32
|
-
} catch (error) {
|
|
33
|
-
await this.deps.FileCleaner.delete(temporary);
|
|
34
|
-
throw error;
|
|
35
|
-
}
|
|
20
|
+
await this.deps.AtomicFileWriter.write(final, content);
|
|
36
21
|
|
|
37
22
|
return final;
|
|
38
23
|
}
|
package/src/timing.middleware.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ClockPort } from "./clock.port";
|
|
2
|
+
import { EventStreamAccept } from "./event-stream-accept.service";
|
|
2
3
|
import type { HasRequestHeader } from "./request-context.port";
|
|
3
4
|
import { Stopwatch } from "./stopwatch.service";
|
|
4
5
|
|
|
@@ -10,7 +11,7 @@ export class TimingMiddleware {
|
|
|
10
11
|
constructor(private readonly deps: TimingMiddlewareDependencies) {}
|
|
11
12
|
|
|
12
13
|
async measure(context: HasRequestHeader, action: () => void | Promise<void>): Promise<string | null> {
|
|
13
|
-
if (
|
|
14
|
+
if (EventStreamAccept.matches(context.request.header("accept"))) return null;
|
|
14
15
|
|
|
15
16
|
const stopwatch = new Stopwatch(this.deps);
|
|
16
17
|
|
|
@@ -18,13 +19,4 @@ export class TimingMiddleware {
|
|
|
18
19
|
|
|
19
20
|
return `total;dur=${Math.max(0, stopwatch.stop().ms)}`;
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
-
private static isEventStream(accept: string | undefined): boolean {
|
|
23
|
-
if (!accept) return false;
|
|
24
|
-
|
|
25
|
-
return accept
|
|
26
|
-
.toLowerCase()
|
|
27
|
-
.split(",")
|
|
28
|
-
.some((type) => type.split(";")[0]?.trim() === "text/event-stream");
|
|
29
|
-
}
|
|
30
22
|
}
|