@netacea/netaceaintegrationbase 1.3.0 → 1.8.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,65 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.8.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.7.0...@netacea/netaceaintegrationbase@1.8.0) (2021-12-08)
7
+
8
+
9
+ ### Features
10
+
11
+ * **integrations:** PR-16: Bumped versions ([418e08b](https://github.com/Netacea/JavascriptATAIntegration/commit/418e08bac751b0df6c946c1f1c46fb3af3da3612))
12
+ * **integrations:** PR-31: allow mitata expiry to be configured ([218f0d1](https://github.com/Netacea/JavascriptATAIntegration/commit/218f0d10d3f06d998e7aa18755f73b4977958814))
13
+ * **integrations:** PR-31: remove useFakeTimers() where not necessary ([6db65f7](https://github.com/Netacea/JavascriptATAIntegration/commit/6db65f7aae72b0688b640a37134e29da8fe4f760))
14
+ * **intgegrations:** PR-31: rename mitata.valid to isPrimaryHashValid ([08eddec](https://github.com/Netacea/JavascriptATAIntegration/commit/08eddece2a8abb1641e94f93fb9b3e9ac5cec6cd))
15
+
16
+
17
+
18
+
19
+
20
+ # [1.7.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.6.0...@netacea/netaceaintegrationbase@1.7.0) (2021-08-17)
21
+
22
+
23
+ ### Features
24
+
25
+ * **SCAL-31:** Fix fail open ([ea8be37](https://github.com/Netacea/JavascriptATAIntegration/commit/ea8be3798631c2fe8b585b7e63f4d40834f7ab6e))
26
+ * **SCAL-31:** Fix path to not use URL lib ([5dfa283](https://github.com/Netacea/JavascriptATAIntegration/commit/5dfa2836663a7527ff650e12cb1eeae1e5b499ad))
27
+ * **SCAL-31:** Fix query test and lint ([1070293](https://github.com/Netacea/JavascriptATAIntegration/commit/1070293263f1456aef51fea54af0d557330594df))
28
+ * **SCAL-31:** Fix unit test ([8cd60b2](https://github.com/Netacea/JavascriptATAIntegration/commit/8cd60b2a88c2909758bde82787542f9d5d0e6e08))
29
+ * **SCAL-31:** Undefined bctype when empty string ([da6d140](https://github.com/Netacea/JavascriptATAIntegration/commit/da6d140ef35bf374a839e388f0f77d515324959e))
30
+ * **SCAL-31:** v2 log format ([b937b85](https://github.com/Netacea/JavascriptATAIntegration/commit/b937b8570a02ddb0d65c7e3e2452fbde2d2ead97))
31
+
32
+
33
+
34
+
35
+
36
+ # [1.6.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.5.0...@netacea/netaceaintegrationbase@1.6.0) (2021-08-04)
37
+
38
+
39
+ ### Features
40
+
41
+ * **PB-1834:** Batched ingest ([b41a8c6](https://github.com/Netacea/JavascriptATAIntegration/commit/b41a8c6c26f7bf85c107a23bef24c75a82e6098b))
42
+ * **PB-1834:** Batched ingest using cloudfront fully working ([638b7e7](https://github.com/Netacea/JavascriptATAIntegration/commit/638b7e7e80888944c8bfaf7c2c4bae728eee1bd5))
43
+ * **PB-1834:** Removing only and skip and fixing tests ([ef5003f](https://github.com/Netacea/JavascriptATAIntegration/commit/ef5003f0499ea29c14b0dba880581b748f4e0905))
44
+
45
+
46
+
47
+
48
+
49
+ # [1.5.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.3.0...@netacea/netaceaintegrationbase@1.5.0) (2021-07-21)
50
+
51
+
52
+ ### Features
53
+
54
+ * **PB-1750:** Kinesis in more than cloudfront start ([eecb2a1](https://github.com/Netacea/JavascriptATAIntegration/commit/eecb2a18cf2dc947345dd0dbf0f38ea201212f58))
55
+ * **PB-1750:** Kinesis ingest dep added ([513e936](https://github.com/Netacea/JavascriptATAIntegration/commit/513e936a8310957d7823b95a224b0386ecde3610))
56
+ * **PB-1750:** last code, lint and test ([889833e](https://github.com/Netacea/JavascriptATAIntegration/commit/889833e06bf08cec560f0612f06a19444081f4c4))
57
+ * **PB-1750:** PR Comments ([5c0da45](https://github.com/Netacea/JavascriptATAIntegration/commit/5c0da45c15b6bb5eb2805b2268c9d9e0c857a412))
58
+ * **PB-1750:** Publishing modules for testing ([ff46830](https://github.com/Netacea/JavascriptATAIntegration/commit/ff468305f8da5ffc39590d19ea019811dc7ad2f8))
59
+ * **PB-1750:** Try fix deps again ([d55915e](https://github.com/Netacea/JavascriptATAIntegration/commit/d55915ee496e5798f762fd844c2717d52ff5ea2f))
60
+
61
+
62
+
63
+
64
+
6
65
  # [1.3.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.2.0...@netacea/netaceaintegrationbase@1.3.0) (2021-06-23)
7
66
 
8
67
 
@@ -1,50 +1,11 @@
1
- export interface MakeRequestArgs {
2
- host: string;
3
- path: string;
4
- headers: {
5
- [key: string]: string;
6
- };
7
- method: 'GET' | 'POST' | 'PUT' | 'DELETE';
8
- body?: any;
9
- }
10
- export interface MakeRequestResponse {
11
- status: number;
12
- headers: {
13
- [key: string]: string;
14
- };
15
- body?: any;
16
- }
17
- export interface NetaceaBaseArgs {
18
- apiKey: string;
19
- secretKey?: string;
20
- captchaSiteKey?: string;
21
- captchaSecretKey?: string;
22
- timeout?: number;
23
- retries?: number;
24
- ingestServiceUrl?: string;
25
- mitigationServiceUrl?: string;
26
- mitigationType?: NetaceaMitigationType;
27
- }
1
+ import type { ComposeResultResponse, IngestArgs, InjectResponse, MakeRequestArgs, MakeRequestResponse, MitigateResponse, NetaceaBaseArgs, NetaceaMitigationResponse, WebLog, V2WebLog, NetaceaResponseBase } from './NetaceaBase.types';
2
+ import { NetaceaIngestType, NetaceaLogVersion, NetaceaMitigationType } from './NetaceaBase.enums';
3
+ import NetaceaKinesis from '@netacea/kinesisingest';
28
4
  interface FindBestMitigationResponse {
29
5
  sessionStatus: string;
30
6
  mitigation: string;
31
7
  parts: NetaceaParts;
32
8
  }
33
- export interface InjectHeaders {
34
- 'x-netacea-match': string;
35
- 'x-netacea-mitigate': string;
36
- 'x-netacea-captcha': string;
37
- 'x-netacea-event-id'?: string;
38
- }
39
- export interface ComposeResultResponse {
40
- body?: string;
41
- apiCallStatus: number;
42
- setCookie: string[];
43
- sessionStatus: string;
44
- mitigation: string;
45
- mitigated: boolean;
46
- injectHeaders?: InjectHeaders;
47
- }
48
9
  interface NetaceaParts {
49
10
  match: number;
50
11
  mitigate: number;
@@ -54,66 +15,6 @@ interface APICallResponse {
54
15
  status: number;
55
16
  body?: any;
56
17
  }
57
- export interface IngestArgs {
58
- ip: string;
59
- userAgent: string;
60
- status: string;
61
- method: string;
62
- path: string;
63
- protocol: string;
64
- referer: string;
65
- bytesSent: string;
66
- requestTime: string;
67
- mitataCookie?: string;
68
- sessionStatus?: string;
69
- integrationType?: string;
70
- integrationVersion?: string;
71
- }
72
- export interface WebLog {
73
- Request: string;
74
- TimeLocal: string;
75
- RealIp: string;
76
- UserAgent: string;
77
- Status: string;
78
- RequestTime: string;
79
- BytesSent: string;
80
- Referer: string;
81
- NetaceaUserIdCookie: string;
82
- NetaceaMitigationApplied: string;
83
- IntegrationType?: string;
84
- IntegrationVersion?: string;
85
- }
86
- export declare enum NetaceaMitigationType {
87
- /**
88
- * Run Netacea with mitigation mode enabled.
89
- * This will serve Captcha pages and Forbidden pages when instructed to do so
90
- */
91
- MITIGATE = "MITIGATE",
92
- /**
93
- * Run Netacea with Inject mode enabled.
94
- * The end-user will only receive a cookie.
95
- * The origin server will receive 3 headers,
96
- *
97
- * 'x-netacea-match' indicating what was matched (nothing(0), ua(1), ip(2), etc...)
98
- *
99
- * 'x-netacea-mitigate' indicating what action would've be taken (nothing (0), block(1), allow(2), etc...)
100
- *
101
- * 'x-netacea-captcha' indicating what captcha action would've been taken
102
- */
103
- INJECT = "INJECT",
104
- /**
105
- * Run Netacea with Ingest only mode
106
- * No cookies will be set for the end user.
107
- * No mitigations will be applied.
108
- *
109
- * **It's recommended to start in this mode!**
110
- */
111
- INGEST = "INGEST"
112
- }
113
- export interface NetaceaResponseBase {
114
- setCookie?: string[];
115
- sessionStatus: string;
116
- }
117
18
  interface ProcessMitigateRequestArgs {
118
19
  url: string;
119
20
  method: string;
@@ -123,14 +24,6 @@ interface ProcessMitigateRequestArgs {
123
24
  userAgent: string;
124
25
  getBodyFn: () => Promise<any>;
125
26
  }
126
- export interface MitigateResponse<T = any> extends NetaceaResponseBase {
127
- response?: T;
128
- }
129
- export interface InjectResponse<T = any> extends MitigateResponse<T> {
130
- injectHeaders: InjectHeaders | undefined;
131
- response?: T | undefined;
132
- }
133
- export declare type NetaceaMitigationResponse<T> = MitigateResponse<T> | InjectResponse<T> | undefined;
134
27
  export default abstract class NetaceaBase<RequestArgs = any, Response = any> {
135
28
  protected apiKey: string;
136
29
  protected secretKey?: string;
@@ -138,23 +31,30 @@ export default abstract class NetaceaBase<RequestArgs = any, Response = any> {
138
31
  protected retries: number;
139
32
  protected captchaSiteKey?: string;
140
33
  protected captchaSecretKey?: string;
34
+ protected ingestType: NetaceaIngestType;
35
+ protected readonly logVersion: NetaceaLogVersion;
36
+ protected mitataCookieExpirySeconds: number;
141
37
  private readonly mitigationServiceUrl;
142
38
  private readonly ingestServiceUrl;
143
39
  protected readonly mitigationType: NetaceaMitigationType;
144
40
  protected abstract makeRequest(args: MakeRequestArgs): Promise<MakeRequestResponse>;
145
41
  protected abstract mitigate(args: RequestArgs): Promise<MitigateResponse<Response>>;
146
42
  protected abstract inject(args: RequestArgs): Promise<InjectResponse>;
43
+ protected readonly kinesis?: NetaceaKinesis;
147
44
  abstract ingest(...args: any[]): Promise<any>;
148
45
  abstract getCookieHeader(args: RequestArgs): string | null | undefined;
149
- constructor({ apiKey, secretKey, timeout, retries, mitigationServiceUrl, ingestServiceUrl, mitigationType, captchaSiteKey, captchaSecretKey }: NetaceaBaseArgs);
46
+ constructor({ apiKey, secretKey, timeout, retries, mitigationServiceUrl, ingestServiceUrl, mitigationType, captchaSiteKey, captchaSecretKey, ingestType, kinesis, logVersion, mitataCookieExpirySeconds }: NetaceaBaseArgs);
150
47
  runMitigation(args: RequestArgs): Promise<NetaceaMitigationResponse<Response>>;
151
48
  protected readCookie(cookieName: string, cookies: string | null | undefined): string | undefined;
152
49
  protected callIngest(args: IngestArgs): Promise<void>;
153
50
  private makeIngestApiCall;
154
- protected constructWebLog({ ip, userAgent, status, method, path, protocol, referer, bytesSent, requestTime, mitataCookie, sessionStatus, integrationType, integrationVersion }: IngestArgs): WebLog;
51
+ private constructV2WebLog;
52
+ private constructV1WebLog;
53
+ protected constructWebLog(args: IngestArgs): WebLog | V2WebLog;
155
54
  protected check(netaceaCookie: string | undefined, clientIP: string, userAgent: string, captchaCookie?: string): Promise<ComposeResultResponse>;
55
+ private createMitata;
156
56
  private processCaptcha;
157
- private getCookiesFromHeaders;
57
+ private getMitataCaptchaFromHeaders;
158
58
  private makeCaptchaAPICall;
159
59
  private getApiCallResponseFromResponse;
160
60
  private buildCookieFromValues;
@@ -165,7 +65,7 @@ export default abstract class NetaceaBase<RequestArgs = any, Response = any> {
165
65
  protected APIError(response: APICallResponse): Error;
166
66
  protected isUrlCaptchaPost(url: string, method: string): boolean;
167
67
  protected processMitigateRequest(args: ProcessMitigateRequestArgs): Promise<ComposeResultResponse>;
168
- protected setWorkerCookie(userId: string | undefined, saltKey: string): NetaceaResponseBase;
68
+ protected setIngestOnlyMitataCookie(userId: string | undefined): NetaceaResponseBase;
169
69
  protected processIngest(args: RequestArgs): NetaceaResponseBase;
170
70
  }
171
71
  export {};
@@ -0,0 +1,35 @@
1
+ export declare enum NetaceaIngestType {
2
+ HTTP = "HTTP",
3
+ KINESIS = "KINESIS"
4
+ }
5
+ export declare enum NetaceaLogVersion {
6
+ V1 = "V1",
7
+ V2 = "V2"
8
+ }
9
+ export declare enum NetaceaMitigationType {
10
+ /**
11
+ * Run Netacea with mitigation mode enabled.
12
+ * This will serve Captcha pages and Forbidden pages when instructed to do so
13
+ */
14
+ MITIGATE = "MITIGATE",
15
+ /**
16
+ * Run Netacea with Inject mode enabled.
17
+ * The end-user will only receive a cookie.
18
+ * The origin server will receive 3 headers,
19
+ *
20
+ * 'x-netacea-match' indicating what was matched (nothing(0), ua(1), ip(2), etc...)
21
+ *
22
+ * 'x-netacea-mitigate' indicating what action would've be taken (nothing (0), block(1), allow(2), etc...)
23
+ *
24
+ * 'x-netacea-captcha' indicating what captcha action would've been taken
25
+ */
26
+ INJECT = "INJECT",
27
+ /**
28
+ * Run Netacea with Ingest only mode
29
+ * No cookies will be set for the end user.
30
+ * No mitigations will be applied.
31
+ *
32
+ * **It's recommended to start in this mode!**
33
+ */
34
+ INGEST = "INGEST"
35
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NetaceaMitigationType = exports.NetaceaLogVersion = exports.NetaceaIngestType = void 0;
4
+ var NetaceaIngestType;
5
+ (function (NetaceaIngestType) {
6
+ NetaceaIngestType["HTTP"] = "HTTP";
7
+ NetaceaIngestType["KINESIS"] = "KINESIS";
8
+ })(NetaceaIngestType = exports.NetaceaIngestType || (exports.NetaceaIngestType = {}));
9
+ var NetaceaLogVersion;
10
+ (function (NetaceaLogVersion) {
11
+ NetaceaLogVersion["V1"] = "V1";
12
+ NetaceaLogVersion["V2"] = "V2";
13
+ })(NetaceaLogVersion = exports.NetaceaLogVersion || (exports.NetaceaLogVersion = {}));
14
+ var NetaceaMitigationType;
15
+ (function (NetaceaMitigationType) {
16
+ /**
17
+ * Run Netacea with mitigation mode enabled.
18
+ * This will serve Captcha pages and Forbidden pages when instructed to do so
19
+ */
20
+ NetaceaMitigationType["MITIGATE"] = "MITIGATE";
21
+ /**
22
+ * Run Netacea with Inject mode enabled.
23
+ * The end-user will only receive a cookie.
24
+ * The origin server will receive 3 headers,
25
+ *
26
+ * 'x-netacea-match' indicating what was matched (nothing(0), ua(1), ip(2), etc...)
27
+ *
28
+ * 'x-netacea-mitigate' indicating what action would've be taken (nothing (0), block(1), allow(2), etc...)
29
+ *
30
+ * 'x-netacea-captcha' indicating what captcha action would've been taken
31
+ */
32
+ NetaceaMitigationType["INJECT"] = "INJECT";
33
+ /**
34
+ * Run Netacea with Ingest only mode
35
+ * No cookies will be set for the end user.
36
+ * No mitigations will be applied.
37
+ *
38
+ * **It's recommended to start in this mode!**
39
+ */
40
+ NetaceaMitigationType["INGEST"] = "INGEST";
41
+ })(NetaceaMitigationType = exports.NetaceaMitigationType || (exports.NetaceaMitigationType = {}));
42
+ //# sourceMappingURL=NetaceaBase.enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetaceaBase.enums.js","sourceRoot":"","sources":["../src/NetaceaBase.enums.ts"],"names":[],"mappings":";;;AAAA,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,kCAAa,CAAA;IACb,wCAAmB,CAAA;AACrB,CAAC,EAHW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAG5B;AAED,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,8BAAS,CAAA;IACT,8BAAS,CAAA;AACX,CAAC,EAHW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAG5B;AAED,IAAY,qBA0BX;AA1BD,WAAY,qBAAqB;IAC/B;;;OAGG;IACH,8CAAqB,CAAA;IACrB;;;;;;;;;;OAUG;IACH,0CAAiB,CAAA;IACjB;;;;;;OAMG;IACH,0CAAiB,CAAA;AACnB,CAAC,EA1BW,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QA0BhC"}
@@ -1,42 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NetaceaMitigationType = void 0;
3
+ const NetaceaBase_enums_1 = require("./NetaceaBase.enums");
4
4
  const dictionary_1 = require("./dictionary");
5
5
  const mitataCookie_1 = require("./mitataCookie");
6
+ const kinesisingest_1 = require("@netacea/kinesisingest");
6
7
  const ONE_HOUR_IN_SECONDS = 60 * 60;
7
8
  const ONE_DAY_IN_SECONDS = ONE_HOUR_IN_SECONDS * 24;
8
- var NetaceaMitigationType;
9
- (function (NetaceaMitigationType) {
10
- /**
11
- * Run Netacea with mitigation mode enabled.
12
- * This will serve Captcha pages and Forbidden pages when instructed to do so
13
- */
14
- NetaceaMitigationType["MITIGATE"] = "MITIGATE";
15
- /**
16
- * Run Netacea with Inject mode enabled.
17
- * The end-user will only receive a cookie.
18
- * The origin server will receive 3 headers,
19
- *
20
- * 'x-netacea-match' indicating what was matched (nothing(0), ua(1), ip(2), etc...)
21
- *
22
- * 'x-netacea-mitigate' indicating what action would've be taken (nothing (0), block(1), allow(2), etc...)
23
- *
24
- * 'x-netacea-captcha' indicating what captcha action would've been taken
25
- */
26
- NetaceaMitigationType["INJECT"] = "INJECT";
27
- /**
28
- * Run Netacea with Ingest only mode
29
- * No cookies will be set for the end user.
30
- * No mitigations will be applied.
31
- *
32
- * **It's recommended to start in this mode!**
33
- */
34
- NetaceaMitigationType["INGEST"] = "INGEST";
35
- })(NetaceaMitigationType = exports.NetaceaMitigationType || (exports.NetaceaMitigationType = {}));
9
+ function correctTimeout(timeout) {
10
+ return timeout <= 0 ? defaultTimeout : timeout;
11
+ }
12
+ function correctRetries(retries) {
13
+ if (retries < 1) {
14
+ return 1;
15
+ }
16
+ return retries > maximumRetries ? maximumRetries : retries;
17
+ }
18
+ function safeParseInt(value, defaultValue = 0) {
19
+ if (isNaN(value)) {
20
+ return defaultValue;
21
+ }
22
+ return parseInt(value);
23
+ }
36
24
  const maximumRetries = 5;
37
25
  const defaultTimeout = 3000;
26
+ function configureMitataExpiry(mitigationType, expirySeconds) {
27
+ if (expirySeconds === undefined) {
28
+ return mitigationType === NetaceaBase_enums_1.NetaceaMitigationType.INGEST ? ONE_HOUR_IN_SECONDS : 60;
29
+ }
30
+ return expirySeconds;
31
+ }
38
32
  class NetaceaBase {
39
- constructor({ apiKey, secretKey, timeout = defaultTimeout, retries = maximumRetries, mitigationServiceUrl = 'https://mitigations.netacea.net', ingestServiceUrl = 'https://ingest.netacea.net', mitigationType = NetaceaMitigationType.INGEST, captchaSiteKey, captchaSecretKey }) {
33
+ // eslint-disable-next-line max-lines-per-function
34
+ constructor({ apiKey, secretKey, timeout = defaultTimeout, retries = maximumRetries, mitigationServiceUrl = 'https://mitigations.netacea.net', ingestServiceUrl = 'https://ingest.netacea.net', mitigationType = NetaceaBase_enums_1.NetaceaMitigationType.INGEST, captchaSiteKey, captchaSecretKey, ingestType = NetaceaBase_enums_1.NetaceaIngestType.HTTP, kinesis, logVersion, mitataCookieExpirySeconds }) {
40
35
  if (apiKey === null || apiKey === undefined) {
41
36
  throw new Error('apiKey is a required parameter');
42
37
  }
@@ -45,43 +40,53 @@ class NetaceaBase {
45
40
  this.mitigationServiceUrl = mitigationServiceUrl;
46
41
  this.ingestServiceUrl = ingestServiceUrl;
47
42
  this.mitigationType = mitigationType;
48
- if (captchaSiteKey !== undefined || captchaSecretKey !== undefined) {
49
- if (typeof captchaSiteKey === 'string' && typeof captchaSecretKey === 'string') {
50
- this.captchaSiteKey = captchaSiteKey;
51
- this.captchaSecretKey = captchaSecretKey;
43
+ this.ingestType = ingestType !== null && ingestType !== void 0 ? ingestType : NetaceaBase_enums_1.NetaceaIngestType.HTTP;
44
+ this.logVersion = logVersion !== null && logVersion !== void 0 ? logVersion : NetaceaBase_enums_1.NetaceaLogVersion.V1;
45
+ if (this.ingestType === NetaceaBase_enums_1.NetaceaIngestType.KINESIS) {
46
+ if (kinesis === undefined) {
47
+ // eslint-disable-next-line no-console
48
+ console.warn(`NETACEA WARN: no kinesis args provided, when ingestType is ${this.ingestType}`);
52
49
  }
53
50
  else {
54
- // eslint-disable-next-line no-console
55
- console.log('NETACEA WARN: failed to configure captcha keys');
51
+ this.kinesis = new kinesisingest_1.default({
52
+ ...kinesis,
53
+ apiKey: this.apiKey
54
+ });
56
55
  }
57
56
  }
58
- if (retries < 1) {
59
- this.retries = 1;
60
- }
61
- else if (retries > maximumRetries) {
62
- this.retries = maximumRetries;
63
- }
64
- else {
65
- this.retries = retries;
66
- }
67
- if (timeout < 1) {
68
- this.timeout = defaultTimeout;
69
- }
70
- else {
71
- this.timeout = timeout;
57
+ if (captchaSiteKey !== undefined || captchaSecretKey !== undefined) {
58
+ this.captchaSiteKey = captchaSiteKey;
59
+ this.captchaSecretKey = captchaSecretKey;
72
60
  }
61
+ this.timeout = correctTimeout(timeout);
62
+ this.retries = correctRetries(retries);
63
+ this.mitataCookieExpirySeconds = configureMitataExpiry(mitigationType, mitataCookieExpirySeconds);
73
64
  }
74
65
  async runMitigation(args) {
75
- switch (this.mitigationType) {
76
- case NetaceaMitigationType.MITIGATE:
77
- return await this.mitigate(args);
78
- case NetaceaMitigationType.INJECT:
79
- return await this.inject(args);
80
- case NetaceaMitigationType.INGEST:
81
- return this.processIngest(args);
82
- default:
83
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
84
- throw new Error(`Netacea Error: Mitigation type ${this.mitigationType} not recognised`);
66
+ try {
67
+ switch (this.mitigationType) {
68
+ case NetaceaBase_enums_1.NetaceaMitigationType.MITIGATE:
69
+ return await this.mitigate(args);
70
+ case NetaceaBase_enums_1.NetaceaMitigationType.INJECT:
71
+ return await this.inject(args);
72
+ case NetaceaBase_enums_1.NetaceaMitigationType.INGEST:
73
+ return this.processIngest(args);
74
+ default:
75
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
76
+ throw new Error(`Netacea Error: Mitigation type ${this.mitigationType} not recognised`);
77
+ }
78
+ }
79
+ catch (e) {
80
+ // eslint-disable-next-line no-console
81
+ console.error('Netacea FAILOPEN Error:', e);
82
+ return {
83
+ injectHeaders: {
84
+ 'x-netacea-captcha': '0',
85
+ 'x-netacea-match': '0',
86
+ 'x-netacea-mitigate': '0'
87
+ },
88
+ sessionStatus: ''
89
+ };
85
90
  }
86
91
  }
87
92
  readCookie(cookieName, cookies) {
@@ -96,13 +101,32 @@ class NetaceaBase {
96
101
  }
97
102
  async callIngest(args) {
98
103
  const body = this.constructWebLog(args);
99
- const headers = {
100
- 'X-Netacea-API-Key': this.apiKey,
101
- 'content-type': 'application/json'
102
- };
103
- const res = await this.makeIngestApiCall(headers, body);
104
- if (res.status !== 200) {
105
- throw this.APIError(res);
104
+ if (this.ingestType === NetaceaBase_enums_1.NetaceaIngestType.KINESIS) {
105
+ if (this.kinesis === undefined) {
106
+ // eslint-disable-next-line no-console
107
+ console.error('Netacea Error: Unable to log as Kinesis has not been defined.');
108
+ return;
109
+ }
110
+ try {
111
+ await this.kinesis.ingest({
112
+ ...body,
113
+ apiKey: this.apiKey
114
+ }, this.makeRequest);
115
+ }
116
+ catch (e) {
117
+ // eslint-disable-next-line no-console
118
+ console.error('NETACEA Error: ', e.message);
119
+ }
120
+ }
121
+ else {
122
+ const headers = {
123
+ 'X-Netacea-API-Key': this.apiKey,
124
+ 'content-type': 'application/json'
125
+ };
126
+ const res = await this.makeIngestApiCall(headers, body);
127
+ if (res.status !== 200) {
128
+ throw this.APIError(res);
129
+ }
106
130
  }
107
131
  }
108
132
  async makeIngestApiCall(headers, body) {
@@ -111,21 +135,57 @@ class NetaceaBase {
111
135
  method: 'POST',
112
136
  path: '/',
113
137
  headers,
114
- body: JSON.stringify(body)
138
+ body: JSON.stringify(body),
139
+ timeout: this.timeout
115
140
  });
116
141
  }
117
- constructWebLog({ ip, userAgent, status, method, path, protocol, referer, bytesSent, requestTime, mitataCookie, sessionStatus, integrationType, integrationVersion }) {
118
- const requestValue = `${method} ${path} ${protocol}`;
119
- const timeLocal = new Date();
120
- const timestamp = timeLocal.toUTCString();
142
+ constructV2WebLog({ ip, userAgent, status, method, path, protocol, referer, bytesSent, requestTime, mitataCookie, sessionStatus, integrationType, integrationVersion }) {
143
+ var _a;
144
+ const now = new Date();
145
+ // Paths must be prefixed with '/'
146
+ if (path[0] !== '/') {
147
+ path = `/${path}`;
148
+ }
149
+ let actualQuery;
150
+ const splitPath = path.split('?');
151
+ if (splitPath.length > 1) {
152
+ actualQuery = `?${splitPath[1]}`;
153
+ }
154
+ const actualPath = splitPath[0];
155
+ const userId = (_a = mitataCookie_1.matchMitataCookie(mitataCookie)) === null || _a === void 0 ? void 0 : _a.userId;
156
+ const log = {
157
+ status,
158
+ method,
159
+ 'bytes_sent': safeParseInt(bytesSent),
160
+ 'referrer': referer === '' ? undefined : referer,
161
+ 'request': `${method} ${actualPath}${actualQuery !== null && actualQuery !== void 0 ? actualQuery : ''} ${protocol}`,
162
+ 'request_time': safeParseInt(requestTime),
163
+ 'integration_type': integrationType,
164
+ 'integration_version': integrationVersion,
165
+ 'client': ip,
166
+ 'user_agent': userAgent,
167
+ 'bc_type': sessionStatus === '' ? undefined : sessionStatus,
168
+ 'hour': now.getUTCHours(),
169
+ 'minute': now.getUTCMinutes(),
170
+ // '2021-08-04T14:22:41.155Z' = toISOString()
171
+ '@timestamp': now.toISOString().replace('Z', '+00:00'),
172
+ 'path': actualPath,
173
+ protocol,
174
+ 'query': actualQuery,
175
+ 'user_id': userId
176
+ };
177
+ return log;
178
+ }
179
+ constructV1WebLog({ ip, userAgent, status, method, path, protocol, referer, bytesSent, requestTime, mitataCookie, sessionStatus, integrationType, integrationVersion }) {
180
+ const timestamp = new Date().toUTCString();
121
181
  return {
122
- Request: requestValue,
182
+ Request: `${method} ${path} ${protocol}`,
123
183
  TimeLocal: timestamp,
124
184
  RealIp: ip,
125
185
  UserAgent: userAgent,
126
186
  Status: status,
127
- RequestTime: requestTime,
128
- BytesSent: bytesSent === '' ? '0' : bytesSent,
187
+ RequestTime: requestTime === null || requestTime === void 0 ? void 0 : requestTime.toString(),
188
+ BytesSent: bytesSent === null || bytesSent === void 0 ? void 0 : bytesSent.toString(),
129
189
  Referer: referer === '' ? '-' : referer,
130
190
  NetaceaUserIdCookie: mitataCookie !== null && mitataCookie !== void 0 ? mitataCookie : '',
131
191
  NetaceaMitigationApplied: sessionStatus !== null && sessionStatus !== void 0 ? sessionStatus : '',
@@ -133,21 +193,31 @@ class NetaceaBase {
133
193
  IntegrationVersion: integrationVersion !== null && integrationVersion !== void 0 ? integrationVersion : ''
134
194
  };
135
195
  }
196
+ constructWebLog(args) {
197
+ args.bytesSent = args.bytesSent === '' ? '0' : args.bytesSent;
198
+ if (this.logVersion === NetaceaBase_enums_1.NetaceaLogVersion.V2) {
199
+ return this.constructV2WebLog(args);
200
+ }
201
+ return this.constructV1WebLog(args);
202
+ }
136
203
  async check(netaceaCookie, clientIP, userAgent, captchaCookie) {
204
+ var _a, _b;
137
205
  let status, match, mitigate, captcha, body, setCookie, eventId;
138
206
  if (this.secretKey === undefined) {
139
207
  throw new Error('Secret key is required to mitigate');
140
208
  }
141
- const cookieInfo = mitataCookie_1.checkCookie(netaceaCookie, this.secretKey);
142
- if (!cookieInfo.valid || cookieInfo.expired) {
209
+ const cookieInfo = mitataCookie_1.checkMitataCookie(netaceaCookie, clientIP, this.secretKey);
210
+ if (!cookieInfo.isPrimaryHashValid || cookieInfo.requiresReissue) {
143
211
  // Get latest mitigation information
144
- const result = await this.makeMitigateAPICall(netaceaCookie, clientIP, userAgent, captchaCookie);
212
+ const result = await this.makeMitigateAPICall((_a = cookieInfo.mitata) === null || _a === void 0 ? void 0 : _a.userId, clientIP, userAgent, captchaCookie);
145
213
  status = result.status;
146
214
  match = result.match;
147
215
  mitigate = result.mitigate;
148
216
  captcha = result.captcha;
149
217
  body = result.body;
150
- setCookie = result.setCookie;
218
+ setCookie = [
219
+ this.createMitata(clientIP, (_b = cookieInfo.mitata) === null || _b === void 0 ? void 0 : _b.userId, match, mitigate, captcha, result.mitataMaxAge)
220
+ ];
151
221
  eventId = result.eventId;
152
222
  }
153
223
  else {
@@ -160,38 +230,40 @@ class NetaceaBase {
160
230
  }
161
231
  return this.composeResult(body, setCookie, status, match, mitigate, captcha, false, eventId);
162
232
  }
233
+ createMitata(clientIP, userId, match, mitigate, captcha, maxAge = 86400, expiry = Math.floor(Date.now() / 1000) + this.mitataCookieExpirySeconds) {
234
+ if (this.secretKey === undefined) {
235
+ throw new Error('Cannot build cookie without secret key.');
236
+ }
237
+ const mitataCode = [match, mitigate, captcha].join('');
238
+ const mitataValue = mitataCookie_1.createMitataCookie(clientIP, userId, expiry, this.secretKey, mitataCode);
239
+ return this.buildCookieFromValues('_mitata', mitataValue, maxAge, '/');
240
+ }
163
241
  async processCaptcha(netaceaCookie, clientIP, userAgent, captchaData) {
164
242
  const { status, match, mitigate, captcha, body, setCookie } = await this.makeCaptchaAPICall(netaceaCookie, clientIP, userAgent, captchaData);
165
243
  return this.composeResult(body, setCookie, status, match, mitigate, captcha, true);
166
244
  }
167
- getCookiesFromHeaders(headers) {
168
- const setCookie = [];
169
- const mitata = headers[dictionary_1.netaceaHeaders.mitata];
170
- const mitataExpiry = parseInt(headers[dictionary_1.netaceaHeaders.mitataExpiry]);
171
- const mitataCookie = this.buildCookieFromValues('_mitata', mitata, mitataExpiry);
172
- if (mitataCookie !== undefined) {
173
- setCookie.push(mitataCookie);
174
- }
245
+ getMitataCaptchaFromHeaders(headers) {
175
246
  if (Object.prototype.hasOwnProperty.call(headers, dictionary_1.netaceaHeaders.mitataCaptcha)) {
176
247
  const mitataCaptcha = headers[dictionary_1.netaceaHeaders.mitataCaptcha];
177
248
  const mitataCaptchaExpiry = parseInt(headers[dictionary_1.netaceaHeaders.mitataCaptchaExpiry]);
178
249
  const mitataCaptchaCookie = this.buildCookieFromValues('_mitatacaptcha', mitataCaptcha, mitataCaptchaExpiry);
179
250
  if (mitataCaptchaCookie !== undefined) {
180
- setCookie.push(mitataCaptchaCookie);
251
+ return mitataCaptchaCookie;
181
252
  }
182
253
  }
183
- return setCookie;
254
+ return undefined;
184
255
  }
185
256
  async makeCaptchaAPICall(netaceaCookie, clientIP, userAgent, captchaData) {
186
257
  const headers = {
187
258
  'X-Netacea-API-Key': this.apiKey,
188
259
  'X-Netacea-Client-IP': clientIP,
189
260
  'user-agent': userAgent,
190
- 'cookie': this.buildCookieHeader({
191
- _mitata: netaceaCookie
192
- }),
193
261
  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
194
262
  };
263
+ const mitata = mitataCookie_1.matchMitataCookie(netaceaCookie);
264
+ if (mitata !== undefined) {
265
+ headers['X-Netacea-UserId'] = mitata.userId;
266
+ }
195
267
  if (this.captchaSiteKey !== undefined && this.captchaSecretKey !== undefined) {
196
268
  headers['X-Netacea-Captcha-Site-Key'] = this.captchaSiteKey;
197
269
  headers['X-Netacea-Captcha-Secret-Key'] = this.captchaSecretKey;
@@ -201,18 +273,28 @@ class NetaceaBase {
201
273
  path: '/AtaVerifyCaptcha',
202
274
  headers,
203
275
  method: 'POST',
204
- body: captchaData
276
+ body: captchaData,
277
+ timeout: this.timeout
205
278
  });
206
- return this.getApiCallResponseFromResponse(res);
279
+ return this.getApiCallResponseFromResponse(res, mitata === null || mitata === void 0 ? void 0 : mitata.userId, clientIP);
207
280
  }
208
- getApiCallResponseFromResponse(response) {
281
+ getApiCallResponseFromResponse(response, userId, clientIP) {
209
282
  if (response.status !== 200) {
210
283
  throw this.APIError(response);
211
284
  }
212
285
  const match = parseInt(response.headers[dictionary_1.netaceaHeaders.match]);
213
286
  const mitigate = parseInt(response.headers[dictionary_1.netaceaHeaders.mitigate]);
214
287
  const captcha = parseInt(response.headers[dictionary_1.netaceaHeaders.captcha]);
215
- const setCookie = this.getCookiesFromHeaders(response.headers);
288
+ let mitataMaxAge = parseInt(response.headers[dictionary_1.netaceaHeaders.mitataExpiry]);
289
+ if (isNaN(mitataMaxAge)) {
290
+ mitataMaxAge = 86400;
291
+ }
292
+ const mitata = this.createMitata(clientIP, userId, match, mitigate, captcha);
293
+ const mitataCaptcha = this.getMitataCaptchaFromHeaders(response.headers);
294
+ const setCookie = [
295
+ mitata,
296
+ mitataCaptcha
297
+ ].filter(c => c !== undefined);
216
298
  const eventId = response.headers[dictionary_1.netaceaHeaders.eventId];
217
299
  return {
218
300
  status: response.status,
@@ -221,14 +303,12 @@ class NetaceaBase {
221
303
  captcha,
222
304
  setCookie,
223
305
  body: response.body,
224
- eventId
306
+ eventId,
307
+ mitataMaxAge
225
308
  };
226
309
  }
227
310
  buildCookieFromValues(cookieName, value, maxAge, path = '/') {
228
- if (value !== undefined && maxAge !== undefined) {
229
- return `${cookieName}=${value}; Max-Age=${maxAge}; Path=${path}`;
230
- }
231
- return undefined;
311
+ return `${cookieName}=${value}; Max-Age=${maxAge}; Path=${path}`;
232
312
  }
233
313
  buildCookieHeader(cookies) {
234
314
  let cookiestr = '';
@@ -242,16 +322,18 @@ class NetaceaBase {
242
322
  }
243
323
  return cookiestr;
244
324
  }
245
- async makeMitigateAPICall(netaceaCookie, clientIP, userAgent, captchaCookie) {
325
+ async makeMitigateAPICall(userId, clientIP, userAgent, captchaCookie) {
246
326
  const headers = {
247
327
  'X-Netacea-API-Key': this.apiKey,
248
328
  'X-Netacea-Client-IP': clientIP,
249
329
  'user-agent': userAgent,
250
330
  'cookie': this.buildCookieHeader({
251
- _mitata: netaceaCookie,
252
331
  _mitatacaptcha: captchaCookie
253
332
  })
254
333
  };
334
+ if (userId !== undefined) {
335
+ headers['X-Netacea-UserId'] = userId;
336
+ }
255
337
  if (this.captchaSiteKey !== undefined && this.captchaSecretKey !== undefined) {
256
338
  headers['X-Netacea-Captcha-Site-Key'] = this.captchaSiteKey;
257
339
  headers['X-Netacea-Captcha-Secret-Key'] = this.captchaSecretKey;
@@ -260,9 +342,10 @@ class NetaceaBase {
260
342
  host: this.mitigationServiceUrl,
261
343
  path: '/',
262
344
  headers,
263
- method: 'GET'
345
+ method: 'GET',
346
+ timeout: this.timeout
264
347
  });
265
- return this.getApiCallResponseFromResponse(res);
348
+ return this.getApiCallResponseFromResponse(res, userId, clientIP);
266
349
  }
267
350
  composeResult(body, setCookie, status, match, mitigate, captcha, isCaptchaPost, eventId) {
268
351
  const bestMitigation = this.findBestMitigation(match, mitigate, captcha, isCaptchaPost);
@@ -278,7 +361,7 @@ class NetaceaBase {
278
361
  dictionary_1.mitigationTypes.captchaPass
279
362
  ].includes(bestMitigation.mitigation)
280
363
  };
281
- if (this.mitigationType === NetaceaMitigationType.INJECT) {
364
+ if (this.mitigationType === NetaceaBase_enums_1.NetaceaMitigationType.INJECT) {
282
365
  const injectHeaders = {
283
366
  'x-netacea-match': bestMitigation.parts.match.toString(),
284
367
  'x-netacea-mitigate': bestMitigation.parts.mitigate.toString(),
@@ -312,7 +395,7 @@ class NetaceaBase {
312
395
  mitigation = bestCaptchaMitigation;
313
396
  }
314
397
  }
315
- if (this.mitigationType === NetaceaMitigationType.INJECT) {
398
+ if (this.mitigationType === NetaceaBase_enums_1.NetaceaMitigationType.INJECT) {
316
399
  mitigation = dictionary_1.mitigationTypes.none;
317
400
  }
318
401
  return {
@@ -348,35 +431,26 @@ class NetaceaBase {
348
431
  ? this.processCaptcha(args.mitata, args.clientIp, args.userAgent, await args.getBodyFn())
349
432
  : this.check(args.mitata, args.clientIp, args.userAgent, args.mitataCaptcha));
350
433
  }
351
- setWorkerCookie(userId, saltKey) {
352
- const expiryTime = Math.floor(Date.now() / 1000) + ONE_HOUR_IN_SECONDS;
353
- const userCookie = mitataCookie_1.createWorkerCookie(userId, expiryTime, saltKey);
354
- const mitataCookie = this.buildCookieFromValues('_mitata', userCookie, ONE_DAY_IN_SECONDS);
355
- const setCookie = [];
356
- if (mitataCookie !== undefined) {
357
- setCookie.push(mitataCookie);
358
- }
434
+ setIngestOnlyMitataCookie(userId) {
435
+ const mitataCookie = this.createMitata(mitataCookie_1.ingestIgnoredIpValue, userId, 0, 0, 0, ONE_DAY_IN_SECONDS);
359
436
  return {
360
437
  sessionStatus: '',
361
- setCookie
438
+ setCookie: [mitataCookie]
362
439
  };
363
440
  }
364
441
  processIngest(args) {
442
+ var _a;
365
443
  if (this.secretKey === undefined) {
366
444
  throw new Error('Secret key is required for ingest');
367
445
  }
368
446
  const cookies = this.getCookieHeader(args);
369
447
  const netaceaCookie = this.readCookie('_mitata', cookies);
370
- if (netaceaCookie === undefined) {
371
- return this.setWorkerCookie(undefined, this.secretKey);
372
- }
373
- const cookieInfo = mitataCookie_1.checkCookie(netaceaCookie, this.secretKey);
374
- if (!cookieInfo.valid) {
375
- return this.setWorkerCookie(undefined, this.secretKey);
448
+ const cookieInfo = mitataCookie_1.checkMitataCookie(netaceaCookie, mitataCookie_1.ingestIgnoredIpValue, this.secretKey);
449
+ if (!cookieInfo.isPrimaryHashValid) {
450
+ return this.setIngestOnlyMitataCookie(undefined);
376
451
  }
377
- if (cookieInfo.expired) {
378
- const mitata = mitataCookie_1.matchMitataCookie(netaceaCookie);
379
- return this.setWorkerCookie(mitata === null || mitata === void 0 ? void 0 : mitata.userId, this.secretKey);
452
+ if (cookieInfo.requiresReissue) {
453
+ return this.setIngestOnlyMitataCookie((_a = cookieInfo.mitata) === null || _a === void 0 ? void 0 : _a.userId);
380
454
  }
381
455
  return {
382
456
  sessionStatus: '',
@@ -1 +1 @@
1
- {"version":3,"file":"NetaceaBase.js","sourceRoot":"","sources":["../src/NetaceaBase.ts"],"names":[],"mappings":";;;AAAA,6CAIqB;AAErB,iDAIuB;AAEvB,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,CAAA;AACnC,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,EAAE,CAAA;AAoGnD,IAAY,qBA0BX;AA1BD,WAAY,qBAAqB;IAC/B;;;OAGG;IACH,8CAAqB,CAAA;IACrB;;;;;;;;;;OAUG;IACH,0CAAiB,CAAA;IACjB;;;;;;OAMG;IACH,0CAAiB,CAAA;AACnB,CAAC,EA1BW,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QA0BhC;AA4BD,MAAM,cAAc,GAAG,CAAC,CAAA;AACxB,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B,MAA8B,WAAW;IAiBvC,YAAa,EACX,MAAM,EACN,SAAS,EACT,OAAO,GAAG,cAAc,EACxB,OAAO,GAAG,cAAc,EACxB,oBAAoB,GAAG,iCAAiC,EACxD,gBAAgB,GAAG,4BAA4B,EAC/C,cAAc,GAAG,qBAAqB,CAAC,MAAM,EAC7C,cAAc,EACd,gBAAgB,EACA;QAChB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAA;QAChD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QAEpC,IAAI,cAAc,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAClE,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;gBAC9E,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;gBACpC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;aACzC;iBAAM;gBACL,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;aAC9D;SACF;QAED,IAAI,OAAO,GAAG,CAAC,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;SACjB;aAAM,IAAI,OAAO,GAAG,cAAc,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAA;SAC9B;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;QACD,IAAI,OAAO,GAAG,CAAC,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,cAAc,CAAA;SAC9B;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;IACH,CAAC;IAEM,KAAK,CAAC,aAAa,CAAE,IAAiB;QAC3C,QAAQ,IAAI,CAAC,cAAc,EAAE;YAC3B,KAAK,qBAAqB,CAAC,QAAQ;gBACjC,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAClC,KAAK,qBAAqB,CAAC,MAAM;gBAC/B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAChC,KAAK,qBAAqB,CAAC,MAAM;gBAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YACjC;gBACE,4EAA4E;gBAC5E,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,cAAc,iBAAiB,CAAC,CAAA;SAC1F;IACH,CAAC;IAES,UAAU,CAAE,UAAkB,EAAE,OAAkC;QAC1E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;YAC7C,OAAO,SAAS,CAAA;SACjB;QACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC,CAAA;QAC1D,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC7C,IAAI,UAAU,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QACxE,OAAO,SAAS,CAAA;IAClB,CAAC;IAES,KAAK,CAAC,UAAU,CAAE,IAAgB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,OAAO,GAAG;YACd,mBAAmB,EAAE,IAAI,CAAC,MAAM;YAChC,cAAc,EAAE,kBAAkB;SACnC,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACvD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;YACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;SACzB;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAE,OAAgC,EAAE,IAAY;QAC7E,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,gBAAgB;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG;YACT,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;IACJ,CAAC;IAES,eAAe,CAAE,EACzB,EAAE,EACF,SAAS,EACT,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,kBAAkB,EACP;QACX,MAAM,YAAY,GAAG,GAAG,MAAM,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAA;QACpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;QACzC,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,WAAW;YACxB,SAAS,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YAC7C,OAAO,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO;YACvC,mBAAmB,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,EAAE;YACvC,wBAAwB,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,EAAE;YAC7C,eAAe,EAAE,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE;YACtC,kBAAkB,EAAE,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,EAAE;SAC7C,CAAA;IACH,CAAC;IAES,KAAK,CAAC,KAAK,CAAE,aAAiC,EACtD,QAAgB,EAChB,SAAiB,EACjB,aAAsB;QAEtB,IAAI,MAAc,EAAE,KAAa,EAAE,QAAgB,EAAE,OAAe,EAClE,IAAwB,EAAE,SAAmB,EAAE,OAA2B,CAAA;QAC5E,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;SACtD;QACD,MAAM,UAAU,GAAG,0BAAW,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAC7D,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE;YAC3C,oCAAoC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;YAChG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YACtB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;YACpB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC1B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;YACxB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;YAClB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;YAC5B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;SACzB;aAAM;YACL,MAAM,GAAG,CAAC,CAAC,CAAA;YACX,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;YACxB,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;YAC9B,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;YAC5B,IAAI,GAAG,SAAS,CAAA;YAChB,SAAS,GAAG,EAAE,CAAA;SACf;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC9F,CAAC;IAEO,KAAK,CAAC,cAAc,CAAE,aAAiC,EAC7D,QAAgB,EAChB,SAAiB,EACjB,WAAgB;QAEhB,MAAM,EACJ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAClD,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QAClF,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACpF,CAAC;IAEO,qBAAqB,CAAE,OAAgC;QAC7D,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,2BAAc,CAAC,MAAM,CAAC,CAAA;QAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,YAAY,CAAC,CAAC,CAAA;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;QAChF,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;SAC7B;QAED,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,2BAAc,CAAC,aAAa,CAAC,EAAE;YAC/E,MAAM,aAAa,GAAG,OAAO,CAAC,2BAAc,CAAC,aAAa,CAAC,CAAA;YAC3D,MAAM,mBAAmB,GAAG,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,mBAAmB,CAAC,CAAC,CAAA;YACjF,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAA;YAC5G,IAAI,mBAAmB,KAAK,SAAS,EAAE;gBACrC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;aACpC;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAE,aAAiC,EACjE,QAAgB,EAChB,SAAiB,EACjB,WAAgB;QAEhB,MAAM,OAAO,GAA4B;YACvC,mBAAmB,EAAE,IAAI,CAAC,MAAM;YAChC,qBAAqB,EAAE,QAAQ;YAC/B,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBAC/B,OAAO,EAAE,aAAa;aACvB,CAAC;YACF,cAAc,EAAE,kDAAkD;SACnE,CAAA;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YAC5E,OAAO,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,cAAc,CAAA;YAC3D,OAAO,CAAC,8BAA8B,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAA;SAChE;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,oBAAoB;YAC/B,IAAI,EAAE,mBAAmB;YACzB,OAAO;YACP,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW;SAClB,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAA;IACjD,CAAC;IAEO,8BAA8B,CAAE,QAA6B;QACnE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;SAC9B;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QAClE,MAAM,SAAS,GAAa,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACxE,MAAM,OAAO,GAAuB,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,OAAO,CAAC,CAAA;QAC5E,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK;YACL,QAAQ;YACR,OAAO;YACP,SAAS;YACT,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO;SACR,CAAA;IACH,CAAC;IAEO,qBAAqB,CAAE,UAAkB,EAAE,KAAc,EAAE,MAAe,EAAE,IAAI,GAAG,GAAG;QAC5F,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;YAC/C,OAAO,GAAG,UAAU,IAAI,KAAK,aAAa,MAAM,UAAU,IAAI,EAAE,CAAA;SACjE;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,iBAAiB,CAAE,OAA4C;QACrE,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YACnC,IAAI,WAAW,KAAK,SAAS,EAAE;gBAC7B,SAAS,GAAG,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,IAAI,WAAW,EAAE,CAAA;gBAC9D,SAAS,GAAG,IAAI,CAAA;aACjB;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAE,aAAiC,EAClE,QAAgB,EAChB,SAAiB,EACjB,aAAiC;QAEjC,MAAM,OAAO,GAA4B;YACvC,mBAAmB,EAAE,IAAI,CAAC,MAAM;YAChC,qBAAqB,EAAE,QAAQ;YAC/B,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBAC/B,OAAO,EAAE,aAAa;gBACtB,cAAc,EAAE,aAAa;aAC9B,CAAC;SACH,CAAA;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YAC5E,OAAO,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,cAAc,CAAA;YAC3D,OAAO,CAAC,8BAA8B,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAA;SAChE;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,oBAAoB;YAC/B,IAAI,EAAE,GAAG;YACT,OAAO;YACP,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAA;IACjD,CAAC;IAEO,aAAa,CAAE,IAAwB,EAC7C,SAAmB,EACnB,MAAc,EACd,KAAa,EACb,QAAgB,EAChB,OAAe,EACf,aAAsB,EACtB,OAAgB;QAEhB,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;QACvF,MAAM,MAAM,GAA0B;YACpC,IAAI;YACJ,aAAa,EAAE,MAAM;YACrB,SAAS;YACT,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,SAAS,EAAE;gBACT,4BAAe,CAAC,KAAK;gBACrB,4BAAe,CAAC,OAAO;gBACvB,4BAAe,CAAC,WAAW;aAC5B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;SACtC,CAAA;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,qBAAqB,CAAC,MAAM,EAAE;YACxD,MAAM,aAAa,GAAkB;gBACnC,iBAAiB,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACxD,oBAAoB,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC9D,mBAAmB,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;aAC7D,CAAA;YACD,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,aAAa,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAA;aAC9C;YACD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAA;SACrC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAES,kBAAkB,CAAE,KAAa,EACzC,QAAgB,EAChB,OAAe,EACf,aAAsB;;QAEtB,MAAM,OAAO,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,OAAO,KAAK,CAAC,EAAE;gBACjB,OAAO,GAAG,CAAC,CAAA;aACZ;iBAAM,IAAI,OAAO,KAAK,CAAC,EAAE;gBACxB,OAAO,GAAG,CAAC,CAAA;aACZ;SACF;QAED,IAAI,aAAa,SAAG,qBAAQ,CAAC,KAAK,CAAC,mCAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAA;QACtD,aAAa,UAAI,wBAAW,CAAC,QAAQ,CAAC,mCAAI,OAAO,CAAA;QACjD,IAAI,UAAU,GAAG,8BAAiB,CAAC,QAAQ,CAAC,CAAA;QAC5C,IAAI,OAAO,KAAK,CAAC,EAAE;YACjB,aAAa,IAAI,GAAG,GAAG,OAAC,uBAAU,CAAC,OAAO,CAAC,mCAAI,OAAO,CAAC,CAAA;YACvD,MAAM,qBAAqB,GAAG,qCAAwB,CAAC,OAAO,CAAC,CAAA;YAC/D,IAAI,qBAAqB,KAAK,SAAS,EAAE;gBACvC,UAAU,GAAG,qBAAqB,CAAA;aACnC;SACF;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,qBAAqB,CAAC,MAAM,EAAE;YACxD,UAAU,GAAG,4BAAe,CAAC,IAAI,CAAA;SAClC;QACD,OAAO;YACL,aAAa;YACb,UAAU;YACV,KAAK,EAAE;gBACL,KAAK;gBACL,QAAQ;gBACR,OAAO;aACR;SACF,CAAA;IACH,CAAC;IAES,QAAQ,CAAE,QAAyB;QAC3C,IAAI,OAAO,GAAG,eAAe,CAAA;QAC7B,QAAQ,QAAQ,CAAC,MAAM,EAAE;YACvB,KAAK,GAAG;gBACN,OAAO,GAAG,qBAAqB,CAAA;gBAC/B,MAAK;YACP,KAAK,GAAG;gBACN,OAAO,GAAG,cAAc,CAAA;gBACxB,MAAK;YACP,KAAK,GAAG;gBACN,OAAO,GAAG,iBAAiB,CAAA;gBAC3B,MAAK;SACR;QACD,OAAO,IAAI,KAAK,CAAC,+BAA+B,OAAO,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACzF,CAAC;IAES,gBAAgB,CAAE,GAAW,EAAE,MAAc;QACrD,OAAO,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAA;IAC7E,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAE,IAAgC;QACtE,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACzF,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAC7E,CAAA;IACH,CAAC;IAES,eAAe,CAAE,MAA0B,EAAE,OAAe;QACpE,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,mBAAmB,CAAA;QAC9E,MAAM,UAAU,GAAG,iCAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAA;QAC1F,MAAM,SAAS,GAAa,EAAE,CAAA;QAE9B,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;SAC7B;QAED,OAAO;YACL,aAAa,EAAE,EAAE;YACjB,SAAS;SACV,CAAA;IACH,CAAC;IAES,aAAa,CAAE,IAAiB;QACxC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;SACrD;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAEzD,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;SACvD;QAED,MAAM,UAAU,GAAG,0BAAW,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAE7D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;SACvD;QAED,IAAI,UAAU,CAAC,OAAO,EAAE;YACtB,MAAM,MAAM,GAAG,gCAAiB,CAAC,aAAa,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;SAC5D;QAED,OAAO;YACL,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,EAAE;SACd,CAAA;IACH,CAAC;CACF;AAhcD,8BAgcC"}
1
+ {"version":3,"file":"NetaceaBase.js","sourceRoot":"","sources":["../src/NetaceaBase.ts"],"names":[],"mappings":";;AAcA,2DAI4B;AAC5B,6CAIqB;AACrB,iDAKuB;AACvB,0DAAmD;AAEnD,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,CAAA;AACnC,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,EAAE,CAAA;AAqCnD,SAAS,cAAc,CAAE,OAAe;IACtC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAA;AAChD,CAAC;AAED,SAAS,cAAc,CAAE,OAAe;IACtC,IAAI,OAAO,GAAG,CAAC,EAAE;QACf,OAAO,CAAC,CAAA;KACT;IACD,OAAO,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAA;AAC5D,CAAC;AAED,SAAS,YAAY,CAAE,KAAsB,EAAE,eAAuB,CAAC;IACrE,IAAI,KAAK,CAAC,KAAe,CAAC,EAAE;QAC1B,OAAO,YAAY,CAAA;KACpB;IACD,OAAO,QAAQ,CAAC,KAAe,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAA;AACxB,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B,SAAS,qBAAqB,CAC5B,cAAqC,EACrC,aAAiC;IAEjC,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,OAAO,cAAc,KAAK,yCAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAA;KAClF;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,MAA8B,WAAW;IAqBvC,kDAAkD;IAClD,YAAa,EACX,MAAM,EACN,SAAS,EACT,OAAO,GAAG,cAAc,EACxB,OAAO,GAAG,cAAc,EACxB,oBAAoB,GAAG,iCAAiC,EACxD,gBAAgB,GAAG,4BAA4B,EAC/C,cAAc,GAAG,yCAAqB,CAAC,MAAM,EAC7C,cAAc,EACd,gBAAgB,EAChB,UAAU,GAAG,qCAAiB,CAAC,IAAI,EACnC,OAAO,EACP,UAAU,EACV,yBAAyB,EACT;QAChB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAA;QAChD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,qCAAiB,CAAC,IAAI,CAAA;QACtD,IAAI,CAAC,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,qCAAiB,CAAC,EAAE,CAAA;QACpD,IAAI,IAAI,CAAC,UAAU,KAAK,qCAAiB,CAAC,OAAO,EAAE;YACjD,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,8DAA8D,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;aAC9F;iBAAM;gBACL,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAc,CAAC;oBAChC,GAAG,OAAO;oBACV,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAA;aACH;SACF;QACD,IAAI,cAAc,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAClE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;YACpC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;SACzC;QACD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAEtC,IAAI,CAAC,yBAAyB,GAAG,qBAAqB,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAA;IACnG,CAAC;IAEM,KAAK,CAAC,aAAa,CAAE,IAAiB;QAC3C,IAAI;YACF,QAAQ,IAAI,CAAC,cAAc,EAAE;gBAC3B,KAAK,yCAAqB,CAAC,QAAQ;oBACjC,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAClC,KAAK,yCAAqB,CAAC,MAAM;oBAC/B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAChC,KAAK,yCAAqB,CAAC,MAAM;oBAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;gBACjC;oBACE,4EAA4E;oBAC5E,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,cAAc,iBAAiB,CAAC,CAAA;aAC1F;SACF;QAAC,OAAO,CAAC,EAAE;YACV,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAA;YAC3C,OAAO;gBACL,aAAa,EAAE;oBACb,mBAAmB,EAAE,GAAG;oBACxB,iBAAiB,EAAE,GAAG;oBACtB,oBAAoB,EAAE,GAAG;iBAC1B;gBACD,aAAa,EAAE,EAAE;aAClB,CAAA;SACF;IACH,CAAC;IAES,UAAU,CAAE,UAAkB,EAAE,OAAkC;QAC1E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;YAC7C,OAAO,SAAS,CAAA;SACjB;QACD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC,CAAA;QAC1D,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC7C,IAAI,UAAU,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QACxE,OAAO,SAAS,CAAA;IAClB,CAAC;IAES,KAAK,CAAC,UAAU,CAAE,IAAgB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,UAAU,KAAK,qCAAiB,CAAC,OAAO,EAAE;YACjD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;gBAC9B,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAA;gBAC9E,OAAM;aACP;YACD,IAAI;gBACF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBACxB,GAAG,IAAI;oBACP,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;aACrB;YAAC,OAAO,CAAC,EAAE;gBACV,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;aACvD;SACF;aAAM;YACL,MAAM,OAAO,GAAG;gBACd,mBAAmB,EAAE,IAAI,CAAC,MAAM;gBAChC,cAAc,EAAE,kBAAkB;aACnC,CAAA;YACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YACvD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;gBACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;aACzB;SACF;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAE,OAAgC,EAAE,IAAuB;QACxF,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,gBAAgB;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG;YACT,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;IACJ,CAAC;IAEO,iBAAiB,CAAE,EACzB,EAAE,EACF,SAAS,EACT,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,kBAAkB,EACP;;QACX,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,kCAAkC;QAClC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACnB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;SAClB;QACD,IAAI,WAA+B,CAAA;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,WAAW,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;SACjC;QACD,MAAM,UAAU,GAAW,SAAS,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,MAAM,SAAG,gCAAiB,CAAC,YAAY,CAAC,0CAAE,MAAM,CAAA;QACtD,MAAM,GAAG,GAAa;YACpB,MAAM;YACN,MAAM;YACN,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC;YACrC,UAAU,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;YAChD,SAAS,EAAE,GAAG,MAAM,IAAI,UAAU,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,IAAI,QAAQ,EAAE;YACpE,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC;YACzC,kBAAkB,EAAE,eAAe;YACnC,qBAAqB,EAAE,kBAAkB;YACzC,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;YAC3D,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE;YACzB,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE;YAC7B,6CAA6C;YAC7C,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;YACtD,MAAM,EAAE,UAAU;YAClB,QAAQ;YACR,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,MAAM;SAClB,CAAA;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAEO,iBAAiB,CAAE,EACzB,EAAE,EACF,SAAS,EACT,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,kBAAkB,EACP;QACX,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,OAAO;YACL,OAAO,EAAE,GAAG,MAAM,IAAI,IAAI,IAAI,QAAQ,EAAE;YACxC,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,EAAE;YACpC,SAAS,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,EAAE;YAChC,OAAO,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO;YACvC,mBAAmB,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,EAAE;YACvC,wBAAwB,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,EAAE;YAC7C,eAAe,EAAE,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE;YACtC,kBAAkB,EAAE,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,EAAE;SAC7C,CAAA;IACH,CAAC;IAES,eAAe,CAAE,IAAgB;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;QAC7D,IAAI,IAAI,CAAC,UAAU,KAAK,qCAAiB,CAAC,EAAE,EAAE;YAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;SACpC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAES,KAAK,CAAC,KAAK,CACnB,aAAiC,EACjC,QAAgB,EAChB,SAAiB,EACjB,aAAsB;;QAEtB,IAAI,MAAc,EAAE,KAAa,EAAE,QAAgB,EAAE,OAAe,EAClE,IAAwB,EAAE,SAAmB,EAAE,OAA2B,CAAA;QAC5E,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;SACtD;QACD,MAAM,UAAU,GAAG,gCAAiB,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAC7E,IAAI,CAAC,UAAU,CAAC,kBAAkB,IAAI,UAAU,CAAC,eAAe,EAAE;YAChE,oCAAoC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,OAC3C,UAAU,CAAC,MAAM,0CAAE,MAAM,EACzB,QAAQ,EACR,SAAS,EACT,aAAa,CACd,CAAA;YAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YACtB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;YACpB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC1B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;YACxB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;YAClB,SAAS,GAAG;gBACV,IAAI,CAAC,YAAY,CAAC,QAAQ,QAAE,UAAU,CAAC,MAAM,0CAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC;aACtG,CAAA;YACD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;SACzB;aAAM;YACL,MAAM,GAAG,CAAC,CAAC,CAAA;YACX,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;YACxB,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;YAC9B,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;YAC5B,IAAI,GAAG,SAAS,CAAA;YAChB,SAAS,GAAG,EAAE,CAAA;SACf;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC9F,CAAC;IAEO,YAAY,CAClB,QAAgB,EAChB,MAA0B,EAC1B,KAAa,EACb,QAAgB,EAChB,OAAe,EACf,MAAM,GAAG,KAAK,EACd,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,yBAAyB;QAEvE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;SAC3D;QACD,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,iCAAkB,CACpC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,CAAC,SAAS,EACd,UAAU,CACX,CAAA;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACxE,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,aAAiC,EACjC,QAAgB,EAChB,SAAiB,EACjB,WAAgB;QAEhB,MAAM,EACJ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAClD,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QAClF,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACpF,CAAC;IAEO,2BAA2B,CAAE,OAAgC;QACnE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,2BAAc,CAAC,aAAa,CAAC,EAAE;YAC/E,MAAM,aAAa,GAAG,OAAO,CAAC,2BAAc,CAAC,aAAa,CAAC,CAAA;YAC3D,MAAM,mBAAmB,GAAG,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,mBAAmB,CAAC,CAAC,CAAA;YACjF,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CACpD,gBAAgB,EAChB,aAAa,EACb,mBAAmB,CACpB,CAAA;YAED,IAAI,mBAAmB,KAAK,SAAS,EAAE;gBACrC,OAAO,mBAAmB,CAAA;aAC3B;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,aAAiC,EACjC,QAAgB,EAChB,SAAiB,EACjB,WAAgB;QAEhB,MAAM,OAAO,GAA4B;YACvC,mBAAmB,EAAE,IAAI,CAAC,MAAM;YAChC,qBAAqB,EAAE,QAAQ;YAC/B,YAAY,EAAE,SAAS;YACvB,cAAc,EAAE,kDAAkD;SACnE,CAAA;QAED,MAAM,MAAM,GAAG,gCAAiB,CAAC,aAAa,CAAC,CAAA;QAC/C,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;SAC5C;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YAC5E,OAAO,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,cAAc,CAAA;YAC3D,OAAO,CAAC,8BAA8B,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAA;SAChE;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,oBAAoB;YAC/B,IAAI,EAAE,mBAAmB;YACzB,OAAO;YACP,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC3E,CAAC;IAEO,8BAA8B,CACpC,QAA6B,EAC7B,MAA0B,EAC1B,QAAgB;QAEhB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;SAC9B;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QAElE,IAAI,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,YAAY,CAAC,CAAC,CAAA;QAC1E,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;YACvB,YAAY,GAAG,KAAK,CAAA;SACrB;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAExE,MAAM,SAAS,GAAG;YAChB,MAAM;YACN,aAAa;SACd,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAa,CAAA;QAE1C,MAAM,OAAO,GAAuB,QAAQ,CAAC,OAAO,CAAC,2BAAc,CAAC,OAAO,CAAC,CAAA;QAC5E,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK;YACL,QAAQ;YACR,OAAO;YACP,SAAS;YACT,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO;YACP,YAAY;SACb,CAAA;IACH,CAAC;IAEO,qBAAqB,CAC3B,UAAkB,EAClB,KAAa,EACb,MAAc,EACd,IAAI,GAAG,GAAG;QAEV,OAAO,GAAG,UAAU,IAAI,KAAK,aAAa,MAAM,UAAU,IAAI,EAAE,CAAA;IAClE,CAAC;IAEO,iBAAiB,CAAE,OAA4C;QACrE,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YACnC,IAAI,WAAW,KAAK,SAAS,EAAE;gBAC7B,SAAS,GAAG,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,IAAI,WAAW,EAAE,CAAA;gBAC9D,SAAS,GAAG,IAAI,CAAA;aACjB;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,MAA0B,EAC1B,QAAgB,EAChB,SAAiB,EACjB,aAAiC;QAEjC,MAAM,OAAO,GAA4B;YACvC,mBAAmB,EAAE,IAAI,CAAC,MAAM;YAChC,qBAAqB,EAAE,QAAQ;YAC/B,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBAC/B,cAAc,EAAE,aAAa;aAC9B,CAAC;SACH,CAAA;QAED,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAA;SACrC;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YAC5E,OAAO,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,cAAc,CAAA;YAC3D,OAAO,CAAC,8BAA8B,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAA;SAChE;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,oBAAoB;YAC/B,IAAI,EAAE,GAAG;YACT,OAAO;YACP,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IACnE,CAAC;IAEO,aAAa,CAAE,IAAwB,EAC7C,SAAmB,EACnB,MAAc,EACd,KAAa,EACb,QAAgB,EAChB,OAAe,EACf,aAAsB,EACtB,OAAgB;QAEhB,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;QACvF,MAAM,MAAM,GAA0B;YACpC,IAAI;YACJ,aAAa,EAAE,MAAM;YACrB,SAAS;YACT,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,SAAS,EAAE;gBACT,4BAAe,CAAC,KAAK;gBACrB,4BAAe,CAAC,OAAO;gBACvB,4BAAe,CAAC,WAAW;aAC5B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;SACtC,CAAA;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,yCAAqB,CAAC,MAAM,EAAE;YACxD,MAAM,aAAa,GAAkB;gBACnC,iBAAiB,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACxD,oBAAoB,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC9D,mBAAmB,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;aAC7D,CAAA;YACD,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,aAAa,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAA;aAC9C;YACD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAA;SACrC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAES,kBAAkB,CAAE,KAAa,EACzC,QAAgB,EAChB,OAAe,EACf,aAAsB;;QAEtB,MAAM,OAAO,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,OAAO,KAAK,CAAC,EAAE;gBACjB,OAAO,GAAG,CAAC,CAAA;aACZ;iBAAM,IAAI,OAAO,KAAK,CAAC,EAAE;gBACxB,OAAO,GAAG,CAAC,CAAA;aACZ;SACF;QAED,IAAI,aAAa,SAAG,qBAAQ,CAAC,KAAK,CAAC,mCAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAA;QACtD,aAAa,UAAI,wBAAW,CAAC,QAAQ,CAAC,mCAAI,OAAO,CAAA;QACjD,IAAI,UAAU,GAAG,8BAAiB,CAAC,QAAQ,CAAC,CAAA;QAC5C,IAAI,OAAO,KAAK,CAAC,EAAE;YACjB,aAAa,IAAI,GAAG,GAAG,OAAC,uBAAU,CAAC,OAAO,CAAC,mCAAI,OAAO,CAAC,CAAA;YACvD,MAAM,qBAAqB,GAAG,qCAAwB,CAAC,OAAO,CAAC,CAAA;YAC/D,IAAI,qBAAqB,KAAK,SAAS,EAAE;gBACvC,UAAU,GAAG,qBAAqB,CAAA;aACnC;SACF;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,yCAAqB,CAAC,MAAM,EAAE;YACxD,UAAU,GAAG,4BAAe,CAAC,IAAI,CAAA;SAClC;QACD,OAAO;YACL,aAAa;YACb,UAAU;YACV,KAAK,EAAE;gBACL,KAAK;gBACL,QAAQ;gBACR,OAAO;aACR;SACF,CAAA;IACH,CAAC;IAES,QAAQ,CAAE,QAAyB;QAC3C,IAAI,OAAO,GAAG,eAAe,CAAA;QAC7B,QAAQ,QAAQ,CAAC,MAAM,EAAE;YACvB,KAAK,GAAG;gBACN,OAAO,GAAG,qBAAqB,CAAA;gBAC/B,MAAK;YACP,KAAK,GAAG;gBACN,OAAO,GAAG,cAAc,CAAA;gBACxB,MAAK;YACP,KAAK,GAAG;gBACN,OAAO,GAAG,iBAAiB,CAAA;gBAC3B,MAAK;SACR;QACD,OAAO,IAAI,KAAK,CAAC,+BAA+B,OAAO,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACzF,CAAC;IAES,gBAAgB,CAAE,GAAW,EAAE,MAAc;QACrD,OAAO,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAA;IAC7E,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAE,IAAgC;QACtE,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACzF,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAC7E,CAAA;IACH,CAAC;IAES,yBAAyB,CACjC,MAA0B;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CACpC,mCAAoB,EACpB,MAAM,EACN,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,kBAAkB,CACnB,CAAA;QAED,OAAO;YACL,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,CAAC,YAAY,CAAC;SAC1B,CAAA;IACH,CAAC;IAES,aAAa,CAAE,IAAiB;;QACxC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;SACrD;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAEzD,MAAM,UAAU,GAAG,gCAAiB,CAAC,aAAa,EAAE,mCAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QACzF,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;YAClC,OAAO,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAA;SACjD;QAED,IAAI,UAAU,CAAC,eAAe,EAAE;YAC9B,OAAO,IAAI,CAAC,yBAAyB,OAAC,UAAU,CAAC,MAAM,0CAAE,MAAM,CAAC,CAAA;SACjE;QAED,OAAO;YACL,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,EAAE;SACd,CAAA;IACH,CAAC;CACF;AArlBD,8BAqlBC"}
@@ -0,0 +1,112 @@
1
+ import { KinesisIngestConfigArgs } from '@netacea/kinesisingest';
2
+ import { NetaceaIngestType, NetaceaLogVersion, NetaceaMitigationType } from './NetaceaBase.enums';
3
+ export interface MakeRequestArgs {
4
+ host: string;
5
+ path: string;
6
+ headers: {
7
+ [key: string]: string;
8
+ };
9
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE';
10
+ body?: any;
11
+ timeout?: number;
12
+ }
13
+ export interface MakeRequestResponse {
14
+ status: number;
15
+ headers: {
16
+ [key: string]: string;
17
+ };
18
+ body?: any;
19
+ }
20
+ export interface NetaceaBaseArgs {
21
+ apiKey: string;
22
+ secretKey?: string;
23
+ captchaSiteKey?: string;
24
+ captchaSecretKey?: string;
25
+ timeout?: number;
26
+ retries?: number;
27
+ ingestServiceUrl?: string;
28
+ mitigationServiceUrl?: string;
29
+ mitigationType?: NetaceaMitigationType;
30
+ ingestType?: NetaceaIngestType;
31
+ kinesis?: KinesisIngestConfigArgs;
32
+ logVersion?: NetaceaLogVersion;
33
+ mitataCookieExpirySeconds?: number;
34
+ }
35
+ export interface InjectHeaders {
36
+ 'x-netacea-match': string;
37
+ 'x-netacea-mitigate': string;
38
+ 'x-netacea-captcha': string;
39
+ 'x-netacea-event-id'?: string;
40
+ }
41
+ export interface ComposeResultResponse {
42
+ body?: string;
43
+ apiCallStatus: number;
44
+ setCookie: string[];
45
+ sessionStatus: string;
46
+ mitigation: string;
47
+ mitigated: boolean;
48
+ injectHeaders?: InjectHeaders;
49
+ }
50
+ export interface IngestArgs {
51
+ ip: string;
52
+ userAgent: string;
53
+ status: string;
54
+ method: string;
55
+ path: string;
56
+ protocol: string;
57
+ referer: string;
58
+ bytesSent: string | number;
59
+ requestTime: string | number;
60
+ mitataCookie?: string;
61
+ sessionStatus?: string;
62
+ integrationType?: string;
63
+ integrationVersion?: string;
64
+ }
65
+ export interface WebLog {
66
+ Request: string;
67
+ TimeLocal: string;
68
+ RealIp: string;
69
+ UserAgent: string;
70
+ Status: string;
71
+ RequestTime: string;
72
+ BytesSent: string;
73
+ Referer: string;
74
+ NetaceaUserIdCookie: string;
75
+ NetaceaMitigationApplied: string;
76
+ IntegrationType?: string;
77
+ IntegrationVersion?: string;
78
+ }
79
+ export interface V2WebLog {
80
+ '@timestamp': string;
81
+ bc_type?: string;
82
+ bytes_sent: number;
83
+ client: string;
84
+ domain_name?: string;
85
+ domain_name_orig?: string;
86
+ hour: number;
87
+ integration_type?: string;
88
+ integration_version?: string;
89
+ method: string;
90
+ minute: number;
91
+ path: string;
92
+ protocol: string;
93
+ query?: string;
94
+ referrer?: string;
95
+ request: string;
96
+ request_time: number;
97
+ status: string;
98
+ user_agent: string;
99
+ user_id?: string;
100
+ }
101
+ export interface NetaceaResponseBase {
102
+ setCookie?: string[];
103
+ sessionStatus: string;
104
+ }
105
+ export interface MitigateResponse<T = any> extends NetaceaResponseBase {
106
+ response?: T;
107
+ }
108
+ export interface InjectResponse<T = any> extends MitigateResponse<T> {
109
+ injectHeaders: InjectHeaders | undefined;
110
+ response?: T | undefined;
111
+ }
112
+ export declare type NetaceaMitigationResponse<T> = MitigateResponse<T> | InjectResponse<T> | undefined;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=NetaceaBase.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetaceaBase.types.js","sourceRoot":"","sources":["../src/NetaceaBase.types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import NetaceaBase from './NetaceaBase';
2
- export { MakeRequestArgs, MakeRequestResponse, NetaceaBaseArgs, WebLog, MitigateResponse, InjectResponse, ComposeResultResponse, NetaceaMitigationType, NetaceaMitigationResponse, InjectHeaders, NetaceaResponseBase } from './NetaceaBase';
3
- export { MitataCookie, matchMitataCookie } from './mitataCookie';
2
+ export * from './NetaceaBase.enums';
3
+ export * from './NetaceaBase.types';
4
+ export { MitataCookie, CheckCookieResponse, matchMitataCookie, checkMitataCookie, createMitataCookie, hexSha256, ingestIgnoredIpValue } from './mitataCookie';
4
5
  export default NetaceaBase;
package/dist/index.js CHANGED
@@ -1,9 +1,23 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
2
12
  Object.defineProperty(exports, "__esModule", { value: true });
3
13
  const NetaceaBase_1 = require("./NetaceaBase");
4
- var NetaceaBase_2 = require("./NetaceaBase");
5
- Object.defineProperty(exports, "NetaceaMitigationType", { enumerable: true, get: function () { return NetaceaBase_2.NetaceaMitigationType; } });
14
+ __exportStar(require("./NetaceaBase.enums"), exports);
15
+ __exportStar(require("./NetaceaBase.types"), exports);
6
16
  var mitataCookie_1 = require("./mitataCookie");
7
17
  Object.defineProperty(exports, "matchMitataCookie", { enumerable: true, get: function () { return mitataCookie_1.matchMitataCookie; } });
18
+ Object.defineProperty(exports, "checkMitataCookie", { enumerable: true, get: function () { return mitataCookie_1.checkMitataCookie; } });
19
+ Object.defineProperty(exports, "createMitataCookie", { enumerable: true, get: function () { return mitataCookie_1.createMitataCookie; } });
20
+ Object.defineProperty(exports, "hexSha256", { enumerable: true, get: function () { return mitataCookie_1.hexSha256; } });
21
+ Object.defineProperty(exports, "ingestIgnoredIpValue", { enumerable: true, get: function () { return mitataCookie_1.ingestIgnoredIpValue; } });
8
22
  exports.default = NetaceaBase_1.default;
9
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,+CAAuC;AACvC,6CAYsB;AAJpB,oHAAA,qBAAqB,OAAA;AAMvB,+CAGuB;AADrB,iHAAA,iBAAiB,OAAA;AAGnB,kBAAe,qBAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAuC;AACvC,sDAAmC;AACnC,sDAAmC;AACnC,+CAQuB;AALrB,iHAAA,iBAAiB,OAAA;AACjB,iHAAA,iBAAiB,OAAA;AACjB,kHAAA,kBAAkB,OAAA;AAClB,yGAAA,SAAS,OAAA;AACT,oHAAA,oBAAoB,OAAA;AAGtB,kBAAe,qBAAW,CAAA"}
@@ -1,22 +1,26 @@
1
+ export declare const ingestIgnoredIpValue = "ignored";
1
2
  export interface MitataCookie {
2
3
  signature: string;
3
4
  expiry: string;
4
5
  userId: string;
6
+ ipHash: string;
5
7
  mitigationType: string;
6
8
  match: number;
7
9
  mitigate: number;
8
10
  captcha: number;
9
11
  }
10
- interface CheckCookieResponse {
11
- expired: boolean;
12
- valid: boolean;
12
+ export interface CheckCookieResponse {
13
+ mitata: MitataCookie | undefined;
14
+ requiresReissue: boolean;
15
+ isExpired: boolean;
16
+ isSameIP: boolean;
17
+ isPrimaryHashValid: boolean;
13
18
  match: number;
14
19
  mitigate: number;
15
20
  captcha: number;
16
21
  }
17
- export declare function matchMitataCookie(netaceaCookie: string): MitataCookie | undefined;
22
+ export declare function matchMitataCookie(netaceaCookie: string | undefined): MitataCookie | undefined;
18
23
  export declare function generateId(length?: number, charset?: string[]): string;
19
- export declare function createWorkerCookie(userId: string | undefined, expiryTime: number, saltKey: string): string;
24
+ export declare function createMitataCookie(clientIP: string, userId: string | undefined, expiryTime: number, saltKey: string, mitCode?: string): string;
20
25
  export declare function hexSha256(value: string, saltKey: string): string;
21
- export declare function checkCookie(netaceaCookie: string | undefined, secretKey: string): CheckCookieResponse;
22
- export {};
26
+ export declare function checkMitataCookie(netaceaCookie: string | undefined, clientIP: string, secretKey: string): CheckCookieResponse;
@@ -1,18 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkCookie = exports.hexSha256 = exports.createWorkerCookie = exports.generateId = exports.matchMitataCookie = void 0;
3
+ exports.checkMitataCookie = exports.hexSha256 = exports.createMitataCookie = exports.generateId = exports.matchMitataCookie = exports.ingestIgnoredIpValue = void 0;
4
4
  const crypto_1 = require("crypto");
5
5
  const dictionary_1 = require("./dictionary");
6
+ // Using clientIP has no advantage when setting cookies in Ingest Only mode.
7
+ // We therefore use a dummy value in place of the IP.
8
+ // This brings its own advantage in that if the integration is switched
9
+ // from INGEST to MITIGATE, then the INGEST cookie will be treated as expired
10
+ // & a new MITIGATE cookie will be set
11
+ exports.ingestIgnoredIpValue = 'ignored';
6
12
  const BASE_62_CHARSET = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
7
- const mitataCookieRegExp = /(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/((\d)(\d)(\d))/;
13
+ const mitataCookieRegExp = /^(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/((\d)(\d)(\d))$/;
8
14
  function matchMitataCookie(netaceaCookie) {
15
+ if (netaceaCookie === undefined) {
16
+ return undefined;
17
+ }
9
18
  const matches = netaceaCookie.match(mitataCookieRegExp);
10
19
  if (matches !== null && matches !== undefined) {
11
- const [, signature, expiry, userId, mitigationType, match, mitigate, captcha] = matches;
20
+ const [, signature, expiry, userId, ipHash, mitigationType, match, mitigate, captcha] = matches;
12
21
  return {
13
22
  signature,
14
23
  expiry,
15
24
  userId,
25
+ ipHash,
16
26
  mitigationType,
17
27
  match: parseInt(match),
18
28
  mitigate: parseInt(mitigate),
@@ -30,27 +40,35 @@ function generateId(length = 16, charset = BASE_62_CHARSET) {
30
40
  return `c${randomString}`;
31
41
  }
32
42
  exports.generateId = generateId;
33
- function createWorkerCookie(userId, expiryTime, saltKey) {
34
- const ingestCookieValue = '000';
43
+ function createMitataCookie(clientIP, userId, expiryTime, saltKey, mitCode = '000') {
35
44
  if (userId === undefined) {
36
45
  userId = generateId();
37
46
  }
38
- const originCookieValue = `${expiryTime}${dictionary_1.COOKIEDELIMITER}${userId}${dictionary_1.COOKIEDELIMITER}${ingestCookieValue}`;
47
+ const ipHash = hexSha256(clientIP + '|' + String(expiryTime), saltKey);
48
+ const originCookieValue = [
49
+ expiryTime,
50
+ userId,
51
+ ipHash,
52
+ mitCode
53
+ ].join(dictionary_1.COOKIEDELIMITER);
39
54
  const value = hexSha256(originCookieValue, saltKey);
40
55
  const cookieValue = `${value}${dictionary_1.COOKIEDELIMITER}${originCookieValue}`;
41
56
  return cookieValue;
42
57
  }
43
- exports.createWorkerCookie = createWorkerCookie;
58
+ exports.createMitataCookie = createMitataCookie;
44
59
  function hexSha256(value, saltKey) {
45
60
  const hash = crypto_1.createHmac('sha256', saltKey);
46
61
  hash.update(value);
47
62
  return Buffer.from(hash.digest('hex')).toString('base64');
48
63
  }
49
64
  exports.hexSha256 = hexSha256;
50
- function checkCookie(netaceaCookie, secretKey) {
65
+ function checkMitataCookie(netaceaCookie, clientIP, secretKey) {
51
66
  const defaultInvalidResponse = {
52
- expired: false,
53
- valid: false,
67
+ mitata: undefined,
68
+ requiresReissue: false,
69
+ isExpired: false,
70
+ isSameIP: false,
71
+ isPrimaryHashValid: false,
54
72
  captcha: 0,
55
73
  match: 0,
56
74
  mitigate: 0
@@ -62,16 +80,19 @@ function checkCookie(netaceaCookie, secretKey) {
62
80
  if (mitata !== undefined) {
63
81
  // Check cookie signature
64
82
  const mitSvcStringValue = [
65
- mitata.expiry, mitata.userId, mitata.mitigationType
83
+ mitata.expiry, mitata.userId, mitata.ipHash, mitata.mitigationType
66
84
  ].join(dictionary_1.COOKIEDELIMITER);
67
- const mitSvcHMAC = crypto_1.createHmac('sha256', secretKey)
68
- .update(mitSvcStringValue)
69
- .digest('hex');
70
- const expired = Math.floor(Date.now() / 1000) > parseInt(mitata.expiry);
71
- const valid = mitata.signature === Buffer.from(mitSvcHMAC).toString('base64');
85
+ const currentUnixTime = Math.floor(Date.now() / 1000);
86
+ const isExpired = parseInt(mitata.expiry) < currentUnixTime;
87
+ const currentIPHash = hexSha256(clientIP + '|' + mitata.expiry, secretKey);
88
+ const isSameIP = mitata.ipHash === currentIPHash;
89
+ const valid = mitata.signature === hexSha256(mitSvcStringValue, secretKey);
72
90
  return {
73
- expired,
74
- valid,
91
+ mitata,
92
+ requiresReissue: isExpired || !isSameIP,
93
+ isExpired,
94
+ isSameIP,
95
+ isPrimaryHashValid: valid,
75
96
  match: mitata.match,
76
97
  mitigate: mitata.mitigate,
77
98
  captcha: mitata.captcha
@@ -79,5 +100,5 @@ function checkCookie(netaceaCookie, secretKey) {
79
100
  }
80
101
  return defaultInvalidResponse;
81
102
  }
82
- exports.checkCookie = checkCookie;
103
+ exports.checkMitataCookie = checkMitataCookie;
83
104
  //# sourceMappingURL=mitataCookie.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mitataCookie.js","sourceRoot":"","sources":["../src/mitataCookie.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mitataCookie.js","sourceRoot":"","sources":["../src/mitataCookie.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netacea/netaceaintegrationbase",
3
- "version": "1.3.0",
3
+ "version": "1.8.0",
4
4
  "description": "Base package for Netacea CDN integrations.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -26,5 +26,8 @@
26
26
  "tsconfig-paths": "^3.9.0",
27
27
  "typescript": "^3.9.7"
28
28
  },
29
- "gitHead": "b339661007fe7344895517029d2101c4adf29927"
29
+ "dependencies": {
30
+ "@netacea/kinesisingest": "^1.2.0"
31
+ },
32
+ "gitHead": "6d74abf51f87a9b2cf94c4e0443df06eb5995bf5"
30
33
  }