glasswork 1.1.0 → 1.3.0
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/CHANGELOG.md +57 -1
- package/README.md +3 -0
- package/dist/auth/better-auth-provider.d.ts +11 -3
- package/dist/auth/better-auth-provider.d.ts.map +1 -1
- package/dist/auth/better-auth-provider.js +15 -6
- package/dist/auth/better-auth-provider.js.map +1 -1
- package/dist/auth/middleware.d.ts +1 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +18 -10
- package/dist/auth/middleware.js.map +1 -1
- package/dist/auth/types.d.ts +6 -2
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +16 -7
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/module-graph.js +3 -0
- package/dist/core/module-graph.js.map +1 -1
- package/dist/core/request-scope.d.ts +12 -0
- package/dist/core/request-scope.d.ts.map +1 -0
- package/dist/core/request-scope.js +86 -0
- package/dist/core/request-scope.js.map +1 -0
- package/dist/core/route-factory.d.ts +1 -0
- package/dist/core/route-factory.d.ts.map +1 -1
- package/dist/core/types.d.ts +6 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/email/compiler/compiler.d.ts.map +1 -1
- package/dist/email/compiler/compiler.js +69 -17
- package/dist/email/compiler/compiler.js.map +1 -1
- package/dist/email/compiler/tokenizer.js +4 -2
- package/dist/email/compiler/tokenizer.js.map +1 -1
- package/dist/email/compiler/types.d.ts +2 -0
- package/dist/email/compiler/types.d.ts.map +1 -1
- package/dist/email/transports/ses-transport.d.ts +8 -0
- package/dist/email/transports/ses-transport.d.ts.map +1 -1
- package/dist/email/transports/ses-transport.js +132 -25
- package/dist/email/transports/ses-transport.js.map +1 -1
- package/dist/email/webhooks/handler-factory.d.ts +1 -0
- package/dist/email/webhooks/handler-factory.d.ts.map +1 -1
- package/dist/email/webhooks/handler-factory.js +40 -38
- package/dist/email/webhooks/handler-factory.js.map +1 -1
- package/dist/email/webhooks/notification-parser.d.ts +1 -1
- package/dist/email/webhooks/notification-parser.js +1 -1
- package/dist/email/webhooks/signature-verification.d.ts +4 -2
- package/dist/email/webhooks/signature-verification.d.ts.map +1 -1
- package/dist/email/webhooks/signature-verification.js +63 -8
- package/dist/email/webhooks/signature-verification.js.map +1 -1
- package/dist/email/webhooks/subscription-handler.d.ts +4 -2
- package/dist/email/webhooks/subscription-handler.d.ts.map +1 -1
- package/dist/email/webhooks/subscription-handler.js +42 -6
- package/dist/email/webhooks/subscription-handler.js.map +1 -1
- package/dist/email/webhooks/types.d.ts +17 -2
- package/dist/email/webhooks/types.d.ts.map +1 -1
- package/dist/jobs/define-job.d.ts +4 -4
- package/dist/jobs/define-job.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +11 -1
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/index.d.ts +2 -2
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/job-service.d.ts +6 -6
- package/dist/jobs/job-service.d.ts.map +1 -1
- package/dist/jobs/job-service.js +8 -0
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/observability/emf.d.ts +5 -15
- package/dist/jobs/observability/emf.d.ts.map +1 -1
- package/dist/jobs/observability/emf.js +87 -67
- package/dist/jobs/observability/emf.js.map +1 -1
- package/dist/jobs/observability/index.d.ts +2 -4
- package/dist/jobs/observability/index.d.ts.map +1 -1
- package/dist/jobs/observability/index.js +1 -3
- package/dist/jobs/observability/index.js.map +1 -1
- package/dist/jobs/observability/types.d.ts +16 -193
- package/dist/jobs/observability/types.d.ts.map +1 -1
- package/dist/jobs/types.d.ts +4 -4
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/worker.d.ts +5 -0
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +73 -12
- package/dist/jobs/worker.js.map +1 -1
- package/dist/list-query/builder.d.ts +2 -1
- package/dist/list-query/builder.d.ts.map +1 -1
- package/dist/list-query/builder.js +23 -15
- package/dist/list-query/builder.js.map +1 -1
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +60 -92
- package/dist/middleware/rate-limit.js.map +1 -1
- package/dist/openapi/openapi.d.ts +1 -4
- package/dist/openapi/openapi.d.ts.map +1 -1
- package/dist/openapi/openapi.js +15 -35
- package/dist/openapi/openapi.js.map +1 -1
- package/dist/sse/index.d.ts +6 -0
- package/dist/sse/index.d.ts.map +1 -0
- package/dist/sse/index.js +18 -0
- package/dist/sse/index.js.map +1 -0
- package/dist/sse/sse-broadcaster.d.ts +38 -0
- package/dist/sse/sse-broadcaster.d.ts.map +1 -0
- package/dist/sse/sse-broadcaster.js +118 -0
- package/dist/sse/sse-broadcaster.js.map +1 -0
- package/dist/utils/get-client-ip.d.ts.map +1 -1
- package/dist/utils/get-client-ip.js +22 -13
- package/dist/utils/get-client-ip.js.map +1 -1
- package/package.json +11 -3
- package/dist/jobs/observability/client.d.ts +0 -26
- package/dist/jobs/observability/client.d.ts.map +0 -1
- package/dist/jobs/observability/client.js +0 -286
- package/dist/jobs/observability/client.js.map +0 -1
- package/dist/jobs/observability/dashboard.d.ts +0 -19
- package/dist/jobs/observability/dashboard.d.ts.map +0 -1
- package/dist/jobs/observability/dashboard.js +0 -144
- package/dist/jobs/observability/dashboard.js.map +0 -1
- package/dist/jobs/scheduler.d.ts +0 -17
- package/dist/jobs/scheduler.d.ts.map +0 -1
- package/dist/jobs/scheduler.js +0 -83
- package/dist/jobs/scheduler.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,54 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.3.0] - 2026-10-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Automatic per-attempt CloudWatch EMF metrics for `bootstrapWorker` in Lambda, with configurable namespaces, stable dimensions, opt-out and a synchronous test sink. Metrics use raw stdout without an AWS SDK dependency, omit payloads and error details, and never change job acknowledgements when emission fails. Dashboards and CloudWatch queries remain application-owned; the jobs documentation includes native CDK and Logs Insights examples.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Use TypeScript CDK examples as the primary deployment documentation, while retaining alternative deployment options in the Lambda deployment guide.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Stop FIFO batches after the first failure and report all unprocessed records for retry.
|
|
23
|
+
- Infer separate job input/output types and pass schema output to worker and mock handlers; transport original validated input to avoid chained transforms.
|
|
24
|
+
- Reject unsupported driver delays without recursion.
|
|
25
|
+
|
|
26
|
+
### Removed
|
|
27
|
+
|
|
28
|
+
- Remove the unused DynamoDB scheduler and its public exports in favor of EventBridge Scheduler.
|
|
29
|
+
|
|
30
|
+
## [1.2.0] - 2026-09-29
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- **`glasswork/sse`** — in-process server-sent event notifications for long-running Node.js deployments, with bounded connection buffers, heartbeats, and automatic cleanup. The broadcaster does not provide cross-instance delivery or work with the standard Lambda handler.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- Load the optional Swagger UI peer on the first UI request so minimal core consumers can import and bootstrap without it.
|
|
39
|
+
|
|
40
|
+
- Enable partial batch responses in every SQS worker deployment example so failed jobs remain retryable.
|
|
41
|
+
|
|
42
|
+
- Preserve SES webhook error responses and return a retryable status when event processing fails.
|
|
43
|
+
|
|
44
|
+
- Secure the Better Auth role example with `input: false` and document the migration check for existing authorization data.
|
|
45
|
+
- Enforce `allowGuest: false` for every unauthenticated request, including routes without an authorization rule, while still clearing invalid session cookies.
|
|
46
|
+
- Resolve `SCOPED` route services from an isolated Awilix child container for each HTTP request and dispose the scope after handling.
|
|
47
|
+
- Preserve trusted list-query scopes in every facet aggregation, including scopes on the aggregated field and nested logical conditions.
|
|
48
|
+
- Verify SNS webhook signatures in every environment by default and restrict automatic subscription confirmation to bounded, non-redirecting AWS SNS requests.
|
|
49
|
+
- Require an explicit SNS topic allowlist for verified webhooks and support AWS SNS signature versions 1 and 2.
|
|
50
|
+
- Revoke Better Auth sessions with the authenticated session token and use Better Auth's standard cookie name by default.
|
|
51
|
+
- Consume rate-limit capacity atomically, require complete DynamoDB configuration, and resolve client IPs from Lambda and Node adapter context.
|
|
52
|
+
- HTML-escape email template variables by default, restrict dynamic URL schemes, and require triple braces for trusted raw HTML.
|
|
53
|
+
- Encode raw SES messages from UTF-8 bytes and reject header or attachment metadata that could alter the MIME structure.
|
|
54
|
+
- Export OpenAPI documents directly after route registration without mounting a temporary public endpoint or using a timer.
|
|
55
|
+
|
|
56
|
+
## [1.1.0] - 2026-09-16
|
|
57
|
+
|
|
10
58
|
### Added
|
|
11
59
|
|
|
12
60
|
- **`glasswork/rls`** — PostgreSQL tenant isolation through Prisma Client Extensions, AsyncLocalStorage, Hono middleware, and a policy generator; includes transaction-scoped context, explicit bypass, and PostgreSQL integration tests.
|
|
@@ -22,6 +70,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
22
70
|
### Changed
|
|
23
71
|
|
|
24
72
|
- Build and typecheck with stable TypeScript 7.0.2; verify published declarations and route inference with TypeScript 5.9, 6, and 7 in isolated npm consumers.
|
|
73
|
+
- Propagate concrete authentication types through route contexts.
|
|
25
74
|
- Update development dependencies, including Biome 2.5, AWS SDK clients, Hono, CASL, MJML, and documentation tooling. Keep Prisma on stable 7.10 and Vitest on the latest 4.x release compatible with Better Auth's testing peer range.
|
|
26
75
|
- Add Node.js 26 to the CI test matrix alongside Node.js 20, 22, and 24; check packed-package imports and types on Node.js 20.
|
|
27
76
|
- Make `ListQuerySchema` strict and bounded; malformed pagination, oversized strings, and unknown query parameters now return 422 instead of being clamped or ignored.
|
|
@@ -30,6 +79,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
30
79
|
- `parseWhereFilterValues` reuses those schemas with `parse()` instead of custom coercion logic
|
|
31
80
|
- List-query `where` deep copy uses `structuredClone` so parsed `Date` values are preserved
|
|
32
81
|
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- Correctly escape end and else control flow markers in compiled email templates.
|
|
85
|
+
|
|
33
86
|
## [1.0.0] - 2026-06-10
|
|
34
87
|
|
|
35
88
|
Major release: subpath exports, dependency upgrades (CASL 7, MJML 5, Valibot 1.4, Prisma 7), Prisma list-query helpers, and internal refactors. Breaking changes when upgrading from 0.x.
|
|
@@ -87,6 +140,9 @@ Major release: subpath exports, dependency upgrades (CASL 7, MJML 5, Valibot 1.4
|
|
|
87
140
|
|
|
88
141
|
Last 0.x release before the 1.0 breaking changes. Earlier 0.x history is available on [GitHub releases](https://github.com/rolandboon/glasswork/releases).
|
|
89
142
|
|
|
90
|
-
[Unreleased]: https://github.com/rolandboon/glasswork/compare/v1.
|
|
143
|
+
[Unreleased]: https://github.com/rolandboon/glasswork/compare/v1.3.0...HEAD
|
|
144
|
+
[1.3.0]: https://github.com/rolandboon/glasswork/compare/v1.2.0...v1.3.0
|
|
145
|
+
[1.2.0]: https://github.com/rolandboon/glasswork/compare/v1.1.0...v1.2.0
|
|
146
|
+
[1.1.0]: https://github.com/rolandboon/glasswork/compare/v1.0.0...v1.1.0
|
|
91
147
|
[1.0.0]: https://github.com/rolandboon/glasswork/compare/v0.13.3...v1.0.0
|
|
92
148
|
[0.13.3]: https://github.com/rolandboon/glasswork/compare/v0.13.2...v0.13.3
|
package/README.md
CHANGED
|
@@ -53,6 +53,9 @@ Glasswork combines the best patterns from NestJS (modules, DI, OpenAPI) with the
|
|
|
53
53
|
npm install glasswork hono awilix valibot hono-openapi
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
+
To use Swagger UI at `/api`, also install `@hono/swagger-ui`. It is loaded on the
|
|
57
|
+
first UI request; API routes and OpenAPI JSON generation do not require it.
|
|
58
|
+
|
|
56
59
|
Glasswork 1.0 uses **subpath exports** (`glasswork/core`, `glasswork/http`, `glasswork/auth`, …). The root `glasswork` import covers core and HTTP only; optional subsystems use their own subpath. See [Package Exports](https://glasswork.dev/getting-started/package-exports).
|
|
57
60
|
|
|
58
61
|
## Quick Start
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import type { AuthProvider, AuthUser } from './types.js';
|
|
2
2
|
export interface BetterAuthClient {
|
|
3
|
+
$context?: Promise<{
|
|
4
|
+
authCookies: {
|
|
5
|
+
sessionToken: {
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
}>;
|
|
3
10
|
api: {
|
|
4
11
|
getSession: (options: {
|
|
5
12
|
headers?: Record<string, string>;
|
|
@@ -9,9 +16,10 @@ export interface BetterAuthClient {
|
|
|
9
16
|
} | null>;
|
|
10
17
|
revokeSession: (options: {
|
|
11
18
|
body: {
|
|
12
|
-
|
|
19
|
+
token: string;
|
|
13
20
|
};
|
|
14
|
-
|
|
21
|
+
headers: Record<string, string>;
|
|
22
|
+
}) => Promise<unknown>;
|
|
15
23
|
signInEmail?: (options: {
|
|
16
24
|
body: {
|
|
17
25
|
email: string;
|
|
@@ -36,7 +44,7 @@ export interface BetterAuthProviderConfig<TUser extends AuthUser = AuthUser> {
|
|
|
36
44
|
auth: BetterAuthClient;
|
|
37
45
|
/** Map better-auth user to AuthUser */
|
|
38
46
|
mapUser?: (user: Record<string, unknown>) => TUser;
|
|
39
|
-
/**
|
|
47
|
+
/** Override the cookie name. Otherwise use Better Auth's resolved cookie configuration. */
|
|
40
48
|
cookieName?: string;
|
|
41
49
|
}
|
|
42
50
|
interface BetterAuthSession {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE;QACH,UAAU,EAAE,CAAC,OAAO,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC;YACrE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;SACvC,GAAG,IAAI,CAAC,CAAC;QACV,aAAa,EAAE,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"better-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAE,WAAW,EAAE;YAAE,YAAY,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IACxE,GAAG,EAAE;QACH,UAAU,EAAE,CAAC,OAAO,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC;YACrE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;SACvC,GAAG,IAAI,CAAC,CAAC;QACV,aAAa,EAAE,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;YACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACjC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3F,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/E,YAAY,CAAC,EACT,CAAC,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAClE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG;YAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;aAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAC9E,CAAC,CAAC;KACR,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,wBAAwB,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ;IACzE,kCAAkC;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC;IACnD,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,QAAQ,EAC7D,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,GAAG;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC;CACnD,GACA,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,GACzC,YAAY,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
const DEFAULT_COOKIE_NAME = '
|
|
1
|
+
const DEFAULT_COOKIE_NAME = 'better-auth.session_token';
|
|
2
2
|
export function createBetterAuthProvider(config) {
|
|
3
|
-
const { auth, mapUser, cookieName
|
|
3
|
+
const { auth, mapUser, cookieName } = config;
|
|
4
|
+
const getSessionCookieName = async () => cookieName ?? (await auth.$context)?.authCookies.sessionToken.name ?? DEFAULT_COOKIE_NAME;
|
|
4
5
|
const defaultMapUser = (user) => ({
|
|
5
6
|
...user,
|
|
6
7
|
id: String(user.id ?? user.userId ?? ''),
|
|
@@ -10,10 +11,12 @@ export function createBetterAuthProvider(config) {
|
|
|
10
11
|
});
|
|
11
12
|
return {
|
|
12
13
|
name: 'better-auth',
|
|
14
|
+
sessionCookieName: cookieName ?? DEFAULT_COOKIE_NAME,
|
|
15
|
+
getSessionCookieName,
|
|
13
16
|
async validateSession(token) {
|
|
14
17
|
try {
|
|
15
18
|
const result = await auth.api.getSession({
|
|
16
|
-
headers: { cookie: `${
|
|
19
|
+
headers: { cookie: `${await getSessionCookieName()}=${token}` },
|
|
17
20
|
});
|
|
18
21
|
if (!result?.session || !result.user) {
|
|
19
22
|
return null;
|
|
@@ -27,13 +30,19 @@ export function createBetterAuthProvider(config) {
|
|
|
27
30
|
return null;
|
|
28
31
|
}
|
|
29
32
|
},
|
|
30
|
-
async invalidateSession(
|
|
31
|
-
|
|
33
|
+
async invalidateSession(token) {
|
|
34
|
+
const headers = { cookie: `${await getSessionCookieName()}=${token}` };
|
|
35
|
+
const result = await auth.api.getSession({ headers });
|
|
36
|
+
const sessionToken = result?.session?.token;
|
|
37
|
+
if (typeof sessionToken !== 'string' || sessionToken.length === 0) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
await auth.api.revokeSession({ body: { token: sessionToken }, headers });
|
|
32
41
|
},
|
|
33
42
|
async refreshSession(token) {
|
|
34
43
|
try {
|
|
35
44
|
const result = await auth.api.getSession({
|
|
36
|
-
headers: { cookie: `${
|
|
45
|
+
headers: { cookie: `${await getSessionCookieName()}=${token}` },
|
|
37
46
|
});
|
|
38
47
|
return result?.session ? mapSession(result.session) : null;
|
|
39
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-provider.js","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"better-auth-provider.js","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export interface AuthMiddlewareConfig<TUser extends AuthUser = AuthUser, TAbilit
|
|
|
6
6
|
provider: AuthProvider<TUser, TSession>;
|
|
7
7
|
/** Function to build ability from user. */
|
|
8
8
|
buildAbility: (user: TUser) => TAbility;
|
|
9
|
-
/** Cookie name for session token (default: 'session'). */
|
|
9
|
+
/** Cookie name for session token (default: provider setting or 'session'). */
|
|
10
10
|
cookieName?: string;
|
|
11
11
|
/** Header name for token (default: 'Authorization'). */
|
|
12
12
|
headerName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAI7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,MAAM,WAAW,oBAAoB,CACnC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAE1C,8BAA8B;IAC9B,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,2CAA2C;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC;IACxC,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAI7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,MAAM,WAAW,oBAAoB,CACnC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAE1C,8BAA8B;IAC9B,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,2CAA2C;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC;IACxC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,QAAQ,CAAC;IAC9B,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,IAAI;IAC1E,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,KAAK,eAAe,CAClB,KAAK,SAAS,QAAQ,EACtB,QAAQ,SAAS,UAAU,EAC3B,QAAQ,SAAS,WAAW,IAC1B;IACF,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,cAAc,CACxB,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,QAAQ,SAAS,WAAW,GAAG,WAAW,IACxC,CACF,SAAS,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KACtC,iBAAiB,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAE1C,MAAM,EAAE,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,GACtD,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CA4C3C"}
|
package/dist/auth/middleware.js
CHANGED
|
@@ -6,9 +6,13 @@ import { setRequestAuth } from '../observability/request-context.js';
|
|
|
6
6
|
* Create auth middleware that validates sessions and builds abilities.
|
|
7
7
|
*/
|
|
8
8
|
export function createAuthMiddleware(config) {
|
|
9
|
-
const { provider, buildAbility, cookieName
|
|
9
|
+
const { provider, buildAbility, cookieName: configuredCookieName, headerName = 'Authorization', allowGuest = true, guestAbility, onInvalidSession, } = config;
|
|
10
10
|
return function authMiddleware(authorize) {
|
|
11
11
|
return async (c, next) => {
|
|
12
|
+
const cookieName = configuredCookieName ??
|
|
13
|
+
(await provider.getSessionCookieName?.()) ??
|
|
14
|
+
provider.sessionCookieName ??
|
|
15
|
+
'session';
|
|
12
16
|
const state = await resolveAuthState(c, {
|
|
13
17
|
cookieName,
|
|
14
18
|
headerName,
|
|
@@ -17,14 +21,15 @@ export function createAuthMiddleware(config) {
|
|
|
17
21
|
guestAbility,
|
|
18
22
|
});
|
|
19
23
|
applyAuthContext(c, state);
|
|
24
|
+
if (!state.isAuthenticated && !allowGuest) {
|
|
25
|
+
await clearInvalidSession(c, state.shouldClearCookie, cookieName, onInvalidSession);
|
|
26
|
+
throw new UnauthorizedException('Authentication required');
|
|
27
|
+
}
|
|
20
28
|
if (authorize) {
|
|
21
|
-
enforceAuthorization(authorize, state
|
|
29
|
+
enforceAuthorization(authorize, state);
|
|
22
30
|
}
|
|
23
31
|
await next();
|
|
24
|
-
|
|
25
|
-
deleteCookie(c, cookieName, { path: '/' });
|
|
26
|
-
await onInvalidSession?.(c);
|
|
27
|
-
}
|
|
32
|
+
await clearInvalidSession(c, state.shouldClearCookie, cookieName, onInvalidSession);
|
|
28
33
|
};
|
|
29
34
|
};
|
|
30
35
|
}
|
|
@@ -74,10 +79,7 @@ function applyAuthContext(c, state) {
|
|
|
74
79
|
});
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
|
-
function enforceAuthorization(authorize, state
|
|
78
|
-
if (!state.user && !allowGuest) {
|
|
79
|
-
throw new UnauthorizedException('Authentication required');
|
|
80
|
-
}
|
|
82
|
+
function enforceAuthorization(authorize, state) {
|
|
81
83
|
if (!state.ability.can(authorize.action, authorize.subject)) {
|
|
82
84
|
if (!state.isAuthenticated) {
|
|
83
85
|
throw new UnauthorizedException('Authentication required');
|
|
@@ -85,6 +87,12 @@ function enforceAuthorization(authorize, state, allowGuest) {
|
|
|
85
87
|
throw new ForbiddenException(`You don't have permission to ${authorize.action} ${authorize.subject}`);
|
|
86
88
|
}
|
|
87
89
|
}
|
|
90
|
+
async function clearInvalidSession(c, shouldClearCookie, cookieName, onInvalidSession) {
|
|
91
|
+
if (!shouldClearCookie)
|
|
92
|
+
return;
|
|
93
|
+
deleteCookie(c, cookieName, { path: '/' });
|
|
94
|
+
await onInvalidSession?.(c);
|
|
95
|
+
}
|
|
88
96
|
function extractBearerToken(c, headerName) {
|
|
89
97
|
const header = c.req.header(headerName);
|
|
90
98
|
if (!header)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AA6CrE;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAKlC,MAAuD;IAEvD,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/types.d.ts
CHANGED
|
@@ -28,6 +28,10 @@ export interface AuthSession {
|
|
|
28
28
|
export interface AuthProvider<TUser extends AuthUser = AuthUser, TSession extends AuthSession = AuthSession> {
|
|
29
29
|
/** Provider name for logging. */
|
|
30
30
|
readonly name: string;
|
|
31
|
+
/** Provider-specific session cookie name used by auth middleware by default. */
|
|
32
|
+
readonly sessionCookieName?: string;
|
|
33
|
+
/** Resolve runtime cookie settings, including secure prefixes and custom names. */
|
|
34
|
+
getSessionCookieName?(): Promise<string>;
|
|
31
35
|
/**
|
|
32
36
|
* Validate a session token/ID and return session + user.
|
|
33
37
|
*/
|
|
@@ -36,9 +40,9 @@ export interface AuthProvider<TUser extends AuthUser = AuthUser, TSession extend
|
|
|
36
40
|
user: TUser;
|
|
37
41
|
} | null>;
|
|
38
42
|
/**
|
|
39
|
-
* Invalidate
|
|
43
|
+
* Invalidate the session identified by its client credential/token.
|
|
40
44
|
*/
|
|
41
|
-
invalidateSession(
|
|
45
|
+
invalidateSession(token: string): Promise<void>;
|
|
42
46
|
/**
|
|
43
47
|
* Refresh session (extend expiry, update lastAccessedAt).
|
|
44
48
|
*/
|
package/dist/auth/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAC3B,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAE1C,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAC3B,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAE1C,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,mFAAmF;IACnF,oBAAoB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACtC,OAAO,EAAE,QAAQ,CAAC;QAClB,IAAI,EAAE,KAAK,CAAC;KACb,GAAG,IAAI,CAAC,CAAC;IAEV;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,cAAc,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAC1B,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,QAAQ,SAAS,UAAU,GAAG,UAAU;IAExC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,wBAAwB,CAClC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,QAAQ,SAAS,UAAU,GAAG,UAAU,IACtC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC,GAAG;IACzF,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,EAAE,IAAI,CAAC;CACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/core/bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/core/bootstrap.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAIf,YAAY,EAKb,MAAM,YAAY,CAAC;AAwBpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,YAAY,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAsH1B"}
|
package/dist/core/bootstrap.js
CHANGED
|
@@ -15,6 +15,7 @@ import { isLambda, isTest } from '../utils/environment.js';
|
|
|
15
15
|
import { createLogger, createPlainLogger, getDefaultLogLevel, } from '../utils/logger.js';
|
|
16
16
|
import { executeLifecycleHooks } from './lifecycle.js';
|
|
17
17
|
import { collectModules, registerModuleProviders, resolveAsyncFactoryProviders, validateNoCycles, } from './module-graph.js';
|
|
18
|
+
import { HttpRequestScope } from './request-scope.js';
|
|
18
19
|
/**
|
|
19
20
|
* Detect environment from NODE_ENV or AWS Lambda context
|
|
20
21
|
*/
|
|
@@ -100,7 +101,7 @@ export async function bootstrap(rootModule, options = {}) {
|
|
|
100
101
|
await resolveAsyncFactoryProviders(container, asyncFactoryNames, bootstrapLogger);
|
|
101
102
|
}
|
|
102
103
|
// Create Hono app and apply middleware
|
|
103
|
-
const { app, openAPIContext } = createApp({
|
|
104
|
+
const { app, openAPIContext, writeOpenAPISpec } = createApp({
|
|
104
105
|
environment,
|
|
105
106
|
errorHandler,
|
|
106
107
|
openapi,
|
|
@@ -111,6 +112,7 @@ export async function bootstrap(rootModule, options = {}) {
|
|
|
111
112
|
bootstrapLogger,
|
|
112
113
|
});
|
|
113
114
|
// Mount module routes
|
|
115
|
+
const requestScope = new HttpRequestScope();
|
|
114
116
|
mountModuleRoutes({
|
|
115
117
|
app,
|
|
116
118
|
modules: allModules,
|
|
@@ -118,7 +120,11 @@ export async function bootstrap(rootModule, options = {}) {
|
|
|
118
120
|
apiBasePath,
|
|
119
121
|
bootstrapLogger,
|
|
120
122
|
openAPIContext,
|
|
123
|
+
requestScope,
|
|
121
124
|
});
|
|
125
|
+
// Export only after every module route has been registered. The writer uses
|
|
126
|
+
// the route registry directly and does not add a public endpoint.
|
|
127
|
+
await writeOpenAPISpec?.();
|
|
122
128
|
bootstrapLogger.debug('Bootstrap complete');
|
|
123
129
|
bootstrapLogger.debug(`Environment: ${environment}`);
|
|
124
130
|
bootstrapLogger.debug(`Registered ${Object.keys(container.cradle).length} services`);
|
|
@@ -165,8 +171,8 @@ function createApp(options) {
|
|
|
165
171
|
applySecurityMiddleware(app, options);
|
|
166
172
|
applyLoggingMiddleware(app, options);
|
|
167
173
|
applyRateLimiting(app, options);
|
|
168
|
-
applyOpenAPIDocumentation(app, options);
|
|
169
|
-
return { app, openAPIContext };
|
|
174
|
+
const { writeSpec: writeOpenAPISpec } = applyOpenAPIDocumentation(app, options);
|
|
175
|
+
return { app, openAPIContext, writeOpenAPISpec };
|
|
170
176
|
}
|
|
171
177
|
/**
|
|
172
178
|
* Build the OpenAPI context with processors and security schemes
|
|
@@ -275,15 +281,15 @@ function applyRateLimiting(app, { rateLimit, bootstrapLogger, }) {
|
|
|
275
281
|
function applyOpenAPIDocumentation(app, options) {
|
|
276
282
|
const { environment, openapi, rateLimit, middleware, bootstrapLogger } = options;
|
|
277
283
|
if (!openapi?.enabled)
|
|
278
|
-
return;
|
|
284
|
+
return {};
|
|
279
285
|
bootstrapLogger.debug('Configuring OpenAPI');
|
|
280
|
-
configureOpenAPI({ app, environment, openapi, rateLimit, middleware });
|
|
286
|
+
return configureOpenAPI({ app, environment, openapi, rateLimit, middleware });
|
|
281
287
|
}
|
|
282
288
|
/**
|
|
283
289
|
* Mount module routes to the app
|
|
284
290
|
*/
|
|
285
291
|
function mountModuleRoutes(options) {
|
|
286
|
-
const { app, modules, container, apiBasePath, bootstrapLogger, openAPIContext } = options;
|
|
292
|
+
const { app, modules, container, apiBasePath, bootstrapLogger, openAPIContext, requestScope } = options;
|
|
287
293
|
for (const module of modules) {
|
|
288
294
|
if (!module.routes || !module.basePath) {
|
|
289
295
|
continue;
|
|
@@ -292,12 +298,15 @@ function mountModuleRoutes(options) {
|
|
|
292
298
|
const router = new Hono();
|
|
293
299
|
// Set OpenAPI context on the router so routes can access it
|
|
294
300
|
setOpenAPIContext(router, openAPIContext);
|
|
301
|
+
// Create and dispose an Awilix scope around every request before handlers run.
|
|
302
|
+
router.use('*', requestScope.middleware(container));
|
|
295
303
|
// Create a bound route function for this router
|
|
296
304
|
const boundRoute = (config) => route(router, config);
|
|
297
305
|
// Normalize routes to array and call each factory
|
|
298
306
|
const routeFactories = Array.isArray(module.routes) ? module.routes : [module.routes];
|
|
307
|
+
const services = requestScope.routeServices(container);
|
|
299
308
|
for (const routeFactory of routeFactories) {
|
|
300
|
-
routeFactory(router,
|
|
309
|
+
routeFactory(router, services, boundRoute);
|
|
301
310
|
}
|
|
302
311
|
// Mount at base path
|
|
303
312
|
app.route(`${apiBasePath}/${module.basePath}`, router);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/core/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAuB,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/core/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -141,6 +141,9 @@ function registerFactoryProvider(provider, container, logger) {
|
|
|
141
141
|
const scope = provider.scope || 'SINGLETON';
|
|
142
142
|
const factory = provider.useFactory;
|
|
143
143
|
const isAsync = isAsyncFunction(factory);
|
|
144
|
+
if (isAsync && scope !== 'SINGLETON') {
|
|
145
|
+
throw new Error(`Async factory "${provider.provide}" must use SINGLETON scope`);
|
|
146
|
+
}
|
|
144
147
|
logger.debug(` - Registering ${provider.provide} (factory${isAsync ? ' async' : ''}, scope: ${scope})`);
|
|
145
148
|
const registration = asFunction(factory);
|
|
146
149
|
if (provider.inject && provider.inject.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-graph.js","sourceRoot":"","sources":["../../src/core/module-graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module-graph.js","sourceRoot":"","sources":["../../src/core/module-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AwilixContainer } from 'awilix';
|
|
2
|
+
import type { MiddlewareHandler } from 'hono';
|
|
3
|
+
/**
|
|
4
|
+
* Bridges route factories, which run during bootstrap, to an Awilix scope that
|
|
5
|
+
* exists only while the current HTTP request is being handled.
|
|
6
|
+
*/
|
|
7
|
+
export declare class HttpRequestScope {
|
|
8
|
+
#private;
|
|
9
|
+
middleware(container: AwilixContainer): MiddlewareHandler;
|
|
10
|
+
routeServices(container: AwilixContainer): Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=request-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-scope.d.ts","sourceRoot":"","sources":["../../src/core/request-scope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C;;;GAGG;AACH,qBAAa,gBAAgB;;IAI3B,UAAU,CAAC,SAAS,EAAE,eAAe,GAAG,iBAAiB,CAUxD;IAED,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBjE;CAgDF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { Lifetime } from 'awilix';
|
|
3
|
+
/**
|
|
4
|
+
* Bridges route factories, which run during bootstrap, to an Awilix scope that
|
|
5
|
+
* exists only while the current HTTP request is being handled.
|
|
6
|
+
*/
|
|
7
|
+
export class HttpRequestScope {
|
|
8
|
+
#storage = new AsyncLocalStorage();
|
|
9
|
+
#proxies = new Map();
|
|
10
|
+
middleware(container) {
|
|
11
|
+
return async (_context, next) => {
|
|
12
|
+
const scope = container.createScope();
|
|
13
|
+
try {
|
|
14
|
+
await this.#storage.run(scope, next);
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
await scope.dispose();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
routeServices(container) {
|
|
22
|
+
return new Proxy(Object.create(null), {
|
|
23
|
+
get: (_target, property) => {
|
|
24
|
+
if (typeof property !== 'string')
|
|
25
|
+
return undefined;
|
|
26
|
+
const registration = container.registrations[property];
|
|
27
|
+
if (registration?.lifetime === Lifetime.SCOPED ||
|
|
28
|
+
registration?.lifetime === Lifetime.TRANSIENT) {
|
|
29
|
+
return this.#requestScopedProxy(property, registration.lifetime === Lifetime.SCOPED);
|
|
30
|
+
}
|
|
31
|
+
return container.resolve(property);
|
|
32
|
+
},
|
|
33
|
+
getOwnPropertyDescriptor: (_target, property) => {
|
|
34
|
+
if (typeof property !== 'string' || !container.hasRegistration(property))
|
|
35
|
+
return undefined;
|
|
36
|
+
return { configurable: true, enumerable: true };
|
|
37
|
+
},
|
|
38
|
+
has: (_target, property) => typeof property === 'string' && container.hasRegistration(property),
|
|
39
|
+
ownKeys: () => Object.keys(container.registrations),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
#requestScopedProxy(name, shared) {
|
|
43
|
+
const existing = shared ? this.#proxies.get(name) : undefined;
|
|
44
|
+
if (existing)
|
|
45
|
+
return existing;
|
|
46
|
+
const instances = new WeakMap();
|
|
47
|
+
const resolve = () => {
|
|
48
|
+
const scope = this.#storage.getStore();
|
|
49
|
+
if (!scope) {
|
|
50
|
+
throw new Error(`Scoped provider "${name}" can only be used while handling an HTTP request`);
|
|
51
|
+
}
|
|
52
|
+
if (!instances.has(scope))
|
|
53
|
+
instances.set(scope, scope.resolve(name));
|
|
54
|
+
return instances.get(scope);
|
|
55
|
+
};
|
|
56
|
+
const callable = (...args) => {
|
|
57
|
+
const service = resolve();
|
|
58
|
+
if (typeof service !== 'function') {
|
|
59
|
+
throw new TypeError(`Scoped provider "${name}" is not callable`);
|
|
60
|
+
}
|
|
61
|
+
return Reflect.apply(service, undefined, args);
|
|
62
|
+
};
|
|
63
|
+
const proxy = new Proxy(callable, {
|
|
64
|
+
apply: (_target, thisArg, args) => {
|
|
65
|
+
const service = resolve();
|
|
66
|
+
if (typeof service !== 'function') {
|
|
67
|
+
throw new TypeError(`Scoped provider "${name}" is not callable`);
|
|
68
|
+
}
|
|
69
|
+
return Reflect.apply(service, thisArg, args);
|
|
70
|
+
},
|
|
71
|
+
get: (_target, property) => {
|
|
72
|
+
const service = resolve();
|
|
73
|
+
const value = Reflect.get(Object(service), property, service);
|
|
74
|
+
return typeof value === 'function' ? value.bind(service) : value;
|
|
75
|
+
},
|
|
76
|
+
set: (_target, property, value) => {
|
|
77
|
+
const service = resolve();
|
|
78
|
+
return Reflect.set(Object(service), property, value, service);
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
if (shared)
|
|
82
|
+
this.#proxies.set(name, proxy);
|
|
83
|
+
return proxy;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=request-scope.js.map
|