@cargolift-cdi/lib-common 0.0.71 → 0.0.73
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 +265 -170
- package/dist/auth/api-client.decorator.d.ts +1 -0
- package/dist/auth/api-client.decorator.d.ts.map +1 -0
- package/dist/auth/auth.guard.d.ts +1 -0
- package/dist/auth/auth.guard.d.ts.map +1 -0
- package/dist/auth/auth.guard.js +16 -5
- package/dist/auth/auth.guard.js.map +1 -1
- package/dist/auth/auth.module.d.ts +1 -0
- package/dist/auth/auth.module.d.ts.map +1 -0
- package/dist/auth/jwt-verifier.service.d.ts +1 -0
- package/dist/auth/jwt-verifier.service.d.ts.map +1 -0
- package/dist/auth/jwt-verifier.service.js +6 -3
- package/dist/auth/jwt-verifier.service.js.map +1 -1
- package/dist/auth/roles.decorator.d.ts +1 -0
- package/dist/auth/roles.decorator.d.ts.map +1 -0
- package/dist/auth/token-jwt.decorator.d.ts +2 -1
- package/dist/auth/token-jwt.decorator.d.ts.map +1 -0
- package/dist/errors/base.error.d.ts +6 -5
- package/dist/errors/base.error.d.ts.map +1 -0
- package/dist/errors/base.error.js +5 -0
- package/dist/errors/base.error.js.map +1 -1
- package/dist/errors/errors.error.d.ts +1 -0
- package/dist/errors/errors.error.d.ts.map +1 -0
- package/dist/errors/errors.util.d.ts +1 -0
- package/dist/errors/errors.util.d.ts.map +1 -0
- package/dist/errors/invalid-payload-business.error.d.ts +2 -1
- package/dist/errors/invalid-payload-business.error.d.ts.map +1 -0
- package/dist/errors/invalid-payload-business.error.js +3 -1
- package/dist/errors/invalid-payload-business.error.js.map +1 -1
- package/dist/errors/not-found-business.error.d.ts +1 -0
- package/dist/errors/not-found-business.error.d.ts.map +1 -0
- package/dist/errors/payload-validation.error.d.ts +1 -0
- package/dist/errors/payload-validation.error.d.ts.map +1 -0
- package/dist/errors/payload-validation.error.js +3 -2
- package/dist/errors/payload-validation.error.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/logger/app-logger.module.d.ts +1 -0
- package/dist/logger/app-logger.module.d.ts.map +1 -0
- package/dist/logger/app-logger.token.d.ts +1 -0
- package/dist/logger/app-logger.token.d.ts.map +1 -0
- package/dist/logger/logger.async-context.d.ts +1 -0
- package/dist/logger/logger.async-context.d.ts.map +1 -0
- package/dist/logger/logger.module.d.ts +1 -0
- package/dist/logger/logger.module.d.ts.map +1 -0
- package/dist/logger/logger.service.d.ts +5 -1
- package/dist/logger/logger.service.d.ts.map +1 -0
- package/dist/logger/logger.service.js +58 -32
- package/dist/logger/logger.service.js.map +1 -1
- package/dist/nestjs/filters/http-exceptions.filter.d.ts +1 -0
- package/dist/nestjs/filters/http-exceptions.filter.d.ts.map +1 -0
- package/dist/nestjs/filters/http-exceptions.filter.js +2 -1
- package/dist/nestjs/filters/http-exceptions.filter.js.map +1 -1
- package/dist/nestjs/middleware/http-logger.middleware.d.ts +1 -0
- package/dist/nestjs/middleware/http-logger.middleware.d.ts.map +1 -0
- package/dist/nestjs/middleware/http-logger.middleware.js +8 -3
- package/dist/nestjs/middleware/http-logger.middleware.js.map +1 -1
- package/dist/util/payload.util.d.ts +2 -1
- package/dist/util/payload.util.d.ts.map +1 -0
- package/dist/util/payload.util.js +14 -14
- package/dist/util/payload.util.js.map +1 -1
- package/package.json +47 -41
- package/dist/__tests__/payload-util/payload-util.test.d.ts +0 -1
- package/dist/__tests__/payload-util/payload-util.test.js +0 -65
- package/dist/__tests__/payload-util/payload-util.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
export class PayloadUtil {
|
|
2
|
+
static sensitiveKeys = [
|
|
3
|
+
"authorization",
|
|
4
|
+
"proxy-authorization",
|
|
5
|
+
"cookie",
|
|
6
|
+
"set-cookie",
|
|
7
|
+
"x-api-key",
|
|
8
|
+
"secret",
|
|
9
|
+
"password",
|
|
10
|
+
"token",
|
|
11
|
+
"access_token",
|
|
12
|
+
"refresh_token",
|
|
13
|
+
"api_key",
|
|
14
|
+
];
|
|
2
15
|
static normalize(payload) {
|
|
3
16
|
if (payload === null || payload === undefined) {
|
|
4
17
|
return undefined;
|
|
@@ -50,24 +63,11 @@ export class PayloadUtil {
|
|
|
50
63
|
}
|
|
51
64
|
return sanitizeValue(payload);
|
|
52
65
|
}
|
|
53
|
-
static
|
|
66
|
+
static extract(rawPayload) {
|
|
54
67
|
const content = PayloadUtil.normalize(rawPayload);
|
|
55
68
|
const payload = content && typeof content === "object" && "payload" in content ? content.payload : content;
|
|
56
69
|
const envelope = content && typeof content === "object" && "payload" in content ? content.envelope : {};
|
|
57
70
|
return { envelope, payload };
|
|
58
71
|
}
|
|
59
72
|
}
|
|
60
|
-
PayloadUtil.sensitiveKeys = [
|
|
61
|
-
"authorization",
|
|
62
|
-
"proxy-authorization",
|
|
63
|
-
"cookie",
|
|
64
|
-
"set-cookie",
|
|
65
|
-
"x-api-key",
|
|
66
|
-
"secret",
|
|
67
|
-
"password",
|
|
68
|
-
"token",
|
|
69
|
-
"access_token",
|
|
70
|
-
"refresh_token",
|
|
71
|
-
"api_key",
|
|
72
|
-
];
|
|
73
73
|
//# sourceMappingURL=payload.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.util.js","sourceRoot":"","sources":["../../src/util/payload.util.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"payload.util.js","sourceRoot":"","sources":["../../src/util/payload.util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,41 +1,47 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@cargolift-cdi/lib-common",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "Utilitários comuns para projetos do middleware Cargolift",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
"license": "MIT",
|
|
19
|
-
"peerDependencies": {
|
|
20
|
-
"@nestjs/common": "^11.1.6"
|
|
21
|
-
},
|
|
22
|
-
"devDependencies": {
|
|
23
|
-
"@
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
},
|
|
28
|
-
"repository": {
|
|
29
|
-
"type": "git",
|
|
30
|
-
"url": "https://github.com/cargolift-cdi/lib-common.git"
|
|
31
|
-
},
|
|
32
|
-
"publishConfig": {
|
|
33
|
-
"registry": "https://registry.npmjs.org/"
|
|
34
|
-
},
|
|
35
|
-
"dependencies": {
|
|
36
|
-
"@nestjs/core": "^11.1.6",
|
|
37
|
-
"pino": "^9.11.0",
|
|
38
|
-
"pino-pretty": "^13.1.1",
|
|
39
|
-
"uuid": "^13.0.0"
|
|
40
|
-
}
|
|
41
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@cargolift-cdi/lib-common",
|
|
3
|
+
"version": "0.0.73",
|
|
4
|
+
"description": "Utilitários comuns para projetos do middleware Cargolift",
|
|
5
|
+
"author": "Cargolift CDI",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/**/*",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"type": "module",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"@nestjs/common": "^11.1.6"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^24.3.0",
|
|
24
|
+
"typescript": "^5.9.2",
|
|
25
|
+
"vitest": "^4.0.16",
|
|
26
|
+
"@cargolift-cdi/types": "0.1.167"
|
|
27
|
+
},
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/cargolift-cdi/lib-common.git"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"registry": "https://registry.npmjs.org/"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@nestjs/core": "^11.1.6",
|
|
37
|
+
"pino": "^9.11.0",
|
|
38
|
+
"pino-pretty": "^13.1.1",
|
|
39
|
+
"uuid": "^13.0.0"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"dev": "tsc -w -p tsconfig.json",
|
|
43
|
+
"build": "tsc -p tsconfig.json",
|
|
44
|
+
"test": "vitest run --reporter=dot",
|
|
45
|
+
"updatelibs": "npm update @cargolift-cdi/types"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { PayloadUtil } from "../../util/payload.util.js";
|
|
2
|
-
import { describe, test, expect } from "vitest";
|
|
3
|
-
describe("Payload Util", () => {
|
|
4
|
-
test("Valida sanitização", async () => {
|
|
5
|
-
const payload = `{
|
|
6
|
-
"agent": "agent",
|
|
7
|
-
"entity": "demo",
|
|
8
|
-
"action": "put",
|
|
9
|
-
"extraData": {
|
|
10
|
-
"demoField": "demoValue"
|
|
11
|
-
},
|
|
12
|
-
"correlation_id": "5e13be2b-6e50-4e40-a0c4-a7e6b1ba525c",
|
|
13
|
-
"routingKey": "integration.agent.demo.put",
|
|
14
|
-
"source": {
|
|
15
|
-
"ip": "10.18.15.51",
|
|
16
|
-
"user_agent": "PostmanRuntime/7.51.0",
|
|
17
|
-
"user_id": "23be1cf6-b401-4f3c-bc81-fa79e24abab7",
|
|
18
|
-
"user_name": "service-account-sistema_teste",
|
|
19
|
-
"application": "sistema_teste"
|
|
20
|
-
},
|
|
21
|
-
"timestamp": "2026-01-08T17:35:35.575Z",
|
|
22
|
-
"sourceHeaders": {
|
|
23
|
-
"content-type": "application/json",
|
|
24
|
-
"authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJDNzdYRGN3Y1BvZzdmQ044aHp5a2xJUndoT25RUEtmUUdfNm5GYUlOQ01NIn0.eyJleHAiOjE3Njc5MDgxMTksImlhdCI6MTc2Nzg5MzcxOSwianRpIjoiOWRhYzU0ZTUtNWI2MC00MDIxLWI0MjUtNDM3MmIyNDkyZjBjIiwiaXNzIjoiaHR0cDovLzEwLjEwMC4wLjE0NDo4MDgwL3JlYWxtcy9taWRkbGV3YXJlIiwiYXVkIjpbImFwaS51dGlsIiwiYXBpIl0sInN1YiI6IjIzYmUxY2Y2LWI0MDEtNGYzYy1iYzgxLWZhNzllMjRhYmFiNyIsInR5cCI6IkJlYXJlciIsImF6cCI6InNpc3RlbWFfdGVzdGUiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIi8qIl0sInJlc291cmNlX2FjY2VzcyI6eyJhcGkudXRpbCI6eyJyb2xlcyI6WyJlbWFpbDpzZW5kIl19LCJhcGkiOnsicm9sZXMiOlsiYXBpOmRlbW8iLCJhcGk6ZGlhZ25vc3RpY3MiXX19LCJzY29wZSI6InByb2ZpbGUiLCJjbGllbnRIb3N0IjoiMTAuMTguMTUuNTEiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzZXJ2aWNlLWFjY291bnQtc2lzdGVtYV90ZXN0ZSIsImNsaWVudEFkZHJlc3MiOiIxMC4xOC4xNS41MSIsImNsaWVudF9pZCI6InNpc3RlbWFfdGVzdGUifQ.aySmIvsfb6LztCUMFAy_jM5lby0px6_DKiLk0ND51j8073SstzAG7brOGImdcCCnq2ara3sqf75bz3yTTAc4kZWGA0nG9ZHMsaLv3eOk9Nf182rQnNxSR6nPG06nM77W_9e1_dvX4E9Mlu8FWGAV4eiuXDIQ_JrZsO7LgrKq3YSASvtE-Wz0fEKqssf0lA0sRpz6SmYgIBKxFI8N6FmpxRsy3I6JOk9EKm8hmp4A74ohskN9AZJhpBQb_euR3k4_KUayjUNoXDtXahoEWrR-3cKKRbOEMlqF9UPRayrYwZFn2nuQLav043SIGhijwNk20ud4v1HYqUI8_oTtOrd7EA",
|
|
25
|
-
"user-agent": "PostmanRuntime/7.51.0",
|
|
26
|
-
"accept": "*/*",
|
|
27
|
-
"postman-token": "b2dbb13f-bb9c-4a0d-9687-ebab4ba49337",
|
|
28
|
-
"host": "localhost:3002",
|
|
29
|
-
"accept-encoding": "gzip, deflate, br",
|
|
30
|
-
"connection": "keep-alive",
|
|
31
|
-
"content-length": "92"
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
`;
|
|
35
|
-
const res = PayloadUtil.sanitize(payload);
|
|
36
|
-
expect(typeof res).toBe("string");
|
|
37
|
-
const sanitized = JSON.parse(res);
|
|
38
|
-
expect(sanitized.sourceHeaders.authorization).toBe("[REDACTED]");
|
|
39
|
-
expect(sanitized.agent).toBe("agent");
|
|
40
|
-
expect(sanitized.sourceHeaders["content-type"]).toBe("application/json");
|
|
41
|
-
});
|
|
42
|
-
test("Valida extração de envelope", async () => {
|
|
43
|
-
const payloadWithEnvelope = {
|
|
44
|
-
envelope: {
|
|
45
|
-
method: "POST",
|
|
46
|
-
timestamp: "2026-01-08T17:35:35.575Z",
|
|
47
|
-
},
|
|
48
|
-
payload: {
|
|
49
|
-
data: "some data",
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
const { envelope, payload } = PayloadUtil.extractEnvelope(payloadWithEnvelope);
|
|
53
|
-
expect(envelope).toEqual(payloadWithEnvelope.envelope);
|
|
54
|
-
expect(payload).toEqual(payloadWithEnvelope.payload);
|
|
55
|
-
});
|
|
56
|
-
test("Valida extração de envelope sem envelope", async () => {
|
|
57
|
-
const payloadWithoutEnvelope = {
|
|
58
|
-
data: "some data",
|
|
59
|
-
};
|
|
60
|
-
const { envelope, payload } = PayloadUtil.extractEnvelope(payloadWithoutEnvelope);
|
|
61
|
-
expect(envelope).toEqual({});
|
|
62
|
-
expect(payload).toEqual(payloadWithoutEnvelope);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
//# sourceMappingURL=payload-util.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payload-util.test.js","sourceRoot":"","sources":["../../../src/__tests__/payload-util/payload-util.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BnB,CAAC;QAEE,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC;QAE5C,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,mBAAmB,GAAG;YAC1B,QAAQ,EAAE;gBACR,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,0BAA0B;aACtC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;aAClB;SACF,CAAC;QAEF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC/E,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,sBAAsB,GAAG;YAC7B,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;QAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|