@bearei/nest 0.0.0-stage → 2.0.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/LICENSE +21 -0
  3. package/README.md +100 -2
  4. package/README.zh-CN.md +103 -0
  5. package/dist/action-log/action-log.interface.d.ts +12 -0
  6. package/dist/action-log/action-log.interface.js +2 -0
  7. package/dist/action-log/action-log.module.d.ts +2 -0
  8. package/dist/action-log/action-log.module.js +22 -0
  9. package/dist/action-log/action-log.service.d.ts +10 -0
  10. package/dist/action-log/action-log.service.js +42 -0
  11. package/dist/action-log/index.d.ts +3 -0
  12. package/dist/action-log/index.js +19 -0
  13. package/dist/authentication/authentication-context.interceptor.d.ts +7 -0
  14. package/dist/authentication/authentication-context.interceptor.js +70 -0
  15. package/dist/authentication/authentication.enum.d.ts +6 -0
  16. package/dist/authentication/authentication.enum.js +9 -0
  17. package/dist/authentication/authentication.guard.d.ts +13 -0
  18. package/dist/authentication/authentication.guard.js +92 -0
  19. package/dist/authentication/authentication.interface.d.ts +2 -0
  20. package/dist/authentication/authentication.interface.js +2 -0
  21. package/dist/authentication/index.d.ts +4 -0
  22. package/dist/authentication/index.js +20 -0
  23. package/dist/authorization/authorization.interface.d.ts +3 -0
  24. package/dist/authorization/authorization.interface.js +2 -0
  25. package/dist/authorization/authorization.module.d.ts +2 -0
  26. package/dist/authorization/authorization.module.js +22 -0
  27. package/dist/authorization/authorization.service.d.ts +10 -0
  28. package/dist/authorization/authorization.service.js +56 -0
  29. package/dist/authorization/index.d.ts +3 -0
  30. package/dist/authorization/index.js +19 -0
  31. package/dist/base-service/base-service.interface.d.ts +84 -0
  32. package/dist/base-service/base-service.interface.js +2 -0
  33. package/dist/base-service/base-service.module.d.ts +2 -0
  34. package/dist/base-service/base-service.module.js +22 -0
  35. package/dist/base-service/base-service.service.d.ts +27 -0
  36. package/dist/base-service/base-service.service.js +517 -0
  37. package/dist/base-service/index.d.ts +3 -0
  38. package/dist/base-service/index.js +19 -0
  39. package/dist/common.dto.d.ts +19 -0
  40. package/dist/common.dto.js +111 -0
  41. package/dist/common.entity.d.ts +11 -0
  42. package/dist/common.entity.js +76 -0
  43. package/dist/common.enum.d.ts +19 -0
  44. package/dist/common.enum.js +24 -0
  45. package/dist/common.interface.d.ts +19 -0
  46. package/dist/common.interface.js +2 -0
  47. package/dist/database/database.module.d.ts +5 -0
  48. package/dist/database/database.module.js +58 -0
  49. package/dist/database/index.d.ts +1 -0
  50. package/dist/database/index.js +17 -0
  51. package/dist/decorators/allow-access.decorator.d.ts +3 -0
  52. package/dist/decorators/allow-access.decorator.js +7 -0
  53. package/dist/decorators/index.d.ts +8 -0
  54. package/dist/decorators/index.js +24 -0
  55. package/dist/decorators/is-captcha.decorator.d.ts +2 -0
  56. package/dist/decorators/is-captcha.decorator.js +23 -0
  57. package/dist/decorators/is-nano-id.decorator.d.ts +2 -0
  58. package/dist/decorators/is-nano-id.decorator.js +22 -0
  59. package/dist/decorators/is-password.decorator.d.ts +2 -0
  60. package/dist/decorators/is-password.decorator.js +23 -0
  61. package/dist/decorators/is-version.decorator.d.ts +2 -0
  62. package/dist/decorators/is-version.decorator.js +22 -0
  63. package/dist/decorators/omit-entity-keys.decorator.d.ts +2 -0
  64. package/dist/decorators/omit-entity-keys.decorator.js +7 -0
  65. package/dist/decorators/require-permissions.decorator.d.ts +3 -0
  66. package/dist/decorators/require-permissions.decorator.js +7 -0
  67. package/dist/decorators/require-subscription-features.decorator.d.ts +3 -0
  68. package/dist/decorators/require-subscription-features.decorator.js +7 -0
  69. package/dist/exception/exception.enum.d.ts +12 -0
  70. package/dist/exception/exception.enum.js +16 -0
  71. package/dist/exception/exception.interface.d.ts +9 -0
  72. package/dist/exception/exception.interface.js +2 -0
  73. package/dist/exception/http.exception.d.ts +4 -0
  74. package/dist/exception/http.exception.js +47 -0
  75. package/dist/exception/index.d.ts +3 -0
  76. package/dist/exception/index.js +19 -0
  77. package/dist/external/external.interface.d.ts +58 -0
  78. package/dist/external/external.interface.js +2 -0
  79. package/dist/external/external.module.d.ts +2 -0
  80. package/dist/external/external.module.js +24 -0
  81. package/dist/external/external.service.d.ts +15 -0
  82. package/dist/external/external.service.js +160 -0
  83. package/dist/external/index.d.ts +3 -0
  84. package/dist/external/index.js +19 -0
  85. package/dist/index.d.ts +17 -0
  86. package/dist/index.js +39 -0
  87. package/dist/jwt/index.d.ts +3 -0
  88. package/dist/jwt/index.js +19 -0
  89. package/dist/jwt/jwt.interface.d.ts +15 -0
  90. package/dist/jwt/jwt.interface.js +2 -0
  91. package/dist/jwt/jwt.module.d.ts +2 -0
  92. package/dist/jwt/jwt.module.js +43 -0
  93. package/dist/jwt/jwt.service.d.ts +10 -0
  94. package/dist/jwt/jwt.service.js +52 -0
  95. package/dist/permission/index.d.ts +3 -0
  96. package/dist/permission/index.js +19 -0
  97. package/dist/permission/permission.enum.d.ts +70 -0
  98. package/dist/permission/permission.enum.js +73 -0
  99. package/dist/permission/permission.guard.d.ts +9 -0
  100. package/dist/permission/permission.guard.js +55 -0
  101. package/dist/permission/permission.interface.d.ts +2 -0
  102. package/dist/permission/permission.interface.js +2 -0
  103. package/dist/redis/index.d.ts +3 -0
  104. package/dist/redis/index.js +19 -0
  105. package/dist/redis/redis.interface.d.ts +4 -0
  106. package/dist/redis/redis.interface.js +2 -0
  107. package/dist/redis/redis.module.d.ts +2 -0
  108. package/dist/redis/redis.module.js +22 -0
  109. package/dist/redis/redis.service.d.ts +14 -0
  110. package/dist/redis/redis.service.js +51 -0
  111. package/dist/subscription-feature/index.d.ts +3 -0
  112. package/dist/subscription-feature/index.js +19 -0
  113. package/dist/subscription-feature/subscription-feature.enum.d.ts +3 -0
  114. package/dist/subscription-feature/subscription-feature.enum.js +6 -0
  115. package/dist/subscription-feature/subscription-feature.interceptor.d.ts +9 -0
  116. package/dist/subscription-feature/subscription-feature.interceptor.js +68 -0
  117. package/dist/subscription-feature/subscription-feature.interface.d.ts +2 -0
  118. package/dist/subscription-feature/subscription-feature.interface.js +2 -0
  119. package/dist/utils/create-response-sanitizer/create-response-sanitizer.utils.d.ts +1 -0
  120. package/dist/utils/create-response-sanitizer/create-response-sanitizer.utils.js +23 -0
  121. package/dist/utils/create-response-sanitizer/index.d.ts +1 -0
  122. package/dist/utils/create-response-sanitizer/index.js +17 -0
  123. package/dist/utils/extract-bearer-token/extract-bearer-token.utils.d.ts +1 -0
  124. package/dist/utils/extract-bearer-token/extract-bearer-token.utils.js +13 -0
  125. package/dist/utils/extract-bearer-token/index.d.ts +1 -0
  126. package/dist/utils/extract-bearer-token/index.js +17 -0
  127. package/dist/utils/format-mobile-number/format-mobile-number.utils.d.ts +1 -0
  128. package/dist/utils/format-mobile-number/format-mobile-number.utils.js +5 -0
  129. package/dist/utils/format-mobile-number/index.d.ts +1 -0
  130. package/dist/utils/format-mobile-number/index.js +17 -0
  131. package/dist/utils/generate-random-number-string/generate-random-number-string.utils.d.ts +1 -0
  132. package/dist/utils/generate-random-number-string/generate-random-number-string.utils.js +6 -0
  133. package/dist/utils/generate-random-number-string/index.d.ts +1 -0
  134. package/dist/utils/generate-random-number-string/index.js +17 -0
  135. package/dist/utils/index.d.ts +6 -0
  136. package/dist/utils/index.js +22 -0
  137. package/dist/utils/run-with-database-retry/index.d.ts +1 -0
  138. package/dist/utils/run-with-database-retry/index.js +17 -0
  139. package/dist/utils/run-with-database-retry/run-with-database-retry.utils.d.ts +1 -0
  140. package/dist/utils/run-with-database-retry/run-with-database-retry.utils.js +23 -0
  141. package/dist/utils/sign/index.d.ts +1 -0
  142. package/dist/utils/sign/index.js +17 -0
  143. package/dist/utils/sign/sign.utils.d.ts +5 -0
  144. package/dist/utils/sign/sign.utils.js +82 -0
  145. package/package.json +126 -3
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ExternalModule = void 0;
10
+ const axios_1 = require("@nestjs/axios");
11
+ const common_1 = require("@nestjs/common");
12
+ const config_1 = require("@nestjs/config");
13
+ const jwt_1 = require("../jwt");
14
+ const external_service_1 = require("./external.service");
15
+ let ExternalModule = class ExternalModule {
16
+ };
17
+ exports.ExternalModule = ExternalModule;
18
+ exports.ExternalModule = ExternalModule = __decorate([
19
+ (0, common_1.Module)({
20
+ exports: [external_service_1.ExternalService],
21
+ imports: [config_1.ConfigModule, axios_1.HttpModule.register({ maxRedirects: 3, timeout: 20000 }), jwt_1.JwtModule],
22
+ providers: [external_service_1.ExternalService]
23
+ })
24
+ ], ExternalModule);
@@ -0,0 +1,15 @@
1
+ import { HttpService } from '@nestjs/axios';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import type { PaginatedResult, RequestHeaders } from '../common.interface';
4
+ import type { FindUserPermissionsOptions, FindUserSubscriptionFeaturesOptions, ExternalCreateActionLogOptions, ExternalRequestOptions, PermissionResult, SubscriptionFeatureResult } from './external.interface';
5
+ import { JwtService } from '../jwt';
6
+ export declare class ExternalService {
7
+ private readonly configService;
8
+ private readonly httpService;
9
+ private readonly jwtService;
10
+ constructor(configService: ConfigService, httpService: HttpService, jwtService: JwtService);
11
+ findUserPermissions(headers: RequestHeaders, userId: string, options: Omit<FindUserPermissionsOptions, 'userId'>): Promise<PaginatedResult<PermissionResult>>;
12
+ findUserSubscriptionFeatures(headers: RequestHeaders, userId: string, options: Omit<FindUserSubscriptionFeaturesOptions, 'userId'>): Promise<PaginatedResult<SubscriptionFeatureResult>>;
13
+ createActionLog(headers: RequestHeaders, { action, serviceName, ...restOptions }: ExternalCreateActionLogOptions): Promise<any>;
14
+ request({ baseURL, headers, isAsyncInvocation, method, params: rawParams, path, serviceName, timeout, version, ...restOptions }: ExternalRequestOptions): Promise<any>;
15
+ }
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ExternalService = void 0;
13
+ const axios_1 = require("@nestjs/axios");
14
+ const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
16
+ const rxjs_1 = require("rxjs");
17
+ const exception_1 = require("../exception");
18
+ const jwt_1 = require("../jwt");
19
+ const utils_1 = require("../utils");
20
+ const NETWORK_ERROR_CODES = new Set(['ECONNREFUSED', 'ECONNRESET', 'ENOTFOUND', 'ERR_NETWORK', 'UND_ERR_SOCKET']);
21
+ const TIMEOUT_ERROR_CODES = new Set(['ECONNABORTED', 'ETIMEDOUT']);
22
+ const serializeQueryParams = (params) => {
23
+ const serializedParams = {};
24
+ for (const [key, value] of Object.entries(params)) {
25
+ if (Array.isArray(value)) {
26
+ if (value.length) {
27
+ serializedParams[key] = value.join(',');
28
+ }
29
+ continue;
30
+ }
31
+ if (typeof value !== 'undefined') {
32
+ serializedParams[key] = value;
33
+ }
34
+ }
35
+ return serializedParams;
36
+ };
37
+ let ExternalService = class ExternalService {
38
+ configService;
39
+ httpService;
40
+ jwtService;
41
+ constructor(configService, httpService, jwtService) {
42
+ this.configService = configService;
43
+ this.httpService = httpService;
44
+ this.jwtService = jwtService;
45
+ }
46
+ findUserPermissions(headers, userId, options) {
47
+ return this.request({
48
+ headers,
49
+ method: 'GET',
50
+ params: options,
51
+ path: `/users/${encodeURIComponent(userId)}/permissions`,
52
+ serviceName: 'bearei-permission'
53
+ });
54
+ }
55
+ findUserSubscriptionFeatures(headers, userId, options) {
56
+ return this.request({
57
+ headers,
58
+ method: 'GET',
59
+ params: options,
60
+ path: `/users/${encodeURIComponent(userId)}/features`,
61
+ serviceName: 'bearei-subscription'
62
+ });
63
+ }
64
+ createActionLog(headers, { action, serviceName, ...restOptions }) {
65
+ return this.request({
66
+ data: {
67
+ ...restOptions,
68
+ action,
69
+ apiName: `${action}:${serviceName}`,
70
+ client: headers['x-bearei-client'],
71
+ domainId: headers['x-bearei-domain-id'],
72
+ ip: headers['x-bearei-ip'],
73
+ serviceName: this.configService.get('service.name'),
74
+ userAgent: headers['user-agent'],
75
+ userId: headers['x-bearei-subject']
76
+ },
77
+ headers,
78
+ isAsyncInvocation: true,
79
+ method: 'POST',
80
+ path: '/action-logs',
81
+ serviceName: 'bearei-log'
82
+ });
83
+ }
84
+ async request({ baseURL, headers, isAsyncInvocation = false, method = 'GET', params: rawParams, path = '/', serviceName, timeout, version, ...restOptions }) {
85
+ const secret = `${this.configService.get('service.accessKey')}:${this.configService.get('service.secretKey')}`;
86
+ const subject = (0, utils_1.createHmacSignature)(secret, { serviceName });
87
+ const token = await this.jwtService.signAsync({
88
+ audience: `internal:${this.configService.get('service.name')}`,
89
+ issuer: `${this.configService.get('service.name')}:${headers['x-bearei-domain-id']}`
90
+ }, subject, { expiresIn: '3m' });
91
+ const url = `/${serviceName}/${version ?? this.configService.get('apiService.version') ?? 'v1'}${path}`;
92
+ const requestConfig = {
93
+ ...restOptions,
94
+ ...(rawParams && { params: serializeQueryParams(rawParams) }),
95
+ adapter: 'fetch',
96
+ baseURL: baseURL ?? this.configService.get('apiService.url'),
97
+ headers: {
98
+ ...(isAsyncInvocation && { 'x-fc-invocation-type': 'Async' }),
99
+ authorization: headers['authorization'],
100
+ 'x-bearei-client': headers['x-bearei-client'],
101
+ 'x-bearei-domain-id': headers['x-bearei-domain-id'],
102
+ 'x-bearei-internal-authorization': `Bearer ${token}`,
103
+ 'x-bearei-ip': headers['x-bearei-ip'],
104
+ 'x-bearei-subject': headers['x-bearei-subject']
105
+ },
106
+ method,
107
+ timeout: timeout ?? this.configService.get('apiService.timeout'),
108
+ url
109
+ };
110
+ const processRequestError = (error) => {
111
+ const response = error.response;
112
+ const service = `${method}:${url}`;
113
+ const errorCode = error.code === undefined ? undefined : String(error.code);
114
+ if (errorCode && TIMEOUT_ERROR_CODES.has(errorCode)) {
115
+ (0, exception_1.throwHttpException)(exception_1.HTTP_EXCEPTION.REQUEST_TIMEOUT, {
116
+ code: exception_1.HTTP_EXCEPTION_CODE.INTERNAL_SERVER_REQUEST_TIMEOUT,
117
+ message: 'Internal service request timeout.',
118
+ service
119
+ });
120
+ }
121
+ if (errorCode && NETWORK_ERROR_CODES.has(errorCode)) {
122
+ (0, exception_1.throwHttpException)(exception_1.HTTP_EXCEPTION.BAD_GATEWAY, {
123
+ code: exception_1.HTTP_EXCEPTION_CODE.BAD_GATEWAY,
124
+ message: 'Internal service network error.',
125
+ service
126
+ });
127
+ }
128
+ const status = response ? response.status : error.status;
129
+ if (status) {
130
+ const responseData = response ? response.data : undefined;
131
+ (0, exception_1.throwHttpException)(exception_1.HTTP_EXCEPTION.GENERIC, {
132
+ code: responseData && typeof responseData.code !== 'undefined' ?
133
+ responseData.code
134
+ : Number(`${status}999`),
135
+ message: responseData && responseData.message ? responseData.message : error.message,
136
+ service,
137
+ status
138
+ });
139
+ }
140
+ throw error;
141
+ };
142
+ return (0, rxjs_1.firstValueFrom)(this.httpService.request(requestConfig).pipe((0, rxjs_1.catchError)(processRequestError))).then((response) => {
143
+ const data = response.data;
144
+ if (data && (data.errorMessage || data.Code)) {
145
+ (0, exception_1.throwHttpException)(exception_1.HTTP_EXCEPTION.BAD_GATEWAY, {
146
+ message: data.errorMessage ? data.errorMessage : data.Code,
147
+ service: `ALI-FC:${serviceName}`
148
+ });
149
+ }
150
+ return data;
151
+ });
152
+ }
153
+ };
154
+ exports.ExternalService = ExternalService;
155
+ exports.ExternalService = ExternalService = __decorate([
156
+ (0, common_1.Injectable)(),
157
+ __metadata("design:paramtypes", [config_1.ConfigService,
158
+ axios_1.HttpService,
159
+ jwt_1.JwtService])
160
+ ], ExternalService);
@@ -0,0 +1,3 @@
1
+ export * from './external.interface';
2
+ export * from './external.module';
3
+ export * from './external.service';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./external.interface"), exports);
18
+ __exportStar(require("./external.module"), exports);
19
+ __exportStar(require("./external.service"), exports);
@@ -0,0 +1,17 @@
1
+ export * from './action-log';
2
+ export * from './authentication';
3
+ export * from './authorization';
4
+ export * from './base-service';
5
+ export * from './common.dto';
6
+ export * from './common.entity';
7
+ export * from './common.enum';
8
+ export * from './common.interface';
9
+ export * from './database';
10
+ export * from './decorators';
11
+ export * from './exception';
12
+ export * from './external';
13
+ export * from './jwt';
14
+ export * from './permission';
15
+ export * from './redis';
16
+ export * from './subscription-feature';
17
+ export * from './utils';
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./action-log"), exports);
21
+ __exportStar(require("./authentication"), exports);
22
+ __exportStar(require("./authorization"), exports);
23
+ __exportStar(require("./base-service"), exports);
24
+ __exportStar(require("./common.dto"), exports);
25
+ __exportStar(require("./common.entity"), exports);
26
+ __exportStar(require("./common.enum"), exports);
27
+ __exportStar(require("./common.interface"), exports);
28
+ __exportStar(require("./database"), exports);
29
+ __exportStar(require("./decorators"), exports);
30
+ __exportStar(require("./exception"), exports);
31
+ __exportStar(require("./external"), exports);
32
+ __exportStar(require("./jwt"), exports);
33
+ __exportStar(require("./permission"), exports);
34
+ __exportStar(require("./redis"), exports);
35
+ __exportStar(require("./subscription-feature"), exports);
36
+ __exportStar(require("./utils"), exports);
37
+ const dayjs_1 = __importDefault(require("dayjs"));
38
+ const utc_1 = __importDefault(require("dayjs/plugin/utc"));
39
+ dayjs_1.default.extend(utc_1.default);
@@ -0,0 +1,3 @@
1
+ export * from './jwt.interface';
2
+ export * from './jwt.module';
3
+ export * from './jwt.service';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./jwt.interface"), exports);
18
+ __exportStar(require("./jwt.module"), exports);
19
+ __exportStar(require("./jwt.service"), exports);
@@ -0,0 +1,15 @@
1
+ export interface JwtSignPayloadOptions {
2
+ audience: string;
3
+ issuer: string;
4
+ jwtId?: string;
5
+ notBefore?: number;
6
+ }
7
+ export type JwtPayload = {
8
+ aud: string;
9
+ exp: number;
10
+ iat: number;
11
+ iss: string;
12
+ jti?: string;
13
+ nbf?: number;
14
+ sub: string;
15
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ export declare class JwtModule {
2
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.JwtModule = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const jwt_1 = require("@nestjs/jwt");
16
+ const crypto_1 = __importDefault(require("crypto"));
17
+ const jwt_service_1 = require("./jwt.service");
18
+ let JwtModule = class JwtModule {
19
+ };
20
+ exports.JwtModule = JwtModule;
21
+ exports.JwtModule = JwtModule = __decorate([
22
+ (0, common_1.Module)({
23
+ exports: [jwt_service_1.JwtService],
24
+ imports: [
25
+ jwt_1.JwtModule.registerAsync({
26
+ imports: [config_1.ConfigModule],
27
+ inject: [config_1.ConfigService],
28
+ useFactory: async (configService) => {
29
+ const rawJwk = configService.get('jwt.privateKey');
30
+ const jwk = typeof rawJwk === 'string' ? JSON.parse(rawJwk) : rawJwk;
31
+ const privateKey = crypto_1.default.createPrivateKey({ format: 'jwk', key: jwk });
32
+ const publicKey = crypto_1.default.createPublicKey({ format: 'jwk', key: jwk });
33
+ return {
34
+ privateKey: privateKey.export({ format: 'pem', type: 'pkcs8' }),
35
+ publicKey: publicKey.export({ format: 'pem', type: 'spki' }),
36
+ signOptions: { algorithm: 'RS256', expiresIn: configService.get('jwt.expiresIn') }
37
+ };
38
+ }
39
+ })
40
+ ],
41
+ providers: [jwt_service_1.JwtService]
42
+ })
43
+ ], JwtModule);
@@ -0,0 +1,10 @@
1
+ import type { JwtSignOptions } from '@nestjs/jwt';
2
+ import { JwtService as NestJwtService } from '@nestjs/jwt';
3
+ import type { JwtSignPayloadOptions } from './jwt.interface';
4
+ export declare class JwtService {
5
+ private readonly jwtService;
6
+ private readonly logger;
7
+ constructor(jwtService: NestJwtService);
8
+ signAsync({ audience, issuer, jwtId, notBefore }: JwtSignPayloadOptions, subject: string, jwtSignOptions?: JwtSignOptions): Promise<string>;
9
+ verifyAsync(token: string): Promise<any>;
10
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var JwtService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.JwtService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const jwt_1 = require("@nestjs/jwt");
19
+ const dayjs_1 = __importDefault(require("dayjs"));
20
+ const nanoid_1 = require("nanoid");
21
+ const exception_1 = require("../exception");
22
+ let JwtService = JwtService_1 = class JwtService {
23
+ jwtService;
24
+ logger = new common_1.Logger(JwtService_1.name);
25
+ constructor(jwtService) {
26
+ this.jwtService = jwtService;
27
+ }
28
+ async signAsync({ audience, issuer, jwtId, notBefore }, subject, jwtSignOptions) {
29
+ const payload = {
30
+ aud: audience,
31
+ iss: issuer,
32
+ jti: jwtId ?? (0, nanoid_1.nanoid)(),
33
+ nbf: notBefore ?? Math.floor(dayjs_1.default.utc().valueOf() / 1000),
34
+ sub: subject
35
+ };
36
+ return this.jwtService.signAsync(payload, jwtSignOptions);
37
+ }
38
+ async verifyAsync(token) {
39
+ return this.jwtService.verifyAsync(token).catch(error => {
40
+ const reason = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
41
+ this.logger.warn(`Token verification failed (${reason})`);
42
+ (0, exception_1.throwHttpException)(exception_1.HTTP_EXCEPTION.UNAUTHORIZED, {
43
+ message: error instanceof Error ? error.message : 'Token verification failed.'
44
+ });
45
+ });
46
+ }
47
+ };
48
+ exports.JwtService = JwtService;
49
+ exports.JwtService = JwtService = JwtService_1 = __decorate([
50
+ (0, common_1.Injectable)(),
51
+ __metadata("design:paramtypes", [jwt_1.JwtService])
52
+ ], JwtService);
@@ -0,0 +1,3 @@
1
+ export * from './permission.enum';
2
+ export * from './permission.guard';
3
+ export * from './permission.interface';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./permission.enum"), exports);
18
+ __exportStar(require("./permission.guard"), exports);
19
+ __exportStar(require("./permission.interface"), exports);
@@ -0,0 +1,70 @@
1
+ export declare const PERMISSION: {
2
+ readonly ACTION_LOG_CREATE: "action-log:create";
3
+ readonly ACTION_LOG_DELETE: "action-log:delete";
4
+ readonly ACTION_LOG_READ: "action-log:read";
5
+ readonly ACTION_LOG_UPDATE: "action-log:update";
6
+ readonly BOOKMARK_CARTON_CREATE: "bookmark-carton:create";
7
+ readonly BOOKMARK_CARTON_DELETE: "bookmark-carton:delete";
8
+ readonly BOOKMARK_CARTON_READ: "bookmark-carton:read";
9
+ readonly BOOKMARK_CARTON_UPDATE: "bookmark-carton:update";
10
+ readonly BOOKMARK_CREATE: "bookmark:create";
11
+ readonly BOOKMARK_DELETE: "bookmark:delete";
12
+ readonly BOOKMARK_READ: "bookmark:read";
13
+ readonly BOOKMARK_TAG_CREATE: "bookmark-tag:create";
14
+ readonly BOOKMARK_TAG_DELETE: "bookmark-tag:delete";
15
+ readonly BOOKMARK_TAG_READ: "bookmark-tag:read";
16
+ readonly BOOKMARK_TAG_UPDATE: "bookmark-tag:update";
17
+ readonly BOOKMARK_UPDATE: "bookmark:update";
18
+ readonly EMAIL_CAPTCHA_CREATE: "email-captcha:create";
19
+ readonly EMAIL_CAPTCHA_DELETE: "email-captcha:delete";
20
+ readonly EMAIL_CAPTCHA_READ: "email-captcha:read";
21
+ readonly EMAIL_CAPTCHA_UPDATE: "email-captcha:update";
22
+ readonly EMAIL_CREATE: "email:create";
23
+ readonly EMAIL_DELETE: "email:delete";
24
+ readonly EMAIL_READ: "email:read";
25
+ readonly EMAIL_UPDATE: "email:update";
26
+ readonly PERMISSION_CREATE: "permission:create";
27
+ readonly PERMISSION_DELETE: "permission:delete";
28
+ readonly PERMISSION_PROJECT_CREATE: "permission-project:create";
29
+ readonly PERMISSION_PROJECT_DELETE: "permission-project:delete";
30
+ readonly PERMISSION_PROJECT_READ: "permission-project:read";
31
+ readonly PERMISSION_PROJECT_UPDATE: "permission-project:update";
32
+ readonly PERMISSION_READ: "permission:read";
33
+ readonly PERMISSION_RESOURCE_CREATE: "permission-resource:create";
34
+ readonly PERMISSION_RESOURCE_DELETE: "permission-resource:delete";
35
+ readonly PERMISSION_RESOURCE_READ: "permission-resource:read";
36
+ readonly PERMISSION_RESOURCE_UPDATE: "permission-resource:update";
37
+ readonly PERMISSION_ROLE_CREATE: "permission-role:create";
38
+ readonly PERMISSION_ROLE_DELETE: "permission-role:delete";
39
+ readonly PERMISSION_ROLE_GROUP_CREATE: "permission-role-group:create";
40
+ readonly PERMISSION_ROLE_GROUP_DELETE: "permission-role-group:delete";
41
+ readonly PERMISSION_ROLE_GROUP_READ: "permission-role-group:read";
42
+ readonly PERMISSION_ROLE_GROUP_UPDATE: "permission-role-group:update";
43
+ readonly PERMISSION_ROLE_READ: "permission-role:read";
44
+ readonly PERMISSION_ROLE_UPDATE: "permission-role:update";
45
+ readonly PERMISSION_UPDATE: "permission:update";
46
+ readonly SUBSCRIPTION_CREATE: "subscription:create";
47
+ readonly SUBSCRIPTION_DELETE: "subscription:delete";
48
+ readonly SUBSCRIPTION_FEATURE_CREATE: "subscription-feature:create";
49
+ readonly SUBSCRIPTION_FEATURE_DELETE: "subscription-feature:delete";
50
+ readonly SUBSCRIPTION_FEATURE_READ: "subscription-feature:read";
51
+ readonly SUBSCRIPTION_FEATURE_UPDATE: "subscription-feature:update";
52
+ readonly SUBSCRIPTION_ORDER_CREATE: "subscription-order:create";
53
+ readonly SUBSCRIPTION_ORDER_DELETE: "subscription-order:delete";
54
+ readonly SUBSCRIPTION_ORDER_READ: "subscription-order:read";
55
+ readonly SUBSCRIPTION_ORDER_UPDATE: "subscription-order:update";
56
+ readonly SUBSCRIPTION_PRODUCT_CREATE: "subscription-product:create";
57
+ readonly SUBSCRIPTION_PRODUCT_DELETE: "subscription-product:delete";
58
+ readonly SUBSCRIPTION_PRODUCT_READ: "subscription-product:read";
59
+ readonly SUBSCRIPTION_PRODUCT_UPDATE: "subscription-product:update";
60
+ readonly SUBSCRIPTION_READ: "subscription:read";
61
+ readonly SUBSCRIPTION_UPDATE: "subscription:update";
62
+ readonly USER_CREATE: "user:create";
63
+ readonly USER_DELETE: "user:delete";
64
+ readonly USER_READ: "user:read";
65
+ readonly USER_UPDATE: "user:update";
66
+ readonly VERSION_LOG_CREATE: "version-log:create";
67
+ readonly VERSION_LOG_DELETE: "version-log:delete";
68
+ readonly VERSION_LOG_READ: "version-log:read";
69
+ readonly VERSION_LOG_UPDATE: "version-log:update";
70
+ };
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PERMISSION = void 0;
4
+ exports.PERMISSION = {
5
+ ACTION_LOG_CREATE: 'action-log:create',
6
+ ACTION_LOG_DELETE: 'action-log:delete',
7
+ ACTION_LOG_READ: 'action-log:read',
8
+ ACTION_LOG_UPDATE: 'action-log:update',
9
+ BOOKMARK_CARTON_CREATE: 'bookmark-carton:create',
10
+ BOOKMARK_CARTON_DELETE: 'bookmark-carton:delete',
11
+ BOOKMARK_CARTON_READ: 'bookmark-carton:read',
12
+ BOOKMARK_CARTON_UPDATE: 'bookmark-carton:update',
13
+ BOOKMARK_CREATE: 'bookmark:create',
14
+ BOOKMARK_DELETE: 'bookmark:delete',
15
+ BOOKMARK_READ: 'bookmark:read',
16
+ BOOKMARK_TAG_CREATE: 'bookmark-tag:create',
17
+ BOOKMARK_TAG_DELETE: 'bookmark-tag:delete',
18
+ BOOKMARK_TAG_READ: 'bookmark-tag:read',
19
+ BOOKMARK_TAG_UPDATE: 'bookmark-tag:update',
20
+ BOOKMARK_UPDATE: 'bookmark:update',
21
+ EMAIL_CAPTCHA_CREATE: 'email-captcha:create',
22
+ EMAIL_CAPTCHA_DELETE: 'email-captcha:delete',
23
+ EMAIL_CAPTCHA_READ: 'email-captcha:read',
24
+ EMAIL_CAPTCHA_UPDATE: 'email-captcha:update',
25
+ EMAIL_CREATE: 'email:create',
26
+ EMAIL_DELETE: 'email:delete',
27
+ EMAIL_READ: 'email:read',
28
+ EMAIL_UPDATE: 'email:update',
29
+ PERMISSION_CREATE: 'permission:create',
30
+ PERMISSION_DELETE: 'permission:delete',
31
+ PERMISSION_PROJECT_CREATE: 'permission-project:create',
32
+ PERMISSION_PROJECT_DELETE: 'permission-project:delete',
33
+ PERMISSION_PROJECT_READ: 'permission-project:read',
34
+ PERMISSION_PROJECT_UPDATE: 'permission-project:update',
35
+ PERMISSION_READ: 'permission:read',
36
+ PERMISSION_RESOURCE_CREATE: 'permission-resource:create',
37
+ PERMISSION_RESOURCE_DELETE: 'permission-resource:delete',
38
+ PERMISSION_RESOURCE_READ: 'permission-resource:read',
39
+ PERMISSION_RESOURCE_UPDATE: 'permission-resource:update',
40
+ PERMISSION_ROLE_CREATE: 'permission-role:create',
41
+ PERMISSION_ROLE_DELETE: 'permission-role:delete',
42
+ PERMISSION_ROLE_GROUP_CREATE: 'permission-role-group:create',
43
+ PERMISSION_ROLE_GROUP_DELETE: 'permission-role-group:delete',
44
+ PERMISSION_ROLE_GROUP_READ: 'permission-role-group:read',
45
+ PERMISSION_ROLE_GROUP_UPDATE: 'permission-role-group:update',
46
+ PERMISSION_ROLE_READ: 'permission-role:read',
47
+ PERMISSION_ROLE_UPDATE: 'permission-role:update',
48
+ PERMISSION_UPDATE: 'permission:update',
49
+ SUBSCRIPTION_CREATE: 'subscription:create',
50
+ SUBSCRIPTION_DELETE: 'subscription:delete',
51
+ SUBSCRIPTION_FEATURE_CREATE: 'subscription-feature:create',
52
+ SUBSCRIPTION_FEATURE_DELETE: 'subscription-feature:delete',
53
+ SUBSCRIPTION_FEATURE_READ: 'subscription-feature:read',
54
+ SUBSCRIPTION_FEATURE_UPDATE: 'subscription-feature:update',
55
+ SUBSCRIPTION_ORDER_CREATE: 'subscription-order:create',
56
+ SUBSCRIPTION_ORDER_DELETE: 'subscription-order:delete',
57
+ SUBSCRIPTION_ORDER_READ: 'subscription-order:read',
58
+ SUBSCRIPTION_ORDER_UPDATE: 'subscription-order:update',
59
+ SUBSCRIPTION_PRODUCT_CREATE: 'subscription-product:create',
60
+ SUBSCRIPTION_PRODUCT_DELETE: 'subscription-product:delete',
61
+ SUBSCRIPTION_PRODUCT_READ: 'subscription-product:read',
62
+ SUBSCRIPTION_PRODUCT_UPDATE: 'subscription-product:update',
63
+ SUBSCRIPTION_READ: 'subscription:read',
64
+ SUBSCRIPTION_UPDATE: 'subscription:update',
65
+ USER_CREATE: 'user:create',
66
+ USER_DELETE: 'user:delete',
67
+ USER_READ: 'user:read',
68
+ USER_UPDATE: 'user:update',
69
+ VERSION_LOG_CREATE: 'version-log:create',
70
+ VERSION_LOG_DELETE: 'version-log:delete',
71
+ VERSION_LOG_READ: 'version-log:read',
72
+ VERSION_LOG_UPDATE: 'version-log:update'
73
+ };
@@ -0,0 +1,9 @@
1
+ import type { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { AuthorizationService } from '../authorization';
4
+ export declare class PermissionGuard implements CanActivate {
5
+ private readonly authorizationService;
6
+ private readonly reflector;
7
+ constructor(authorizationService: AuthorizationService, reflector: Reflector);
8
+ canActivate(context: ExecutionContext): Promise<boolean>;
9
+ }