@netacea/netaceaintegrationbase 1.5.0 → 1.8.1

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,57 @@
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.1](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.8.0...@netacea/netaceaintegrationbase@1.8.1) (2022-01-04)
7
+
8
+ **Note:** Version bump only for package @netacea/netaceaintegrationbase
9
+
10
+
11
+
12
+
13
+
14
+ # [1.8.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.7.0...@netacea/netaceaintegrationbase@1.8.0) (2021-12-08)
15
+
16
+
17
+ ### Features
18
+
19
+ * **integrations:** PR-16: Bumped versions ([418e08b](https://github.com/Netacea/JavascriptATAIntegration/commit/418e08bac751b0df6c946c1f1c46fb3af3da3612))
20
+ * **integrations:** PR-31: allow mitata expiry to be configured ([218f0d1](https://github.com/Netacea/JavascriptATAIntegration/commit/218f0d10d3f06d998e7aa18755f73b4977958814))
21
+ * **integrations:** PR-31: remove useFakeTimers() where not necessary ([6db65f7](https://github.com/Netacea/JavascriptATAIntegration/commit/6db65f7aae72b0688b640a37134e29da8fe4f760))
22
+ * **intgegrations:** PR-31: rename mitata.valid to isPrimaryHashValid ([08eddec](https://github.com/Netacea/JavascriptATAIntegration/commit/08eddece2a8abb1641e94f93fb9b3e9ac5cec6cd))
23
+
24
+
25
+
26
+
27
+
28
+ # [1.7.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.6.0...@netacea/netaceaintegrationbase@1.7.0) (2021-08-17)
29
+
30
+
31
+ ### Features
32
+
33
+ * **SCAL-31:** Fix fail open ([ea8be37](https://github.com/Netacea/JavascriptATAIntegration/commit/ea8be3798631c2fe8b585b7e63f4d40834f7ab6e))
34
+ * **SCAL-31:** Fix path to not use URL lib ([5dfa283](https://github.com/Netacea/JavascriptATAIntegration/commit/5dfa2836663a7527ff650e12cb1eeae1e5b499ad))
35
+ * **SCAL-31:** Fix query test and lint ([1070293](https://github.com/Netacea/JavascriptATAIntegration/commit/1070293263f1456aef51fea54af0d557330594df))
36
+ * **SCAL-31:** Fix unit test ([8cd60b2](https://github.com/Netacea/JavascriptATAIntegration/commit/8cd60b2a88c2909758bde82787542f9d5d0e6e08))
37
+ * **SCAL-31:** Undefined bctype when empty string ([da6d140](https://github.com/Netacea/JavascriptATAIntegration/commit/da6d140ef35bf374a839e388f0f77d515324959e))
38
+ * **SCAL-31:** v2 log format ([b937b85](https://github.com/Netacea/JavascriptATAIntegration/commit/b937b8570a02ddb0d65c7e3e2452fbde2d2ead97))
39
+
40
+
41
+
42
+
43
+
44
+ # [1.6.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.5.0...@netacea/netaceaintegrationbase@1.6.0) (2021-08-04)
45
+
46
+
47
+ ### Features
48
+
49
+ * **PB-1834:** Batched ingest ([b41a8c6](https://github.com/Netacea/JavascriptATAIntegration/commit/b41a8c6c26f7bf85c107a23bef24c75a82e6098b))
50
+ * **PB-1834:** Batched ingest using cloudfront fully working ([638b7e7](https://github.com/Netacea/JavascriptATAIntegration/commit/638b7e7e80888944c8bfaf7c2c4bae728eee1bd5))
51
+ * **PB-1834:** Removing only and skip and fixing tests ([ef5003f](https://github.com/Netacea/JavascriptATAIntegration/commit/ef5003f0499ea29c14b0dba880581b748f4e0905))
52
+
53
+
54
+
55
+
56
+
6
57
  # [1.5.0](https://github.com/Netacea/JavascriptATAIntegration/compare/@netacea/netaceaintegrationbase@1.3.0...@netacea/netaceaintegrationbase@1.5.0) (2021-07-21)
7
58
 
8
59
 
@@ -1,54 +1,11 @@
1
- import NetaceaKinesis, { KinesisIngestConfigArgs } from '@netacea/kinesisingest';
2
- export interface MakeRequestArgs {
3
- host: string;
4
- path: string;
5
- headers: {
6
- [key: string]: string;
7
- };
8
- method: 'GET' | 'POST' | 'PUT' | 'DELETE';
9
- body?: any;
10
- timeout?: number;
11
- }
12
- export interface MakeRequestResponse {
13
- status: number;
14
- headers: {
15
- [key: string]: string;
16
- };
17
- body?: any;
18
- }
19
- export interface NetaceaBaseArgs {
20
- apiKey: string;
21
- secretKey?: string;
22
- captchaSiteKey?: string;
23
- captchaSecretKey?: string;
24
- timeout?: number;
25
- retries?: number;
26
- ingestServiceUrl?: string;
27
- mitigationServiceUrl?: string;
28
- mitigationType?: NetaceaMitigationType;
29
- ingestType?: NetaceaIngestType;
30
- kinesis?: KinesisIngestConfigArgs;
31
- }
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';
32
4
  interface FindBestMitigationResponse {
33
5
  sessionStatus: string;
34
6
  mitigation: string;
35
7
  parts: NetaceaParts;
36
8
  }
37
- export interface InjectHeaders {
38
- 'x-netacea-match': string;
39
- 'x-netacea-mitigate': string;
40
- 'x-netacea-captcha': string;
41
- 'x-netacea-event-id'?: string;
42
- }
43
- export interface ComposeResultResponse {
44
- body?: string;
45
- apiCallStatus: number;
46
- setCookie: string[];
47
- sessionStatus: string;
48
- mitigation: string;
49
- mitigated: boolean;
50
- injectHeaders?: InjectHeaders;
51
- }
52
9
  interface NetaceaParts {
53
10
  match: number;
54
11
  mitigate: number;
@@ -58,70 +15,6 @@ interface APICallResponse {
58
15
  status: number;
59
16
  body?: any;
60
17
  }
61
- export interface IngestArgs {
62
- ip: string;
63
- userAgent: string;
64
- status: string;
65
- method: string;
66
- path: string;
67
- protocol: string;
68
- referer: string;
69
- bytesSent: string;
70
- requestTime: string;
71
- mitataCookie?: string;
72
- sessionStatus?: string;
73
- integrationType?: string;
74
- integrationVersion?: string;
75
- }
76
- export interface WebLog {
77
- Request: string;
78
- TimeLocal: string;
79
- RealIp: string;
80
- UserAgent: string;
81
- Status: string;
82
- RequestTime: string;
83
- BytesSent: string;
84
- Referer: string;
85
- NetaceaUserIdCookie: string;
86
- NetaceaMitigationApplied: string;
87
- IntegrationType?: string;
88
- IntegrationVersion?: string;
89
- }
90
- export declare enum NetaceaIngestType {
91
- HTTP = "HTTP",
92
- KINESIS = "KINESIS"
93
- }
94
- export declare enum NetaceaMitigationType {
95
- /**
96
- * Run Netacea with mitigation mode enabled.
97
- * This will serve Captcha pages and Forbidden pages when instructed to do so
98
- */
99
- MITIGATE = "MITIGATE",
100
- /**
101
- * Run Netacea with Inject mode enabled.
102
- * The end-user will only receive a cookie.
103
- * The origin server will receive 3 headers,
104
- *
105
- * 'x-netacea-match' indicating what was matched (nothing(0), ua(1), ip(2), etc...)
106
- *
107
- * 'x-netacea-mitigate' indicating what action would've be taken (nothing (0), block(1), allow(2), etc...)
108
- *
109
- * 'x-netacea-captcha' indicating what captcha action would've been taken
110
- */
111
- INJECT = "INJECT",
112
- /**
113
- * Run Netacea with Ingest only mode
114
- * No cookies will be set for the end user.
115
- * No mitigations will be applied.
116
- *
117
- * **It's recommended to start in this mode!**
118
- */
119
- INGEST = "INGEST"
120
- }
121
- export interface NetaceaResponseBase {
122
- setCookie?: string[];
123
- sessionStatus: string;
124
- }
125
18
  interface ProcessMitigateRequestArgs {
126
19
  url: string;
127
20
  method: string;
@@ -131,15 +24,6 @@ interface ProcessMitigateRequestArgs {
131
24
  userAgent: string;
132
25
  getBodyFn: () => Promise<any>;
133
26
  }
134
- export interface MitigateResponse<T = any> extends NetaceaResponseBase {
135
- response?: T;
136
- }
137
- export interface InjectResponse<T = any> extends MitigateResponse<T> {
138
- injectHeaders: InjectHeaders | undefined;
139
- response?: T | undefined;
140
- }
141
- export declare type NetaceaMitigationResponse<T> = MitigateResponse<T> | InjectResponse<T> | undefined;
142
- export declare type NetaceaMakeRequest = (args: MakeRequestArgs) => Promise<MakeRequestResponse>;
143
27
  export default abstract class NetaceaBase<RequestArgs = any, Response = any> {
144
28
  protected apiKey: string;
145
29
  protected secretKey?: string;
@@ -148,6 +32,8 @@ export default abstract class NetaceaBase<RequestArgs = any, Response = any> {
148
32
  protected captchaSiteKey?: string;
149
33
  protected captchaSecretKey?: string;
150
34
  protected ingestType: NetaceaIngestType;
35
+ protected readonly logVersion: NetaceaLogVersion;
36
+ protected mitataCookieExpirySeconds: number;
151
37
  private readonly mitigationServiceUrl;
152
38
  private readonly ingestServiceUrl;
153
39
  protected readonly mitigationType: NetaceaMitigationType;
@@ -157,15 +43,18 @@ export default abstract class NetaceaBase<RequestArgs = any, Response = any> {
157
43
  protected readonly kinesis?: NetaceaKinesis;
158
44
  abstract ingest(...args: any[]): Promise<any>;
159
45
  abstract getCookieHeader(args: RequestArgs): string | null | undefined;
160
- constructor({ apiKey, secretKey, timeout, retries, mitigationServiceUrl, ingestServiceUrl, mitigationType, captchaSiteKey, captchaSecretKey, ingestType, kinesis }: NetaceaBaseArgs);
46
+ constructor({ apiKey, secretKey, timeout, retries, mitigationServiceUrl, ingestServiceUrl, mitigationType, captchaSiteKey, captchaSecretKey, ingestType, kinesis, logVersion, mitataCookieExpirySeconds }: NetaceaBaseArgs);
161
47
  runMitigation(args: RequestArgs): Promise<NetaceaMitigationResponse<Response>>;
162
48
  protected readCookie(cookieName: string, cookies: string | null | undefined): string | undefined;
163
49
  protected callIngest(args: IngestArgs): Promise<void>;
164
50
  private makeIngestApiCall;
165
- 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;
166
54
  protected check(netaceaCookie: string | undefined, clientIP: string, userAgent: string, captchaCookie?: string): Promise<ComposeResultResponse>;
55
+ private createMitata;
167
56
  private processCaptcha;
168
- private getCookiesFromHeaders;
57
+ private getMitataCaptchaFromHeaders;
169
58
  private makeCaptchaAPICall;
170
59
  private getApiCallResponseFromResponse;
171
60
  private buildCookieFromValues;
@@ -176,7 +65,7 @@ export default abstract class NetaceaBase<RequestArgs = any, Response = any> {
176
65
  protected APIError(response: APICallResponse): Error;
177
66
  protected isUrlCaptchaPost(url: string, method: string): boolean;
178
67
  protected processMitigateRequest(args: ProcessMitigateRequestArgs): Promise<ComposeResultResponse>;
179
- protected setWorkerCookie(userId: string | undefined, saltKey: string): NetaceaResponseBase;
68
+ protected setIngestOnlyMitataCookie(userId: string | undefined): NetaceaResponseBase;
180
69
  protected processIngest(args: RequestArgs): NetaceaResponseBase;
181
70
  }
182
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,44 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NetaceaMitigationType = exports.NetaceaIngestType = 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
6
  const kinesisingest_1 = require("@netacea/kinesisingest");
7
7
  const ONE_HOUR_IN_SECONDS = 60 * 60;
8
8
  const ONE_DAY_IN_SECONDS = ONE_HOUR_IN_SECONDS * 24;
9
- var NetaceaIngestType;
10
- (function (NetaceaIngestType) {
11
- NetaceaIngestType["HTTP"] = "HTTP";
12
- NetaceaIngestType["KINESIS"] = "KINESIS";
13
- })(NetaceaIngestType = exports.NetaceaIngestType || (exports.NetaceaIngestType = {}));
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
9
  function correctTimeout(timeout) {
43
10
  return timeout <= 0 ? defaultTimeout : timeout;
44
11
  }
@@ -48,11 +15,23 @@ function correctRetries(retries) {
48
15
  }
49
16
  return retries > maximumRetries ? maximumRetries : retries;
50
17
  }
18
+ function safeParseInt(value, defaultValue = 0) {
19
+ if (isNaN(value)) {
20
+ return defaultValue;
21
+ }
22
+ return parseInt(value);
23
+ }
51
24
  const maximumRetries = 5;
52
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
+ }
53
32
  class NetaceaBase {
54
33
  // eslint-disable-next-line max-lines-per-function
55
- constructor({ apiKey, secretKey, timeout = defaultTimeout, retries = maximumRetries, mitigationServiceUrl = 'https://mitigations.netacea.net', ingestServiceUrl = 'https://ingest.netacea.net', mitigationType = NetaceaMitigationType.INGEST, captchaSiteKey, captchaSecretKey, ingestType = NetaceaIngestType.HTTP, kinesis }) {
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 }) {
56
35
  if (apiKey === null || apiKey === undefined) {
57
36
  throw new Error('apiKey is a required parameter');
58
37
  }
@@ -61,8 +40,9 @@ class NetaceaBase {
61
40
  this.mitigationServiceUrl = mitigationServiceUrl;
62
41
  this.ingestServiceUrl = ingestServiceUrl;
63
42
  this.mitigationType = mitigationType;
64
- this.ingestType = ingestType !== null && ingestType !== void 0 ? ingestType : NetaceaIngestType.HTTP;
65
- if (this.ingestType === NetaceaIngestType.KINESIS) {
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) {
66
46
  if (kinesis === undefined) {
67
47
  // eslint-disable-next-line no-console
68
48
  console.warn(`NETACEA WARN: no kinesis args provided, when ingestType is ${this.ingestType}`);
@@ -75,29 +55,38 @@ class NetaceaBase {
75
55
  }
76
56
  }
77
57
  if (captchaSiteKey !== undefined || captchaSecretKey !== undefined) {
78
- if (typeof captchaSiteKey === 'string' && typeof captchaSecretKey === 'string') {
79
- this.captchaSiteKey = captchaSiteKey;
80
- this.captchaSecretKey = captchaSecretKey;
81
- }
82
- else {
83
- // eslint-disable-next-line no-console
84
- console.warn('NETACEA WARN: failed to configure captcha keys');
85
- }
58
+ this.captchaSiteKey = captchaSiteKey;
59
+ this.captchaSecretKey = captchaSecretKey;
86
60
  }
87
61
  this.timeout = correctTimeout(timeout);
88
62
  this.retries = correctRetries(retries);
63
+ this.mitataCookieExpirySeconds = configureMitataExpiry(mitigationType, mitataCookieExpirySeconds);
89
64
  }
90
65
  async runMitigation(args) {
91
- switch (this.mitigationType) {
92
- case NetaceaMitigationType.MITIGATE:
93
- return await this.mitigate(args);
94
- case NetaceaMitigationType.INJECT:
95
- return await this.inject(args);
96
- case NetaceaMitigationType.INGEST:
97
- return this.processIngest(args);
98
- default:
99
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
100
- 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
+ };
101
90
  }
102
91
  }
103
92
  readCookie(cookieName, cookies) {
@@ -112,7 +101,7 @@ class NetaceaBase {
112
101
  }
113
102
  async callIngest(args) {
114
103
  const body = this.constructWebLog(args);
115
- if (this.ingestType === NetaceaIngestType.KINESIS) {
104
+ if (this.ingestType === NetaceaBase_enums_1.NetaceaIngestType.KINESIS) {
116
105
  if (this.kinesis === undefined) {
117
106
  // eslint-disable-next-line no-console
118
107
  console.error('Netacea Error: Unable to log as Kinesis has not been defined.');
@@ -150,18 +139,53 @@ class NetaceaBase {
150
139
  timeout: this.timeout
151
140
  });
152
141
  }
153
- constructWebLog({ ip, userAgent, status, method, path, protocol, referer, bytesSent, requestTime, mitataCookie, sessionStatus, integrationType, integrationVersion }) {
154
- const requestValue = `${method} ${path} ${protocol}`;
155
- const timeLocal = new Date();
156
- 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();
157
181
  return {
158
- Request: requestValue,
182
+ Request: `${method} ${path} ${protocol}`,
159
183
  TimeLocal: timestamp,
160
184
  RealIp: ip,
161
185
  UserAgent: userAgent,
162
186
  Status: status,
163
- RequestTime: requestTime,
164
- 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(),
165
189
  Referer: referer === '' ? '-' : referer,
166
190
  NetaceaUserIdCookie: mitataCookie !== null && mitataCookie !== void 0 ? mitataCookie : '',
167
191
  NetaceaMitigationApplied: sessionStatus !== null && sessionStatus !== void 0 ? sessionStatus : '',
@@ -169,21 +193,31 @@ class NetaceaBase {
169
193
  IntegrationVersion: integrationVersion !== null && integrationVersion !== void 0 ? integrationVersion : ''
170
194
  };
171
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
+ }
172
203
  async check(netaceaCookie, clientIP, userAgent, captchaCookie) {
204
+ var _a, _b;
173
205
  let status, match, mitigate, captcha, body, setCookie, eventId;
174
206
  if (this.secretKey === undefined) {
175
207
  throw new Error('Secret key is required to mitigate');
176
208
  }
177
- const cookieInfo = mitataCookie_1.checkCookie(netaceaCookie, this.secretKey);
178
- if (!cookieInfo.valid || cookieInfo.expired) {
209
+ const cookieInfo = mitataCookie_1.checkMitataCookie(netaceaCookie, clientIP, this.secretKey);
210
+ if (!cookieInfo.isPrimaryHashValid || cookieInfo.requiresReissue) {
179
211
  // Get latest mitigation information
180
- 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);
181
213
  status = result.status;
182
214
  match = result.match;
183
215
  mitigate = result.mitigate;
184
216
  captcha = result.captcha;
185
217
  body = result.body;
186
- 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
+ ];
187
221
  eventId = result.eventId;
188
222
  }
189
223
  else {
@@ -196,38 +230,44 @@ class NetaceaBase {
196
230
  }
197
231
  return this.composeResult(body, setCookie, status, match, mitigate, captcha, false, eventId);
198
232
  }
233
+ createMitata(clientIP, userId, match, mitigate, captcha, maxAge = 86400, expiry = undefined) {
234
+ // serve, fail, cookiefail
235
+ const isCaptchaServe = [1, 3, 5].includes(captcha);
236
+ const expiryDelta = isCaptchaServe ? -this.mitataCookieExpirySeconds : this.mitataCookieExpirySeconds;
237
+ const mitataExpiry = expiry !== null && expiry !== void 0 ? expiry : Math.floor(Date.now() / 1000) + expiryDelta;
238
+ if (this.secretKey === undefined) {
239
+ throw new Error('Cannot build cookie without secret key.');
240
+ }
241
+ const mitataCode = [match, mitigate, captcha].join('');
242
+ const mitataValue = mitataCookie_1.createMitataCookie(clientIP, userId, mitataExpiry, this.secretKey, mitataCode);
243
+ return this.buildCookieFromValues('_mitata', mitataValue, maxAge, '/');
244
+ }
199
245
  async processCaptcha(netaceaCookie, clientIP, userAgent, captchaData) {
200
246
  const { status, match, mitigate, captcha, body, setCookie } = await this.makeCaptchaAPICall(netaceaCookie, clientIP, userAgent, captchaData);
201
247
  return this.composeResult(body, setCookie, status, match, mitigate, captcha, true);
202
248
  }
203
- getCookiesFromHeaders(headers) {
204
- const setCookie = [];
205
- const mitata = headers[dictionary_1.netaceaHeaders.mitata];
206
- const mitataExpiry = parseInt(headers[dictionary_1.netaceaHeaders.mitataExpiry]);
207
- const mitataCookie = this.buildCookieFromValues('_mitata', mitata, mitataExpiry);
208
- if (mitataCookie !== undefined) {
209
- setCookie.push(mitataCookie);
210
- }
249
+ getMitataCaptchaFromHeaders(headers) {
211
250
  if (Object.prototype.hasOwnProperty.call(headers, dictionary_1.netaceaHeaders.mitataCaptcha)) {
212
251
  const mitataCaptcha = headers[dictionary_1.netaceaHeaders.mitataCaptcha];
213
252
  const mitataCaptchaExpiry = parseInt(headers[dictionary_1.netaceaHeaders.mitataCaptchaExpiry]);
214
253
  const mitataCaptchaCookie = this.buildCookieFromValues('_mitatacaptcha', mitataCaptcha, mitataCaptchaExpiry);
215
254
  if (mitataCaptchaCookie !== undefined) {
216
- setCookie.push(mitataCaptchaCookie);
255
+ return mitataCaptchaCookie;
217
256
  }
218
257
  }
219
- return setCookie;
258
+ return undefined;
220
259
  }
221
260
  async makeCaptchaAPICall(netaceaCookie, clientIP, userAgent, captchaData) {
222
261
  const headers = {
223
262
  'X-Netacea-API-Key': this.apiKey,
224
263
  'X-Netacea-Client-IP': clientIP,
225
264
  'user-agent': userAgent,
226
- 'cookie': this.buildCookieHeader({
227
- _mitata: netaceaCookie
228
- }),
229
265
  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
230
266
  };
267
+ const mitata = mitataCookie_1.matchMitataCookie(netaceaCookie);
268
+ if (mitata !== undefined) {
269
+ headers['X-Netacea-UserId'] = mitata.userId;
270
+ }
231
271
  if (this.captchaSiteKey !== undefined && this.captchaSecretKey !== undefined) {
232
272
  headers['X-Netacea-Captcha-Site-Key'] = this.captchaSiteKey;
233
273
  headers['X-Netacea-Captcha-Secret-Key'] = this.captchaSecretKey;
@@ -240,16 +280,25 @@ class NetaceaBase {
240
280
  body: captchaData,
241
281
  timeout: this.timeout
242
282
  });
243
- return this.getApiCallResponseFromResponse(res);
283
+ return this.getApiCallResponseFromResponse(res, mitata === null || mitata === void 0 ? void 0 : mitata.userId, clientIP);
244
284
  }
245
- getApiCallResponseFromResponse(response) {
285
+ getApiCallResponseFromResponse(response, userId, clientIP) {
246
286
  if (response.status !== 200) {
247
287
  throw this.APIError(response);
248
288
  }
249
289
  const match = parseInt(response.headers[dictionary_1.netaceaHeaders.match]);
250
290
  const mitigate = parseInt(response.headers[dictionary_1.netaceaHeaders.mitigate]);
251
291
  const captcha = parseInt(response.headers[dictionary_1.netaceaHeaders.captcha]);
252
- const setCookie = this.getCookiesFromHeaders(response.headers);
292
+ let mitataMaxAge = parseInt(response.headers[dictionary_1.netaceaHeaders.mitataExpiry]);
293
+ if (isNaN(mitataMaxAge)) {
294
+ mitataMaxAge = 86400;
295
+ }
296
+ const mitata = this.createMitata(clientIP, userId, match, mitigate, captcha);
297
+ const mitataCaptcha = this.getMitataCaptchaFromHeaders(response.headers);
298
+ const setCookie = [
299
+ mitata,
300
+ mitataCaptcha
301
+ ].filter(c => c !== undefined);
253
302
  const eventId = response.headers[dictionary_1.netaceaHeaders.eventId];
254
303
  return {
255
304
  status: response.status,
@@ -258,14 +307,12 @@ class NetaceaBase {
258
307
  captcha,
259
308
  setCookie,
260
309
  body: response.body,
261
- eventId
310
+ eventId,
311
+ mitataMaxAge
262
312
  };
263
313
  }
264
314
  buildCookieFromValues(cookieName, value, maxAge, path = '/') {
265
- if (value !== undefined && maxAge !== undefined) {
266
- return `${cookieName}=${value}; Max-Age=${maxAge}; Path=${path}`;
267
- }
268
- return undefined;
315
+ return `${cookieName}=${value}; Max-Age=${maxAge}; Path=${path}`;
269
316
  }
270
317
  buildCookieHeader(cookies) {
271
318
  let cookiestr = '';
@@ -279,16 +326,18 @@ class NetaceaBase {
279
326
  }
280
327
  return cookiestr;
281
328
  }
282
- async makeMitigateAPICall(netaceaCookie, clientIP, userAgent, captchaCookie) {
329
+ async makeMitigateAPICall(userId, clientIP, userAgent, captchaCookie) {
283
330
  const headers = {
284
331
  'X-Netacea-API-Key': this.apiKey,
285
332
  'X-Netacea-Client-IP': clientIP,
286
333
  'user-agent': userAgent,
287
334
  'cookie': this.buildCookieHeader({
288
- _mitata: netaceaCookie,
289
335
  _mitatacaptcha: captchaCookie
290
336
  })
291
337
  };
338
+ if (userId !== undefined) {
339
+ headers['X-Netacea-UserId'] = userId;
340
+ }
292
341
  if (this.captchaSiteKey !== undefined && this.captchaSecretKey !== undefined) {
293
342
  headers['X-Netacea-Captcha-Site-Key'] = this.captchaSiteKey;
294
343
  headers['X-Netacea-Captcha-Secret-Key'] = this.captchaSecretKey;
@@ -300,7 +349,7 @@ class NetaceaBase {
300
349
  method: 'GET',
301
350
  timeout: this.timeout
302
351
  });
303
- return this.getApiCallResponseFromResponse(res);
352
+ return this.getApiCallResponseFromResponse(res, userId, clientIP);
304
353
  }
305
354
  composeResult(body, setCookie, status, match, mitigate, captcha, isCaptchaPost, eventId) {
306
355
  const bestMitigation = this.findBestMitigation(match, mitigate, captcha, isCaptchaPost);
@@ -316,7 +365,7 @@ class NetaceaBase {
316
365
  dictionary_1.mitigationTypes.captchaPass
317
366
  ].includes(bestMitigation.mitigation)
318
367
  };
319
- if (this.mitigationType === NetaceaMitigationType.INJECT) {
368
+ if (this.mitigationType === NetaceaBase_enums_1.NetaceaMitigationType.INJECT) {
320
369
  const injectHeaders = {
321
370
  'x-netacea-match': bestMitigation.parts.match.toString(),
322
371
  'x-netacea-mitigate': bestMitigation.parts.mitigate.toString(),
@@ -350,7 +399,7 @@ class NetaceaBase {
350
399
  mitigation = bestCaptchaMitigation;
351
400
  }
352
401
  }
353
- if (this.mitigationType === NetaceaMitigationType.INJECT) {
402
+ if (this.mitigationType === NetaceaBase_enums_1.NetaceaMitigationType.INJECT) {
354
403
  mitigation = dictionary_1.mitigationTypes.none;
355
404
  }
356
405
  return {
@@ -386,35 +435,26 @@ class NetaceaBase {
386
435
  ? this.processCaptcha(args.mitata, args.clientIp, args.userAgent, await args.getBodyFn())
387
436
  : this.check(args.mitata, args.clientIp, args.userAgent, args.mitataCaptcha));
388
437
  }
389
- setWorkerCookie(userId, saltKey) {
390
- const expiryTime = Math.floor(Date.now() / 1000) + ONE_HOUR_IN_SECONDS;
391
- const userCookie = mitataCookie_1.createWorkerCookie(userId, expiryTime, saltKey);
392
- const mitataCookie = this.buildCookieFromValues('_mitata', userCookie, ONE_DAY_IN_SECONDS);
393
- const setCookie = [];
394
- if (mitataCookie !== undefined) {
395
- setCookie.push(mitataCookie);
396
- }
438
+ setIngestOnlyMitataCookie(userId) {
439
+ const mitataCookie = this.createMitata(mitataCookie_1.ingestIgnoredIpValue, userId, 0, 0, 0, ONE_DAY_IN_SECONDS);
397
440
  return {
398
441
  sessionStatus: '',
399
- setCookie
442
+ setCookie: [mitataCookie]
400
443
  };
401
444
  }
402
445
  processIngest(args) {
446
+ var _a;
403
447
  if (this.secretKey === undefined) {
404
448
  throw new Error('Secret key is required for ingest');
405
449
  }
406
450
  const cookies = this.getCookieHeader(args);
407
451
  const netaceaCookie = this.readCookie('_mitata', cookies);
408
- if (netaceaCookie === undefined) {
409
- return this.setWorkerCookie(undefined, this.secretKey);
410
- }
411
- const cookieInfo = mitataCookie_1.checkCookie(netaceaCookie, this.secretKey);
412
- if (!cookieInfo.valid) {
413
- return this.setWorkerCookie(undefined, this.secretKey);
452
+ const cookieInfo = mitataCookie_1.checkMitataCookie(netaceaCookie, mitataCookie_1.ingestIgnoredIpValue, this.secretKey);
453
+ if (!cookieInfo.isPrimaryHashValid) {
454
+ return this.setIngestOnlyMitataCookie(undefined);
414
455
  }
415
- if (cookieInfo.expired) {
416
- const mitata = mitataCookie_1.matchMitataCookie(netaceaCookie);
417
- return this.setWorkerCookie(mitata === null || mitata === void 0 ? void 0 : mitata.userId, this.secretKey);
456
+ if (cookieInfo.requiresReissue) {
457
+ return this.setIngestOnlyMitataCookie((_a = cookieInfo.mitata) === null || _a === void 0 ? void 0 : _a.userId);
418
458
  }
419
459
  return {
420
460
  sessionStatus: '',
@@ -1 +1 @@
1
- {"version":3,"file":"NetaceaBase.js","sourceRoot":"","sources":["../src/NetaceaBase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NetaceaBase.js","sourceRoot":"","sources":["../src/NetaceaBase.ts"],"names":[],"mappings":"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"}
@@ -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, NetaceaIngestType, NetaceaMakeRequest } 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,10 +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; } });
6
- Object.defineProperty(exports, "NetaceaIngestType", { enumerable: true, get: function () { return NetaceaBase_2.NetaceaIngestType; } });
14
+ __exportStar(require("./NetaceaBase.enums"), exports);
15
+ __exportStar(require("./NetaceaBase.types"), exports);
7
16
  var mitataCookie_1 = require("./mitataCookie");
8
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; } });
9
22
  exports.default = NetaceaBase_1.default;
10
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,6CAcsB;AANpB,oHAAA,qBAAqB,OAAA;AAIrB,gHAAA,iBAAiB,OAAA;AAInB,+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,27 @@
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
+ shouldExpire: boolean;
17
+ isSameIP: boolean;
18
+ isPrimaryHashValid: boolean;
13
19
  match: number;
14
20
  mitigate: number;
15
21
  captcha: number;
16
22
  }
17
- export declare function matchMitataCookie(netaceaCookie: string): MitataCookie | undefined;
23
+ export declare function matchMitataCookie(netaceaCookie: string | undefined): MitataCookie | undefined;
18
24
  export declare function generateId(length?: number, charset?: string[]): string;
19
- export declare function createWorkerCookie(userId: string | undefined, expiryTime: number, saltKey: string): string;
25
+ export declare function createMitataCookie(clientIP: string, userId: string | undefined, expiryTime: number, saltKey: string, mitCode?: string): string;
20
26
  export declare function hexSha256(value: string, saltKey: string): string;
21
- export declare function checkCookie(netaceaCookie: string | undefined, secretKey: string): CheckCookieResponse;
22
- export {};
27
+ 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,36 @@ 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
+ shouldExpire: false,
71
+ isSameIP: false,
72
+ isPrimaryHashValid: false,
54
73
  captcha: 0,
55
74
  match: 0,
56
75
  mitigate: 0
@@ -62,16 +81,22 @@ function checkCookie(netaceaCookie, secretKey) {
62
81
  if (mitata !== undefined) {
63
82
  // Check cookie signature
64
83
  const mitSvcStringValue = [
65
- mitata.expiry, mitata.userId, mitata.mitigationType
84
+ mitata.expiry, mitata.userId, mitata.ipHash, mitata.mitigationType
66
85
  ].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');
86
+ const currentUnixTime = Math.floor(Date.now() / 1000);
87
+ const isExpired = parseInt(mitata.expiry) < currentUnixTime;
88
+ // serve, fail, cookiefail
89
+ const shouldExpire = [1, 3, 5].includes(mitata.captcha);
90
+ const currentIPHash = hexSha256(clientIP + '|' + mitata.expiry, secretKey);
91
+ const isSameIP = mitata.ipHash === currentIPHash;
92
+ const valid = mitata.signature === hexSha256(mitSvcStringValue, secretKey);
72
93
  return {
73
- expired,
74
- valid,
94
+ mitata,
95
+ requiresReissue: isExpired || !isSameIP,
96
+ isExpired,
97
+ shouldExpire,
98
+ isSameIP,
99
+ isPrimaryHashValid: valid,
75
100
  match: mitata.match,
76
101
  mitigate: mitata.mitigate,
77
102
  captcha: mitata.captcha
@@ -79,5 +104,5 @@ function checkCookie(netaceaCookie, secretKey) {
79
104
  }
80
105
  return defaultInvalidResponse;
81
106
  }
82
- exports.checkCookie = checkCookie;
107
+ exports.checkMitataCookie = checkMitataCookie;
83
108
  //# 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.5.0",
3
+ "version": "1.8.1",
4
4
  "description": "Base package for Netacea CDN integrations.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -27,7 +27,7 @@
27
27
  "typescript": "^3.9.7"
28
28
  },
29
29
  "dependencies": {
30
- "@netacea/kinesisingest": "^1.1.0"
30
+ "@netacea/kinesisingest": "^1.2.0"
31
31
  },
32
- "gitHead": "5c362b71c0191e5e5ab5dc36d374e651cc0641a6"
32
+ "gitHead": "09872268284b4550ac50a49e04d0a670fa030ca0"
33
33
  }