@nestjs-kit/better-auth 2.1.0 → 2.1.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/README.md +3 -3
- package/dist/admin.cjs +3 -4
- package/dist/admin.d.cts +1 -3
- package/dist/admin.d.cts.map +1 -1
- package/dist/admin.d.mts +1 -3
- package/dist/admin.d.mts.map +1 -1
- package/dist/admin.mjs +3 -4
- package/dist/api-key.cjs +4 -5
- package/dist/api-key.d.cts +1 -3
- package/dist/api-key.d.cts.map +1 -1
- package/dist/api-key.d.mts +1 -3
- package/dist/api-key.d.mts.map +1 -1
- package/dist/api-key.mjs +4 -5
- package/dist/{auth-contracts-Brh_Qko9.d.cts → auth-contracts-CADGyI0O.d.mts} +3 -53
- package/dist/auth-contracts-CADGyI0O.d.mts.map +1 -0
- package/dist/{auth-contracts-Cz7C4_Ch.d.mts → auth-contracts-zvt8ysoZ.d.cts} +3 -53
- package/dist/auth-contracts-zvt8ysoZ.d.cts.map +1 -0
- package/dist/{auth-decorators-Cu_nxWnF.cjs → auth-decorators-CJKE9wlT.cjs} +8 -10
- package/dist/{auth-decorators-Cu_nxWnF.cjs.map → auth-decorators-CJKE9wlT.cjs.map} +1 -1
- package/dist/{auth-decorators-B1mFnGJ6.mjs → auth-decorators-CkNkLNpU.mjs} +8 -10
- package/dist/{auth-decorators-B1mFnGJ6.mjs.map → auth-decorators-CkNkLNpU.mjs.map} +1 -1
- package/dist/{auth-errors-C3rbTV9p.mjs → auth-errors-JjxGDVSt.mjs} +3 -5
- package/dist/{auth-errors-C3rbTV9p.mjs.map → auth-errors-JjxGDVSt.mjs.map} +1 -1
- package/dist/{auth-errors-DmiKl0L_.cjs → auth-errors-RW7hOVI-.cjs} +3 -5
- package/dist/{auth-errors-DmiKl0L_.cjs.map → auth-errors-RW7hOVI-.cjs.map} +1 -1
- package/dist/{auth-guard-h9QB_l11.mjs → auth-guard-Da92QEK5.mjs} +4 -5
- package/dist/{auth-guard-h9QB_l11.mjs.map → auth-guard-Da92QEK5.mjs.map} +1 -1
- package/dist/{auth-guard-CLyhAEEj.cjs → auth-guard-wapEh_M_.cjs} +4 -5
- package/dist/{auth-guard-CLyhAEEj.cjs.map → auth-guard-wapEh_M_.cjs.map} +1 -1
- package/dist/{auth-module-BgcY2HpA.cjs → auth-module-ab60-WJZ.cjs} +28 -47
- package/dist/auth-module-ab60-WJZ.cjs.map +1 -0
- package/dist/{auth-module-CtHx3gRU.mjs → auth-module-uy3BBWwR.mjs} +28 -47
- package/dist/auth-module-uy3BBWwR.mjs.map +1 -0
- package/dist/{auth-scope-interceptor-BjxAL1-S.cjs → auth-scope-interceptor-Bui20-Ps.cjs} +5 -7
- package/dist/{auth-scope-interceptor-BjxAL1-S.cjs.map → auth-scope-interceptor-Bui20-Ps.cjs.map} +1 -1
- package/dist/{auth-scope-interceptor-DYPn3b8M.mjs → auth-scope-interceptor-CvCQ52dV.mjs} +5 -7
- package/dist/{auth-scope-interceptor-DYPn3b8M.mjs.map → auth-scope-interceptor-CvCQ52dV.mjs.map} +1 -1
- package/dist/{bridge-protocol-c66aEkr5.mjs → bridge-protocol-CmRsff2P.mjs} +2 -3
- package/dist/{bridge-protocol-BDw8opAG.cjs.map → bridge-protocol-CmRsff2P.mjs.map} +1 -1
- package/dist/{bridge-protocol-BDw8opAG.cjs → bridge-protocol-DNFhIKdo.cjs} +2 -3
- package/dist/{bridge-protocol-c66aEkr5.mjs.map → bridge-protocol-DNFhIKdo.cjs.map} +1 -1
- package/dist/{decorate-Dt0e9K6R.mjs → decorate-bO-rBn-G.mjs} +5 -9
- package/dist/{decorate-Dt0e9K6R.mjs.map → decorate-bO-rBn-G.mjs.map} +1 -1
- package/dist/{decorate-Cr4Q7bNE.cjs → decorate-fMNf0caZ.cjs} +5 -9
- package/dist/{decorate-Cr4Q7bNE.cjs.map → decorate-fMNf0caZ.cjs.map} +1 -1
- package/dist/express.cjs +3 -4
- package/dist/express.d.cts +1 -3
- package/dist/express.d.cts.map +1 -1
- package/dist/express.d.mts +1 -3
- package/dist/express.d.mts.map +1 -1
- package/dist/express.mjs +3 -4
- package/dist/fastify.cjs +2 -3
- package/dist/fastify.d.cts +1 -3
- package/dist/fastify.d.cts.map +1 -1
- package/dist/fastify.d.mts +1 -3
- package/dist/fastify.d.mts.map +1 -1
- package/dist/fastify.mjs +2 -3
- package/dist/graphql.cjs +7 -9
- package/dist/graphql.cjs.map +1 -1
- package/dist/graphql.d.cts +1 -3
- package/dist/graphql.d.cts.map +1 -1
- package/dist/graphql.d.mts +1 -3
- package/dist/graphql.d.mts.map +1 -1
- package/dist/graphql.mjs +7 -9
- package/dist/graphql.mjs.map +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +7 -7
- package/dist/microservices.cjs +4 -6
- package/dist/microservices.cjs.map +1 -1
- package/dist/microservices.d.cts +1 -5
- package/dist/microservices.d.cts.map +1 -1
- package/dist/microservices.d.mts +1 -5
- package/dist/microservices.d.mts.map +1 -1
- package/dist/microservices.mjs +3 -5
- package/dist/microservices.mjs.map +1 -1
- package/dist/organization.cjs +3 -4
- package/dist/organization.d.cts +1 -3
- package/dist/organization.d.cts.map +1 -1
- package/dist/organization.d.mts +1 -3
- package/dist/organization.d.mts.map +1 -1
- package/dist/organization.mjs +3 -4
- package/dist/{platform-CZl7TY8j.mjs → platform-BKYVzAv1.mjs} +3 -5
- package/dist/{platform-CZl7TY8j.mjs.map → platform-BKYVzAv1.mjs.map} +1 -1
- package/dist/{platform-YICqqYv6.cjs → platform-C67dxSls.cjs} +3 -5
- package/dist/{platform-YICqqYv6.cjs.map → platform-C67dxSls.cjs.map} +1 -1
- package/dist/platform.cjs +1 -1
- package/dist/platform.d.cts +0 -2
- package/dist/platform.d.cts.map +1 -1
- package/dist/platform.d.mts +0 -2
- package/dist/platform.d.mts.map +1 -1
- package/dist/platform.mjs +1 -1
- package/dist/plugin.cjs +4 -8
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +0 -4
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts +0 -4
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +4 -8
- package/dist/plugin.mjs.map +1 -1
- package/dist/{principal-readings-Ied2staw.mjs → principal-readings-BuXTU0-2.mjs} +3 -4
- package/dist/{principal-readings-Ied2staw.mjs.map → principal-readings-BuXTU0-2.mjs.map} +1 -1
- package/dist/{principal-readings-Chmt6rQV.cjs → principal-readings-JLNT58k0.cjs} +3 -4
- package/dist/{principal-readings-Chmt6rQV.cjs.map → principal-readings-JLNT58k0.cjs.map} +1 -1
- package/dist/{rolldown-runtime-VH7oDXx4.cjs → rolldown-runtime-CmQyd0Gu.cjs} +1 -2
- package/dist/testing/conformance.cjs +24 -31
- package/dist/testing/conformance.cjs.map +1 -1
- package/dist/testing/conformance.d.cts +4 -14
- package/dist/testing/conformance.d.cts.map +1 -1
- package/dist/testing/conformance.d.mts +4 -14
- package/dist/testing/conformance.d.mts.map +1 -1
- package/dist/testing/conformance.mjs +23 -30
- package/dist/testing/conformance.mjs.map +1 -1
- package/dist/testing.cjs +6 -7
- package/dist/testing.d.cts +1 -3
- package/dist/testing.d.cts.map +1 -1
- package/dist/testing.d.mts +1 -3
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.mjs +6 -7
- package/dist/websockets.cjs +7 -10
- package/dist/websockets.cjs.map +1 -1
- package/dist/websockets.d.cts +1 -7
- package/dist/websockets.d.cts.map +1 -1
- package/dist/websockets.d.mts +1 -7
- package/dist/websockets.d.mts.map +1 -1
- package/dist/websockets.mjs +7 -10
- package/dist/websockets.mjs.map +1 -1
- package/package.json +24 -24
- package/dist/auth-contracts-Brh_Qko9.d.cts.map +0 -1
- package/dist/auth-contracts-Cz7C4_Ch.d.mts.map +0 -1
- package/dist/auth-module-BgcY2HpA.cjs.map +0 -1
- package/dist/auth-module-CtHx3gRU.mjs.map +0 -1
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { IncomingHttpHeaders, IncomingMessage } from "node:http";
|
|
1
2
|
import { CallHandler, CanActivate, DynamicModule, ExecutionContext, InjectionToken, IntrinsicException, Logger, LoggerService, ModuleMetadata, NestInterceptor, OptionalFactoryDependency, Provider, Type } from "@nestjs/common";
|
|
2
3
|
import { AbstractHttpAdapter, DiscoveryService, HttpAdapterHost, ModuleRef, Reflector } from "@nestjs/core";
|
|
3
|
-
import { Observable } from "rxjs";
|
|
4
|
-
import { IncomingHttpHeaders, IncomingMessage } from "node:http";
|
|
5
4
|
import { HookEndpointContext } from "better-auth";
|
|
6
|
-
|
|
5
|
+
import { Observable } from "rxjs";
|
|
7
6
|
type AuthErrorCode = "UNAUTHENTICATED" | "FORBIDDEN" | "RATE_LIMITED";
|
|
8
7
|
/** A transport-neutral denial. Only transports make it throwable. */
|
|
9
8
|
interface AuthFailure {
|
|
@@ -83,8 +82,6 @@ declare class BetterAuthInfrastructureError extends Error {
|
|
|
83
82
|
});
|
|
84
83
|
}
|
|
85
84
|
declare function getRawCause(error: BetterAuthInfrastructureError): unknown;
|
|
86
|
-
//#endregion
|
|
87
|
-
//#region src/auth-tokens.d.ts
|
|
88
85
|
declare function getBetterAuthInstanceToken(alias?: string): string;
|
|
89
86
|
declare function getBetterAuthOptionsToken(alias?: string): string;
|
|
90
87
|
declare function getBetterAuthServiceToken(alias?: string): string;
|
|
@@ -102,8 +99,6 @@ declare const SKIP_ORIGIN_CHECK_METADATA: unique symbol;
|
|
|
102
99
|
declare const AUTH_ENHANCER: unique symbol;
|
|
103
100
|
/** Connection-time WebSocket authentication, provided by the socket.io and ws transport definitions. */
|
|
104
101
|
declare const WS_CONNECTION_AUTH: unique symbol;
|
|
105
|
-
//#endregion
|
|
106
|
-
//#region src/auth-module.d.ts
|
|
107
102
|
declare class BetterAuthModule {
|
|
108
103
|
static forRoot<A extends AuthLike = RegisteredAuth>(options: BetterAuthModuleOptions<A> & BetterAuthAppOptions & {
|
|
109
104
|
name?: "default";
|
|
@@ -118,8 +113,6 @@ declare class BetterAuthModule {
|
|
|
118
113
|
name: string;
|
|
119
114
|
} & NoAppOptions): DynamicModule;
|
|
120
115
|
}
|
|
121
|
-
//#endregion
|
|
122
|
-
//#region src/bridge-protocol.d.ts
|
|
123
116
|
declare const EXTENSION_DEFINITION: unique symbol;
|
|
124
117
|
declare const UPGRADE_REQUEST: unique symbol;
|
|
125
118
|
interface BridgeHandle {
|
|
@@ -197,8 +190,6 @@ interface CompiledHook {
|
|
|
197
190
|
matches(ctx: HookEndpointContext, scope: ScopeView | undefined): boolean;
|
|
198
191
|
run(ctx: HookEndpointContext): Promise<unknown>;
|
|
199
192
|
}
|
|
200
|
-
//#endregion
|
|
201
|
-
//#region src/request-scope.d.ts
|
|
202
193
|
interface ScopeState {
|
|
203
194
|
readonly view: ScopeView;
|
|
204
195
|
readonly call?: TransportCall;
|
|
@@ -245,8 +236,6 @@ declare class RequestScope {
|
|
|
245
236
|
lineage?: InvocationLineage;
|
|
246
237
|
}): boolean;
|
|
247
238
|
}
|
|
248
|
-
//#endregion
|
|
249
|
-
//#region src/origin-check.d.ts
|
|
250
239
|
/** Bounded, per-application diagnostics; the next denial rolls the window without timers. */
|
|
251
240
|
declare class OriginDiagnostics {
|
|
252
241
|
#private;
|
|
@@ -277,8 +266,6 @@ declare class OriginCheck {
|
|
|
277
266
|
private calculationFailures;
|
|
278
267
|
private verdict;
|
|
279
268
|
}
|
|
280
|
-
//#endregion
|
|
281
|
-
//#region src/instance-registry.d.ts
|
|
282
269
|
interface InstanceEntry {
|
|
283
270
|
readonly name: string;
|
|
284
271
|
readonly instance: AuthLike;
|
|
@@ -323,8 +310,6 @@ declare class InstanceRegistry implements InstanceLookup {
|
|
|
323
310
|
initialize(issues: BetterAuthConfigurationError[]): Promise<void>;
|
|
324
311
|
reset(): void;
|
|
325
312
|
}
|
|
326
|
-
//#endregion
|
|
327
|
-
//#region src/mount-coordinator.d.ts
|
|
328
313
|
declare class MountCoordinator {
|
|
329
314
|
#private;
|
|
330
315
|
readonly host: HttpAdapterHost;
|
|
@@ -345,8 +330,6 @@ declare class MountCoordinator {
|
|
|
345
330
|
mount(): Promise<void>;
|
|
346
331
|
reset(): void;
|
|
347
332
|
}
|
|
348
|
-
//#endregion
|
|
349
|
-
//#region src/principal-readings.d.ts
|
|
350
333
|
interface ReadingInput {
|
|
351
334
|
readonly args: readonly unknown[];
|
|
352
335
|
readonly call?: TransportCall;
|
|
@@ -376,16 +359,12 @@ declare class PrincipalReadings {
|
|
|
376
359
|
deliver(error: BetterAuthConfigurationError, input?: ReadingInput, instance?: string): BetterAuthConfigurationError | RepeatedReaderError;
|
|
377
360
|
stamp(args: readonly unknown[], instance: string, result: PrincipalResult): void;
|
|
378
361
|
}
|
|
379
|
-
//#endregion
|
|
380
|
-
//#region src/policy-resolver.d.ts
|
|
381
362
|
declare class PolicyResolver {
|
|
382
363
|
private readonly moduleRef;
|
|
383
364
|
private readonly cache;
|
|
384
365
|
constructor(moduleRef: ModuleRef);
|
|
385
366
|
resolve<P>(reference: PolicyRef<P>): AuthorizationPolicy<P, any>;
|
|
386
367
|
}
|
|
387
|
-
//#endregion
|
|
388
|
-
//#region src/transport-registry.d.ts
|
|
389
368
|
declare class TransportRegistry {
|
|
390
369
|
private transports;
|
|
391
370
|
private readonly owners;
|
|
@@ -399,8 +378,6 @@ declare class TransportRegistry {
|
|
|
399
378
|
idOf(call: TransportCall): string;
|
|
400
379
|
describe(context: ExecutionContext, transport?: AuthTransport): TransportCall;
|
|
401
380
|
}
|
|
402
|
-
//#endregion
|
|
403
|
-
//#region src/route-planner.d.ts
|
|
404
381
|
declare class RoutePlanner {
|
|
405
382
|
private readonly instances;
|
|
406
383
|
private readonly policies;
|
|
@@ -412,8 +389,6 @@ declare class RoutePlanner {
|
|
|
412
389
|
forContext(context: ExecutionContext): RoutePlan;
|
|
413
390
|
plan(target: Type, method: string): RoutePlan;
|
|
414
391
|
}
|
|
415
|
-
//#endregion
|
|
416
|
-
//#region src/auth-service.d.ts
|
|
417
392
|
declare class BetterAuthService<A extends AuthLike = RegisteredAuth> {
|
|
418
393
|
#private;
|
|
419
394
|
private readonly registry;
|
|
@@ -440,8 +415,6 @@ declare class BetterAuthService<A extends AuthLike = RegisteredAuth> {
|
|
|
440
415
|
withoutCookies<T>(fn: () => Promise<T>): Promise<T>;
|
|
441
416
|
runOutsideScope<T>(fn: () => Promise<T>): Promise<T>;
|
|
442
417
|
}
|
|
443
|
-
//#endregion
|
|
444
|
-
//#region src/authorization-evaluator.d.ts
|
|
445
418
|
declare const allow: () => AuthorizationDecision;
|
|
446
419
|
declare const deny: (input: {
|
|
447
420
|
reason: string;
|
|
@@ -459,8 +432,6 @@ declare class AuthorizationEvaluator {
|
|
|
459
432
|
constructor(policies: PolicyResolver, invoker: PolicyInvoker, resolver: PrincipalResolver, scope: RequestScope);
|
|
460
433
|
evaluate(plan: RoutePlan, principal: AuthPrincipal, call: TransportCall, entry: InstanceEntry, execution: ExecutionContext, transport: string): Promise<AuthorizationDecision>;
|
|
461
434
|
}
|
|
462
|
-
//#endregion
|
|
463
|
-
//#region src/auth-guard.d.ts
|
|
464
435
|
declare class BetterAuthGuard implements CanActivate {
|
|
465
436
|
private readonly core;
|
|
466
437
|
static readonly [AUTH_ENHANCER] = "guard";
|
|
@@ -479,8 +450,6 @@ declare class GuardCore implements CanActivate {
|
|
|
479
450
|
constructor(instances: InstanceLookup, planner: RoutePlanner, transports: TransportRegistry, resolver: PrincipalResolver, evaluator: AuthorizationEvaluator, scope: RequestScope, readings: PrincipalReadings);
|
|
480
451
|
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
481
452
|
}
|
|
482
|
-
//#endregion
|
|
483
|
-
//#region src/auth-scope-interceptor.d.ts
|
|
484
453
|
declare class BetterAuthScopeInterceptor implements NestInterceptor {
|
|
485
454
|
private readonly core;
|
|
486
455
|
static readonly [AUTH_ENHANCER] = "scope";
|
|
@@ -497,13 +466,9 @@ declare class ScopeCore implements NestInterceptor {
|
|
|
497
466
|
constructor(instances: InstanceLookup, planner: RoutePlanner, transports: TransportRegistry, scope: RequestScope, readings: PrincipalReadings);
|
|
498
467
|
intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
|
|
499
468
|
}
|
|
500
|
-
//#endregion
|
|
501
|
-
//#region src/auth-module-definition.d.ts
|
|
502
469
|
declare function defineExtension<T>(definition: Omit<ExtensionDefinition<T>, typeof EXTENSION_DEFINITION>): ExtensionDefinition<T>;
|
|
503
470
|
declare function defineHttpPlatform<P extends HttpPlatform>(platform: P): P;
|
|
504
471
|
declare function defineTransport<T extends AuthTransport>(transport: T): T;
|
|
505
|
-
//#endregion
|
|
506
|
-
//#region src/auth-decorators.d.ts
|
|
507
472
|
declare const Public: () => import("@nestjs/common").CustomDecorator<typeof ACCESS_METADATA>;
|
|
508
473
|
declare const OptionalAuth: () => import("@nestjs/common").CustomDecorator<typeof ACCESS_METADATA>;
|
|
509
474
|
declare const RequireAuth: (options?: {
|
|
@@ -532,8 +497,6 @@ declare const BeforeAuth: <const P extends EndpointPath | (string & {})>(match?:
|
|
|
532
497
|
declare const AfterAuth: <const P extends EndpointPath | (string & {})>(match?: P | readonly P[] | HookPredicate, options?: HookOptions) => HookMethodDecorator<P>;
|
|
533
498
|
declare const BeforeDatabase: <E extends DatabaseHookTarget>(target: E, options?: DbHookOptions) => DbHookMethodDecorator<E, "before">;
|
|
534
499
|
declare const AfterDatabase: <E extends DatabaseHookTarget>(target: E, options?: DbHookOptions) => DbHookMethodDecorator<E, "after">;
|
|
535
|
-
//#endregion
|
|
536
|
-
//#region src/session-principal.d.ts
|
|
537
500
|
declare const SESSION_PRINCIPAL_KIND: "session";
|
|
538
501
|
declare const CurrentSession: () => ParameterDecorator;
|
|
539
502
|
declare const CurrentUser: () => ParameterDecorator;
|
|
@@ -546,27 +509,17 @@ declare const freshSession: (options?: {
|
|
|
546
509
|
declare const RequireFreshSession: (options?: {
|
|
547
510
|
maxAgeSeconds?: number;
|
|
548
511
|
}) => ClassDecorator & MethodDecorator;
|
|
549
|
-
//#endregion
|
|
550
|
-
//#region src/principal-resolver.d.ts
|
|
551
512
|
declare const definePrincipalSource: <P extends AuthPrincipalBase>(source: PrincipalSource<P>) => PrincipalSource<P>;
|
|
552
513
|
declare const authenticated: <P extends AuthPrincipalBase>(principal: P) => PrincipalResult<P>;
|
|
553
514
|
declare const absent: () => PrincipalResult<never>;
|
|
554
515
|
declare const rejected: (failure: AuthFailure) => PrincipalResult<never>;
|
|
555
|
-
//#endregion
|
|
556
|
-
//#region src/auth-exchange.d.ts
|
|
557
516
|
/** Credentialed CORS for the auth mount, using the initialized SDK trusted origins. */
|
|
558
517
|
declare function betterAuthCorsOrigin(auth: AuthLike, options?: CorsOriginOptions): (origin: string | undefined, cb: (err: Error | null, allow?: boolean) => void) => void;
|
|
559
|
-
//#endregion
|
|
560
|
-
//#region src/http-transport.d.ts
|
|
561
518
|
declare function httpTransport(): ExtensionRef<AuthTransport>;
|
|
562
|
-
//#endregion
|
|
563
|
-
//#region src/index.d.ts
|
|
564
519
|
/** Augment this public interface to register an optional principal kind. */
|
|
565
520
|
interface PrincipalKinds {
|
|
566
521
|
session: SessionPrincipal;
|
|
567
522
|
}
|
|
568
|
-
//#endregion
|
|
569
|
-
//#region src/auth-types.d.ts
|
|
570
523
|
/** Structural minimum; accepts any betterAuth() result incl. plugins and customSession (EXP-C2, EXP-A:types/). */
|
|
571
524
|
interface AuthLike {
|
|
572
525
|
handler(request: Request): Promise<Response>;
|
|
@@ -675,8 +628,6 @@ interface SessionPrincipal<S = AuthSession> extends AuthPrincipalBase {
|
|
|
675
628
|
readonly kind: "session";
|
|
676
629
|
readonly session: S;
|
|
677
630
|
}
|
|
678
|
-
//#endregion
|
|
679
|
-
//#region src/auth-contracts.d.ts
|
|
680
631
|
interface BetterAuthAppOptions {
|
|
681
632
|
/** HTTP platforms. Exactly one must support the running HTTP adapter when the app has one. Default []. */
|
|
682
633
|
platforms?: readonly ExtensionRef<HttpPlatform>[];
|
|
@@ -1649,6 +1600,5 @@ interface PolicyBootContext {
|
|
|
1649
1600
|
readonly context: AuthContextView;
|
|
1650
1601
|
readonly site: string;
|
|
1651
1602
|
}
|
|
1652
|
-
//#endregion
|
|
1653
1603
|
export { PrincipalDelegation as $, ErrorMappingOptions as $n, SESSION_PRINCIPAL_KIND as $t, DatabaseHookTarget as A, BetterAuthService as An, GetSessionWithHeaders as At, HookOptions as B, WS_CONNECTION_AUTH as Bn, UnvalidatedBody as Bt, ConformanceCase as C, defineHttpPlatform as Cn, AuthPrincipal as Ct, CookieForwardingOptions as D, allow as Dn, DatabaseHookMethod as Dt, ConformanceSkip as E, BetterAuthGuard as En, DatabaseHookData as Et, ExtensionDefinition as F, BetterAuthModule as Fn, Register as Ft, InboundAuthRequest as G, AuthErrorBody as Gn, betterAuthCorsOrigin as Gt, HttpMountOptions as H, getBetterAuthInstanceToken as Hn, WithActiveOrganization as Ht, ExtensionRef as I, GUARD_CORE as In, RegisteredAuth as It, PlatformMountContext as J, AuthFailures as Jn, definePrincipalSource as Jt, InvocationLineage as K, AuthErrorCode as Kn, absent as Kt, FastifyPlatformOptions as L, POLICY_INVOKER as Ln, RegisteredInstances as Lt, DbHookOptions as M, InstanceLookup as Mn, OrgPermissions as Mt, DefaultInstanceCheck as N, EXTENSION_DEFINITION as Nn, PrincipalKind as Nt, CookieSink as O, definePolicy as On, DatabaseHookResult as Ot, ExpressPlatformOptions as P, UPGRADE_REQUEST as Pn, PrincipalOfKind as Pt, PolicyRef as Q, BetterAuthInfrastructureError as Qn, RequireFreshSession as Qt, GuardReach as R, PRINCIPAL_RESOLVER as Rn, SessionOf as Rt, ClaimOptions as S, defineExtension as Sn, AuthOf as St, ConformanceRunner as T, BetterAuthScopeInterceptor as Tn, AuthUser as Tt, HttpPlatform as U, getBetterAuthOptionsToken as Un, PrincipalKinds as Ut, HookPredicate as V, getBetterAuthHandleToken as Vn, UserOf as Vt, HttpRequestAccessor as W, getBetterAuthServiceToken as Wn, httpTransport as Wt, PolicyBootContext as X, AuthTransportErrorPayload as Xn, CurrentSession as Xt, PlatformPrepareContext as Y, AuthGraphqlExtensions as Yn, rejected as Yt, PolicyInvoker as Z, BetterAuthConfigurationError as Zn, CurrentUser as Zt, BetterAuthRuntimeOptions as _, allOf as _n, TransportValidationContext as _t, AuthHandlerInterceptor as a, BeforeAuth as an, ProxyTrust as at, BootAdviceContext as b, definePrincipalParam as bn, AuthHookContext as bt, AuthTransport as c, ForwardAuthCookies as cn, RequirementOptions as ct, AuthorizationLimits as d, Require as dn, ScopeInit as dt, freshSession as en, getRawCause as er, PrincipalReading as et, AuthorizationPolicy as f, RequireAuth as fn, SessionOption as ft, BetterAuthModuleOptions as g, UseBetterAuth as gn, TransportKit as gt, BetterAuthModuleAsyncOptions as h, UseAuthInstance as hn, TransportCall as ht, AuthHandle as i, AfterDatabase as in, PrincipalSource as it, DbHookMethodDecorator as j, TransportRegistry as jn, IsRegistered as jt, CorsOriginOptions as k, deny as kn, EndpointPath as kt, AuthorizationContext as l, OptionalAuth as ln, ResolutionRequest as lt, BetterAuthFactoryResult as m, SkipOriginCheck as mn, StaticOptionMustBePassedToForRootAsync as mt, ApplicationRouteDescriptor as n, AcceptPrincipals as nn, isConfigurationError as nr, PrincipalResolver as nt, AuthPrincipalBase as o, BeforeDatabase as on, Requirement as ot, BetterAuthAppOptions as p, SkipDefaultRequirements as pn, SessionPrincipalOptions as pt, OriginCheckOptions as q, AuthFailure as qn, authenticated as qt, AuthContextView as r, AfterAuth as rn, isInfrastructureError as rr, PrincipalResult as rt, AuthRouteBinding as s, CurrentPrincipal as sn, RequirementExpr as st, AdvisedHandler as t, sessionPrincipal as tn, isAuthFailure as tr, PrincipalRequest as tt, AuthorizationDecision as u, Public as un, RoutePlan as ut, BetterAuthStaticOptions as v, anyOf as vn, AdminPermissions as vt, ConformanceOutcome as w, defineTransport as wn, AuthSession as wt, BrowserExposure as x, requirement as xn, AuthLike as xt, BootAdvice as y, defineInvocationParam as yn, AuthAfterHookContext as yt, HookMethodDecorator as z, SCOPE_CORE as zn, SessionPrincipal as zt };
|
|
1654
|
-
//# sourceMappingURL=auth-contracts-
|
|
1604
|
+
//# sourceMappingURL=auth-contracts-zvt8ysoZ.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-contracts-zvt8ysoZ.d.cts","names":["tokens.ACCESS_METADATA","tokens.AUTH_INSTANCE_METADATA","tokens.ACCEPT_PRINCIPALS_METADATA","tokens.SKIP_DEFAULT_REQUIREMENTS_METADATA","tokens.FORWARD_COOKIES_METADATA","tokens.SKIP_ORIGIN_CHECK_METADATA"],"sources":["../src/auth-errors.ts","../src/auth-tokens.ts","../src/auth-module.ts","../src/bridge-protocol.ts","../src/request-scope.ts","../src/origin-check.ts","../src/instance-registry.ts","../src/mount-coordinator.ts","../src/principal-readings.ts","../src/policy-resolver.ts","../src/transport-registry.ts","../src/route-planner.ts","../src/auth-service.ts","../src/authorization-evaluator.ts","../src/auth-guard.ts","../src/auth-scope-interceptor.ts","../src/auth-module-definition.ts","../src/auth-decorators.ts","../src/session-principal.ts","../src/principal-resolver.ts","../src/auth-exchange.ts","../src/http-transport.ts","../src/index.ts","../src/auth-types.ts","../src/auth-contracts.ts"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const require_auth_errors = require("./auth-errors-
|
|
2
|
-
const require_decorate = require("./decorate-
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const require_principal_readings = require("./principal-readings-
|
|
1
|
+
const require_auth_errors = require("./auth-errors-RW7hOVI-.cjs");
|
|
2
|
+
const require_decorate = require("./decorate-fMNf0caZ.cjs");
|
|
3
|
+
const require_auth_guard = require("./auth-guard-wapEh_M_.cjs");
|
|
4
|
+
const require_auth_scope_interceptor = require("./auth-scope-interceptor-Bui20-Ps.cjs");
|
|
5
|
+
const require_principal_readings = require("./principal-readings-JLNT58k0.cjs");
|
|
6
6
|
let _nestjs_common = require("@nestjs/common");
|
|
7
7
|
let node_async_hooks = require("node:async_hooks");
|
|
8
|
-
|
|
8
|
+
// src/request-scope.ts
|
|
9
9
|
const SURFACED = Symbol.for("@nestjs-kit/better-auth:surfaced");
|
|
10
10
|
function memoKey(instance, ...inputs) {
|
|
11
11
|
return JSON.stringify([instance, ...inputs]);
|
|
@@ -135,8 +135,7 @@ var RequestScope = class {
|
|
|
135
135
|
return repeated;
|
|
136
136
|
}
|
|
137
137
|
};
|
|
138
|
-
|
|
139
|
-
//#region src/auth-decorators.ts
|
|
138
|
+
// src/auth-decorators.ts
|
|
140
139
|
function append(target, key, value) {
|
|
141
140
|
Reflect.defineMetadata(key, Object.freeze([...Reflect.getOwnMetadata(key, target) ?? [], value]), target);
|
|
142
141
|
}
|
|
@@ -278,7 +277,6 @@ function databaseHook(phase, target, options) {
|
|
|
278
277
|
}
|
|
279
278
|
const BeforeDatabase = (target, options) => databaseHook("before", target, options);
|
|
280
279
|
const AfterDatabase = (target, options) => databaseHook("after", target, options);
|
|
281
|
-
//#endregion
|
|
282
280
|
Object.defineProperty(exports, "AcceptPrincipals", {
|
|
283
281
|
enumerable: true,
|
|
284
282
|
get: function() {
|
|
@@ -418,4 +416,4 @@ Object.defineProperty(exports, "requirement", {
|
|
|
418
416
|
}
|
|
419
417
|
});
|
|
420
418
|
|
|
421
|
-
//# sourceMappingURL=auth-decorators-
|
|
419
|
+
//# sourceMappingURL=auth-decorators-CJKE9wlT.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-decorators-Cu_nxWnF.cjs","names":["AsyncLocalStorage","AuthFailures","isConfigurationError","SetMetadata","applyDecorators","UseGuards","BetterAuthGuard","UseInterceptors","BetterAuthScopeInterceptor","PrincipalReadings","createParamDecorator","BetterAuthConfigurationError"],"sources":["../src/request-scope.ts","../src/auth-decorators.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type {\n AuthorizationDecision,\n InvocationLineage,\n PrincipalReading,\n PrincipalResult,\n RoutePlan,\n TransportCall,\n} from \"./auth-contracts.js\";\nimport {\n AuthFailures,\n type AuthFailure,\n isConfigurationError,\n} from \"./auth-errors.js\";\nimport type { ScopeView } from \"./bridge-protocol.js\";\n\nexport interface ScopeState {\n readonly view: ScopeView;\n readonly call?: TransportCall;\n readonly plan?: RoutePlan;\n readonly reading?: () => PrincipalReading;\n}\n/** A requirement's decision and the invocation values of the policy runs that produced an allow. */\nexport interface DecisionOutcome {\n readonly decision: AuthorizationDecision;\n readonly published: readonly ReadonlyMap<symbol, unknown>[];\n}\nexport interface RequestState {\n readonly principal: Map<string, Promise<PrincipalResult>>;\n readonly policyIo: Map<string, Promise<unknown>>;\n readonly decisions: Map<string, Promise<DecisionOutcome>>;\n readonly values: Map<symbol, unknown>;\n readonly authorizationCalls: Set<string>;\n readonly origins: Map<string, Promise<AuthFailure | null>>;\n readonly surfaced: Set<string>;\n readonly connections: Map<\n string,\n {\n value: Extract<PrincipalResult, { outcome: \"authenticated\" | \"absent\" }>;\n expiresAt: number;\n }\n >;\n}\n\nconst SURFACED = Symbol.for(\"@nestjs-kit/better-auth:surfaced\");\nexport function memoKey(\n instance: string,\n ...inputs: readonly unknown[]\n): string {\n return JSON.stringify([instance, ...inputs]);\n}\n\n/** Shared by guards and readers that have only the transport's structural lineage. */\nexport function surfacedRecord(\n key: object,\n lineage?: InvocationLineage,\n): Set<string> {\n const carrier = lineage?.carrier ?? key;\n const partition = lineage ? lineage.position.split(\":\", 1)[0]! : \"\";\n let records = Reflect.get(carrier, SURFACED) as\n | Map<string, Set<string>>\n | undefined;\n if (!records) {\n records = new Map();\n Object.defineProperty(carrier, SURFACED, { value: records });\n }\n let record = records.get(partition);\n if (!record) {\n record = new Set();\n records.set(partition, record);\n }\n return record;\n}\n\nexport class RequestScope {\n readonly #storage = new AsyncLocalStorage<ScopeState>();\n readonly #states = new WeakMap<object, RequestState>();\n readonly #valueKeys = new Map<string, Map<symbol, symbol>>();\n readonly #errorIds = new WeakMap<object, number>();\n #nextError = 0;\n\n run<T>(state: ScopeState, fn: () => T): T {\n return this.#storage.run(state, fn);\n }\n\n exit<T>(fn: () => T): T {\n return this.#storage.exit(fn);\n }\n\n current(): ScopeState | undefined {\n return this.#storage.getStore();\n }\n\n stateFor(key: object): RequestState {\n let state = this.#states.get(key);\n if (!state) {\n state = {\n principal: new Map(),\n policyIo: new Map(),\n decisions: new Map(),\n values: new Map(),\n authorizationCalls: new Set(),\n origins: new Map(),\n surfaced: new Set(),\n connections: new Map(),\n };\n this.#states.set(key, state);\n }\n return state;\n }\n\n memoPrincipal(\n call: Pick<TransportCall, \"key\" | \"connection\" | \"principalTtlMs\">,\n input: {\n instance: string;\n freshness: \"default\" | \"authoritative\";\n sourceSet: string;\n },\n compute: () => Promise<PrincipalResult>,\n ): Promise<PrincipalResult> {\n const key = memoKey(input.instance, input.freshness, input.sourceSet);\n const state = this.stateFor(call.key);\n const existing = state.principal.get(key);\n if (existing) {\n return existing;\n }\n const connection =\n call.connection &&\n input.freshness !== \"authoritative\" &&\n (call.principalTtlMs ?? 0) > 0\n ? this.stateFor(call.connection).connections\n : undefined;\n const cached = connection?.get(key);\n const promise = Promise.resolve().then(async () => {\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value;\n }\n connection?.delete(key);\n try {\n const value = await compute();\n if (value.outcome !== \"rejected\") {\n connection?.set(key, {\n value,\n expiresAt: Date.now() + (call.principalTtlMs ?? 0),\n });\n }\n return value;\n } catch (error) {\n connection?.delete(key);\n throw error;\n }\n });\n state.principal.set(key, promise);\n return promise;\n }\n\n memoPolicyIo<T>(\n request: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<T>,\n limit: number | false = 100,\n ): Promise<T> {\n const state = this.stateFor(request);\n const key = memoKey(instance, concreteKey);\n const existing = state.policyIo.get(key);\n if (existing) {\n return existing as Promise<T>;\n }\n if (\n limit !== false &&\n [...state.authorizationCalls].filter(\n (entry) => JSON.parse(entry)[0] === instance,\n ).length >= limit\n ) {\n return Promise.reject(\n AuthFailures.rejected({\n status: 429,\n reason: \"TOO_MANY_AUTHORIZATION_CHECKS\",\n }),\n );\n }\n state.authorizationCalls.add(key);\n const promise = Promise.resolve().then(compute);\n state.policyIo.set(key, promise);\n return promise;\n }\n\n memoDecision(\n invocation: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<DecisionOutcome>,\n ): Promise<DecisionOutcome> {\n const decisions = this.stateFor(invocation).decisions;\n const key = memoKey(instance, concreteKey);\n let promise = decisions.get(key);\n if (!promise) {\n promise = Promise.resolve().then(compute);\n decisions.set(key, promise);\n }\n return promise;\n }\n\n valueKey(instance: string, key: symbol): symbol {\n let keys = this.#valueKeys.get(instance);\n if (!keys) {\n keys = new Map();\n this.#valueKeys.set(instance, keys);\n }\n let namespaced = keys.get(key);\n if (!namespaced) {\n namespaced = Symbol(key.description);\n keys.set(key, namespaced);\n }\n return namespaced;\n }\n\n surfaced(\n key: object,\n error: object,\n context: { instance: string; site: string; lineage?: InvocationLineage },\n ): boolean {\n let id = this.#errorIds.get(error);\n if (!id) {\n id = ++this.#nextError;\n this.#errorIds.set(error, id);\n }\n const reason = isConfigurationError(error)\n ? memoKey(context.instance, error.code, context.site)\n : `error:${id}`;\n const carrier = surfacedRecord(key, context.lineage);\n const state =\n key === context.lineage?.carrier ? carrier : this.stateFor(key).surfaced;\n const repeated = state.has(reason) || carrier.has(reason);\n state.add(reason);\n carrier.add(reason);\n return repeated;\n }\n}\n","import {\n applyDecorators,\n createParamDecorator,\n SetMetadata,\n UseGuards,\n UseInterceptors,\n type ExecutionContext,\n} from \"@nestjs/common\";\nimport type {\n DatabaseHookTarget,\n DbHookMethodDecorator,\n DbHookOptions,\n HookMethodDecorator,\n HookOptions,\n HookPredicate,\n PolicyRef,\n PrincipalReading,\n Requirement,\n RequirementExpr,\n RequirementOptions,\n} from \"./auth-contracts.js\";\nimport type {\n EndpointPath,\n PrincipalKind,\n PrincipalOfKind,\n} from \"./auth-types.js\";\nimport { BetterAuthConfigurationError } from \"./auth-errors.js\";\nimport * as tokens from \"./auth-tokens.js\";\nimport { BetterAuthGuard } from \"./auth-guard.js\";\nimport { BetterAuthScopeInterceptor } from \"./auth-scope-interceptor.js\";\nimport { PrincipalReadings } from \"./principal-readings.js\";\nimport { RequestScope } from \"./request-scope.js\";\n\nfunction append(target: object, key: symbol, value: unknown): void {\n Reflect.defineMetadata(\n key,\n Object.freeze([...(Reflect.getOwnMetadata(key, target) ?? []), value]),\n target,\n );\n}\nexport const Public = () => SetMetadata(tokens.ACCESS_METADATA, \"public\");\nexport const OptionalAuth = () =>\n SetMetadata(tokens.ACCESS_METADATA, \"optional\");\nexport const RequireAuth = (options?: { authoritative?: boolean }) =>\n applyDecorators(\n SetMetadata(tokens.ACCESS_METADATA, \"required\"),\n SetMetadata(tokens.FRESHNESS_METADATA, options?.authoritative === true),\n );\nexport const UseAuthInstance = (name: string) =>\n SetMetadata(tokens.AUTH_INSTANCE_METADATA, name);\nexport const AcceptPrincipals = (\n ...kinds: readonly [PrincipalKind, ...PrincipalKind[]]\n) => SetMetadata(tokens.ACCEPT_PRINCIPALS_METADATA, Object.freeze([...kinds]));\nexport const SkipDefaultRequirements = () =>\n SetMetadata(tokens.SKIP_DEFAULT_REQUIREMENTS_METADATA, true);\nexport const ForwardAuthCookies = (enabled = true) =>\n SetMetadata(tokens.FORWARD_COOKIES_METADATA, enabled);\nexport const SkipOriginCheck = () =>\n SetMetadata(tokens.SKIP_ORIGIN_CHECK_METADATA, true);\nexport const UseBetterAuth = () =>\n applyDecorators(\n SetMetadata(tokens.USE_BETTER_AUTH_METADATA, true),\n UseGuards(BetterAuthGuard),\n UseInterceptors(BetterAuthScopeInterceptor),\n );\nexport function Require(\n ...requirements: readonly RequirementExpr[]\n): ClassDecorator & MethodDecorator {\n return (\n target: object,\n _key?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n for (const expression of requirements) {\n append(\n descriptor?.value ?? target,\n tokens.REQUIREMENTS_METADATA,\n expression,\n );\n }\n };\n}\nexport const anyOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ anyOf: requirements });\nexport const allOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ allOf: requirements });\nexport const requirement = <P>(\n policy: PolicyRef<P>,\n params: P,\n options?: RequirementOptions,\n): Requirement<P> => ({ policy, params, ...options });\n\nexport interface ReaderContext {\n readonly args: readonly unknown[];\n readonly readings: PrincipalReadings;\n readonly scope: RequestScope;\n readonly reading?: () => PrincipalReading;\n}\nexport function readerContext(context: ExecutionContext): ReaderContext {\n const args = context.getArgs();\n for (const arg of [args, ...args]) {\n if (\n (typeof arg !== \"object\" || arg === null) &&\n typeof arg !== \"function\"\n ) {\n continue;\n }\n const bridge = Reflect.get(arg, tokens.READER_CONTEXT) as\n | ReaderContext\n | undefined;\n if (\n bridge &&\n bridge.args.length === args.length &&\n bridge.args.every((value, index) => value === args[index]) &&\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ) {\n return bridge;\n }\n }\n // No application state is created or retained by a DI-free lineage-only reader.\n const scope = new RequestScope();\n return { args, scope, readings: new PrincipalReadings(scope) };\n}\nfunction principalParam(spec?: {\n kind: string;\n reason: string;\n project: (p: any) => unknown;\n}): ParameterDecorator {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading =\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n return bridge.readings.project(\n reading,\n { ...spec, site: input.site, project: spec?.project ?? ((p) => p) },\n input,\n );\n },\n )();\n return (target, propertyKey, index) => {\n if (propertyKey === undefined) {\n throw new BetterAuthConfigurationError(\n \"PRINCIPAL_PARAM_TARGET\",\n \"Principal parameters require a handler method\",\n );\n }\n const handler = Reflect.get(target, propertyKey);\n append(handler, tokens.PRINCIPAL_PARAMS_METADATA, {\n index,\n ...(spec ? { kind: spec.kind, reason: spec.reason } : {}),\n });\n decorator(target, propertyKey, index);\n };\n}\nexport const CurrentPrincipal = (): ParameterDecorator => principalParam();\nexport function definePrincipalParam<K extends PrincipalKind, R>(spec: {\n readonly kind: K;\n readonly reason: string;\n readonly project: (principal: PrincipalOfKind<K>) => R;\n}): () => ParameterDecorator {\n return () => principalParam(spec);\n}\nexport function defineInvocationParam(\n slot: symbol,\n spec: { readonly missing: string },\n): () => ParameterDecorator {\n return () => {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const state = bridge.scope.current();\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading = state?.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n const candidates = state?.call\n ? [state.call.invocation]\n : [input.args, ...input.args];\n for (const candidate of candidates) {\n if (\n !candidate ||\n (typeof candidate !== \"object\" && typeof candidate !== \"function\")\n ) {\n continue;\n }\n const values = Reflect.get(candidate, tokens.INVOCATION_VALUES) as\n | Map<string, Map<symbol, unknown>>\n | undefined;\n if (values?.get(reading.instance)?.has(slot)) {\n const value = values.get(reading.instance)!.get(slot);\n if (value === tokens.AMBIGUOUS_INVOCATION_VALUE) {\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"AMBIGUOUS_INVOCATION_VALUE\",\n `Requirements of this handler published different values for ${slot.description ?? \"an invocation parameter\"}`,\n {\n site: input.site,\n hint: \"Check one organization per handler, or read the organization from the route instead of the invocation parameter.\",\n },\n ),\n input,\n reading.instance,\n );\n }\n return value;\n }\n }\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"NO_INVOCATION_VALUE\",\n spec.missing,\n { site: input.site },\n ),\n input,\n reading.instance,\n );\n },\n )();\n return (target, key, index) => {\n if (key === undefined) {\n throw new BetterAuthConfigurationError(\n \"INVOCATION_PARAM_TARGET\",\n \"Invocation parameters require a handler method\",\n );\n }\n append(Reflect.get(target, key), tokens.INVOCATION_PARAMS_METADATA, {\n index,\n slot,\n missing: spec.missing,\n });\n decorator(target, key, index);\n };\n };\n}\nexport interface EndpointHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly match: string | readonly string[] | HookPredicate | undefined;\n readonly options: Readonly<HookOptions>;\n readonly method: string | symbol;\n // biome-ignore lint/complexity/noBannedTypes: Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\nexport interface DatabaseHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly target: DatabaseHookTarget;\n readonly options: Readonly<DbHookOptions>;\n readonly method: string | symbol;\n // biome-ignore lint/complexity/noBannedTypes: Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\n// biome-ignore lint/complexity/noBannedTypes: Nest handler metadata preserves the framework function identity.\nexport function readHookMetadata(handler: Function): {\n readonly hooks: readonly EndpointHookDeclaration[];\n readonly databaseHooks: readonly DatabaseHookDeclaration[];\n} {\n return {\n hooks: Reflect.getOwnMetadata(tokens.HOOK_METADATA, handler) ?? [],\n databaseHooks:\n Reflect.getOwnMetadata(tokens.DB_HOOK_METADATA, handler) ?? [],\n };\n}\nfunction hook<P extends string>(\n phase: \"before\" | \"after\",\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> {\n return (_target, method, descriptor) => {\n const handler = descriptor.value!;\n const records = readHookMetadata(handler).hooks;\n append(\n handler,\n tokens.HOOK_METADATA,\n Object.freeze({\n phase,\n match: Array.isArray(match) ? Object.freeze([...match]) : match,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: records.length,\n }),\n );\n };\n}\nexport const BeforeAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"before\", match, options);\nexport const AfterAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"after\", match, options);\nfunction databaseHook<\n E extends DatabaseHookTarget,\n Ph extends \"before\" | \"after\",\n>(phase: Ph, target: E, options?: DbHookOptions): DbHookMethodDecorator<E, Ph> {\n return (_prototype, method, descriptor) => {\n const handler = descriptor.value!;\n append(\n handler,\n tokens.DB_HOOK_METADATA,\n Object.freeze({\n phase,\n target,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: readHookMetadata(handler).databaseHooks.length,\n }),\n );\n };\n}\nexport const BeforeDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"before\"> =>\n databaseHook(\"before\", target, options);\nexport const AfterDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"after\"> => databaseHook(\"after\", target, options);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth-decorators-CJKE9wlT.cjs","names":["AsyncLocalStorage","AuthFailures","isConfigurationError","SetMetadata","applyDecorators","UseGuards","BetterAuthGuard","UseInterceptors","BetterAuthScopeInterceptor","PrincipalReadings","createParamDecorator","BetterAuthConfigurationError"],"sources":["../src/request-scope.ts","../src/auth-decorators.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type {\n AuthorizationDecision,\n InvocationLineage,\n PrincipalReading,\n PrincipalResult,\n RoutePlan,\n TransportCall,\n} from \"./auth-contracts.js\";\nimport {\n AuthFailures,\n type AuthFailure,\n isConfigurationError,\n} from \"./auth-errors.js\";\nimport type { ScopeView } from \"./bridge-protocol.js\";\n\nexport interface ScopeState {\n readonly view: ScopeView;\n readonly call?: TransportCall;\n readonly plan?: RoutePlan;\n readonly reading?: () => PrincipalReading;\n}\n/** A requirement's decision and the invocation values of the policy runs that produced an allow. */\nexport interface DecisionOutcome {\n readonly decision: AuthorizationDecision;\n readonly published: readonly ReadonlyMap<symbol, unknown>[];\n}\nexport interface RequestState {\n readonly principal: Map<string, Promise<PrincipalResult>>;\n readonly policyIo: Map<string, Promise<unknown>>;\n readonly decisions: Map<string, Promise<DecisionOutcome>>;\n readonly values: Map<symbol, unknown>;\n readonly authorizationCalls: Set<string>;\n readonly origins: Map<string, Promise<AuthFailure | null>>;\n readonly surfaced: Set<string>;\n readonly connections: Map<\n string,\n {\n value: Extract<PrincipalResult, { outcome: \"authenticated\" | \"absent\" }>;\n expiresAt: number;\n }\n >;\n}\n\nconst SURFACED = Symbol.for(\"@nestjs-kit/better-auth:surfaced\");\nexport function memoKey(\n instance: string,\n ...inputs: readonly unknown[]\n): string {\n return JSON.stringify([instance, ...inputs]);\n}\n\n/** Shared by guards and readers that have only the transport's structural lineage. */\nexport function surfacedRecord(\n key: object,\n lineage?: InvocationLineage,\n): Set<string> {\n const carrier = lineage?.carrier ?? key;\n const partition = lineage ? lineage.position.split(\":\", 1)[0]! : \"\";\n let records = Reflect.get(carrier, SURFACED) as\n | Map<string, Set<string>>\n | undefined;\n if (!records) {\n records = new Map();\n Object.defineProperty(carrier, SURFACED, { value: records });\n }\n let record = records.get(partition);\n if (!record) {\n record = new Set();\n records.set(partition, record);\n }\n return record;\n}\n\nexport class RequestScope {\n readonly #storage = new AsyncLocalStorage<ScopeState>();\n readonly #states = new WeakMap<object, RequestState>();\n readonly #valueKeys = new Map<string, Map<symbol, symbol>>();\n readonly #errorIds = new WeakMap<object, number>();\n #nextError = 0;\n\n run<T>(state: ScopeState, fn: () => T): T {\n return this.#storage.run(state, fn);\n }\n\n exit<T>(fn: () => T): T {\n return this.#storage.exit(fn);\n }\n\n current(): ScopeState | undefined {\n return this.#storage.getStore();\n }\n\n stateFor(key: object): RequestState {\n let state = this.#states.get(key);\n if (!state) {\n state = {\n principal: new Map(),\n policyIo: new Map(),\n decisions: new Map(),\n values: new Map(),\n authorizationCalls: new Set(),\n origins: new Map(),\n surfaced: new Set(),\n connections: new Map(),\n };\n this.#states.set(key, state);\n }\n return state;\n }\n\n memoPrincipal(\n call: Pick<TransportCall, \"key\" | \"connection\" | \"principalTtlMs\">,\n input: {\n instance: string;\n freshness: \"default\" | \"authoritative\";\n sourceSet: string;\n },\n compute: () => Promise<PrincipalResult>,\n ): Promise<PrincipalResult> {\n const key = memoKey(input.instance, input.freshness, input.sourceSet);\n const state = this.stateFor(call.key);\n const existing = state.principal.get(key);\n if (existing) {\n return existing;\n }\n const connection =\n call.connection &&\n input.freshness !== \"authoritative\" &&\n (call.principalTtlMs ?? 0) > 0\n ? this.stateFor(call.connection).connections\n : undefined;\n const cached = connection?.get(key);\n const promise = Promise.resolve().then(async () => {\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value;\n }\n connection?.delete(key);\n try {\n const value = await compute();\n if (value.outcome !== \"rejected\") {\n connection?.set(key, {\n value,\n expiresAt: Date.now() + (call.principalTtlMs ?? 0),\n });\n }\n return value;\n } catch (error) {\n connection?.delete(key);\n throw error;\n }\n });\n state.principal.set(key, promise);\n return promise;\n }\n\n memoPolicyIo<T>(\n request: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<T>,\n limit: number | false = 100,\n ): Promise<T> {\n const state = this.stateFor(request);\n const key = memoKey(instance, concreteKey);\n const existing = state.policyIo.get(key);\n if (existing) {\n return existing as Promise<T>;\n }\n if (\n limit !== false &&\n [...state.authorizationCalls].filter(\n (entry) => JSON.parse(entry)[0] === instance,\n ).length >= limit\n ) {\n return Promise.reject(\n AuthFailures.rejected({\n status: 429,\n reason: \"TOO_MANY_AUTHORIZATION_CHECKS\",\n }),\n );\n }\n state.authorizationCalls.add(key);\n const promise = Promise.resolve().then(compute);\n state.policyIo.set(key, promise);\n return promise;\n }\n\n memoDecision(\n invocation: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<DecisionOutcome>,\n ): Promise<DecisionOutcome> {\n const decisions = this.stateFor(invocation).decisions;\n const key = memoKey(instance, concreteKey);\n let promise = decisions.get(key);\n if (!promise) {\n promise = Promise.resolve().then(compute);\n decisions.set(key, promise);\n }\n return promise;\n }\n\n valueKey(instance: string, key: symbol): symbol {\n let keys = this.#valueKeys.get(instance);\n if (!keys) {\n keys = new Map();\n this.#valueKeys.set(instance, keys);\n }\n let namespaced = keys.get(key);\n if (!namespaced) {\n namespaced = Symbol(key.description);\n keys.set(key, namespaced);\n }\n return namespaced;\n }\n\n surfaced(\n key: object,\n error: object,\n context: { instance: string; site: string; lineage?: InvocationLineage },\n ): boolean {\n let id = this.#errorIds.get(error);\n if (!id) {\n id = ++this.#nextError;\n this.#errorIds.set(error, id);\n }\n const reason = isConfigurationError(error)\n ? memoKey(context.instance, error.code, context.site)\n : `error:${id}`;\n const carrier = surfacedRecord(key, context.lineage);\n const state =\n key === context.lineage?.carrier ? carrier : this.stateFor(key).surfaced;\n const repeated = state.has(reason) || carrier.has(reason);\n state.add(reason);\n carrier.add(reason);\n return repeated;\n }\n}\n","import {\n applyDecorators,\n createParamDecorator,\n SetMetadata,\n UseGuards,\n UseInterceptors,\n type ExecutionContext,\n} from \"@nestjs/common\";\nimport type {\n DatabaseHookTarget,\n DbHookMethodDecorator,\n DbHookOptions,\n HookMethodDecorator,\n HookOptions,\n HookPredicate,\n PolicyRef,\n PrincipalReading,\n Requirement,\n RequirementExpr,\n RequirementOptions,\n} from \"./auth-contracts.js\";\nimport type {\n EndpointPath,\n PrincipalKind,\n PrincipalOfKind,\n} from \"./auth-types.js\";\nimport { BetterAuthConfigurationError } from \"./auth-errors.js\";\nimport * as tokens from \"./auth-tokens.js\";\nimport { BetterAuthGuard } from \"./auth-guard.js\";\nimport { BetterAuthScopeInterceptor } from \"./auth-scope-interceptor.js\";\nimport { PrincipalReadings } from \"./principal-readings.js\";\nimport { RequestScope } from \"./request-scope.js\";\n\nfunction append(target: object, key: symbol, value: unknown): void {\n Reflect.defineMetadata(\n key,\n Object.freeze([...(Reflect.getOwnMetadata(key, target) ?? []), value]),\n target,\n );\n}\nexport const Public = () => SetMetadata(tokens.ACCESS_METADATA, \"public\");\nexport const OptionalAuth = () =>\n SetMetadata(tokens.ACCESS_METADATA, \"optional\");\nexport const RequireAuth = (options?: { authoritative?: boolean }) =>\n applyDecorators(\n SetMetadata(tokens.ACCESS_METADATA, \"required\"),\n SetMetadata(tokens.FRESHNESS_METADATA, options?.authoritative === true),\n );\nexport const UseAuthInstance = (name: string) =>\n SetMetadata(tokens.AUTH_INSTANCE_METADATA, name);\nexport const AcceptPrincipals = (\n ...kinds: readonly [PrincipalKind, ...PrincipalKind[]]\n) => SetMetadata(tokens.ACCEPT_PRINCIPALS_METADATA, Object.freeze([...kinds]));\nexport const SkipDefaultRequirements = () =>\n SetMetadata(tokens.SKIP_DEFAULT_REQUIREMENTS_METADATA, true);\nexport const ForwardAuthCookies = (enabled = true) =>\n SetMetadata(tokens.FORWARD_COOKIES_METADATA, enabled);\nexport const SkipOriginCheck = () =>\n SetMetadata(tokens.SKIP_ORIGIN_CHECK_METADATA, true);\nexport const UseBetterAuth = () =>\n applyDecorators(\n SetMetadata(tokens.USE_BETTER_AUTH_METADATA, true),\n UseGuards(BetterAuthGuard),\n UseInterceptors(BetterAuthScopeInterceptor),\n );\nexport function Require(\n ...requirements: readonly RequirementExpr[]\n): ClassDecorator & MethodDecorator {\n return (\n target: object,\n _key?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n for (const expression of requirements) {\n append(\n descriptor?.value ?? target,\n tokens.REQUIREMENTS_METADATA,\n expression,\n );\n }\n };\n}\nexport const anyOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ anyOf: requirements });\nexport const allOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ allOf: requirements });\nexport const requirement = <P>(\n policy: PolicyRef<P>,\n params: P,\n options?: RequirementOptions,\n): Requirement<P> => ({ policy, params, ...options });\n\nexport interface ReaderContext {\n readonly args: readonly unknown[];\n readonly readings: PrincipalReadings;\n readonly scope: RequestScope;\n readonly reading?: () => PrincipalReading;\n}\nexport function readerContext(context: ExecutionContext): ReaderContext {\n const args = context.getArgs();\n for (const arg of [args, ...args]) {\n if (\n (typeof arg !== \"object\" || arg === null) &&\n typeof arg !== \"function\"\n ) {\n continue;\n }\n const bridge = Reflect.get(arg, tokens.READER_CONTEXT) as\n | ReaderContext\n | undefined;\n if (\n bridge &&\n bridge.args.length === args.length &&\n bridge.args.every((value, index) => value === args[index]) &&\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ) {\n return bridge;\n }\n }\n // No application state is created or retained by a DI-free lineage-only reader.\n const scope = new RequestScope();\n return { args, scope, readings: new PrincipalReadings(scope) };\n}\nfunction principalParam(spec?: {\n kind: string;\n reason: string;\n project: (p: any) => unknown;\n}): ParameterDecorator {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading =\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n return bridge.readings.project(\n reading,\n { ...spec, site: input.site, project: spec?.project ?? ((p) => p) },\n input,\n );\n },\n )();\n return (target, propertyKey, index) => {\n if (propertyKey === undefined) {\n throw new BetterAuthConfigurationError(\n \"PRINCIPAL_PARAM_TARGET\",\n \"Principal parameters require a handler method\",\n );\n }\n const handler = Reflect.get(target, propertyKey);\n append(handler, tokens.PRINCIPAL_PARAMS_METADATA, {\n index,\n ...(spec ? { kind: spec.kind, reason: spec.reason } : {}),\n });\n decorator(target, propertyKey, index);\n };\n}\nexport const CurrentPrincipal = (): ParameterDecorator => principalParam();\nexport function definePrincipalParam<K extends PrincipalKind, R>(spec: {\n readonly kind: K;\n readonly reason: string;\n readonly project: (principal: PrincipalOfKind<K>) => R;\n}): () => ParameterDecorator {\n return () => principalParam(spec);\n}\nexport function defineInvocationParam(\n slot: symbol,\n spec: { readonly missing: string },\n): () => ParameterDecorator {\n return () => {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const state = bridge.scope.current();\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading = state?.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n const candidates = state?.call\n ? [state.call.invocation]\n : [input.args, ...input.args];\n for (const candidate of candidates) {\n if (\n !candidate ||\n (typeof candidate !== \"object\" && typeof candidate !== \"function\")\n ) {\n continue;\n }\n const values = Reflect.get(candidate, tokens.INVOCATION_VALUES) as\n | Map<string, Map<symbol, unknown>>\n | undefined;\n if (values?.get(reading.instance)?.has(slot)) {\n const value = values.get(reading.instance)!.get(slot);\n if (value === tokens.AMBIGUOUS_INVOCATION_VALUE) {\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"AMBIGUOUS_INVOCATION_VALUE\",\n `Requirements of this handler published different values for ${slot.description ?? \"an invocation parameter\"}`,\n {\n site: input.site,\n hint: \"Check one organization per handler, or read the organization from the route instead of the invocation parameter.\",\n },\n ),\n input,\n reading.instance,\n );\n }\n return value;\n }\n }\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"NO_INVOCATION_VALUE\",\n spec.missing,\n { site: input.site },\n ),\n input,\n reading.instance,\n );\n },\n )();\n return (target, key, index) => {\n if (key === undefined) {\n throw new BetterAuthConfigurationError(\n \"INVOCATION_PARAM_TARGET\",\n \"Invocation parameters require a handler method\",\n );\n }\n append(Reflect.get(target, key), tokens.INVOCATION_PARAMS_METADATA, {\n index,\n slot,\n missing: spec.missing,\n });\n decorator(target, key, index);\n };\n };\n}\nexport interface EndpointHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly match: string | readonly string[] | HookPredicate | undefined;\n readonly options: Readonly<HookOptions>;\n readonly method: string | symbol;\n // oxlint-disable-next-line typescript/no-unsafe-function-type -- Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\nexport interface DatabaseHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly target: DatabaseHookTarget;\n readonly options: Readonly<DbHookOptions>;\n readonly method: string | symbol;\n // oxlint-disable-next-line typescript/no-unsafe-function-type -- Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\n// oxlint-disable-next-line typescript/no-unsafe-function-type -- Nest handler metadata preserves the framework function identity.\nexport function readHookMetadata(handler: Function): {\n readonly hooks: readonly EndpointHookDeclaration[];\n readonly databaseHooks: readonly DatabaseHookDeclaration[];\n} {\n return {\n hooks: Reflect.getOwnMetadata(tokens.HOOK_METADATA, handler) ?? [],\n databaseHooks:\n Reflect.getOwnMetadata(tokens.DB_HOOK_METADATA, handler) ?? [],\n };\n}\nfunction hook<P extends string>(\n phase: \"before\" | \"after\",\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> {\n return (_target, method, descriptor) => {\n const handler = descriptor.value!;\n const records = readHookMetadata(handler).hooks;\n append(\n handler,\n tokens.HOOK_METADATA,\n Object.freeze({\n phase,\n match: Array.isArray(match) ? Object.freeze([...match]) : match,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: records.length,\n }),\n );\n };\n}\nexport const BeforeAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"before\", match, options);\nexport const AfterAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"after\", match, options);\nfunction databaseHook<\n E extends DatabaseHookTarget,\n Ph extends \"before\" | \"after\",\n>(phase: Ph, target: E, options?: DbHookOptions): DbHookMethodDecorator<E, Ph> {\n return (_prototype, method, descriptor) => {\n const handler = descriptor.value!;\n append(\n handler,\n tokens.DB_HOOK_METADATA,\n Object.freeze({\n phase,\n target,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: readHookMetadata(handler).databaseHooks.length,\n }),\n );\n };\n}\nexport const BeforeDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"before\"> =>\n databaseHook(\"before\", target, options);\nexport const AfterDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"after\"> => databaseHook(\"after\", target, options);\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { c as isConfigurationError, n as BetterAuthConfigurationError, t as AuthFailures } from "./auth-errors-
|
|
2
|
-
import { A as SKIP_ORIGIN_CHECK_METADATA, E as REQUIREMENTS_METADATA, N as USE_BETTER_AUTH_METADATA, a as ACCESS_METADATA, c as AUTH_INSTANCE_METADATA, d as FRESHNESS_METADATA, g as INVOCATION_VALUES, h as INVOCATION_PARAMS_METADATA, i as ACCEPT_PRINCIPALS_METADATA, k as SKIP_DEFAULT_REQUIREMENTS_METADATA, l as DB_HOOK_METADATA, o as AMBIGUOUS_INVOCATION_VALUE, p as HOOK_METADATA, u as FORWARD_COOKIES_METADATA, w as READER_CONTEXT, x as PRINCIPAL_PARAMS_METADATA } from "./decorate-
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
5
|
-
import { t as PrincipalReadings } from "./principal-readings-
|
|
1
|
+
import { c as isConfigurationError, n as BetterAuthConfigurationError, t as AuthFailures } from "./auth-errors-JjxGDVSt.mjs";
|
|
2
|
+
import { A as SKIP_ORIGIN_CHECK_METADATA, E as REQUIREMENTS_METADATA, N as USE_BETTER_AUTH_METADATA, a as ACCESS_METADATA, c as AUTH_INSTANCE_METADATA, d as FRESHNESS_METADATA, g as INVOCATION_VALUES, h as INVOCATION_PARAMS_METADATA, i as ACCEPT_PRINCIPALS_METADATA, k as SKIP_DEFAULT_REQUIREMENTS_METADATA, l as DB_HOOK_METADATA, o as AMBIGUOUS_INVOCATION_VALUE, p as HOOK_METADATA, u as FORWARD_COOKIES_METADATA, w as READER_CONTEXT, x as PRINCIPAL_PARAMS_METADATA } from "./decorate-bO-rBn-G.mjs";
|
|
3
|
+
import { t as BetterAuthGuard } from "./auth-guard-Da92QEK5.mjs";
|
|
4
|
+
import { t as BetterAuthScopeInterceptor } from "./auth-scope-interceptor-CvCQ52dV.mjs";
|
|
5
|
+
import { t as PrincipalReadings } from "./principal-readings-BuXTU0-2.mjs";
|
|
6
6
|
import { SetMetadata, UseGuards, UseInterceptors, applyDecorators, createParamDecorator } from "@nestjs/common";
|
|
7
7
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
|
-
|
|
8
|
+
// src/request-scope.ts
|
|
9
9
|
const SURFACED = Symbol.for("@nestjs-kit/better-auth:surfaced");
|
|
10
10
|
function memoKey(instance, ...inputs) {
|
|
11
11
|
return JSON.stringify([instance, ...inputs]);
|
|
@@ -135,8 +135,7 @@ var RequestScope = class {
|
|
|
135
135
|
return repeated;
|
|
136
136
|
}
|
|
137
137
|
};
|
|
138
|
-
|
|
139
|
-
//#region src/auth-decorators.ts
|
|
138
|
+
// src/auth-decorators.ts
|
|
140
139
|
function append(target, key, value) {
|
|
141
140
|
Reflect.defineMetadata(key, Object.freeze([...Reflect.getOwnMetadata(key, target) ?? [], value]), target);
|
|
142
141
|
}
|
|
@@ -278,7 +277,6 @@ function databaseHook(phase, target, options) {
|
|
|
278
277
|
}
|
|
279
278
|
const BeforeDatabase = (target, options) => databaseHook("before", target, options);
|
|
280
279
|
const AfterDatabase = (target, options) => databaseHook("after", target, options);
|
|
281
|
-
//#endregion
|
|
282
280
|
export { memoKey as C, RequestScope as S, anyOf as _, BeforeDatabase as a, readHookMetadata as b, OptionalAuth as c, RequireAuth as d, SkipDefaultRequirements as f, allOf as g, UseBetterAuth as h, BeforeAuth as i, Public as l, UseAuthInstance as m, AfterAuth as n, CurrentPrincipal as o, SkipOriginCheck as p, AfterDatabase as r, ForwardAuthCookies as s, AcceptPrincipals as t, Require as u, defineInvocationParam as v, requirement as x, definePrincipalParam as y };
|
|
283
281
|
|
|
284
|
-
//# sourceMappingURL=auth-decorators-
|
|
282
|
+
//# sourceMappingURL=auth-decorators-CkNkLNpU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-decorators-B1mFnGJ6.mjs","names":["tokens.ACCESS_METADATA","tokens.FRESHNESS_METADATA","tokens.AUTH_INSTANCE_METADATA","tokens.ACCEPT_PRINCIPALS_METADATA","tokens.SKIP_DEFAULT_REQUIREMENTS_METADATA","tokens.FORWARD_COOKIES_METADATA","tokens.SKIP_ORIGIN_CHECK_METADATA","tokens.USE_BETTER_AUTH_METADATA","tokens.REQUIREMENTS_METADATA","tokens.READER_CONTEXT","tokens.PRINCIPAL_PARAMS_METADATA","tokens.INVOCATION_VALUES","tokens.AMBIGUOUS_INVOCATION_VALUE","tokens.INVOCATION_PARAMS_METADATA","tokens.HOOK_METADATA","tokens.DB_HOOK_METADATA"],"sources":["../src/request-scope.ts","../src/auth-decorators.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type {\n AuthorizationDecision,\n InvocationLineage,\n PrincipalReading,\n PrincipalResult,\n RoutePlan,\n TransportCall,\n} from \"./auth-contracts.js\";\nimport {\n AuthFailures,\n type AuthFailure,\n isConfigurationError,\n} from \"./auth-errors.js\";\nimport type { ScopeView } from \"./bridge-protocol.js\";\n\nexport interface ScopeState {\n readonly view: ScopeView;\n readonly call?: TransportCall;\n readonly plan?: RoutePlan;\n readonly reading?: () => PrincipalReading;\n}\n/** A requirement's decision and the invocation values of the policy runs that produced an allow. */\nexport interface DecisionOutcome {\n readonly decision: AuthorizationDecision;\n readonly published: readonly ReadonlyMap<symbol, unknown>[];\n}\nexport interface RequestState {\n readonly principal: Map<string, Promise<PrincipalResult>>;\n readonly policyIo: Map<string, Promise<unknown>>;\n readonly decisions: Map<string, Promise<DecisionOutcome>>;\n readonly values: Map<symbol, unknown>;\n readonly authorizationCalls: Set<string>;\n readonly origins: Map<string, Promise<AuthFailure | null>>;\n readonly surfaced: Set<string>;\n readonly connections: Map<\n string,\n {\n value: Extract<PrincipalResult, { outcome: \"authenticated\" | \"absent\" }>;\n expiresAt: number;\n }\n >;\n}\n\nconst SURFACED = Symbol.for(\"@nestjs-kit/better-auth:surfaced\");\nexport function memoKey(\n instance: string,\n ...inputs: readonly unknown[]\n): string {\n return JSON.stringify([instance, ...inputs]);\n}\n\n/** Shared by guards and readers that have only the transport's structural lineage. */\nexport function surfacedRecord(\n key: object,\n lineage?: InvocationLineage,\n): Set<string> {\n const carrier = lineage?.carrier ?? key;\n const partition = lineage ? lineage.position.split(\":\", 1)[0]! : \"\";\n let records = Reflect.get(carrier, SURFACED) as\n | Map<string, Set<string>>\n | undefined;\n if (!records) {\n records = new Map();\n Object.defineProperty(carrier, SURFACED, { value: records });\n }\n let record = records.get(partition);\n if (!record) {\n record = new Set();\n records.set(partition, record);\n }\n return record;\n}\n\nexport class RequestScope {\n readonly #storage = new AsyncLocalStorage<ScopeState>();\n readonly #states = new WeakMap<object, RequestState>();\n readonly #valueKeys = new Map<string, Map<symbol, symbol>>();\n readonly #errorIds = new WeakMap<object, number>();\n #nextError = 0;\n\n run<T>(state: ScopeState, fn: () => T): T {\n return this.#storage.run(state, fn);\n }\n\n exit<T>(fn: () => T): T {\n return this.#storage.exit(fn);\n }\n\n current(): ScopeState | undefined {\n return this.#storage.getStore();\n }\n\n stateFor(key: object): RequestState {\n let state = this.#states.get(key);\n if (!state) {\n state = {\n principal: new Map(),\n policyIo: new Map(),\n decisions: new Map(),\n values: new Map(),\n authorizationCalls: new Set(),\n origins: new Map(),\n surfaced: new Set(),\n connections: new Map(),\n };\n this.#states.set(key, state);\n }\n return state;\n }\n\n memoPrincipal(\n call: Pick<TransportCall, \"key\" | \"connection\" | \"principalTtlMs\">,\n input: {\n instance: string;\n freshness: \"default\" | \"authoritative\";\n sourceSet: string;\n },\n compute: () => Promise<PrincipalResult>,\n ): Promise<PrincipalResult> {\n const key = memoKey(input.instance, input.freshness, input.sourceSet);\n const state = this.stateFor(call.key);\n const existing = state.principal.get(key);\n if (existing) {\n return existing;\n }\n const connection =\n call.connection &&\n input.freshness !== \"authoritative\" &&\n (call.principalTtlMs ?? 0) > 0\n ? this.stateFor(call.connection).connections\n : undefined;\n const cached = connection?.get(key);\n const promise = Promise.resolve().then(async () => {\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value;\n }\n connection?.delete(key);\n try {\n const value = await compute();\n if (value.outcome !== \"rejected\") {\n connection?.set(key, {\n value,\n expiresAt: Date.now() + (call.principalTtlMs ?? 0),\n });\n }\n return value;\n } catch (error) {\n connection?.delete(key);\n throw error;\n }\n });\n state.principal.set(key, promise);\n return promise;\n }\n\n memoPolicyIo<T>(\n request: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<T>,\n limit: number | false = 100,\n ): Promise<T> {\n const state = this.stateFor(request);\n const key = memoKey(instance, concreteKey);\n const existing = state.policyIo.get(key);\n if (existing) {\n return existing as Promise<T>;\n }\n if (\n limit !== false &&\n [...state.authorizationCalls].filter(\n (entry) => JSON.parse(entry)[0] === instance,\n ).length >= limit\n ) {\n return Promise.reject(\n AuthFailures.rejected({\n status: 429,\n reason: \"TOO_MANY_AUTHORIZATION_CHECKS\",\n }),\n );\n }\n state.authorizationCalls.add(key);\n const promise = Promise.resolve().then(compute);\n state.policyIo.set(key, promise);\n return promise;\n }\n\n memoDecision(\n invocation: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<DecisionOutcome>,\n ): Promise<DecisionOutcome> {\n const decisions = this.stateFor(invocation).decisions;\n const key = memoKey(instance, concreteKey);\n let promise = decisions.get(key);\n if (!promise) {\n promise = Promise.resolve().then(compute);\n decisions.set(key, promise);\n }\n return promise;\n }\n\n valueKey(instance: string, key: symbol): symbol {\n let keys = this.#valueKeys.get(instance);\n if (!keys) {\n keys = new Map();\n this.#valueKeys.set(instance, keys);\n }\n let namespaced = keys.get(key);\n if (!namespaced) {\n namespaced = Symbol(key.description);\n keys.set(key, namespaced);\n }\n return namespaced;\n }\n\n surfaced(\n key: object,\n error: object,\n context: { instance: string; site: string; lineage?: InvocationLineage },\n ): boolean {\n let id = this.#errorIds.get(error);\n if (!id) {\n id = ++this.#nextError;\n this.#errorIds.set(error, id);\n }\n const reason = isConfigurationError(error)\n ? memoKey(context.instance, error.code, context.site)\n : `error:${id}`;\n const carrier = surfacedRecord(key, context.lineage);\n const state =\n key === context.lineage?.carrier ? carrier : this.stateFor(key).surfaced;\n const repeated = state.has(reason) || carrier.has(reason);\n state.add(reason);\n carrier.add(reason);\n return repeated;\n }\n}\n","import {\n applyDecorators,\n createParamDecorator,\n SetMetadata,\n UseGuards,\n UseInterceptors,\n type ExecutionContext,\n} from \"@nestjs/common\";\nimport type {\n DatabaseHookTarget,\n DbHookMethodDecorator,\n DbHookOptions,\n HookMethodDecorator,\n HookOptions,\n HookPredicate,\n PolicyRef,\n PrincipalReading,\n Requirement,\n RequirementExpr,\n RequirementOptions,\n} from \"./auth-contracts.js\";\nimport type {\n EndpointPath,\n PrincipalKind,\n PrincipalOfKind,\n} from \"./auth-types.js\";\nimport { BetterAuthConfigurationError } from \"./auth-errors.js\";\nimport * as tokens from \"./auth-tokens.js\";\nimport { BetterAuthGuard } from \"./auth-guard.js\";\nimport { BetterAuthScopeInterceptor } from \"./auth-scope-interceptor.js\";\nimport { PrincipalReadings } from \"./principal-readings.js\";\nimport { RequestScope } from \"./request-scope.js\";\n\nfunction append(target: object, key: symbol, value: unknown): void {\n Reflect.defineMetadata(\n key,\n Object.freeze([...(Reflect.getOwnMetadata(key, target) ?? []), value]),\n target,\n );\n}\nexport const Public = () => SetMetadata(tokens.ACCESS_METADATA, \"public\");\nexport const OptionalAuth = () =>\n SetMetadata(tokens.ACCESS_METADATA, \"optional\");\nexport const RequireAuth = (options?: { authoritative?: boolean }) =>\n applyDecorators(\n SetMetadata(tokens.ACCESS_METADATA, \"required\"),\n SetMetadata(tokens.FRESHNESS_METADATA, options?.authoritative === true),\n );\nexport const UseAuthInstance = (name: string) =>\n SetMetadata(tokens.AUTH_INSTANCE_METADATA, name);\nexport const AcceptPrincipals = (\n ...kinds: readonly [PrincipalKind, ...PrincipalKind[]]\n) => SetMetadata(tokens.ACCEPT_PRINCIPALS_METADATA, Object.freeze([...kinds]));\nexport const SkipDefaultRequirements = () =>\n SetMetadata(tokens.SKIP_DEFAULT_REQUIREMENTS_METADATA, true);\nexport const ForwardAuthCookies = (enabled = true) =>\n SetMetadata(tokens.FORWARD_COOKIES_METADATA, enabled);\nexport const SkipOriginCheck = () =>\n SetMetadata(tokens.SKIP_ORIGIN_CHECK_METADATA, true);\nexport const UseBetterAuth = () =>\n applyDecorators(\n SetMetadata(tokens.USE_BETTER_AUTH_METADATA, true),\n UseGuards(BetterAuthGuard),\n UseInterceptors(BetterAuthScopeInterceptor),\n );\nexport function Require(\n ...requirements: readonly RequirementExpr[]\n): ClassDecorator & MethodDecorator {\n return (\n target: object,\n _key?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n for (const expression of requirements) {\n append(\n descriptor?.value ?? target,\n tokens.REQUIREMENTS_METADATA,\n expression,\n );\n }\n };\n}\nexport const anyOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ anyOf: requirements });\nexport const allOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ allOf: requirements });\nexport const requirement = <P>(\n policy: PolicyRef<P>,\n params: P,\n options?: RequirementOptions,\n): Requirement<P> => ({ policy, params, ...options });\n\nexport interface ReaderContext {\n readonly args: readonly unknown[];\n readonly readings: PrincipalReadings;\n readonly scope: RequestScope;\n readonly reading?: () => PrincipalReading;\n}\nexport function readerContext(context: ExecutionContext): ReaderContext {\n const args = context.getArgs();\n for (const arg of [args, ...args]) {\n if (\n (typeof arg !== \"object\" || arg === null) &&\n typeof arg !== \"function\"\n ) {\n continue;\n }\n const bridge = Reflect.get(arg, tokens.READER_CONTEXT) as\n | ReaderContext\n | undefined;\n if (\n bridge &&\n bridge.args.length === args.length &&\n bridge.args.every((value, index) => value === args[index]) &&\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ) {\n return bridge;\n }\n }\n // No application state is created or retained by a DI-free lineage-only reader.\n const scope = new RequestScope();\n return { args, scope, readings: new PrincipalReadings(scope) };\n}\nfunction principalParam(spec?: {\n kind: string;\n reason: string;\n project: (p: any) => unknown;\n}): ParameterDecorator {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading =\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n return bridge.readings.project(\n reading,\n { ...spec, site: input.site, project: spec?.project ?? ((p) => p) },\n input,\n );\n },\n )();\n return (target, propertyKey, index) => {\n if (propertyKey === undefined) {\n throw new BetterAuthConfigurationError(\n \"PRINCIPAL_PARAM_TARGET\",\n \"Principal parameters require a handler method\",\n );\n }\n const handler = Reflect.get(target, propertyKey);\n append(handler, tokens.PRINCIPAL_PARAMS_METADATA, {\n index,\n ...(spec ? { kind: spec.kind, reason: spec.reason } : {}),\n });\n decorator(target, propertyKey, index);\n };\n}\nexport const CurrentPrincipal = (): ParameterDecorator => principalParam();\nexport function definePrincipalParam<K extends PrincipalKind, R>(spec: {\n readonly kind: K;\n readonly reason: string;\n readonly project: (principal: PrincipalOfKind<K>) => R;\n}): () => ParameterDecorator {\n return () => principalParam(spec);\n}\nexport function defineInvocationParam(\n slot: symbol,\n spec: { readonly missing: string },\n): () => ParameterDecorator {\n return () => {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const state = bridge.scope.current();\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading = state?.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n const candidates = state?.call\n ? [state.call.invocation]\n : [input.args, ...input.args];\n for (const candidate of candidates) {\n if (\n !candidate ||\n (typeof candidate !== \"object\" && typeof candidate !== \"function\")\n ) {\n continue;\n }\n const values = Reflect.get(candidate, tokens.INVOCATION_VALUES) as\n | Map<string, Map<symbol, unknown>>\n | undefined;\n if (values?.get(reading.instance)?.has(slot)) {\n const value = values.get(reading.instance)!.get(slot);\n if (value === tokens.AMBIGUOUS_INVOCATION_VALUE) {\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"AMBIGUOUS_INVOCATION_VALUE\",\n `Requirements of this handler published different values for ${slot.description ?? \"an invocation parameter\"}`,\n {\n site: input.site,\n hint: \"Check one organization per handler, or read the organization from the route instead of the invocation parameter.\",\n },\n ),\n input,\n reading.instance,\n );\n }\n return value;\n }\n }\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"NO_INVOCATION_VALUE\",\n spec.missing,\n { site: input.site },\n ),\n input,\n reading.instance,\n );\n },\n )();\n return (target, key, index) => {\n if (key === undefined) {\n throw new BetterAuthConfigurationError(\n \"INVOCATION_PARAM_TARGET\",\n \"Invocation parameters require a handler method\",\n );\n }\n append(Reflect.get(target, key), tokens.INVOCATION_PARAMS_METADATA, {\n index,\n slot,\n missing: spec.missing,\n });\n decorator(target, key, index);\n };\n };\n}\nexport interface EndpointHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly match: string | readonly string[] | HookPredicate | undefined;\n readonly options: Readonly<HookOptions>;\n readonly method: string | symbol;\n // biome-ignore lint/complexity/noBannedTypes: Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\nexport interface DatabaseHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly target: DatabaseHookTarget;\n readonly options: Readonly<DbHookOptions>;\n readonly method: string | symbol;\n // biome-ignore lint/complexity/noBannedTypes: Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\n// biome-ignore lint/complexity/noBannedTypes: Nest handler metadata preserves the framework function identity.\nexport function readHookMetadata(handler: Function): {\n readonly hooks: readonly EndpointHookDeclaration[];\n readonly databaseHooks: readonly DatabaseHookDeclaration[];\n} {\n return {\n hooks: Reflect.getOwnMetadata(tokens.HOOK_METADATA, handler) ?? [],\n databaseHooks:\n Reflect.getOwnMetadata(tokens.DB_HOOK_METADATA, handler) ?? [],\n };\n}\nfunction hook<P extends string>(\n phase: \"before\" | \"after\",\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> {\n return (_target, method, descriptor) => {\n const handler = descriptor.value!;\n const records = readHookMetadata(handler).hooks;\n append(\n handler,\n tokens.HOOK_METADATA,\n Object.freeze({\n phase,\n match: Array.isArray(match) ? Object.freeze([...match]) : match,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: records.length,\n }),\n );\n };\n}\nexport const BeforeAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"before\", match, options);\nexport const AfterAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"after\", match, options);\nfunction databaseHook<\n E extends DatabaseHookTarget,\n Ph extends \"before\" | \"after\",\n>(phase: Ph, target: E, options?: DbHookOptions): DbHookMethodDecorator<E, Ph> {\n return (_prototype, method, descriptor) => {\n const handler = descriptor.value!;\n append(\n handler,\n tokens.DB_HOOK_METADATA,\n Object.freeze({\n phase,\n target,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: readHookMetadata(handler).databaseHooks.length,\n }),\n );\n };\n}\nexport const BeforeDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"before\"> =>\n databaseHook(\"before\", target, options);\nexport const AfterDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"after\"> => databaseHook(\"after\", target, options);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth-decorators-CkNkLNpU.mjs","names":["tokens.ACCESS_METADATA","tokens.FRESHNESS_METADATA","tokens.AUTH_INSTANCE_METADATA","tokens.ACCEPT_PRINCIPALS_METADATA","tokens.SKIP_DEFAULT_REQUIREMENTS_METADATA","tokens.FORWARD_COOKIES_METADATA","tokens.SKIP_ORIGIN_CHECK_METADATA","tokens.USE_BETTER_AUTH_METADATA","tokens.REQUIREMENTS_METADATA","tokens.READER_CONTEXT","tokens.PRINCIPAL_PARAMS_METADATA","tokens.INVOCATION_VALUES","tokens.AMBIGUOUS_INVOCATION_VALUE","tokens.INVOCATION_PARAMS_METADATA","tokens.HOOK_METADATA","tokens.DB_HOOK_METADATA"],"sources":["../src/request-scope.ts","../src/auth-decorators.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type {\n AuthorizationDecision,\n InvocationLineage,\n PrincipalReading,\n PrincipalResult,\n RoutePlan,\n TransportCall,\n} from \"./auth-contracts.js\";\nimport {\n AuthFailures,\n type AuthFailure,\n isConfigurationError,\n} from \"./auth-errors.js\";\nimport type { ScopeView } from \"./bridge-protocol.js\";\n\nexport interface ScopeState {\n readonly view: ScopeView;\n readonly call?: TransportCall;\n readonly plan?: RoutePlan;\n readonly reading?: () => PrincipalReading;\n}\n/** A requirement's decision and the invocation values of the policy runs that produced an allow. */\nexport interface DecisionOutcome {\n readonly decision: AuthorizationDecision;\n readonly published: readonly ReadonlyMap<symbol, unknown>[];\n}\nexport interface RequestState {\n readonly principal: Map<string, Promise<PrincipalResult>>;\n readonly policyIo: Map<string, Promise<unknown>>;\n readonly decisions: Map<string, Promise<DecisionOutcome>>;\n readonly values: Map<symbol, unknown>;\n readonly authorizationCalls: Set<string>;\n readonly origins: Map<string, Promise<AuthFailure | null>>;\n readonly surfaced: Set<string>;\n readonly connections: Map<\n string,\n {\n value: Extract<PrincipalResult, { outcome: \"authenticated\" | \"absent\" }>;\n expiresAt: number;\n }\n >;\n}\n\nconst SURFACED = Symbol.for(\"@nestjs-kit/better-auth:surfaced\");\nexport function memoKey(\n instance: string,\n ...inputs: readonly unknown[]\n): string {\n return JSON.stringify([instance, ...inputs]);\n}\n\n/** Shared by guards and readers that have only the transport's structural lineage. */\nexport function surfacedRecord(\n key: object,\n lineage?: InvocationLineage,\n): Set<string> {\n const carrier = lineage?.carrier ?? key;\n const partition = lineage ? lineage.position.split(\":\", 1)[0]! : \"\";\n let records = Reflect.get(carrier, SURFACED) as\n | Map<string, Set<string>>\n | undefined;\n if (!records) {\n records = new Map();\n Object.defineProperty(carrier, SURFACED, { value: records });\n }\n let record = records.get(partition);\n if (!record) {\n record = new Set();\n records.set(partition, record);\n }\n return record;\n}\n\nexport class RequestScope {\n readonly #storage = new AsyncLocalStorage<ScopeState>();\n readonly #states = new WeakMap<object, RequestState>();\n readonly #valueKeys = new Map<string, Map<symbol, symbol>>();\n readonly #errorIds = new WeakMap<object, number>();\n #nextError = 0;\n\n run<T>(state: ScopeState, fn: () => T): T {\n return this.#storage.run(state, fn);\n }\n\n exit<T>(fn: () => T): T {\n return this.#storage.exit(fn);\n }\n\n current(): ScopeState | undefined {\n return this.#storage.getStore();\n }\n\n stateFor(key: object): RequestState {\n let state = this.#states.get(key);\n if (!state) {\n state = {\n principal: new Map(),\n policyIo: new Map(),\n decisions: new Map(),\n values: new Map(),\n authorizationCalls: new Set(),\n origins: new Map(),\n surfaced: new Set(),\n connections: new Map(),\n };\n this.#states.set(key, state);\n }\n return state;\n }\n\n memoPrincipal(\n call: Pick<TransportCall, \"key\" | \"connection\" | \"principalTtlMs\">,\n input: {\n instance: string;\n freshness: \"default\" | \"authoritative\";\n sourceSet: string;\n },\n compute: () => Promise<PrincipalResult>,\n ): Promise<PrincipalResult> {\n const key = memoKey(input.instance, input.freshness, input.sourceSet);\n const state = this.stateFor(call.key);\n const existing = state.principal.get(key);\n if (existing) {\n return existing;\n }\n const connection =\n call.connection &&\n input.freshness !== \"authoritative\" &&\n (call.principalTtlMs ?? 0) > 0\n ? this.stateFor(call.connection).connections\n : undefined;\n const cached = connection?.get(key);\n const promise = Promise.resolve().then(async () => {\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value;\n }\n connection?.delete(key);\n try {\n const value = await compute();\n if (value.outcome !== \"rejected\") {\n connection?.set(key, {\n value,\n expiresAt: Date.now() + (call.principalTtlMs ?? 0),\n });\n }\n return value;\n } catch (error) {\n connection?.delete(key);\n throw error;\n }\n });\n state.principal.set(key, promise);\n return promise;\n }\n\n memoPolicyIo<T>(\n request: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<T>,\n limit: number | false = 100,\n ): Promise<T> {\n const state = this.stateFor(request);\n const key = memoKey(instance, concreteKey);\n const existing = state.policyIo.get(key);\n if (existing) {\n return existing as Promise<T>;\n }\n if (\n limit !== false &&\n [...state.authorizationCalls].filter(\n (entry) => JSON.parse(entry)[0] === instance,\n ).length >= limit\n ) {\n return Promise.reject(\n AuthFailures.rejected({\n status: 429,\n reason: \"TOO_MANY_AUTHORIZATION_CHECKS\",\n }),\n );\n }\n state.authorizationCalls.add(key);\n const promise = Promise.resolve().then(compute);\n state.policyIo.set(key, promise);\n return promise;\n }\n\n memoDecision(\n invocation: object,\n instance: string,\n concreteKey: string,\n compute: () => Promise<DecisionOutcome>,\n ): Promise<DecisionOutcome> {\n const decisions = this.stateFor(invocation).decisions;\n const key = memoKey(instance, concreteKey);\n let promise = decisions.get(key);\n if (!promise) {\n promise = Promise.resolve().then(compute);\n decisions.set(key, promise);\n }\n return promise;\n }\n\n valueKey(instance: string, key: symbol): symbol {\n let keys = this.#valueKeys.get(instance);\n if (!keys) {\n keys = new Map();\n this.#valueKeys.set(instance, keys);\n }\n let namespaced = keys.get(key);\n if (!namespaced) {\n namespaced = Symbol(key.description);\n keys.set(key, namespaced);\n }\n return namespaced;\n }\n\n surfaced(\n key: object,\n error: object,\n context: { instance: string; site: string; lineage?: InvocationLineage },\n ): boolean {\n let id = this.#errorIds.get(error);\n if (!id) {\n id = ++this.#nextError;\n this.#errorIds.set(error, id);\n }\n const reason = isConfigurationError(error)\n ? memoKey(context.instance, error.code, context.site)\n : `error:${id}`;\n const carrier = surfacedRecord(key, context.lineage);\n const state =\n key === context.lineage?.carrier ? carrier : this.stateFor(key).surfaced;\n const repeated = state.has(reason) || carrier.has(reason);\n state.add(reason);\n carrier.add(reason);\n return repeated;\n }\n}\n","import {\n applyDecorators,\n createParamDecorator,\n SetMetadata,\n UseGuards,\n UseInterceptors,\n type ExecutionContext,\n} from \"@nestjs/common\";\nimport type {\n DatabaseHookTarget,\n DbHookMethodDecorator,\n DbHookOptions,\n HookMethodDecorator,\n HookOptions,\n HookPredicate,\n PolicyRef,\n PrincipalReading,\n Requirement,\n RequirementExpr,\n RequirementOptions,\n} from \"./auth-contracts.js\";\nimport type {\n EndpointPath,\n PrincipalKind,\n PrincipalOfKind,\n} from \"./auth-types.js\";\nimport { BetterAuthConfigurationError } from \"./auth-errors.js\";\nimport * as tokens from \"./auth-tokens.js\";\nimport { BetterAuthGuard } from \"./auth-guard.js\";\nimport { BetterAuthScopeInterceptor } from \"./auth-scope-interceptor.js\";\nimport { PrincipalReadings } from \"./principal-readings.js\";\nimport { RequestScope } from \"./request-scope.js\";\n\nfunction append(target: object, key: symbol, value: unknown): void {\n Reflect.defineMetadata(\n key,\n Object.freeze([...(Reflect.getOwnMetadata(key, target) ?? []), value]),\n target,\n );\n}\nexport const Public = () => SetMetadata(tokens.ACCESS_METADATA, \"public\");\nexport const OptionalAuth = () =>\n SetMetadata(tokens.ACCESS_METADATA, \"optional\");\nexport const RequireAuth = (options?: { authoritative?: boolean }) =>\n applyDecorators(\n SetMetadata(tokens.ACCESS_METADATA, \"required\"),\n SetMetadata(tokens.FRESHNESS_METADATA, options?.authoritative === true),\n );\nexport const UseAuthInstance = (name: string) =>\n SetMetadata(tokens.AUTH_INSTANCE_METADATA, name);\nexport const AcceptPrincipals = (\n ...kinds: readonly [PrincipalKind, ...PrincipalKind[]]\n) => SetMetadata(tokens.ACCEPT_PRINCIPALS_METADATA, Object.freeze([...kinds]));\nexport const SkipDefaultRequirements = () =>\n SetMetadata(tokens.SKIP_DEFAULT_REQUIREMENTS_METADATA, true);\nexport const ForwardAuthCookies = (enabled = true) =>\n SetMetadata(tokens.FORWARD_COOKIES_METADATA, enabled);\nexport const SkipOriginCheck = () =>\n SetMetadata(tokens.SKIP_ORIGIN_CHECK_METADATA, true);\nexport const UseBetterAuth = () =>\n applyDecorators(\n SetMetadata(tokens.USE_BETTER_AUTH_METADATA, true),\n UseGuards(BetterAuthGuard),\n UseInterceptors(BetterAuthScopeInterceptor),\n );\nexport function Require(\n ...requirements: readonly RequirementExpr[]\n): ClassDecorator & MethodDecorator {\n return (\n target: object,\n _key?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n for (const expression of requirements) {\n append(\n descriptor?.value ?? target,\n tokens.REQUIREMENTS_METADATA,\n expression,\n );\n }\n };\n}\nexport const anyOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ anyOf: requirements });\nexport const allOf = (\n ...requirements: readonly RequirementExpr[]\n): RequirementExpr => ({ allOf: requirements });\nexport const requirement = <P>(\n policy: PolicyRef<P>,\n params: P,\n options?: RequirementOptions,\n): Requirement<P> => ({ policy, params, ...options });\n\nexport interface ReaderContext {\n readonly args: readonly unknown[];\n readonly readings: PrincipalReadings;\n readonly scope: RequestScope;\n readonly reading?: () => PrincipalReading;\n}\nexport function readerContext(context: ExecutionContext): ReaderContext {\n const args = context.getArgs();\n for (const arg of [args, ...args]) {\n if (\n (typeof arg !== \"object\" || arg === null) &&\n typeof arg !== \"function\"\n ) {\n continue;\n }\n const bridge = Reflect.get(arg, tokens.READER_CONTEXT) as\n | ReaderContext\n | undefined;\n if (\n bridge &&\n bridge.args.length === args.length &&\n bridge.args.every((value, index) => value === args[index]) &&\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ) {\n return bridge;\n }\n }\n // No application state is created or retained by a DI-free lineage-only reader.\n const scope = new RequestScope();\n return { args, scope, readings: new PrincipalReadings(scope) };\n}\nfunction principalParam(spec?: {\n kind: string;\n reason: string;\n project: (p: any) => unknown;\n}): ParameterDecorator {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading =\n bridge.reading !== undefined &&\n bridge.scope.current()?.reading === bridge.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n return bridge.readings.project(\n reading,\n { ...spec, site: input.site, project: spec?.project ?? ((p) => p) },\n input,\n );\n },\n )();\n return (target, propertyKey, index) => {\n if (propertyKey === undefined) {\n throw new BetterAuthConfigurationError(\n \"PRINCIPAL_PARAM_TARGET\",\n \"Principal parameters require a handler method\",\n );\n }\n const handler = Reflect.get(target, propertyKey);\n append(handler, tokens.PRINCIPAL_PARAMS_METADATA, {\n index,\n ...(spec ? { kind: spec.kind, reason: spec.reason } : {}),\n });\n decorator(target, propertyKey, index);\n };\n}\nexport const CurrentPrincipal = (): ParameterDecorator => principalParam();\nexport function definePrincipalParam<K extends PrincipalKind, R>(spec: {\n readonly kind: K;\n readonly reason: string;\n readonly project: (principal: PrincipalOfKind<K>) => R;\n}): () => ParameterDecorator {\n return () => principalParam(spec);\n}\nexport function defineInvocationParam(\n slot: symbol,\n spec: { readonly missing: string },\n): () => ParameterDecorator {\n return () => {\n const decorator = createParamDecorator(\n (_data: unknown, context: ExecutionContext) => {\n const bridge = readerContext(context);\n const state = bridge.scope.current();\n const input = {\n args: context.getArgs(),\n site: `${context.getClass().name}.${context.getHandler().name}`,\n };\n const reading = state?.reading\n ? bridge.readings.current()\n : bridge.readings.read(input);\n const candidates = state?.call\n ? [state.call.invocation]\n : [input.args, ...input.args];\n for (const candidate of candidates) {\n if (\n !candidate ||\n (typeof candidate !== \"object\" && typeof candidate !== \"function\")\n ) {\n continue;\n }\n const values = Reflect.get(candidate, tokens.INVOCATION_VALUES) as\n | Map<string, Map<symbol, unknown>>\n | undefined;\n if (values?.get(reading.instance)?.has(slot)) {\n const value = values.get(reading.instance)!.get(slot);\n if (value === tokens.AMBIGUOUS_INVOCATION_VALUE) {\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"AMBIGUOUS_INVOCATION_VALUE\",\n `Requirements of this handler published different values for ${slot.description ?? \"an invocation parameter\"}`,\n {\n site: input.site,\n hint: \"Check one organization per handler, or read the organization from the route instead of the invocation parameter.\",\n },\n ),\n input,\n reading.instance,\n );\n }\n return value;\n }\n }\n throw bridge.readings.deliver(\n BetterAuthConfigurationError.atRequest(\n \"NO_INVOCATION_VALUE\",\n spec.missing,\n { site: input.site },\n ),\n input,\n reading.instance,\n );\n },\n )();\n return (target, key, index) => {\n if (key === undefined) {\n throw new BetterAuthConfigurationError(\n \"INVOCATION_PARAM_TARGET\",\n \"Invocation parameters require a handler method\",\n );\n }\n append(Reflect.get(target, key), tokens.INVOCATION_PARAMS_METADATA, {\n index,\n slot,\n missing: spec.missing,\n });\n decorator(target, key, index);\n };\n };\n}\nexport interface EndpointHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly match: string | readonly string[] | HookPredicate | undefined;\n readonly options: Readonly<HookOptions>;\n readonly method: string | symbol;\n // oxlint-disable-next-line typescript/no-unsafe-function-type -- Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\nexport interface DatabaseHookDeclaration {\n readonly phase: \"before\" | \"after\";\n readonly target: DatabaseHookTarget;\n readonly options: Readonly<DbHookOptions>;\n readonly method: string | symbol;\n // oxlint-disable-next-line typescript/no-unsafe-function-type -- Nest handler metadata preserves the framework function identity.\n readonly handler: Function;\n readonly declarationOrder: number;\n}\n// oxlint-disable-next-line typescript/no-unsafe-function-type -- Nest handler metadata preserves the framework function identity.\nexport function readHookMetadata(handler: Function): {\n readonly hooks: readonly EndpointHookDeclaration[];\n readonly databaseHooks: readonly DatabaseHookDeclaration[];\n} {\n return {\n hooks: Reflect.getOwnMetadata(tokens.HOOK_METADATA, handler) ?? [],\n databaseHooks:\n Reflect.getOwnMetadata(tokens.DB_HOOK_METADATA, handler) ?? [],\n };\n}\nfunction hook<P extends string>(\n phase: \"before\" | \"after\",\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> {\n return (_target, method, descriptor) => {\n const handler = descriptor.value!;\n const records = readHookMetadata(handler).hooks;\n append(\n handler,\n tokens.HOOK_METADATA,\n Object.freeze({\n phase,\n match: Array.isArray(match) ? Object.freeze([...match]) : match,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: records.length,\n }),\n );\n };\n}\nexport const BeforeAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"before\", match, options);\nexport const AfterAuth = <const P extends EndpointPath | (string & {})>(\n match?: P | readonly P[] | HookPredicate,\n options?: HookOptions,\n): HookMethodDecorator<P> => hook(\"after\", match, options);\nfunction databaseHook<\n E extends DatabaseHookTarget,\n Ph extends \"before\" | \"after\",\n>(phase: Ph, target: E, options?: DbHookOptions): DbHookMethodDecorator<E, Ph> {\n return (_prototype, method, descriptor) => {\n const handler = descriptor.value!;\n append(\n handler,\n tokens.DB_HOOK_METADATA,\n Object.freeze({\n phase,\n target,\n options: Object.freeze({ ...options }),\n method,\n handler,\n declarationOrder: readHookMetadata(handler).databaseHooks.length,\n }),\n );\n };\n}\nexport const BeforeDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"before\"> =>\n databaseHook(\"before\", target, options);\nexport const AfterDatabase = <E extends DatabaseHookTarget>(\n target: E,\n options?: DbHookOptions,\n): DbHookMethodDecorator<E, \"after\"> => databaseHook(\"after\", target, options);\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isAPIError } from "better-auth/api";
|
|
2
|
-
|
|
2
|
+
// src/error-redactor.ts
|
|
3
3
|
/** Reading an arbitrary thrown value must not invoke another escaping fault. */
|
|
4
4
|
function readErrorProperty(value, key) {
|
|
5
5
|
if ((typeof value !== "object" || value === null) && typeof value !== "function") return;
|
|
@@ -86,8 +86,7 @@ var ErrorRedactor = class {
|
|
|
86
86
|
return error;
|
|
87
87
|
}
|
|
88
88
|
};
|
|
89
|
-
|
|
90
|
-
//#region src/auth-errors.ts
|
|
89
|
+
// src/auth-errors.ts
|
|
91
90
|
const FAILURE_BRAND = Symbol.for("@nestjs-kit/better-auth:auth-failure");
|
|
92
91
|
const INFRASTRUCTURE_BRAND = Symbol.for("@nestjs-kit/better-auth:infrastructure-error");
|
|
93
92
|
const CONFIGURATION_BRAND = Symbol.for("@nestjs-kit/better-auth:configuration-error");
|
|
@@ -295,7 +294,6 @@ function normalizeThrown(error, where, site, secrets, options) {
|
|
|
295
294
|
exposeRawCause: options?.exposeRawCause
|
|
296
295
|
});
|
|
297
296
|
}
|
|
298
|
-
//#endregion
|
|
299
297
|
export { getAPIErrorHeaders as a, isConfigurationError as c, redactForRequest as d, ErrorRedactor as f, createInfrastructureError as i, isInfrastructureError as l, BetterAuthConfigurationError as n, getRawCause as o, readErrorProperty as p, BetterAuthInfrastructureError as r, isAuthFailure as s, AuthFailures as t, normalizeThrown as u };
|
|
300
298
|
|
|
301
|
-
//# sourceMappingURL=auth-errors-
|
|
299
|
+
//# sourceMappingURL=auth-errors-JjxGDVSt.mjs.map
|