@flusys/nestjs-shared 7.0.2 → 8.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/classes/api-controller.class.d.ts +4 -4
- package/classes/api-service.class.d.ts +7 -7
- package/classes/disabled-event-bus.class.d.ts +1 -1
- package/classes/domain-event.publisher.d.ts +1 -1
- package/classes/event-bus.registry.d.ts +1 -1
- package/classes/event-transports/event-transport.registry.d.ts +1 -1
- package/classes/event-transports/index.d.ts +2 -2
- package/classes/event-transports/kafka-transport.optional.d.ts +1 -1
- package/classes/event-transports/memory-transport.d.ts +1 -1
- package/classes/event-transports/rabbitmq-transport.optional.d.ts +1 -1
- package/classes/hybrid-event-bus.class.d.ts +1 -1
- package/classes/index.d.ts +11 -11
- package/constants/index.d.ts +2 -2
- package/constants/permissions.d.ts +12 -0
- package/decorators/api-response.decorator.d.ts +1 -1
- package/decorators/current-user.decorator.d.ts +1 -1
- package/decorators/index.d.ts +6 -6
- package/decorators/require-permission.decorator.d.ts +1 -1
- package/dtos/filter-and-pagination.dto.d.ts +1 -1
- package/dtos/index.d.ts +6 -6
- package/entities/index.d.ts +3 -3
- package/enums/index.d.ts +3 -3
- package/exceptions/index.d.ts +2 -2
- package/fesm/470.js +2713 -0
- package/fesm/509.js +793 -0
- package/fesm/667.js +606 -0
- package/fesm/67.js +808 -0
- package/fesm/720.js +914 -0
- package/{cjs/classes/event-transports/rabbitmq-transport.optional.js → fesm/chunks/123.js} +78 -55
- package/fesm/{classes/event-transports/kafka-transport.optional.js → chunks/37.js} +74 -41
- package/fesm/classes/index.js +62 -12
- package/fesm/constants/index.js +445 -17
- package/fesm/decorators/index.js +341 -6
- package/fesm/dtos/index.js +23 -6
- package/fesm/entities/index.js +336 -3
- package/fesm/enums/index.js +57 -3
- package/fesm/exceptions/index.js +280 -2
- package/fesm/guards/index.js +1003 -3
- package/fesm/index.js +1524 -14
- package/fesm/interceptors/index.js +924 -5
- package/fesm/interfaces/index.js +57 -11
- package/fesm/middlewares/index.js +33 -1
- package/fesm/modules/index.js +432 -9
- package/fesm/runtime.js +134 -0
- package/fesm/utils/index.js +1045 -8
- package/filters/global-exception.filter.d.ts +1 -1
- package/filters/index.d.ts +1 -1
- package/guards/index.d.ts +3 -3
- package/guards/jwt-auth.guard.d.ts +1 -1
- package/guards/optional-jwt-auth.guard.d.ts +1 -1
- package/guards/permission.guard.d.ts +2 -2
- package/index.d.ts +14 -14
- package/interceptors/delete-empty-id-from-body.interceptor.d.ts +1 -1
- package/interceptors/idempotency.interceptor.d.ts +2 -2
- package/interceptors/index.d.ts +5 -5
- package/interceptors/response-meta.interceptor.d.ts +1 -1
- package/interceptors/set-user-field-on-body.interceptor.d.ts +1 -1
- package/interceptors/slug.interceptor.d.ts +2 -2
- package/interfaces/ai-assistant-adapter.interface.d.ts +1 -1
- package/interfaces/api.interface.d.ts +2 -2
- package/interfaces/datasource.interface.d.ts +1 -1
- package/interfaces/event-manager-adapter.interface.d.ts +2 -2
- package/interfaces/index.d.ts +11 -11
- package/interfaces/module-config.interface.d.ts +1 -1
- package/interfaces/notification-adapter.interface.d.ts +1 -1
- package/middlewares/index.d.ts +1 -1
- package/middlewares/logger.middleware.d.ts +2 -2
- package/modules/cache/cache.module.d.ts +1 -1
- package/modules/datasource/index.d.ts +1 -1
- package/modules/datasource/multi-tenant-datasource.service.d.ts +4 -4
- package/modules/event-bus/event-bus.explorer.d.ts +2 -2
- package/modules/event-bus/event-bus.module.d.ts +2 -2
- package/modules/event-bus/module-events.provider.d.ts +1 -1
- package/modules/index.d.ts +9 -9
- package/modules/shared-permission-cache/shared-permission-cache.service.d.ts +3 -3
- package/modules/utils/utils.service.d.ts +1 -1
- package/package.json +30 -44
- package/utils/index.d.ts +8 -8
- package/utils/permission-cache-key.util.d.ts +1 -1
- package/utils/query-helpers.util.d.ts +2 -2
- package/utils/request.util.d.ts +1 -1
- package/cjs/classes/api-controller.class.js +0 -728
- package/cjs/classes/api-controller.class.spec.js +0 -684
- package/cjs/classes/api-service.class.js +0 -631
- package/cjs/classes/api-service.class.spec.js +0 -1137
- package/cjs/classes/disabled-event-bus.class.js +0 -15
- package/cjs/classes/disabled-event-bus.class.spec.js +0 -40
- package/cjs/classes/domain-event.publisher.js +0 -76
- package/cjs/classes/domain-event.publisher.spec.js +0 -234
- package/cjs/classes/event-bus.registry.js +0 -68
- package/cjs/classes/event-bus.registry.spec.js +0 -141
- package/cjs/classes/event-transports/event-transport.registry.js +0 -41
- package/cjs/classes/event-transports/event-transport.registry.spec.js +0 -31
- package/cjs/classes/event-transports/index.js +0 -23
- package/cjs/classes/event-transports/kafka-transport.optional.js +0 -151
- package/cjs/classes/event-transports/kafka-transport.optional.spec.js +0 -198
- package/cjs/classes/event-transports/memory-transport.js +0 -53
- package/cjs/classes/event-transports/memory-transport.spec.js +0 -57
- package/cjs/classes/event-transports/rabbitmq-transport.optional.spec.js +0 -255
- package/cjs/classes/handle-custome-db.js +0 -37
- package/cjs/classes/handle-custome-db.spec.js +0 -82
- package/cjs/classes/hybrid-cache.class.js +0 -96
- package/cjs/classes/hybrid-cache.class.spec.js +0 -168
- package/cjs/classes/hybrid-event-bus.class.js +0 -281
- package/cjs/classes/hybrid-event-bus.class.spec.js +0 -218
- package/cjs/classes/index.js +0 -28
- package/cjs/classes/winston.logger.class.js +0 -274
- package/cjs/classes/winston.logger.class.spec.js +0 -330
- package/cjs/constants/index.js +0 -88
- package/cjs/constants/message-keys.js +0 -68
- package/cjs/constants/permissions.js +0 -297
- package/cjs/decorators/api-response.decorator.js +0 -52
- package/cjs/decorators/api-response.decorator.spec.js +0 -126
- package/cjs/decorators/current-user.decorator.js +0 -16
- package/cjs/decorators/current-user.decorator.spec.js +0 -74
- package/cjs/decorators/index.js +0 -23
- package/cjs/decorators/log-action.decorator.js +0 -149
- package/cjs/decorators/log-action.decorator.spec.js +0 -353
- package/cjs/decorators/on-domain-event.decorator.js +0 -13
- package/cjs/decorators/on-domain-event.decorator.spec.js +0 -50
- package/cjs/decorators/public.decorator.js +0 -13
- package/cjs/decorators/public.decorator.spec.js +0 -50
- package/cjs/decorators/require-permission.decorator.js +0 -32
- package/cjs/decorators/require-permission.decorator.spec.js +0 -147
- package/cjs/dtos/delete.dto.js +0 -92
- package/cjs/dtos/filter-and-pagination.dto.js +0 -164
- package/cjs/dtos/get-by-ids.dto.js +0 -65
- package/cjs/dtos/identity-response.dto.js +0 -108
- package/cjs/dtos/index.js +0 -23
- package/cjs/dtos/pagination.dto.js +0 -67
- package/cjs/dtos/response-payload.dto.js +0 -369
- package/cjs/entities/identity.js +0 -100
- package/cjs/entities/index.js +0 -20
- package/cjs/entities/raw-type.js +0 -4
- package/cjs/entities/user-root.js +0 -189
- package/cjs/enums/index.js +0 -20
- package/cjs/enums/notification-type.enum.js +0 -17
- package/cjs/enums/participant-status.enum.js +0 -17
- package/cjs/enums/recurrence-type.enum.js +0 -18
- package/cjs/exceptions/base-app.exception.js +0 -151
- package/cjs/exceptions/base-app.exception.spec.js +0 -157
- package/cjs/exceptions/index.js +0 -19
- package/cjs/exceptions/permission.exception.js +0 -56
- package/cjs/exceptions/permission.exception.spec.js +0 -82
- package/cjs/filters/global-exception.filter.js +0 -279
- package/cjs/filters/global-exception.filter.spec.js +0 -440
- package/cjs/filters/index.js +0 -18
- package/cjs/guards/index.js +0 -20
- package/cjs/guards/jwt-auth.guard.js +0 -75
- package/cjs/guards/jwt-auth.guard.spec.js +0 -75
- package/cjs/guards/optional-jwt-auth.guard.js +0 -67
- package/cjs/guards/optional-jwt-auth.guard.spec.js +0 -55
- package/cjs/guards/permission.guard.js +0 -179
- package/cjs/guards/permission.guard.spec.js +0 -373
- package/cjs/index.js +0 -31
- package/cjs/interceptors/delete-empty-id-from-body.interceptor.js +0 -40
- package/cjs/interceptors/delete-empty-id-from-body.interceptor.spec.js +0 -107
- package/cjs/interceptors/idempotency.interceptor.js +0 -96
- package/cjs/interceptors/idempotency.interceptor.spec.js +0 -116
- package/cjs/interceptors/index.js +0 -22
- package/cjs/interceptors/response-meta.interceptor.js +0 -47
- package/cjs/interceptors/response-meta.interceptor.spec.js +0 -89
- package/cjs/interceptors/set-user-field-on-body.interceptor.js +0 -60
- package/cjs/interceptors/set-user-field-on-body.interceptor.spec.js +0 -128
- package/cjs/interceptors/slug.interceptor.js +0 -75
- package/cjs/interceptors/slug.interceptor.spec.js +0 -110
- package/cjs/interfaces/ai-assistant-adapter.interface.js +0 -24
- package/cjs/interfaces/api.interface.js +0 -4
- package/cjs/interfaces/datasource.interface.js +0 -4
- package/cjs/interfaces/event-bus.interface.js +0 -4
- package/cjs/interfaces/event-manager-adapter.interface.js +0 -11
- package/cjs/interfaces/identity.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -28
- package/cjs/interfaces/logged-user-info.interface.js +0 -6
- package/cjs/interfaces/module-config.interface.js +0 -4
- package/cjs/interfaces/notification-adapter.interface.js +0 -11
- package/cjs/interfaces/permission-sync-adapter.interface.js +0 -11
- package/cjs/interfaces/permission.interface.js +0 -4
- package/cjs/middlewares/index.js +0 -18
- package/cjs/middlewares/logger.middleware.js +0 -264
- package/cjs/middlewares/logger.middleware.spec.js +0 -462
- package/cjs/modules/cache/cache.module.js +0 -39
- package/cjs/modules/cache/cache.module.spec.js +0 -48
- package/cjs/modules/datasource/index.js +0 -18
- package/cjs/modules/datasource/multi-tenant-datasource.service.js +0 -222
- package/cjs/modules/datasource/multi-tenant-datasource.service.spec.js +0 -381
- package/cjs/modules/event-bus/event-bus.explorer.js +0 -124
- package/cjs/modules/event-bus/event-bus.explorer.spec.js +0 -189
- package/cjs/modules/event-bus/event-bus.integration.spec.js +0 -253
- package/cjs/modules/event-bus/event-bus.module.js +0 -94
- package/cjs/modules/event-bus/event-bus.module.spec.js +0 -149
- package/cjs/modules/event-bus/module-events.provider.js +0 -39
- package/cjs/modules/event-bus/module-events.provider.spec.js +0 -56
- package/cjs/modules/index.js +0 -26
- package/cjs/modules/shared-permission-cache/shared-permission-cache.module.js +0 -32
- package/cjs/modules/shared-permission-cache/shared-permission-cache.service.js +0 -101
- package/cjs/modules/shared-permission-cache/shared-permission-cache.service.spec.js +0 -165
- package/cjs/modules/utils/utils.module.js +0 -32
- package/cjs/modules/utils/utils.service.js +0 -76
- package/cjs/modules/utils/utils.service.spec.js +0 -169
- package/cjs/utils/date-time.util.js +0 -94
- package/cjs/utils/date-time.util.spec.js +0 -84
- package/cjs/utils/event-pattern.util.js +0 -103
- package/cjs/utils/event-pattern.util.spec.js +0 -251
- package/cjs/utils/html-sanitizer.util.js +0 -64
- package/cjs/utils/html-sanitizer.util.spec.js +0 -76
- package/cjs/utils/index.js +0 -25
- package/cjs/utils/optional-module.util.js +0 -35
- package/cjs/utils/optional-module.util.spec.js +0 -14
- package/cjs/utils/permission-cache-key.util.js +0 -31
- package/cjs/utils/permission-cache-key.util.spec.js +0 -88
- package/cjs/utils/query-helpers.util.js +0 -60
- package/cjs/utils/query-helpers.util.spec.js +0 -209
- package/cjs/utils/request.util.js +0 -96
- package/cjs/utils/request.util.spec.js +0 -249
- package/cjs/utils/string.util.js +0 -63
- package/cjs/utils/string.util.spec.js +0 -63
- package/fesm/classes/api-controller.class.js +0 -718
- package/fesm/classes/api-controller.class.spec.js +0 -680
- package/fesm/classes/api-service.class.js +0 -621
- package/fesm/classes/api-service.class.spec.js +0 -1133
- package/fesm/classes/disabled-event-bus.class.js +0 -11
- package/fesm/classes/disabled-event-bus.class.spec.js +0 -36
- package/fesm/classes/domain-event.publisher.js +0 -63
- package/fesm/classes/domain-event.publisher.spec.js +0 -230
- package/fesm/classes/event-bus.registry.js +0 -64
- package/fesm/classes/event-bus.registry.spec.js +0 -137
- package/fesm/classes/event-transports/event-transport.registry.js +0 -35
- package/fesm/classes/event-transports/event-transport.registry.spec.js +0 -27
- package/fesm/classes/event-transports/index.js +0 -6
- package/fesm/classes/event-transports/kafka-transport.optional.spec.js +0 -194
- package/fesm/classes/event-transports/memory-transport.js +0 -49
- package/fesm/classes/event-transports/memory-transport.spec.js +0 -53
- package/fesm/classes/event-transports/rabbitmq-transport.optional.js +0 -174
- package/fesm/classes/event-transports/rabbitmq-transport.optional.spec.js +0 -251
- package/fesm/classes/handle-custome-db.js +0 -19
- package/fesm/classes/handle-custome-db.spec.js +0 -78
- package/fesm/classes/hybrid-cache.class.js +0 -81
- package/fesm/classes/hybrid-cache.class.spec.js +0 -164
- package/fesm/classes/hybrid-event-bus.class.js +0 -237
- package/fesm/classes/hybrid-event-bus.class.spec.js +0 -214
- package/fesm/classes/winston.logger.class.js +0 -228
- package/fesm/classes/winston.logger.class.spec.js +0 -327
- package/fesm/constants/message-keys.js +0 -49
- package/fesm/constants/permissions.js +0 -208
- package/fesm/decorators/api-response.decorator.js +0 -42
- package/fesm/decorators/api-response.decorator.spec.js +0 -122
- package/fesm/decorators/current-user.decorator.js +0 -18
- package/fesm/decorators/current-user.decorator.spec.js +0 -73
- package/fesm/decorators/log-action.decorator.js +0 -139
- package/fesm/decorators/log-action.decorator.spec.js +0 -349
- package/fesm/decorators/on-domain-event.decorator.js +0 -10
- package/fesm/decorators/on-domain-event.decorator.spec.js +0 -46
- package/fesm/decorators/public.decorator.js +0 -20
- package/fesm/decorators/public.decorator.spec.js +0 -46
- package/fesm/decorators/require-permission.decorator.js +0 -27
- package/fesm/decorators/require-permission.decorator.spec.js +0 -143
- package/fesm/dtos/delete.dto.js +0 -82
- package/fesm/dtos/filter-and-pagination.dto.js +0 -148
- package/fesm/dtos/get-by-ids.dto.js +0 -55
- package/fesm/dtos/identity-response.dto.js +0 -98
- package/fesm/dtos/pagination.dto.js +0 -57
- package/fesm/dtos/response-payload.dto.js +0 -336
- package/fesm/entities/identity.js +0 -90
- package/fesm/entities/raw-type.js +0 -1
- package/fesm/entities/user-root.js +0 -179
- package/fesm/enums/notification-type.enum.js +0 -7
- package/fesm/enums/participant-status.enum.js +0 -7
- package/fesm/enums/recurrence-type.enum.js +0 -8
- package/fesm/exceptions/base-app.exception.js +0 -115
- package/fesm/exceptions/base-app.exception.spec.js +0 -153
- package/fesm/exceptions/permission.exception.js +0 -35
- package/fesm/exceptions/permission.exception.spec.js +0 -78
- package/fesm/filters/global-exception.filter.js +0 -269
- package/fesm/filters/global-exception.filter.spec.js +0 -436
- package/fesm/filters/index.js +0 -1
- package/fesm/guards/jwt-auth.guard.js +0 -65
- package/fesm/guards/jwt-auth.guard.spec.js +0 -71
- package/fesm/guards/optional-jwt-auth.guard.js +0 -57
- package/fesm/guards/optional-jwt-auth.guard.spec.js +0 -51
- package/fesm/guards/permission.guard.js +0 -169
- package/fesm/guards/permission.guard.spec.js +0 -369
- package/fesm/interceptors/delete-empty-id-from-body.interceptor.js +0 -30
- package/fesm/interceptors/delete-empty-id-from-body.interceptor.spec.js +0 -103
- package/fesm/interceptors/idempotency.interceptor.js +0 -86
- package/fesm/interceptors/idempotency.interceptor.spec.js +0 -112
- package/fesm/interceptors/response-meta.interceptor.js +0 -37
- package/fesm/interceptors/response-meta.interceptor.spec.js +0 -85
- package/fesm/interceptors/set-user-field-on-body.interceptor.js +0 -39
- package/fesm/interceptors/set-user-field-on-body.interceptor.spec.js +0 -124
- package/fesm/interceptors/slug.interceptor.js +0 -65
- package/fesm/interceptors/slug.interceptor.spec.js +0 -106
- package/fesm/interfaces/ai-assistant-adapter.interface.js +0 -3
- package/fesm/interfaces/api.interface.js +0 -1
- package/fesm/interfaces/datasource.interface.js +0 -1
- package/fesm/interfaces/event-bus.interface.js +0 -1
- package/fesm/interfaces/event-manager-adapter.interface.js +0 -1
- package/fesm/interfaces/identity.interface.js +0 -1
- package/fesm/interfaces/logged-user-info.interface.js +0 -3
- package/fesm/interfaces/module-config.interface.js +0 -5
- package/fesm/interfaces/notification-adapter.interface.js +0 -1
- package/fesm/interfaces/permission-sync-adapter.interface.js +0 -1
- package/fesm/interfaces/permission.interface.js +0 -1
- package/fesm/middlewares/logger.middleware.js +0 -235
- package/fesm/middlewares/logger.middleware.spec.js +0 -459
- package/fesm/modules/cache/cache.module.js +0 -29
- package/fesm/modules/cache/cache.module.spec.js +0 -44
- package/fesm/modules/datasource/index.js +0 -1
- package/fesm/modules/datasource/multi-tenant-datasource.service.js +0 -212
- package/fesm/modules/datasource/multi-tenant-datasource.service.spec.js +0 -377
- package/fesm/modules/event-bus/event-bus.explorer.js +0 -114
- package/fesm/modules/event-bus/event-bus.explorer.spec.js +0 -185
- package/fesm/modules/event-bus/event-bus.integration.spec.js +0 -249
- package/fesm/modules/event-bus/event-bus.module.js +0 -84
- package/fesm/modules/event-bus/event-bus.module.spec.js +0 -145
- package/fesm/modules/event-bus/module-events.provider.js +0 -26
- package/fesm/modules/event-bus/module-events.provider.spec.js +0 -52
- package/fesm/modules/shared-permission-cache/shared-permission-cache.module.js +0 -22
- package/fesm/modules/shared-permission-cache/shared-permission-cache.service.js +0 -91
- package/fesm/modules/shared-permission-cache/shared-permission-cache.service.spec.js +0 -161
- package/fesm/modules/utils/utils.module.js +0 -22
- package/fesm/modules/utils/utils.service.js +0 -66
- package/fesm/modules/utils/utils.service.spec.js +0 -165
- package/fesm/utils/date-time.util.js +0 -70
- package/fesm/utils/date-time.util.spec.js +0 -80
- package/fesm/utils/event-pattern.util.js +0 -91
- package/fesm/utils/event-pattern.util.spec.js +0 -247
- package/fesm/utils/html-sanitizer.util.js +0 -69
- package/fesm/utils/html-sanitizer.util.spec.js +0 -72
- package/fesm/utils/optional-module.util.js +0 -25
- package/fesm/utils/optional-module.util.spec.js +0 -10
- package/fesm/utils/permission-cache-key.util.js +0 -10
- package/fesm/utils/permission-cache-key.util.spec.js +0 -84
- package/fesm/utils/query-helpers.util.js +0 -85
- package/fesm/utils/query-helpers.util.spec.js +0 -205
- package/fesm/utils/request.util.js +0 -81
- package/fesm/utils/request.util.spec.js +0 -245
- package/fesm/utils/string.util.js +0 -71
- package/fesm/utils/string.util.spec.js +0 -59
package/fesm/guards/index.js
CHANGED
|
@@ -1,3 +1,1003 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import * as __rspack_external__flusys_nestjs_core_config_197fa0a9 from "@flusys/nestjs-core/config";
|
|
2
|
+
import * as __rspack_external__nestjs_common_a04939da from "@nestjs/common";
|
|
3
|
+
import * as __rspack_external__nestjs_core_d7b00a1a from "@nestjs/core";
|
|
4
|
+
import * as __rspack_external__nestjs_passport_18907953 from "@nestjs/passport";
|
|
5
|
+
import * as __rspack_external__keyv_redis_139d03ca from "@keyv/redis";
|
|
6
|
+
import * as __rspack_external_cacheable from "cacheable";
|
|
7
|
+
import * as __rspack_external_keyv from "keyv";
|
|
8
|
+
export const __rspack_esm_id = 333;
|
|
9
|
+
export const __rspack_esm_ids = [333];
|
|
10
|
+
export const __webpack_modules__ = {
|
|
11
|
+
375(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
12
|
+
|
|
13
|
+
// EXPORTS
|
|
14
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
15
|
+
l: () => (/* binding */ HybridCache)
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// EXTERNAL MODULE: external "@flusys/nestjs-core/config"
|
|
19
|
+
var config_ = __webpack_require__(307);
|
|
20
|
+
;// CONCATENATED MODULE: external "@keyv/redis"
|
|
21
|
+
|
|
22
|
+
;// CONCATENATED MODULE: external "cacheable"
|
|
23
|
+
|
|
24
|
+
;// CONCATENATED MODULE: external "keyv"
|
|
25
|
+
|
|
26
|
+
;// CONCATENATED MODULE: ./projects/nestjs-shared/src/classes/hybrid-cache.class.ts
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class HybridCache {
|
|
32
|
+
memory;
|
|
33
|
+
redis;
|
|
34
|
+
constructor(memoryTtl = 60 * 1000, memorySize = 5000){
|
|
35
|
+
// Default to 'memory' if not specified
|
|
36
|
+
const useCacheLabel = config_.envConfig.tryGetValue('USE_CACHE_LABEL', false) || 'memory';
|
|
37
|
+
if (useCacheLabel === 'memory' || useCacheLabel === 'hybrid') {
|
|
38
|
+
this.memory = new __rspack_external_keyv["default"]({
|
|
39
|
+
store: new __rspack_external_cacheable.CacheableMemory({
|
|
40
|
+
ttl: memoryTtl,
|
|
41
|
+
lruSize: memorySize
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (useCacheLabel === 'redis' || useCacheLabel === 'hybrid') {
|
|
46
|
+
this.redis = new __rspack_external_keyv["default"]({
|
|
47
|
+
store: new __rspack_external__keyv_redis_139d03ca["default"](config_.envConfig.getRedisUrl())
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async get(key) {
|
|
52
|
+
// Prefer memory first if available
|
|
53
|
+
if (this.memory) {
|
|
54
|
+
const value = await this.memory.get(key);
|
|
55
|
+
if (value !== undefined) return value;
|
|
56
|
+
}
|
|
57
|
+
// Fallback to redis
|
|
58
|
+
if (this.redis) {
|
|
59
|
+
const value = await this.redis.get(key);
|
|
60
|
+
if (value !== undefined && this.memory) {
|
|
61
|
+
// backfill L1 memory cache
|
|
62
|
+
await this.memory.set(key, value);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
async set(key, value, ttl) {
|
|
69
|
+
if (this.memory) {
|
|
70
|
+
await this.memory.set(key, value, ttl);
|
|
71
|
+
}
|
|
72
|
+
if (this.redis) {
|
|
73
|
+
await this.redis.set(key, value, ttl);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async del(key) {
|
|
77
|
+
if (this.memory) {
|
|
78
|
+
await this.memory.delete(key);
|
|
79
|
+
}
|
|
80
|
+
if (this.redis) {
|
|
81
|
+
await this.redis.delete(key);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async reset() {
|
|
85
|
+
if (this.memory) {
|
|
86
|
+
await this.memory.clear();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async resetL2() {
|
|
90
|
+
if (this.redis) {
|
|
91
|
+
await this.redis.clear();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
},
|
|
98
|
+
43(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
99
|
+
/* import */ var _permissions_js__rspack_import_0 = __webpack_require__(975);
|
|
100
|
+
/* import */ var _message_keys_js__rspack_import_1 = __webpack_require__(389);
|
|
101
|
+
// Metadata keys
|
|
102
|
+
const IS_PUBLIC_KEY = 'isPublic';
|
|
103
|
+
const PERMISSIONS_KEY = 'permissions';
|
|
104
|
+
const DOMAIN_EVENT_HANDLER_KEY = 'domainEventHandler';
|
|
105
|
+
// Injection tokens
|
|
106
|
+
const CACHE_INSTANCE = 'CACHE_INSTANCE';
|
|
107
|
+
const PERMISSION_GUARD_CONFIG = 'PERMISSION_GUARD_CONFIG';
|
|
108
|
+
const EVENT_BUS_INSTANCE = 'EVENT_BUS_INSTANCE';
|
|
109
|
+
const EVENT_BUS_MODULE_OPTIONS = 'EVENT_BUS_MODULE_OPTIONS';
|
|
110
|
+
// Header names
|
|
111
|
+
const IDEMPOTENCY_KEY_HEADER = 'x-idempotency-key';
|
|
112
|
+
const REQUEST_ID_HEADER = 'x-request-id';
|
|
113
|
+
const CLIENT_TYPE_HEADER = 'x-client-type';
|
|
114
|
+
// Cache key prefixes
|
|
115
|
+
const PERMISSIONS_CACHE_PREFIX = 'my-permissions';
|
|
116
|
+
const IDEMPOTENCY_CACHE_PREFIX = 'idempotency';
|
|
117
|
+
// Event bus defaults
|
|
118
|
+
const DEFAULT_EVENT_EXCHANGE = 'flusys.events';
|
|
119
|
+
const DEFAULT_EVENT_TOPIC = 'flusys.domain-events';
|
|
120
|
+
const DEFAULT_EVENT_SERVICE_NAME = 'flusys';
|
|
121
|
+
// Permission codes
|
|
122
|
+
|
|
123
|
+
// Message keys for localization
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
127
|
+
BC: () => (/* reexport safe */ _permissions_js__rspack_import_0.BC),
|
|
128
|
+
Bz: () => (/* reexport safe */ _permissions_js__rspack_import_0.Bz),
|
|
129
|
+
Em: () => (/* reexport safe */ _permissions_js__rspack_import_0.Em),
|
|
130
|
+
GT: () => (/* reexport safe */ _permissions_js__rspack_import_0.GT),
|
|
131
|
+
Jj: () => (/* reexport safe */ _permissions_js__rspack_import_0.Jj),
|
|
132
|
+
N3: () => (/* reexport safe */ _permissions_js__rspack_import_0.N3),
|
|
133
|
+
ON: () => (/* reexport safe */ _permissions_js__rspack_import_0.ON),
|
|
134
|
+
P0: () => (/* reexport safe */ _permissions_js__rspack_import_0.P0),
|
|
135
|
+
Q5: () => (/* reexport safe */ _permissions_js__rspack_import_0.Q5),
|
|
136
|
+
S6: () => (/* reexport safe */ _permissions_js__rspack_import_0.S6),
|
|
137
|
+
T: () => (/* reexport safe */ _permissions_js__rspack_import_0.T),
|
|
138
|
+
UB: () => (/* reexport safe */ _permissions_js__rspack_import_0.UB),
|
|
139
|
+
UG: () => (/* reexport safe */ _permissions_js__rspack_import_0.UG),
|
|
140
|
+
UU: () => (/* reexport safe */ _message_keys_js__rspack_import_1.UU),
|
|
141
|
+
Ub: () => (/* reexport safe */ _permissions_js__rspack_import_0.Ub),
|
|
142
|
+
V0: () => (/* reexport safe */ _permissions_js__rspack_import_0.V0),
|
|
143
|
+
Wc: () => (/* reexport safe */ _permissions_js__rspack_import_0.Wc),
|
|
144
|
+
Y3: () => (/* reexport safe */ _permissions_js__rspack_import_0.Y3),
|
|
145
|
+
Y7: () => (/* reexport safe */ _permissions_js__rspack_import_0.Y7),
|
|
146
|
+
_X: () => (/* reexport safe */ _permissions_js__rspack_import_0._X),
|
|
147
|
+
aO: () => (/* reexport safe */ _permissions_js__rspack_import_0.aO),
|
|
148
|
+
fS: () => (/* reexport safe */ _permissions_js__rspack_import_0.fS),
|
|
149
|
+
hg: () => (/* reexport safe */ _message_keys_js__rspack_import_1.hg),
|
|
150
|
+
l3: () => (/* reexport safe */ _permissions_js__rspack_import_0.l3),
|
|
151
|
+
mK: () => (/* reexport safe */ _message_keys_js__rspack_import_1.mK),
|
|
152
|
+
mV: () => (/* reexport safe */ _permissions_js__rspack_import_0.mV),
|
|
153
|
+
rH: () => (/* reexport safe */ _permissions_js__rspack_import_0.rH),
|
|
154
|
+
t$: () => (/* reexport safe */ _permissions_js__rspack_import_0.t$),
|
|
155
|
+
w7: () => (/* reexport safe */ _permissions_js__rspack_import_0.w7),
|
|
156
|
+
wA: () => (/* reexport safe */ _permissions_js__rspack_import_0.wA),
|
|
157
|
+
wM: () => (/* reexport safe */ _permissions_js__rspack_import_0.wM),
|
|
158
|
+
z$: () => (/* reexport safe */ _permissions_js__rspack_import_0.z$),
|
|
159
|
+
zd: () => (/* reexport safe */ _permissions_js__rspack_import_0.zd)
|
|
160
|
+
}, {
|
|
161
|
+
Hq: DEFAULT_EVENT_EXCHANGE,
|
|
162
|
+
Lw: PERMISSION_GUARD_CONFIG,
|
|
163
|
+
N7: PERMISSIONS_KEY,
|
|
164
|
+
PT: DOMAIN_EVENT_HANDLER_KEY,
|
|
165
|
+
Qj: EVENT_BUS_INSTANCE,
|
|
166
|
+
SL: EVENT_BUS_MODULE_OPTIONS,
|
|
167
|
+
fG: PERMISSIONS_CACHE_PREFIX,
|
|
168
|
+
iH: IDEMPOTENCY_KEY_HEADER,
|
|
169
|
+
jA: IS_PUBLIC_KEY,
|
|
170
|
+
kC: REQUEST_ID_HEADER,
|
|
171
|
+
mg: IDEMPOTENCY_CACHE_PREFIX,
|
|
172
|
+
nx: DEFAULT_EVENT_TOPIC,
|
|
173
|
+
xw: CLIENT_TYPE_HEADER,
|
|
174
|
+
zl: CACHE_INSTANCE
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
},
|
|
179
|
+
389(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
180
|
+
// ==================== AUTH (Shared across guards/interceptors) ====================
|
|
181
|
+
// These are duplicated in nestjs-auth but needed here to avoid circular dependencies
|
|
182
|
+
const AUTH_MESSAGES = {
|
|
183
|
+
TOKEN_REQUIRED: 'auth.token.required',
|
|
184
|
+
TOKEN_INVALID: 'auth.token.invalid',
|
|
185
|
+
ENTITY_BELOG_ANOTHER_COMPANY: 'entity.belongs.another.company',
|
|
186
|
+
COMPANY_NO_ACCESS: 'auth.company.no.access'
|
|
187
|
+
};
|
|
188
|
+
// ==================== ERROR (HTTP Exceptions) ====================
|
|
189
|
+
const ERROR_MESSAGES = {
|
|
190
|
+
NOT_FOUND: 'error.not.found',
|
|
191
|
+
VALIDATION: 'error.validation',
|
|
192
|
+
UNAUTHORIZED: 'error.unauthorized',
|
|
193
|
+
FORBIDDEN: 'error.forbidden',
|
|
194
|
+
CONFLICT: 'error.conflict',
|
|
195
|
+
DB_FOREIGN_KEY: 'error.db.foreign.key',
|
|
196
|
+
DB_NOT_NULL: 'error.db.not.null',
|
|
197
|
+
DB_INVALID_INPUT: 'error.db.invalid.input',
|
|
198
|
+
DB_VALUE_TOO_LONG: 'error.db.value.too.long',
|
|
199
|
+
DB_CHECK_CONSTRAINT: 'error.db.check.constraint',
|
|
200
|
+
DB_DEADLOCK: 'error.db.deadlock',
|
|
201
|
+
INTERNAL: 'error.internal',
|
|
202
|
+
SERVICE_UNAVAILABLE: 'error.service.unavailable',
|
|
203
|
+
UNKNOWN: 'error.unknown',
|
|
204
|
+
HTTP: 'error.http',
|
|
205
|
+
GENERIC: 'error.generic',
|
|
206
|
+
PERMISSION_SYSTEM_UNAVAILABLE: 'error.permission.system.unavailable',
|
|
207
|
+
INSUFFICIENT_PERMISSIONS: 'error.insufficient.permissions',
|
|
208
|
+
INSUFFICIENT_PERMISSIONS_OR: 'error.insufficient.permissions.or',
|
|
209
|
+
NO_PERMISSIONS_FOUND: 'error.no.permissions.found',
|
|
210
|
+
ENDPOINT_DISABLED: 'error.endpoint.disabled'
|
|
211
|
+
};
|
|
212
|
+
// ==================== SYSTEM (Infrastructure) ====================
|
|
213
|
+
const SYSTEM_MESSAGES = {
|
|
214
|
+
REPOSITORY_NOT_AVAILABLE: 'system.repository.not.available',
|
|
215
|
+
DATASOURCE_NOT_AVAILABLE: 'system.datasource.not.available',
|
|
216
|
+
DATABASE_CONFIG_NOT_AVAILABLE: 'system.database.config.not.available',
|
|
217
|
+
SERVICE_NOT_AVAILABLE: 'system.service.not.available',
|
|
218
|
+
CONFIG_REQUIRED: 'system.config.required',
|
|
219
|
+
INTERNAL_ERROR: 'system.internal.error',
|
|
220
|
+
DUPLICATE_REQUEST: 'system.duplicate.request',
|
|
221
|
+
INVALID_TENANT_ID: 'system.invalid.tenant.id',
|
|
222
|
+
TENANT_NOT_FOUND: 'system.tenant.not.found',
|
|
223
|
+
TENANT_HEADER_REQUIRED: 'system.tenant.header.required',
|
|
224
|
+
MISSING_PARAMETER: 'system.missing.parameter',
|
|
225
|
+
SDK_NOT_INSTALLED: 'system.sdk.not.installed',
|
|
226
|
+
PATH_TRAVERSAL_DETECTED: 'system.path.traversal.detected',
|
|
227
|
+
INVALID_FILE_KEY: 'system.invalid.file.key'
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
231
|
+
}, {
|
|
232
|
+
UU: ERROR_MESSAGES,
|
|
233
|
+
hg: SYSTEM_MESSAGES,
|
|
234
|
+
mK: AUTH_MESSAGES
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
},
|
|
239
|
+
975(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
240
|
+
// ==================== AUTH MODULE ====================
|
|
241
|
+
const USER_PERMISSIONS = {
|
|
242
|
+
CREATE: 'user.create',
|
|
243
|
+
READ: 'user.read',
|
|
244
|
+
UPDATE: 'user.update',
|
|
245
|
+
DELETE: 'user.delete',
|
|
246
|
+
LOOKUP: 'user.lookup'
|
|
247
|
+
};
|
|
248
|
+
const COMPANY_PERMISSIONS = {
|
|
249
|
+
CREATE: 'company.create',
|
|
250
|
+
READ: 'company.read',
|
|
251
|
+
UPDATE: 'company.update',
|
|
252
|
+
DELETE: 'company.delete'
|
|
253
|
+
};
|
|
254
|
+
const BRANCH_PERMISSIONS = {
|
|
255
|
+
CREATE: 'branch.create',
|
|
256
|
+
READ: 'branch.read',
|
|
257
|
+
UPDATE: 'branch.update',
|
|
258
|
+
DELETE: 'branch.delete'
|
|
259
|
+
};
|
|
260
|
+
const SOCIAL_AUTH_CONFIG_PERMISSIONS = {
|
|
261
|
+
CREATE: 'social-config.create',
|
|
262
|
+
READ: 'social-config.read',
|
|
263
|
+
UPDATE: 'social-config.update',
|
|
264
|
+
DELETE: 'social-config.delete'
|
|
265
|
+
};
|
|
266
|
+
// ==================== IAM MODULE ====================
|
|
267
|
+
const ACTION_PERMISSIONS = {
|
|
268
|
+
CREATE: 'action.create',
|
|
269
|
+
READ: 'action.read',
|
|
270
|
+
UPDATE: 'action.update',
|
|
271
|
+
DELETE: 'action.delete'
|
|
272
|
+
};
|
|
273
|
+
const ROLE_PERMISSIONS = {
|
|
274
|
+
CREATE: 'role.create',
|
|
275
|
+
READ: 'role.read',
|
|
276
|
+
UPDATE: 'role.update',
|
|
277
|
+
DELETE: 'role.delete'
|
|
278
|
+
};
|
|
279
|
+
const ROLE_ACTION_PERMISSIONS = {
|
|
280
|
+
READ: 'role-action.read',
|
|
281
|
+
ASSIGN: 'role-action.assign'
|
|
282
|
+
};
|
|
283
|
+
const USER_ROLE_PERMISSIONS = {
|
|
284
|
+
READ: 'user-role.read',
|
|
285
|
+
ASSIGN: 'user-role.assign'
|
|
286
|
+
};
|
|
287
|
+
const USER_ACTION_PERMISSIONS = {
|
|
288
|
+
READ: 'user-action.read',
|
|
289
|
+
ASSIGN: 'user-action.assign'
|
|
290
|
+
};
|
|
291
|
+
const COMPANY_ACTION_PERMISSIONS = {
|
|
292
|
+
READ: 'company-action.read',
|
|
293
|
+
ASSIGN: 'company-action.assign'
|
|
294
|
+
};
|
|
295
|
+
// ==================== STORAGE MODULE ====================
|
|
296
|
+
const FILE_PERMISSIONS = {
|
|
297
|
+
CREATE: 'file.create',
|
|
298
|
+
READ: 'file.read',
|
|
299
|
+
UPDATE: 'file.update',
|
|
300
|
+
DELETE: 'file.delete',
|
|
301
|
+
VIEW_PRIVATE_ACTION: 'file.view.private'
|
|
302
|
+
};
|
|
303
|
+
const FOLDER_PERMISSIONS = {
|
|
304
|
+
CREATE: 'folder.create',
|
|
305
|
+
READ: 'folder.read',
|
|
306
|
+
UPDATE: 'folder.update',
|
|
307
|
+
DELETE: 'folder.delete'
|
|
308
|
+
};
|
|
309
|
+
const STORAGE_CONFIG_PERMISSIONS = {
|
|
310
|
+
CREATE: 'storage-config.create',
|
|
311
|
+
READ: 'storage-config.read',
|
|
312
|
+
UPDATE: 'storage-config.update',
|
|
313
|
+
DELETE: 'storage-config.delete'
|
|
314
|
+
};
|
|
315
|
+
const UPLOAD_CONFIG_PERMISSIONS = {
|
|
316
|
+
DELETE: 'upload-config.delete'
|
|
317
|
+
};
|
|
318
|
+
// ==================== EMAIL MODULE ====================
|
|
319
|
+
const EMAIL_CONFIG_PERMISSIONS = {
|
|
320
|
+
CREATE: 'email-config.create',
|
|
321
|
+
READ: 'email-config.read',
|
|
322
|
+
UPDATE: 'email-config.update',
|
|
323
|
+
DELETE: 'email-config.delete'
|
|
324
|
+
};
|
|
325
|
+
const EMAIL_TEMPLATE_PERMISSIONS = {
|
|
326
|
+
CREATE: 'email-template.create',
|
|
327
|
+
READ: 'email-template.read',
|
|
328
|
+
UPDATE: 'email-template.update',
|
|
329
|
+
DELETE: 'email-template.delete'
|
|
330
|
+
};
|
|
331
|
+
// ==================== FORM BUILDER MODULE ====================
|
|
332
|
+
const FORM_PERMISSIONS = {
|
|
333
|
+
CREATE: 'form.create',
|
|
334
|
+
READ: 'form.read',
|
|
335
|
+
UPDATE: 'form.update',
|
|
336
|
+
DELETE: 'form.delete'
|
|
337
|
+
};
|
|
338
|
+
const FORM_RESULT_PERMISSIONS = {
|
|
339
|
+
CREATE: 'form-result.create',
|
|
340
|
+
READ: 'form-result.read',
|
|
341
|
+
UPDATE: 'form-result.update',
|
|
342
|
+
DELETE: 'form-result.delete'
|
|
343
|
+
};
|
|
344
|
+
// ==================== EVENT MANAGER MODULE ====================
|
|
345
|
+
const EVENT_PERMISSIONS = {
|
|
346
|
+
CREATE: 'event.create',
|
|
347
|
+
READ: 'event.read',
|
|
348
|
+
UPDATE: 'event.update',
|
|
349
|
+
DELETE: 'event.delete'
|
|
350
|
+
};
|
|
351
|
+
// ==================== NOTIFICATION MODULE ====================
|
|
352
|
+
const NOTIFICATION_PERMISSIONS = {
|
|
353
|
+
CREATE: 'notification.create',
|
|
354
|
+
READ: 'notification.read',
|
|
355
|
+
UPDATE: 'notification.update',
|
|
356
|
+
DELETE: 'notification.delete'
|
|
357
|
+
};
|
|
358
|
+
// ==================== LOCALIZATION MODULE ====================
|
|
359
|
+
const LANGUAGE_PERMISSIONS = {
|
|
360
|
+
CREATE: 'language.create',
|
|
361
|
+
READ: 'language.read',
|
|
362
|
+
UPDATE: 'language.update',
|
|
363
|
+
DELETE: 'language.delete'
|
|
364
|
+
};
|
|
365
|
+
const TRANSLATION_KEY_PERMISSIONS = {
|
|
366
|
+
CREATE: 'translation-key.create',
|
|
367
|
+
READ: 'translation-key.read',
|
|
368
|
+
UPDATE: 'translation-key.update',
|
|
369
|
+
DELETE: 'translation-key.delete'
|
|
370
|
+
};
|
|
371
|
+
const TRANSLATION_PERMISSIONS = {
|
|
372
|
+
CREATE: 'translation.create',
|
|
373
|
+
READ: 'translation.read',
|
|
374
|
+
UPDATE: 'translation.update',
|
|
375
|
+
DELETE: 'translation.delete'
|
|
376
|
+
};
|
|
377
|
+
// ==================== TASK MANAGER MODULE ====================
|
|
378
|
+
const TASK_BOARD_PERMISSIONS = {
|
|
379
|
+
CREATE: 'task-board.create',
|
|
380
|
+
READ: 'task-board.read',
|
|
381
|
+
UPDATE: 'task-board.update',
|
|
382
|
+
DELETE: 'task-board.delete',
|
|
383
|
+
MANAGE_MEMBERS: 'task-board.manage-members'
|
|
384
|
+
};
|
|
385
|
+
const TASK_LIST_PERMISSIONS = {
|
|
386
|
+
CREATE: 'task-list.create',
|
|
387
|
+
READ: 'task-list.read',
|
|
388
|
+
UPDATE: 'task-list.update',
|
|
389
|
+
DELETE: 'task-list.delete'
|
|
390
|
+
};
|
|
391
|
+
const TASK_PERMISSIONS = {
|
|
392
|
+
CREATE: 'task.create',
|
|
393
|
+
READ: 'task.read',
|
|
394
|
+
UPDATE: 'task.update',
|
|
395
|
+
DELETE: 'task.delete',
|
|
396
|
+
MOVE: 'task.move',
|
|
397
|
+
ASSIGN: 'task.assign'
|
|
398
|
+
};
|
|
399
|
+
const TASK_LABEL_PERMISSIONS = {
|
|
400
|
+
CREATE: 'task-label.create',
|
|
401
|
+
READ: 'task-label.read',
|
|
402
|
+
UPDATE: 'task-label.update',
|
|
403
|
+
DELETE: 'task-label.delete'
|
|
404
|
+
};
|
|
405
|
+
const TASK_COMMENT_PERMISSIONS = {
|
|
406
|
+
CREATE: 'task-comment.create',
|
|
407
|
+
READ: 'task-comment.read',
|
|
408
|
+
DELETE: 'task-comment.delete'
|
|
409
|
+
};
|
|
410
|
+
// ==================== AI ASSISTANT MODULE ====================
|
|
411
|
+
const AI_ASSISTANT_PERMISSIONS = {
|
|
412
|
+
VIEW_ALL_HISTORY: 'ai-assistant.view-all-history'
|
|
413
|
+
};
|
|
414
|
+
// ==================== AGGREGATED EXPORTS ====================
|
|
415
|
+
const PERMISSIONS = {
|
|
416
|
+
// Auth
|
|
417
|
+
USER: USER_PERMISSIONS,
|
|
418
|
+
COMPANY: COMPANY_PERMISSIONS,
|
|
419
|
+
BRANCH: BRANCH_PERMISSIONS,
|
|
420
|
+
SOCIAL_AUTH_CONFIG: SOCIAL_AUTH_CONFIG_PERMISSIONS,
|
|
421
|
+
// IAM
|
|
422
|
+
ACTION: ACTION_PERMISSIONS,
|
|
423
|
+
ROLE: ROLE_PERMISSIONS,
|
|
424
|
+
ROLE_ACTION: ROLE_ACTION_PERMISSIONS,
|
|
425
|
+
USER_ROLE: USER_ROLE_PERMISSIONS,
|
|
426
|
+
USER_ACTION: USER_ACTION_PERMISSIONS,
|
|
427
|
+
COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,
|
|
428
|
+
// Storage
|
|
429
|
+
FILE: FILE_PERMISSIONS,
|
|
430
|
+
FOLDER: FOLDER_PERMISSIONS,
|
|
431
|
+
STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,
|
|
432
|
+
// Email
|
|
433
|
+
EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,
|
|
434
|
+
EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,
|
|
435
|
+
// Form Builder
|
|
436
|
+
FORM: FORM_PERMISSIONS,
|
|
437
|
+
FORM_RESULT: FORM_RESULT_PERMISSIONS,
|
|
438
|
+
// Event Manager
|
|
439
|
+
EVENT: EVENT_PERMISSIONS,
|
|
440
|
+
// Notification
|
|
441
|
+
NOTIFICATION: NOTIFICATION_PERMISSIONS,
|
|
442
|
+
// Localization
|
|
443
|
+
LANGUAGE: LANGUAGE_PERMISSIONS,
|
|
444
|
+
TRANSLATION_KEY: TRANSLATION_KEY_PERMISSIONS,
|
|
445
|
+
TRANSLATION: TRANSLATION_PERMISSIONS,
|
|
446
|
+
// Task Manager
|
|
447
|
+
TASK_BOARD: TASK_BOARD_PERMISSIONS,
|
|
448
|
+
TASK_LIST: TASK_LIST_PERMISSIONS,
|
|
449
|
+
TASK: TASK_PERMISSIONS,
|
|
450
|
+
TASK_LABEL: TASK_LABEL_PERMISSIONS,
|
|
451
|
+
TASK_COMMENT: TASK_COMMENT_PERMISSIONS,
|
|
452
|
+
// AI Assistant
|
|
453
|
+
AI_ASSISTANT: AI_ASSISTANT_PERMISSIONS
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
457
|
+
}, {
|
|
458
|
+
BC: USER_PERMISSIONS,
|
|
459
|
+
Bz: AI_ASSISTANT_PERMISSIONS,
|
|
460
|
+
Em: STORAGE_CONFIG_PERMISSIONS,
|
|
461
|
+
GT: FORM_RESULT_PERMISSIONS,
|
|
462
|
+
Jj: PERMISSIONS,
|
|
463
|
+
N3: TRANSLATION_KEY_PERMISSIONS,
|
|
464
|
+
ON: TASK_LIST_PERMISSIONS,
|
|
465
|
+
P0: ROLE_ACTION_PERMISSIONS,
|
|
466
|
+
Q5: LANGUAGE_PERMISSIONS,
|
|
467
|
+
S6: FILE_PERMISSIONS,
|
|
468
|
+
T: TASK_PERMISSIONS,
|
|
469
|
+
UB: UPLOAD_CONFIG_PERMISSIONS,
|
|
470
|
+
UG: TASK_LABEL_PERMISSIONS,
|
|
471
|
+
Ub: EVENT_PERMISSIONS,
|
|
472
|
+
V0: EMAIL_CONFIG_PERMISSIONS,
|
|
473
|
+
Wc: FORM_PERMISSIONS,
|
|
474
|
+
Y3: TASK_BOARD_PERMISSIONS,
|
|
475
|
+
Y7: ACTION_PERMISSIONS,
|
|
476
|
+
_X: USER_ACTION_PERMISSIONS,
|
|
477
|
+
aO: COMPANY_ACTION_PERMISSIONS,
|
|
478
|
+
fS: TRANSLATION_PERMISSIONS,
|
|
479
|
+
l3: SOCIAL_AUTH_CONFIG_PERMISSIONS,
|
|
480
|
+
mV: ROLE_PERMISSIONS,
|
|
481
|
+
rH: NOTIFICATION_PERMISSIONS,
|
|
482
|
+
t$: COMPANY_PERMISSIONS,
|
|
483
|
+
w7: USER_ROLE_PERMISSIONS,
|
|
484
|
+
wA: BRANCH_PERMISSIONS,
|
|
485
|
+
wM: FOLDER_PERMISSIONS,
|
|
486
|
+
z$: EMAIL_TEMPLATE_PERMISSIONS,
|
|
487
|
+
zd: TASK_COMMENT_PERMISSIONS
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
},
|
|
492
|
+
374(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
493
|
+
/* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
|
|
494
|
+
/* import */ var _constants_message_keys_js__rspack_import_1 = __webpack_require__(389);
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
class PermissionSystemUnavailableException extends _nestjs_common__rspack_import_0.InternalServerErrorException {
|
|
498
|
+
constructor(){
|
|
499
|
+
super({
|
|
500
|
+
success: false,
|
|
501
|
+
message: 'Permission system temporarily unavailable',
|
|
502
|
+
messageKey: _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.PERMISSION_SYSTEM_UNAVAILABLE */.UU.PERMISSION_SYSTEM_UNAVAILABLE
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
class InsufficientPermissionsException extends _nestjs_common__rspack_import_0.ForbiddenException {
|
|
507
|
+
constructor(missingPermissions, operator = 'AND'){
|
|
508
|
+
const messageKey = operator === 'OR' ? _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.INSUFFICIENT_PERMISSIONS_OR */.UU.INSUFFICIENT_PERMISSIONS_OR : _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.INSUFFICIENT_PERMISSIONS */.UU.INSUFFICIENT_PERMISSIONS;
|
|
509
|
+
super({
|
|
510
|
+
success: false,
|
|
511
|
+
message: 'Insufficient permissions',
|
|
512
|
+
messageKey,
|
|
513
|
+
messageVariables: {
|
|
514
|
+
permissions: missingPermissions.join(', ')
|
|
515
|
+
},
|
|
516
|
+
missingPermissions,
|
|
517
|
+
operator
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
class NoPermissionsFoundException extends _nestjs_common__rspack_import_0.ForbiddenException {
|
|
522
|
+
constructor(){
|
|
523
|
+
super({
|
|
524
|
+
success: false,
|
|
525
|
+
message: 'No permissions found',
|
|
526
|
+
messageKey: _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.NO_PERMISSIONS_FOUND */.UU.NO_PERMISSIONS_FOUND
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
532
|
+
GS: () => (PermissionSystemUnavailableException),
|
|
533
|
+
d$: () => (NoPermissionsFoundException),
|
|
534
|
+
z8: () => (InsufficientPermissionsException)
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
},
|
|
539
|
+
510(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
540
|
+
|
|
541
|
+
// EXPORTS
|
|
542
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
543
|
+
TD: () => (/* reexport */ JwtAuthGuard),
|
|
544
|
+
Zb: () => (/* reexport */ OptionalJwtGuard),
|
|
545
|
+
LQ: () => (/* reexport */ PermissionGuard)
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
// EXTERNAL MODULE: ./projects/nestjs-shared/src/constants/index.ts
|
|
549
|
+
var constants = __webpack_require__(43);
|
|
550
|
+
// EXTERNAL MODULE: ./projects/nestjs-shared/src/constants/message-keys.ts
|
|
551
|
+
var message_keys = __webpack_require__(389);
|
|
552
|
+
// EXTERNAL MODULE: external "@nestjs/common"
|
|
553
|
+
var common_ = __webpack_require__(157);
|
|
554
|
+
// EXTERNAL MODULE: external "@nestjs/core"
|
|
555
|
+
var core_ = __webpack_require__(75);
|
|
556
|
+
;// CONCATENATED MODULE: external "@nestjs/passport"
|
|
557
|
+
|
|
558
|
+
;// CONCATENATED MODULE: ./projects/nestjs-shared/src/guards/jwt-auth.guard.ts
|
|
559
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
560
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
561
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
562
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
563
|
+
} else {
|
|
564
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
565
|
+
if (d = decorators[i]) {
|
|
566
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
571
|
+
}
|
|
572
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
573
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
574
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
function _ts_param(paramIndex, decorator) {
|
|
578
|
+
return function(target, key) {
|
|
579
|
+
decorator(target, key, paramIndex);
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
class JwtAuthGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGuard)('jwt') {
|
|
587
|
+
reflector;
|
|
588
|
+
// NOTE: @Inject(Reflector) required for bundled code - external classes need explicit injection
|
|
589
|
+
constructor(reflector){
|
|
590
|
+
super(), this.reflector = reflector;
|
|
591
|
+
}
|
|
592
|
+
canActivate(context) {
|
|
593
|
+
// Check if route is marked as public
|
|
594
|
+
const isPublic = this.reflector.getAllAndOverride(constants/* .IS_PUBLIC_KEY */.jA, [
|
|
595
|
+
context.getHandler(),
|
|
596
|
+
context.getClass()
|
|
597
|
+
]);
|
|
598
|
+
if (isPublic) {
|
|
599
|
+
return true;
|
|
600
|
+
}
|
|
601
|
+
return super.canActivate(context);
|
|
602
|
+
}
|
|
603
|
+
handleRequest(err, user) {
|
|
604
|
+
if (err || !user) {
|
|
605
|
+
throw err || new common_.UnauthorizedException({
|
|
606
|
+
message: 'Invalid or expired token',
|
|
607
|
+
messageKey: message_keys/* .AUTH_MESSAGES.TOKEN_INVALID */.mK.TOKEN_INVALID
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
return user;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
JwtAuthGuard = _ts_decorate([
|
|
614
|
+
(0,common_.Injectable)(),
|
|
615
|
+
_ts_param(0, (0,common_.Inject)(core_.Reflector)),
|
|
616
|
+
_ts_metadata("design:type", Function),
|
|
617
|
+
_ts_metadata("design:paramtypes", [
|
|
618
|
+
typeof core_.Reflector === "undefined" ? Object : core_.Reflector
|
|
619
|
+
])
|
|
620
|
+
], JwtAuthGuard);
|
|
621
|
+
|
|
622
|
+
;// CONCATENATED MODULE: ./projects/nestjs-shared/src/guards/optional-jwt-auth.guard.ts
|
|
623
|
+
function optional_jwt_auth_guard_ts_decorate(decorators, target, key, desc) {
|
|
624
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
625
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
626
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
627
|
+
} else {
|
|
628
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
629
|
+
if (d = decorators[i]) {
|
|
630
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
635
|
+
}
|
|
636
|
+
function optional_jwt_auth_guard_ts_metadata(metadataKey, metadataValue) {
|
|
637
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
638
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
function optional_jwt_auth_guard_ts_param(paramIndex, decorator) {
|
|
642
|
+
return function(target, key) {
|
|
643
|
+
decorator(target, key, paramIndex);
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
class OptionalJwtGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGuard)('jwt') {
|
|
651
|
+
reflector;
|
|
652
|
+
constructor(reflector){
|
|
653
|
+
super(), this.reflector = reflector;
|
|
654
|
+
}
|
|
655
|
+
canActivate(context) {
|
|
656
|
+
const isPublic = this.reflector.getAllAndOverride(constants/* .IS_PUBLIC_KEY */.jA, [
|
|
657
|
+
context.getHandler(),
|
|
658
|
+
context.getClass()
|
|
659
|
+
]);
|
|
660
|
+
if (isPublic) {
|
|
661
|
+
return true;
|
|
662
|
+
}
|
|
663
|
+
return super.canActivate(context);
|
|
664
|
+
}
|
|
665
|
+
handleRequest(_err, user) {
|
|
666
|
+
return user || undefined;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
OptionalJwtGuard = optional_jwt_auth_guard_ts_decorate([
|
|
670
|
+
(0,common_.Injectable)(),
|
|
671
|
+
optional_jwt_auth_guard_ts_param(0, (0,common_.Inject)(core_.Reflector)),
|
|
672
|
+
optional_jwt_auth_guard_ts_metadata("design:type", Function),
|
|
673
|
+
optional_jwt_auth_guard_ts_metadata("design:paramtypes", [
|
|
674
|
+
typeof core_.Reflector === "undefined" ? Object : core_.Reflector
|
|
675
|
+
])
|
|
676
|
+
], OptionalJwtGuard);
|
|
677
|
+
|
|
678
|
+
// EXTERNAL MODULE: ./projects/nestjs-shared/src/exceptions/permission.exception.ts
|
|
679
|
+
var permission_exception = __webpack_require__(374);
|
|
680
|
+
// EXTERNAL MODULE: ./projects/nestjs-shared/src/modules/shared-permission-cache/shared-permission-cache.service.ts
|
|
681
|
+
var shared_permission_cache_service = __webpack_require__(657);
|
|
682
|
+
;// CONCATENATED MODULE: ./projects/nestjs-shared/src/guards/permission.guard.ts
|
|
683
|
+
function permission_guard_ts_decorate(decorators, target, key, desc) {
|
|
684
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
685
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
686
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
687
|
+
} else {
|
|
688
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
689
|
+
if (d = decorators[i]) {
|
|
690
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
695
|
+
}
|
|
696
|
+
function permission_guard_ts_metadata(metadataKey, metadataValue) {
|
|
697
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
698
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
function permission_guard_ts_param(paramIndex, decorator) {
|
|
702
|
+
return function(target, key) {
|
|
703
|
+
decorator(target, key, paramIndex);
|
|
704
|
+
};
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
class PermissionGuard {
|
|
712
|
+
reflector;
|
|
713
|
+
permissionCacheService;
|
|
714
|
+
constructor(reflector, permissionCacheService){
|
|
715
|
+
this.reflector = reflector;
|
|
716
|
+
this.permissionCacheService = permissionCacheService;
|
|
717
|
+
}
|
|
718
|
+
async canActivate(context) {
|
|
719
|
+
const isPublic = this.reflector.getAllAndOverride(constants/* .IS_PUBLIC_KEY */.jA, [
|
|
720
|
+
context.getHandler(),
|
|
721
|
+
context.getClass()
|
|
722
|
+
]);
|
|
723
|
+
if (isPublic) return true;
|
|
724
|
+
const permissionConfig = this.reflector.getAllAndOverride(constants/* .PERMISSIONS_KEY */.N7, [
|
|
725
|
+
context.getHandler(),
|
|
726
|
+
context.getClass()
|
|
727
|
+
]);
|
|
728
|
+
if (!permissionConfig) return true;
|
|
729
|
+
const request = context.switchToHttp().getRequest();
|
|
730
|
+
const user = request.user;
|
|
731
|
+
if (!user) throw new common_.UnauthorizedException({
|
|
732
|
+
message: 'Authentication required',
|
|
733
|
+
messageKey: message_keys/* .AUTH_MESSAGES.TOKEN_REQUIRED */.mK.TOKEN_REQUIRED
|
|
734
|
+
});
|
|
735
|
+
if (!this.permissionCacheService?.isCacheConfigured()) {
|
|
736
|
+
throw new permission_exception/* .PermissionSystemUnavailableException */.GS();
|
|
737
|
+
}
|
|
738
|
+
const permissionService = this.permissionCacheService;
|
|
739
|
+
const userPermissions = await permissionService.getPermissions({
|
|
740
|
+
userId: user.id,
|
|
741
|
+
companyId: user.companyId,
|
|
742
|
+
branchId: user.branchId
|
|
743
|
+
});
|
|
744
|
+
if (!userPermissions || userPermissions.length === 0) {
|
|
745
|
+
throw new permission_exception/* .NoPermissionsFoundException */.d$();
|
|
746
|
+
}
|
|
747
|
+
const logicNode = this.normalizeToLogicNode(permissionConfig);
|
|
748
|
+
if (!logicNode) return true;
|
|
749
|
+
const result = this.evaluateLogicNode(logicNode, userPermissions, permissionService);
|
|
750
|
+
if (!result.passed) {
|
|
751
|
+
throw new permission_exception/* .InsufficientPermissionsException */.z8(result.missingPermissions, result.operator);
|
|
752
|
+
}
|
|
753
|
+
return true;
|
|
754
|
+
}
|
|
755
|
+
normalizeToLogicNode(config) {
|
|
756
|
+
// string - single permission
|
|
757
|
+
if (typeof config === 'string') {
|
|
758
|
+
return config ? {
|
|
759
|
+
type: 'action',
|
|
760
|
+
actionId: config
|
|
761
|
+
} : null;
|
|
762
|
+
}
|
|
763
|
+
// string[] - treat as AND of multiple permissions
|
|
764
|
+
if (Array.isArray(config)) {
|
|
765
|
+
if (config.length === 0) return null;
|
|
766
|
+
if (config.length === 1) return {
|
|
767
|
+
type: 'action',
|
|
768
|
+
actionId: config[0]
|
|
769
|
+
};
|
|
770
|
+
return {
|
|
771
|
+
type: 'group',
|
|
772
|
+
operator: 'AND',
|
|
773
|
+
children: config.map((p)=>({
|
|
774
|
+
type: 'action',
|
|
775
|
+
actionId: p
|
|
776
|
+
}))
|
|
777
|
+
};
|
|
778
|
+
}
|
|
779
|
+
// SimplePermissionConfig - { permissions: string[], operator: 'AND'|'OR' }
|
|
780
|
+
if ('permissions' in config && Array.isArray(config.permissions)) {
|
|
781
|
+
const simple = config;
|
|
782
|
+
if (simple.permissions.length === 0) return null;
|
|
783
|
+
if (simple.permissions.length === 1) return {
|
|
784
|
+
type: 'action',
|
|
785
|
+
actionId: simple.permissions[0]
|
|
786
|
+
};
|
|
787
|
+
return {
|
|
788
|
+
type: 'group',
|
|
789
|
+
operator: simple.operator || 'AND',
|
|
790
|
+
children: simple.permissions.map((p)=>({
|
|
791
|
+
type: 'action',
|
|
792
|
+
actionId: p
|
|
793
|
+
}))
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
// ILogicNode
|
|
797
|
+
return config;
|
|
798
|
+
}
|
|
799
|
+
evaluateLogicNode(node, userPermissions, permissionService) {
|
|
800
|
+
if (node.type === 'action') {
|
|
801
|
+
const passed = permissionService.matchPermission(userPermissions, node.actionId);
|
|
802
|
+
return {
|
|
803
|
+
passed,
|
|
804
|
+
missingPermissions: passed ? [] : [
|
|
805
|
+
node.actionId
|
|
806
|
+
],
|
|
807
|
+
operator: 'AND'
|
|
808
|
+
};
|
|
809
|
+
}
|
|
810
|
+
// Group node
|
|
811
|
+
const { operator, children } = node;
|
|
812
|
+
// SECURITY: Fail-closed - deny access when no children configured
|
|
813
|
+
if (!children || children.length === 0) {
|
|
814
|
+
return {
|
|
815
|
+
passed: false,
|
|
816
|
+
missingPermissions: [],
|
|
817
|
+
operator
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
const results = [];
|
|
821
|
+
const missingPermissions = [];
|
|
822
|
+
for (const child of children){
|
|
823
|
+
const childResult = this.evaluateLogicNode(child, userPermissions, permissionService);
|
|
824
|
+
results.push(childResult.passed);
|
|
825
|
+
if (!childResult.passed) {
|
|
826
|
+
missingPermissions.push(...childResult.missingPermissions);
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
const passed = operator === 'OR' ? results.some((r)=>r) : results.every((r)=>r);
|
|
830
|
+
return {
|
|
831
|
+
passed,
|
|
832
|
+
missingPermissions: passed ? [] : missingPermissions,
|
|
833
|
+
operator
|
|
834
|
+
};
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
PermissionGuard = permission_guard_ts_decorate([
|
|
838
|
+
(0,common_.Injectable)(),
|
|
839
|
+
permission_guard_ts_param(0, (0,common_.Inject)(core_.Reflector)),
|
|
840
|
+
permission_guard_ts_param(1, (0,common_.Optional)()),
|
|
841
|
+
permission_guard_ts_param(1, (0,common_.Inject)(shared_permission_cache_service/* .SharedPermissionCacheService */.U)),
|
|
842
|
+
permission_guard_ts_metadata("design:type", Function),
|
|
843
|
+
permission_guard_ts_metadata("design:paramtypes", [
|
|
844
|
+
typeof core_.Reflector === "undefined" ? Object : core_.Reflector,
|
|
845
|
+
typeof shared_permission_cache_service/* .SharedPermissionCacheService */.U === "undefined" ? Object : shared_permission_cache_service/* .SharedPermissionCacheService */.U
|
|
846
|
+
])
|
|
847
|
+
], PermissionGuard);
|
|
848
|
+
|
|
849
|
+
;// CONCATENATED MODULE: ./projects/nestjs-shared/src/guards/index.ts
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
},
|
|
856
|
+
657(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
857
|
+
/* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
|
|
858
|
+
/* import */ var _classes_hybrid_cache_class_js__rspack_import_1 = __webpack_require__(375);
|
|
859
|
+
/* import */ var _constants_index_js__rspack_import_3 = __webpack_require__(43);
|
|
860
|
+
/* import */ var _utils_permission_cache_key_util_js__rspack_import_2 = __webpack_require__(199);
|
|
861
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
862
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
863
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
864
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
865
|
+
} else {
|
|
866
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
867
|
+
if (d = decorators[i]) {
|
|
868
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
873
|
+
}
|
|
874
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
875
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
876
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
function _ts_param(paramIndex, decorator) {
|
|
880
|
+
return function(target, key) {
|
|
881
|
+
decorator(target, key, paramIndex);
|
|
882
|
+
};
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
|
|
886
|
+
|
|
887
|
+
|
|
888
|
+
class SharedPermissionCacheService {
|
|
889
|
+
cache;
|
|
890
|
+
config;
|
|
891
|
+
constructor(cache, config){
|
|
892
|
+
this.cache = cache;
|
|
893
|
+
this.config = {
|
|
894
|
+
enableCompanyFeature: false,
|
|
895
|
+
userPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_2/* .DEFAULT_USER_PERMISSION_KEY_FORMAT */.q6,
|
|
896
|
+
companyPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_2/* .DEFAULT_COMPANY_PERMISSION_KEY_FORMAT */.s8,
|
|
897
|
+
...config
|
|
898
|
+
};
|
|
899
|
+
}
|
|
900
|
+
/** Read the cached permission codes for a user; empty array when cache is unavailable or unset */ async getPermissions(options) {
|
|
901
|
+
if (!this.cache) return [];
|
|
902
|
+
const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
|
|
903
|
+
const cached = await this.cache.get(cacheKey);
|
|
904
|
+
if (!cached) return [];
|
|
905
|
+
return Array.isArray(cached) ? cached : cached.backendCodes || [];
|
|
906
|
+
}
|
|
907
|
+
/** Overwrite the cached permission codes for a user with a fixed list */ async setPermissions(options, permissions, ttl) {
|
|
908
|
+
if (!this.cache) return;
|
|
909
|
+
const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
|
|
910
|
+
await this.cache.set(cacheKey, permissions, ttl);
|
|
911
|
+
}
|
|
912
|
+
/** Clear the cached permission codes for a user */ async clearPermissions(options) {
|
|
913
|
+
if (!this.cache) return;
|
|
914
|
+
const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
|
|
915
|
+
await this.cache.del(cacheKey);
|
|
916
|
+
}
|
|
917
|
+
/** Check a single permission against the cached list, honoring `*` and `prefix.*` wildcards */ async hasPermission(options, requiredPermission) {
|
|
918
|
+
const permissions = await this.getPermissions(options);
|
|
919
|
+
return this.matchPermission(permissions, requiredPermission);
|
|
920
|
+
}
|
|
921
|
+
/** Whether a cache instance is wired up; false means permission checks can't be served at all */ isCacheConfigured() {
|
|
922
|
+
return !!this.cache;
|
|
923
|
+
}
|
|
924
|
+
/** Match an already-fetched permission list against a required permission, honoring `*` and `prefix.*` wildcards */ matchPermission(userPermissions, requiredPermission) {
|
|
925
|
+
if (userPermissions.includes(requiredPermission)) return true;
|
|
926
|
+
for (const permission of userPermissions){
|
|
927
|
+
if (permission === '*') return true;
|
|
928
|
+
if (permission.endsWith('.*') && requiredPermission.startsWith(permission.slice(0, -1))) {
|
|
929
|
+
return true;
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
return false;
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
SharedPermissionCacheService = _ts_decorate([
|
|
936
|
+
(0,_nestjs_common__rspack_import_0.Injectable)(),
|
|
937
|
+
_ts_param(0, (0,_nestjs_common__rspack_import_0.Optional)()),
|
|
938
|
+
_ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_3/* .CACHE_INSTANCE */.zl)),
|
|
939
|
+
_ts_param(1, (0,_nestjs_common__rspack_import_0.Optional)()),
|
|
940
|
+
_ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_3/* .PERMISSION_GUARD_CONFIG */.Lw)),
|
|
941
|
+
_ts_metadata("design:type", Function),
|
|
942
|
+
_ts_metadata("design:paramtypes", [
|
|
943
|
+
typeof _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l === "undefined" ? Object : _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l,
|
|
944
|
+
typeof PermissionGuardConfig === "undefined" ? Object : PermissionGuardConfig
|
|
945
|
+
])
|
|
946
|
+
], SharedPermissionCacheService);
|
|
947
|
+
|
|
948
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
949
|
+
U: () => (SharedPermissionCacheService)
|
|
950
|
+
});
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
},
|
|
954
|
+
199(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
955
|
+
/* import */ var _constants_index_js__rspack_import_0 = __webpack_require__(43);
|
|
956
|
+
|
|
957
|
+
const DEFAULT_USER_PERMISSION_KEY_FORMAT = `${_constants_index_js__rspack_import_0/* .PERMISSIONS_CACHE_PREFIX */.fG}:user:{userId}`;
|
|
958
|
+
const DEFAULT_COMPANY_PERMISSION_KEY_FORMAT = `${_constants_index_js__rspack_import_0/* .PERMISSIONS_CACHE_PREFIX */.fG}:company:{companyId}:branch:{branchId}:user:{userId}`;
|
|
959
|
+
/** Single source of truth for permission cache keys, shared by the guard (reader) and cache service (writer) so a config override can't desync them; company scope requires enableCompanyFeature, not just a companyId */ function buildPermissionCacheKey(options, config) {
|
|
960
|
+
const isCompanyScope = Boolean(config?.enableCompanyFeature && options.companyId);
|
|
961
|
+
if (isCompanyScope) {
|
|
962
|
+
return (config?.companyPermissionKeyFormat || DEFAULT_COMPANY_PERMISSION_KEY_FORMAT).replace('{userId}', options.userId).replace('{companyId}', options.companyId).replace('{branchId}', options.branchId || 'null');
|
|
963
|
+
}
|
|
964
|
+
return (config?.userPermissionKeyFormat || DEFAULT_USER_PERMISSION_KEY_FORMAT).replace('{userId}', options.userId);
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
968
|
+
nt: () => (buildPermissionCacheKey)
|
|
969
|
+
}, {
|
|
970
|
+
q6: DEFAULT_USER_PERMISSION_KEY_FORMAT,
|
|
971
|
+
s8: DEFAULT_COMPANY_PERMISSION_KEY_FORMAT
|
|
972
|
+
});
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
},
|
|
976
|
+
307(module) {
|
|
977
|
+
|
|
978
|
+
module.exports = __rspack_external__flusys_nestjs_core_config_197fa0a9;
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
},
|
|
982
|
+
157(module) {
|
|
983
|
+
|
|
984
|
+
module.exports = __rspack_external__nestjs_common_a04939da;
|
|
985
|
+
|
|
986
|
+
|
|
987
|
+
},
|
|
988
|
+
75(module) {
|
|
989
|
+
|
|
990
|
+
module.exports = __rspack_external__nestjs_core_d7b00a1a;
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
},
|
|
994
|
+
|
|
995
|
+
};
|
|
996
|
+
import { __webpack_require__ } from '../runtime.js';
|
|
997
|
+
var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
|
|
998
|
+
import * as __rspack_chunk_1 from './index.js';
|
|
999
|
+
__webpack_require__.C(__rspack_chunk_1);
|
|
1000
|
+
var __webpack_exports__ = __webpack_exec__(510);var __webpack_exports__JwtAuthGuard = __webpack_exports__.TD;
|
|
1001
|
+
var __webpack_exports__OptionalJwtGuard = __webpack_exports__.Zb;
|
|
1002
|
+
var __webpack_exports__PermissionGuard = __webpack_exports__.LQ;
|
|
1003
|
+
export { __webpack_exports__JwtAuthGuard as JwtAuthGuard, __webpack_exports__OptionalJwtGuard as OptionalJwtGuard, __webpack_exports__PermissionGuard as PermissionGuard };
|