@fecommunity/reactpress-server 3.0.4 → 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.module.js +9 -46
- package/dist/app.module.js.map +1 -1
- package/dist/common/api-messages.d.ts +9 -0
- package/dist/common/api-messages.js +9 -0
- package/dist/common/api-messages.js.map +1 -1
- package/dist/database/typeorm-options.d.ts +3 -0
- package/dist/database/typeorm-options.js +60 -0
- package/dist/database/typeorm-options.js.map +1 -0
- package/dist/filters/http-exception.filter.js +1 -1
- package/dist/filters/http-exception.filter.js.map +1 -1
- package/dist/generate-swagger.js +11 -11
- package/dist/generate-swagger.js.map +1 -1
- package/dist/interceptors/transform.interceptor.d.ts +2 -6
- package/dist/interceptors/transform.interceptor.js +10 -5
- package/dist/interceptors/transform.interceptor.js.map +1 -1
- package/dist/logger/index.js +5 -4
- package/dist/logger/index.js.map +1 -1
- package/dist/main.js +44 -23
- package/dist/main.js.map +1 -1
- package/dist/modules/api-key/api-key.controller.js +9 -9
- package/dist/modules/api-key/api-key.controller.js.map +1 -1
- package/dist/modules/api-key/api-key.entity.js +16 -16
- package/dist/modules/api-key/api-key.entity.js.map +1 -1
- package/dist/modules/api-key/api-key.guard.js +3 -4
- package/dist/modules/api-key/api-key.guard.js.map +1 -1
- package/dist/modules/api-key/api-key.module.js +1 -1
- package/dist/modules/api-key/api-key.module.js.map +1 -1
- package/dist/modules/api-key/api-key.service.js +3 -3
- package/dist/modules/api-key/api-key.service.js.map +1 -1
- package/dist/modules/article/article-revision.entity.js +9 -9
- package/dist/modules/article/article-revision.entity.js.map +1 -1
- package/dist/modules/article/article-slug.util.d.ts +2 -0
- package/dist/modules/article/article-slug.util.js +19 -0
- package/dist/modules/article/article-slug.util.js.map +1 -0
- package/dist/modules/article/article.controller.d.ts +1 -1
- package/dist/modules/article/article.controller.js +71 -60
- package/dist/modules/article/article.controller.js.map +1 -1
- package/dist/modules/article/article.entity.d.ts +3 -0
- package/dist/modules/article/article.entity.js +58 -43
- package/dist/modules/article/article.entity.js.map +1 -1
- package/dist/modules/article/article.module.js +7 -4
- package/dist/modules/article/article.module.js.map +1 -1
- package/dist/modules/article/article.service.d.ts +9 -3
- package/dist/modules/article/article.service.js +98 -30
- package/dist/modules/article/article.service.js.map +1 -1
- package/dist/modules/article/scheduled-publish.service.js +3 -3
- package/dist/modules/article/scheduled-publish.service.js.map +1 -1
- package/dist/modules/auth/auth.controller.js +11 -11
- package/dist/modules/auth/auth.controller.js.map +1 -1
- package/dist/modules/auth/auth.module.js +4 -4
- package/dist/modules/auth/auth.module.js.map +1 -1
- package/dist/modules/auth/auth.service.js +5 -5
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/jwt-auth.guard.js +3 -3
- package/dist/modules/auth/jwt-auth.guard.js.map +1 -1
- package/dist/modules/auth/jwt.strategy.js +3 -3
- package/dist/modules/auth/jwt.strategy.js.map +1 -1
- package/dist/modules/auth/roles.guard.js +2 -2
- package/dist/modules/auth/roles.guard.js.map +1 -1
- package/dist/modules/bootstrap/bootstrap.constants.d.ts +20 -0
- package/dist/modules/bootstrap/bootstrap.constants.js +171 -0
- package/dist/modules/bootstrap/bootstrap.constants.js.map +1 -0
- package/dist/modules/bootstrap/bootstrap.service.d.ts +22 -0
- package/dist/modules/bootstrap/bootstrap.service.js +183 -0
- package/dist/modules/bootstrap/bootstrap.service.js.map +1 -0
- package/dist/modules/bootstrap/install-locale.d.ts +2 -0
- package/dist/modules/bootstrap/install-locale.js +11 -0
- package/dist/modules/bootstrap/install-locale.js.map +1 -0
- package/dist/modules/category/category.controller.js +21 -20
- package/dist/modules/category/category.controller.js.map +1 -1
- package/dist/modules/category/category.entity.js +13 -13
- package/dist/modules/category/category.entity.js.map +1 -1
- package/dist/modules/category/category.module.js +1 -1
- package/dist/modules/category/category.module.js.map +1 -1
- package/dist/modules/category/category.service.js +3 -3
- package/dist/modules/category/category.service.js.map +1 -1
- package/dist/modules/comment/comment.controller.js +24 -20
- package/dist/modules/comment/comment.controller.js.map +1 -1
- package/dist/modules/comment/comment.entity.js +31 -31
- package/dist/modules/comment/comment.entity.js.map +1 -1
- package/dist/modules/comment/comment.module.js +2 -2
- package/dist/modules/comment/comment.module.js.map +1 -1
- package/dist/modules/comment/comment.service.d.ts +3 -1
- package/dist/modules/comment/comment.service.js +31 -14
- package/dist/modules/comment/comment.service.js.map +1 -1
- package/dist/modules/comment/html.d.ts +1 -1
- package/dist/modules/comment/html.js +3 -3
- package/dist/modules/comment/html.js.map +1 -1
- package/dist/modules/extension/extension.module.d.ts +9 -0
- package/dist/modules/extension/extension.module.js +50 -0
- package/dist/modules/extension/extension.module.js.map +1 -0
- package/dist/modules/extension/plugin-loader.service.d.ts +12 -0
- package/dist/modules/extension/plugin-loader.service.js +96 -0
- package/dist/modules/extension/plugin-loader.service.js.map +1 -0
- package/dist/modules/extension/plugin-registry.bridge.d.ts +3 -0
- package/dist/modules/extension/plugin-registry.bridge.js +44 -0
- package/dist/modules/extension/plugin-registry.bridge.js.map +1 -0
- package/dist/modules/extension/plugin.controller.d.ts +22 -0
- package/dist/modules/extension/plugin.controller.js +155 -0
- package/dist/modules/extension/plugin.controller.js.map +1 -0
- package/dist/modules/extension/plugin.service.d.ts +52 -0
- package/dist/modules/extension/plugin.service.js +391 -0
- package/dist/modules/extension/plugin.service.js.map +1 -0
- package/dist/modules/extension/preview-draft.store.d.ts +13 -0
- package/dist/modules/extension/preview-draft.store.js +41 -0
- package/dist/modules/extension/preview-draft.store.js.map +1 -0
- package/dist/modules/extension/theme-registry.bridge.d.ts +56 -0
- package/dist/modules/extension/theme-registry.bridge.js +46 -0
- package/dist/modules/extension/theme-registry.bridge.js.map +1 -0
- package/dist/modules/extension/theme.controller.d.ts +66 -0
- package/dist/modules/extension/theme.controller.js +301 -0
- package/dist/modules/extension/theme.controller.js.map +1 -0
- package/dist/modules/extension/theme.service.d.ts +140 -0
- package/dist/modules/extension/theme.service.js +1039 -0
- package/dist/modules/extension/theme.service.js.map +1 -0
- package/dist/modules/file/file-optimization.controller.d.ts +12 -0
- package/dist/modules/file/file-optimization.controller.js +79 -0
- package/dist/modules/file/file-optimization.controller.js.map +1 -0
- package/dist/modules/file/file-optimization.service.d.ts +36 -0
- package/dist/modules/file/file-optimization.service.js +385 -0
- package/dist/modules/file/file-optimization.service.js.map +1 -0
- package/dist/modules/file/file-optimization.types.d.ts +66 -0
- package/dist/modules/file/file-optimization.types.js +5 -0
- package/dist/modules/file/file-optimization.types.js.map +1 -0
- package/dist/modules/file/file.controller.d.ts +1 -1
- package/dist/modules/file/file.controller.js +22 -20
- package/dist/modules/file/file.controller.js.map +1 -1
- package/dist/modules/file/file.entity.d.ts +7 -0
- package/dist/modules/file/file.entity.js +20 -15
- package/dist/modules/file/file.entity.js.map +1 -1
- package/dist/modules/file/file.module.js +16 -4
- package/dist/modules/file/file.module.js.map +1 -1
- package/dist/modules/file/file.service.d.ts +5 -1
- package/dist/modules/file/file.service.js +70 -24
- package/dist/modules/file/file.service.js.map +1 -1
- package/dist/modules/file/image-optimizer-plugin.guard.d.ts +7 -0
- package/dist/modules/file/image-optimizer-plugin.guard.js +33 -0
- package/dist/modules/file/image-optimizer-plugin.guard.js.map +1 -0
- package/dist/modules/health/health.controller.js +7 -9
- package/dist/modules/health/health.controller.js.map +1 -1
- package/dist/modules/health/health.module.js +1 -1
- package/dist/modules/health/health.module.js.map +1 -1
- package/dist/modules/hook/hook.module.d.ts +2 -0
- package/dist/modules/hook/hook.module.js +22 -0
- package/dist/modules/hook/hook.module.js.map +1 -0
- package/dist/modules/hook/hook.service.d.ts +26 -0
- package/dist/modules/hook/hook.service.js +105 -0
- package/dist/modules/hook/hook.service.js.map +1 -0
- package/dist/modules/install/install.controller.js +5 -5
- package/dist/modules/install/install.controller.js.map +1 -1
- package/dist/modules/install/install.module.js +1 -1
- package/dist/modules/install/install.module.js.map +1 -1
- package/dist/modules/install/install.service.js +2 -2
- package/dist/modules/install/install.service.js.map +1 -1
- package/dist/modules/knowledge/knowledge.controller.js +35 -33
- package/dist/modules/knowledge/knowledge.controller.js.map +1 -1
- package/dist/modules/knowledge/knowledge.entity.js +33 -33
- package/dist/modules/knowledge/knowledge.entity.js.map +1 -1
- package/dist/modules/knowledge/knowledge.module.js +1 -1
- package/dist/modules/knowledge/knowledge.module.js.map +1 -1
- package/dist/modules/knowledge/knowledge.service.js +10 -10
- package/dist/modules/knowledge/knowledge.service.js.map +1 -1
- package/dist/modules/page/page.controller.js +24 -23
- package/dist/modules/page/page.controller.js.map +1 -1
- package/dist/modules/page/page.entity.js +27 -27
- package/dist/modules/page/page.entity.js.map +1 -1
- package/dist/modules/page/page.module.js +1 -1
- package/dist/modules/page/page.module.js.map +1 -1
- package/dist/modules/page/page.service.js +11 -12
- package/dist/modules/page/page.service.js.map +1 -1
- package/dist/modules/search/search.controller.js +12 -12
- package/dist/modules/search/search.controller.js.map +1 -1
- package/dist/modules/search/search.entity.js +13 -13
- package/dist/modules/search/search.entity.js.map +1 -1
- package/dist/modules/search/search.module.js +1 -1
- package/dist/modules/search/search.module.js.map +1 -1
- package/dist/modules/search/search.service.js +2 -2
- package/dist/modules/search/search.service.js.map +1 -1
- package/dist/modules/setting/setting.constant.d.ts +4 -2
- package/dist/modules/setting/setting.constant.js +3 -19
- package/dist/modules/setting/setting.constant.js.map +1 -1
- package/dist/modules/setting/setting.controller.js +11 -11
- package/dist/modules/setting/setting.controller.js.map +1 -1
- package/dist/modules/setting/setting.entity.d.ts +3 -0
- package/dist/modules/setting/setting.entity.js +64 -49
- package/dist/modules/setting/setting.entity.js.map +1 -1
- package/dist/modules/setting/setting.module.js +2 -2
- package/dist/modules/setting/setting.module.js.map +1 -1
- package/dist/modules/setting/setting.service.d.ts +13 -2
- package/dist/modules/setting/setting.service.js +169 -24
- package/dist/modules/setting/setting.service.js.map +1 -1
- package/dist/modules/smtp/mail.util.d.ts +7 -6
- package/dist/modules/smtp/mail.util.js +5 -9
- package/dist/modules/smtp/mail.util.js.map +1 -1
- package/dist/modules/smtp/smtp.controller.d.ts +3 -0
- package/dist/modules/smtp/smtp.controller.js +27 -14
- package/dist/modules/smtp/smtp.controller.js.map +1 -1
- package/dist/modules/smtp/smtp.entity.js +15 -15
- package/dist/modules/smtp/smtp.entity.js.map +1 -1
- package/dist/modules/smtp/smtp.module.js +2 -2
- package/dist/modules/smtp/smtp.module.js.map +1 -1
- package/dist/modules/smtp/smtp.service.d.ts +14 -0
- package/dist/modules/smtp/smtp.service.js +39 -12
- package/dist/modules/smtp/smtp.service.js.map +1 -1
- package/dist/modules/tag/tag.controller.js +24 -22
- package/dist/modules/tag/tag.controller.js.map +1 -1
- package/dist/modules/tag/tag.entity.js +12 -12
- package/dist/modules/tag/tag.entity.js.map +1 -1
- package/dist/modules/tag/tag.module.js +1 -1
- package/dist/modules/tag/tag.module.js.map +1 -1
- package/dist/modules/tag/tag.service.js +3 -3
- package/dist/modules/tag/tag.service.js.map +1 -1
- package/dist/modules/user/user.controller.js +36 -26
- package/dist/modules/user/user.controller.js.map +1 -1
- package/dist/modules/user/user.entity.js +22 -22
- package/dist/modules/user/user.entity.js.map +1 -1
- package/dist/modules/user/user.module.js +2 -2
- package/dist/modules/user/user.module.js.map +1 -1
- package/dist/modules/user/user.service.js +7 -4
- package/dist/modules/user/user.service.js.map +1 -1
- package/dist/modules/view/view.controller.js +20 -19
- package/dist/modules/view/view.controller.js.map +1 -1
- package/dist/modules/view/view.entity.js +24 -24
- package/dist/modules/view/view.entity.js.map +1 -1
- package/dist/modules/view/view.module.js +1 -1
- package/dist/modules/view/view.module.js.map +1 -1
- package/dist/modules/view/view.service.js +4 -4
- package/dist/modules/view/view.service.js.map +1 -1
- package/dist/modules/webhook/webhook.controller.js +9 -9
- package/dist/modules/webhook/webhook.controller.js.map +1 -1
- package/dist/modules/webhook/webhook.entity.js +13 -13
- package/dist/modules/webhook/webhook.entity.js.map +1 -1
- package/dist/modules/webhook/webhook.module.js +1 -1
- package/dist/modules/webhook/webhook.module.js.map +1 -1
- package/dist/modules/webhook/webhook.service.d.ts +1 -1
- package/dist/modules/webhook/webhook.service.js +7 -4
- package/dist/modules/webhook/webhook.service.js.map +1 -1
- package/dist/public/apple-touch-icon.png +0 -0
- package/dist/public/favicon-16.png +0 -0
- package/dist/public/favicon-32.png +0 -0
- package/dist/public/favicon-48.png +0 -0
- package/dist/public/favicon.ico +0 -0
- package/dist/public/favicon.png +0 -0
- package/dist/public/icon-192.png +0 -0
- package/dist/public/icon-512.png +0 -0
- package/dist/public/logo-200.png +0 -0
- package/dist/public/logo-400.png +0 -0
- package/dist/public/logo.png +0 -0
- package/dist/public/logo.svg +7 -0
- package/dist/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
- package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
- package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
- package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
- package/dist/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
- package/dist/starter.d.ts +2 -1
- package/dist/starter.js +200 -13
- package/dist/starter.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -16966
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utils/date.util.js +1 -1
- package/dist/utils/date.util.js.map +1 -1
- package/dist/utils/html-sanitize.util.d.ts +1 -0
- package/dist/utils/html-sanitize.util.js +33 -0
- package/dist/utils/html-sanitize.util.js.map +1 -0
- package/dist/utils/image-processor.util.d.ts +23 -0
- package/dist/utils/image-processor.util.js +88 -0
- package/dist/utils/image-processor.util.js.map +1 -0
- package/dist/utils/local-api-quiet.util.d.ts +1 -0
- package/dist/utils/local-api-quiet.util.js +8 -0
- package/dist/utils/local-api-quiet.util.js.map +1 -0
- package/dist/utils/markdown.util.js +1 -1
- package/dist/utils/markdown.util.js.map +1 -1
- package/dist/utils/oss/aliyun-oss-client.d.ts +3 -1
- package/dist/utils/oss/aliyun-oss-client.js +5 -0
- package/dist/utils/oss/aliyun-oss-client.js.map +1 -1
- package/dist/utils/oss/oss-client.d.ts +3 -1
- package/dist/utils/oss/oss-client.js.map +1 -1
- package/dist/utils/oss.util.d.ts +3 -1
- package/dist/utils/oss.util.js +5 -1
- package/dist/utils/oss.util.js.map +1 -1
- package/dist/utils/project-root.util.d.ts +2 -0
- package/dist/utils/project-root.util.js +42 -0
- package/dist/utils/project-root.util.js.map +1 -0
- package/dist/utils/query-whitelist.util.d.ts +1 -0
- package/dist/utils/query-whitelist.util.js +100 -0
- package/dist/utils/query-whitelist.util.js.map +1 -0
- package/dist/utils/uniqueid.util.js +1 -1
- package/dist/utils/uniqueid.util.js.map +1 -1
- package/dist/utils/upload.util.d.ts +6 -2
- package/dist/utils/upload.util.js +23 -8
- package/dist/utils/upload.util.js.map +1 -1
- package/dist/utils/user.util.d.ts +1 -0
- package/dist/utils/user.util.js +6 -2
- package/dist/utils/user.util.js.map +1 -1
- package/package.json +8 -9
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon-48.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.png +0 -0
- package/public/icon-192.png +0 -0
- package/public/icon-512.png +0 -0
- package/public/logo-200.png +0 -0
- package/public/logo-400.png +0 -0
- package/public/logo.png +0 -0
- package/public/logo.svg +7 -0
- package/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
- package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
- package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
- package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
- package/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
|
@@ -13,12 +13,12 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.WebhookService = void 0;
|
|
16
|
-
const api_messages_1 = require("../../common/api-messages");
|
|
17
16
|
const common_1 = require("@nestjs/common");
|
|
18
17
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
19
18
|
const axios_1 = require("axios");
|
|
20
19
|
const crypto = require("crypto");
|
|
21
20
|
const typeorm_2 = require("typeorm");
|
|
21
|
+
const api_messages_1 = require("../../common/api-messages");
|
|
22
22
|
const webhook_entity_1 = require("./webhook.entity");
|
|
23
23
|
let WebhookService = class WebhookService {
|
|
24
24
|
constructor(webhookRepository) {
|
|
@@ -40,7 +40,10 @@ let WebhookService = class WebhookService {
|
|
|
40
40
|
return this.webhookRepository.remove(hook);
|
|
41
41
|
}
|
|
42
42
|
signPayload(secret, body) {
|
|
43
|
-
return crypto
|
|
43
|
+
return crypto
|
|
44
|
+
.createHmac('sha256', secret)
|
|
45
|
+
.update(body)
|
|
46
|
+
.digest('hex');
|
|
44
47
|
}
|
|
45
48
|
async deliverOnce(webhook, event, payload) {
|
|
46
49
|
const body = JSON.stringify({
|
|
@@ -89,8 +92,8 @@ let WebhookService = class WebhookService {
|
|
|
89
92
|
}
|
|
90
93
|
};
|
|
91
94
|
WebhookService = __decorate([
|
|
92
|
-
common_1.Injectable(),
|
|
93
|
-
__param(0, typeorm_1.InjectRepository(webhook_entity_1.Webhook)),
|
|
95
|
+
(0, common_1.Injectable)(),
|
|
96
|
+
__param(0, (0, typeorm_1.InjectRepository)(webhook_entity_1.Webhook)),
|
|
94
97
|
__metadata("design:paramtypes", [typeorm_2.Repository])
|
|
95
98
|
], WebhookService);
|
|
96
99
|
exports.WebhookService = WebhookService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.service.js","sourceRoot":"","sources":["../../../src/modules/webhook/webhook.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"webhook.service.js","sourceRoot":"","sources":["../../../src/modules/webhook/webhook.service.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/public/favicon.png
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 112 102" fill="none" role="img" aria-label="ReactPress">
|
|
2
|
+
<title>ReactPress</title>
|
|
3
|
+
<g><path fill="none" stroke="#087ea4" stroke-width="5.333" stroke-linecap="round" d="M56 75.165c29.455 0 53.333-10.745 53.333-24s-23.878-24-53.333-24-53.334 10.745-53.334 24 23.879 24 53.334 24Z"/>
|
|
4
|
+
<path fill="none" stroke="#087ea4" stroke-width="5.333" stroke-linecap="round" d="M35.215 63.165c14.728 25.509 35.972 40.815 47.451 34.188 11.48-6.628 8.846-32.68-5.882-58.188-14.727-25.51-35.972-40.816-47.45-34.188-11.48 6.627-8.846 32.679 5.881 58.188Z"/>
|
|
5
|
+
<path fill="none" stroke="#087ea4" stroke-width="5.333" stroke-linecap="round" d="M35.215 39.165c-14.727 25.509-17.36 51.56-5.882 58.188 11.48 6.627 32.724-8.68 47.451-34.188 14.728-25.51 17.362-51.56 5.883-58.188-11.48-6.628-32.724 8.679-47.452 34.188Z"/></g>
|
|
6
|
+
<text x="56" y="52" text-anchor="middle" dominant-baseline="central" fill="#087ea4" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif" font-size="33" font-weight="600" letter-spacing="-0.03em">P</text>
|
|
7
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/starter.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { INestApplication } from '@nestjs/common';
|
|
2
|
+
export declare function bootstrap(): Promise<INestApplication>;
|
package/dist/starter.js
CHANGED
|
@@ -8,25 +8,176 @@ const compression = require("compression");
|
|
|
8
8
|
const express = require("express");
|
|
9
9
|
const rateLimit = require("express-rate-limit");
|
|
10
10
|
const helmet = require("helmet");
|
|
11
|
+
const http = require("http");
|
|
12
|
+
const net = require("net");
|
|
13
|
+
const fs_1 = require("fs");
|
|
11
14
|
const path_1 = require("path");
|
|
12
15
|
const swagger_themes_1 = require("swagger-themes");
|
|
13
16
|
const app_module_1 = require("./app.module");
|
|
17
|
+
const api_messages_1 = require("./common/api-messages");
|
|
14
18
|
const http_exception_filter_1 = require("./filters/http-exception.filter");
|
|
15
19
|
const transform_interceptor_1 = require("./interceptors/transform.interceptor");
|
|
20
|
+
const project_root_util_1 = require("./utils/project-root.util");
|
|
21
|
+
const local_api_quiet_util_1 = require("./utils/local-api-quiet.util");
|
|
22
|
+
let nestApp = null;
|
|
23
|
+
function isPortOpen(port) {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
const socket = net.createConnection({ port, host: '127.0.0.1' }, () => {
|
|
26
|
+
socket.destroy();
|
|
27
|
+
resolve(true);
|
|
28
|
+
});
|
|
29
|
+
socket.on('error', () => resolve(false));
|
|
30
|
+
socket.setTimeout(800, () => {
|
|
31
|
+
socket.destroy();
|
|
32
|
+
resolve(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function normalizeHealthPayload(raw) {
|
|
37
|
+
if (!raw || typeof raw !== 'object')
|
|
38
|
+
return null;
|
|
39
|
+
const body = raw;
|
|
40
|
+
const nested = body.data;
|
|
41
|
+
if (nested && typeof nested === 'object' && ('status' in nested || 'database' in nested)) {
|
|
42
|
+
return nested;
|
|
43
|
+
}
|
|
44
|
+
return body;
|
|
45
|
+
}
|
|
46
|
+
function isHealthPayloadReady(payload) {
|
|
47
|
+
if (!payload)
|
|
48
|
+
return false;
|
|
49
|
+
if (Object.prototype.hasOwnProperty.call(payload, 'database')) {
|
|
50
|
+
return payload.status === 'ok' && payload.database === 'up';
|
|
51
|
+
}
|
|
52
|
+
return payload.status === 'ok' || payload.status === 'OK';
|
|
53
|
+
}
|
|
54
|
+
function probeApiHealth(port, prefix = '/api') {
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
const req = http.request({
|
|
57
|
+
hostname: '127.0.0.1',
|
|
58
|
+
port,
|
|
59
|
+
path: `${prefix.replace(/\/$/, '')}/health`,
|
|
60
|
+
method: 'GET',
|
|
61
|
+
timeout: 2000,
|
|
62
|
+
}, (res) => {
|
|
63
|
+
let body = '';
|
|
64
|
+
res.on('data', (c) => {
|
|
65
|
+
body += c;
|
|
66
|
+
});
|
|
67
|
+
res.on('end', () => {
|
|
68
|
+
if (res.statusCode !== 200) {
|
|
69
|
+
resolve(false);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const payload = normalizeHealthPayload(JSON.parse(body));
|
|
74
|
+
resolve(isHealthPayloadReady(payload));
|
|
75
|
+
}
|
|
76
|
+
catch (_a) {
|
|
77
|
+
resolve(false);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
req.on('error', () => resolve(false));
|
|
82
|
+
req.on('timeout', () => {
|
|
83
|
+
req.destroy();
|
|
84
|
+
resolve(false);
|
|
85
|
+
});
|
|
86
|
+
req.end();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
16
89
|
async function bootstrap() {
|
|
90
|
+
var _a;
|
|
91
|
+
(0, project_root_util_1.resolveProjectRoot)();
|
|
92
|
+
const configuredPort = Number(process.env.SERVER_PORT || 3002);
|
|
93
|
+
const apiPrefix = String(process.env.SERVER_API_PREFIX || '/api');
|
|
94
|
+
if (process.env.REACTPRESS_API_ENTRY === 'starter' &&
|
|
95
|
+
(await isPortOpen(configuredPort)) &&
|
|
96
|
+
(await probeApiHealth(configuredPort, apiPrefix))) {
|
|
97
|
+
console.log(`[ReactPress] API already healthy on :${configuredPort} (nest watch reload — skip bootstrap)`);
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
17
100
|
try {
|
|
18
|
-
|
|
101
|
+
if (nestApp) {
|
|
102
|
+
await nestApp.close();
|
|
103
|
+
nestApp = null;
|
|
104
|
+
}
|
|
105
|
+
const app = await core_1.NestFactory.create(app_module_1.AppModule, {
|
|
106
|
+
logger: (0, local_api_quiet_util_1.isLocalApiQuiet)() ? ['error', 'warn'] : undefined,
|
|
107
|
+
});
|
|
19
108
|
const configService = app.get('ConfigService');
|
|
109
|
+
const listenPort = Number(configService.get('SERVER_PORT', configuredPort));
|
|
110
|
+
app.use((req, res, next) => {
|
|
111
|
+
const { shouldRedirectDevPortToNginx, buildDevPortRedirectUrl } = require('@fecommunity/reactpress-toolkit/plugin/dev');
|
|
112
|
+
if (!shouldRedirectDevPortToNginx({
|
|
113
|
+
host: req.headers.host,
|
|
114
|
+
method: req.method,
|
|
115
|
+
accept: req.headers.accept,
|
|
116
|
+
directPort: listenPort,
|
|
117
|
+
pathname: req.path,
|
|
118
|
+
skipPathPrefixes: ['/public'],
|
|
119
|
+
})) {
|
|
120
|
+
next();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
res.redirect(302, buildDevPortRedirectUrl({
|
|
124
|
+
directPort: listenPort,
|
|
125
|
+
pathname: req.path,
|
|
126
|
+
search: req.url.includes('?') ? req.url.slice(req.url.indexOf('?')) : '',
|
|
127
|
+
}));
|
|
128
|
+
});
|
|
20
129
|
app.enableCors();
|
|
21
|
-
|
|
130
|
+
const apiPrefix = String(configService.get('SERVER_API_PREFIX', '/api')).replace(/\/$/, '');
|
|
131
|
+
app.setGlobalPrefix(apiPrefix);
|
|
22
132
|
app.use(rateLimit({
|
|
23
133
|
windowMs: 60 * 1000,
|
|
24
134
|
max: 10000,
|
|
25
135
|
}));
|
|
26
|
-
|
|
136
|
+
app.use(`${apiPrefix}/auth/login`, rateLimit({
|
|
137
|
+
windowMs: 15 * 60 * 1000,
|
|
138
|
+
max: 5,
|
|
139
|
+
skipSuccessfulRequests: true,
|
|
140
|
+
standardHeaders: true,
|
|
141
|
+
legacyHeaders: false,
|
|
142
|
+
handler(_req, res) {
|
|
143
|
+
res.status(429).json({
|
|
144
|
+
statusCode: 429,
|
|
145
|
+
msg: api_messages_1.ApiMsg.TOO_MANY_LOGIN_ATTEMPTS,
|
|
146
|
+
success: false,
|
|
147
|
+
data: null,
|
|
148
|
+
});
|
|
149
|
+
},
|
|
150
|
+
}));
|
|
151
|
+
const rootDir = (0, path_1.join)(__dirname, '../public');
|
|
152
|
+
const uploadDir = (_a = process.env.REACTPRESS_UPLOAD_DIR) === null || _a === void 0 ? void 0 : _a.trim();
|
|
153
|
+
if (uploadDir && (0, fs_1.existsSync)(uploadDir)) {
|
|
154
|
+
app.use('/public/uploads', express.static(uploadDir));
|
|
155
|
+
}
|
|
27
156
|
app.use('/public', express.static(rootDir));
|
|
157
|
+
for (const name of ['logo.png', 'favicon.png', 'favicon.ico']) {
|
|
158
|
+
const filePath = (0, path_1.join)(rootDir, name);
|
|
159
|
+
if ((0, fs_1.existsSync)(filePath)) {
|
|
160
|
+
app.use(`/${name}`, (_req, res) => {
|
|
161
|
+
res.sendFile(filePath);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
28
165
|
app.use(compression());
|
|
29
|
-
app.use(helmet(
|
|
166
|
+
app.use(helmet({
|
|
167
|
+
contentSecurityPolicy: {
|
|
168
|
+
directives: {
|
|
169
|
+
defaultSrc: ["'self'"],
|
|
170
|
+
scriptSrc: ["'self'", "'unsafe-inline'"],
|
|
171
|
+
styleSrc: ["'self'", "'unsafe-inline'"],
|
|
172
|
+
imgSrc: ["'self'", 'data:', 'blob:'],
|
|
173
|
+
connectSrc: ["'self'"],
|
|
174
|
+
fontSrc: ["'self'"],
|
|
175
|
+
objectSrc: ["'none'"],
|
|
176
|
+
mediaSrc: ["'self'"],
|
|
177
|
+
frameSrc: ["'none'"],
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
}));
|
|
30
181
|
app.useGlobalInterceptors(new transform_interceptor_1.TransformInterceptor());
|
|
31
182
|
app.useGlobalFilters(new http_exception_filter_1.HttpExceptionFilter());
|
|
32
183
|
app.use(bodyParser.json({ limit: '10mb' }));
|
|
@@ -44,7 +195,7 @@ async function bootstrap() {
|
|
|
44
195
|
const options = {
|
|
45
196
|
customCss: theme.getBuffer(swagger_themes_1.SwaggerThemeNameEnum.MATERIAL),
|
|
46
197
|
customSiteTitle: 'ReactPress API Documentation',
|
|
47
|
-
customfavIcon: '/public/favicon.
|
|
198
|
+
customfavIcon: '/public/favicon.ico',
|
|
48
199
|
swaggerOptions: {
|
|
49
200
|
docExpansion: 'list',
|
|
50
201
|
filter: true,
|
|
@@ -57,15 +208,35 @@ async function bootstrap() {
|
|
|
57
208
|
customCssUrl: '/public/swagger/custom.css',
|
|
58
209
|
};
|
|
59
210
|
swagger_1.SwaggerModule.setup('api', app, document, options);
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
211
|
+
const listenPrefix = String(configService.get('SERVER_API_PREFIX', apiPrefix));
|
|
212
|
+
if (process.env.REACTPRESS_API_ENTRY === 'starter' &&
|
|
213
|
+
(await isPortOpen(listenPort)) &&
|
|
214
|
+
(await probeApiHealth(listenPort, listenPrefix))) {
|
|
215
|
+
console.log(`[ReactPress] API already healthy on :${listenPort} (nest watch reload — skip duplicate listen)`);
|
|
216
|
+
await app.close();
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
await app.listen(listenPort);
|
|
220
|
+
nestApp = app;
|
|
221
|
+
if ((0, local_api_quiet_util_1.isLocalApiQuiet)()) {
|
|
222
|
+
const dbType = String(configService.get('DB_TYPE') || 'mysql').toLowerCase();
|
|
223
|
+
console.log(`[ReactPress] Local API ready · ${dbType === 'sqlite' ? 'SQLite' : dbType} · http://127.0.0.1:${listenPort}${listenPrefix}/health`);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
console.log(`[ReactPress] Application started on http://localhost:${listenPort}`);
|
|
227
|
+
console.log(`[ReactPress] API Documentation available at http://localhost:${listenPort}/api`);
|
|
228
|
+
}
|
|
64
229
|
return app;
|
|
65
230
|
}
|
|
66
231
|
catch (error) {
|
|
67
232
|
console.error('[ReactPress] Failed to start application:', error);
|
|
68
233
|
if (error.code === 'EADDRINUSE') {
|
|
234
|
+
const port = Number(process.env.SERVER_PORT || 3002);
|
|
235
|
+
const prefix = process.env.SERVER_API_PREFIX || '/api';
|
|
236
|
+
if (process.env.REACTPRESS_API_ENTRY === 'starter' && (await probeApiHealth(port, prefix))) {
|
|
237
|
+
console.log(`[ReactPress] Port :${port} in use but API healthy — treating watch reload as success`);
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
69
240
|
console.error('[ReactPress] Port is already in use. Please check for other running instances.');
|
|
70
241
|
console.error('[ReactPress] You can change the port in your .env file or terminate the conflicting process.');
|
|
71
242
|
}
|
|
@@ -73,12 +244,28 @@ async function bootstrap() {
|
|
|
73
244
|
}
|
|
74
245
|
}
|
|
75
246
|
exports.bootstrap = bootstrap;
|
|
76
|
-
|
|
77
|
-
console.log(
|
|
247
|
+
async function shutdownNest(signal) {
|
|
248
|
+
console.log(`\n[ReactPress] Received ${signal}, shutting down…`);
|
|
249
|
+
if (nestApp) {
|
|
250
|
+
try {
|
|
251
|
+
await nestApp.close();
|
|
252
|
+
}
|
|
253
|
+
catch (_a) {
|
|
254
|
+
}
|
|
255
|
+
nestApp = null;
|
|
256
|
+
}
|
|
78
257
|
process.exit(0);
|
|
258
|
+
}
|
|
259
|
+
process.on('SIGINT', () => {
|
|
260
|
+
void shutdownNest('SIGINT');
|
|
79
261
|
});
|
|
80
262
|
process.on('SIGTERM', () => {
|
|
81
|
-
|
|
82
|
-
process.exit(0);
|
|
263
|
+
void shutdownNest('SIGTERM');
|
|
83
264
|
});
|
|
265
|
+
if (require.main === module) {
|
|
266
|
+
bootstrap().catch((err) => {
|
|
267
|
+
console.error('[ReactPress] Failed to start:', err);
|
|
268
|
+
process.exit(1);
|
|
269
|
+
});
|
|
270
|
+
}
|
|
84
271
|
//# sourceMappingURL=starter.js.map
|
package/dist/starter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starter.js","sourceRoot":"","sources":["../src/starter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"starter.js","sourceRoot":"","sources":["../src/starter.ts"],"names":[],"mappings":"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"}
|