@flusys/nestjs-shared 1.1.0-beta → 1.2.0-rc.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/README.md +146 -1330
- package/cjs/classes/api-controller.class.js +325 -49
- package/cjs/classes/api-service.class.js +271 -149
- package/cjs/classes/handle-custome-db.js +37 -0
- package/cjs/classes/index.js +2 -2
- package/cjs/classes/winston.logger.class.js +103 -70
- package/cjs/constants/index.js +15 -4
- package/cjs/constants/message-keys.js +68 -0
- package/cjs/constants/permissions.js +287 -0
- package/cjs/decorators/api-response.decorator.js +2 -3
- package/cjs/decorators/index.js +1 -0
- package/cjs/decorators/log-action.decorator.js +149 -0
- package/cjs/decorators/require-permission.decorator.js +5 -5
- package/cjs/dtos/delete.dto.js +10 -0
- package/cjs/dtos/filter-and-pagination.dto.js +24 -34
- package/cjs/dtos/get-by-ids.dto.js +65 -0
- package/cjs/dtos/identity-response.dto.js +4 -8
- package/cjs/dtos/index.js +1 -0
- package/cjs/dtos/pagination.dto.js +4 -8
- package/cjs/dtos/response-payload.dto.js +68 -112
- package/cjs/entities/identity.js +12 -6
- package/cjs/entities/index.js +1 -0
- package/cjs/entities/raw-type.js +4 -0
- package/cjs/entities/user-root.js +15 -15
- package/cjs/enums/index.js +20 -0
- package/cjs/enums/notification-type.enum.js +17 -0
- package/cjs/enums/participant-status.enum.js +17 -0
- package/cjs/enums/recurrence-type.enum.js +18 -0
- package/cjs/exceptions/base-app.exception.js +151 -0
- package/cjs/exceptions/index.js +1 -0
- package/cjs/exceptions/permission.exception.js +13 -9
- package/cjs/filters/global-exception.filter.js +279 -0
- package/cjs/filters/index.js +18 -0
- package/cjs/guards/jwt-auth.guard.js +4 -1
- package/cjs/guards/permission.guard.js +88 -148
- package/cjs/index.js +2 -0
- package/cjs/interceptors/idempotency.interceptor.js +1 -1
- package/cjs/interceptors/index.js +1 -4
- package/cjs/interceptors/set-user-field-on-body.interceptor.js +60 -0
- package/cjs/interceptors/slug.interceptor.js +30 -9
- package/cjs/interfaces/datasource.interface.js +4 -0
- package/cjs/interfaces/event-manager-adapter.interface.js +11 -0
- package/cjs/interfaces/index.js +4 -2
- package/cjs/interfaces/module-config.interface.js +4 -0
- package/cjs/interfaces/notification-adapter.interface.js +11 -0
- package/cjs/interfaces/permission.interface.js +1 -1
- package/cjs/middlewares/logger.middleware.js +133 -115
- package/cjs/modules/cache/cache.module.js +3 -3
- package/cjs/modules/datasource/index.js +0 -1
- package/cjs/modules/datasource/multi-tenant-datasource.service.js +60 -183
- package/cjs/modules/utils/utils.service.js +27 -206
- package/cjs/utils/date-time.util.js +94 -0
- package/cjs/utils/html-sanitizer.util.js +64 -0
- package/cjs/utils/index.js +5 -1
- package/cjs/utils/query-helpers.util.js +60 -0
- package/cjs/utils/request.util.js +96 -0
- package/cjs/utils/string.util.js +63 -0
- package/classes/api-controller.class.d.ts +16 -8
- package/classes/api-service.class.d.ts +30 -25
- package/classes/handle-custome-db.d.ts +3 -0
- package/classes/index.d.ts +2 -2
- package/classes/winston.logger.class.d.ts +1 -0
- package/constants/index.d.ts +2 -1
- package/constants/message-keys.d.ts +45 -0
- package/constants/permissions.d.ts +306 -0
- package/decorators/api-response.decorator.d.ts +1 -1
- package/decorators/current-user.decorator.d.ts +1 -1
- package/decorators/index.d.ts +1 -0
- package/decorators/log-action.decorator.d.ts +8 -0
- package/decorators/require-permission.decorator.d.ts +2 -2
- package/dtos/delete.dto.d.ts +1 -0
- package/dtos/filter-and-pagination.dto.d.ts +0 -2
- package/dtos/get-by-ids.dto.d.ts +4 -0
- package/dtos/index.d.ts +1 -0
- package/dtos/response-payload.dto.d.ts +8 -20
- package/entities/index.d.ts +1 -0
- package/entities/raw-type.d.ts +1 -0
- package/enums/index.d.ts +3 -0
- package/enums/notification-type.enum.d.ts +6 -0
- package/enums/participant-status.enum.d.ts +6 -0
- package/enums/recurrence-type.enum.d.ts +7 -0
- package/exceptions/base-app.exception.d.ts +41 -0
- package/exceptions/index.d.ts +1 -0
- package/exceptions/permission.exception.d.ts +2 -2
- package/fesm/classes/api-controller.class.js +326 -50
- package/fesm/classes/api-service.class.js +274 -152
- package/fesm/classes/handle-custome-db.js +19 -0
- package/fesm/classes/index.js +3 -2
- package/fesm/classes/winston.logger.class.js +100 -68
- package/fesm/constants/index.js +4 -1
- package/fesm/constants/message-keys.js +49 -0
- package/fesm/constants/permissions.js +200 -0
- package/fesm/decorators/api-response.decorator.js +3 -21
- package/fesm/decorators/index.js +1 -0
- package/fesm/decorators/log-action.decorator.js +139 -0
- package/fesm/decorators/require-permission.decorator.js +17 -65
- package/fesm/dtos/delete.dto.js +12 -2
- package/fesm/dtos/filter-and-pagination.dto.js +26 -47
- package/fesm/dtos/get-by-ids.dto.js +55 -0
- package/fesm/dtos/identity-response.dto.js +4 -8
- package/fesm/dtos/index.js +1 -0
- package/fesm/dtos/pagination.dto.js +4 -8
- package/fesm/dtos/response-payload.dto.js +68 -103
- package/fesm/entities/identity.js +12 -6
- package/fesm/entities/index.js +1 -0
- package/fesm/entities/raw-type.js +1 -0
- package/fesm/entities/user-root.js +15 -15
- package/fesm/enums/index.js +3 -0
- package/fesm/enums/notification-type.enum.js +7 -0
- package/fesm/enums/participant-status.enum.js +7 -0
- package/fesm/enums/recurrence-type.enum.js +8 -0
- package/fesm/exceptions/base-app.exception.js +115 -0
- package/fesm/exceptions/index.js +1 -0
- package/fesm/exceptions/permission.exception.js +16 -18
- package/fesm/filters/global-exception.filter.js +269 -0
- package/fesm/filters/index.js +1 -0
- package/fesm/guards/jwt-auth.guard.js +5 -2
- package/fesm/guards/permission.guard.js +90 -150
- package/fesm/index.js +2 -0
- package/fesm/interceptors/idempotency.interceptor.js +2 -2
- package/fesm/interceptors/index.js +1 -4
- package/fesm/interceptors/set-user-field-on-body.interceptor.js +39 -0
- package/fesm/interceptors/slug.interceptor.js +31 -10
- package/fesm/interfaces/datasource.interface.js +1 -0
- package/fesm/interfaces/event-manager-adapter.interface.js +1 -0
- package/fesm/interfaces/index.js +4 -2
- package/fesm/interfaces/module-config.interface.js +5 -0
- package/fesm/interfaces/notification-adapter.interface.js +1 -0
- package/fesm/interfaces/permission.interface.js +1 -3
- package/fesm/middlewares/logger.middleware.js +133 -109
- package/fesm/modules/cache/cache.module.js +2 -2
- package/fesm/modules/datasource/index.js +0 -1
- package/fesm/modules/datasource/multi-tenant-datasource.service.js +61 -184
- package/fesm/modules/utils/utils.service.js +27 -206
- package/fesm/utils/date-time.util.js +70 -0
- package/fesm/utils/html-sanitizer.util.js +69 -0
- package/fesm/utils/index.js +5 -1
- package/fesm/utils/query-helpers.util.js +85 -0
- package/fesm/utils/request.util.js +81 -0
- package/fesm/utils/string.util.js +71 -0
- package/filters/global-exception.filter.d.ts +9 -0
- package/filters/index.d.ts +1 -0
- package/guards/permission.guard.d.ts +4 -6
- package/index.d.ts +2 -0
- package/interceptors/idempotency.interceptor.d.ts +1 -1
- package/interceptors/index.d.ts +1 -4
- package/interceptors/set-user-field-on-body.interceptor.d.ts +5 -0
- package/interceptors/slug.interceptor.d.ts +2 -1
- package/interfaces/api.interface.d.ts +4 -2
- package/interfaces/datasource.interface.d.ts +5 -0
- package/interfaces/event-manager-adapter.interface.d.ts +43 -0
- package/interfaces/identity.interface.d.ts +4 -4
- package/interfaces/index.d.ts +4 -2
- package/interfaces/logged-user-info.interface.d.ts +0 -2
- package/interfaces/module-config.interface.d.ts +6 -0
- package/interfaces/notification-adapter.interface.d.ts +21 -0
- package/interfaces/permission.interface.d.ts +13 -9
- package/middlewares/logger.middleware.d.ts +2 -2
- package/modules/datasource/index.d.ts +0 -1
- package/modules/datasource/multi-tenant-datasource.service.d.ts +5 -16
- package/modules/utils/utils.service.d.ts +3 -14
- package/package.json +21 -14
- package/utils/date-time.util.d.ts +8 -0
- package/utils/html-sanitizer.util.d.ts +2 -0
- package/utils/index.d.ts +5 -1
- package/utils/query-helpers.util.d.ts +16 -0
- package/utils/request.util.d.ts +6 -0
- package/utils/string.util.d.ts +2 -0
- package/cjs/classes/request-scoped-api.service.js +0 -61
- package/cjs/classes/winston-logger-adapter.class.js +0 -121
- package/cjs/interceptors/query-performance.interceptor.js +0 -66
- package/cjs/interceptors/set-create-by-on-body.interceptor.js +0 -40
- package/cjs/interceptors/set-delete-by-on-body.interceptor.js +0 -40
- package/cjs/interceptors/set-update-by-on-body.interceptor.js +0 -40
- package/cjs/interfaces/base-query.interface.js +0 -6
- package/cjs/interfaces/logger.interface.js +0 -7
- package/cjs/modules/datasource/datasource.module.js +0 -120
- package/cjs/utils/error-handler.util.js +0 -67
- package/classes/request-scoped-api.service.d.ts +0 -13
- package/classes/winston-logger-adapter.class.d.ts +0 -20
- package/fesm/classes/request-scoped-api.service.js +0 -51
- package/fesm/classes/winston-logger-adapter.class.js +0 -124
- package/fesm/interceptors/query-performance.interceptor.js +0 -56
- package/fesm/interceptors/set-create-by-on-body.interceptor.js +0 -30
- package/fesm/interceptors/set-delete-by-on-body.interceptor.js +0 -30
- package/fesm/interceptors/set-update-by-on-body.interceptor.js +0 -30
- package/fesm/interfaces/base-query.interface.js +0 -3
- package/fesm/interfaces/logger.interface.js +0 -4
- package/fesm/modules/datasource/datasource.module.js +0 -110
- package/fesm/utils/error-handler.util.js +0 -59
- package/interceptors/query-performance.interceptor.d.ts +0 -8
- package/interceptors/set-create-by-on-body.interceptor.d.ts +0 -5
- package/interceptors/set-delete-by-on-body.interceptor.d.ts +0 -5
- package/interceptors/set-update-by-on-body.interceptor.d.ts +0 -5
- package/interfaces/base-query.interface.d.ts +0 -7
- package/interfaces/logger.interface.d.ts +0 -7
- package/modules/datasource/datasource.module.d.ts +0 -18
- package/utils/error-handler.util.d.ts +0 -24
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get createModuleLogger () {
|
|
13
|
+
return createModuleLogger;
|
|
14
|
+
},
|
|
15
|
+
get instance () {
|
|
8
16
|
return instance;
|
|
9
17
|
}
|
|
10
18
|
});
|
|
@@ -12,8 +20,8 @@ const _config = require("@flusys/nestjs-core/config");
|
|
|
12
20
|
const _fs = require("fs");
|
|
13
21
|
const _path = require("path");
|
|
14
22
|
const _winston = require("winston");
|
|
15
|
-
const _winstontransport = /*#__PURE__*/ _interop_require_wildcard(require("winston-transport"));
|
|
16
23
|
const _winstondailyrotatefile = /*#__PURE__*/ _interop_require_wildcard(require("winston-daily-rotate-file"));
|
|
24
|
+
const _winstontransport = /*#__PURE__*/ _interop_require_wildcard(require("winston-transport"));
|
|
17
25
|
function _define_property(obj, key, value) {
|
|
18
26
|
if (key in obj) {
|
|
19
27
|
Object.defineProperty(obj, key, {
|
|
@@ -85,33 +93,48 @@ if (!(0, _fs.existsSync)(LOG_DIR)) {
|
|
|
85
93
|
}
|
|
86
94
|
// Custom Formats
|
|
87
95
|
/**
|
|
88
|
-
* Custom format for structured logging
|
|
89
|
-
*
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
96
|
+
* Custom format for structured logging (production)
|
|
97
|
+
* Multi-line format:
|
|
98
|
+
* - Line 1: Timestamp
|
|
99
|
+
* - Line 2: Log Level
|
|
100
|
+
* - Line 3: [RequestId]
|
|
101
|
+
* - Line 4: Empty
|
|
102
|
+
* - Line 5+: Message with context
|
|
103
|
+
*/ const LEVEL_MAP = {
|
|
104
|
+
error: 'Error',
|
|
105
|
+
warn: 'Warning',
|
|
106
|
+
info: 'Information',
|
|
107
|
+
debug: 'Debug',
|
|
108
|
+
verbose: 'Verbose'
|
|
109
|
+
};
|
|
110
|
+
const LOG_SEPARATOR = '─'.repeat(80);
|
|
111
|
+
const structuredFormat = _winston.format.printf(({ timestamp, level, message, context, requestId, userId, tenantId, companyId, method, url, path, statusCode, duration, stack, ...metadata })=>{
|
|
112
|
+
const reqId = requestId || 'no-request-id';
|
|
113
|
+
const levelFormatted = LEVEL_MAP[level] || level.charAt(0).toUpperCase() + level.slice(1);
|
|
114
|
+
const contextParts = [];
|
|
115
|
+
if (context) contextParts.push(`Context: ${context}`);
|
|
116
|
+
if (method && (path || url)) contextParts.push(`Endpoint: ${method} ${path || url}`);
|
|
117
|
+
if (statusCode) contextParts.push(`Status: ${statusCode}`);
|
|
118
|
+
if (duration) contextParts.push(`Duration: ${duration}`);
|
|
119
|
+
if (userId) contextParts.push(`UserId: ${userId}`);
|
|
120
|
+
if (tenantId) contextParts.push(`TenantId: ${tenantId}`);
|
|
121
|
+
if (companyId) contextParts.push(`CompanyId: ${companyId}`);
|
|
122
|
+
let content = message;
|
|
123
|
+
if (contextParts.length > 0) {
|
|
124
|
+
content = `${contextParts.join(' | ')}\n${message}`;
|
|
125
|
+
}
|
|
126
|
+
const metaKeys = Object.keys(metadata).filter((k)=>k !== 'splat');
|
|
127
|
+
if (metaKeys.length > 0) {
|
|
128
|
+
const metaStr = JSON.stringify(metaKeys.reduce((acc, k)=>({
|
|
129
|
+
...acc,
|
|
130
|
+
[k]: metadata[k]
|
|
131
|
+
}), {}));
|
|
132
|
+
content += `\nMetadata: ${metaStr}`;
|
|
133
|
+
}
|
|
134
|
+
if (stack) {
|
|
135
|
+
content += `\nStack: ${stack}`;
|
|
136
|
+
}
|
|
137
|
+
return `${LOG_SEPARATOR}\n${timestamp} | ${levelFormatted} | [${reqId}]\n${content}`;
|
|
115
138
|
});
|
|
116
139
|
// Transports
|
|
117
140
|
/**
|
|
@@ -134,63 +157,44 @@ if (!(0, _fs.existsSync)(LOG_DIR)) {
|
|
|
134
157
|
maxFiles: LOG_MAX_FILES,
|
|
135
158
|
level: 'error'
|
|
136
159
|
});
|
|
137
|
-
//
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (tenantTransportCache.has(tenantId)) {
|
|
147
|
-
return tenantTransportCache.get(tenantId);
|
|
148
|
-
}
|
|
149
|
-
const tenantLogDir = (0, _path.join)(LOG_DIR, tenantId);
|
|
150
|
-
if (!(0, _fs.existsSync)(tenantLogDir)) {
|
|
151
|
-
(0, _fs.mkdirSync)(tenantLogDir, {
|
|
160
|
+
// Transport Caches
|
|
161
|
+
const moduleTransportCache = new Map();
|
|
162
|
+
const tenantTransportCache = new Map();
|
|
163
|
+
function getCachedTransport(cache, name) {
|
|
164
|
+
const cached = cache.get(name);
|
|
165
|
+
if (cached) return cached;
|
|
166
|
+
const logDir = (0, _path.join)(LOG_DIR, name);
|
|
167
|
+
if (!(0, _fs.existsSync)(logDir)) {
|
|
168
|
+
(0, _fs.mkdirSync)(logDir, {
|
|
152
169
|
recursive: true
|
|
153
170
|
});
|
|
154
171
|
}
|
|
155
172
|
const transport = new DailyRotateFile({
|
|
156
|
-
filename: `${
|
|
173
|
+
filename: `${logDir}/combined-%DATE%.log`,
|
|
157
174
|
datePattern: 'YYYY-MM-DD',
|
|
158
175
|
zippedArchive: true,
|
|
159
176
|
maxSize: LOG_MAX_SIZE,
|
|
160
177
|
maxFiles: LOG_MAX_FILES,
|
|
161
178
|
level: LOG_LEVEL
|
|
162
179
|
});
|
|
163
|
-
|
|
180
|
+
cache.set(name, transport);
|
|
164
181
|
return transport;
|
|
165
182
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
*/ let TenantAwareTransport = class TenantAwareTransport extends Transport {
|
|
183
|
+
const getModuleTransport = (name)=>getCachedTransport(moduleTransportCache, name);
|
|
184
|
+
const getTenantTransport = (name)=>getCachedTransport(tenantTransportCache, name);
|
|
185
|
+
let TenantAwareTransport = class TenantAwareTransport extends Transport {
|
|
170
186
|
log(info, callback) {
|
|
171
187
|
setImmediate(()=>this.emit('logged', info));
|
|
172
188
|
const tenantId = info.tenantId || info.metadata?.tenantId;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const tenantTransport = getTenantTransport(tenantId);
|
|
176
|
-
tenantTransport.log(info, callback);
|
|
177
|
-
} else {
|
|
178
|
-
// Write to default log folder
|
|
179
|
-
this.defaultTransport.log(info, callback);
|
|
180
|
-
}
|
|
189
|
+
const transport = USE_TENANT_MODE && tenantId ? getTenantTransport(tenantId) : this.defaultTransport;
|
|
190
|
+
transport.log(info, callback);
|
|
181
191
|
}
|
|
182
192
|
constructor(defaultTransport){
|
|
183
|
-
super(), _define_property(this, "defaultTransport", void 0);
|
|
184
|
-
this.defaultTransport = defaultTransport;
|
|
193
|
+
super(), _define_property(this, "defaultTransport", void 0), this.defaultTransport = defaultTransport;
|
|
185
194
|
}
|
|
186
195
|
};
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
* When USE_TENANT_MODE=true, routes to tenant folders (like database mode)
|
|
190
|
-
*/ const tenantAwareCombinedTransport = new TenantAwareTransport(combinedRotateTransport);
|
|
191
|
-
/**
|
|
192
|
-
* Console transport for development
|
|
193
|
-
*/ const consoleTransport = new _winston.transports.Console({
|
|
196
|
+
const tenantAwareCombinedTransport = new TenantAwareTransport(combinedRotateTransport);
|
|
197
|
+
const consoleTransport = new _winston.transports.Console({
|
|
194
198
|
level: LOG_LEVEL,
|
|
195
199
|
format: _winston.format.combine(_winston.format.colorize({
|
|
196
200
|
all: true
|
|
@@ -198,7 +202,7 @@ if (!(0, _fs.existsSync)(LOG_DIR)) {
|
|
|
198
202
|
format: 'YYYY-MM-DD HH:mm:ss'
|
|
199
203
|
}), _winston.format.errors({
|
|
200
204
|
stack: true
|
|
201
|
-
}),
|
|
205
|
+
}), structuredFormat)
|
|
202
206
|
});
|
|
203
207
|
// Logger Instances
|
|
204
208
|
/**
|
|
@@ -239,3 +243,32 @@ if (!(0, _fs.existsSync)(LOG_DIR)) {
|
|
|
239
243
|
exitOnError: false
|
|
240
244
|
});
|
|
241
245
|
const instance = _config.envConfig.isProduction() ? prodLogger : devLogger;
|
|
246
|
+
/**
|
|
247
|
+
* Module logger cache to avoid creating multiple loggers for the same module
|
|
248
|
+
*/ const moduleLoggerCache = new Map();
|
|
249
|
+
function createModuleLogger(moduleName) {
|
|
250
|
+
// In dev mode, use global console logger
|
|
251
|
+
if (!_config.envConfig.isProduction()) {
|
|
252
|
+
return devLogger;
|
|
253
|
+
}
|
|
254
|
+
// Check cache first
|
|
255
|
+
if (moduleLoggerCache.has(moduleName)) {
|
|
256
|
+
return moduleLoggerCache.get(moduleName);
|
|
257
|
+
}
|
|
258
|
+
// Create module-specific logger for production
|
|
259
|
+
const moduleLogger = (0, _winston.createLogger)({
|
|
260
|
+
level: LOG_LEVEL,
|
|
261
|
+
format: _winston.format.combine(_winston.format.timestamp({
|
|
262
|
+
format: 'YYYY-MM-DD HH:mm:ss.SSS'
|
|
263
|
+
}), _winston.format.errors({
|
|
264
|
+
stack: true
|
|
265
|
+
}), structuredFormat),
|
|
266
|
+
transports: [
|
|
267
|
+
getModuleTransport(moduleName),
|
|
268
|
+
errorRotateTransport
|
|
269
|
+
],
|
|
270
|
+
exitOnError: false
|
|
271
|
+
});
|
|
272
|
+
moduleLoggerCache.set(moduleName, moduleLogger);
|
|
273
|
+
return moduleLogger;
|
|
274
|
+
}
|
package/cjs/constants/index.js
CHANGED
|
@@ -25,9 +25,6 @@ _export(exports, {
|
|
|
25
25
|
get IS_PUBLIC_KEY () {
|
|
26
26
|
return IS_PUBLIC_KEY;
|
|
27
27
|
},
|
|
28
|
-
get LOGGER_INSTANCE () {
|
|
29
|
-
return LOGGER_INSTANCE;
|
|
30
|
-
},
|
|
31
28
|
get PERMISSIONS_CACHE_PREFIX () {
|
|
32
29
|
return PERMISSIONS_CACHE_PREFIX;
|
|
33
30
|
},
|
|
@@ -41,11 +38,25 @@ _export(exports, {
|
|
|
41
38
|
return REQUEST_ID_HEADER;
|
|
42
39
|
}
|
|
43
40
|
});
|
|
41
|
+
_export_star(require("./permissions"), exports);
|
|
42
|
+
_export_star(require("./message-keys"), exports);
|
|
43
|
+
function _export_star(from, to) {
|
|
44
|
+
Object.keys(from).forEach(function(k) {
|
|
45
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
46
|
+
Object.defineProperty(to, k, {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
get: function() {
|
|
49
|
+
return from[k];
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
return from;
|
|
55
|
+
}
|
|
44
56
|
const IS_PUBLIC_KEY = 'isPublic';
|
|
45
57
|
const PERMISSIONS_KEY = 'permissions';
|
|
46
58
|
const CACHE_INSTANCE = 'CACHE_INSTANCE';
|
|
47
59
|
const PERMISSION_GUARD_CONFIG = 'PERMISSION_GUARD_CONFIG';
|
|
48
|
-
const LOGGER_INSTANCE = 'LOGGER_INSTANCE';
|
|
49
60
|
const IDEMPOTENCY_KEY_HEADER = 'x-idempotency-key';
|
|
50
61
|
const REQUEST_ID_HEADER = 'x-request-id';
|
|
51
62
|
const CLIENT_TYPE_HEADER = 'x-client-type';
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// ==================== AUTH (Shared across guards/interceptors) ====================
|
|
2
|
+
// These are duplicated in nestjs-auth but needed here to avoid circular dependencies
|
|
3
|
+
"use strict";
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
function _export(target, all) {
|
|
8
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
_export(exports, {
|
|
14
|
+
get AUTH_MESSAGES () {
|
|
15
|
+
return AUTH_MESSAGES;
|
|
16
|
+
},
|
|
17
|
+
get ERROR_MESSAGES () {
|
|
18
|
+
return ERROR_MESSAGES;
|
|
19
|
+
},
|
|
20
|
+
get SYSTEM_MESSAGES () {
|
|
21
|
+
return SYSTEM_MESSAGES;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
const AUTH_MESSAGES = {
|
|
25
|
+
TOKEN_REQUIRED: 'auth.token.required',
|
|
26
|
+
TOKEN_INVALID: 'auth.token.invalid',
|
|
27
|
+
ENTITY_BELOG_ANOTHER_COMPANY: 'entity.belongs.another.company',
|
|
28
|
+
COMPANY_NO_ACCESS: 'auth.company.no.access'
|
|
29
|
+
};
|
|
30
|
+
const ERROR_MESSAGES = {
|
|
31
|
+
NOT_FOUND: 'error.not.found',
|
|
32
|
+
VALIDATION: 'error.validation',
|
|
33
|
+
UNAUTHORIZED: 'error.unauthorized',
|
|
34
|
+
FORBIDDEN: 'error.forbidden',
|
|
35
|
+
CONFLICT: 'error.conflict',
|
|
36
|
+
DB_FOREIGN_KEY: 'error.db.foreign.key',
|
|
37
|
+
DB_NOT_NULL: 'error.db.not.null',
|
|
38
|
+
DB_INVALID_INPUT: 'error.db.invalid.input',
|
|
39
|
+
DB_VALUE_TOO_LONG: 'error.db.value.too.long',
|
|
40
|
+
DB_CHECK_CONSTRAINT: 'error.db.check.constraint',
|
|
41
|
+
DB_DEADLOCK: 'error.db.deadlock',
|
|
42
|
+
INTERNAL: 'error.internal',
|
|
43
|
+
SERVICE_UNAVAILABLE: 'error.service.unavailable',
|
|
44
|
+
UNKNOWN: 'error.unknown',
|
|
45
|
+
HTTP: 'error.http',
|
|
46
|
+
GENERIC: 'error.generic',
|
|
47
|
+
PERMISSION_SYSTEM_UNAVAILABLE: 'error.permission.system.unavailable',
|
|
48
|
+
INSUFFICIENT_PERMISSIONS: 'error.insufficient.permissions',
|
|
49
|
+
INSUFFICIENT_PERMISSIONS_OR: 'error.insufficient.permissions.or',
|
|
50
|
+
NO_PERMISSIONS_FOUND: 'error.no.permissions.found',
|
|
51
|
+
ENDPOINT_DISABLED: 'error.endpoint.disabled'
|
|
52
|
+
};
|
|
53
|
+
const SYSTEM_MESSAGES = {
|
|
54
|
+
REPOSITORY_NOT_AVAILABLE: 'system.repository.not.available',
|
|
55
|
+
DATASOURCE_NOT_AVAILABLE: 'system.datasource.not.available',
|
|
56
|
+
DATABASE_CONFIG_NOT_AVAILABLE: 'system.database.config.not.available',
|
|
57
|
+
SERVICE_NOT_AVAILABLE: 'system.service.not.available',
|
|
58
|
+
CONFIG_REQUIRED: 'system.config.required',
|
|
59
|
+
INTERNAL_ERROR: 'system.internal.error',
|
|
60
|
+
DUPLICATE_REQUEST: 'system.duplicate.request',
|
|
61
|
+
INVALID_TENANT_ID: 'system.invalid.tenant.id',
|
|
62
|
+
TENANT_NOT_FOUND: 'system.tenant.not.found',
|
|
63
|
+
TENANT_HEADER_REQUIRED: 'system.tenant.header.required',
|
|
64
|
+
MISSING_PARAMETER: 'system.missing.parameter',
|
|
65
|
+
SDK_NOT_INSTALLED: 'system.sdk.not.installed',
|
|
66
|
+
PATH_TRAVERSAL_DETECTED: 'system.path.traversal.detected',
|
|
67
|
+
INVALID_FILE_KEY: 'system.invalid.file.key'
|
|
68
|
+
};
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
// ==================== AUTH MODULE ====================
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
function _export(target, all) {
|
|
7
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
_export(exports, {
|
|
13
|
+
get ACTION_PERMISSIONS () {
|
|
14
|
+
return ACTION_PERMISSIONS;
|
|
15
|
+
},
|
|
16
|
+
get BRANCH_PERMISSIONS () {
|
|
17
|
+
return BRANCH_PERMISSIONS;
|
|
18
|
+
},
|
|
19
|
+
get COMPANY_ACTION_PERMISSIONS () {
|
|
20
|
+
return COMPANY_ACTION_PERMISSIONS;
|
|
21
|
+
},
|
|
22
|
+
get COMPANY_PERMISSIONS () {
|
|
23
|
+
return COMPANY_PERMISSIONS;
|
|
24
|
+
},
|
|
25
|
+
get EMAIL_CONFIG_PERMISSIONS () {
|
|
26
|
+
return EMAIL_CONFIG_PERMISSIONS;
|
|
27
|
+
},
|
|
28
|
+
get EMAIL_TEMPLATE_PERMISSIONS () {
|
|
29
|
+
return EMAIL_TEMPLATE_PERMISSIONS;
|
|
30
|
+
},
|
|
31
|
+
get EVENT_PERMISSIONS () {
|
|
32
|
+
return EVENT_PERMISSIONS;
|
|
33
|
+
},
|
|
34
|
+
get FILE_PERMISSIONS () {
|
|
35
|
+
return FILE_PERMISSIONS;
|
|
36
|
+
},
|
|
37
|
+
get FOLDER_PERMISSIONS () {
|
|
38
|
+
return FOLDER_PERMISSIONS;
|
|
39
|
+
},
|
|
40
|
+
get FORM_PERMISSIONS () {
|
|
41
|
+
return FORM_PERMISSIONS;
|
|
42
|
+
},
|
|
43
|
+
get FORM_RESULT_PERMISSIONS () {
|
|
44
|
+
return FORM_RESULT_PERMISSIONS;
|
|
45
|
+
},
|
|
46
|
+
get LANGUAGE_PERMISSIONS () {
|
|
47
|
+
return LANGUAGE_PERMISSIONS;
|
|
48
|
+
},
|
|
49
|
+
get NOTIFICATION_PERMISSIONS () {
|
|
50
|
+
return NOTIFICATION_PERMISSIONS;
|
|
51
|
+
},
|
|
52
|
+
get PERMISSIONS () {
|
|
53
|
+
return PERMISSIONS;
|
|
54
|
+
},
|
|
55
|
+
get ROLE_ACTION_PERMISSIONS () {
|
|
56
|
+
return ROLE_ACTION_PERMISSIONS;
|
|
57
|
+
},
|
|
58
|
+
get ROLE_PERMISSIONS () {
|
|
59
|
+
return ROLE_PERMISSIONS;
|
|
60
|
+
},
|
|
61
|
+
get STORAGE_CONFIG_PERMISSIONS () {
|
|
62
|
+
return STORAGE_CONFIG_PERMISSIONS;
|
|
63
|
+
},
|
|
64
|
+
get TASK_BOARD_PERMISSIONS () {
|
|
65
|
+
return TASK_BOARD_PERMISSIONS;
|
|
66
|
+
},
|
|
67
|
+
get TASK_COMMENT_PERMISSIONS () {
|
|
68
|
+
return TASK_COMMENT_PERMISSIONS;
|
|
69
|
+
},
|
|
70
|
+
get TASK_LABEL_PERMISSIONS () {
|
|
71
|
+
return TASK_LABEL_PERMISSIONS;
|
|
72
|
+
},
|
|
73
|
+
get TASK_LIST_PERMISSIONS () {
|
|
74
|
+
return TASK_LIST_PERMISSIONS;
|
|
75
|
+
},
|
|
76
|
+
get TASK_PERMISSIONS () {
|
|
77
|
+
return TASK_PERMISSIONS;
|
|
78
|
+
},
|
|
79
|
+
get TRANSLATION_KEY_PERMISSIONS () {
|
|
80
|
+
return TRANSLATION_KEY_PERMISSIONS;
|
|
81
|
+
},
|
|
82
|
+
get TRANSLATION_PERMISSIONS () {
|
|
83
|
+
return TRANSLATION_PERMISSIONS;
|
|
84
|
+
},
|
|
85
|
+
get UPLOAD_CONFIG_PERMISSIONS () {
|
|
86
|
+
return UPLOAD_CONFIG_PERMISSIONS;
|
|
87
|
+
},
|
|
88
|
+
get USER_ACTION_PERMISSIONS () {
|
|
89
|
+
return USER_ACTION_PERMISSIONS;
|
|
90
|
+
},
|
|
91
|
+
get USER_PERMISSIONS () {
|
|
92
|
+
return USER_PERMISSIONS;
|
|
93
|
+
},
|
|
94
|
+
get USER_ROLE_PERMISSIONS () {
|
|
95
|
+
return USER_ROLE_PERMISSIONS;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const USER_PERMISSIONS = {
|
|
99
|
+
CREATE: 'user.create',
|
|
100
|
+
READ: 'user.read',
|
|
101
|
+
UPDATE: 'user.update',
|
|
102
|
+
DELETE: 'user.delete'
|
|
103
|
+
};
|
|
104
|
+
const COMPANY_PERMISSIONS = {
|
|
105
|
+
CREATE: 'company.create',
|
|
106
|
+
READ: 'company.read',
|
|
107
|
+
UPDATE: 'company.update',
|
|
108
|
+
DELETE: 'company.delete'
|
|
109
|
+
};
|
|
110
|
+
const BRANCH_PERMISSIONS = {
|
|
111
|
+
CREATE: 'branch.create',
|
|
112
|
+
READ: 'branch.read',
|
|
113
|
+
UPDATE: 'branch.update',
|
|
114
|
+
DELETE: 'branch.delete'
|
|
115
|
+
};
|
|
116
|
+
const ACTION_PERMISSIONS = {
|
|
117
|
+
CREATE: 'action.create',
|
|
118
|
+
READ: 'action.read',
|
|
119
|
+
UPDATE: 'action.update',
|
|
120
|
+
DELETE: 'action.delete'
|
|
121
|
+
};
|
|
122
|
+
const ROLE_PERMISSIONS = {
|
|
123
|
+
CREATE: 'role.create',
|
|
124
|
+
READ: 'role.read',
|
|
125
|
+
UPDATE: 'role.update',
|
|
126
|
+
DELETE: 'role.delete'
|
|
127
|
+
};
|
|
128
|
+
const ROLE_ACTION_PERMISSIONS = {
|
|
129
|
+
READ: 'role-action.read',
|
|
130
|
+
ASSIGN: 'role-action.assign'
|
|
131
|
+
};
|
|
132
|
+
const USER_ROLE_PERMISSIONS = {
|
|
133
|
+
READ: 'user-role.read',
|
|
134
|
+
ASSIGN: 'user-role.assign'
|
|
135
|
+
};
|
|
136
|
+
const USER_ACTION_PERMISSIONS = {
|
|
137
|
+
READ: 'user-action.read',
|
|
138
|
+
ASSIGN: 'user-action.assign'
|
|
139
|
+
};
|
|
140
|
+
const COMPANY_ACTION_PERMISSIONS = {
|
|
141
|
+
READ: 'company-action.read',
|
|
142
|
+
ASSIGN: 'company-action.assign'
|
|
143
|
+
};
|
|
144
|
+
const FILE_PERMISSIONS = {
|
|
145
|
+
CREATE: 'file.create',
|
|
146
|
+
READ: 'file.read',
|
|
147
|
+
UPDATE: 'file.update',
|
|
148
|
+
DELETE: 'file.delete'
|
|
149
|
+
};
|
|
150
|
+
const FOLDER_PERMISSIONS = {
|
|
151
|
+
CREATE: 'folder.create',
|
|
152
|
+
READ: 'folder.read',
|
|
153
|
+
UPDATE: 'folder.update',
|
|
154
|
+
DELETE: 'folder.delete'
|
|
155
|
+
};
|
|
156
|
+
const STORAGE_CONFIG_PERMISSIONS = {
|
|
157
|
+
CREATE: 'storage-config.create',
|
|
158
|
+
READ: 'storage-config.read',
|
|
159
|
+
UPDATE: 'storage-config.update',
|
|
160
|
+
DELETE: 'storage-config.delete'
|
|
161
|
+
};
|
|
162
|
+
const UPLOAD_CONFIG_PERMISSIONS = {
|
|
163
|
+
DELETE: 'upload-config.delete'
|
|
164
|
+
};
|
|
165
|
+
const EMAIL_CONFIG_PERMISSIONS = {
|
|
166
|
+
CREATE: 'email-config.create',
|
|
167
|
+
READ: 'email-config.read',
|
|
168
|
+
UPDATE: 'email-config.update',
|
|
169
|
+
DELETE: 'email-config.delete'
|
|
170
|
+
};
|
|
171
|
+
const EMAIL_TEMPLATE_PERMISSIONS = {
|
|
172
|
+
CREATE: 'email-template.create',
|
|
173
|
+
READ: 'email-template.read',
|
|
174
|
+
UPDATE: 'email-template.update',
|
|
175
|
+
DELETE: 'email-template.delete'
|
|
176
|
+
};
|
|
177
|
+
const FORM_PERMISSIONS = {
|
|
178
|
+
CREATE: 'form.create',
|
|
179
|
+
READ: 'form.read',
|
|
180
|
+
UPDATE: 'form.update',
|
|
181
|
+
DELETE: 'form.delete'
|
|
182
|
+
};
|
|
183
|
+
const FORM_RESULT_PERMISSIONS = {
|
|
184
|
+
CREATE: 'form-result.create',
|
|
185
|
+
READ: 'form-result.read',
|
|
186
|
+
UPDATE: 'form-result.update',
|
|
187
|
+
DELETE: 'form-result.delete'
|
|
188
|
+
};
|
|
189
|
+
const EVENT_PERMISSIONS = {
|
|
190
|
+
CREATE: 'event.create',
|
|
191
|
+
READ: 'event.read',
|
|
192
|
+
UPDATE: 'event.update',
|
|
193
|
+
DELETE: 'event.delete'
|
|
194
|
+
};
|
|
195
|
+
const NOTIFICATION_PERMISSIONS = {
|
|
196
|
+
CREATE: 'notification.create',
|
|
197
|
+
READ: 'notification.read',
|
|
198
|
+
UPDATE: 'notification.update',
|
|
199
|
+
DELETE: 'notification.delete'
|
|
200
|
+
};
|
|
201
|
+
const LANGUAGE_PERMISSIONS = {
|
|
202
|
+
CREATE: 'language.create',
|
|
203
|
+
READ: 'language.read',
|
|
204
|
+
UPDATE: 'language.update',
|
|
205
|
+
DELETE: 'language.delete'
|
|
206
|
+
};
|
|
207
|
+
const TRANSLATION_KEY_PERMISSIONS = {
|
|
208
|
+
CREATE: 'translation-key.create',
|
|
209
|
+
READ: 'translation-key.read',
|
|
210
|
+
UPDATE: 'translation-key.update',
|
|
211
|
+
DELETE: 'translation-key.delete'
|
|
212
|
+
};
|
|
213
|
+
const TRANSLATION_PERMISSIONS = {
|
|
214
|
+
CREATE: 'translation.create',
|
|
215
|
+
READ: 'translation.read',
|
|
216
|
+
UPDATE: 'translation.update',
|
|
217
|
+
DELETE: 'translation.delete'
|
|
218
|
+
};
|
|
219
|
+
const TASK_BOARD_PERMISSIONS = {
|
|
220
|
+
CREATE: 'task-board.create',
|
|
221
|
+
READ: 'task-board.read',
|
|
222
|
+
UPDATE: 'task-board.update',
|
|
223
|
+
DELETE: 'task-board.delete',
|
|
224
|
+
MANAGE_MEMBERS: 'task-board.manage-members'
|
|
225
|
+
};
|
|
226
|
+
const TASK_LIST_PERMISSIONS = {
|
|
227
|
+
CREATE: 'task-list.create',
|
|
228
|
+
READ: 'task-list.read',
|
|
229
|
+
UPDATE: 'task-list.update',
|
|
230
|
+
DELETE: 'task-list.delete'
|
|
231
|
+
};
|
|
232
|
+
const TASK_PERMISSIONS = {
|
|
233
|
+
CREATE: 'task.create',
|
|
234
|
+
READ: 'task.read',
|
|
235
|
+
UPDATE: 'task.update',
|
|
236
|
+
DELETE: 'task.delete',
|
|
237
|
+
MOVE: 'task.move',
|
|
238
|
+
ASSIGN: 'task.assign'
|
|
239
|
+
};
|
|
240
|
+
const TASK_LABEL_PERMISSIONS = {
|
|
241
|
+
CREATE: 'task-label.create',
|
|
242
|
+
READ: 'task-label.read',
|
|
243
|
+
UPDATE: 'task-label.update',
|
|
244
|
+
DELETE: 'task-label.delete'
|
|
245
|
+
};
|
|
246
|
+
const TASK_COMMENT_PERMISSIONS = {
|
|
247
|
+
CREATE: 'task-comment.create',
|
|
248
|
+
READ: 'task-comment.read',
|
|
249
|
+
DELETE: 'task-comment.delete'
|
|
250
|
+
};
|
|
251
|
+
const PERMISSIONS = {
|
|
252
|
+
// Auth
|
|
253
|
+
USER: USER_PERMISSIONS,
|
|
254
|
+
COMPANY: COMPANY_PERMISSIONS,
|
|
255
|
+
BRANCH: BRANCH_PERMISSIONS,
|
|
256
|
+
// IAM
|
|
257
|
+
ACTION: ACTION_PERMISSIONS,
|
|
258
|
+
ROLE: ROLE_PERMISSIONS,
|
|
259
|
+
ROLE_ACTION: ROLE_ACTION_PERMISSIONS,
|
|
260
|
+
USER_ROLE: USER_ROLE_PERMISSIONS,
|
|
261
|
+
USER_ACTION: USER_ACTION_PERMISSIONS,
|
|
262
|
+
COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,
|
|
263
|
+
// Storage
|
|
264
|
+
FILE: FILE_PERMISSIONS,
|
|
265
|
+
FOLDER: FOLDER_PERMISSIONS,
|
|
266
|
+
STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,
|
|
267
|
+
// Email
|
|
268
|
+
EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,
|
|
269
|
+
EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,
|
|
270
|
+
// Form Builder
|
|
271
|
+
FORM: FORM_PERMISSIONS,
|
|
272
|
+
FORM_RESULT: FORM_RESULT_PERMISSIONS,
|
|
273
|
+
// Event Manager
|
|
274
|
+
EVENT: EVENT_PERMISSIONS,
|
|
275
|
+
// Notification
|
|
276
|
+
NOTIFICATION: NOTIFICATION_PERMISSIONS,
|
|
277
|
+
// Localization
|
|
278
|
+
LANGUAGE: LANGUAGE_PERMISSIONS,
|
|
279
|
+
TRANSLATION_KEY: TRANSLATION_KEY_PERMISSIONS,
|
|
280
|
+
TRANSLATION: TRANSLATION_PERMISSIONS,
|
|
281
|
+
// Task Manager
|
|
282
|
+
TASK_BOARD: TASK_BOARD_PERMISSIONS,
|
|
283
|
+
TASK_LIST: TASK_LIST_PERMISSIONS,
|
|
284
|
+
TASK: TASK_PERMISSIONS,
|
|
285
|
+
TASK_LABEL: TASK_LABEL_PERMISSIONS,
|
|
286
|
+
TASK_COMMENT: TASK_COMMENT_PERMISSIONS
|
|
287
|
+
};
|
|
@@ -8,14 +8,13 @@ Object.defineProperty(exports, "ApiResponseDto", {
|
|
|
8
8
|
return ApiResponseDto;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
const _dtos = require("
|
|
11
|
+
const _dtos = require("../dtos");
|
|
12
12
|
const _common = require("@nestjs/common");
|
|
13
13
|
const _swagger = require("@nestjs/swagger");
|
|
14
14
|
const ApiResponseDto = (dto, isArray = false, arrayType = 'list')=>{
|
|
15
|
-
// Select appropriate wrapper based on response type
|
|
16
15
|
let wrapperDto;
|
|
17
16
|
let metaDto = null;
|
|
18
|
-
if (!isArray) {
|
|
17
|
+
if (!isArray || arrayType === 'single') {
|
|
19
18
|
wrapperDto = _dtos.SingleResponseDto;
|
|
20
19
|
} else if (arrayType === 'bulk') {
|
|
21
20
|
wrapperDto = _dtos.BulkResponseDto;
|
package/cjs/decorators/index.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
_export_star(require("./api-response.decorator"), exports);
|
|
6
6
|
_export_star(require("./current-user.decorator"), exports);
|
|
7
|
+
_export_star(require("./log-action.decorator"), exports);
|
|
7
8
|
_export_star(require("./public.decorator"), exports);
|
|
8
9
|
_export_star(require("./require-permission.decorator"), exports);
|
|
9
10
|
function _export_star(from, to) {
|