@cryptexlabs/codex-nodejs-common 0.7.2 → 0.7.4

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/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptexlabs/codex-nodejs-common",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "Common code for Assistant applications",
5
5
  "main": "lib/src/index.js",
6
6
  "repository": "git@gitlab.com:cryptexlabs/public/codex-nodejs-common.git",
@@ -12,12 +12,12 @@
12
12
  "Josh Woodcock <josh.woodcock@cryptexlabs.com>"
13
13
  ],
14
14
  "peerDependencies": {
15
- "@cryptexlabs/codex-data-model": "0.1.5"
15
+ "@cryptexlabs/codex-data-model": "0.1.6",
16
+ "@nestjs/common": "8.0.6",
17
+ "@nestjs/core": "8.0.6"
16
18
  },
17
19
  "dependencies": {
18
20
  "@elastic/elasticsearch": "8.2.1",
19
- "@nestjs/common": "8.0.6",
20
- "@nestjs/core": "8.0.6",
21
21
  "@nestjs/elasticsearch": "8.1.0",
22
22
  "@nestjs/platform-socket.io": "8.0.6",
23
23
  "@nestjs/platform-ws": "8.0.6",
@@ -1,6 +1,6 @@
1
1
  /// <reference types="i18n" />
2
2
  import { LoggerService } from "@nestjs/common";
3
- import { ClientInterface, LocaleInterface, MessageContextInterface, MessageMetaInterface } from "@cryptexlabs/codex-data-model";
3
+ import { ApiMetaHeadersInterface, ClientInterface, LocaleInterface, MessageContextInterface, MessageMetaInterface } from "@cryptexlabs/codex-data-model";
4
4
  import { DefaultConfig } from "../config";
5
5
  import { Context } from "./context";
6
6
  export declare class ContextBuilder {
@@ -15,8 +15,8 @@ export declare class ContextBuilder {
15
15
  constructor(logger: LoggerService, config: DefaultConfig, client: ClientInterface, messageContext: MessageContextInterface, i18nApi?: i18nAPI);
16
16
  build(): ContextBuilder;
17
17
  setI18nApi(i18nApi: i18nAPI): this;
18
- setMetaFromHeaders(headers: Record<string, string>): this;
19
- setMetaFromHeadersForNewMessage(headers: Record<string, string>): this;
18
+ setMetaFromHeaders(headers: ApiMetaHeadersInterface): this;
19
+ setMetaFromHeadersForNewMessage(headers: ApiMetaHeadersInterface): this;
20
20
  setMeta(meta: MessageMetaInterface): this;
21
21
  setCorrelationId(correlationId: string): ContextBuilder;
22
22
  setLocale(locale: LocaleInterface): this;
@@ -1 +1 @@
1
- {"version":3,"file":"context.builder.js","sourceRoot":"","sources":["../../../src/context/context.builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.builder.js","sourceRoot":"","sources":["../../../src/context/context.builder.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,6 @@ import { Context } from "../context";
3
3
  export declare class FriendlyHttpException extends HttpException {
4
4
  readonly context: Context;
5
5
  readonly userMessage: string;
6
- constructor(response: string | Record<string, any>, context: Context, userMessage: string, status: HttpStatus);
6
+ readonly stack: string;
7
+ constructor(response: string | Record<string, any>, context: Context, userMessage: string, status: HttpStatus, stack: string);
7
8
  }
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FriendlyHttpException = void 0;
4
4
  const common_1 = require("@nestjs/common");
5
5
  class FriendlyHttpException extends common_1.HttpException {
6
- constructor(response, context, userMessage, status) {
6
+ constructor(response, context, userMessage, status, stack) {
7
7
  super(response, status);
8
8
  this.context = context;
9
9
  this.userMessage = userMessage;
10
+ this.stack = stack;
10
11
  }
11
12
  }
12
13
  exports.FriendlyHttpException = FriendlyHttpException;
@@ -1 +1 @@
1
- {"version":3,"file":"friendly-http-exception.js","sourceRoot":"","sources":["../../../src/exception/friendly-http-exception.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAG3D,MAAa,qBAAsB,SAAQ,sBAAa;IACtD,YACE,QAAsC,EACtB,OAAgB,EAChB,WAAmB,EACnC,MAAkB;QAElB,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAJR,YAAO,GAAP,OAAO,CAAS;QAChB,gBAAW,GAAX,WAAW,CAAQ;IAIrC,CAAC;CACF;AATD,sDASC"}
1
+ {"version":3,"file":"friendly-http-exception.js","sourceRoot":"","sources":["../../../src/exception/friendly-http-exception.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAG3D,MAAa,qBAAsB,SAAQ,sBAAa;IACtD,YACE,QAAsC,EACtB,OAAgB,EAChB,WAAmB,EACnC,MAAkB,EAEF,KAAa;QAE7B,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QANR,YAAO,GAAP,OAAO,CAAS;QAChB,gBAAW,GAAX,WAAW,CAAQ;QAGnB,UAAK,GAAL,KAAK,CAAQ;IAG/B,CAAC;CACF;AAXD,sDAWC"}
@@ -32,15 +32,30 @@ let AppHttpExceptionFilter = class AppHttpExceptionFilter extends core_1.BaseExc
32
32
  const logger = exception instanceof exception_1.FriendlyHttpException
33
33
  ? exception.context.logger
34
34
  : this.fallbackLogger;
35
- logger.error({
36
- request: {
37
- headers: request.headers,
38
- body: request.body,
39
- url: request.url,
40
- method: request.method,
41
- },
42
- exception,
43
- });
35
+ let developerText = this.getDeveloperText(exception, this.fallbackLocale);
36
+ const stack = exception.stack && typeof exception.stack === "string"
37
+ ? exception.stack.split("\n").map((line) => line.trim())
38
+ : "No stack available. Very sad";
39
+ if (developerText) {
40
+ logger.error(developerText, {
41
+ request: {
42
+ headers: request.headers,
43
+ body: request.body,
44
+ url: request.url,
45
+ method: request.method,
46
+ stack,
47
+ },
48
+ });
49
+ }
50
+ else {
51
+ logger.error([
52
+ "Error not explained",
53
+ "This probably means someone wrote code that throws an error without an error message",
54
+ "This should never happen!",
55
+ ].join(". "), {
56
+ stack,
57
+ });
58
+ }
44
59
  if (!(exception instanceof common_1.HttpException) && exception.stack) {
45
60
  logger.error(exception.stack);
46
61
  }
@@ -57,8 +72,8 @@ let AppHttpExceptionFilter = class AppHttpExceptionFilter extends core_1.BaseExc
57
72
  const started = exception instanceof exception_1.FriendlyHttpException
58
73
  ? exception.context.started
59
74
  : undefined;
60
- const developerText = this.getDeveloperText(exception, locale);
61
- const userMessage = exception instanceof exception_1.FriendlyHttpException ? exception.userMessage : "";
75
+ developerText = this.getDeveloperText(exception, locale);
76
+ const userMessage = exception.userMessage ? exception.userMessage : "";
62
77
  const errorHttpResponse = new response_1.ErrorHttpResponse(status, locale, new response_1.ErrorMessage(locale, locales_1.i18nData, null, null, developerText, userMessage), exception.stack || null, this.config, correlationId, started);
63
78
  response.status(status).json(errorHttpResponse);
64
79
  }
@@ -80,6 +95,9 @@ let AppHttpExceptionFilter = class AppHttpExceptionFilter extends core_1.BaseExc
80
95
  else if (exception.message.message) {
81
96
  developerText = exception.message.message;
82
97
  }
98
+ else if (exception.getResponse) {
99
+ developerText = exception.getResponse();
100
+ }
83
101
  else {
84
102
  developerText = exception.message;
85
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-http-exception-filter.js","sourceRoot":"","sources":["../../../src/filter/app-http-exception-filter.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAQwB;AACxB,uCAAmD;AAEnD,0CAA8D;AAC9D,4CAAqD;AACrD,oEAAuD;AACvD,gDAA8C;AAC9C,0CAA8C;AAC9C,sCAA0C;AAI1C,IAAa,sBAAsB,GAAnC,MAAa,sBAAuB,SAAQ,0BAAmB;IAC7D,YACmB,cAAsB,EACtB,cAA6B,EAC7B,MAAqB,EACtC,cAA2B;QAE3B,KAAK,CAAC,cAAc,CAAC,CAAC;QALL,mBAAc,GAAd,cAAc,CAAQ;QACtB,mBAAc,GAAd,cAAc,CAAe;QAC7B,WAAM,GAAN,MAAM,CAAe;IAIxC,CAAC;IAED,KAAK,CAAC,SAAc,EAAE,IAAmB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAEnC,MAAM,MAAM,GACV,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;YAC1B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QAE1B,MAAM,CAAC,KAAK,CAAC;YACX,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB;YACD,SAAS;SACV,CAAC,CAAC;QAGH,IAAI,CAAC,CAAC,SAAS,YAAY,sBAAa,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE;YAC5D,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,MAAM,GACV,SAAS,CAAC,SAAS,KAAK,SAAS;YACjC,OAAO,SAAS,CAAC,SAAS,KAAK,UAAU;YACvC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE;YACvB,CAAC,CAAC,mBAAU,CAAC,qBAAqB,CAAC;QAEvC,MAAM,MAAM,GACV,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;YAC1B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QAE1B,MAAM,aAAa,GACjB,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa;YACjC,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,OAAO,GACX,SAAS,YAAY,iCAAqB;YACxC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO;YAC3B,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE/D,MAAM,WAAW,GACf,SAAS,YAAY,iCAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1E,MAAM,iBAAiB,GAAG,IAAI,4BAAiB,CAC7C,MAAM,EACN,MAAM,EACN,IAAI,uBAAY,CACd,MAAM,EACN,kBAAQ,EACR,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,WAAW,CACZ,EACD,SAAS,CAAC,KAAK,IAAI,IAAI,EACvB,IAAI,CAAC,MAAM,EACX,aAAa,EACb,OAAO,CACR,CAAC;QAEF,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC;IAED,gBAAgB,CAAC,SAAc,EAAE,MAAW;QAC1C,IAAI,aAAa,GAAW,kBAAQ,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,kBAAW,CAAC,aAAa;YACjC,MAAM,EAAE,MAAM,CAAC,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,SAAS,EAAE;YACb,IAAI,SAAS,CAAC,SAAS,EAAE;gBACvB,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;oBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;wBAC7C,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACxD;yBAAM;wBACL,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;qBAC5C;iBACF;qBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE;oBACpC,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;iBAC3C;qBAAM;oBACL,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC;iBACnC;aACF;SACF;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;CACF,CAAA;AAvGY,sBAAsB;IAFlC,cAAK,EAAE;IACP,mBAAU,EAAE;qCAGwB,yBAAM,UAEd,sBAAa;GAJ7B,sBAAsB,CAuGlC;AAvGY,wDAAsB"}
1
+ {"version":3,"file":"app-http-exception-filter.js","sourceRoot":"","sources":["../../../src/filter/app-http-exception-filter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { Locale } from "@cryptexlabs/codex-data-model";
1
+ import { ApiMetaHeadersInterface, Locale } from "@cryptexlabs/codex-data-model";
2
2
  import { Context } from "../context";
3
3
  export declare class LocaleUtil {
4
4
  static getLocaleFromAcceptLanguageHeader(context: Context, langCode: string): Locale;
5
- static getLocaleFromHeaders(headers: Record<string, string>, context: Context): Locale;
5
+ static getLocaleFromHeaders(headers: ApiMetaHeadersInterface, context: Context): Locale;
6
6
  }
@@ -8,7 +8,7 @@ const locales_1 = require("../locales/locales");
8
8
  class LocaleUtil {
9
9
  static getLocaleFromAcceptLanguageHeader(context, langCode) {
10
10
  if (!langCode) {
11
- throw new exception_1.FriendlyHttpException(`Accept language header is not set`, context, locales_1.i18nData.__({ phrase: "an-error-occurred", locale: "en-US" }), common_1.HttpStatus.BAD_REQUEST);
11
+ throw new exception_1.FriendlyHttpException(`Accept language header is not set`, context, locales_1.i18nData.__({ phrase: "an-error-occurred", locale: "en-US" }), common_1.HttpStatus.BAD_REQUEST, "LocaleUtil\ngetLocaleFromAcceptLanguageHeader");
12
12
  }
13
13
  const parts = langCode.split("-");
14
14
  let language;
@@ -23,7 +23,7 @@ class LocaleUtil {
23
23
  }
24
24
  }
25
25
  if (!language || !country) {
26
- throw new exception_1.FriendlyHttpException(`Invalid Accept-Language header: ${langCode}`, context, locales_1.i18nData.__({ phrase: "language-not-supported", locale: "en-US" }), common_1.HttpStatus.BAD_REQUEST);
26
+ throw new exception_1.FriendlyHttpException(`Invalid Accept-Language header: ${langCode}`, context, locales_1.i18nData.__({ phrase: "language-not-supported", locale: "en-US" }), common_1.HttpStatus.BAD_REQUEST, "LocaleUtil\ngetLocaleFromAcceptLanguageHeader");
27
27
  }
28
28
  }
29
29
  else {
@@ -39,10 +39,10 @@ class LocaleUtil {
39
39
  }
40
40
  country = country.split(",")[0];
41
41
  if (!codex_data_model_1.ValidLanguageCodes.includes(language)) {
42
- throw new exception_1.FriendlyHttpException(`Invalid language code: ${country}`, context, locales_1.i18nData.__({ phrase: "language-not-supported", locale: "en-US" }), common_1.HttpStatus.NOT_ACCEPTABLE);
42
+ throw new exception_1.FriendlyHttpException(`Invalid language code: ${country}`, context, locales_1.i18nData.__({ phrase: "language-not-supported", locale: "en-US" }), common_1.HttpStatus.NOT_ACCEPTABLE, "LocaleUtil\ngetLocaleFromAcceptLanguageHeader");
43
43
  }
44
44
  if (!codex_data_model_1.ValidCountryCodes.includes(country)) {
45
- throw new exception_1.FriendlyHttpException(`Invalid country code: ${country}`, context, locales_1.i18nData.__({ phrase: "language-not-supported", locale: "en-US" }), common_1.HttpStatus.NOT_ACCEPTABLE);
45
+ throw new exception_1.FriendlyHttpException(`Invalid country code: ${country}`, context, locales_1.i18nData.__({ phrase: "language-not-supported", locale: "en-US" }), common_1.HttpStatus.NOT_ACCEPTABLE, "LocaleUtil\ngetLocaleFromAcceptLanguageHeader");
46
46
  }
47
47
  return new codex_data_model_1.Locale(language, country);
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"locale.util.js","sourceRoot":"","sources":["../../../src/util/locale.util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locale.util.js","sourceRoot":"","sources":["../../../src/util/locale.util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptexlabs/codex-nodejs-common",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "Common code for Assistant applications",
5
5
  "main": "lib/src/index.js",
6
6
  "repository": "git@gitlab.com:cryptexlabs/public/codex-nodejs-common.git",
@@ -12,12 +12,12 @@
12
12
  "Josh Woodcock <josh.woodcock@cryptexlabs.com>"
13
13
  ],
14
14
  "peerDependencies": {
15
- "@cryptexlabs/codex-data-model": "0.1.5"
15
+ "@cryptexlabs/codex-data-model": "0.1.6",
16
+ "@nestjs/common": "8.0.6",
17
+ "@nestjs/core": "8.0.6"
16
18
  },
17
19
  "dependencies": {
18
20
  "@elastic/elasticsearch": "8.2.1",
19
- "@nestjs/common": "8.0.6",
20
- "@nestjs/core": "8.0.6",
21
21
  "@nestjs/elasticsearch": "8.1.0",
22
22
  "@nestjs/platform-socket.io": "8.0.6",
23
23
  "@nestjs/platform-ws": "8.0.6",
@@ -1,5 +1,6 @@
1
1
  import { Injectable, LoggerService } from "@nestjs/common";
2
2
  import {
3
+ ApiMetaHeadersInterface,
3
4
  ClientInterface,
4
5
  Locale,
5
6
  LocaleI18nInterface,
@@ -41,7 +42,7 @@ export class ContextBuilder {
41
42
  return this;
42
43
  }
43
44
 
44
- public setMetaFromHeaders(headers: Record<string, string>) {
45
+ public setMetaFromHeaders(headers: ApiMetaHeadersInterface) {
45
46
  this.setMetaFromHeadersForNewMessage(headers);
46
47
  if (headers["x-client-version"]) {
47
48
  this.client.version = headers["x-client-version"];
@@ -59,7 +60,7 @@ export class ContextBuilder {
59
60
  return this;
60
61
  }
61
62
 
62
- public setMetaFromHeadersForNewMessage(headers: Record<string, string>) {
63
+ public setMetaFromHeadersForNewMessage(headers: ApiMetaHeadersInterface) {
63
64
  this.setCorrelationId(headers["x-correlation-id"]);
64
65
  this.setLocale(LocaleUtil.getLocaleFromHeaders(headers, this.getResult()));
65
66
  this.setStarted(headers["x-started"]);
@@ -6,7 +6,9 @@ export class FriendlyHttpException extends HttpException {
6
6
  response: string | Record<string, any>,
7
7
  public readonly context: Context,
8
8
  public readonly userMessage: string,
9
- status: HttpStatus
9
+ status: HttpStatus,
10
+
11
+ public readonly stack: string
10
12
  ) {
11
13
  super(response, status);
12
14
  }
@@ -38,15 +38,34 @@ export class AppHttpExceptionFilter extends BaseExceptionFilter {
38
38
  ? exception.context.logger
39
39
  : this.fallbackLogger;
40
40
 
41
- logger.error({
42
- request: {
43
- headers: request.headers,
44
- body: request.body,
45
- url: request.url,
46
- method: request.method,
47
- },
48
- exception,
49
- });
41
+ let developerText = this.getDeveloperText(exception, this.fallbackLocale);
42
+ const stack =
43
+ exception.stack && typeof exception.stack === "string"
44
+ ? exception.stack.split("\n").map((line) => line.trim())
45
+ : "No stack available. Very sad";
46
+
47
+ if (developerText) {
48
+ logger.error(developerText, {
49
+ request: {
50
+ headers: request.headers,
51
+ body: request.body,
52
+ url: request.url,
53
+ method: request.method,
54
+ stack,
55
+ },
56
+ });
57
+ } else {
58
+ logger.error(
59
+ [
60
+ "Error not explained",
61
+ "This probably means someone wrote code that throws an error without an error message",
62
+ "This should never happen!",
63
+ ].join(". "),
64
+ {
65
+ stack,
66
+ }
67
+ );
68
+ }
50
69
 
51
70
  // If this is a normal error it means something random occurred and we want the stacktrace
52
71
  if (!(exception instanceof HttpException) && exception.stack) {
@@ -74,10 +93,9 @@ export class AppHttpExceptionFilter extends BaseExceptionFilter {
74
93
  ? exception.context.started
75
94
  : undefined;
76
95
 
77
- const developerText = this.getDeveloperText(exception, locale);
96
+ developerText = this.getDeveloperText(exception, locale);
78
97
 
79
- const userMessage =
80
- exception instanceof FriendlyHttpException ? exception.userMessage : "";
98
+ const userMessage = exception.userMessage ? exception.userMessage : "";
81
99
 
82
100
  const errorHttpResponse = new ErrorHttpResponse(
83
101
  status,
@@ -114,6 +132,8 @@ export class AppHttpExceptionFilter extends BaseExceptionFilter {
114
132
  }
115
133
  } else if (exception.message.message) {
116
134
  developerText = exception.message.message;
135
+ } else if (exception.getResponse) {
136
+ developerText = exception.getResponse();
117
137
  } else {
118
138
  developerText = exception.message;
119
139
  }
@@ -1,20 +1,24 @@
1
1
  import { LocaleUtil } from "./locale.util";
2
2
  import { HttpException } from "@nestjs/common";
3
3
  import { FriendlyHttpException } from "../exception";
4
+ import {
5
+ ApiMetaHeadersInterface,
6
+ CountryLanguageCombination,
7
+ } from "@cryptexlabs/codex-data-model";
4
8
 
5
9
  describe("LocaleUtil", () => {
6
10
  describe("getLocaleFromHeaders", () => {
7
11
  it("Should throw error when no accept language header is specified", () => {
8
12
  expect(() => {
9
- LocaleUtil.getLocaleFromHeaders({}, null);
13
+ LocaleUtil.getLocaleFromHeaders({} as ApiMetaHeadersInterface, null);
10
14
  }).toThrow(HttpException);
11
15
  });
12
16
 
13
17
  it("Should parse a normal header", () => {
14
18
  const locale = LocaleUtil.getLocaleFromHeaders(
15
19
  {
16
- "Accept-Language": "en-US",
17
- },
20
+ "accept-language": "en-US",
21
+ } as ApiMetaHeadersInterface,
18
22
  null
19
23
  );
20
24
  expect(locale.language).toBe("en");
@@ -25,7 +29,7 @@ describe("LocaleUtil", () => {
25
29
  const locale = LocaleUtil.getLocaleFromHeaders(
26
30
  {
27
31
  "accept-language": "en-US",
28
- },
32
+ } as ApiMetaHeadersInterface,
29
33
  null
30
34
  );
31
35
  expect(locale.language).toBe("en");
@@ -35,8 +39,8 @@ describe("LocaleUtil", () => {
35
39
  it("Should parse a double language", () => {
36
40
  const locale = LocaleUtil.getLocaleFromHeaders(
37
41
  {
38
- "accept-language": "en-US,us",
39
- },
42
+ "accept-language": "en-US,us" as CountryLanguageCombination,
43
+ } as ApiMetaHeadersInterface,
40
44
  null
41
45
  );
42
46
  expect(locale.language).toBe("en");
@@ -46,8 +50,8 @@ describe("LocaleUtil", () => {
46
50
  it("Should parse an uppercase language code in header", () => {
47
51
  const locale = LocaleUtil.getLocaleFromHeaders(
48
52
  {
49
- "accept-language": "EN-US",
50
- },
53
+ "accept-language": "EN-US" as CountryLanguageCombination,
54
+ } as ApiMetaHeadersInterface,
51
55
  null
52
56
  );
53
57
  expect(locale.language).toBe("en");
@@ -57,8 +61,8 @@ describe("LocaleUtil", () => {
57
61
  it("Should parse a lowercase country code in header", () => {
58
62
  const locale = LocaleUtil.getLocaleFromHeaders(
59
63
  {
60
- "accept-language": "en-us",
61
- },
64
+ "accept-language": "en-us" as CountryLanguageCombination,
65
+ } as ApiMetaHeadersInterface,
62
66
  null
63
67
  );
64
68
  expect(locale.language).toBe("en");
@@ -68,8 +72,8 @@ describe("LocaleUtil", () => {
68
72
  it("Should parse an accept language in the format: 'US,EN;Q=0.9'", () => {
69
73
  const locale = LocaleUtil.getLocaleFromHeaders(
70
74
  {
71
- "accept-language": "US,EN;Q=0.9",
72
- },
75
+ "accept-language": "US,EN;Q=0.9" as CountryLanguageCombination,
76
+ } as ApiMetaHeadersInterface,
73
77
  null
74
78
  );
75
79
  expect(locale.language).toBe("en");
@@ -79,8 +83,8 @@ describe("LocaleUtil", () => {
79
83
  it("Should parse an accept language in the format: 'en-US,en;q=0.9'", () => {
80
84
  const locale = LocaleUtil.getLocaleFromHeaders(
81
85
  {
82
- "accept-language": " en-US,en;q=0.9",
83
- },
86
+ "accept-language": " en-US,en;q=0.9" as CountryLanguageCombination,
87
+ } as ApiMetaHeadersInterface,
84
88
  null
85
89
  );
86
90
  expect(locale.language).toBe("en");
@@ -90,7 +94,9 @@ describe("LocaleUtil", () => {
90
94
  it("Should throw an error for an invalid country code", () => {
91
95
  expect(() => {
92
96
  LocaleUtil.getLocaleFromHeaders(
93
- { "accept-language": "asldkafsdj-*" },
97
+ {
98
+ "accept-language": "asldkafsdj-*" as CountryLanguageCombination,
99
+ } as ApiMetaHeadersInterface,
94
100
  null
95
101
  );
96
102
  }).toThrow(FriendlyHttpException);
@@ -1,4 +1,5 @@
1
1
  import {
2
+ ApiMetaHeadersInterface,
2
3
  CountryCode,
3
4
  LanguageCode,
4
5
  Locale,
@@ -20,7 +21,8 @@ export class LocaleUtil {
20
21
  `Accept language header is not set`,
21
22
  context,
22
23
  i18nData.__({ phrase: "an-error-occurred", locale: "en-US" }),
23
- HttpStatus.BAD_REQUEST
24
+ HttpStatus.BAD_REQUEST,
25
+ "LocaleUtil\ngetLocaleFromAcceptLanguageHeader"
24
26
  );
25
27
  }
26
28
  const parts = langCode.split("-");
@@ -42,7 +44,8 @@ export class LocaleUtil {
42
44
  `Invalid Accept-Language header: ${langCode}`,
43
45
  context,
44
46
  i18nData.__({ phrase: "language-not-supported", locale: "en-US" }),
45
- HttpStatus.BAD_REQUEST
47
+ HttpStatus.BAD_REQUEST,
48
+ "LocaleUtil\ngetLocaleFromAcceptLanguageHeader"
46
49
  );
47
50
  }
48
51
  } else {
@@ -64,7 +67,8 @@ export class LocaleUtil {
64
67
  `Invalid language code: ${country}`,
65
68
  context,
66
69
  i18nData.__({ phrase: "language-not-supported", locale: "en-US" }),
67
- HttpStatus.NOT_ACCEPTABLE
70
+ HttpStatus.NOT_ACCEPTABLE,
71
+ "LocaleUtil\ngetLocaleFromAcceptLanguageHeader"
68
72
  );
69
73
  }
70
74
  if (!ValidCountryCodes.includes(country)) {
@@ -72,7 +76,8 @@ export class LocaleUtil {
72
76
  `Invalid country code: ${country}`,
73
77
  context,
74
78
  i18nData.__({ phrase: "language-not-supported", locale: "en-US" }),
75
- HttpStatus.NOT_ACCEPTABLE
79
+ HttpStatus.NOT_ACCEPTABLE,
80
+ "LocaleUtil\ngetLocaleFromAcceptLanguageHeader"
76
81
  );
77
82
  }
78
83
 
@@ -80,7 +85,7 @@ export class LocaleUtil {
80
85
  }
81
86
 
82
87
  public static getLocaleFromHeaders(
83
- headers: Record<string, string>,
88
+ headers: ApiMetaHeadersInterface,
84
89
  context: Context
85
90
  ) {
86
91
  const langCode = headers["accept-language"] || headers["Accept-Language"];