@8medusa/framework 2.7.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/README.md +0 -0
- package/dist/build-tools/compiler.d.ts +64 -0
- package/dist/build-tools/compiler.d.ts.map +1 -0
- package/dist/build-tools/compiler.js +419 -0
- package/dist/build-tools/compiler.js.map +1 -0
- package/dist/build-tools/index.d.ts +2 -0
- package/dist/build-tools/index.d.ts.map +1 -0
- package/dist/build-tools/index.js +18 -0
- package/dist/build-tools/index.js.map +1 -0
- package/dist/config/config.d.ts +34 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +134 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +35 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/container.d.ts +3 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +21 -0
- package/dist/container.js.map +1 -0
- package/dist/database/index.d.ts +3 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +19 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/pg-connection-loader.d.ts +6 -0
- package/dist/database/pg-connection-loader.d.ts.map +1 -0
- package/dist/database/pg-connection-loader.js +43 -0
- package/dist/database/pg-connection-loader.js.map +1 -0
- package/dist/feature-flags/feature-flag-loader.d.ts +8 -0
- package/dist/feature-flags/feature-flag-loader.d.ts.map +1 -0
- package/dist/feature-flags/feature-flag-loader.js +81 -0
- package/dist/feature-flags/feature-flag-loader.js.map +1 -0
- package/dist/feature-flags/flag-router.d.ts +32 -0
- package/dist/feature-flags/flag-router.d.ts.map +1 -0
- package/dist/feature-flags/flag-router.js +67 -0
- package/dist/feature-flags/flag-router.js.map +1 -0
- package/dist/feature-flags/index.d.ts +5 -0
- package/dist/feature-flags/index.d.ts.map +1 -0
- package/dist/feature-flags/index.js +21 -0
- package/dist/feature-flags/index.js.map +1 -0
- package/dist/feature-flags/types.d.ts +31 -0
- package/dist/feature-flags/types.d.ts.map +1 -0
- package/dist/feature-flags/types.js +3 -0
- package/dist/feature-flags/types.js.map +1 -0
- package/dist/http/express-loader.d.ts +8 -0
- package/dist/http/express-loader.d.ts.map +1 -0
- package/dist/http/express-loader.js +128 -0
- package/dist/http/express-loader.js.map +1 -0
- package/dist/http/index.d.ts +15 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +31 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/middleware-file-loader.d.ts +33 -0
- package/dist/http/middleware-file-loader.d.ts.map +1 -0
- package/dist/http/middleware-file-loader.js +173 -0
- package/dist/http/middleware-file-loader.js.map +1 -0
- package/dist/http/middlewares/apply-default-filters.d.ts +3 -0
- package/dist/http/middlewares/apply-default-filters.d.ts.map +1 -0
- package/dist/http/middlewares/apply-default-filters.js +32 -0
- package/dist/http/middlewares/apply-default-filters.js.map +1 -0
- package/dist/http/middlewares/apply-params-as-filters.d.ts +5 -0
- package/dist/http/middlewares/apply-params-as-filters.d.ts.map +1 -0
- package/dist/http/middlewares/apply-params-as-filters.js +14 -0
- package/dist/http/middlewares/apply-params-as-filters.js.map +1 -0
- package/dist/http/middlewares/authenticate-middleware.d.ts +13 -0
- package/dist/http/middlewares/authenticate-middleware.d.ts.map +1 -0
- package/dist/http/middlewares/authenticate-middleware.js +136 -0
- package/dist/http/middlewares/authenticate-middleware.js.map +1 -0
- package/dist/http/middlewares/bodyparser.d.ts +13 -0
- package/dist/http/middlewares/bodyparser.d.ts.map +1 -0
- package/dist/http/middlewares/bodyparser.js +62 -0
- package/dist/http/middlewares/bodyparser.js.map +1 -0
- package/dist/http/middlewares/clear-filters-by-key.d.ts +3 -0
- package/dist/http/middlewares/clear-filters-by-key.d.ts.map +1 -0
- package/dist/http/middlewares/clear-filters-by-key.js +12 -0
- package/dist/http/middlewares/clear-filters-by-key.js.map +1 -0
- package/dist/http/middlewares/ensure-publishable-api-key.d.ts +3 -0
- package/dist/http/middlewares/ensure-publishable-api-key.d.ts.map +1 -0
- package/dist/http/middlewares/ensure-publishable-api-key.js +45 -0
- package/dist/http/middlewares/ensure-publishable-api-key.js.map +1 -0
- package/dist/http/middlewares/error-handler.d.ts +21 -0
- package/dist/http/middlewares/error-handler.d.ts.map +1 -0
- package/dist/http/middlewares/error-handler.js +85 -0
- package/dist/http/middlewares/error-handler.js.map +1 -0
- package/dist/http/middlewares/exception-formatter.d.ts +9 -0
- package/dist/http/middlewares/exception-formatter.d.ts.map +1 -0
- package/dist/http/middlewares/exception-formatter.js +36 -0
- package/dist/http/middlewares/exception-formatter.js.map +1 -0
- package/dist/http/middlewares/index.d.ts +8 -0
- package/dist/http/middlewares/index.d.ts.map +1 -0
- package/dist/http/middlewares/index.js +24 -0
- package/dist/http/middlewares/index.js.map +1 -0
- package/dist/http/middlewares/set-context.d.ts +3 -0
- package/dist/http/middlewares/set-context.d.ts.map +1 -0
- package/dist/http/middlewares/set-context.js +18 -0
- package/dist/http/middlewares/set-context.js.map +1 -0
- package/dist/http/router.d.ts +28 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +252 -0
- package/dist/http/router.js.map +1 -0
- package/dist/http/routes-finder.d.ts +22 -0
- package/dist/http/routes-finder.d.ts.map +1 -0
- package/dist/http/routes-finder.js +62 -0
- package/dist/http/routes-finder.js.map +1 -0
- package/dist/http/routes-loader.d.ts +30 -0
- package/dist/http/routes-loader.d.ts.map +1 -0
- package/dist/http/routes-loader.js +203 -0
- package/dist/http/routes-loader.js.map +1 -0
- package/dist/http/routes-sorter.d.ts +105 -0
- package/dist/http/routes-sorter.d.ts.map +1 -0
- package/dist/http/routes-sorter.js +146 -0
- package/dist/http/routes-sorter.js.map +1 -0
- package/dist/http/types.d.ts +164 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +16 -0
- package/dist/http/types.js.map +1 -0
- package/dist/http/utils/define-middlewares.d.ts +22 -0
- package/dist/http/utils/define-middlewares.d.ts.map +1 -0
- package/dist/http/utils/define-middlewares.js +27 -0
- package/dist/http/utils/define-middlewares.js.map +1 -0
- package/dist/http/utils/get-query-config.d.ts +42 -0
- package/dist/http/utils/get-query-config.d.ts.map +1 -0
- package/dist/http/utils/get-query-config.js +183 -0
- package/dist/http/utils/get-query-config.js.map +1 -0
- package/dist/http/utils/http-compression.d.ts +5 -0
- package/dist/http/utils/http-compression.d.ts.map +1 -0
- package/dist/http/utils/http-compression.js +33 -0
- package/dist/http/utils/http-compression.js.map +1 -0
- package/dist/http/utils/maybe-apply-link-filter.d.ts +8 -0
- package/dist/http/utils/maybe-apply-link-filter.d.ts.map +1 -0
- package/dist/http/utils/maybe-apply-link-filter.js +68 -0
- package/dist/http/utils/maybe-apply-link-filter.js.map +1 -0
- package/dist/http/utils/refetch-entities.d.ts +5 -0
- package/dist/http/utils/refetch-entities.d.ts.map +1 -0
- package/dist/http/utils/refetch-entities.js +29 -0
- package/dist/http/utils/refetch-entities.js.map +1 -0
- package/dist/http/utils/restricted-fields.d.ts +6 -0
- package/dist/http/utils/restricted-fields.d.ts.map +1 -0
- package/dist/http/utils/restricted-fields.js +30 -0
- package/dist/http/utils/restricted-fields.js.map +1 -0
- package/dist/http/utils/unless-path.d.ts +9 -0
- package/dist/http/utils/unless-path.d.ts.map +1 -0
- package/dist/http/utils/unless-path.js +19 -0
- package/dist/http/utils/unless-path.js.map +1 -0
- package/dist/http/utils/validate-body.d.ts +5 -0
- package/dist/http/utils/validate-body.d.ts.map +1 -0
- package/dist/http/utils/validate-body.js +23 -0
- package/dist/http/utils/validate-body.js.map +1 -0
- package/dist/http/utils/validate-query.d.ts +6 -0
- package/dist/http/utils/validate-query.d.ts.map +1 -0
- package/dist/http/utils/validate-query.js +79 -0
- package/dist/http/utils/validate-query.js.map +1 -0
- package/dist/http/utils/wrap-handler.d.ts +3 -0
- package/dist/http/utils/wrap-handler.d.ts.map +1 -0
- package/dist/http/utils/wrap-handler.js +26 -0
- package/dist/http/utils/wrap-handler.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/index.d.ts +2 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +18 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/job-loader.d.ts +42 -0
- package/dist/jobs/job-loader.d.ts.map +1 -0
- package/dist/jobs/job-loader.js +78 -0
- package/dist/jobs/job-loader.js.map +1 -0
- package/dist/links/index.d.ts +2 -0
- package/dist/links/index.d.ts.map +1 -0
- package/dist/links/index.js +18 -0
- package/dist/links/index.js.map +1 -0
- package/dist/links/link-loader.d.ts +10 -0
- package/dist/links/link-loader.d.ts.map +1 -0
- package/dist/links/link-loader.js +74 -0
- package/dist/links/link-loader.js.map +1 -0
- package/dist/logger/index.d.ts +3 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +9 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/medusa-app-loader.d.ts +51 -0
- package/dist/medusa-app-loader.d.ts.map +1 -0
- package/dist/medusa-app-loader.js +189 -0
- package/dist/medusa-app-loader.js.map +1 -0
- package/dist/migrations/index.d.ts +3 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +19 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migrator.d.ts +38 -0
- package/dist/migrations/migrator.d.ts.map +1 -0
- package/dist/migrations/migrator.js +129 -0
- package/dist/migrations/migrator.js.map +1 -0
- package/dist/migrations/run-migration-scripts.d.ts +17 -0
- package/dist/migrations/run-migration-scripts.d.ts.map +1 -0
- package/dist/migrations/run-migration-scripts.js +94 -0
- package/dist/migrations/run-migration-scripts.js.map +1 -0
- package/dist/mikro-orm-cli/bin.d.ts +14 -0
- package/dist/mikro-orm-cli/bin.d.ts.map +1 -0
- package/dist/mikro-orm-cli/bin.js +54 -0
- package/dist/mikro-orm-cli/bin.js.map +1 -0
- package/dist/modules-sdk/index.d.ts +2 -0
- package/dist/modules-sdk/index.d.ts.map +1 -0
- package/dist/modules-sdk/index.js +18 -0
- package/dist/modules-sdk/index.js.map +1 -0
- package/dist/orchestration/index.d.ts +2 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +18 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/subscribers/index.d.ts +3 -0
- package/dist/subscribers/index.d.ts.map +1 -0
- package/dist/subscribers/index.js +19 -0
- package/dist/subscribers/index.js.map +1 -0
- package/dist/subscribers/subscriber-loader.d.ts +12 -0
- package/dist/subscribers/subscriber-loader.d.ts.map +1 -0
- package/dist/subscribers/subscriber-loader.js +147 -0
- package/dist/subscribers/subscriber-loader.js.map +1 -0
- package/dist/subscribers/types.d.ts +15 -0
- package/dist/subscribers/types.d.ts.map +1 -0
- package/dist/subscribers/types.js +3 -0
- package/dist/subscribers/types.js.map +1 -0
- package/dist/telemetry/index.d.ts +50 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +81 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/types/container.d.ts +62 -0
- package/dist/types/container.d.ts.map +1 -0
- package/dist/types/container.js +3 -0
- package/dist/types/container.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/resource-loader.d.ts +26 -0
- package/dist/utils/resource-loader.d.ts.map +1 -0
- package/dist/utils/resource-loader.js +78 -0
- package/dist/utils/resource-loader.js.map +1 -0
- package/dist/workflows/index.d.ts +3 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +19 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/workflow-loader.d.ts +12 -0
- package/dist/workflows/workflow-loader.d.ts.map +1 -0
- package/dist/workflows/workflow-loader.js +24 -0
- package/dist/workflows/workflow-loader.js.map +1 -0
- package/dist/workflows-sdk/composer.d.ts +2 -0
- package/dist/workflows-sdk/composer.d.ts.map +1 -0
- package/dist/workflows-sdk/composer.js +18 -0
- package/dist/workflows-sdk/composer.js.map +1 -0
- package/dist/workflows-sdk/index.d.ts +3 -0
- package/dist/workflows-sdk/index.d.ts.map +1 -0
- package/dist/workflows-sdk/index.js +19 -0
- package/dist/workflows-sdk/index.js.map +1 -0
- package/dist/zod/index.d.ts +2 -0
- package/dist/zod/index.d.ts.map +1 -0
- package/dist/zod/index.js +18 -0
- package/dist/zod/index.js.map +1 -0
- package/dist/zod/zod-helpers.d.ts +3 -0
- package/dist/zod/zod-helpers.d.ts.map +1 -0
- package/dist/zod/zod-helpers.js +95 -0
- package/dist/zod/zod-helpers.js.map +1 -0
- package/package.json +133 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
var _ApiLoader_instances, _a, _ApiLoader_app, _ApiLoader_sourceDirs, _ApiLoader_loadHttpResources, _ApiLoader_registerExpressHandler, _ApiLoader_assignRestrictedFields, _ApiLoader_createCorsOptions, _ApiLoader_applyCorsMiddleware, _ApiLoader_applyAuthMiddleware, _ApiLoader_applyBodyParserMiddleware, _ApiLoader_assignAdditionalDataValidator, _ApiLoader_applyStorePublishableKeyMiddleware;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ApiLoader = void 0;
|
|
19
|
+
const reporter_1 = __importDefault(require("@8medusa/cli/dist/reporter"));
|
|
20
|
+
const cors_1 = __importDefault(require("cors"));
|
|
21
|
+
const utils_1 = require("@8medusa/utils");
|
|
22
|
+
const routes_loader_1 = require("./routes-loader");
|
|
23
|
+
const routes_finder_1 = require("./routes-finder");
|
|
24
|
+
const routes_sorter_1 = require("./routes-sorter");
|
|
25
|
+
const wrap_handler_1 = require("./utils/wrap-handler");
|
|
26
|
+
const middlewares_1 = require("./middlewares");
|
|
27
|
+
const error_handler_1 = require("./middlewares/error-handler");
|
|
28
|
+
const restricted_fields_1 = require("./utils/restricted-fields");
|
|
29
|
+
const middleware_file_loader_1 = require("./middleware-file-loader");
|
|
30
|
+
const bodyparser_1 = require("./middlewares/bodyparser");
|
|
31
|
+
const ensure_publishable_api_key_1 = require("./middlewares/ensure-publishable-api-key");
|
|
32
|
+
const config_1 = require("../config");
|
|
33
|
+
class ApiLoader {
|
|
34
|
+
constructor({ app, sourceDir, baseRestrictedFields = [], }) {
|
|
35
|
+
_ApiLoader_instances.add(this);
|
|
36
|
+
/**
|
|
37
|
+
* An express instance
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
_ApiLoader_app.set(this, void 0);
|
|
41
|
+
/**
|
|
42
|
+
* Path from where to load the routes from
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
_ApiLoader_sourceDirs.set(this, void 0);
|
|
46
|
+
__classPrivateFieldSet(this, _ApiLoader_app, app, "f");
|
|
47
|
+
__classPrivateFieldSet(this, _ApiLoader_sourceDirs, Array.isArray(sourceDir) ? sourceDir : [sourceDir], "f");
|
|
48
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_assignRestrictedFields).call(this, baseRestrictedFields ?? []);
|
|
49
|
+
}
|
|
50
|
+
async load() {
|
|
51
|
+
const { errorHandler: sourceErrorHandler, middlewares, routes, routesFinder, bodyParserConfigRoutes, additionalDataValidatorRoutes, } = await __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_loadHttpResources).call(this);
|
|
52
|
+
/**
|
|
53
|
+
* Parse request body on all the requests and use the routes finder
|
|
54
|
+
* to pick the best matching config for the given route.
|
|
55
|
+
*/
|
|
56
|
+
const bodyParserRoutesFinder = new routes_finder_1.RoutesFinder(new routes_sorter_1.RoutesSorter(bodyParserConfigRoutes).sort([
|
|
57
|
+
"static",
|
|
58
|
+
"params",
|
|
59
|
+
"regex",
|
|
60
|
+
"wildcard",
|
|
61
|
+
"global",
|
|
62
|
+
]));
|
|
63
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyBodyParserMiddleware).call(this, "/", bodyParserRoutesFinder);
|
|
64
|
+
/**
|
|
65
|
+
* Use the routes finder to pick the additional data validator
|
|
66
|
+
* to be applied on the current request
|
|
67
|
+
*/
|
|
68
|
+
if (additionalDataValidatorRoutes.length) {
|
|
69
|
+
const additionalDataValidatorRoutesFinder = new routes_finder_1.RoutesFinder(new routes_sorter_1.RoutesSorter(additionalDataValidatorRoutes).sort([
|
|
70
|
+
"static",
|
|
71
|
+
"params",
|
|
72
|
+
"regex",
|
|
73
|
+
"wildcard",
|
|
74
|
+
"global",
|
|
75
|
+
]));
|
|
76
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_assignAdditionalDataValidator).call(this, "/", additionalDataValidatorRoutesFinder);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* CORS and Auth setup for admin routes
|
|
80
|
+
*/
|
|
81
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyCorsMiddleware).call(this, routesFinder, "/admin", "shouldAppendAdminCors", __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_createCorsOptions).call(this, config_1.configManager.config.projectConfig.http.adminCors));
|
|
82
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyAuthMiddleware).call(this, routesFinder, "/admin", "user", [
|
|
83
|
+
"bearer",
|
|
84
|
+
"session",
|
|
85
|
+
"api-key",
|
|
86
|
+
]);
|
|
87
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyCorsMiddleware).call(this, routesFinder, "/store", "shouldAppendStoreCors", __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_createCorsOptions).call(this, config_1.configManager.config.projectConfig.http.storeCors));
|
|
88
|
+
/**
|
|
89
|
+
* Publishable key check, CORS and auth setup for store routes.
|
|
90
|
+
*/
|
|
91
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyStorePublishableKeyMiddleware).call(this, "/store");
|
|
92
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyAuthMiddleware).call(this, routesFinder, "/store", "customer", ["bearer", "session"], {
|
|
93
|
+
allowUnauthenticated: true,
|
|
94
|
+
});
|
|
95
|
+
/**
|
|
96
|
+
* Apply CORS middleware for "/auth" routes
|
|
97
|
+
*/
|
|
98
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyCorsMiddleware).call(this, routesFinder, "/auth", "shouldAppendAuthCors", __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_createCorsOptions).call(this, config_1.configManager.config.projectConfig.http.authCors));
|
|
99
|
+
const collectionToSort = []
|
|
100
|
+
.concat(middlewares)
|
|
101
|
+
.concat(routes);
|
|
102
|
+
const sortedRoutes = new routes_sorter_1.RoutesSorter(collectionToSort).sort();
|
|
103
|
+
sortedRoutes.forEach((route) => {
|
|
104
|
+
if ("isRoute" in route) {
|
|
105
|
+
routesFinder.add(route);
|
|
106
|
+
}
|
|
107
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_registerExpressHandler).call(this, route);
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Registering error handler as the final handler
|
|
111
|
+
*/
|
|
112
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(sourceErrorHandler ?? (0, error_handler_1.errorHandler)());
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.ApiLoader = ApiLoader;
|
|
116
|
+
_a = ApiLoader, _ApiLoader_app = new WeakMap(), _ApiLoader_sourceDirs = new WeakMap(), _ApiLoader_instances = new WeakSet(), _ApiLoader_loadHttpResources =
|
|
117
|
+
/**
|
|
118
|
+
* Loads routes, middleware, bodyParserConfig routes, routes that have
|
|
119
|
+
* opted out for Auth and CORS and the error handler.
|
|
120
|
+
*/
|
|
121
|
+
async function _ApiLoader_loadHttpResources() {
|
|
122
|
+
const routesLoader = new routes_loader_1.RoutesLoader();
|
|
123
|
+
const middlewareLoader = new middleware_file_loader_1.MiddlewareFileLoader();
|
|
124
|
+
for (let dir of __classPrivateFieldGet(this, _ApiLoader_sourceDirs, "f")) {
|
|
125
|
+
await routesLoader.scanDir(dir);
|
|
126
|
+
await middlewareLoader.scanDir(dir);
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
routes: routesLoader.getRoutes(),
|
|
130
|
+
routesFinder: new routes_finder_1.RoutesFinder(),
|
|
131
|
+
middlewares: middlewareLoader.getMiddlewares(),
|
|
132
|
+
errorHandler: middlewareLoader.getErrorHandler(),
|
|
133
|
+
bodyParserConfigRoutes: middlewareLoader.getBodyParserConfigRoutes(),
|
|
134
|
+
additionalDataValidatorRoutes: middlewareLoader.getAdditionalDataValidatorRoutes(),
|
|
135
|
+
};
|
|
136
|
+
}, _ApiLoader_registerExpressHandler = function _ApiLoader_registerExpressHandler(route) {
|
|
137
|
+
if ("isRoute" in route) {
|
|
138
|
+
reporter_1.default.debug(`registering route ${route.method} ${route.matcher}`);
|
|
139
|
+
const handler = _a.traceRoute
|
|
140
|
+
? _a.traceRoute(route.handler, {
|
|
141
|
+
route: route.matcher,
|
|
142
|
+
method: route.method,
|
|
143
|
+
})
|
|
144
|
+
: route.handler;
|
|
145
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f")[route.method.toLowerCase()](route.matcher, (0, wrap_handler_1.wrapHandler)(handler));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (!route.methods) {
|
|
149
|
+
reporter_1.default.debug(`registering global middleware for ${route.matcher}`);
|
|
150
|
+
const handler = _a.traceMiddleware
|
|
151
|
+
? _a.traceMiddleware(route.handler, {
|
|
152
|
+
route: route.matcher,
|
|
153
|
+
})
|
|
154
|
+
: route.handler;
|
|
155
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(route.matcher, (0, wrap_handler_1.wrapHandler)(handler));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const methods = Array.isArray(route.methods)
|
|
159
|
+
? route.methods
|
|
160
|
+
: [route.methods];
|
|
161
|
+
methods.forEach((method) => {
|
|
162
|
+
reporter_1.default.debug(`registering route middleware ${method} ${route.matcher}`);
|
|
163
|
+
const handler = _a.traceMiddleware
|
|
164
|
+
? _a.traceMiddleware((0, wrap_handler_1.wrapHandler)(route.handler), {
|
|
165
|
+
route: route.matcher,
|
|
166
|
+
method: method,
|
|
167
|
+
})
|
|
168
|
+
: (0, wrap_handler_1.wrapHandler)(route.handler);
|
|
169
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f")[method.toLowerCase()](route.matcher, handler);
|
|
170
|
+
});
|
|
171
|
+
}, _ApiLoader_assignRestrictedFields = function _ApiLoader_assignRestrictedFields(baseRestrictedFields) {
|
|
172
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use("/store", ((req, _, next) => {
|
|
173
|
+
req.restrictedFields = new restricted_fields_1.RestrictedFields();
|
|
174
|
+
req.restrictedFields.add(baseRestrictedFields);
|
|
175
|
+
next();
|
|
176
|
+
}));
|
|
177
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use("/admin", ((req, _, next) => {
|
|
178
|
+
req.restrictedFields = new restricted_fields_1.RestrictedFields();
|
|
179
|
+
next();
|
|
180
|
+
}));
|
|
181
|
+
}, _ApiLoader_createCorsOptions = function _ApiLoader_createCorsOptions(origin) {
|
|
182
|
+
return {
|
|
183
|
+
origin: (0, utils_1.parseCorsOrigins)(origin),
|
|
184
|
+
credentials: true,
|
|
185
|
+
preflightContinue: false,
|
|
186
|
+
};
|
|
187
|
+
}, _ApiLoader_applyCorsMiddleware = function _ApiLoader_applyCorsMiddleware(routesFinder, namespace, toggleKey, corsOptions) {
|
|
188
|
+
const corsFn = (0, cors_1.default)(corsOptions);
|
|
189
|
+
const corsMiddleware = function corsMiddleware(req, res, next) {
|
|
190
|
+
let method = req.method;
|
|
191
|
+
if (req.method === "OPTIONS") {
|
|
192
|
+
method = req.headers["access-control-request-method"] ?? req.method;
|
|
193
|
+
}
|
|
194
|
+
const path = `${namespace}${req.path}`;
|
|
195
|
+
const matchingRoute = routesFinder.find(path, method);
|
|
196
|
+
if (matchingRoute && matchingRoute[toggleKey] === true) {
|
|
197
|
+
return corsFn(req, res, next);
|
|
198
|
+
}
|
|
199
|
+
reporter_1.default.debug(`Skipping CORS middleware ${req.method} ${path}`);
|
|
200
|
+
return next();
|
|
201
|
+
};
|
|
202
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, _a.traceMiddleware
|
|
203
|
+
? _a.traceMiddleware(corsMiddleware, {
|
|
204
|
+
route: namespace,
|
|
205
|
+
})
|
|
206
|
+
: corsMiddleware);
|
|
207
|
+
}, _ApiLoader_applyAuthMiddleware = function _ApiLoader_applyAuthMiddleware(routesFinder, namespace, actorType, authType, options) {
|
|
208
|
+
reporter_1.default.debug(`Registering auth middleware for prefix ${namespace}`);
|
|
209
|
+
const originalFn = (0, middlewares_1.authenticate)(actorType, authType, options);
|
|
210
|
+
const authMiddleware = function authMiddleware(req, res, next) {
|
|
211
|
+
const path = `${namespace}${req.path}`;
|
|
212
|
+
const matchingRoute = routesFinder.find(path, req.method);
|
|
213
|
+
if (matchingRoute && matchingRoute.optedOutOfAuth) {
|
|
214
|
+
reporter_1.default.debug(`Skipping auth ${req.method} ${path}`);
|
|
215
|
+
return next();
|
|
216
|
+
}
|
|
217
|
+
reporter_1.default.debug(`Authenticating route ${req.method} ${path}`);
|
|
218
|
+
return originalFn(req, res, next);
|
|
219
|
+
};
|
|
220
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, _a.traceMiddleware
|
|
221
|
+
? _a.traceMiddleware(authMiddleware, {
|
|
222
|
+
route: namespace,
|
|
223
|
+
})
|
|
224
|
+
: authMiddleware);
|
|
225
|
+
}, _ApiLoader_applyBodyParserMiddleware = function _ApiLoader_applyBodyParserMiddleware(namespace, routesFinder) {
|
|
226
|
+
reporter_1.default.debug(`Registering bodyparser middleware for prefix ${namespace}`);
|
|
227
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, (0, bodyparser_1.createBodyParserMiddlewaresStack)(namespace, routesFinder, _a.traceMiddleware));
|
|
228
|
+
}, _ApiLoader_assignAdditionalDataValidator = function _ApiLoader_assignAdditionalDataValidator(namespace, routesFinder) {
|
|
229
|
+
reporter_1.default.debug(`Registering assignAdditionalDataValidator middleware for prefix ${namespace}`);
|
|
230
|
+
const additionalDataValidator = function additionalDataValidator(req, _, next) {
|
|
231
|
+
const matchingRoute = routesFinder.find(req.path, req.method);
|
|
232
|
+
if (matchingRoute && matchingRoute.validator) {
|
|
233
|
+
reporter_1.default.debug(`Using validator to validate additional data on ${req.method} ${req.path}`);
|
|
234
|
+
req.additionalDataValidator = matchingRoute.validator;
|
|
235
|
+
}
|
|
236
|
+
return next();
|
|
237
|
+
};
|
|
238
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, _a.traceMiddleware
|
|
239
|
+
? _a.traceMiddleware(additionalDataValidator, {
|
|
240
|
+
route: namespace,
|
|
241
|
+
})
|
|
242
|
+
: additionalDataValidator);
|
|
243
|
+
}, _ApiLoader_applyStorePublishableKeyMiddleware = function _ApiLoader_applyStorePublishableKeyMiddleware(namespace) {
|
|
244
|
+
reporter_1.default.debug(`Registering publishable key middleware for namespace ${namespace}`);
|
|
245
|
+
let middleware = _a.traceMiddleware
|
|
246
|
+
? _a.traceMiddleware(ensure_publishable_api_key_1.ensurePublishableApiKeyMiddleware, {
|
|
247
|
+
route: namespace,
|
|
248
|
+
})
|
|
249
|
+
: ensure_publishable_api_key_1.ensurePublishableApiKeyMiddleware;
|
|
250
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, middleware);
|
|
251
|
+
};
|
|
252
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MiddlewareVerb, RouteVerb } from "./types";
|
|
2
|
+
export declare class RoutesFinder<T extends {
|
|
3
|
+
matcher: string;
|
|
4
|
+
methods: MiddlewareVerb | MiddlewareVerb[];
|
|
5
|
+
} | {
|
|
6
|
+
matcher: string;
|
|
7
|
+
method: RouteVerb;
|
|
8
|
+
}> {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(routes?: T[]);
|
|
11
|
+
/**
|
|
12
|
+
* Register route for lookup
|
|
13
|
+
*/
|
|
14
|
+
add(route: T): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get the matching route for a given HTTP method and URL
|
|
17
|
+
*/
|
|
18
|
+
find(url: string, method: MiddlewareVerb): (T & {
|
|
19
|
+
matchRegex: RegExp;
|
|
20
|
+
}) | null | undefined;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=routes-finder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-finder.d.ts","sourceRoot":"","sources":["../../src/http/routes-finder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExD,qBAAa,YAAY,CACvB,CAAC,SACG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,GAAG,cAAc,EAAE,CAAA;CAAE,GAC/D;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE;;gBAqB9B,MAAM,CAAC,EAAE,CAAC,EAAE;IAMxB;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,CAAC;IAOZ;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;oBA/BtB,MAAM;;CAgDzB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
var _RoutesFinder_existingMatches, _RoutesFinder_routes;
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RoutesFinder = void 0;
|
|
13
|
+
const path_to_regexp_1 = __importDefault(require("path-to-regexp"));
|
|
14
|
+
class RoutesFinder {
|
|
15
|
+
constructor(routes) {
|
|
16
|
+
/**
|
|
17
|
+
* Cache of existing matches to avoid regex tests on every
|
|
18
|
+
* single HTTP request
|
|
19
|
+
*/
|
|
20
|
+
_RoutesFinder_existingMatches.set(this, new Map()
|
|
21
|
+
/**
|
|
22
|
+
* Collection of registered routes
|
|
23
|
+
*/
|
|
24
|
+
);
|
|
25
|
+
/**
|
|
26
|
+
* Collection of registered routes
|
|
27
|
+
*/
|
|
28
|
+
_RoutesFinder_routes.set(this, []);
|
|
29
|
+
if (routes) {
|
|
30
|
+
routes.forEach((route) => this.add(route));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Register route for lookup
|
|
35
|
+
*/
|
|
36
|
+
add(route) {
|
|
37
|
+
__classPrivateFieldGet(this, _RoutesFinder_routes, "f").push({
|
|
38
|
+
...route,
|
|
39
|
+
matchRegex: (0, path_to_regexp_1.default)(route.matcher),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the matching route for a given HTTP method and URL
|
|
44
|
+
*/
|
|
45
|
+
find(url, method) {
|
|
46
|
+
const key = `${method}:${url}`;
|
|
47
|
+
if (__classPrivateFieldGet(this, _RoutesFinder_existingMatches, "f").has(key)) {
|
|
48
|
+
return __classPrivateFieldGet(this, _RoutesFinder_existingMatches, "f").get(key);
|
|
49
|
+
}
|
|
50
|
+
const result = __classPrivateFieldGet(this, _RoutesFinder_routes, "f").find((route) => {
|
|
51
|
+
if ("methods" in route) {
|
|
52
|
+
return route.methods.includes(method) && route.matchRegex.test(url);
|
|
53
|
+
}
|
|
54
|
+
return route.method === method && route.matchRegex.test(url);
|
|
55
|
+
}) ?? null;
|
|
56
|
+
__classPrivateFieldGet(this, _RoutesFinder_existingMatches, "f").set(key, result);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.RoutesFinder = RoutesFinder;
|
|
61
|
+
_RoutesFinder_existingMatches = new WeakMap(), _RoutesFinder_routes = new WeakMap();
|
|
62
|
+
//# sourceMappingURL=routes-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-finder.js","sourceRoot":"","sources":["../../src/http/routes-finder.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAyC;AAGzC,MAAa,YAAY;IAwBvB,YAAY,MAAY;QAnBxB;;;WAGG;QACH,wCAMI,IAAI,GAAG,EAAE;QAEb;;WAEG;UAJU;QAEb;;WAEG;QACH,+BAEO,EAAE,EAAA;QAGP,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,KAAQ;QACV,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC;YAChB,GAAG,KAAK;YACR,UAAU,EAAE,IAAA,wBAAY,EAAC,KAAK,CAAC,OAAO,CAAC;SACxC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,GAAW,EAAE,MAAsB;QACtC,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,CAAA;QAC9B,IAAI,uBAAA,IAAI,qCAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,uBAAA,IAAI,qCAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC;QAED,MAAM,MAAM,GACV,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACrE,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC9D,CAAC,CAAC,IAAI,IAAI,CAAA;QAEZ,uBAAA,IAAI,qCAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA5DD,oCA4DC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type RouteDescriptor } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Exposes to API to register routes manually or by scanning the filesystem from a
|
|
4
|
+
* source directory.
|
|
5
|
+
*
|
|
6
|
+
* In case of duplicates routes, the route registered afterwards will override the
|
|
7
|
+
* one registered first.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RoutesLoader {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* Scans a given directory and loads all routes from it. You can access the loaded
|
|
13
|
+
* routes via "getRoutes" method
|
|
14
|
+
*/
|
|
15
|
+
scanDir(sourceDir: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Register a route
|
|
18
|
+
*/
|
|
19
|
+
registerRoute(route: RouteDescriptor): void;
|
|
20
|
+
/**
|
|
21
|
+
* Register one or more routes
|
|
22
|
+
*/
|
|
23
|
+
registerRoutes(routes: RouteDescriptor[]): void;
|
|
24
|
+
/**
|
|
25
|
+
* Returns an array of routes scanned by the routes loader or registered
|
|
26
|
+
* manually.
|
|
27
|
+
*/
|
|
28
|
+
getRoutes(): RouteDescriptor[];
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=routes-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-loader.d.ts","sourceRoot":"","sources":["../../src/http/routes-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,eAAe,EAAkB,MAAM,SAAS,CAAA;AAqC5E;;;;;;GAMG;AACH,qBAAa,YAAY;;IAyGvB;;;OAGG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM;IA0C/B;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,eAAe;IAMpC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE;IAIxC;;;OAGG;IACH,SAAS;CAaV"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var _RoutesLoader_instances, _RoutesLoader_routes, _RoutesLoader_createRoutePath, _RoutesLoader_getRoutesForFile;
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RoutesLoader = void 0;
|
|
10
|
+
const utils_1 = require("@8medusa/utils");
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
const logger_1 = require("../logger");
|
|
13
|
+
const types_1 = require("./types");
|
|
14
|
+
/**
|
|
15
|
+
* File name that is used to indicate that the file is a route file
|
|
16
|
+
*/
|
|
17
|
+
const ROUTE_NAME = "route";
|
|
18
|
+
/**
|
|
19
|
+
* Flag that developers can export from their route files to indicate
|
|
20
|
+
* whether or not the routes from this file should be authenticated.
|
|
21
|
+
*/
|
|
22
|
+
const AUTHTHENTICATION_FLAG = "AUTHENTICATE";
|
|
23
|
+
/**
|
|
24
|
+
* Flag that developers can export from their route files to indicate
|
|
25
|
+
* whether or not the routes from this file should implement CORS
|
|
26
|
+
* policy.
|
|
27
|
+
*/
|
|
28
|
+
const CORS_FLAG = "CORS";
|
|
29
|
+
/**
|
|
30
|
+
* The matcher to use to convert the dynamic params from the filesystem
|
|
31
|
+
* identifier to the express identifier.
|
|
32
|
+
*
|
|
33
|
+
* We capture all words under opening and closing brackets `[]` and mark
|
|
34
|
+
* it as a param via `:`.
|
|
35
|
+
*/
|
|
36
|
+
const PARAM_SEGMENT_MATCHER = /\[(\w+)\]/;
|
|
37
|
+
/**
|
|
38
|
+
* Regexes to use to identify if a route is prefixed
|
|
39
|
+
* with "/admin", "/store", or "/auth".
|
|
40
|
+
*/
|
|
41
|
+
const ADMIN_ROUTE_MATCH = /(\/admin$|\/admin\/)/;
|
|
42
|
+
const STORE_ROUTE_MATCH = /(\/store$|\/store\/)/;
|
|
43
|
+
const AUTH_ROUTE_MATCH = /(\/auth$|\/auth\/)/;
|
|
44
|
+
/**
|
|
45
|
+
* Exposes to API to register routes manually or by scanning the filesystem from a
|
|
46
|
+
* source directory.
|
|
47
|
+
*
|
|
48
|
+
* In case of duplicates routes, the route registered afterwards will override the
|
|
49
|
+
* one registered first.
|
|
50
|
+
*/
|
|
51
|
+
class RoutesLoader {
|
|
52
|
+
constructor() {
|
|
53
|
+
_RoutesLoader_instances.add(this);
|
|
54
|
+
/**
|
|
55
|
+
* Routes collected manually or by scanning directories
|
|
56
|
+
*/
|
|
57
|
+
_RoutesLoader_routes.set(this, {}
|
|
58
|
+
/**
|
|
59
|
+
* Creates the route path from its relative file path.
|
|
60
|
+
*/
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Scans a given directory and loads all routes from it. You can access the loaded
|
|
65
|
+
* routes via "getRoutes" method
|
|
66
|
+
*/
|
|
67
|
+
async scanDir(sourceDir) {
|
|
68
|
+
const entries = await (0, utils_1.readDirRecursive)(sourceDir, {
|
|
69
|
+
ignoreMissing: true,
|
|
70
|
+
});
|
|
71
|
+
await Promise.all(entries
|
|
72
|
+
.filter((entry) => {
|
|
73
|
+
if (entry.isDirectory()) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const { name, ext } = (0, path_1.parse)(entry.name);
|
|
77
|
+
if (name === ROUTE_NAME && [".js", ".ts"].includes(ext)) {
|
|
78
|
+
const routeFilePathSegment = (0, path_1.join)(entry.path, entry.name)
|
|
79
|
+
.replace(sourceDir, "")
|
|
80
|
+
.split(path_1.sep);
|
|
81
|
+
return !routeFilePathSegment.some((segment) => segment.startsWith("_"));
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
})
|
|
85
|
+
.map(async (entry) => {
|
|
86
|
+
const absolutePath = (0, path_1.join)(entry.path, entry.name);
|
|
87
|
+
const relativePath = absolutePath.replace(sourceDir, "");
|
|
88
|
+
const route = __classPrivateFieldGet(this, _RoutesLoader_instances, "m", _RoutesLoader_createRoutePath).call(this, relativePath);
|
|
89
|
+
const routes = await __classPrivateFieldGet(this, _RoutesLoader_instances, "m", _RoutesLoader_getRoutesForFile).call(this, route, absolutePath);
|
|
90
|
+
routes.forEach((routeConfig) => {
|
|
91
|
+
this.registerRoute({
|
|
92
|
+
absolutePath,
|
|
93
|
+
relativePath,
|
|
94
|
+
...routeConfig,
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Register a route
|
|
101
|
+
*/
|
|
102
|
+
registerRoute(route) {
|
|
103
|
+
__classPrivateFieldGet(this, _RoutesLoader_routes, "f")[route.matcher] = __classPrivateFieldGet(this, _RoutesLoader_routes, "f")[route.matcher] ?? {};
|
|
104
|
+
const trackedRoute = __classPrivateFieldGet(this, _RoutesLoader_routes, "f")[route.matcher];
|
|
105
|
+
trackedRoute[route.method] = route;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Register one or more routes
|
|
109
|
+
*/
|
|
110
|
+
registerRoutes(routes) {
|
|
111
|
+
routes.forEach((route) => this.registerRoute(route));
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Returns an array of routes scanned by the routes loader or registered
|
|
115
|
+
* manually.
|
|
116
|
+
*/
|
|
117
|
+
getRoutes() {
|
|
118
|
+
return Object.keys(__classPrivateFieldGet(this, _RoutesLoader_routes, "f")).reduce((result, routePattern) => {
|
|
119
|
+
const methodsRoutes = __classPrivateFieldGet(this, _RoutesLoader_routes, "f")[routePattern];
|
|
120
|
+
Object.keys(methodsRoutes).forEach((method) => {
|
|
121
|
+
const route = methodsRoutes[method];
|
|
122
|
+
result.push(route);
|
|
123
|
+
});
|
|
124
|
+
return result;
|
|
125
|
+
}, []);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.RoutesLoader = RoutesLoader;
|
|
129
|
+
_RoutesLoader_routes = new WeakMap(), _RoutesLoader_instances = new WeakSet(), _RoutesLoader_createRoutePath = function _RoutesLoader_createRoutePath(relativePath) {
|
|
130
|
+
const segments = relativePath.replace(/route(\.js|\.ts)$/, "").split(path_1.sep);
|
|
131
|
+
const params = {};
|
|
132
|
+
return `/${segments
|
|
133
|
+
.filter((segment) => !!segment)
|
|
134
|
+
.map((segment) => {
|
|
135
|
+
if (segment.startsWith("[")) {
|
|
136
|
+
segment = segment.replace(PARAM_SEGMENT_MATCHER, (_, group) => {
|
|
137
|
+
if (params[group]) {
|
|
138
|
+
logger_1.logger.debug(`Duplicate parameters found in route ${relativePath} (${group})`);
|
|
139
|
+
throw new Error(`Duplicate parameters found in route ${relativePath} (${group}). Make sure that all parameters are unique.`);
|
|
140
|
+
}
|
|
141
|
+
params[group] = true;
|
|
142
|
+
return `:${group}`;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return segment;
|
|
146
|
+
})
|
|
147
|
+
.join("/")}`;
|
|
148
|
+
}, _RoutesLoader_getRoutesForFile =
|
|
149
|
+
/**
|
|
150
|
+
* Returns the route config by exporting the route file and parsing
|
|
151
|
+
* its exports
|
|
152
|
+
*/
|
|
153
|
+
async function _RoutesLoader_getRoutesForFile(routePath, absolutePath) {
|
|
154
|
+
const routeExports = await (0, utils_1.dynamicImport)(absolutePath);
|
|
155
|
+
/**
|
|
156
|
+
* Find the route type based upon its prefix.
|
|
157
|
+
*/
|
|
158
|
+
const routeType = ADMIN_ROUTE_MATCH.test(routePath)
|
|
159
|
+
? "admin"
|
|
160
|
+
: STORE_ROUTE_MATCH.test(routePath)
|
|
161
|
+
? "store"
|
|
162
|
+
: AUTH_ROUTE_MATCH.test(routePath)
|
|
163
|
+
? "auth"
|
|
164
|
+
: undefined;
|
|
165
|
+
/**
|
|
166
|
+
* Check if the route file has decided to opt-out of authentication
|
|
167
|
+
*/
|
|
168
|
+
const shouldAuthenticate = AUTHTHENTICATION_FLAG in routeExports
|
|
169
|
+
? !!routeExports[AUTHTHENTICATION_FLAG]
|
|
170
|
+
: true;
|
|
171
|
+
/**
|
|
172
|
+
* Check if the route file has decided to opt-out of CORS
|
|
173
|
+
*/
|
|
174
|
+
const shouldApplyCors = CORS_FLAG in routeExports ? !!routeExports[CORS_FLAG] : true;
|
|
175
|
+
/**
|
|
176
|
+
* Loop over all the exports and collect functions that are exported
|
|
177
|
+
* with names after HTTP methods.
|
|
178
|
+
*/
|
|
179
|
+
return Object.keys(routeExports)
|
|
180
|
+
.filter((key) => {
|
|
181
|
+
if (typeof routeExports[key] !== "function") {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
if (!types_1.HTTP_METHODS.includes(key)) {
|
|
185
|
+
logger_1.logger.debug(`Skipping handler ${key} in ${absolutePath}. Invalid HTTP method: ${key}.`);
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
return true;
|
|
189
|
+
})
|
|
190
|
+
.map((key) => {
|
|
191
|
+
return {
|
|
192
|
+
isRoute: true,
|
|
193
|
+
matcher: routePath,
|
|
194
|
+
method: key,
|
|
195
|
+
handler: routeExports[key],
|
|
196
|
+
optedOutOfAuth: !shouldAuthenticate,
|
|
197
|
+
shouldAppendAdminCors: shouldApplyCors && routeType === "admin",
|
|
198
|
+
shouldAppendAuthCors: shouldApplyCors && routeType === "auth",
|
|
199
|
+
shouldAppendStoreCors: shouldApplyCors && routeType === "store",
|
|
200
|
+
};
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=routes-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-loader.js","sourceRoot":"","sources":["../../src/http/routes-loader.ts"],"names":[],"mappings":"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"}
|