@cryptexlabs/codex-nodejs-common 0.7.2 → 0.7.3
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 +4 -4
- package/lib/src/context/context.builder.d.ts +3 -3
- package/lib/src/context/context.builder.js.map +1 -1
- package/lib/src/util/locale.util.d.ts +2 -2
- package/lib/src/util/locale.util.js.map +1 -1
- package/package.json +4 -4
- package/src/context/context.builder.ts +3 -2
- package/src/util/locale.util.spec.ts +21 -15
- package/src/util/locale.util.ts +2 -1
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cryptexlabs/codex-nodejs-common",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
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.
|
|
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:
|
|
19
|
-
setMetaFromHeadersForNewMessage(headers:
|
|
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":";;;;;;;;;;;;;AAAA,2CAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"context.builder.js","sourceRoot":"","sources":["../../../src/context/context.builder.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:
|
|
5
|
+
static getLocaleFromHeaders(headers: ApiMetaHeadersInterface, context: Context): Locale;
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.util.js","sourceRoot":"","sources":["../../../src/util/locale.util.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"locale.util.js","sourceRoot":"","sources":["../../../src/util/locale.util.ts"],"names":[],"mappings":";;;AAAA,oEAOuC;AACvC,2CAA4C;AAC5C,4CAAqD;AAErD,gDAA8C;AAE9C,MAAa,UAAU;IACd,MAAM,CAAC,iCAAiC,CAC7C,OAAgB,EAChB,QAAgB;QAEhB,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,iCAAqB,CAC7B,mCAAmC,EACnC,OAAO,EACP,kBAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAC7D,mBAAU,CAAC,WAAW,CACvB,CAAC;SACH;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAgB,CAAC;QACrB,IAAI,OAAe,CAAC;QAEpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACvB,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC;oBAChD,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;iBAC1C;aACF;YAED,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;gBACzB,MAAM,IAAI,iCAAqB,CAC7B,mCAAmC,QAAQ,EAAE,EAC7C,OAAO,EACP,kBAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAClE,mBAAU,CAAC,WAAW,CACvB,CAAC;aACH;SACF;aAAM;YACL,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC;YAC/C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACvB,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;iBAC1C;aACF;SACF;QAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,CAAC,qCAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC1C,MAAM,IAAI,iCAAqB,CAC7B,0BAA0B,OAAO,EAAE,EACnC,OAAO,EACP,kBAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAClE,mBAAU,CAAC,cAAc,CAC1B,CAAC;SACH;QACD,IAAI,CAAC,oCAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACxC,MAAM,IAAI,iCAAqB,CAC7B,yBAAyB,OAAO,EAAE,EAClC,OAAO,EACP,kBAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAClE,mBAAU,CAAC,cAAc,CAC1B,CAAC;SACH;QAED,OAAO,IAAI,yBAAM,CAAC,QAAwB,EAAE,OAAsB,CAAC,CAAC;IACtE,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAChC,OAAgC,EAChC,OAAgB;QAEhB,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;CACF;AA5ED,gCA4EC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cryptexlabs/codex-nodejs-common",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
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.
|
|
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:
|
|
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:
|
|
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"]);
|
|
@@ -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
|
-
"
|
|
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
|
-
{
|
|
97
|
+
{
|
|
98
|
+
"accept-language": "asldkafsdj-*" as CountryLanguageCombination,
|
|
99
|
+
} as ApiMetaHeadersInterface,
|
|
94
100
|
null
|
|
95
101
|
);
|
|
96
102
|
}).toThrow(FriendlyHttpException);
|
package/src/util/locale.util.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ApiMetaHeadersInterface,
|
|
2
3
|
CountryCode,
|
|
3
4
|
LanguageCode,
|
|
4
5
|
Locale,
|
|
@@ -80,7 +81,7 @@ export class LocaleUtil {
|
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
public static getLocaleFromHeaders(
|
|
83
|
-
headers:
|
|
84
|
+
headers: ApiMetaHeadersInterface,
|
|
84
85
|
context: Context
|
|
85
86
|
) {
|
|
86
87
|
const langCode = headers["accept-language"] || headers["Accept-Language"];
|