@netacea/akamai 5.0.49 → 5.0.51
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 +16 -0
- package/dist/package.json +3 -3
- package/dist/src/AkamaiV1.d.ts +1 -1
- package/dist/src/AkamaiV2.js +16 -0
- package/dist/src/AkamaiV2.js.map +1 -1
- package/dist/src/CachedEncryption.d.ts +5 -2
- package/dist/src/CachedEncryption.js +11 -0
- package/dist/src/CachedEncryption.js.map +1 -1
- package/dist/src/ConfigLoader.d.ts +1 -6
- package/dist/src/ConfigLoader.js +8 -1
- package/dist/src/ConfigLoader.js.map +1 -1
- package/dist/src/captchaGet.d.ts +4 -0
- package/dist/src/captchaGet.js +63 -0
- package/dist/src/captchaGet.js.map +1 -0
- package/dist/src/errors/APIError.d.ts +4 -0
- package/dist/src/errors/APIError.js +24 -0
- package/dist/src/errors/APIError.js.map +1 -0
- package/dist/src/helpers/buildCookieFromValues.d.ts +2 -0
- package/dist/src/helpers/buildCookieFromValues.js +13 -0
- package/dist/src/helpers/buildCookieFromValues.js.map +1 -0
- package/dist/src/helpers/buildCookieHeader.d.ts +3 -0
- package/dist/src/helpers/buildCookieHeader.js +7 -0
- package/dist/src/helpers/buildCookieHeader.js.map +1 -0
- package/dist/src/helpers/constructWebLog.d.ts +3 -0
- package/dist/src/helpers/constructWebLog.js +60 -0
- package/dist/src/helpers/constructWebLog.js.map +1 -0
- package/dist/src/helpers/createMitata.d.ts +13 -0
- package/dist/src/helpers/createMitata.js +15 -0
- package/dist/src/helpers/createMitata.js.map +1 -0
- package/dist/src/helpers/createProtoMitata.d.ts +1 -0
- package/dist/src/helpers/createProtoMitata.js +13 -0
- package/dist/src/helpers/createProtoMitata.js.map +1 -0
- package/dist/src/helpers/encryptionCheck.d.ts +1 -0
- package/dist/src/helpers/encryptionCheck.js +5 -0
- package/dist/src/helpers/encryptionCheck.js.map +1 -0
- package/dist/src/helpers/findBestMitigation.d.ts +3 -0
- package/dist/src/helpers/findBestMitigation.js +35 -0
- package/dist/src/helpers/findBestMitigation.js.map +1 -0
- package/dist/src/helpers/getHeaderValueOrDefault.d.ts +3 -0
- package/dist/src/helpers/getHeaderValueOrDefault.js +5 -0
- package/dist/src/helpers/getHeaderValueOrDefault.js.map +1 -0
- package/dist/src/helpers/getMitataCaptchaFromHeaders.d.ts +4 -0
- package/dist/src/helpers/getMitataCaptchaFromHeaders.js +14 -0
- package/dist/src/helpers/getMitataCaptchaFromHeaders.js.map +1 -0
- package/dist/src/helpers/getProtoMitataFromRequestVar.d.ts +3 -0
- package/dist/src/helpers/getProtoMitataFromRequestVar.js +13 -0
- package/dist/src/helpers/getProtoMitataFromRequestVar.js.map +1 -0
- package/dist/src/helpers/getQuery.d.ts +1 -0
- package/dist/src/helpers/getQuery.js +11 -0
- package/dist/src/helpers/getQuery.js.map +1 -0
- package/dist/src/helpers/getResponseHeaders.d.ts +5 -0
- package/dist/src/helpers/getResponseHeaders.js +9 -0
- package/dist/src/helpers/getResponseHeaders.js.map +1 -0
- package/dist/src/helpers/getVariable.d.ts +2 -0
- package/dist/src/helpers/getVariable.js +4 -0
- package/dist/src/helpers/getVariable.js.map +1 -0
- package/dist/src/helpers/logToDataStream.d.ts +3 -0
- package/dist/src/helpers/logToDataStream.js +31 -0
- package/dist/src/helpers/logToDataStream.js.map +1 -0
- package/dist/src/helpers/makeRequest.d.ts +3 -0
- package/dist/src/helpers/makeRequest.js +38 -0
- package/dist/src/helpers/makeRequest.js.map +1 -0
- package/dist/src/helpers/readCookie.d.ts +2 -0
- package/dist/src/helpers/readCookie.js +28 -0
- package/dist/src/helpers/readCookie.js.map +1 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/ingest/ingest.d.ts +3 -0
- package/dist/src/ingest/ingest.js +47 -0
- package/dist/src/ingest/ingest.js.map +1 -0
- package/dist/src/ingest/makeIngestAPICall.d.ts +6 -0
- package/dist/src/ingest/makeIngestAPICall.js +28 -0
- package/dist/src/ingest/makeIngestAPICall.js.map +1 -0
- package/dist/src/mitigation/getApiCallResponseFromResponse.d.ts +3 -0
- package/dist/src/mitigation/getApiCallResponseFromResponse.js +43 -0
- package/dist/src/mitigation/getApiCallResponseFromResponse.js.map +1 -0
- package/dist/src/mitigation/mitigationApiCall.d.ts +15 -0
- package/dist/src/mitigation/mitigationApiCall.js +45 -0
- package/dist/src/mitigation/mitigationApiCall.js.map +1 -0
- package/dist/src/netaceaPaths.d.ts +1 -0
- package/dist/src/netaceaPaths.js +6 -0
- package/dist/src/netaceaPaths.js.map +1 -1
- package/dist/src/types.d.ts +57 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getProtoMitataFromRequestVar.js","sourceRoot":"","sources":["../../../src/helpers/getProtoMitataFromRequestVar.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAC1C,OAAgC,EAChC,MAAoC;IAEpC,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;IAG7E,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,KAAK,EAAE,EAAE;QAC/D,OAAO,SAAS,CAAA;KACjB;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;KACrC;IAAC,MAAM;QACN,OAAO,SAAS,CAAA;KACjB;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getQuery(queryStr: string, key: string): string | undefined;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function getQuery(queryStr, key) {
|
|
2
|
+
const queries = queryStr.split('&');
|
|
3
|
+
for (const query of queries) {
|
|
4
|
+
const [queryKey, queryValue] = query.split('=');
|
|
5
|
+
if (queryKey === key) {
|
|
6
|
+
return queryValue;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=getQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getQuery.js","sourceRoot":"","sources":["../../../src/helpers/getQuery.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAE,QAAgB,EAAE,GAAW;IACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC/C,IAAI,QAAQ,KAAK,GAAG,EAAE;YACpB,OAAO,UAAU,CAAA;SAClB;KACF;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function getResponseHeaders(response) {
|
|
2
|
+
const responseHeadersEntries = Object.entries(response.getHeaders());
|
|
3
|
+
const responseHeaders = {};
|
|
4
|
+
for (const [key, value] of responseHeadersEntries) {
|
|
5
|
+
responseHeaders[key] = value[0];
|
|
6
|
+
}
|
|
7
|
+
return responseHeaders;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=getResponseHeaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getResponseHeaders.js","sourceRoot":"","sources":["../../../src/helpers/getResponseHeaders.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAE,QAAsB;IACxD,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;IACpE,MAAM,eAAe,GAA4B,EAAE,CAAA;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,sBAAsB,EAAE;QACjD,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;KAChC;IACD,OAAO,eAAe,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getVariable.js","sourceRoot":"","sources":["../../../src/helpers/getVariable.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAE,OAAgC,EAAE,QAAgB,EAAE,YAAY,GAAG,EAAE;IACzG,OAAO,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAA;AACtD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { logger } from 'log';
|
|
2
|
+
import { matchMitataCookie } from '@netacea/netaceaintegrationbase';
|
|
3
|
+
import { getHeaderValueOrDefault } from './getHeaderValueOrDefault';
|
|
4
|
+
import { readCookie } from './readCookie';
|
|
5
|
+
import { isUrlCaptchaPost } from '../netaceaPaths';
|
|
6
|
+
import { findBestMitigation } from './findBestMitigation';
|
|
7
|
+
import { getProtoMitataFromRequestVar } from './getProtoMitataFromRequestVar';
|
|
8
|
+
import * as pack from '../../package.json';
|
|
9
|
+
export async function logToDataStream(request, config) {
|
|
10
|
+
try {
|
|
11
|
+
const protoMitata = getProtoMitataFromRequestVar(request, config);
|
|
12
|
+
const cookieHeader = getHeaderValueOrDefault(request, 'cookie');
|
|
13
|
+
const mitataCookie = await readCookie(config.netaceaCookieName, cookieHeader, config);
|
|
14
|
+
const cookieInfo = matchMitataCookie(mitataCookie);
|
|
15
|
+
const userId = protoMitata?.userId ?? cookieInfo?.userId ?? '';
|
|
16
|
+
const match = protoMitata?.match ?? cookieInfo?.match ?? 0;
|
|
17
|
+
const mitigate = protoMitata?.mitigate ?? cookieInfo?.mitigate ?? 0;
|
|
18
|
+
const captcha = protoMitata?.captcha ?? cookieInfo?.captcha ?? 0;
|
|
19
|
+
const { sessionStatus } = findBestMitigation(match, mitigate, captcha, isUrlCaptchaPost(request.path, request.method), config);
|
|
20
|
+
const dataStreamLogValue = [
|
|
21
|
+
userId,
|
|
22
|
+
sessionStatus,
|
|
23
|
+
pack.version
|
|
24
|
+
].join(';');
|
|
25
|
+
request.setVariable('PMUSER_NETACEA_DS2_CUSTOM_FIELD', dataStreamLogValue);
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
logger.log(`Error setting PMUSER_NETACEA_DS2_CUSTOM_FIELD ${e}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=logToDataStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logToDataStream.js","sourceRoot":"","sources":["../../../src/helpers/logToDataStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAgC,EAChC,MAAoC;IAGpC,IAAI;QACF,MAAM,WAAW,GAAG,4BAA4B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACjE,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC/D,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,iBAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;QAC/F,MAAM,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAElD,MAAM,MAAM,GAAG,WAAW,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,EAAE,CAAA;QAC9D,MAAM,KAAK,GAAG,WAAW,EAAE,KAAK,IAAI,UAAU,EAAE,KAAK,IAAI,CAAC,CAAA;QAC1D,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,IAAI,UAAU,EAAE,QAAQ,IAAI,CAAC,CAAA;QACnE,MAAM,OAAO,GAAG,WAAW,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,IAAI,CAAC,CAAA;QAEhE,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAC1C,KAAK,EACL,QAAQ,EACR,OAAO,EACP,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAC9C,MAAM,CACP,CAAA;QAGD,MAAM,kBAAkB,GAAG;YACzB,MAAM;YACN,aAAa;YACb,IAAI,CAAC,OAAO;SACb,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEX,OAAO,CAAC,WAAW,CAAC,iCAAiC,EAAE,kBAAkB,CAAC,CAAA;KAC3E;IAAC,OAAO,CAAC,EAAE;QAEV,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,EAAE,CAAC,CAAA;KACjE;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { httpRequest } from 'http-request';
|
|
2
|
+
import { getResponseHeaders } from './getResponseHeaders';
|
|
3
|
+
export async function makeRequest(args, config) {
|
|
4
|
+
const { enableMitigationProxyPass, enableIngestProxyPass } = config;
|
|
5
|
+
const { method, path, headers, body, timeout } = args;
|
|
6
|
+
let { host } = args;
|
|
7
|
+
const isMitigationsProxyPassRequest = (enableMitigationProxyPass &&
|
|
8
|
+
host.includes('mitigations'));
|
|
9
|
+
const isIngestProxyPassRequest = (enableIngestProxyPass &&
|
|
10
|
+
host.includes('ingest'));
|
|
11
|
+
let url;
|
|
12
|
+
if (isMitigationsProxyPassRequest) {
|
|
13
|
+
headers['X-Netacea-ProxyPass'] = 'mitigation';
|
|
14
|
+
url = path;
|
|
15
|
+
}
|
|
16
|
+
else if (isIngestProxyPassRequest) {
|
|
17
|
+
headers['X-Netacea-ProxyPass'] = 'ingest';
|
|
18
|
+
url = path;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
if (host.endsWith('/')) {
|
|
22
|
+
host = host.slice(0, -1);
|
|
23
|
+
}
|
|
24
|
+
url = host + path;
|
|
25
|
+
}
|
|
26
|
+
const response = await httpRequest(url, {
|
|
27
|
+
body,
|
|
28
|
+
headers,
|
|
29
|
+
method,
|
|
30
|
+
timeout: timeout ?? 3000
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
status: response.status,
|
|
34
|
+
body: await response.text(),
|
|
35
|
+
headers: getResponseHeaders(response)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=makeRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeRequest.js","sourceRoot":"","sources":["../../../src/helpers/makeRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAIzD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAqB,EACrB,MAAoC;IAEpC,MAAM,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAA;IACnE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IACrD,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IAKnB,MAAM,6BAA6B,GAAG,CACpC,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC7B,CAAA;IACD,MAAM,wBAAwB,GAAG,CAC/B,qBAAqB;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxB,CAAA;IAED,IAAI,GAAG,CAAA;IACP,IAAI,6BAA6B,EAAE;QACjC,OAAO,CAAC,qBAAqB,CAAC,GAAG,YAAY,CAAA;QAC7C,GAAG,GAAG,IAAI,CAAA;KACX;SAAM,IAAI,wBAAwB,EAAE;QACnC,OAAO,CAAC,qBAAqB,CAAC,GAAG,QAAQ,CAAA;QACzC,GAAG,GAAG,IAAI,CAAA;KACX;SAAM;QAEL,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;SACzB;QAED,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;KAClB;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI;QACJ,OAAO;QACP,MAAM;QACN,OAAO,EAAE,OAAO,IAAI,IAAI;KACzB,CAAC,CAAA;IAEF,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;QAC3B,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC;KACtC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { CachedEncryption } from '../CachedEncryption';
|
|
2
|
+
import { isJweEncrypted } from './encryptionCheck';
|
|
3
|
+
export async function readCookie(cookieName, cookies, config) {
|
|
4
|
+
if (cookies === null || cookies === undefined) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
if (typeof cookies === 'string') {
|
|
8
|
+
return await readCookie(cookieName, cookies.split(';'), config);
|
|
9
|
+
}
|
|
10
|
+
const valuePrefix = `${cookieName}=`;
|
|
11
|
+
for (const cookie of cookies) {
|
|
12
|
+
const trimmedCookie = cookie.split(';')[0].trimStart();
|
|
13
|
+
if (trimmedCookie.startsWith(valuePrefix)) {
|
|
14
|
+
const cookieValue = trimmedCookie.slice(valuePrefix.length);
|
|
15
|
+
if (isJweEncrypted(cookieName)) {
|
|
16
|
+
try {
|
|
17
|
+
return await CachedEncryption.getInstance(config).decrypt(cookieValue);
|
|
18
|
+
}
|
|
19
|
+
catch (_e) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return cookieValue;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=readCookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readCookie.js","sourceRoot":"","sources":["../../../src/helpers/readCookie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,OAA6C,EAC7C,MAAoC;IAEpC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;QAC7C,OAAO,SAAS,CAAA;KACjB;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO,MAAM,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;KAChE;IAED,MAAM,WAAW,GAAG,GAAG,UAAU,GAAG,CAAA;IACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAE5B,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;QAEtD,IAAI,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YACzC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAE3D,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE;gBAC9B,IAAI;oBACF,OAAO,MAAM,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;iBACvE;gBAAC,OAAO,EAAE,EAAE;oBACX,OAAO,SAAS,CAAA;iBACjB;aACF;YAED,OAAO,WAAW,CAAA;SACnB;KACF;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Akamai from './AkamaiV2';
|
|
2
|
-
export {
|
|
2
|
+
export type { AkamaiHttpRequestFn, AkamaiHttpRequestOptions, AkamaiMitigateResponse, InjectedDependencies, Logger, ProtoMitata, RequestArgs, Response, ResponseProperties, UpstreamMitHeaders, AkamaiWorkerConfig } from './types';
|
|
3
|
+
export { LegacyAkamaiConstructorArgs as AkamaiConstructorArgs } from './AkamaiV1';
|
|
3
4
|
export { NetaceaMitigationType, InjectResponse } from '@netacea/netaceaintegrationbase';
|
|
4
5
|
export default Akamai;
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,YAAY,CAAA;AAe/B,OAAO,EAAE,qBAAqB,EAAkB,MAAM,iCAAiC,CAAA;AACvF,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { getHeaderValueOrDefault } from '../helpers/getHeaderValueOrDefault';
|
|
2
|
+
import { readCookie } from '../helpers/readCookie';
|
|
3
|
+
import { matchMitataCookie } from '@netacea/netaceaintegrationbase';
|
|
4
|
+
import { isUrlCaptchaPost } from '../netaceaPaths';
|
|
5
|
+
import { findBestMitigation } from '../helpers/findBestMitigation';
|
|
6
|
+
import { callIngest } from './makeIngestAPICall';
|
|
7
|
+
import * as pack from '../../package.json';
|
|
8
|
+
import { getVariableOrDefault } from '../helpers/getVariable';
|
|
9
|
+
import { logger } from 'log';
|
|
10
|
+
export async function ingest(request, response, config) {
|
|
11
|
+
const setCookie = response.getHeader('set-cookie') ?? [];
|
|
12
|
+
const cookieString = setCookie.length !== 0
|
|
13
|
+
? setCookie?.join('; ')
|
|
14
|
+
: getHeaderValueOrDefault(request, 'cookie');
|
|
15
|
+
let mitata = await readCookie(config.netaceaCookieName, cookieString, config) ?? '';
|
|
16
|
+
if (mitata === undefined || mitata === '') {
|
|
17
|
+
const cookieString = getHeaderValueOrDefault(request, 'cookie');
|
|
18
|
+
mitata = await readCookie(config.netaceaCookieName, cookieString, config) ?? '';
|
|
19
|
+
}
|
|
20
|
+
const { match, mitigate, captcha } = matchMitataCookie(mitata) ?? {
|
|
21
|
+
match: 0,
|
|
22
|
+
mitigate: 0,
|
|
23
|
+
captcha: 0
|
|
24
|
+
};
|
|
25
|
+
const { sessionStatus } = findBestMitigation(match, mitigate, captcha, isUrlCaptchaPost(request.path, request.method), config);
|
|
26
|
+
try {
|
|
27
|
+
callIngest({
|
|
28
|
+
bytesSent: getHeaderValueOrDefault(response, 'content-length', '0'),
|
|
29
|
+
ip: getVariableOrDefault(request, 'PMUSER_CLIENT_IP', ''),
|
|
30
|
+
method: request.method,
|
|
31
|
+
path: request.url,
|
|
32
|
+
protocol: getHeaderValueOrDefault(request, 'protocol', 'HTTP/1.1'),
|
|
33
|
+
referer: getHeaderValueOrDefault(request, 'referer', ''),
|
|
34
|
+
requestTime: '0',
|
|
35
|
+
sessionStatus,
|
|
36
|
+
status: String(response.status),
|
|
37
|
+
userAgent: getHeaderValueOrDefault(request, 'user-agent', '-'),
|
|
38
|
+
mitataCookie: mitata,
|
|
39
|
+
integrationType: pack.name.replace('@netacea/', ''),
|
|
40
|
+
integrationVersion: pack.version
|
|
41
|
+
}, config);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
logger.log('Error in callIngest():', e);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ingest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/ingest/ingest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAG5B,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAAgC,EAChC,QAAiC,EACjC,MAAoC;IAEpC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;IACxD,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC;QACzC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC9C,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,iBAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7F,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE;QACzC,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC/D,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,iBAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;KAC1F;IAED,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,OAAO,EACR,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI;QAC/B,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;KACX,CAAA;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAC1C,KAAK,EACL,QAAQ,EACR,OAAO,EACP,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAC9C,MAAM,CACP,CAAA;IAED,IAAI;QAEF,UAAU,CAAC;YACT,SAAS,EAAE,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC;YACnE,EAAE,EAAE,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC;YACzD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,GAAG;YACjB,QAAQ,EAAE,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;YAClE,OAAO,EAAE,uBAAuB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC;YACxD,WAAW,EAAE,GAAG;YAChB,aAAa;YACb,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/B,SAAS,EAAE,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC;YAC9D,YAAY,EAAE,MAAM;YACpB,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACnD,kBAAkB,EAAE,IAAI,CAAC,OAAO;SACjC,EAAE,MAAM,CAAC,CAAA;KACX;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;KACxC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AkamaiWorkerConfig } from '../types';
|
|
2
|
+
import type { WebLog, V2WebLog, IngestArgs } from '@netacea/netaceaintegrationbase';
|
|
3
|
+
export declare function callIngest(args: IngestArgs, config: Readonly<AkamaiWorkerConfig>): Promise<void>;
|
|
4
|
+
export declare function makeIngestApiCall(headers: {
|
|
5
|
+
[key: string]: string;
|
|
6
|
+
}, body: WebLog | V2WebLog, config: Readonly<AkamaiWorkerConfig>): Promise<any>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { makeRequest } from '../helpers/makeRequest';
|
|
2
|
+
import { constructWebLog } from '../helpers/constructWebLog';
|
|
3
|
+
import { NetaceaIngestType } from '@netacea/netaceaintegrationbase';
|
|
4
|
+
import { APIError } from '../errors/APIError';
|
|
5
|
+
export async function callIngest(args, config) {
|
|
6
|
+
const body = constructWebLog(args, config);
|
|
7
|
+
if (config.ingestType !== NetaceaIngestType.KINESIS) {
|
|
8
|
+
const headers = {
|
|
9
|
+
'X-Netacea-API-Key': config.apiKey ?? '',
|
|
10
|
+
'content-type': 'application/json'
|
|
11
|
+
};
|
|
12
|
+
const res = await makeIngestApiCall(headers, body, config);
|
|
13
|
+
if (res.status !== 200) {
|
|
14
|
+
throw APIError.fromResponse(res);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function makeIngestApiCall(headers, body, config) {
|
|
19
|
+
return await makeRequest({
|
|
20
|
+
host: config.ingestServiceUrl,
|
|
21
|
+
method: 'POST',
|
|
22
|
+
path: '/',
|
|
23
|
+
headers,
|
|
24
|
+
body: JSON.stringify(body),
|
|
25
|
+
timeout: config.timeout
|
|
26
|
+
}, config);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=makeIngestAPICall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeIngestAPICall.js","sourceRoot":"","sources":["../../../src/ingest/makeIngestAPICall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,IAAgB,EAAE,MAAoC;IACtF,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC1C,IAAI,MAAM,CAAC,UAAU,KAAK,iBAAiB,CAAC,OAAO,EAAE;QACnD,MAAM,OAAO,GAAG;YACd,mBAAmB,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YACxC,cAAc,EAAE,kBAAkB;SACnC,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;YACtB,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;SACjC;KACF;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAgC,EAChC,IAAuB,EACvB,MAAoC;IAEpC,OAAO,MAAM,WAAW,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC,gBAA0B;QACvC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG;QACT,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,EAAE,MAAM,CAAC,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { MakeRequestResponse, MakeMitigateAPICallResponse } from '@netacea/netaceaintegrationbase';
|
|
2
|
+
import type { AkamaiWorkerConfig, CookieCodes } from '../types';
|
|
3
|
+
export declare function getApiCallResponseFromResponse(response: MakeRequestResponse, userId: string | undefined, clientIP: string, config: Readonly<AkamaiWorkerConfig>, defaultMitataCodes?: CookieCodes): Promise<MakeMitigateAPICallResponse>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { dictionary } from '@netacea/netaceaintegrationbase';
|
|
2
|
+
import { createProtoMitata } from '../helpers/createProtoMitata';
|
|
3
|
+
import { getMitataCaptchaFromHeaders } from '../helpers/getMitataCaptchaFromHeaders';
|
|
4
|
+
import { APIError } from '../errors/APIError';
|
|
5
|
+
export async function getApiCallResponseFromResponse(response, userId, clientIP, config, defaultMitataCodes) {
|
|
6
|
+
if (response.status !== 200) {
|
|
7
|
+
throw APIError.fromResponse(response);
|
|
8
|
+
}
|
|
9
|
+
let match = parseInt(response.headers[dictionary.netaceaHeaders.match]);
|
|
10
|
+
let mitigate = parseInt(response.headers[dictionary.netaceaHeaders.mitigate]);
|
|
11
|
+
let captcha = parseInt(response.headers[dictionary.netaceaHeaders.captcha]);
|
|
12
|
+
if (isNaN(match)) {
|
|
13
|
+
match = defaultMitataCodes?.match ?? 0;
|
|
14
|
+
}
|
|
15
|
+
if (isNaN(mitigate)) {
|
|
16
|
+
mitigate = defaultMitataCodes?.mitigate ?? 0;
|
|
17
|
+
}
|
|
18
|
+
if (isNaN(captcha)) {
|
|
19
|
+
captcha = defaultMitataCodes?.captcha ?? 0;
|
|
20
|
+
}
|
|
21
|
+
let mitataMaxAge = parseInt(response.headers[dictionary.netaceaHeaders.mitataExpiry]);
|
|
22
|
+
if (isNaN(mitataMaxAge)) {
|
|
23
|
+
mitataMaxAge = 86400;
|
|
24
|
+
}
|
|
25
|
+
const mitata = await createProtoMitata(clientIP, userId, match, mitigate, captcha);
|
|
26
|
+
const mitataCaptcha = await getMitataCaptchaFromHeaders(response.headers, config);
|
|
27
|
+
const setCookie = [
|
|
28
|
+
mitata,
|
|
29
|
+
mitataCaptcha
|
|
30
|
+
].filter(c => c !== undefined);
|
|
31
|
+
const eventId = response.headers[dictionary.netaceaHeaders.eventId];
|
|
32
|
+
return {
|
|
33
|
+
status: response.status,
|
|
34
|
+
match,
|
|
35
|
+
mitigate,
|
|
36
|
+
captcha,
|
|
37
|
+
setCookie,
|
|
38
|
+
body: response.body,
|
|
39
|
+
eventId,
|
|
40
|
+
mitataMaxAge
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=getApiCallResponseFromResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getApiCallResponseFromResponse.js","sourceRoot":"","sources":["../../../src/mitigation/getApiCallResponseFromResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoD,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAC9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAA;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAG7C,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,QAA6B,EAC7B,MAA0B,EAC1B,QAAgB,EAChB,MAAoC,EACpC,kBAAgC;IAEhC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;QAC3B,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;KACtC;IACD,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;IACvE,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7E,IAAI,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IAE3E,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;QAChB,KAAK,GAAG,kBAAkB,EAAE,KAAK,IAAI,CAAC,CAAA;KACvC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,QAAQ,GAAG,kBAAkB,EAAE,QAAQ,IAAI,CAAC,CAAA;KAC7C;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,GAAG,kBAAkB,EAAE,OAAO,IAAI,CAAC,CAAA;KAC3C;IAED,IAAI,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAA;IACrF,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;QACvB,YAAY,GAAG,KAAK,CAAA;KACrB;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAClF,MAAM,aAAa,GAAG,MAAM,2BAA2B,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAEjF,MAAM,SAAS,GAAG;QAChB,MAAM;QACN,aAAa;KACd,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAa,CAAA;IAE1C,MAAM,OAAO,GAAuB,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACvF,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,KAAK;QACL,QAAQ;QACR,OAAO;QACP,SAAS;QACT,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO;QACP,YAAY;KACb,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MakeMitigateAPICallResponse } from '@netacea/netaceaintegrationbase';
|
|
2
|
+
import { AkamaiWorkerConfig, CookieCodes } from '../types';
|
|
3
|
+
interface MitigationAPICallOptions {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
userId: string | undefined;
|
|
6
|
+
clientIP: string;
|
|
7
|
+
userAgent: string;
|
|
8
|
+
captchaCookie: string | undefined;
|
|
9
|
+
captchaSiteKey: string | undefined;
|
|
10
|
+
captchaSecretKey: string | undefined;
|
|
11
|
+
trackingId: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
export declare function captchaGetAPICall(opts: MitigationAPICallOptions, config: Readonly<AkamaiWorkerConfig>, defaultMitataCodes?: CookieCodes): Promise<MakeMitigateAPICallResponse>;
|
|
14
|
+
export declare function mitigationAPICall(opts: MitigationAPICallOptions, config: Readonly<AkamaiWorkerConfig>): Promise<MakeMitigateAPICallResponse>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { makeRequest } from '../helpers/makeRequest';
|
|
2
|
+
import { buildCookieHeader } from '../helpers/buildCookieHeader';
|
|
3
|
+
import { getApiCallResponseFromResponse } from './getApiCallResponseFromResponse';
|
|
4
|
+
export async function captchaGetAPICall(opts, config, defaultMitataCodes) {
|
|
5
|
+
const trackingIdQuery = opts.trackingId !== undefined ? `?trackingId=${opts.trackingId}` : '';
|
|
6
|
+
return await mitigationAPICallBase(`/captcha${trackingIdQuery}`, 'GET', opts, config, defaultMitataCodes);
|
|
7
|
+
}
|
|
8
|
+
export async function mitigationAPICall(opts, config) {
|
|
9
|
+
return await mitigationAPICallBase('/', 'GET', opts, config);
|
|
10
|
+
}
|
|
11
|
+
async function mitigationAPICallBase(path, method, opts, config, defaultMitataCodes) {
|
|
12
|
+
const { userId, clientIP } = opts;
|
|
13
|
+
const { mitigationServiceUrl, timeout } = config;
|
|
14
|
+
if (mitigationServiceUrl === undefined) {
|
|
15
|
+
throw new Error('Mitigation Service URL is not defined!');
|
|
16
|
+
}
|
|
17
|
+
const res = await makeRequest({
|
|
18
|
+
host: mitigationServiceUrl,
|
|
19
|
+
path,
|
|
20
|
+
headers: composeHeaders(opts),
|
|
21
|
+
method,
|
|
22
|
+
timeout
|
|
23
|
+
}, config);
|
|
24
|
+
return await getApiCallResponseFromResponse(res, userId, clientIP, config, defaultMitataCodes);
|
|
25
|
+
}
|
|
26
|
+
function composeHeaders(opts) {
|
|
27
|
+
const { apiKey, userId, userAgent, captchaCookie, clientIP, captchaSiteKey, captchaSecretKey } = opts;
|
|
28
|
+
const headers = {
|
|
29
|
+
'X-Netacea-API-Key': apiKey,
|
|
30
|
+
'X-Netacea-Client-IP': clientIP,
|
|
31
|
+
'user-agent': userAgent,
|
|
32
|
+
'cookie': buildCookieHeader({
|
|
33
|
+
_mitatacaptcha: captchaCookie
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
if (userId !== undefined) {
|
|
37
|
+
headers['X-Netacea-UserId'] = userId;
|
|
38
|
+
}
|
|
39
|
+
if (captchaSiteKey !== undefined && captchaSecretKey !== undefined) {
|
|
40
|
+
headers['X-Netacea-Captcha-Site-Key'] = captchaSiteKey;
|
|
41
|
+
headers['X-Netacea-Captcha-Secret-Key'] = captchaSecretKey;
|
|
42
|
+
}
|
|
43
|
+
return headers;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=mitigationApiCall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mitigationApiCall.js","sourceRoot":"","sources":["../../../src/mitigation/mitigationApiCall.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAA;AAajF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA8B,EAC9B,MAAoC,EACpC,kBAAgC;IAEhC,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7F,OAAO,MAAM,qBAAqB,CAAC,WAAW,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAA;AAC3G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA8B,EAC9B,MAAoC;IAEpC,OAAO,MAAM,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,IAAY,EACZ,MAAyC,EACzC,IAA8B,EAC9B,MAAoC,EACpC,kBAAgC;IAEhC,MAAM,EACJ,MAAM,EACN,QAAQ,EACT,GAAG,IAAI,CAAA;IACR,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEhD,IAAI,oBAAoB,KAAK,SAAS,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;KAC1D;IAED,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC;QAC5B,IAAI,EAAE,oBAAoB;QAC1B,IAAI;QACJ,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;QAC7B,MAAM;QACN,OAAO;KACR,EAAE,MAAM,CAAC,CAAA;IAEV,OAAO,MAAM,8BAA8B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAA;AAChG,CAAC;AAED,SAAS,cAAc,CACrB,IAA8B;IAE9B,MAAM,EACJ,MAAM,EACN,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EACR,cAAc,EACd,gBAAgB,EACjB,GAAG,IAAI,CAAA;IAER,MAAM,OAAO,GAA4B;QACvC,mBAAmB,EAAE,MAAM;QAC3B,qBAAqB,EAAE,QAAQ;QAC/B,YAAY,EAAE,SAAS;QACvB,QAAQ,EAAE,iBAAiB,CAAC;YAC1B,cAAc,EAAE,aAAa;SAC9B,CAAC;KACH,CAAA;IAED,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAA;KACrC;IAED,IAAI,cAAc,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS,EAAE;QAClE,OAAO,CAAC,4BAA4B,CAAC,GAAG,cAAc,CAAA;QACtD,OAAO,CAAC,8BAA8B,CAAC,GAAG,gBAAgB,CAAA;KAC3D;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export declare function isUrlCaptchaAssetsGet(path: string, method: string, useCaptchaRelAssets: boolean): boolean;
|
|
2
2
|
export declare function isUrlCaptchaPost(path: string, method: string): boolean;
|
|
3
|
+
export declare function isUrlCaptchaGet(path: string, method: string, captchaPath: string | undefined): boolean;
|
package/dist/src/netaceaPaths.js
CHANGED
|
@@ -11,4 +11,10 @@ export function isUrlCaptchaPost(path, method) {
|
|
|
11
11
|
return (/\/?ataverifycaptcha$/.test(path.toLowerCase()) &&
|
|
12
12
|
method.toLowerCase() === 'post');
|
|
13
13
|
}
|
|
14
|
+
export function isUrlCaptchaGet(path, method, captchaPath) {
|
|
15
|
+
return (captchaPath !== undefined &&
|
|
16
|
+
captchaPath.length > 0 &&
|
|
17
|
+
path === captchaPath &&
|
|
18
|
+
method.toLowerCase() === 'get');
|
|
19
|
+
}
|
|
14
20
|
//# sourceMappingURL=netaceaPaths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netaceaPaths.js","sourceRoot":"","sources":["../../src/netaceaPaths.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,MAAc,EACd,mBAA4B;IAE5B,IAAI,CAAC,mBAAmB,EAAE;QACxB,OAAO,KAAK,CAAA;KACb;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IACxC,OAAO,CACL,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;QACtC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAC/B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAE,IAAY,EAAE,MAAc;IAC5D,OAAO,CACL,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAChC,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"netaceaPaths.js","sourceRoot":"","sources":["../../src/netaceaPaths.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,MAAc,EACd,mBAA4B;IAE5B,IAAI,CAAC,mBAAmB,EAAE;QACxB,OAAO,KAAK,CAAA;KACb;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IACxC,OAAO,CACL,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;QACtC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAC/B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAE,IAAY,EAAE,MAAc;IAC5D,OAAO,CACL,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAChC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAE,IAAY,EAAE,MAAc,EAAE,WAA+B;IAC5F,OAAO,CACL,WAAW,KAAK,SAAS;QACzB,WAAW,CAAC,MAAM,GAAG,CAAC;QACtB,IAAI,KAAK,WAAW;QACpB,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAC/B,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/// <reference types="akamai-edgeworkers" />
|
|
2
|
+
import type { RequestBody, HttpResponse } from 'http-request';
|
|
3
|
+
import type { MitigateResponse } from '@netacea/netaceaintegrationbase';
|
|
4
|
+
import type { LegacyAkamaiConstructorArgs } from './AkamaiV1';
|
|
5
|
+
export interface AkamaiWorkerConfig extends LegacyAkamaiConstructorArgs {
|
|
6
|
+
enableMitigationProxyPass: boolean;
|
|
7
|
+
enableIngestProxyPass: boolean;
|
|
8
|
+
netaceaCookieAttributes: string;
|
|
9
|
+
netaceaCaptchaCookieAttributes: string;
|
|
10
|
+
netaceaCaptchaPath?: string;
|
|
11
|
+
protoMitataVariableName: string;
|
|
12
|
+
}
|
|
13
|
+
export interface CookieCodes {
|
|
14
|
+
match: number;
|
|
15
|
+
mitigate: number;
|
|
16
|
+
captcha: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ProtoMitata {
|
|
19
|
+
clientIP: string;
|
|
20
|
+
userId: string;
|
|
21
|
+
match: number;
|
|
22
|
+
mitigate: number;
|
|
23
|
+
captcha: number;
|
|
24
|
+
mitataMaxAge: number;
|
|
25
|
+
}
|
|
26
|
+
export declare type AkamaiMitigateResponse = MitigateResponse<ResponseProperties>;
|
|
27
|
+
export interface UpstreamMitHeaders {
|
|
28
|
+
'X-Netacea-UserId': string;
|
|
29
|
+
'X-Netacea-BC-Type': string;
|
|
30
|
+
'X-Netacea-Integration-Type': string;
|
|
31
|
+
'X-Netacea-Integration-Version': string;
|
|
32
|
+
}
|
|
33
|
+
export interface ResponseProperties {
|
|
34
|
+
headers: Record<string, string>;
|
|
35
|
+
body?: string | undefined;
|
|
36
|
+
status?: number;
|
|
37
|
+
statusText?: string;
|
|
38
|
+
mitigation?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare type RequestArgs = EW.IngressClientRequest;
|
|
41
|
+
export declare type Response = ResponseProperties;
|
|
42
|
+
export interface Logger {
|
|
43
|
+
log(format: string, ...values: any): void;
|
|
44
|
+
}
|
|
45
|
+
export interface AkamaiHttpRequestOptions {
|
|
46
|
+
method?: string | undefined;
|
|
47
|
+
headers?: {
|
|
48
|
+
[others: string]: string | string[];
|
|
49
|
+
} | undefined;
|
|
50
|
+
body?: RequestBody | undefined;
|
|
51
|
+
timeout?: number | undefined;
|
|
52
|
+
}
|
|
53
|
+
export declare type AkamaiHttpRequestFn = (url: string, options?: AkamaiHttpRequestOptions) => Promise<HttpResponse>;
|
|
54
|
+
export interface InjectedDependencies {
|
|
55
|
+
logger: Logger;
|
|
56
|
+
httpRequest: AkamaiHttpRequestFn;
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netacea/akamai",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.51",
|
|
4
4
|
"description": "Netacea Akamai CDN Integration",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"license": "ISC",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@netacea/netaceaintegrationbase": "^1.16.
|
|
23
|
+
"@netacea/netaceaintegrationbase": "^1.16.57",
|
|
24
24
|
"buffer": "^6.0.3",
|
|
25
25
|
"jssha": "^3.3.0"
|
|
26
26
|
},
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"tslib": "^2.0.3",
|
|
68
68
|
"typescript": "^4.0.3"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "fdb4cad4779fd74b53828f42777ff3725399350f"
|
|
71
71
|
}
|