@lenne.tech/nest-server 11.22.0 → 11.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/rules/configurable-features.md +1 -0
- package/.claude/rules/framework-compatibility.md +79 -0
- package/CLAUDE.md +60 -0
- package/FRAMEWORK-API.md +235 -0
- package/dist/core/common/decorators/restricted.decorator.js +21 -4
- package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
- package/dist/core/common/interfaces/server-options.interface.d.ts +1 -0
- package/dist/core/common/services/crud.service.d.ts +4 -1
- package/dist/core/common/services/crud.service.js +24 -2
- package/dist/core/common/services/crud.service.js.map +1 -1
- package/dist/core/common/services/module.service.d.ts +3 -2
- package/dist/core/common/services/module.service.js +43 -20
- package/dist/core/common/services/module.service.js.map +1 -1
- package/dist/core/common/services/request-context.service.d.ts +3 -0
- package/dist/core/common/services/request-context.service.js +12 -0
- package/dist/core/common/services/request-context.service.js.map +1 -1
- package/dist/server/modules/file/file-info.model.d.ts +1 -5
- package/dist/server/modules/user/user.model.d.ts +1 -5
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/docs/REQUEST-LIFECYCLE.md +25 -2
- package/docs/native-driver-security.md +153 -0
- package/docs/process-performance-optimization.md +493 -0
- package/migration-guides/11.22.0-to-11.22.1.md +105 -0
- package/migration-guides/11.22.x-to-11.23.0.md +235 -0
- package/package.json +33 -31
- package/src/core/common/decorators/restricted.decorator.ts +44 -4
- package/src/core/common/interfaces/server-options.interface.ts +8 -0
- package/src/core/common/services/crud.service.ts +77 -5
- package/src/core/common/services/module.service.ts +96 -35
- package/src/core/common/services/request-context.service.ts +47 -0
|
@@ -214,6 +214,7 @@ This pattern is currently applied to:
|
|
|
214
214
|
| Secret Fields Removal | `security.secretFields` | Array | `['password', 'verificationToken', ...]` |
|
|
215
215
|
| Multi-Tenancy | `multiTenancy` | Presence Implies Enabled | `headerName: 'x-tenant-id'`, `membershipModel: 'TenantMember'`, `adminBypass: true`, `excludeSchemas: []`, `roleHierarchy: { member: 1, manager: 2, owner: 3 }`, `cacheTtlMs: 30000` (0 disables, process-local). System roles (`S_EVERYONE`, `S_USER`, `S_VERIFIED`) are checked as OR alternatives before real roles; method-level system roles take precedence; membership validated for context when system role grants access + header present. Hierarchy roles use level comparison, normal roles use exact match. Use `DefaultHR` or `createHierarchyRoles()` for type-safe role constants. Bypass: `RequestContext.runWithBypassTenantGuard()`. Cache invalidation: `CoreTenantGuard.invalidateUser(userId)` / `invalidateAll()` |
|
|
216
216
|
| BetterAuth Tenant Skip | `betterAuth.skipTenantCheck` | Explicit Boolean | `true` (default). When `true` and no `X-Tenant-Id` header is sent, IAM endpoints (controller + resolver) skip `CoreTenantGuard` tenant validation. When header IS present, normal membership validation runs regardless. Set `false` for tenant-aware auth scenarios (subdomain-based, invite links, SSO per tenant) |
|
|
217
|
+
| Debug Process Input | `debugProcessInput` | Explicit Boolean | `false` (default). When `true`, logs a debug message when `prepareInput()` changes the input type during `process()`. Has performance cost due to `JSON.stringify` on every `process()` call — enable only for debugging |
|
|
217
218
|
|
|
218
219
|
## Module Override Pattern (via `ICoreModuleOverrides`)
|
|
219
220
|
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Framework Compatibility for Claude Code
|
|
2
|
+
|
|
3
|
+
This document defines the maintenance obligations that ensure Claude Code can effectively work with `@lenne.tech/nest-server` in consuming projects.
|
|
4
|
+
|
|
5
|
+
## Architecture Overview
|
|
6
|
+
|
|
7
|
+
The framework ships documentation alongside source code so that Claude Code can read it from `node_modules/`. Three layers work together:
|
|
8
|
+
|
|
9
|
+
1. **npm package** ships `CLAUDE.md`, `FRAMEWORK-API.md`, `.claude/rules/`, `docs/`, `migration-guides/`
|
|
10
|
+
2. **Consuming project** `CLAUDE.md` points Claude to read `node_modules/@lenne.tech/nest-server/`
|
|
11
|
+
3. **Claude Code plugin** (`lt-dev`) detects nest-server and injects concrete source paths via hooks
|
|
12
|
+
|
|
13
|
+
## Maintenance Obligations
|
|
14
|
+
|
|
15
|
+
### When Adding/Changing Interfaces in `server-options.interface.ts`
|
|
16
|
+
|
|
17
|
+
1. `FRAMEWORK-API.md` is auto-generated during `pnpm run build` via `scripts/generate-framework-api.ts`
|
|
18
|
+
2. Verify the generated output includes the new interface and all fields
|
|
19
|
+
3. Add JSDoc with `@default` tags for all config fields — these appear in the API reference
|
|
20
|
+
|
|
21
|
+
### When Adding New Core Modules (`src/core/modules/`)
|
|
22
|
+
|
|
23
|
+
1. Create `README.md` and `INTEGRATION-CHECKLIST.md` in the module directory
|
|
24
|
+
2. The generator script automatically picks up new modules for the "Core Modules" table
|
|
25
|
+
3. If the module has `forRoot()` config, add the interface to `server-options.interface.ts`
|
|
26
|
+
4. Run `pnpm run build` to regenerate `FRAMEWORK-API.md`
|
|
27
|
+
|
|
28
|
+
### When Changing CrudService Methods
|
|
29
|
+
|
|
30
|
+
1. Add JSDoc to new methods — the generator extracts the first line as description
|
|
31
|
+
2. Run `pnpm run build` to regenerate `FRAMEWORK-API.md`
|
|
32
|
+
3. If the method signature pattern changes (standard/Force/Raw), update the "Variants" note
|
|
33
|
+
|
|
34
|
+
### When Changing `CoreModule.forRoot()` Signatures
|
|
35
|
+
|
|
36
|
+
1. Ensure JSDoc is complete on the new overload
|
|
37
|
+
2. Run `pnpm run build` to regenerate `FRAMEWORK-API.md`
|
|
38
|
+
3. If adding a new parameter, update the consuming project template (`nest-server-starter/CLAUDE.md`)
|
|
39
|
+
|
|
40
|
+
### When Releasing New Versions
|
|
41
|
+
|
|
42
|
+
1. Run `pnpm run build` — this regenerates `FRAMEWORK-API.md` with the new version number
|
|
43
|
+
2. The file is included in the npm package via `package.json` `files` array
|
|
44
|
+
3. Migration guides are separate (see `.claude/rules/migration-guides.md`)
|
|
45
|
+
|
|
46
|
+
## Files Shipped with npm Package
|
|
47
|
+
|
|
48
|
+
| File | Purpose | Auto-Updated |
|
|
49
|
+
|------|---------|:------------:|
|
|
50
|
+
| `CLAUDE.md` | Framework rules, architecture, debugging guide | Manual |
|
|
51
|
+
| `FRAMEWORK-API.md` | Compact API reference (interfaces, methods) | Yes (`pnpm run build`) |
|
|
52
|
+
| `.claude/rules/*.md` | 12 rule files covering all aspects | Manual |
|
|
53
|
+
| `docs/REQUEST-LIFECYCLE.md` | Complete request lifecycle | Manual |
|
|
54
|
+
| `migration-guides/*.md` | Version migration guides | Per release |
|
|
55
|
+
|
|
56
|
+
## Generator Script
|
|
57
|
+
|
|
58
|
+
`scripts/generate-framework-api.ts` extracts via ts-morph:
|
|
59
|
+
- `CoreModule.forRoot()` overload signatures
|
|
60
|
+
- All config interfaces (`IServerOptions`, `IBetterAuth`, `IMultiTenancy`, etc.)
|
|
61
|
+
- `ServiceOptions` interface
|
|
62
|
+
- `CrudService` public method signatures
|
|
63
|
+
- Core module listing with documentation status
|
|
64
|
+
|
|
65
|
+
Run manually: `npx tsx scripts/generate-framework-api.ts`
|
|
66
|
+
|
|
67
|
+
## Cross-Repository Dependencies
|
|
68
|
+
|
|
69
|
+
This framework compatibility strategy spans multiple repositories:
|
|
70
|
+
|
|
71
|
+
| Repository | Role |
|
|
72
|
+
|-----------|------|
|
|
73
|
+
| `nest-server` | Ships documentation with npm package (this repo) |
|
|
74
|
+
| `nest-server-starter` | `CLAUDE.md` points Claude to `node_modules/` source |
|
|
75
|
+
| `nuxt-extensions` | Same pattern: `CLAUDE.md` shipped with npm package |
|
|
76
|
+
| `nuxt-base-starter` | `CLAUDE.md` points Claude to nuxt-extensions source |
|
|
77
|
+
| `claude-code/plugins/lt-dev` | Hooks detect frameworks, Skills reference source paths |
|
|
78
|
+
|
|
79
|
+
The full strategy document is maintained in the claude-code plugin repository.
|
package/CLAUDE.md
CHANGED
|
@@ -22,6 +22,7 @@ The following documents must be kept up to date when making changes that affect
|
|
|
22
22
|
| `docs/REQUEST-LIFECYCLE.md` | Adding/changing decorators, interceptors, guards, pipes, middleware, plugins, services, modules, or the request/response flow |
|
|
23
23
|
| `migration-guides/` | Releasing MINOR or MAJOR versions (see `.claude/rules/migration-guides.md`) |
|
|
24
24
|
| `.claude/rules/configurable-features.md` | Adding new configurable features |
|
|
25
|
+
| `FRAMEWORK-API.md` | Auto-regenerated by `pnpm run build` — verify after adding interfaces, CrudService methods, or core modules |
|
|
25
26
|
|
|
26
27
|
**Rule:** When a code change adds, removes, or modifies a feature listed in `docs/REQUEST-LIFECYCLE.md` (Features Overview, diagrams, decorator reference, configuration, etc.), update the document in the same commit or PR.
|
|
27
28
|
|
|
@@ -164,9 +165,68 @@ Detailed documentation in `.claude/rules/`:
|
|
|
164
165
|
| `migration-guides.md` | Process for creating version migration guides |
|
|
165
166
|
| `configurable-features.md` | Configuration patterns: "Presence implies enabled" and "Boolean shorthand" (`true` / `{}`) |
|
|
166
167
|
| `package-management.md` | Fixed package versions only - no `^`, `~`, or ranges |
|
|
168
|
+
| `framework-compatibility.md` | Maintenance obligations for FRAMEWORK-API.md, shipped docs, cross-repo dependencies |
|
|
169
|
+
|
|
170
|
+
## Native MongoDB Driver — Security Rules
|
|
171
|
+
|
|
172
|
+
### model.collection / model.db — BLOCKED
|
|
173
|
+
|
|
174
|
+
Access to `this.mainDbModel.collection` and `this.mainDbModel.db` is blocked via TypeScript type (`SafeModel = Omit<Model, 'collection' | 'db'>`).
|
|
175
|
+
For additionally injected models (`@InjectModel`): **NEVER** use `.collection.*` or `.db.*`.
|
|
176
|
+
All Mongoose plugins (Tenant, Audit, RoleGuard, Password) are bypassed.
|
|
177
|
+
|
|
178
|
+
**Use Mongoose Model methods instead:**
|
|
179
|
+
|
|
180
|
+
| Forbidden | Allowed |
|
|
181
|
+
|-----------|---------|
|
|
182
|
+
| `collection.insertOne(doc)` | `Model.insertMany([doc])` |
|
|
183
|
+
| `collection.bulkWrite(ops)` | `Model.bulkWrite(ops)` |
|
|
184
|
+
| `collection.updateOne(f, u)` | `Model.updateOne(f, u)` |
|
|
185
|
+
| `collection.updateMany(f, u)` | `Model.updateMany(f, u)` |
|
|
186
|
+
| `collection.deleteOne(f)` | `Model.deleteOne(f)` |
|
|
187
|
+
| `collection.deleteMany(f)` | `Model.deleteMany(f)` |
|
|
188
|
+
| `collection.find(f)` | `Model.find(f)` or `Model.find(f).lean()` |
|
|
189
|
+
| `collection.aggregate(p)` | `Model.aggregate(p)` |
|
|
190
|
+
|
|
191
|
+
If native access is unavoidable: use `this.getNativeCollection(reason)` or `this.getNativeConnection(reason)` from CrudService.
|
|
192
|
+
|
|
193
|
+
### connection.db.collection() — Use With Caution
|
|
194
|
+
|
|
195
|
+
Allowed for:
|
|
196
|
+
- Collections without Mongoose schema (OAuth, BetterAuth, MCP)
|
|
197
|
+
- Read-only aggregations/counts on other collections
|
|
198
|
+
- Admin operations (indexes, drops, backups)
|
|
199
|
+
|
|
200
|
+
**NOT allowed for:**
|
|
201
|
+
- Write operations on tenant-scoped collections → use Mongoose Model instead
|
|
202
|
+
- CRUD on collections that have a Mongoose schema → use CrudService instead
|
|
203
|
+
|
|
204
|
+
Details: [`docs/native-driver-security.md`](docs/native-driver-security.md)
|
|
205
|
+
|
|
206
|
+
### CrudService process() Pipeline — Memory Considerations
|
|
207
|
+
|
|
208
|
+
The `process()` pipeline (prepareInput → checkRights → serviceFunc → processFieldSelection → prepareOutput → checkRights) adds memory overhead per call through object cloning, Mongoose hydration, and populate operations. For typical API usage this is negligible, but it can become significant in:
|
|
209
|
+
|
|
210
|
+
- **High-frequency operations** (e.g. monitor checks running every 10-60 seconds)
|
|
211
|
+
- **Service cascades** (Service A → Service B → Service C, each going through process())
|
|
212
|
+
- **Populate chains** (3-5 levels of nested population)
|
|
213
|
+
|
|
214
|
+
**If a project experiences memory issues under high traffic**, check whether `process()` wrapping is the cause. Alternatives that preserve security:
|
|
215
|
+
|
|
216
|
+
| Instead of | Use | Security |
|
|
217
|
+
|-----------|-----|----------|
|
|
218
|
+
| `CrudService.create(input)` | `Model.insertMany([input])` — triggers all Mongoose plugins | Tenant, Audit, RoleGuard, Password all active |
|
|
219
|
+
| `CrudService.update(id, input)` | `Model.findByIdAndUpdate(id, input)` — triggers all Mongoose plugins | Tenant filter, Audit, RoleGuard all active |
|
|
220
|
+
| `CrudService.updateForce(id, input)` | `Model.findByIdAndUpdate(id, { $set: input }).lean()` — for system-internal updates | Plugins active, no process() overhead |
|
|
221
|
+
|
|
222
|
+
**NEVER** bypass Mongoose entirely via `collection.*` — see section above. The CheckSecurityInterceptor acts as a safety net on HTTP responses regardless of how data was written.
|
|
223
|
+
|
|
224
|
+
Details: [`docs/process-performance-optimization.md`](docs/process-performance-optimization.md)
|
|
167
225
|
|
|
168
226
|
## In-Depth Documentation
|
|
169
227
|
|
|
170
228
|
| File | Content |
|
|
171
229
|
|------|---------|
|
|
172
230
|
| [`docs/REQUEST-LIFECYCLE.md`](docs/REQUEST-LIFECYCLE.md) | Complete request lifecycle, security architecture, interceptor chain, decorator reference, CrudService pipeline, Safety Net, diagrams |
|
|
231
|
+
| [`docs/native-driver-security.md`](docs/native-driver-security.md) | Native MongoDB Driver restrictions, secure alternatives, review checklist |
|
|
232
|
+
| [`docs/process-performance-optimization.md`](docs/process-performance-optimization.md) | process() pipeline performance optimizations |
|
package/FRAMEWORK-API.md
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# @lenne.tech/nest-server — Framework API Reference
|
|
2
|
+
|
|
3
|
+
> Auto-generated from source code on 2026-04-07 (v11.23.0)
|
|
4
|
+
> File: `FRAMEWORK-API.md` — compact, machine-readable API surface for Claude Code
|
|
5
|
+
|
|
6
|
+
## CoreModule.forRoot()
|
|
7
|
+
|
|
8
|
+
- `CoreModule.forRoot(options: Partial<IServerOptions>, overrides?: ICoreModuleOverrides)`: `DynamicModule`
|
|
9
|
+
- ~~`CoreModule.forRoot(AuthService: any, AuthModule: any, options: Partial<IServerOptions>, overrides?: ICoreModuleOverrides)`: `DynamicModule`~~ *(deprecated)*
|
|
10
|
+
|
|
11
|
+
## Configuration Interfaces
|
|
12
|
+
|
|
13
|
+
### IServerOptions
|
|
14
|
+
|
|
15
|
+
- `appUrl?`: `string` — Base URL of the frontend/app application.
|
|
16
|
+
- `auth?`: `IAuth` — Authentication system configuration
|
|
17
|
+
- `automaticObjectIdFiltering?`: `boolean` — Automatically detect ObjectIds in string values in FilterQueries
|
|
18
|
+
- `baseUrl?`: `string` — Base URL of the API server.
|
|
19
|
+
- `betterAuth?`: `boolean | IBetterAuth` (default: `undefined (enabled with defaults)`) — Configuration for better-auth authentication framework.
|
|
20
|
+
- `brevo?`: `{ apiKey: string; exclude?: RegExp; sender: { email: string; name: string; }; }` — Configuration for Brevo
|
|
21
|
+
- `compression?`: `boolean | compression.CompressionOptions` — Whether to use the compression middleware package to enable gzip compression.
|
|
22
|
+
- `cookies?`: `boolean` — Whether to use cookies for authentication handling
|
|
23
|
+
- `cronJobs?`: `Record<string, string | false | 0 | CronJobConfigWithTimeZone<null, null> | C...` — Cron jobs configuration object with the name of the cron job function as key
|
|
24
|
+
- `debugProcessInput?`: `boolean` (default: `false`) — When true, logs a debug message when prepareInput() changes the input type during process().
|
|
25
|
+
- `email?`: `{ defaultSender?: { email?: string; name?: string; }; mailjet?: MailjetOption...` — SMTP and template configuration for sending emails
|
|
26
|
+
- `env?`: `string` — Environment
|
|
27
|
+
- `errorCode?`: `IErrorCode` — Configuration for the error code module
|
|
28
|
+
- `execAfterInit?`: `string` — Exec a command after server is initialized
|
|
29
|
+
- `filter?`: `{ maxLimit?: number; }` — Filter configuration and defaults
|
|
30
|
+
- `graphQl?`: `false | { driver?: ApolloDriverConfig; enableSubscriptionAuth?: boolean; maxC...` — Configuration of the GraphQL module
|
|
31
|
+
- `healthCheck?`: `{ configs?: { database?: { enabled?: boolean; key?: string; options?: Mongoos...` — Whether to activate health check endpoints
|
|
32
|
+
- `hostname?`: `string` — Hostname of the server
|
|
33
|
+
- `ignoreSelectionsForPopulate?`: `boolean` — Ignore selections in fieldSelection
|
|
34
|
+
- `jwt?`: `IJwt & JwtModuleOptions & { refresh?: IJwt & { renewal?: boolean; }; sameToke...` — Configuration of JavaScript Web Token (JWT) module
|
|
35
|
+
- `loadLocalConfig?`: `string | boolean` — Load local configuration
|
|
36
|
+
- `logExceptions?`: `boolean` — Log exceptions (for better debugging)
|
|
37
|
+
- `mongoose?`: `{ collation?: CollationOptions; modelDocumentation?: boolean; options?: Mongo...` — Configuration for Mongoose
|
|
38
|
+
- `multiTenancy?`: `IMultiTenancy` (default: `undefined (disabled)`) — Multi-tenancy configuration for tenant-based data isolation.
|
|
39
|
+
- `permissions?`: `boolean | IPermissions` (default: `undefined (disabled)`) — Permissions report module (development tool).
|
|
40
|
+
- `port?`: `number` — Port number of the server
|
|
41
|
+
- `security?`: `{ checkResponseInterceptor?: boolean | { checkObjectItself?: boolean; debug?:...` — Configuration for security pipes and interceptors
|
|
42
|
+
- `sha256?`: `boolean` — Whether to enable verification and automatic encryption for received passwords that are not in sha256 format
|
|
43
|
+
- `staticAssets?`: `{ options?: ServeStaticOptions; path?: string; }` — Configuration for useStaticAssets
|
|
44
|
+
- `systemSetup?`: `ISystemSetup` — System setup configuration for initial admin creation.
|
|
45
|
+
- `templates?`: `{ engine?: string; path?: string; }` — Templates
|
|
46
|
+
- `tus?`: `boolean | ITusConfig` — TUS resumable upload configuration.
|
|
47
|
+
|
|
48
|
+
### IBetterAuth (type alias: IBetterAuthWithoutPasskey | IBetterAuthWithPasskey)
|
|
49
|
+
|
|
50
|
+
When `passkey` is enabled, `trustedOrigins` is required (compile-time enforcement).
|
|
51
|
+
|
|
52
|
+
- `passkey?`: `IBetterAuthPasskeyDisabled` — Passkey/WebAuthn configuration (DISABLED or not configured).
|
|
53
|
+
- `trustedOrigins?`: `string[]` — Trusted origins for CORS configuration.
|
|
54
|
+
|
|
55
|
+
### IAuth
|
|
56
|
+
|
|
57
|
+
- `legacyEndpoints?`: `IAuthLegacyEndpoints` — Configuration for legacy auth endpoints
|
|
58
|
+
- `preventUserEnumeration?`: `boolean` (default: `false (backward compatible - specific error messages)`) — Prevent user enumeration via unified error messages
|
|
59
|
+
- `rateLimit?`: `IAuthRateLimit` (default: `{ enabled: false }`) — Rate limiting configuration for Legacy Auth endpoints
|
|
60
|
+
|
|
61
|
+
### IMultiTenancy
|
|
62
|
+
|
|
63
|
+
- `enabled?`: `boolean` (default: `true (when config object is present)`) — Explicitly disable multi-tenancy even when config is present.
|
|
64
|
+
- `excludeSchemas?`: `string[]` — Model names (NOT collection names) to exclude from tenant filtering.
|
|
65
|
+
- `headerName?`: `string` (default: `'x-tenant-id'`) — Header name for tenant selection.
|
|
66
|
+
- `membershipModel?`: `string` (default: `'TenantMember'`) — Mongoose model name for the membership collection.
|
|
67
|
+
- `adminBypass?`: `boolean` (default: `true`) — Whether system admins (RoleEnum.ADMIN) bypass the membership check.
|
|
68
|
+
- `roleHierarchy?`: `Record<string, number>` (default: `{ member: 1, manager: 2, owner: 3 }`) — Custom role hierarchy for tenant membership roles.
|
|
69
|
+
- `cacheTtlMs?`: `number` (default: `30000 (30 seconds)`) — TTL in milliseconds for the tenant guard's in-memory membership cache.
|
|
70
|
+
|
|
71
|
+
### IErrorCode
|
|
72
|
+
|
|
73
|
+
- `additionalErrorRegistry?`: `Record<string, { code: string; message: string; translations: { [locale: stri...` — Additional error registry to merge with core LTNS_* errors
|
|
74
|
+
- `autoRegister?`: `boolean` (default: `true`) — Automatically register the ErrorCodeModule in CoreModule
|
|
75
|
+
|
|
76
|
+
### IJwt
|
|
77
|
+
|
|
78
|
+
- `privateKey?`: `string` — Private key
|
|
79
|
+
- `publicKey?`: `string` — Public key
|
|
80
|
+
- `secret?`: `string` — Secret to encrypt the JWT
|
|
81
|
+
- `secretOrKeyProvider?`: `(request: Record<string, any>, rawJwtToken: string, done: (err: any, secret: ...` — JWT Provider
|
|
82
|
+
- `secretOrPrivateKey?`: `string` — Alias of secret (for backwards compatibility)
|
|
83
|
+
- `signInOptions?`: `JwtSignOptions` — SignIn Options like expiresIn
|
|
84
|
+
|
|
85
|
+
### ICoreModuleOverrides
|
|
86
|
+
|
|
87
|
+
- `betterAuth?`: `{ controller?: Type<any>; resolver?: Type<any>; }` — Override BetterAuth controller and/or resolver.
|
|
88
|
+
- `errorCode?`: `{ controller?: Type<any>; service?: Type<any>; }` — Override ErrorCode controller and/or service.
|
|
89
|
+
|
|
90
|
+
### IBetterAuthPasskeyConfig
|
|
91
|
+
|
|
92
|
+
- `authenticatorAttachment?`: `"cross-platform" | "platform"` (default: `undefined (both allowed)`) — Authenticator attachment preference.
|
|
93
|
+
- `challengeStorage?`: `"cookie" | "database"` (default: `'database'`) — Where to store WebAuthn challenges.
|
|
94
|
+
- `challengeTtlSeconds?`: `number` (default: `300 (5 minutes)`) — TTL in seconds for database-stored challenges.
|
|
95
|
+
- `enabled?`: `boolean` (default: `true (when config block is present)`) — Whether passkey authentication is enabled.
|
|
96
|
+
- `origin?`: `string` — Origin URL for WebAuthn.
|
|
97
|
+
- `residentKey?`: `"discouraged" | "preferred" | "required"` (default: `'preferred'`) — Resident key (discoverable credential) requirement.
|
|
98
|
+
- `rpId?`: `string` — Relying Party ID (usually the domain without protocol).
|
|
99
|
+
- `rpName?`: `string` — Relying Party Name (displayed to users)
|
|
100
|
+
- `userVerification?`: `"discouraged" | "preferred" | "required"` (default: `'preferred'`) — User verification requirement.
|
|
101
|
+
- `webAuthnChallengeCookie?`: `string` (default: `'better-auth-passkey'`) — Custom cookie name for WebAuthn challenge storage.
|
|
102
|
+
|
|
103
|
+
### IBetterAuthTwoFactorConfig
|
|
104
|
+
|
|
105
|
+
- `appName?`: `string` (default: `'Nest Server'`) — App name shown in authenticator apps.
|
|
106
|
+
- `enabled?`: `boolean` (default: `true (enabled by default when BetterAuth is active)`) — Whether 2FA is enabled.
|
|
107
|
+
|
|
108
|
+
### IBetterAuthJwtConfig
|
|
109
|
+
|
|
110
|
+
- `enabled?`: `boolean` (default: `true (enabled by default when BetterAuth is active)`) — Whether JWT plugin is enabled.
|
|
111
|
+
- `expiresIn?`: `string` (default: `'15m'`) — JWT expiration time
|
|
112
|
+
|
|
113
|
+
### IBetterAuthEmailVerificationConfig
|
|
114
|
+
|
|
115
|
+
- `autoSignInAfterVerification?`: `boolean` (default: `true`) — Whether to automatically sign in the user after email verification.
|
|
116
|
+
- `brevoTemplateId?`: `number` (default: `undefined (uses SMTP/EJS templates)`) — Brevo template ID for verification emails.
|
|
117
|
+
- `callbackURL?`: `string` (default: `undefined (backend-handled verification)`) — Frontend callback URL for email verification.
|
|
118
|
+
- `enabled?`: `boolean` (default: `true (enabled by default when BetterAuth is active)`) — Whether email verification is enabled.
|
|
119
|
+
- `expiresIn?`: `number` (default: `86400 (24 hours)`) — Time in seconds until the verification link expires.
|
|
120
|
+
- `locale?`: `string` (default: `'en'`) — Locale for the verification email template.
|
|
121
|
+
- `resendCooldownSeconds?`: `number` (default: `60`) — Cooldown in seconds between resend requests for the same email address.
|
|
122
|
+
- `template?`: `string` (default: `'email-verification'`) — Custom template name for the verification email.
|
|
123
|
+
|
|
124
|
+
### IBetterAuthRateLimit
|
|
125
|
+
|
|
126
|
+
- `enabled?`: `boolean` (default: `false`) — Whether rate limiting is enabled
|
|
127
|
+
- `max?`: `number` (default: `10`) — Maximum number of requests within the time window
|
|
128
|
+
- `maxEntries?`: `number` (default: `10000`) — Maximum number of entries in the in-memory rate limit store.
|
|
129
|
+
- `message?`: `string` — Custom message when rate limit is exceeded
|
|
130
|
+
- `skipEndpoints?`: `string[]` — Endpoints to skip rate limiting entirely
|
|
131
|
+
- `strictEndpoints?`: `string[]` — Endpoints to apply stricter rate limiting (e.g., sign-in, sign-up)
|
|
132
|
+
- `windowSeconds?`: `number` — Time window in seconds
|
|
133
|
+
|
|
134
|
+
### IBetterAuthSignUpChecksConfig
|
|
135
|
+
|
|
136
|
+
- `enabled?`: `boolean` (default: `true (enabled by default when BetterAuth is active)`) — Whether sign-up checks are enabled.
|
|
137
|
+
- `requiredFields?`: `string[]` (default: `['termsAndPrivacyAccepted']`) — Fields that must be provided and truthy during sign-up.
|
|
138
|
+
|
|
139
|
+
### ServiceOptions
|
|
140
|
+
|
|
141
|
+
- `checkRights?`: `boolean`
|
|
142
|
+
- `collation?`: `CollationOptions`
|
|
143
|
+
- `create?`: `boolean`
|
|
144
|
+
- `currentUser?`: `{ [key: string]: any; id: string; roles?: string[]; }`
|
|
145
|
+
- `fieldSelection?`: `FieldSelection`
|
|
146
|
+
- `force?`: `boolean`
|
|
147
|
+
- `inputType?`: `new (...params: any[]) => any`
|
|
148
|
+
- `outputType?`: `new (...params: any[]) => any`
|
|
149
|
+
- `populate?`: `string | PopulateOptions | (string | PopulateOptions)[]`
|
|
150
|
+
- `prepareInput?`: `PrepareInputOptions`
|
|
151
|
+
- `prepareOutput?`: `PrepareOutputOptions`
|
|
152
|
+
- `processFieldSelection?`: `{ dbModel?: Model<any>; ignoreSelections?: boolean; model?: new (...args: any...`
|
|
153
|
+
- `pubSub?`: `boolean`
|
|
154
|
+
- `raw?`: `boolean`
|
|
155
|
+
- `roles?`: `string | string[]`
|
|
156
|
+
- `select?`: `string | string[] | Record<string, number | boolean | object>`
|
|
157
|
+
- `setCreateOrUpdateUserId?`: `boolean`
|
|
158
|
+
|
|
159
|
+
## CrudService Methods
|
|
160
|
+
|
|
161
|
+
Base class for all services. Located at `src/core/common/services/crud.service.ts`.
|
|
162
|
+
|
|
163
|
+
Generic: `CrudService<Model, CreateInput, UpdateInput>`
|
|
164
|
+
|
|
165
|
+
- `async aggregate(pipeline: PipelineStage[], serviceOptions?: ServiceOptions & { aggregateOptions?: AggregateOptions; })`: `Promise<T>` — Aggregate
|
|
166
|
+
- `async aggregateForce(pipeline: PipelineStage[], serviceOptions?: ServiceOptions)`: `Promise<T>` — Aggregate without checks or restrictions
|
|
167
|
+
- `async aggregateRaw(pipeline: PipelineStage[], serviceOptions?: ServiceOptions)`: `Promise<T>` — Aggregate without checks, restrictions or preparations
|
|
168
|
+
- `async create(input: PlainObject<CreateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Create item
|
|
169
|
+
- `async createForce(input: PlainObject<CreateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Create item without checks or restrictions
|
|
170
|
+
- `async createRaw(input: PlainObject<CreateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Create item without checks, restrictions or preparations
|
|
171
|
+
- `distinct(property: string)`: `Promise<string[]>` — Get distinct values of a property
|
|
172
|
+
- `async get(id: string, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Get item by ID
|
|
173
|
+
- `async getForce(id: string, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Get item by ID without checks or restrictions
|
|
174
|
+
- `async getRaw(id: string, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Get item by ID without checks, restrictions or preparations
|
|
175
|
+
- `async find(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<Model[]>` — Get items via filter
|
|
176
|
+
- `async findForce(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<Model[]>` — Get items via filter without checks or restrictions
|
|
177
|
+
- `async findRaw(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<Model[]>` — Get items via filter without checks, restrictions or preparations
|
|
178
|
+
- `async findAndCount(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<{ items: Model[]; pagination: PaginationInfo; totalCount: number; }>` — Get items and total count via filter
|
|
179
|
+
- `async findAndCountForce(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<{ items: Model[]; pagination: PaginationInfo; totalCount: number; }>` — Get items and total count via filter without checks or restrictions
|
|
180
|
+
- `async findAndCountRaw(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<{ items: Model[]; pagination: PaginationInfo; totalCount: number; }>` — Get items and total count via filter without checks, restrictions or preparations
|
|
181
|
+
- `async findAndUpdate(filter: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., update: PlainObject<UpdateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model[]>` — Find and update
|
|
182
|
+
- `async findAndUpdateForce(filter: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., update: PlainObject<UpdateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model[]>` — Find and update without checks or restrictions
|
|
183
|
+
- `async findAndUpdateRaw(filter: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., update: PlainObject<UpdateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model[]>` — Find and update without checks, restrictions or preparations
|
|
184
|
+
- `async findOne(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; }, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Find one item via filter
|
|
185
|
+
- `async findOneForce(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<Model>` — Find one item via filter without checks or restrictions
|
|
186
|
+
- `async findOneRaw(filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; s..., serviceOptions?: ServiceOptions)`: `Promise<Model>` — Find one item via filter without checks, restrictions or preparations
|
|
187
|
+
- `getModel()`: `MongooseModel<Document<Types.ObjectId, any, any, Record<string, any>, {}> & M...` — Get service model to process queries directly.
|
|
188
|
+
- `getNativeCollection(reason: string)`: `Collection<Document>` — Get the native MongoDB Collection, bypassing all Mongoose plugins.
|
|
189
|
+
- `getNativeConnection(reason: string)`: `Connection` — Get the Mongoose Connection (which provides access to the native MongoDB Db and MongoClient).
|
|
190
|
+
- `validateNativeAccessReason(reason: string, method: string)`: `void`
|
|
191
|
+
- `async read(input: string | FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryO..., serviceOptions?: ServiceOptions)`: `Promise<Model | Model[]>` — CRUD alias for get or find
|
|
192
|
+
- `async readForce(input: string | FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryO..., serviceOptions?: ServiceOptions)`: `Promise<Model | Model[]>` — CRUD alias for getForce or findForce
|
|
193
|
+
- `async readRaw(input: string | FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryO..., serviceOptions?: ServiceOptions)`: `Promise<Model | Model[]>` — CRUD alias for getRaw or findRaw
|
|
194
|
+
- `async update(id: string, input: PlainObject<UpdateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Update item via ID
|
|
195
|
+
- `async updateForce(id: string, input: PlainObject<UpdateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Update item via ID without checks or restrictions
|
|
196
|
+
- `async updateRaw(id: string, input: PlainObject<UpdateInput>, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Update item via ID without checks, restrictions or preparations
|
|
197
|
+
- `async delete(id: string, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Delete item via ID
|
|
198
|
+
- `async deleteForce(id: string, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Delete item via ID without checks or restrictions
|
|
199
|
+
- `async deleteRaw(id: string, serviceOptions?: ServiceOptions)`: `Promise<Model>` — Delete item via ID without checks, restrictions or preparations
|
|
200
|
+
- `async processQueryOrDocument(queryOrDocument: Document<Types.ObjectId, any, any, Record<string, any>, {}> | Document<Types...., serviceOptions?: ServiceOptions)`: `Promise<T>` — Execute, populate and map Mongoose query or document(s) with serviceOptions
|
|
201
|
+
|
|
202
|
+
**Variants:** Each method has three variants:
|
|
203
|
+
- `method()` — Standard: applies `securityCheck()`, respects permissions
|
|
204
|
+
- `methodForce()` — Bypasses `securityCheck()`, still applies input validation
|
|
205
|
+
- `methodRaw()` — Direct database access, no security or validation
|
|
206
|
+
|
|
207
|
+
## Core Modules
|
|
208
|
+
|
|
209
|
+
| Module | Docs | Path |
|
|
210
|
+
|--------|------|------|
|
|
211
|
+
| `auth` | — | `src/core/modules/auth/` |
|
|
212
|
+
| `better-auth` | README, CHECKLIST | `src/core/modules/better-auth/` |
|
|
213
|
+
| `error-code` | CHECKLIST | `src/core/modules/error-code/` |
|
|
214
|
+
| `file` | README | `src/core/modules/file/` |
|
|
215
|
+
| `health-check` | — | `src/core/modules/health-check/` |
|
|
216
|
+
| `migrate` | README | `src/core/modules/migrate/` |
|
|
217
|
+
| `permissions` | README, CHECKLIST | `src/core/modules/permissions/` |
|
|
218
|
+
| `system-setup` | README, CHECKLIST | `src/core/modules/system-setup/` |
|
|
219
|
+
| `tenant` | README, CHECKLIST | `src/core/modules/tenant/` |
|
|
220
|
+
| `tus` | README, CHECKLIST | `src/core/modules/tus/` |
|
|
221
|
+
| `user` | — | `src/core/modules/user/` |
|
|
222
|
+
|
|
223
|
+
## Key Source Files
|
|
224
|
+
|
|
225
|
+
| File | Purpose |
|
|
226
|
+
|------|---------|
|
|
227
|
+
| `src/core.module.ts` | CoreModule.forRoot() — module registration |
|
|
228
|
+
| `src/core/common/interfaces/server-options.interface.ts` | All config interfaces |
|
|
229
|
+
| `src/core/common/interfaces/service-options.interface.ts` | ServiceOptions interface |
|
|
230
|
+
| `src/core/common/services/crud.service.ts` | CrudService base class |
|
|
231
|
+
| `src/core/common/services/config.service.ts` | ConfigService (global) |
|
|
232
|
+
| `src/core/common/decorators/` | @Restricted, @Roles, @CurrentUser, @UnifiedField |
|
|
233
|
+
| `src/core/common/interceptors/` | CheckResponse, CheckSecurity, ResponseModel |
|
|
234
|
+
| `docs/REQUEST-LIFECYCLE.md` | Complete request lifecycle |
|
|
235
|
+
| `.claude/rules/` | Detailed rules for architecture, security, testing |
|
|
@@ -13,14 +13,31 @@ const Restricted = (...rolesOrMember) => {
|
|
|
13
13
|
return Reflect.metadata(restrictedMetaKey, rolesOrMember);
|
|
14
14
|
};
|
|
15
15
|
exports.Restricted = Restricted;
|
|
16
|
+
const restrictedMetadataCache = new WeakMap();
|
|
16
17
|
const getRestricted = (object, propertyKey) => {
|
|
17
18
|
if (!object) {
|
|
18
19
|
return null;
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
const cacheTarget = typeof object === 'function' ? object : object.constructor;
|
|
22
|
+
if (!cacheTarget) {
|
|
23
|
+
return propertyKey
|
|
24
|
+
? Reflect.getMetadata(restrictedMetaKey, object, propertyKey)
|
|
25
|
+
: Reflect.getMetadata(restrictedMetaKey, object);
|
|
22
26
|
}
|
|
23
|
-
|
|
27
|
+
let classCache = restrictedMetadataCache.get(cacheTarget);
|
|
28
|
+
if (!classCache) {
|
|
29
|
+
classCache = new Map();
|
|
30
|
+
restrictedMetadataCache.set(cacheTarget, classCache);
|
|
31
|
+
}
|
|
32
|
+
const cacheKey = propertyKey || '__class__';
|
|
33
|
+
if (classCache.has(cacheKey)) {
|
|
34
|
+
return classCache.get(cacheKey);
|
|
35
|
+
}
|
|
36
|
+
const metadata = propertyKey
|
|
37
|
+
? Reflect.getMetadata(restrictedMetaKey, object, propertyKey)
|
|
38
|
+
: Reflect.getMetadata(restrictedMetaKey, object);
|
|
39
|
+
classCache.set(cacheKey, metadata);
|
|
40
|
+
return metadata;
|
|
24
41
|
};
|
|
25
42
|
exports.getRestricted = getRestricted;
|
|
26
43
|
const checkRestricted = (data, user, options = {}, processedObjects = []) => {
|
|
@@ -148,7 +165,7 @@ const checkRestricted = (data, user, options = {}, processedObjects = []) => {
|
|
|
148
165
|
continue;
|
|
149
166
|
}
|
|
150
167
|
const restricted = (0, exports.getRestricted)(data, propertyKey) || [];
|
|
151
|
-
const concatenatedRestrictions = config.mergeRoles ? _.uniq(objectRestrictions.concat(restricted)) : restricted;
|
|
168
|
+
const concatenatedRestrictions = config.mergeRoles && objectRestrictions.length ? _.uniq(objectRestrictions.concat(restricted)) : restricted;
|
|
152
169
|
const valid = validateRestricted(concatenatedRestrictions);
|
|
153
170
|
if (valid) {
|
|
154
171
|
config.isCreatorOfParent =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restricted.decorator.js","sourceRoot":"","sources":["../../../../src/core/common/decorators/restricted.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AACvD,4BAA0B;AAC1B,4BAA6B;AAG7B,kDAA8C;AAC9C,oDAAgE;AAChE,iFAAqE;AAErE,kFAA2E;AAK3E,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AA4BxC,MAAM,UAAU,GAAG,CAAC,GAAG,aAA6B,EAAsC,EAAE;IACjG,OAAO,OAAO,CAAC,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;AAC5D,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;
|
|
1
|
+
{"version":3,"file":"restricted.decorator.js","sourceRoot":"","sources":["../../../../src/core/common/decorators/restricted.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,6 +134,7 @@ export interface IServerOptions {
|
|
|
134
134
|
compression?: boolean | compression.CompressionOptions;
|
|
135
135
|
cookies?: boolean;
|
|
136
136
|
cronJobs?: Record<string, CronExpression | CronJobConfigWithTimeZone | CronJobConfigWithUtcOffset | Date | Falsy | string>;
|
|
137
|
+
debugProcessInput?: boolean;
|
|
137
138
|
email?: {
|
|
138
139
|
defaultSender?: {
|
|
139
140
|
email?: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AggregateOptions, Document, Model as MongooseModel, PipelineStage, Query, QueryFilter, QueryOptions } from 'mongoose';
|
|
1
|
+
import { AggregateOptions, Collection, Connection, Document, Model as MongooseModel, PipelineStage, Query, QueryFilter, QueryOptions } from 'mongoose';
|
|
2
2
|
import { FilterArgs } from '../args/filter.args';
|
|
3
3
|
import { ServiceOptions } from '../interfaces/service-options.interface';
|
|
4
4
|
import { CoreModel } from '../models/core-model.model';
|
|
@@ -90,6 +90,9 @@ export declare abstract class CrudService<Model extends CoreModel = any, CreateI
|
|
|
90
90
|
samples?: number;
|
|
91
91
|
}, serviceOptions?: ServiceOptions): Promise<Model>;
|
|
92
92
|
getModel(): MongooseModel<Document & Model>;
|
|
93
|
+
protected getNativeCollection(reason: string): Collection;
|
|
94
|
+
protected getNativeConnection(reason: string): Connection;
|
|
95
|
+
private validateNativeAccessReason;
|
|
93
96
|
read(id: string, serviceOptions?: ServiceOptions): Promise<Model>;
|
|
94
97
|
read(filter: FilterArgs | {
|
|
95
98
|
filterQuery?: QueryFilter<any>;
|
|
@@ -35,7 +35,11 @@ class CrudService extends module_service_1.ModuleService {
|
|
|
35
35
|
serviceOptions = (0, input_helper_1.prepareServiceOptionsForCreate)(serviceOptions);
|
|
36
36
|
return this.process(async (data) => {
|
|
37
37
|
const currentUserId = serviceOptions?.currentUser?.id;
|
|
38
|
-
return new this.mainDbModel({
|
|
38
|
+
return new this.mainDbModel({
|
|
39
|
+
...data.input,
|
|
40
|
+
createdBy: currentUserId,
|
|
41
|
+
updatedBy: currentUserId,
|
|
42
|
+
}).save();
|
|
39
43
|
}, { input, serviceOptions });
|
|
40
44
|
}
|
|
41
45
|
async createForce(input, serviceOptions = {}) {
|
|
@@ -160,7 +164,7 @@ class CrudService extends module_service_1.ModuleService {
|
|
|
160
164
|
}, { input: filter, outputPath: 'items', serviceOptions });
|
|
161
165
|
}
|
|
162
166
|
async findAndCountForce(filter, serviceOptions = {}) {
|
|
163
|
-
serviceOptions.
|
|
167
|
+
serviceOptions.force = true;
|
|
164
168
|
return this.findAndCount(filter, serviceOptions);
|
|
165
169
|
}
|
|
166
170
|
async findAndCountRaw(filter, serviceOptions = {}) {
|
|
@@ -224,6 +228,24 @@ class CrudService extends module_service_1.ModuleService {
|
|
|
224
228
|
getModel() {
|
|
225
229
|
return this.mainDbModel;
|
|
226
230
|
}
|
|
231
|
+
getNativeCollection(reason) {
|
|
232
|
+
this.validateNativeAccessReason(reason, 'getNativeCollection');
|
|
233
|
+
const modelName = this.mainDbModel?.modelName || 'Unknown';
|
|
234
|
+
common_1.Logger.warn(`[SECURITY] Native collection access: ${reason} (Model: ${modelName})`, this.constructor.name);
|
|
235
|
+
return this.mainDbModel.collection;
|
|
236
|
+
}
|
|
237
|
+
getNativeConnection(reason) {
|
|
238
|
+
this.validateNativeAccessReason(reason, 'getNativeConnection');
|
|
239
|
+
const modelName = this.mainDbModel?.modelName || 'Unknown';
|
|
240
|
+
common_1.Logger.warn(`[SECURITY] Native connection access: ${reason} (Model: ${modelName})`, this.constructor.name);
|
|
241
|
+
return this.mainDbModel.db;
|
|
242
|
+
}
|
|
243
|
+
validateNativeAccessReason(reason, method) {
|
|
244
|
+
const trimmed = reason?.trim();
|
|
245
|
+
if (!trimmed || trimmed.length < 20) {
|
|
246
|
+
throw new Error(`${method} requires a meaningful reason (min 20 chars) — explain why native access is needed`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
227
249
|
async read(input, serviceOptions) {
|
|
228
250
|
if (typeof input === 'string') {
|
|
229
251
|
return this.get(input, serviceOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.service.js","sourceRoot":"","sources":["../../../../src/core/common/services/crud.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"crud.service.js","sourceRoot":"","sources":["../../../../src/core/common/services/crud.service.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAC3D,uCAUkB;AAElB,qDAAiD;AACjD,oDAAoD;AACpD,4DAAoE;AACpE,0DAAqF;AAGrF,2EAAiE;AAEjE,qDAAiD;AACjD,qDAAiD;AAEjD,MAAsB,WAIpB,SAAQ,8BAAoB;IAO5B,KAAK,CAAC,SAAS,CACb,QAAyB,EACzB,cAAyE;QAEzE,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,IAAI,EAAE;YACT,MAAM,gBAAgB,GAAG,cAAc,EAAE,gBAAgB,IAAI,EAAE,CAAC;YAChE,MAAM,SAAS,GAAG,cAAc,EAAE,SAAS,IAAI,8BAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACvF,IAAI,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;gBAC7C,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;YACzC,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,CAAC,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,cAAc,CAAU,QAAyB,EAAE,iBAAiC,EAAE;QAC1F,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IAMD,KAAK,CAAC,YAAY,CAAU,QAAyB,EAAE,iBAAiC,EAAE;QACxF,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACvD,CAAC;IAKD,KAAK,CAAC,MAAM,CAAC,KAA+B,EAAE,cAA+B;QAC3E,cAAc,GAAG,IAAA,6CAA8B,EAAC,cAAc,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,aAAa,GAAG,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC;YACtD,OAAO,IAAK,IAAI,CAAC,WAA+C,CAAC;gBAC/D,GAAG,IAAI,CAAC,KAAK;gBACb,SAAS,EAAE,aAAa;gBACxB,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,KAAK,EAAE,cAAc,EAAE,CAC1B,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,KAA+B,EAAE,iBAAiC,EAAE;QACpF,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC5C,CAAC;IAMD,KAAK,CAAC,SAAS,CAAC,KAA+B,EAAE,iBAAiC,EAAE;QAClF,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACjD,CAAC;IAKD,QAAQ,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAuB,CAAC;IACzE,CAAC;IAKD,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,cAA+B;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,0BAAiB,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;IAC1E,CAAC;IAMD,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,iBAAiC,EAAE;QAC5D,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IACtC,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,iBAAiC,EAAE;QAC1D,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAC3C,CAAC;IAKD,KAAK,CAAC,IAAI,CACR,MAAuG,EACvG,cAA+B;QAI/B,IAAI,CAAC,CAAC,MAAM,YAAY,wBAAU,CAAC,IAAI,cAAc,EAAE,SAAS,KAAK,wBAAU,EAAE,CAAC;YAChF,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EAAE,IAAI,EAAE,EAAE;YAEb,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;YACjE,CAAC;YAGD,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YACvG,IAAI,IAAI,EAAE,KAAK,YAAY,wBAAU,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,IAAA,wCAAwB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvD,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;YAGD,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;YAC1F,MAAM,SAAS,GAAG,cAAc,EAAE,SAAS,IAAI,8BAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACvF,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;gBAC3B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAQ,CAAC;YACnD,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC,EACD,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAClC,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,SAAS,CACb,MAAuG,EACvG,iBAAiC,EAAE;QAEnC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,CAAC;IAMD,KAAK,CAAC,OAAO,CACX,MAAuG,EACvG,iBAAiC,EAAE;QAEnC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,CAAC;IAKD,KAAK,CAAC,YAAY,CAChB,MAAuG,EACvG,cAA+B;QAQ/B,IAAI,CAAC,CAAC,MAAM,YAAY,wBAAU,CAAC,IAAI,cAAc,EAAE,SAAS,KAAK,wBAAU,EAAE,CAAC;YAChF,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EAAE,IAAI,EAAE,EAAE;YAEb,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YACvG,IAAI,IAAI,EAAE,KAAK,YAAY,wBAAU,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,IAAA,wCAAwB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvD,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;YAGD,MAAM,WAAW,GAAoB,EAAE,CAAC;YAGxC,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC5B,WAAW,CAAC,IAAI,CAAC;oBACf,MAAM,EAAE,WAAW,CAAC,WAAW;iBAChC,CAAC,CAAC;YACL,CAAC;YAGD,MAAM,KAAK,GAAG;gBACZ,KAAK,EAAE,EAAE;gBACT,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;aAClC,CAAC;YAGF,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gBAE7B,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC;gBACzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBAGD,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBAGD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBAClC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YAGD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1D,CAAC;YAGD,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAGpC,MAAM,SAAS,GAAG,cAAc,EAAE,SAAS,IAAI,8BAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACvF,MAAM,QAAQ,GACZ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YAC3D,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAGrF,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;YACpD,QAAQ,CAAC,UAAU,GAAG,sCAAc,CAAC,MAAM,CAAC;gBAC1C,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CACvD,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,iBAAiB,CACrB,MAAuG,EACvG,iBAAiC,EAAE;QAEnC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC;IAMD,KAAK,CAAC,eAAe,CACnB,MAAuG,EACvG,iBAAiC,EAAE;QAEnC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IAKD,KAAK,CAAC,aAAa,CACjB,MAAsG,EACtG,MAAgC,EAChC,cAA+B;QAE/B,MAAM,OAAO,GAAY,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAA,wBAAY,EAAC,MAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAMD,KAAK,CAAC,kBAAkB,CACtB,MAAsG,EACtG,MAAgC,EAChC,iBAAiC,EAAE;QAEnC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;IAMD,KAAK,CAAC,gBAAgB,CACpB,MAAsG,EACtG,MAAgC,EAChC,iBAAiC,EAAE;QAEnC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;IAKD,KAAK,CAAC,OAAO,CACX,MAAqF,EACrF,cAA+B;QAI/B,IAAI,CAAC,CAAC,MAAM,YAAY,wBAAU,CAAC,IAAI,cAAc,EAAE,SAAS,KAAK,wBAAU,EAAE,CAAC;YAChF,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EAAE,IAAI,EAAE,EAAE;YAEb,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YACvG,IAAI,IAAI,EAAE,KAAK,YAAY,wBAAU,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,IAAA,wCAAwB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvD,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;YAGD,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;YAC7F,MAAM,SAAS,GAAG,cAAc,EAAE,SAAS,IAAI,8BAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACvF,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;gBAC3B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAQ,CAAC;YACnD,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC,EACD,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAClC,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,YAAY,CAChB,MAAuG,EACvG,iBAAiC,EAAE;QAEnC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9C,CAAC;IAMD,KAAK,CAAC,UAAU,CACd,MAAuG,EACvG,iBAAiC,EAAE;QAEnC,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC;IAUD,QAAQ;QACN,OAAO,IAAI,CAAC,WAAyD,CAAC;IACxE,CAAC;IAoBS,mBAAmB,CAAC,MAAc;QAC1C,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAI,IAAI,CAAC,WAAmB,EAAE,SAAS,IAAI,SAAS,CAAC;QACpE,eAAM,CAAC,IAAI,CAAC,wCAAwC,MAAM,YAAY,SAAS,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE3G,OAAQ,IAAI,CAAC,WAA0D,CAAC,UAAU,CAAC;IACrF,CAAC;IAqBS,mBAAmB,CAAC,MAAc;QAC1C,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAI,IAAI,CAAC,WAAmB,EAAE,SAAS,IAAI,SAAS,CAAC;QACpE,eAAM,CAAC,IAAI,CAAC,wCAAwC,MAAM,YAAY,SAAS,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE3G,OAAQ,IAAI,CAAC,WAA0D,CAAC,EAAE,CAAC;IAC7E,CAAC;IAEO,0BAA0B,CAAC,MAAc,EAAE,MAAc;QAC/D,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,oFAAoF,CAAC,CAAC;QACjH,CAAC;IACH,CAAC;IAkBD,KAAK,CAAC,IAAI,CACR,KAA4F,EAC5F,cAA+B;QAE/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAqBD,KAAK,CAAC,SAAS,CACb,KAA4F,EAC5F,cAA+B;QAE/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAqBD,KAAK,CAAC,OAAO,CACX,KAA4F,EAC5F,cAA+B;QAE/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,KAA+B,EAAE,cAA+B;QACvF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,0BAAiB,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,aAAa,GAAG,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,IAAA,yBAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1F,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC,EACD,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CACpC,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,KAA+B,EAAE,cAA+B;QAC5F,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAChD,CAAC;IAMD,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,KAA+B,EAAE,cAA+B;QAC1F,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC;IAKD,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,cAA+B;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,0BAAiB,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,IAAI,EAAE;YACT,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACpD,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,EAAE,QAAQ,EAAE,cAAc,EAAE,CAC7B,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,cAA+B;QAC3D,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IACzC,CAAC;IAMD,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,cAA+B;QACzD,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAC9C,CAAC;IASD,KAAK,CAAC,sBAAsB,CAC1B,eAAgE,EAChE,cAA+B;QAE/B,OAAO,IAAI,CAAC,OAAO,CACjB,GAAG,EAAE;YACH,IAAI,eAAe,YAAY,gBAAK,EAAE,CAAC;gBACrC,IAAI,cAAc,EAAE,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI,OAAO,eAAe,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACrG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;YACD,OAAO,eAAe,CAAC;QACzB,CAAC,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IACJ,CAAC;CACF;AAtrBD,kCAsrBC"}
|