@bool-ts/core 1.7.8 → 1.7.9
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/hooks/factory.d.ts +2 -0
- package/dist/hooks/factory.js +43 -2
- package/package.json +1 -1
- package/src/hooks/factory.ts +45 -2
package/dist/hooks/factory.d.ts
CHANGED
|
@@ -24,6 +24,8 @@ export type TBoolFactoryOptions = Required<{
|
|
|
24
24
|
static: Required<{
|
|
25
25
|
path: string;
|
|
26
26
|
}> & Partial<{}>;
|
|
27
|
+
allowOrigins: Array<string>;
|
|
28
|
+
allowMethods: Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS">;
|
|
27
29
|
}>;
|
|
28
30
|
export declare const responseConverter: (response: Response) => Response;
|
|
29
31
|
export declare const controllerCreator: (controllerConstructor: new (...args: any[]) => unknown, group: RouterGroup, injector: Injector, prefix?: string) => RouterGroup;
|
package/dist/hooks/factory.js
CHANGED
|
@@ -568,9 +568,11 @@ const fetcher = async (bun, bool) => {
|
|
|
568
568
|
export const BoolFactory = async (modules, options) => {
|
|
569
569
|
try {
|
|
570
570
|
const modulesConverted = !Array.isArray(modules) ? [modules] : modules;
|
|
571
|
-
const { allowLogsMethods, staticOption } = Object.freeze({
|
|
571
|
+
const { allowLogsMethods, staticOption, allowOrigins, allowMethods } = Object.freeze({
|
|
572
572
|
allowLogsMethods: options?.log?.methods,
|
|
573
|
-
staticOption: options.static
|
|
573
|
+
staticOption: options.static,
|
|
574
|
+
allowOrigins: options.allowOrigins,
|
|
575
|
+
allowMethods: options.allowMethods || ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]
|
|
574
576
|
});
|
|
575
577
|
const moduleResolutions = await Promise.all(modulesConverted.map((moduleConverted) => moduleResolution(moduleConverted, options)));
|
|
576
578
|
const availableModuleResolutions = moduleResolutions.filter((moduleResolution) => typeof moduleResolution !== "undefined");
|
|
@@ -586,7 +588,46 @@ export const BoolFactory = async (modules, options) => {
|
|
|
586
588
|
const start = performance.now();
|
|
587
589
|
const url = new URL(request.url);
|
|
588
590
|
const query = Qs.parse(url.searchParams.toString(), options.queryParser);
|
|
591
|
+
const origin = request.headers.get("origin");
|
|
589
592
|
try {
|
|
593
|
+
if (request.method.toUpperCase() === "OPTIONS") {
|
|
594
|
+
if (!origin) {
|
|
595
|
+
return !allowOrigins
|
|
596
|
+
? new Response(undefined, {
|
|
597
|
+
status: 204,
|
|
598
|
+
statusText: "No Content.",
|
|
599
|
+
headers: {
|
|
600
|
+
"Content-Type": "text/plain",
|
|
601
|
+
"Access-Control-Allow-Origin": "*",
|
|
602
|
+
"Access-Control-Allow-Credentials": "true",
|
|
603
|
+
"Access-Control-Allow-Headers": "*",
|
|
604
|
+
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
605
|
+
}
|
|
606
|
+
})
|
|
607
|
+
: new Response(undefined, {
|
|
608
|
+
status: 417,
|
|
609
|
+
statusText: "Origin Disallowed."
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
return allowOrigins && allowOrigins.includes(origin)
|
|
614
|
+
? new Response(undefined, {
|
|
615
|
+
status: 417,
|
|
616
|
+
statusText: "Origin Disallowed."
|
|
617
|
+
})
|
|
618
|
+
: new Response(undefined, {
|
|
619
|
+
status: 204,
|
|
620
|
+
statusText: "No Content.",
|
|
621
|
+
headers: {
|
|
622
|
+
"Content-Type": "text/plain",
|
|
623
|
+
"Access-Control-Allow-Origin": origin,
|
|
624
|
+
"Access-Control-Allow-Credentials": "true",
|
|
625
|
+
"Access-Control-Allow-Headers": "*",
|
|
626
|
+
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
}
|
|
590
631
|
if (staticOption) {
|
|
591
632
|
const file = Bun.file(`${staticOption.path}/${url.pathname}`);
|
|
592
633
|
const isFileExists = await file.exists();
|
package/package.json
CHANGED
package/src/hooks/factory.ts
CHANGED
|
@@ -56,6 +56,8 @@ export type TBoolFactoryOptions = Required<{
|
|
|
56
56
|
path: string;
|
|
57
57
|
}> &
|
|
58
58
|
Partial<{}>;
|
|
59
|
+
allowOrigins: Array<string>;
|
|
60
|
+
allowMethods: Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS">;
|
|
59
61
|
}>;
|
|
60
62
|
|
|
61
63
|
export const responseConverter = (response: Response) => {
|
|
@@ -920,9 +922,11 @@ export const BoolFactory = async (
|
|
|
920
922
|
) => {
|
|
921
923
|
try {
|
|
922
924
|
const modulesConverted = !Array.isArray(modules) ? [modules] : modules;
|
|
923
|
-
const { allowLogsMethods, staticOption } = Object.freeze({
|
|
925
|
+
const { allowLogsMethods, staticOption, allowOrigins, allowMethods } = Object.freeze({
|
|
924
926
|
allowLogsMethods: options?.log?.methods,
|
|
925
|
-
staticOption: options.static
|
|
927
|
+
staticOption: options.static,
|
|
928
|
+
allowOrigins: options.allowOrigins,
|
|
929
|
+
allowMethods: options.allowMethods || ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]
|
|
926
930
|
});
|
|
927
931
|
|
|
928
932
|
const moduleResolutions = await Promise.all(
|
|
@@ -947,8 +951,47 @@ export const BoolFactory = async (
|
|
|
947
951
|
const start = performance.now();
|
|
948
952
|
const url = new URL(request.url);
|
|
949
953
|
const query = Qs.parse(url.searchParams.toString(), options.queryParser);
|
|
954
|
+
const origin = request.headers.get("origin");
|
|
950
955
|
|
|
951
956
|
try {
|
|
957
|
+
if (request.method.toUpperCase() === "OPTIONS") {
|
|
958
|
+
if (!origin) {
|
|
959
|
+
return !allowOrigins
|
|
960
|
+
? new Response(undefined, {
|
|
961
|
+
status: 204,
|
|
962
|
+
statusText: "No Content.",
|
|
963
|
+
headers: {
|
|
964
|
+
"Content-Type": "text/plain",
|
|
965
|
+
"Access-Control-Allow-Origin": "*",
|
|
966
|
+
"Access-Control-Allow-Credentials": "true",
|
|
967
|
+
"Access-Control-Allow-Headers": "*",
|
|
968
|
+
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
969
|
+
}
|
|
970
|
+
})
|
|
971
|
+
: new Response(undefined, {
|
|
972
|
+
status: 417,
|
|
973
|
+
statusText: "Origin Disallowed."
|
|
974
|
+
});
|
|
975
|
+
} else {
|
|
976
|
+
return allowOrigins && allowOrigins.includes(origin)
|
|
977
|
+
? new Response(undefined, {
|
|
978
|
+
status: 417,
|
|
979
|
+
statusText: "Origin Disallowed."
|
|
980
|
+
})
|
|
981
|
+
: new Response(undefined, {
|
|
982
|
+
status: 204,
|
|
983
|
+
statusText: "No Content.",
|
|
984
|
+
headers: {
|
|
985
|
+
"Content-Type": "text/plain",
|
|
986
|
+
"Access-Control-Allow-Origin": origin,
|
|
987
|
+
"Access-Control-Allow-Credentials": "true",
|
|
988
|
+
"Access-Control-Allow-Headers": "*",
|
|
989
|
+
"Access-Control-Allow-Methods": allowMethods.join(", ")
|
|
990
|
+
}
|
|
991
|
+
});
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
|
|
952
995
|
if (staticOption) {
|
|
953
996
|
const file = Bun.file(`${staticOption.path}/${url.pathname}`);
|
|
954
997
|
const isFileExists = await file.exists();
|