@stratal/framework 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/index.d.mts +202 -0
- package/dist/auth/index.d.mts.map +1 -0
- package/dist/auth/index.mjs +323 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/auth-context-BD2ApWg1.d.mts +38 -0
- package/dist/auth-context-BD2ApWg1.d.mts.map +1 -0
- package/dist/auth-context-CV3Ko1ew.mjs +55 -0
- package/dist/auth-context-CV3Ko1ew.mjs.map +1 -0
- package/dist/context/index.d.mts +20 -0
- package/dist/context/index.d.mts.map +1 -0
- package/dist/context/index.mjs +3 -0
- package/dist/database/index.d.mts +3 -0
- package/dist/database/index.mjs +374 -0
- package/dist/database/index.mjs.map +1 -0
- package/dist/decorate-RSane8dy.mjs +9 -0
- package/dist/decorateMetadata-CETItPez.mjs +6 -0
- package/dist/decorateParam-CcTvpNsw.mjs +8 -0
- package/dist/errors-C_KIIU1v.mjs +25 -0
- package/dist/errors-C_KIIU1v.mjs.map +1 -0
- package/dist/factory/index.d.mts +99 -0
- package/dist/factory/index.d.mts.map +1 -0
- package/dist/factory/index.mjs +138 -0
- package/dist/factory/index.mjs.map +1 -0
- package/dist/guards/{auth.guard.d.ts → index.d.mts} +7 -3
- package/dist/guards/index.d.mts.map +1 -0
- package/dist/guards/index.mjs +93 -0
- package/dist/guards/index.mjs.map +1 -0
- package/dist/index-Dlg8mNjq.d.mts +386 -0
- package/dist/index-Dlg8mNjq.d.mts.map +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +1 -0
- package/dist/rbac/index.d.mts +206 -0
- package/dist/rbac/index.d.mts.map +1 -0
- package/dist/rbac/index.mjs +346 -0
- package/dist/rbac/index.mjs.map +1 -0
- package/dist/tokens-Di1ofovy.mjs +32 -0
- package/dist/tokens-Di1ofovy.mjs.map +1 -0
- package/dist/{database/types.d.ts → types-Gjk0d2qB.d.mts} +18 -15
- package/dist/types-Gjk0d2qB.d.mts.map +1 -0
- package/package.json +25 -24
- package/dist/auth/auth.module.d.ts +0 -37
- package/dist/auth/auth.module.d.ts.map +0 -1
- package/dist/auth/auth.module.js +0 -74
- package/dist/auth/auth.module.js.map +0 -1
- package/dist/auth/auth.tokens.d.ts +0 -5
- package/dist/auth/auth.tokens.d.ts.map +0 -1
- package/dist/auth/auth.tokens.js +0 -5
- package/dist/auth/auth.tokens.js.map +0 -1
- package/dist/auth/errors/auth-errors.d.ts +0 -74
- package/dist/auth/errors/auth-errors.d.ts.map +0 -1
- package/dist/auth/errors/auth-errors.js +0 -122
- package/dist/auth/errors/auth-errors.js.map +0 -1
- package/dist/auth/errors/index.d.ts +0 -5
- package/dist/auth/errors/index.d.ts.map +0 -1
- package/dist/auth/errors/index.js +0 -5
- package/dist/auth/errors/index.js.map +0 -1
- package/dist/auth/errors/invalid-token.error.d.ts +0 -5
- package/dist/auth/errors/invalid-token.error.d.ts.map +0 -1
- package/dist/auth/errors/invalid-token.error.js +0 -7
- package/dist/auth/errors/invalid-token.error.js.map +0 -1
- package/dist/auth/errors/token-required.error.d.ts +0 -5
- package/dist/auth/errors/token-required.error.d.ts.map +0 -1
- package/dist/auth/errors/token-required.error.js +0 -7
- package/dist/auth/errors/token-required.error.js.map +0 -1
- package/dist/auth/errors/verification-failed.error.d.ts +0 -5
- package/dist/auth/errors/verification-failed.error.d.ts.map +0 -1
- package/dist/auth/errors/verification-failed.error.js +0 -7
- package/dist/auth/errors/verification-failed.error.js.map +0 -1
- package/dist/auth/index.d.ts +0 -7
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -7
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/middleware/auth-context.middleware.d.ts +0 -12
- package/dist/auth/middleware/auth-context.middleware.d.ts.map +0 -1
- package/dist/auth/middleware/auth-context.middleware.js +0 -28
- package/dist/auth/middleware/auth-context.middleware.js.map +0 -1
- package/dist/auth/middleware/index.d.ts +0 -3
- package/dist/auth/middleware/index.d.ts.map +0 -1
- package/dist/auth/middleware/index.js +0 -3
- package/dist/auth/middleware/index.js.map +0 -1
- package/dist/auth/middleware/session-verification.middleware.d.ts +0 -18
- package/dist/auth/middleware/session-verification.middleware.d.ts.map +0 -1
- package/dist/auth/middleware/session-verification.middleware.js +0 -48
- package/dist/auth/middleware/session-verification.middleware.js.map +0 -1
- package/dist/auth/services/auth.service.d.ts +0 -32
- package/dist/auth/services/auth.service.d.ts.map +0 -1
- package/dist/auth/services/auth.service.js +0 -62
- package/dist/auth/services/auth.service.js.map +0 -1
- package/dist/auth/services/index.d.ts +0 -2
- package/dist/auth/services/index.d.ts.map +0 -1
- package/dist/auth/services/index.js +0 -2
- package/dist/auth/services/index.js.map +0 -1
- package/dist/auth/utils/auth-helpers.d.ts +0 -11
- package/dist/auth/utils/auth-helpers.d.ts.map +0 -1
- package/dist/auth/utils/auth-helpers.js +0 -31
- package/dist/auth/utils/auth-helpers.js.map +0 -1
- package/dist/auth/utils/better-auth-error-handler.d.ts +0 -11
- package/dist/auth/utils/better-auth-error-handler.d.ts.map +0 -1
- package/dist/auth/utils/better-auth-error-handler.js +0 -95
- package/dist/auth/utils/better-auth-error-handler.js.map +0 -1
- package/dist/auth/utils/index.d.ts +0 -3
- package/dist/auth/utils/index.d.ts.map +0 -1
- package/dist/auth/utils/index.js +0 -3
- package/dist/auth/utils/index.js.map +0 -1
- package/dist/context/auth-context.d.ts +0 -35
- package/dist/context/auth-context.d.ts.map +0 -1
- package/dist/context/auth-context.js +0 -65
- package/dist/context/auth-context.js.map +0 -1
- package/dist/context/errors/context-not-initialized.error.d.ts +0 -5
- package/dist/context/errors/context-not-initialized.error.d.ts.map +0 -1
- package/dist/context/errors/context-not-initialized.error.js +0 -7
- package/dist/context/errors/context-not-initialized.error.js.map +0 -1
- package/dist/context/errors/index.d.ts +0 -4
- package/dist/context/errors/index.d.ts.map +0 -1
- package/dist/context/errors/index.js +0 -4
- package/dist/context/errors/index.js.map +0 -1
- package/dist/context/errors/user-not-authenticated.error.d.ts +0 -5
- package/dist/context/errors/user-not-authenticated.error.d.ts.map +0 -1
- package/dist/context/errors/user-not-authenticated.error.js +0 -7
- package/dist/context/errors/user-not-authenticated.error.js.map +0 -1
- package/dist/context/errors/user-not-authorized.error.d.ts +0 -5
- package/dist/context/errors/user-not-authorized.error.d.ts.map +0 -1
- package/dist/context/errors/user-not-authorized.error.js +0 -7
- package/dist/context/errors/user-not-authorized.error.js.map +0 -1
- package/dist/context/index.d.ts +0 -3
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -3
- package/dist/context/index.js.map +0 -1
- package/dist/database/custom-pg-types.d.ts +0 -21
- package/dist/database/custom-pg-types.d.ts.map +0 -1
- package/dist/database/custom-pg-types.js +0 -41
- package/dist/database/custom-pg-types.js.map +0 -1
- package/dist/database/database.helpers.d.ts +0 -15
- package/dist/database/database.helpers.d.ts.map +0 -1
- package/dist/database/database.helpers.js +0 -47
- package/dist/database/database.helpers.js.map +0 -1
- package/dist/database/database.module.d.ts +0 -22
- package/dist/database/database.module.d.ts.map +0 -1
- package/dist/database/database.module.js +0 -54
- package/dist/database/database.module.js.map +0 -1
- package/dist/database/database.service.d.ts +0 -18
- package/dist/database/database.service.d.ts.map +0 -1
- package/dist/database/database.service.js +0 -2
- package/dist/database/database.service.js.map +0 -1
- package/dist/database/database.tokens.d.ts +0 -7
- package/dist/database/database.tokens.d.ts.map +0 -1
- package/dist/database/database.tokens.js +0 -8
- package/dist/database/database.tokens.js.map +0 -1
- package/dist/database/decorators/inject-db.decorator.d.ts +0 -3
- package/dist/database/decorators/inject-db.decorator.d.ts.map +0 -1
- package/dist/database/decorators/inject-db.decorator.js +0 -6
- package/dist/database/decorators/inject-db.decorator.js.map +0 -1
- package/dist/database/errors/database-config.error.d.ts +0 -5
- package/dist/database/errors/database-config.error.d.ts.map +0 -1
- package/dist/database/errors/database-config.error.js +0 -8
- package/dist/database/errors/database-config.error.js.map +0 -1
- package/dist/database/errors/database-error.d.ts +0 -14
- package/dist/database/errors/database-error.d.ts.map +0 -1
- package/dist/database/errors/database-error.js +0 -20
- package/dist/database/errors/database-error.js.map +0 -1
- package/dist/database/errors/foreign-key-constraint.error.d.ts +0 -14
- package/dist/database/errors/foreign-key-constraint.error.d.ts.map +0 -1
- package/dist/database/errors/foreign-key-constraint.error.js +0 -19
- package/dist/database/errors/foreign-key-constraint.error.js.map +0 -1
- package/dist/database/errors/from-zenstack-error.d.ts +0 -22
- package/dist/database/errors/from-zenstack-error.d.ts.map +0 -1
- package/dist/database/errors/from-zenstack-error.js +0 -114
- package/dist/database/errors/from-zenstack-error.js.map +0 -1
- package/dist/database/errors/index.d.ts +0 -8
- package/dist/database/errors/index.d.ts.map +0 -1
- package/dist/database/errors/index.js +0 -8
- package/dist/database/errors/index.js.map +0 -1
- package/dist/database/errors/invalid-error-code-range.error.d.ts +0 -12
- package/dist/database/errors/invalid-error-code-range.error.d.ts.map +0 -1
- package/dist/database/errors/invalid-error-code-range.error.js +0 -14
- package/dist/database/errors/invalid-error-code-range.error.js.map +0 -1
- package/dist/database/errors/record-not-found.error.d.ts +0 -15
- package/dist/database/errors/record-not-found.error.d.ts.map +0 -1
- package/dist/database/errors/record-not-found.error.js +0 -20
- package/dist/database/errors/record-not-found.error.js.map +0 -1
- package/dist/database/errors/unique-constraint.error.d.ts +0 -15
- package/dist/database/errors/unique-constraint.error.d.ts.map +0 -1
- package/dist/database/errors/unique-constraint.error.js +0 -20
- package/dist/database/errors/unique-constraint.error.js.map +0 -1
- package/dist/database/event-types.d.ts +0 -137
- package/dist/database/event-types.d.ts.map +0 -1
- package/dist/database/event-types.js +0 -13
- package/dist/database/event-types.js.map +0 -1
- package/dist/database/i18n/en.d.ts +0 -15
- package/dist/database/i18n/en.d.ts.map +0 -1
- package/dist/database/i18n/en.js +0 -10
- package/dist/database/i18n/en.js.map +0 -1
- package/dist/database/i18n/index.d.ts +0 -2
- package/dist/database/i18n/index.d.ts.map +0 -1
- package/dist/database/i18n/index.js +0 -2
- package/dist/database/i18n/index.js.map +0 -1
- package/dist/database/index.d.ts +0 -11
- package/dist/database/index.d.ts.map +0 -1
- package/dist/database/index.js +0 -11
- package/dist/database/index.js.map +0 -1
- package/dist/database/plugins/error-handler.plugin.d.ts +0 -21
- package/dist/database/plugins/error-handler.plugin.d.ts.map +0 -1
- package/dist/database/plugins/error-handler.plugin.js +0 -24
- package/dist/database/plugins/error-handler.plugin.js.map +0 -1
- package/dist/database/plugins/event-emitter.plugin.d.ts +0 -37
- package/dist/database/plugins/event-emitter.plugin.d.ts.map +0 -1
- package/dist/database/plugins/event-emitter.plugin.js +0 -43
- package/dist/database/plugins/event-emitter.plugin.js.map +0 -1
- package/dist/database/plugins/index.d.ts +0 -4
- package/dist/database/plugins/index.d.ts.map +0 -1
- package/dist/database/plugins/index.js +0 -4
- package/dist/database/plugins/index.js.map +0 -1
- package/dist/database/plugins/schema-switcher.plugin.d.ts +0 -32
- package/dist/database/plugins/schema-switcher.plugin.d.ts.map +0 -1
- package/dist/database/plugins/schema-switcher.plugin.js +0 -27
- package/dist/database/plugins/schema-switcher.plugin.js.map +0 -1
- package/dist/database/types.d.ts.map +0 -1
- package/dist/database/types.js +0 -2
- package/dist/database/types.js.map +0 -1
- package/dist/factory/factory.d.ts +0 -56
- package/dist/factory/factory.d.ts.map +0 -1
- package/dist/factory/factory.js +0 -86
- package/dist/factory/factory.js.map +0 -1
- package/dist/factory/index.d.ts +0 -3
- package/dist/factory/index.d.ts.map +0 -1
- package/dist/factory/index.js +0 -3
- package/dist/factory/index.js.map +0 -1
- package/dist/factory/sequence.d.ts +0 -38
- package/dist/factory/sequence.d.ts.map +0 -1
- package/dist/factory/sequence.js +0 -54
- package/dist/factory/sequence.js.map +0 -1
- package/dist/guards/auth.guard.d.ts.map +0 -1
- package/dist/guards/auth.guard.js +0 -99
- package/dist/guards/auth.guard.js.map +0 -1
- package/dist/guards/index.d.ts +0 -3
- package/dist/guards/index.d.ts.map +0 -1
- package/dist/guards/index.js +0 -5
- package/dist/guards/index.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/rbac/adapters/custom-zenstack-adapter.d.ts +0 -61
- package/dist/rbac/adapters/custom-zenstack-adapter.d.ts.map +0 -1
- package/dist/rbac/adapters/custom-zenstack-adapter.js +0 -159
- package/dist/rbac/adapters/custom-zenstack-adapter.js.map +0 -1
- package/dist/rbac/adapters/index.d.ts +0 -2
- package/dist/rbac/adapters/index.d.ts.map +0 -1
- package/dist/rbac/adapters/index.js +0 -2
- package/dist/rbac/adapters/index.js.map +0 -1
- package/dist/rbac/constants.d.ts +0 -8
- package/dist/rbac/constants.d.ts.map +0 -1
- package/dist/rbac/constants.js +0 -8
- package/dist/rbac/constants.js.map +0 -1
- package/dist/rbac/errors/index.d.ts +0 -2
- package/dist/rbac/errors/index.d.ts.map +0 -1
- package/dist/rbac/errors/index.js +0 -2
- package/dist/rbac/errors/index.js.map +0 -1
- package/dist/rbac/errors/insufficient-permissions.error.d.ts +0 -14
- package/dist/rbac/errors/insufficient-permissions.error.d.ts.map +0 -1
- package/dist/rbac/errors/insufficient-permissions.error.js +0 -19
- package/dist/rbac/errors/insufficient-permissions.error.js.map +0 -1
- package/dist/rbac/index.d.ts +0 -9
- package/dist/rbac/index.d.ts.map +0 -1
- package/dist/rbac/index.js +0 -8
- package/dist/rbac/index.js.map +0 -1
- package/dist/rbac/rbac.module.d.ts +0 -26
- package/dist/rbac/rbac.module.d.ts.map +0 -1
- package/dist/rbac/rbac.module.js +0 -62
- package/dist/rbac/rbac.module.js.map +0 -1
- package/dist/rbac/services/casbin-enforcer.service.d.ts +0 -37
- package/dist/rbac/services/casbin-enforcer.service.d.ts.map +0 -1
- package/dist/rbac/services/casbin-enforcer.service.js +0 -86
- package/dist/rbac/services/casbin-enforcer.service.js.map +0 -1
- package/dist/rbac/services/casbin.service.d.ts +0 -37
- package/dist/rbac/services/casbin.service.d.ts.map +0 -1
- package/dist/rbac/services/casbin.service.js +0 -174
- package/dist/rbac/services/casbin.service.js.map +0 -1
- package/dist/rbac/services/index.d.ts +0 -3
- package/dist/rbac/services/index.d.ts.map +0 -1
- package/dist/rbac/services/index.js +0 -3
- package/dist/rbac/services/index.js.map +0 -1
- package/dist/rbac/tokens.d.ts +0 -10
- package/dist/rbac/tokens.d.ts.map +0 -1
- package/dist/rbac/tokens.js +0 -10
- package/dist/rbac/tokens.js.map +0 -1
- package/dist/rbac/types.d.ts +0 -12
- package/dist/rbac/types.d.ts.map +0 -1
- package/dist/rbac/types.js +0 -2
- package/dist/rbac/types.js.map +0 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { O as DatabaseService } from "../index-Dlg8mNjq.mjs";
|
|
2
|
+
import { Faker } from "@faker-js/faker";
|
|
3
|
+
|
|
4
|
+
//#region src/factory/factory.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Factory
|
|
7
|
+
*
|
|
8
|
+
* Abstract base class for creating test data.
|
|
9
|
+
* Integrates with Faker.js for data generation.
|
|
10
|
+
*
|
|
11
|
+
* @example Define a factory
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { Factory } from '@stratal/framework/factory'
|
|
14
|
+
* import type { User, UserCreateInput } from '@your-app/db'
|
|
15
|
+
*
|
|
16
|
+
* export class UserFactory extends Factory<User, UserCreateInput> {
|
|
17
|
+
* protected model = 'user'
|
|
18
|
+
*
|
|
19
|
+
* protected definition(): UserCreateInput {
|
|
20
|
+
* return {
|
|
21
|
+
* email: this.faker.internet.email(),
|
|
22
|
+
* firstName: this.faker.person.firstName(),
|
|
23
|
+
* lastName: this.faker.person.lastName(),
|
|
24
|
+
* emailVerified: true,
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* admin() {
|
|
29
|
+
* return this.state(attrs => ({ ...attrs, role: 'admin' }))
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example Usage
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const user = await new UserFactory().create(ctx.db)
|
|
37
|
+
* const admin = await new UserFactory().admin().create(ctx.db)
|
|
38
|
+
* const users = await new UserFactory().count(10).createManyAndReturn(ctx.db)
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
declare abstract class Factory<TModel, TCreateInput> {
|
|
42
|
+
protected readonly faker: Faker;
|
|
43
|
+
protected abstract model: string;
|
|
44
|
+
protected abstract definition(): TCreateInput;
|
|
45
|
+
private states;
|
|
46
|
+
private _count;
|
|
47
|
+
state(modifier: (attrs: TCreateInput) => Partial<TCreateInput>): this;
|
|
48
|
+
count(n: number): this;
|
|
49
|
+
make(): TCreateInput;
|
|
50
|
+
makeMany(count?: number): TCreateInput[];
|
|
51
|
+
create(db: DatabaseService): Promise<TModel>;
|
|
52
|
+
createMany(db: DatabaseService, count?: number): Promise<{
|
|
53
|
+
count: number;
|
|
54
|
+
}>;
|
|
55
|
+
createManyAndReturn(db: DatabaseService, count?: number): Promise<TModel[]>;
|
|
56
|
+
protected clone(): this;
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/factory/sequence.d.ts
|
|
60
|
+
/**
|
|
61
|
+
* Sequence
|
|
62
|
+
*
|
|
63
|
+
* Auto-incrementing sequence generator for creating unique values.
|
|
64
|
+
*
|
|
65
|
+
* @example Basic usage
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const emailSeq = new Sequence((n) => `user${n}@example.com`)
|
|
68
|
+
*
|
|
69
|
+
* emailSeq.next() // 'user1@example.com'
|
|
70
|
+
* emailSeq.next() // 'user2@example.com'
|
|
71
|
+
* emailSeq.reset()
|
|
72
|
+
* emailSeq.next() // 'user1@example.com'
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @example With factory
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const orderSeq = new Sequence((n) => `ORD-${String(n).padStart(6, '0')}`)
|
|
78
|
+
*
|
|
79
|
+
* export class OrderFactory extends Factory<Order, OrderCreateInput> {
|
|
80
|
+
* protected definition() {
|
|
81
|
+
* return {
|
|
82
|
+
* orderNumber: orderSeq.next(),
|
|
83
|
+
* // ...
|
|
84
|
+
* }
|
|
85
|
+
* }
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
declare class Sequence<T = number> {
|
|
90
|
+
private readonly generator?;
|
|
91
|
+
private current;
|
|
92
|
+
constructor(generator?: ((n: number) => T) | undefined);
|
|
93
|
+
next(): T;
|
|
94
|
+
peek(): T;
|
|
95
|
+
reset(): void;
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { Factory, Sequence };
|
|
99
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/factory/factory.ts","../../src/factory/sequence.ts"],"mappings":";;;;;;AAuCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAsB,OAAA;EAAA,mBACD,KAAA,EAAO,KAAA;EAAA,mBACP,KAAA;EAAA,mBACA,UAAA,CAAA,GAAc,YAAA;EAAA,QAEzB,MAAA;EAAA,QACA,MAAA;EAER,KAAA,CAAM,QAAA,GAAW,KAAA,EAAO,YAAA,KAAiB,OAAA,CAAQ,YAAA;EAMjD,KAAA,CAAM,CAAA;EAMN,IAAA,CAAA,GAAQ,YAAA;EAQR,QAAA,CAAS,KAAA,YAAiB,YAAA;EAKpB,MAAA,CAAO,EAAA,EAAI,eAAA,GAAkB,OAAA,CAAQ,MAAA;EAMrC,UAAA,CAAW,EAAA,EAAI,eAAA,EAAiB,KAAA,YAAiB,OAAA;IAAU,KAAA;EAAA;EAM3D,mBAAA,CAAoB,EAAA,EAAI,eAAA,EAAiB,KAAA,YAAiB,OAAA,CAAQ,MAAA;EAAA,UAM9D,KAAA,CAAA;AAAA;;;;;;;AAnDZ;;;;;;;;;;;;;;;;;;;;;;;;;cCVa,QAAA;EAAA,iBAGkB,SAAA;EAAA,QAFrB,OAAA;cAEqB,SAAA,KAAa,CAAA,aAAc,CAAA;EAExD,IAAA,CAAA,GAAQ,CAAA;EAQR,IAAA,CAAA,GAAQ,CAAA;EAQR,KAAA,CAAA;AAAA"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { faker } from "@faker-js/faker";
|
|
2
|
+
//#region src/factory/factory.ts
|
|
3
|
+
/**
|
|
4
|
+
* Factory
|
|
5
|
+
*
|
|
6
|
+
* Abstract base class for creating test data.
|
|
7
|
+
* Integrates with Faker.js for data generation.
|
|
8
|
+
*
|
|
9
|
+
* @example Define a factory
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { Factory } from '@stratal/framework/factory'
|
|
12
|
+
* import type { User, UserCreateInput } from '@your-app/db'
|
|
13
|
+
*
|
|
14
|
+
* export class UserFactory extends Factory<User, UserCreateInput> {
|
|
15
|
+
* protected model = 'user'
|
|
16
|
+
*
|
|
17
|
+
* protected definition(): UserCreateInput {
|
|
18
|
+
* return {
|
|
19
|
+
* email: this.faker.internet.email(),
|
|
20
|
+
* firstName: this.faker.person.firstName(),
|
|
21
|
+
* lastName: this.faker.person.lastName(),
|
|
22
|
+
* emailVerified: true,
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* admin() {
|
|
27
|
+
* return this.state(attrs => ({ ...attrs, role: 'admin' }))
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example Usage
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const user = await new UserFactory().create(ctx.db)
|
|
35
|
+
* const admin = await new UserFactory().admin().create(ctx.db)
|
|
36
|
+
* const users = await new UserFactory().count(10).createManyAndReturn(ctx.db)
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
var Factory = class {
|
|
40
|
+
faker = faker;
|
|
41
|
+
states = [];
|
|
42
|
+
_count = 1;
|
|
43
|
+
state(modifier) {
|
|
44
|
+
const clone = this.clone();
|
|
45
|
+
clone.states.push(modifier);
|
|
46
|
+
return clone;
|
|
47
|
+
}
|
|
48
|
+
count(n) {
|
|
49
|
+
const clone = this.clone();
|
|
50
|
+
clone._count = n;
|
|
51
|
+
return clone;
|
|
52
|
+
}
|
|
53
|
+
make() {
|
|
54
|
+
let attrs = this.definition();
|
|
55
|
+
for (const modifier of this.states) attrs = {
|
|
56
|
+
...attrs,
|
|
57
|
+
...modifier(attrs)
|
|
58
|
+
};
|
|
59
|
+
return attrs;
|
|
60
|
+
}
|
|
61
|
+
makeMany(count) {
|
|
62
|
+
const n = count ?? this._count;
|
|
63
|
+
return Array.from({ length: n }, () => this.make());
|
|
64
|
+
}
|
|
65
|
+
async create(db) {
|
|
66
|
+
const data = this.make();
|
|
67
|
+
return db[this.model].create({ data });
|
|
68
|
+
}
|
|
69
|
+
async createMany(db, count) {
|
|
70
|
+
const data = this.makeMany(count);
|
|
71
|
+
return db[this.model].createMany({ data });
|
|
72
|
+
}
|
|
73
|
+
async createManyAndReturn(db, count) {
|
|
74
|
+
const data = this.makeMany(count);
|
|
75
|
+
return db[this.model].createManyAndReturn({ data });
|
|
76
|
+
}
|
|
77
|
+
clone() {
|
|
78
|
+
const FactoryClass = this.constructor;
|
|
79
|
+
const clone = new FactoryClass();
|
|
80
|
+
clone.states = [...this.states];
|
|
81
|
+
clone._count = this._count;
|
|
82
|
+
return clone;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
//#endregion
|
|
86
|
+
//#region src/factory/sequence.ts
|
|
87
|
+
/**
|
|
88
|
+
* Sequence
|
|
89
|
+
*
|
|
90
|
+
* Auto-incrementing sequence generator for creating unique values.
|
|
91
|
+
*
|
|
92
|
+
* @example Basic usage
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const emailSeq = new Sequence((n) => `user${n}@example.com`)
|
|
95
|
+
*
|
|
96
|
+
* emailSeq.next() // 'user1@example.com'
|
|
97
|
+
* emailSeq.next() // 'user2@example.com'
|
|
98
|
+
* emailSeq.reset()
|
|
99
|
+
* emailSeq.next() // 'user1@example.com'
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @example With factory
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const orderSeq = new Sequence((n) => `ORD-${String(n).padStart(6, '0')}`)
|
|
105
|
+
*
|
|
106
|
+
* export class OrderFactory extends Factory<Order, OrderCreateInput> {
|
|
107
|
+
* protected definition() {
|
|
108
|
+
* return {
|
|
109
|
+
* orderNumber: orderSeq.next(),
|
|
110
|
+
* // ...
|
|
111
|
+
* }
|
|
112
|
+
* }
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
var Sequence = class {
|
|
117
|
+
current = 0;
|
|
118
|
+
constructor(generator) {
|
|
119
|
+
this.generator = generator;
|
|
120
|
+
}
|
|
121
|
+
next() {
|
|
122
|
+
this.current++;
|
|
123
|
+
if (this.generator) return this.generator(this.current);
|
|
124
|
+
return this.current;
|
|
125
|
+
}
|
|
126
|
+
peek() {
|
|
127
|
+
const value = this.current + 1;
|
|
128
|
+
if (this.generator) return this.generator(value);
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
reset() {
|
|
132
|
+
this.current = 0;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
//#endregion
|
|
136
|
+
export { Factory, Sequence };
|
|
137
|
+
|
|
138
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/factory/factory.ts","../../src/factory/sequence.ts"],"sourcesContent":["import { faker, type Faker } from '@faker-js/faker'\nimport type { DatabaseService } from '../database'\n\n/**\n * Factory\n *\n * Abstract base class for creating test data.\n * Integrates with Faker.js for data generation.\n *\n * @example Define a factory\n * ```typescript\n * import { Factory } from '@stratal/framework/factory'\n * import type { User, UserCreateInput } from '@your-app/db'\n *\n * export class UserFactory extends Factory<User, UserCreateInput> {\n * protected model = 'user'\n *\n * protected definition(): UserCreateInput {\n * return {\n * email: this.faker.internet.email(),\n * firstName: this.faker.person.firstName(),\n * lastName: this.faker.person.lastName(),\n * emailVerified: true,\n * }\n * }\n *\n * admin() {\n * return this.state(attrs => ({ ...attrs, role: 'admin' }))\n * }\n * }\n * ```\n *\n * @example Usage\n * ```typescript\n * const user = await new UserFactory().create(ctx.db)\n * const admin = await new UserFactory().admin().create(ctx.db)\n * const users = await new UserFactory().count(10).createManyAndReturn(ctx.db)\n * ```\n */\nexport abstract class Factory<TModel, TCreateInput> {\n protected readonly faker: Faker = faker\n protected abstract model: string\n protected abstract definition(): TCreateInput\n\n private states: ((attrs: TCreateInput) => Partial<TCreateInput>)[] = []\n private _count = 1\n\n state(modifier: (attrs: TCreateInput) => Partial<TCreateInput>): this {\n const clone = this.clone()\n clone.states.push(modifier)\n return clone\n }\n\n count(n: number): this {\n const clone = this.clone()\n clone._count = n\n return clone\n }\n\n make(): TCreateInput {\n let attrs = this.definition()\n for (const modifier of this.states) {\n attrs = { ...attrs, ...modifier(attrs) }\n }\n return attrs\n }\n\n makeMany(count?: number): TCreateInput[] {\n const n = count ?? this._count\n return Array.from({ length: n }, () => this.make())\n }\n\n async create(db: DatabaseService): Promise<TModel> {\n const data = this.make()\n const model = (db as unknown as Record<string, { create: (args: { data: TCreateInput }) => Promise<TModel> }>)[this.model]\n return model.create({ data })\n }\n\n async createMany(db: DatabaseService, count?: number): Promise<{ count: number }> {\n const data = this.makeMany(count)\n const model = (db as unknown as Record<string, { createMany: (args: { data: TCreateInput[] }) => Promise<{ count: number }> }>)[this.model]\n return model.createMany({ data })\n }\n\n async createManyAndReturn(db: DatabaseService, count?: number): Promise<TModel[]> {\n const data = this.makeMany(count)\n const model = (db as unknown as Record<string, { createManyAndReturn: (args: { data: TCreateInput[] }) => Promise<TModel[]> }>)[this.model]\n return model.createManyAndReturn({ data })\n }\n\n protected clone(): this {\n const FactoryClass = this.constructor as new () => this\n const clone = new FactoryClass()\n clone.states = [...this.states]\n clone._count = this._count\n return clone\n }\n}\n","/**\n * Sequence\n *\n * Auto-incrementing sequence generator for creating unique values.\n *\n * @example Basic usage\n * ```typescript\n * const emailSeq = new Sequence((n) => `user${n}@example.com`)\n *\n * emailSeq.next() // 'user1@example.com'\n * emailSeq.next() // 'user2@example.com'\n * emailSeq.reset()\n * emailSeq.next() // 'user1@example.com'\n * ```\n *\n * @example With factory\n * ```typescript\n * const orderSeq = new Sequence((n) => `ORD-${String(n).padStart(6, '0')}`)\n *\n * export class OrderFactory extends Factory<Order, OrderCreateInput> {\n * protected definition() {\n * return {\n * orderNumber: orderSeq.next(),\n * // ...\n * }\n * }\n * }\n * ```\n */\nexport class Sequence<T = number> {\n private current = 0\n\n constructor(private readonly generator?: (n: number) => T) {}\n\n next(): T {\n this.current++\n if (this.generator) {\n return this.generator(this.current)\n }\n return this.current as T\n }\n\n peek(): T {\n const value = this.current + 1\n if (this.generator) {\n return this.generator(value)\n }\n return value as T\n }\n\n reset(): void {\n this.current = 0\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,IAAsB,UAAtB,MAAoD;CAClD,QAAkC;CAIlC,SAAqE,EAAE;CACvE,SAAiB;CAEjB,MAAM,UAAgE;EACpE,MAAM,QAAQ,KAAK,OAAO;AAC1B,QAAM,OAAO,KAAK,SAAS;AAC3B,SAAO;;CAGT,MAAM,GAAiB;EACrB,MAAM,QAAQ,KAAK,OAAO;AAC1B,QAAM,SAAS;AACf,SAAO;;CAGT,OAAqB;EACnB,IAAI,QAAQ,KAAK,YAAY;AAC7B,OAAK,MAAM,YAAY,KAAK,OAC1B,SAAQ;GAAE,GAAG;GAAO,GAAG,SAAS,MAAM;GAAE;AAE1C,SAAO;;CAGT,SAAS,OAAgC;EACvC,MAAM,IAAI,SAAS,KAAK;AACxB,SAAO,MAAM,KAAK,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAC;;CAGrD,MAAM,OAAO,IAAsC;EACjD,MAAM,OAAO,KAAK,MAAM;AAExB,SADe,GAAgG,KAAK,OACvG,OAAO,EAAE,MAAM,CAAC;;CAG/B,MAAM,WAAW,IAAqB,OAA4C;EAChF,MAAM,OAAO,KAAK,SAAS,MAAM;AAEjC,SADe,GAAiH,KAAK,OACxH,WAAW,EAAE,MAAM,CAAC;;CAGnC,MAAM,oBAAoB,IAAqB,OAAmC;EAChF,MAAM,OAAO,KAAK,SAAS,MAAM;AAEjC,SADe,GAAiH,KAAK,OACxH,oBAAoB,EAAE,MAAM,CAAC;;CAG5C,QAAwB;EACtB,MAAM,eAAe,KAAK;EAC1B,MAAM,QAAQ,IAAI,cAAc;AAChC,QAAM,SAAS,CAAC,GAAG,KAAK,OAAO;AAC/B,QAAM,SAAS,KAAK;AACpB,SAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClEX,IAAa,WAAb,MAAkC;CAChC,UAAkB;CAElB,YAAY,WAA+C;AAA9B,OAAA,YAAA;;CAE7B,OAAU;AACR,OAAK;AACL,MAAI,KAAK,UACP,QAAO,KAAK,UAAU,KAAK,QAAQ;AAErC,SAAO,KAAK;;CAGd,OAAU;EACR,MAAM,QAAQ,KAAK,UAAU;AAC7B,MAAI,KAAK,UACP,QAAO,KAAK,UAAU,MAAM;AAE9B,SAAO;;CAGT,QAAc;AACZ,OAAK,UAAU"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AuthGuardOptions, AuthGuardOptions as AuthGuardOptions$1, CanActivate, GUARD_METADATA_KEY, Guard, GuardClass, GuardClass as GuardClass$1, GuardExecutionService, GuardMetadata, UseGuards, getControllerGuards, getMethodGuards } from "stratal/guards";
|
|
2
|
+
|
|
3
|
+
//#region src/guards/auth.guard.d.ts
|
|
2
4
|
/**
|
|
3
5
|
* AuthGuard Factory
|
|
4
6
|
*
|
|
@@ -29,5 +31,7 @@ import type { AuthGuardOptions, GuardClass } from 'stratal/guards';
|
|
|
29
31
|
* export class StudentsController { }
|
|
30
32
|
* ```
|
|
31
33
|
*/
|
|
32
|
-
|
|
33
|
-
//#
|
|
34
|
+
declare function AuthGuard(options?: AuthGuardOptions$1): GuardClass$1;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { AuthGuard, type AuthGuardOptions, type CanActivate, GUARD_METADATA_KEY, type Guard, type GuardClass, GuardExecutionService, type GuardMetadata, UseGuards, getControllerGuards, getMethodGuards };
|
|
37
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/guards/auth.guard.ts"],"mappings":";;;;;AAyCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,CAAU,OAAA,GAAU,kBAAA,GAAmB,YAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { n as UserNotAuthenticatedError } from "../errors-C_KIIU1v.mjs";
|
|
2
|
+
import { t as __decorate } from "../decorate-RSane8dy.mjs";
|
|
3
|
+
import { t as __decorateMetadata } from "../decorateMetadata-CETItPez.mjs";
|
|
4
|
+
import { t as __decorateParam } from "../decorateParam-CcTvpNsw.mjs";
|
|
5
|
+
import { n as InsufficientPermissionsError, t as RBAC_TOKENS } from "../tokens-Di1ofovy.mjs";
|
|
6
|
+
import { DI_TOKENS, Transient } from "stratal/di";
|
|
7
|
+
import { inject } from "tsyringe";
|
|
8
|
+
import { GUARD_METADATA_KEY, GuardExecutionService, UseGuards, getControllerGuards, getMethodGuards } from "stratal/guards";
|
|
9
|
+
import { LOGGER_TOKENS } from "stratal/logger";
|
|
10
|
+
//#region src/guards/auth.guard.ts
|
|
11
|
+
/**
|
|
12
|
+
* AuthGuard Factory
|
|
13
|
+
*
|
|
14
|
+
* Creates a guard class that enforces authentication and optional authorization.
|
|
15
|
+
*
|
|
16
|
+
* **Authentication (no scopes):**
|
|
17
|
+
* - Checks if user is authenticated via AuthContext.isAuthenticated()
|
|
18
|
+
* - Throws UserNotAuthenticatedError (401) if not authenticated
|
|
19
|
+
*
|
|
20
|
+
* **Authorization (with scopes):**
|
|
21
|
+
* - First verifies authentication
|
|
22
|
+
* - Then checks permissions via CasbinService
|
|
23
|
+
* - Throws InsufficientPermissionsError (403) if unauthorized
|
|
24
|
+
*
|
|
25
|
+
* @param options - Configuration options
|
|
26
|
+
* @param options.scopes - Required permissions for authorization
|
|
27
|
+
* @returns Guard class for use with @UseGuards decorator
|
|
28
|
+
*
|
|
29
|
+
* @example Authentication only
|
|
30
|
+
* ```typescript
|
|
31
|
+
* @UseGuards(AuthGuard())
|
|
32
|
+
* export class ProfileController { }
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example Authentication with permissions
|
|
36
|
+
* ```typescript
|
|
37
|
+
* @UseGuards(AuthGuard({ scopes: ['students:read'] }))
|
|
38
|
+
* export class StudentsController { }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
function AuthGuard(options) {
|
|
42
|
+
const scopes = options?.scopes;
|
|
43
|
+
let ConfiguredAuthGuard = class ConfiguredAuthGuard {
|
|
44
|
+
constructor(authContext, logger, casbinService) {
|
|
45
|
+
this.authContext = authContext;
|
|
46
|
+
this.logger = logger;
|
|
47
|
+
this.casbinService = casbinService;
|
|
48
|
+
}
|
|
49
|
+
async canActivate(context) {
|
|
50
|
+
if (!this.authContext.isAuthenticated()) {
|
|
51
|
+
this.logger.debug("Auth guard: User not authenticated");
|
|
52
|
+
throw new UserNotAuthenticatedError();
|
|
53
|
+
}
|
|
54
|
+
if (!scopes || scopes.length === 0) {
|
|
55
|
+
this.logger.debug("Auth guard: Authentication passed (no scopes required)");
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
const userId = this.authContext.getUserId();
|
|
59
|
+
if (!userId) {
|
|
60
|
+
this.logger.debug("Auth guard: No user ID in context");
|
|
61
|
+
throw new InsufficientPermissionsError(scopes, void 0);
|
|
62
|
+
}
|
|
63
|
+
const httpMethod = context.c.req.method.toLowerCase();
|
|
64
|
+
if (this.casbinService) {
|
|
65
|
+
const hasPermission = await this.casbinService.hasAnyPermission(userId, scopes, httpMethod);
|
|
66
|
+
this.logger.debug("Auth guard: Authorization check", {
|
|
67
|
+
userId,
|
|
68
|
+
scopes,
|
|
69
|
+
httpMethod,
|
|
70
|
+
hasPermission
|
|
71
|
+
});
|
|
72
|
+
if (!hasPermission) throw new InsufficientPermissionsError(scopes, userId);
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
ConfiguredAuthGuard = __decorate([
|
|
78
|
+
Transient(),
|
|
79
|
+
__decorateParam(0, inject(DI_TOKENS.AuthContext)),
|
|
80
|
+
__decorateParam(1, inject(LOGGER_TOKENS.LoggerService)),
|
|
81
|
+
__decorateParam(2, inject(RBAC_TOKENS.CasbinService, { isOptional: true })),
|
|
82
|
+
__decorateMetadata("design:paramtypes", [
|
|
83
|
+
Object,
|
|
84
|
+
Object,
|
|
85
|
+
Object
|
|
86
|
+
])
|
|
87
|
+
], ConfiguredAuthGuard);
|
|
88
|
+
return ConfiguredAuthGuard;
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { AuthGuard, GUARD_METADATA_KEY, GuardExecutionService, UseGuards, getControllerGuards, getMethodGuards };
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/guards/auth.guard.ts"],"sourcesContent":["import { DI_TOKENS, Transient } from 'stratal/di'\nimport type { AuthGuardOptions, CanActivate, GuardClass } from 'stratal/guards'\nimport { LOGGER_TOKENS, type LoggerService } from 'stratal/logger'\nimport type { RouterContext } from 'stratal/router'\nimport { inject } from 'tsyringe'\nimport type { AuthContext } from '../context/auth-context'\nimport { UserNotAuthenticatedError } from '../context/errors'\nimport { InsufficientPermissionsError } from '../rbac/errors/insufficient-permissions.error'\nimport type { CasbinService } from '../rbac/services/casbin.service'\nimport { RBAC_TOKENS } from '../rbac/tokens'\n\n/**\n * AuthGuard Factory\n *\n * Creates a guard class that enforces authentication and optional authorization.\n *\n * **Authentication (no scopes):**\n * - Checks if user is authenticated via AuthContext.isAuthenticated()\n * - Throws UserNotAuthenticatedError (401) if not authenticated\n *\n * **Authorization (with scopes):**\n * - First verifies authentication\n * - Then checks permissions via CasbinService\n * - Throws InsufficientPermissionsError (403) if unauthorized\n *\n * @param options - Configuration options\n * @param options.scopes - Required permissions for authorization\n * @returns Guard class for use with @UseGuards decorator\n *\n * @example Authentication only\n * ```typescript\n * @UseGuards(AuthGuard())\n * export class ProfileController { }\n * ```\n *\n * @example Authentication with permissions\n * ```typescript\n * @UseGuards(AuthGuard({ scopes: ['students:read'] }))\n * export class StudentsController { }\n * ```\n */\nexport function AuthGuard(options?: AuthGuardOptions): GuardClass {\n const scopes = options?.scopes\n\n @Transient()\n class ConfiguredAuthGuard implements CanActivate {\n constructor(\n @inject(DI_TOKENS.AuthContext) private readonly authContext: AuthContext,\n @inject(LOGGER_TOKENS.LoggerService) private readonly logger: LoggerService,\n @inject(RBAC_TOKENS.CasbinService, { isOptional: true }) private readonly casbinService?: CasbinService\n ) { }\n\n async canActivate(context: RouterContext): Promise<boolean> {\n if (!this.authContext.isAuthenticated()) {\n this.logger.debug('Auth guard: User not authenticated')\n throw new UserNotAuthenticatedError()\n }\n\n if (!scopes || scopes.length === 0) {\n this.logger.debug('Auth guard: Authentication passed (no scopes required)')\n return true\n }\n\n const userId = this.authContext.getUserId()\n if (!userId) {\n this.logger.debug('Auth guard: No user ID in context')\n throw new InsufficientPermissionsError(scopes, undefined)\n }\n\n const httpMethod = context.c.req.method.toLowerCase()\n\n if (this.casbinService) {\n const hasPermission = await this.casbinService.hasAnyPermission(\n userId,\n scopes,\n httpMethod\n )\n\n this.logger.debug('Auth guard: Authorization check', {\n userId,\n scopes,\n httpMethod,\n hasPermission,\n })\n\n if (!hasPermission) {\n throw new InsufficientPermissionsError(scopes, userId)\n }\n }\n\n return true\n }\n }\n\n return ConfiguredAuthGuard\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,UAAU,SAAwC;CAChE,MAAM,SAAS,SAAS;CAExB,IAAA,sBAAA,MACM,oBAA2C;EAC/C,YACE,aACA,QACA,eACA;AAHgD,QAAA,cAAA;AACM,QAAA,SAAA;AACoB,QAAA,gBAAA;;EAG5E,MAAM,YAAY,SAA0C;AAC1D,OAAI,CAAC,KAAK,YAAY,iBAAiB,EAAE;AACvC,SAAK,OAAO,MAAM,qCAAqC;AACvD,UAAM,IAAI,2BAA2B;;AAGvC,OAAI,CAAC,UAAU,OAAO,WAAW,GAAG;AAClC,SAAK,OAAO,MAAM,yDAAyD;AAC3E,WAAO;;GAGT,MAAM,SAAS,KAAK,YAAY,WAAW;AAC3C,OAAI,CAAC,QAAQ;AACX,SAAK,OAAO,MAAM,oCAAoC;AACtD,UAAM,IAAI,6BAA6B,QAAQ,KAAA,EAAU;;GAG3D,MAAM,aAAa,QAAQ,EAAE,IAAI,OAAO,aAAa;AAErD,OAAI,KAAK,eAAe;IACtB,MAAM,gBAAgB,MAAM,KAAK,cAAc,iBAC7C,QACA,QACA,WACD;AAED,SAAK,OAAO,MAAM,mCAAmC;KACnD;KACA;KACA;KACA;KACD,CAAC;AAEF,QAAI,CAAC,cACH,OAAM,IAAI,6BAA6B,QAAQ,OAAO;;AAI1D,UAAO;;;;EA9CV,WAAW;qBAGP,OAAO,UAAU,YAAY,CAAA;qBAC7B,OAAO,cAAc,cAAc,CAAA;qBACnC,OAAO,YAAY,eAAe,EAAE,YAAY,MAAM,CAAC,CAAA;;;;;;;AA6C5D,QAAO"}
|