@fecommunity/reactpress-server 4.0.0-beta.9 → 4.0.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 +327 -45
- package/bin/reactpress-server.js +6 -14
- package/dist/app.module.js +27 -15
- package/dist/app.module.js.map +1 -1
- package/dist/filters/http-exception.filter.js +1 -1
- package/dist/filters/http-exception.filter.js.map +1 -1
- package/dist/generate-swagger.d.ts +1 -1
- package/dist/generate-swagger.js +11 -12
- package/dist/generate-swagger.js.map +1 -1
- package/dist/interceptors/transform.interceptor.d.ts +6 -2
- package/dist/interceptors/transform.interceptor.js +5 -10
- package/dist/interceptors/transform.interceptor.js.map +1 -1
- package/dist/logger/index.js +4 -5
- package/dist/logger/index.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.js +23 -45
- package/dist/main.js.map +1 -1
- package/dist/modules/article/article.controller.d.ts +2 -7
- package/dist/modules/article/article.controller.js +48 -103
- package/dist/modules/article/article.controller.js.map +1 -1
- package/dist/modules/article/article.entity.d.ts +0 -4
- package/dist/modules/article/article.entity.js +41 -61
- package/dist/modules/article/article.entity.js.map +1 -1
- package/dist/modules/article/article.module.js +3 -18
- package/dist/modules/article/article.module.js.map +1 -1
- package/dist/modules/article/article.service.d.ts +2 -16
- package/dist/modules/article/article.service.js +29 -151
- package/dist/modules/article/article.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 +7 -8
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/jwt-auth.guard.js +3 -4
- package/dist/modules/auth/jwt-auth.guard.js.map +1 -1
- package/dist/modules/auth/jwt.strategy.js +3 -4
- 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/category/category.controller.js +20 -21
- 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 +4 -5
- package/dist/modules/category/category.service.js.map +1 -1
- package/dist/modules/comment/comment.controller.js +20 -24
- 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 -11
- package/dist/modules/comment/comment.module.js.map +1 -1
- package/dist/modules/comment/comment.service.d.ts +1 -5
- package/dist/modules/comment/comment.service.js +16 -43
- 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/file/file.controller.d.ts +1 -1
- package/dist/modules/file/file.controller.js +20 -22
- package/dist/modules/file/file.controller.js.map +1 -1
- package/dist/modules/file/file.entity.d.ts +0 -7
- package/dist/modules/file/file.entity.js +15 -20
- package/dist/modules/file/file.entity.js.map +1 -1
- package/dist/modules/file/file.module.js +4 -16
- package/dist/modules/file/file.module.js.map +1 -1
- package/dist/modules/file/file.service.d.ts +1 -5
- package/dist/modules/file/file.service.js +24 -70
- package/dist/modules/file/file.service.js.map +1 -1
- 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 +33 -35
- 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 +11 -12
- package/dist/modules/knowledge/knowledge.service.js.map +1 -1
- package/dist/modules/page/page.controller.js +23 -24
- 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 +12 -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 -5
- package/dist/modules/setting/setting.constant.js +20 -5
- 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 +0 -3
- package/dist/modules/setting/setting.entity.js +49 -64
- 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 +2 -13
- package/dist/modules/setting/setting.service.js +24 -169
- package/dist/modules/setting/setting.service.js.map +1 -1
- package/dist/modules/smtp/mail.util.d.ts +6 -7
- package/dist/modules/smtp/mail.util.js +9 -5
- package/dist/modules/smtp/mail.util.js.map +1 -1
- package/dist/modules/smtp/smtp.controller.d.ts +0 -3
- package/dist/modules/smtp/smtp.controller.js +14 -27
- 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 +0 -14
- package/dist/modules/smtp/smtp.service.js +12 -40
- package/dist/modules/smtp/smtp.service.js.map +1 -1
- package/dist/modules/tag/tag.controller.js +22 -24
- 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 +4 -5
- package/dist/modules/tag/tag.service.js.map +1 -1
- package/dist/modules/user/user.controller.js +28 -39
- 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 +12 -16
- package/dist/modules/user/user.service.js.map +1 -1
- package/dist/modules/view/view.controller.js +19 -20
- 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/public/favicon.png +0 -0
- package/dist/starter.d.ts +1 -3
- package/dist/starter.js +14 -202
- package/dist/starter.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +15957 -1
- package/dist/utils/date.util.js +1 -1
- package/dist/utils/date.util.js.map +1 -1
- 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 +1 -3
- package/dist/utils/oss/aliyun-oss-client.js +0 -5
- package/dist/utils/oss/aliyun-oss-client.js.map +1 -1
- package/dist/utils/oss/oss-client.d.ts +1 -3
- package/dist/utils/oss/oss-client.js.map +1 -1
- package/dist/utils/oss.util.d.ts +1 -3
- package/dist/utils/oss.util.js +1 -6
- package/dist/utils/oss.util.js.map +1 -1
- package/dist/utils/uniqueid.util.js +1 -1
- package/dist/utils/uniqueid.util.js.map +1 -1
- package/dist/utils/upload.util.d.ts +2 -6
- package/dist/utils/upload.util.js +8 -23
- package/dist/utils/upload.util.js.map +1 -1
- package/dist/utils/user.util.d.ts +0 -1
- package/dist/utils/user.util.js +2 -6
- package/dist/utils/user.util.js.map +1 -1
- package/package.json +28 -21
- package/public/favicon.png +0 -0
- package/dist/common/api-messages.d.ts +0 -41
- package/dist/common/api-messages.js +0 -45
- package/dist/common/api-messages.js.map +0 -1
- package/dist/database/typeorm-options.d.ts +0 -3
- package/dist/database/typeorm-options.js +0 -60
- package/dist/database/typeorm-options.js.map +0 -1
- package/dist/modules/api-key/api-key.controller.d.ts +0 -14
- package/dist/modules/api-key/api-key.controller.js +0 -63
- package/dist/modules/api-key/api-key.controller.js.map +0 -1
- package/dist/modules/api-key/api-key.entity.d.ts +0 -11
- package/dist/modules/api-key/api-key.entity.js +0 -63
- package/dist/modules/api-key/api-key.entity.js.map +0 -1
- package/dist/modules/api-key/api-key.guard.d.ts +0 -7
- package/dist/modules/api-key/api-key.guard.js +0 -39
- package/dist/modules/api-key/api-key.guard.js.map +0 -1
- package/dist/modules/api-key/api-key.module.d.ts +0 -2
- package/dist/modules/api-key/api-key.module.js +0 -28
- package/dist/modules/api-key/api-key.module.js.map +0 -1
- package/dist/modules/api-key/api-key.service.d.ts +0 -15
- package/dist/modules/api-key/api-key.service.js +0 -81
- package/dist/modules/api-key/api-key.service.js.map +0 -1
- package/dist/modules/article/article-revision.entity.d.ts +0 -11
- package/dist/modules/article/article-revision.entity.js +0 -53
- package/dist/modules/article/article-revision.entity.js.map +0 -1
- package/dist/modules/article/article-slug.util.d.ts +0 -2
- package/dist/modules/article/article-slug.util.js +0 -19
- package/dist/modules/article/article-slug.util.js.map +0 -1
- package/dist/modules/article/scheduled-publish.service.d.ts +0 -13
- package/dist/modules/article/scheduled-publish.service.js +0 -65
- package/dist/modules/article/scheduled-publish.service.js.map +0 -1
- package/dist/modules/bootstrap/bootstrap.constants.d.ts +0 -20
- package/dist/modules/bootstrap/bootstrap.constants.js +0 -171
- package/dist/modules/bootstrap/bootstrap.constants.js.map +0 -1
- package/dist/modules/bootstrap/bootstrap.service.d.ts +0 -22
- package/dist/modules/bootstrap/bootstrap.service.js +0 -183
- package/dist/modules/bootstrap/bootstrap.service.js.map +0 -1
- package/dist/modules/bootstrap/install-locale.d.ts +0 -2
- package/dist/modules/bootstrap/install-locale.js +0 -11
- package/dist/modules/bootstrap/install-locale.js.map +0 -1
- package/dist/modules/extension/extension.module.d.ts +0 -9
- package/dist/modules/extension/extension.module.js +0 -50
- package/dist/modules/extension/extension.module.js.map +0 -1
- package/dist/modules/extension/plugin-loader.service.d.ts +0 -12
- package/dist/modules/extension/plugin-loader.service.js +0 -96
- package/dist/modules/extension/plugin-loader.service.js.map +0 -1
- package/dist/modules/extension/plugin-registry.bridge.d.ts +0 -3
- package/dist/modules/extension/plugin-registry.bridge.js +0 -44
- package/dist/modules/extension/plugin-registry.bridge.js.map +0 -1
- package/dist/modules/extension/plugin.controller.d.ts +0 -22
- package/dist/modules/extension/plugin.controller.js +0 -155
- package/dist/modules/extension/plugin.controller.js.map +0 -1
- package/dist/modules/extension/plugin.service.d.ts +0 -52
- package/dist/modules/extension/plugin.service.js +0 -391
- package/dist/modules/extension/plugin.service.js.map +0 -1
- package/dist/modules/extension/preview-draft.store.d.ts +0 -13
- package/dist/modules/extension/preview-draft.store.js +0 -41
- package/dist/modules/extension/preview-draft.store.js.map +0 -1
- package/dist/modules/extension/theme-registry.bridge.d.ts +0 -56
- package/dist/modules/extension/theme-registry.bridge.js +0 -46
- package/dist/modules/extension/theme-registry.bridge.js.map +0 -1
- package/dist/modules/extension/theme.controller.d.ts +0 -66
- package/dist/modules/extension/theme.controller.js +0 -301
- package/dist/modules/extension/theme.controller.js.map +0 -1
- package/dist/modules/extension/theme.service.d.ts +0 -140
- package/dist/modules/extension/theme.service.js +0 -1039
- package/dist/modules/extension/theme.service.js.map +0 -1
- package/dist/modules/file/file-optimization.controller.d.ts +0 -12
- package/dist/modules/file/file-optimization.controller.js +0 -79
- package/dist/modules/file/file-optimization.controller.js.map +0 -1
- package/dist/modules/file/file-optimization.service.d.ts +0 -36
- package/dist/modules/file/file-optimization.service.js +0 -385
- package/dist/modules/file/file-optimization.service.js.map +0 -1
- package/dist/modules/file/file-optimization.types.d.ts +0 -66
- package/dist/modules/file/file-optimization.types.js +0 -5
- package/dist/modules/file/file-optimization.types.js.map +0 -1
- package/dist/modules/file/image-optimizer-plugin.guard.d.ts +0 -7
- package/dist/modules/file/image-optimizer-plugin.guard.js +0 -33
- package/dist/modules/file/image-optimizer-plugin.guard.js.map +0 -1
- package/dist/modules/health/health.controller.d.ts +0 -11
- package/dist/modules/health/health.controller.js +0 -55
- package/dist/modules/health/health.controller.js.map +0 -1
- package/dist/modules/health/health.module.d.ts +0 -2
- package/dist/modules/health/health.module.js +0 -20
- package/dist/modules/health/health.module.js.map +0 -1
- package/dist/modules/hook/hook.module.d.ts +0 -2
- package/dist/modules/hook/hook.module.js +0 -22
- package/dist/modules/hook/hook.module.js.map +0 -1
- package/dist/modules/hook/hook.service.d.ts +0 -26
- package/dist/modules/hook/hook.service.js +0 -105
- package/dist/modules/hook/hook.service.js.map +0 -1
- package/dist/modules/webhook/webhook.controller.d.ts +0 -12
- package/dist/modules/webhook/webhook.controller.js +0 -63
- package/dist/modules/webhook/webhook.controller.js.map +0 -1
- package/dist/modules/webhook/webhook.entity.d.ts +0 -9
- package/dist/modules/webhook/webhook.entity.js +0 -54
- package/dist/modules/webhook/webhook.entity.js.map +0 -1
- package/dist/modules/webhook/webhook.module.d.ts +0 -2
- package/dist/modules/webhook/webhook.module.js +0 -27
- package/dist/modules/webhook/webhook.module.js.map +0 -1
- package/dist/modules/webhook/webhook.service.d.ts +0 -16
- package/dist/modules/webhook/webhook.service.js +0 -100
- package/dist/modules/webhook/webhook.service.js.map +0 -1
- package/dist/node-polyfills.d.ts +0 -18
- package/dist/node-polyfills.js +0 -24
- package/dist/node-polyfills.js.map +0 -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/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 +0 -7
- 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/tsconfig.tsbuildinfo +0 -1
- package/dist/utils/html-sanitize.util.d.ts +0 -1
- package/dist/utils/html-sanitize.util.js +0 -33
- package/dist/utils/html-sanitize.util.js.map +0 -1
- package/dist/utils/image-processor.util.d.ts +0 -23
- package/dist/utils/image-processor.util.js +0 -88
- package/dist/utils/image-processor.util.js.map +0 -1
- package/dist/utils/local-api-quiet.util.d.ts +0 -1
- package/dist/utils/local-api-quiet.util.js +0 -8
- package/dist/utils/local-api-quiet.util.js.map +0 -1
- package/dist/utils/project-root.util.d.ts +0 -2
- package/dist/utils/project-root.util.js +0 -42
- package/dist/utils/project-root.util.js.map +0 -1
- package/dist/utils/query-whitelist.util.d.ts +0 -1
- package/dist/utils/query-whitelist.util.js +0 -100
- package/dist/utils/query-whitelist.util.js.map +0 -1
- package/dist/utils/theme-placeholder-cover.d.ts +0 -8
- package/dist/utils/theme-placeholder-cover.js +0 -94
- package/dist/utils/theme-placeholder-cover.js.map +0 -1
- 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/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 +0 -7
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.service.js","sourceRoot":"","sources":["../../../src/modules/view/view.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AAErC,iDAA8C;AAC9C,iDAAqD;AACrD,+CAAqC;
|
|
1
|
+
{"version":3,"file":"view.service.js","sourceRoot":"","sources":["../../../src/modules/view/view.service.ts"],"names":[],"mappings":"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"}
|
package/dist/public/favicon.png
CHANGED
|
Binary file
|
package/dist/starter.d.ts
CHANGED
package/dist/starter.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.bootstrap = void 0;
|
|
4
|
-
require("./node-polyfills");
|
|
5
4
|
const core_1 = require("@nestjs/core");
|
|
6
5
|
const swagger_1 = require("@nestjs/swagger");
|
|
7
6
|
const bodyParser = require("body-parser");
|
|
@@ -9,176 +8,25 @@ const compression = require("compression");
|
|
|
9
8
|
const express = require("express");
|
|
10
9
|
const rateLimit = require("express-rate-limit");
|
|
11
10
|
const helmet = require("helmet");
|
|
12
|
-
const http = require("http");
|
|
13
|
-
const net = require("net");
|
|
14
|
-
const fs_1 = require("fs");
|
|
15
11
|
const path_1 = require("path");
|
|
16
12
|
const swagger_themes_1 = require("swagger-themes");
|
|
17
13
|
const app_module_1 = require("./app.module");
|
|
18
|
-
const api_messages_1 = require("./common/api-messages");
|
|
19
14
|
const http_exception_filter_1 = require("./filters/http-exception.filter");
|
|
20
15
|
const transform_interceptor_1 = require("./interceptors/transform.interceptor");
|
|
21
|
-
const project_root_util_1 = require("./utils/project-root.util");
|
|
22
|
-
const local_api_quiet_util_1 = require("./utils/local-api-quiet.util");
|
|
23
|
-
let nestApp = null;
|
|
24
|
-
function isPortOpen(port) {
|
|
25
|
-
return new Promise((resolve) => {
|
|
26
|
-
const socket = net.createConnection({ port, host: '127.0.0.1' }, () => {
|
|
27
|
-
socket.destroy();
|
|
28
|
-
resolve(true);
|
|
29
|
-
});
|
|
30
|
-
socket.on('error', () => resolve(false));
|
|
31
|
-
socket.setTimeout(800, () => {
|
|
32
|
-
socket.destroy();
|
|
33
|
-
resolve(false);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
function normalizeHealthPayload(raw) {
|
|
38
|
-
if (!raw || typeof raw !== 'object')
|
|
39
|
-
return null;
|
|
40
|
-
const body = raw;
|
|
41
|
-
const nested = body.data;
|
|
42
|
-
if (nested && typeof nested === 'object' && ('status' in nested || 'database' in nested)) {
|
|
43
|
-
return nested;
|
|
44
|
-
}
|
|
45
|
-
return body;
|
|
46
|
-
}
|
|
47
|
-
function isHealthPayloadReady(payload) {
|
|
48
|
-
if (!payload)
|
|
49
|
-
return false;
|
|
50
|
-
if (Object.prototype.hasOwnProperty.call(payload, 'database')) {
|
|
51
|
-
return payload.status === 'ok' && payload.database === 'up';
|
|
52
|
-
}
|
|
53
|
-
return payload.status === 'ok' || payload.status === 'OK';
|
|
54
|
-
}
|
|
55
|
-
function probeApiHealth(port, prefix = '/api') {
|
|
56
|
-
return new Promise((resolve) => {
|
|
57
|
-
const req = http.request({
|
|
58
|
-
hostname: '127.0.0.1',
|
|
59
|
-
port,
|
|
60
|
-
path: `${prefix.replace(/\/$/, '')}/health`,
|
|
61
|
-
method: 'GET',
|
|
62
|
-
timeout: 2000,
|
|
63
|
-
}, (res) => {
|
|
64
|
-
let body = '';
|
|
65
|
-
res.on('data', (c) => {
|
|
66
|
-
body += c;
|
|
67
|
-
});
|
|
68
|
-
res.on('end', () => {
|
|
69
|
-
if (res.statusCode !== 200) {
|
|
70
|
-
resolve(false);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
try {
|
|
74
|
-
const payload = normalizeHealthPayload(JSON.parse(body));
|
|
75
|
-
resolve(isHealthPayloadReady(payload));
|
|
76
|
-
}
|
|
77
|
-
catch (_a) {
|
|
78
|
-
resolve(false);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
req.on('error', () => resolve(false));
|
|
83
|
-
req.on('timeout', () => {
|
|
84
|
-
req.destroy();
|
|
85
|
-
resolve(false);
|
|
86
|
-
});
|
|
87
|
-
req.end();
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
16
|
async function bootstrap() {
|
|
91
|
-
var _a;
|
|
92
|
-
(0, project_root_util_1.resolveProjectRoot)();
|
|
93
|
-
const configuredPort = Number(process.env.SERVER_PORT || 3002);
|
|
94
|
-
const apiPrefix = String(process.env.SERVER_API_PREFIX || '/api');
|
|
95
|
-
if (process.env.REACTPRESS_API_ENTRY === 'starter' &&
|
|
96
|
-
(await isPortOpen(configuredPort)) &&
|
|
97
|
-
(await probeApiHealth(configuredPort, apiPrefix))) {
|
|
98
|
-
console.log(`[ReactPress] API already healthy on :${configuredPort} (nest watch reload — skip bootstrap)`);
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
17
|
try {
|
|
102
|
-
|
|
103
|
-
await nestApp.close();
|
|
104
|
-
nestApp = null;
|
|
105
|
-
}
|
|
106
|
-
const app = await core_1.NestFactory.create(app_module_1.AppModule, {
|
|
107
|
-
logger: (0, local_api_quiet_util_1.isLocalApiQuiet)() ? ['error', 'warn'] : undefined,
|
|
108
|
-
});
|
|
18
|
+
const app = await core_1.NestFactory.create(app_module_1.AppModule);
|
|
109
19
|
const configService = app.get('ConfigService');
|
|
110
|
-
const listenPort = Number(configService.get('SERVER_PORT', configuredPort));
|
|
111
|
-
app.use((req, res, next) => {
|
|
112
|
-
const { shouldRedirectDevPortToNginx, buildDevPortRedirectUrl } = require('@fecommunity/reactpress-toolkit/plugin/dev');
|
|
113
|
-
if (!shouldRedirectDevPortToNginx({
|
|
114
|
-
host: req.headers.host,
|
|
115
|
-
method: req.method,
|
|
116
|
-
accept: req.headers.accept,
|
|
117
|
-
directPort: listenPort,
|
|
118
|
-
pathname: req.path,
|
|
119
|
-
skipPathPrefixes: ['/public'],
|
|
120
|
-
})) {
|
|
121
|
-
next();
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
res.redirect(302, buildDevPortRedirectUrl({
|
|
125
|
-
directPort: listenPort,
|
|
126
|
-
pathname: req.path,
|
|
127
|
-
search: req.url.includes('?') ? req.url.slice(req.url.indexOf('?')) : '',
|
|
128
|
-
}));
|
|
129
|
-
});
|
|
130
20
|
app.enableCors();
|
|
131
|
-
|
|
132
|
-
app.setGlobalPrefix(apiPrefix);
|
|
21
|
+
app.setGlobalPrefix(configService.get('SERVER_API_PREFIX', '/api'));
|
|
133
22
|
app.use(rateLimit({
|
|
134
23
|
windowMs: 60 * 1000,
|
|
135
24
|
max: 10000,
|
|
136
25
|
}));
|
|
137
|
-
|
|
138
|
-
windowMs: 15 * 60 * 1000,
|
|
139
|
-
max: 5,
|
|
140
|
-
skipSuccessfulRequests: true,
|
|
141
|
-
standardHeaders: true,
|
|
142
|
-
legacyHeaders: false,
|
|
143
|
-
handler(_req, res) {
|
|
144
|
-
res.status(429).json({
|
|
145
|
-
statusCode: 429,
|
|
146
|
-
msg: api_messages_1.ApiMsg.TOO_MANY_LOGIN_ATTEMPTS,
|
|
147
|
-
success: false,
|
|
148
|
-
data: null,
|
|
149
|
-
});
|
|
150
|
-
},
|
|
151
|
-
}));
|
|
152
|
-
const rootDir = (0, path_1.join)(__dirname, '../public');
|
|
153
|
-
const uploadDir = (_a = process.env.REACTPRESS_UPLOAD_DIR) === null || _a === void 0 ? void 0 : _a.trim();
|
|
154
|
-
if (uploadDir && (0, fs_1.existsSync)(uploadDir)) {
|
|
155
|
-
app.use('/public/uploads', express.static(uploadDir));
|
|
156
|
-
}
|
|
26
|
+
const rootDir = path_1.join(__dirname, '../public');
|
|
157
27
|
app.use('/public', express.static(rootDir));
|
|
158
|
-
for (const name of ['logo.png', 'favicon.png', 'favicon.ico']) {
|
|
159
|
-
const filePath = (0, path_1.join)(rootDir, name);
|
|
160
|
-
if ((0, fs_1.existsSync)(filePath)) {
|
|
161
|
-
app.use(`/${name}`, (_req, res) => {
|
|
162
|
-
res.sendFile(filePath);
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
28
|
app.use(compression());
|
|
167
|
-
app.use(helmet(
|
|
168
|
-
contentSecurityPolicy: {
|
|
169
|
-
directives: {
|
|
170
|
-
defaultSrc: ["'self'"],
|
|
171
|
-
scriptSrc: ["'self'", "'unsafe-inline'"],
|
|
172
|
-
styleSrc: ["'self'", "'unsafe-inline'"],
|
|
173
|
-
imgSrc: ["'self'", 'data:', 'blob:'],
|
|
174
|
-
connectSrc: ["'self'"],
|
|
175
|
-
fontSrc: ["'self'"],
|
|
176
|
-
objectSrc: ["'none'"],
|
|
177
|
-
mediaSrc: ["'self'"],
|
|
178
|
-
frameSrc: ["'none'"],
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
}));
|
|
29
|
+
app.use(helmet());
|
|
182
30
|
app.useGlobalInterceptors(new transform_interceptor_1.TransformInterceptor());
|
|
183
31
|
app.useGlobalFilters(new http_exception_filter_1.HttpExceptionFilter());
|
|
184
32
|
app.use(bodyParser.json({ limit: '10mb' }));
|
|
@@ -186,7 +34,7 @@ async function bootstrap() {
|
|
|
186
34
|
const swaggerConfig = new swagger_1.DocumentBuilder()
|
|
187
35
|
.setTitle('ReactPress API Documentation')
|
|
188
36
|
.setDescription('Comprehensive API documentation for ReactPress - A modern content management system built with NestJS')
|
|
189
|
-
.setVersion('
|
|
37
|
+
.setVersion('2.0')
|
|
190
38
|
.setContact('ReactPress Team', 'https://github.com/fecommunity/reactpress', 'admin@gaoredu.com')
|
|
191
39
|
.setLicense('MIT', 'https://github.com/fecommunity/reactpress/blob/main/LICENSE')
|
|
192
40
|
.addServer(configService.get('SERVER_SITE_URL', 'http://localhost:3002'), 'API Server')
|
|
@@ -196,7 +44,7 @@ async function bootstrap() {
|
|
|
196
44
|
const options = {
|
|
197
45
|
customCss: theme.getBuffer(swagger_themes_1.SwaggerThemeNameEnum.MATERIAL),
|
|
198
46
|
customSiteTitle: 'ReactPress API Documentation',
|
|
199
|
-
customfavIcon: '/public/favicon.
|
|
47
|
+
customfavIcon: '/public/favicon.png',
|
|
200
48
|
swaggerOptions: {
|
|
201
49
|
docExpansion: 'list',
|
|
202
50
|
filter: true,
|
|
@@ -209,35 +57,15 @@ async function bootstrap() {
|
|
|
209
57
|
customCssUrl: '/public/swagger/custom.css',
|
|
210
58
|
};
|
|
211
59
|
swagger_1.SwaggerModule.setup('api', app, document, options);
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
console.log(`[ReactPress] API already healthy on :${listenPort} (nest watch reload — skip duplicate listen)`);
|
|
217
|
-
await app.close();
|
|
218
|
-
return null;
|
|
219
|
-
}
|
|
220
|
-
await app.listen(listenPort);
|
|
221
|
-
nestApp = app;
|
|
222
|
-
if ((0, local_api_quiet_util_1.isLocalApiQuiet)()) {
|
|
223
|
-
const dbType = String(configService.get('DB_TYPE') || 'mysql').toLowerCase();
|
|
224
|
-
console.log(`[ReactPress] Local API ready · ${dbType === 'sqlite' ? 'SQLite' : dbType} · http://127.0.0.1:${listenPort}${listenPrefix}/health`);
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
console.log(`[ReactPress] Application started on http://localhost:${listenPort}`);
|
|
228
|
-
console.log(`[ReactPress] API Documentation available at http://localhost:${listenPort}/api`);
|
|
229
|
-
}
|
|
60
|
+
const configuredPort = configService.get('SERVER_PORT', 3002);
|
|
61
|
+
await app.listen(configuredPort);
|
|
62
|
+
console.log(`[ReactPress] Application started on http://localhost:${configuredPort}`);
|
|
63
|
+
console.log(`[ReactPress] API Documentation available at http://localhost:${configuredPort}/api`);
|
|
230
64
|
return app;
|
|
231
65
|
}
|
|
232
66
|
catch (error) {
|
|
233
67
|
console.error('[ReactPress] Failed to start application:', error);
|
|
234
68
|
if (error.code === 'EADDRINUSE') {
|
|
235
|
-
const port = Number(process.env.SERVER_PORT || 3002);
|
|
236
|
-
const prefix = process.env.SERVER_API_PREFIX || '/api';
|
|
237
|
-
if (process.env.REACTPRESS_API_ENTRY === 'starter' && (await probeApiHealth(port, prefix))) {
|
|
238
|
-
console.log(`[ReactPress] Port :${port} in use but API healthy — treating watch reload as success`);
|
|
239
|
-
return null;
|
|
240
|
-
}
|
|
241
69
|
console.error('[ReactPress] Port is already in use. Please check for other running instances.');
|
|
242
70
|
console.error('[ReactPress] You can change the port in your .env file or terminate the conflicting process.');
|
|
243
71
|
}
|
|
@@ -245,28 +73,12 @@ async function bootstrap() {
|
|
|
245
73
|
}
|
|
246
74
|
}
|
|
247
75
|
exports.bootstrap = bootstrap;
|
|
248
|
-
async function shutdownNest(signal) {
|
|
249
|
-
console.log(`\n[ReactPress] Received ${signal}, shutting down…`);
|
|
250
|
-
if (nestApp) {
|
|
251
|
-
try {
|
|
252
|
-
await nestApp.close();
|
|
253
|
-
}
|
|
254
|
-
catch (_a) {
|
|
255
|
-
}
|
|
256
|
-
nestApp = null;
|
|
257
|
-
}
|
|
258
|
-
process.exit(0);
|
|
259
|
-
}
|
|
260
76
|
process.on('SIGINT', () => {
|
|
261
|
-
|
|
77
|
+
console.log('\n[ReactPress] Application shutting down gracefully...');
|
|
78
|
+
process.exit(0);
|
|
262
79
|
});
|
|
263
80
|
process.on('SIGTERM', () => {
|
|
264
|
-
|
|
81
|
+
console.log('\n[ReactPress] Application shutting down gracefully...');
|
|
82
|
+
process.exit(0);
|
|
265
83
|
});
|
|
266
|
-
if (require.main === module) {
|
|
267
|
-
bootstrap().catch((err) => {
|
|
268
|
-
console.error('[ReactPress] Failed to start:', err);
|
|
269
|
-
process.exit(1);
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
84
|
//# 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":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"starter.js","sourceRoot":"","sources":["../src/starter.ts"],"names":[],"mappings":"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"}
|