@arkyn/server 1.3.134 → 1.3.138

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/index.d.ts CHANGED
@@ -5,7 +5,8 @@ export { NotFoundError } from "./httpBadResponses/notFound";
5
5
  export { ServerError } from "./httpBadResponses/serverError";
6
6
  export { UnauthorizedError } from "./httpBadResponses/unauthorized";
7
7
  export { UnprocessableEntityError } from "./httpBadResponses/unprocessableEntity";
8
- export { formParse } from "./helpers/formParse";
9
- export { getScopedParams } from "./helpers/getScopedParams";
10
8
  export { globalErrorHandler } from "./helpers/globalErrorHandler";
9
+ export { extractJsonFromRequest } from "./services/extractJsonFromRequest";
10
+ export { formParse } from "./services/formParse";
11
+ export { getScopedParams } from "./services/getScopedParams";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,8 @@ export { ServerError } from "./httpBadResponses/serverError";
7
7
  export { UnauthorizedError } from "./httpBadResponses/unauthorized";
8
8
  export { UnprocessableEntityError } from "./httpBadResponses/unprocessableEntity";
9
9
  // helpers
10
- export { formParse } from "./helpers/formParse";
11
- export { getScopedParams } from "./helpers/getScopedParams";
12
10
  export { globalErrorHandler } from "./helpers/globalErrorHandler";
11
+ // services
12
+ export { extractJsonFromRequest } from "./services/extractJsonFromRequest";
13
+ export { formParse } from "./services/formParse";
14
+ export { getScopedParams } from "./services/getScopedParams";
@@ -0,0 +1,3 @@
1
+ declare function extractJsonFromRequest(req: Request): Promise<any>;
2
+ export { extractJsonFromRequest };
3
+ //# sourceMappingURL=extractJsonFromRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractJsonFromRequest.d.ts","sourceRoot":"","sources":["../../src/services/extractJsonFromRequest.ts"],"names":[],"mappings":"AAAA,iBAAe,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CA2BhE;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,29 @@
1
+ async function extractJsonFromRequest(req) {
2
+ let data;
3
+ try {
4
+ const arrayBuffer = await req.arrayBuffer();
5
+ const text = new TextDecoder().decode(arrayBuffer);
6
+ try {
7
+ data = JSON.parse(text);
8
+ }
9
+ catch (jsonError) {
10
+ try {
11
+ const formData = new URLSearchParams(text);
12
+ data = Object.fromEntries(formData.entries());
13
+ }
14
+ catch (formDataError) {
15
+ console.error("Failed to extract data from request:", {
16
+ jsonError,
17
+ formDataError,
18
+ });
19
+ data = {};
20
+ }
21
+ }
22
+ }
23
+ catch (error) {
24
+ console.error("Failed to read request body:", error);
25
+ data = {};
26
+ }
27
+ return data;
28
+ }
29
+ export { extractJsonFromRequest };
@@ -0,0 +1,3 @@
1
+ import type { FormParseProps, FormParseReturnType } from "@arkyn/types";
2
+ export declare function formParse<T extends FormParseProps>([formData, schema,]: T): FormParseReturnType<T>;
3
+ //# sourceMappingURL=formParse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formParse.d.ts","sourceRoot":"","sources":["../../src/services/formParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExE,wBAAgB,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,CAClD,QAAQ,EACR,MAAM,EACP,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAoB5B"}
@@ -0,0 +1,15 @@
1
+ export function formParse([formData, schema,]) {
2
+ const zodResponse = schema.safeParse(formData);
3
+ if (zodResponse.success === false) {
4
+ const errorsArray = Object.entries(zodResponse.error.formErrors.fieldErrors);
5
+ const errorsObject = Object.fromEntries(errorsArray.map((item) => [item[0], item[1]?.[0] || "Error"]));
6
+ return {
7
+ success: zodResponse.success,
8
+ fieldErrors: errorsObject,
9
+ fields: formData,
10
+ };
11
+ }
12
+ else {
13
+ return { success: zodResponse.success, data: zodResponse.data };
14
+ }
15
+ }
@@ -0,0 +1,3 @@
1
+ declare function getScopedParams(request: Request, scope?: string): import("url").URLSearchParams;
2
+ export { getScopedParams };
3
+ //# sourceMappingURL=getScopedParams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getScopedParams.d.ts","sourceRoot":"","sources":["../../src/services/getScopedParams.ts"],"names":[],"mappings":"AAAA,iBAAS,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,GAAE,MAAW,iCAW5D;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ function getScopedParams(request, scope = "") {
2
+ const url = new URL(request.url);
3
+ if (scope === "")
4
+ return url.searchParams;
5
+ const scopedSearchParams = Array.from(url.searchParams.entries())
6
+ .filter(([key]) => key.startsWith(`${scope}:`))
7
+ .map(([key, value]) => [key.replace(`${scope}:`, ""), value]);
8
+ return new URLSearchParams(scopedSearchParams);
9
+ }
10
+ export { getScopedParams };
@@ -0,0 +1,3 @@
1
+ declare function maskSensitiveData(jsonString: string, sensitiveKeys?: string[]): string;
2
+ export { maskSensitiveData };
3
+ //# sourceMappingURL=maskSensitiveData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maskSensitiveData.d.ts","sourceRoot":"","sources":["../../src/services/maskSensitiveData.ts"],"names":[],"mappings":"AAAA,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,EAClB,aAAa,WAAgD,GAC5D,MAAM,CAkCR;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ function maskSensitiveData(jsonString, sensitiveKeys = ["password", "confirmPassword", "creditCard"]) {
2
+ function maskValue(key, value) {
3
+ if (sensitiveKeys.includes(key))
4
+ return "****";
5
+ return value;
6
+ }
7
+ function recursiveMask(obj) {
8
+ if (Array.isArray(obj)) {
9
+ return obj.map((item) => recursiveMask(item));
10
+ }
11
+ else if (obj !== null && typeof obj === "object") {
12
+ return Object.keys(obj).reduce((acc, key) => {
13
+ let value = obj[key];
14
+ if (typeof value === "string") {
15
+ try {
16
+ const parsedValue = JSON.parse(value);
17
+ if (typeof parsedValue === "object") {
18
+ value = JSON.stringify(recursiveMask(parsedValue));
19
+ }
20
+ }
21
+ catch (e) { }
22
+ }
23
+ acc[key] = recursiveMask(maskValue(key, value));
24
+ return acc;
25
+ }, {});
26
+ }
27
+ return obj;
28
+ }
29
+ try {
30
+ const jsonObject = JSON.parse(jsonString);
31
+ const maskedObject = recursiveMask(jsonObject);
32
+ return JSON.stringify(maskedObject);
33
+ }
34
+ catch (error) {
35
+ return jsonString;
36
+ }
37
+ }
38
+ export { maskSensitiveData };
@@ -0,0 +1,3 @@
1
+ declare function truncateLargeFields(jsonString: string, maxLength?: number): string;
2
+ export { truncateLargeFields };
3
+ //# sourceMappingURL=truncateLargeFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncateLargeFields.d.ts","sourceRoot":"","sources":["../../src/services/truncateLargeFields.ts"],"names":[],"mappings":"AAAA,iBAAS,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,MAAM,CA6BzE;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,29 @@
1
+ function truncateLargeFields(jsonString, maxLength = 1000) {
2
+ function truncateValue(key, value) {
3
+ if (typeof value === "string" && value.length > maxLength) {
4
+ return `To large information: field as ${value.length} characters`;
5
+ }
6
+ return value;
7
+ }
8
+ function recursiveTruncate(obj) {
9
+ if (Array.isArray(obj)) {
10
+ return obj.map(recursiveTruncate);
11
+ }
12
+ else if (obj !== null && typeof obj === "object") {
13
+ return Object.fromEntries(Object.entries(obj).map(([key, value]) => [
14
+ key,
15
+ truncateValue(key, recursiveTruncate(value)),
16
+ ]));
17
+ }
18
+ return obj;
19
+ }
20
+ try {
21
+ const parsedJson = JSON.parse(jsonString);
22
+ const truncatedJson = recursiveTruncate(parsedJson);
23
+ return JSON.stringify(truncatedJson);
24
+ }
25
+ catch (error) {
26
+ throw new Error("Invalid JSON string");
27
+ }
28
+ }
29
+ export { truncateLargeFields };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkyn/server",
3
- "version": "1.3.134",
3
+ "version": "1.3.138",
4
4
  "main": "./dist/bundle.js",
5
5
  "module": "./src/index.ts",
6
6
  "type": "module",
package/src/index.ts CHANGED
@@ -8,6 +8,9 @@ export { UnauthorizedError } from "./httpBadResponses/unauthorized";
8
8
  export { UnprocessableEntityError } from "./httpBadResponses/unprocessableEntity";
9
9
 
10
10
  // helpers
11
- export { formParse } from "./helpers/formParse";
12
- export { getScopedParams } from "./helpers/getScopedParams";
13
11
  export { globalErrorHandler } from "./helpers/globalErrorHandler";
12
+
13
+ // services
14
+ export { extractJsonFromRequest } from "./services/extractJsonFromRequest";
15
+ export { formParse } from "./services/formParse";
16
+ export { getScopedParams } from "./services/getScopedParams";
@@ -0,0 +1,30 @@
1
+ async function extractJsonFromRequest(req: Request): Promise<any> {
2
+ let data: any;
3
+
4
+ try {
5
+ const arrayBuffer = await req.arrayBuffer();
6
+ const text = new TextDecoder().decode(arrayBuffer);
7
+
8
+ try {
9
+ data = JSON.parse(text);
10
+ } catch (jsonError) {
11
+ try {
12
+ const formData = new URLSearchParams(text);
13
+ data = Object.fromEntries(formData.entries());
14
+ } catch (formDataError) {
15
+ console.error("Failed to extract data from request:", {
16
+ jsonError,
17
+ formDataError,
18
+ });
19
+ data = {};
20
+ }
21
+ }
22
+ } catch (error) {
23
+ console.error("Failed to read request body:", error);
24
+ data = {};
25
+ }
26
+
27
+ return data;
28
+ }
29
+
30
+ export { extractJsonFromRequest };
File without changes
File without changes