@netacea/cloudflare 5.1.63 → 5.1.65
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/dist/{src/Cloudflare.d.ts → index.d.ts} +13 -6
- package/dist/index.js +1 -0
- package/package.json +20 -11
- package/dist/package.json +0 -50
- package/dist/src/Cloudflare.js +0 -770
- package/dist/src/Cloudflare.js.map +0 -1
- package/dist/src/captchaHelpers.d.ts +0 -4
- package/dist/src/captchaHelpers.js +0 -48
- package/dist/src/captchaHelpers.js.map +0 -1
- package/dist/src/cookieEncryption.d.ts +0 -2
- package/dist/src/cookieEncryption.js +0 -23
- package/dist/src/cookieEncryption.js.map +0 -1
- package/dist/src/fetch.d.ts +0 -1
- package/dist/src/fetch.js +0 -5
- package/dist/src/fetch.js.map +0 -1
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.js +0 -7
- package/dist/src/index.js.map +0 -1
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NetaceaBaseArgs, NetaceaIngestType, NetaceaLogVersion, NetaceaMitigationType, InjectResponse, ComposeResultResponse, MakeRequestArgs, MakeRequestResponse, NetaceaMitigationResponse, IngestArgs, WebLog, V2WebLog, FindBestMitigationResponse, APICallResponse, ProcessMitigateRequestArgs, NetaceaResponseBase, MitigateResponse } from '@netacea/netaceaintegrationbase';
|
|
2
|
+
export { NetaceaMitigationType } from '@netacea/netaceaintegrationbase';
|
|
2
3
|
import NetaceaKinesis from '@netacea/kinesisingest';
|
|
3
|
-
|
|
4
|
+
|
|
5
|
+
type CloudflareConstructorArgs = NetaceaBaseArgs & {
|
|
4
6
|
cookieEncryptionKey?: string;
|
|
5
7
|
enableDynamicCaptchaContentType?: boolean | string;
|
|
6
8
|
netaceaCaptchaPath?: string;
|
|
7
9
|
captchaHeader?: CustomHeader | undefined;
|
|
10
|
+
netaceaCookieAttributes?: string;
|
|
11
|
+
netaceaCaptchaCookieAttributes?: string;
|
|
8
12
|
};
|
|
9
13
|
interface CustomHeader {
|
|
10
14
|
name: string;
|
|
11
15
|
value: string;
|
|
12
16
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
type CloudflareMitigateResponse = MitigateResponse<Response>;
|
|
18
|
+
type RequestArgs = Request;
|
|
19
|
+
declare class Cloudflare {
|
|
16
20
|
protected mitataCookieExpirySeconds: number;
|
|
17
21
|
protected apiKey: string;
|
|
18
22
|
protected secretKey?: string;
|
|
@@ -32,6 +36,8 @@ export default class Cloudflare {
|
|
|
32
36
|
private readonly enableDynamicCaptchaContentType;
|
|
33
37
|
private readonly netaceaCaptchaPath;
|
|
34
38
|
private readonly captchaHeader;
|
|
39
|
+
private readonly netaceaCookieAttributes;
|
|
40
|
+
private readonly netaceaCaptchaCookieAttributes;
|
|
35
41
|
constructor(args: CloudflareConstructorArgs);
|
|
36
42
|
/**
|
|
37
43
|
*
|
|
@@ -93,4 +99,5 @@ export default class Cloudflare {
|
|
|
93
99
|
protected setIngestOnlyMitataCookie(userId: string | undefined): Promise<NetaceaResponseBase>;
|
|
94
100
|
protected processIngest(args: RequestArgs): Promise<NetaceaResponseBase>;
|
|
95
101
|
}
|
|
96
|
-
|
|
102
|
+
|
|
103
|
+
export { type CloudflareConstructorArgs, Cloudflare as default };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("crypto"),t=require("buffer"),a=require("url"),i=require("querystring"),s=require("jose"),o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var r,c,h,u,p={},d={},l={},g={},y={};r=y,Object.defineProperty(r,"__esModule",{value:!0}),r.NetaceaMitigationType=r.NetaceaLogVersion=r.NetaceaIngestType=void 0,(c=r.NetaceaIngestType||(r.NetaceaIngestType={})).ORIGIN="ORIGIN",c.HTTP="HTTP",c.KINESIS="KINESIS",(h=r.NetaceaLogVersion||(r.NetaceaLogVersion={})).V1="V1",h.V2="V2",(u=r.NetaceaMitigationType||(r.NetaceaMitigationType={})).MITIGATE="MITIGATE",u.INJECT="INJECT",u.INGEST="INGEST";var m={};!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.bestMitigationCaptchaMap=e.bestMitigationMap=e.captchaStatusCodes=e.captchaMap=e.mitigateMap=e.matchMap=e.netaceaHeaders=e.mitigationTypes=e.COOKIEDELIMITER=void 0,e.COOKIEDELIMITER="_/@#/",e.mitigationTypes={none:"",block:"block",captcha:"captcha",allow:"allow",captchaPass:"captchapass"},e.netaceaHeaders={match:"x-netacea-match",mitigate:"x-netacea-mitigate",captcha:"x-netacea-captcha",mitata:"x-netacea-mitata-value",mitataExpiry:"x-netacea-mitata-expiry",mitataCaptcha:"x-netacea-mitatacaptcha-value",mitataCaptchaExpiry:"x-netacea-mitatacaptcha-expiry",eventId:"x-netacea-event-id"},e.matchMap={0:"",1:"ua_",2:"ip_",3:"visitor_",4:"datacenter_",5:"sev_",6:"organisation_",7:"asn_",8:"country_",9:"combination_"},e.mitigateMap={0:"",1:"blocked",2:"allow",3:"hardblocked",4:"block"},e.captchaMap={0:"",1:"captcha_serve",2:"captcha_pass",3:"captcha_fail",4:"captcha_cookiepass",5:"captcha_cookiefail"},e.captchaStatusCodes={"":0,captchaServe:1,captchaPass:2,captchaFail:3,captchaCookiePass:4,captchaCookieFail:5},e.bestMitigationMap={0:e.mitigationTypes.none,1:e.mitigationTypes.block,2:e.mitigationTypes.none,3:e.mitigationTypes.block,4:e.mitigationTypes.block},e.bestMitigationCaptchaMap={1:e.mitigationTypes.captcha,2:e.mitigationTypes.captchaPass,3:e.mitigationTypes.captcha,4:e.mitigationTypes.allow,5:e.mitigationTypes.captcha}}(m);var C={};Object.defineProperty(C,"__esModule",{value:!0}),C.checkMitataCookie=C.warmupCookie=C.hexSha256=C.createMitataCookie=C.generateId=C.matchMitataCookie=C.ingestIgnoredIpValue=void 0;const f=e,v=m,k=t;C.ingestIgnoredIpValue="ignored";const S="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),I=/^(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/((\d)(\d)(\d))$/;function T(e){if(void 0===e)return;const t=e.match(I);if(null!=t){const[,e,a,i,s,o,n,r,c]=t;return{signature:e,expiry:a,userId:i,ipHash:s,mitigationType:o,match:parseInt(n),mitigate:parseInt(r),captcha:parseInt(c)}}}function w(e=16,t=S){const a=f.randomBytes(e-1);return`c${Array.from(a).map((e=>t[e%t.length])).join("")}`}function b(e,t){const a=f.createHmac("sha256",t);return a.update(e),k.Buffer.from(a.digest("hex")).toString("base64")}C.matchMitataCookie=T,C.generateId=w,C.createMitataCookie=function(e,t,a,i,s="000"){void 0===t&&(t=w());const o=[a,t,b(e+"|"+String(a),i),s].join(v.COOKIEDELIMITER);return`${b(o,i)}${v.COOKIEDELIMITER}${o}`},C.hexSha256=b,C.warmupCookie={cookie:"MzBkZDEwYjc0ZmIyMzQ4YmY0OTlhNTkyNjY0MDRjMjhjNmQ5Y2RlYjVkYzVkMDQyZmEzODU4MDBiN2MwNTk1OQ==_/@#/1653044256_/@#/UUID_/@#/NjEyOWIzY2JiMjE5NjcwMThlYjg5NDYzY2YyMDZlYjE0ZDg2NTRjYmMxODg5Y2I4Y2U2NGFjZDAxOTdhMGFmNA==_/@#/000",secretKey:"EXAMPLE_SECRET_KEY",clientIP:"192.168.0.1"},C.checkMitataCookie=function(e,t,a){const i={mitata:void 0,requiresReissue:!1,isExpired:!1,shouldExpire:!1,isSameIP:!1,isPrimaryHashValid:!1,captcha:0,match:0,mitigate:0};if("string"!=typeof e||""===e)return i;const s=T(e);if(void 0!==s){const e=[s.expiry,s.userId,s.ipHash,s.mitigationType].join(v.COOKIEDELIMITER),i=Math.floor(Date.now()/1e3),o=parseInt(s.expiry)<i,n=[1,3,5].includes(s.captcha),r=b(t+"|"+s.expiry,a),c=s.ipHash===r;return{mitata:s,requiresReissue:o||!c,isExpired:o,shouldExpire:n,isSameIP:c,isPrimaryHashValid:s.signature===b(e,a),match:s.match,mitigate:s.mitigate,captcha:s.captcha}}return i};var A={},N={},M={},E={},P=function(e){return new x(e)};function x(e){this.capacity=0|e,this.map=Object.create(null),this.list=new K}function K(){this.firstNode=null,this.lastNode=null}function R(e,t){this.key=e,this.val=t,this.prev=null,this.next=null}x.prototype.get=function(e){var t=this.map[e];if(null!=t)return this.used(t),t.val},x.prototype.set=function(e,t){var a=this.map[e];if(null!=a)a.val=t;else{if(this.capacity||this.prune(),!this.capacity)return!1;a=new R(e,t),this.map[e]=a,this.capacity--}return this.used(a),!0},x.prototype.used=function(e){this.list.moveToFront(e)},x.prototype.prune=function(){var e=this.list.pop();null!=e&&(delete this.map[e.key],this.capacity++)},K.prototype.moveToFront=function(e){this.firstNode!=e&&(this.remove(e),null==this.firstNode?(this.firstNode=e,this.lastNode=e,e.prev=null,e.next=null):(e.prev=null,e.next=this.firstNode,e.next.prev=e,this.firstNode=e))},K.prototype.pop=function(){var e=this.lastNode;return null!=e&&this.remove(e),e},K.prototype.remove=function(e){this.firstNode==e?this.firstNode=e.next:null!=e.prev&&(e.prev.next=e.next),this.lastNode==e?this.lastNode=e.prev:null!=e.next&&(e.next.prev=e.prev)},function(t){var s=E,o=a,n=i,r=e,c=P(1e3);function h(e,t,a){return r.createHmac("sha256",e).update(t,"utf8").digest(a)}function u(e,t){return r.createHash("sha256").update(e,"utf8").digest(t)}function p(e){return e.replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function d(e){return p(encodeURIComponent(e))}var l={authorization:!0,connection:!0,"x-amzn-trace-id":!0,"user-agent":!0,expect:!0,"presigned-expires":!0,range:!0};function g(e,t){"string"==typeof e&&(e=o.parse(e));var a=e.headers=e.headers||{},i=(!this.service||!this.region)&&this.matchHost(e.hostname||e.host||a.Host||a.host);this.request=e,this.credentials=t||this.defaultCredentials(),this.service=e.service||i[0]||"",this.region=e.region||i[1]||"us-east-1","email"===this.service&&(this.service="ses"),!e.method&&e.body&&(e.method="POST"),a.Host||a.host||(a.Host=e.hostname||e.host||this.createHost(),e.port&&(a.Host+=":"+e.port)),e.hostname||e.host||(e.hostname=a.Host||a.host),this.isCodeCommitGit="codecommit"===this.service&&"GIT"===e.method}g.prototype.matchHost=function(e){var t=((e||"").match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com(\.cn)?$/)||[]).slice(1,3);if("es"===t[1]&&(t=t.reverse()),"s3"==t[1])t[0]="s3",t[1]="us-east-1";else for(var a=0;a<2;a++)if(/^s3-/.test(t[a])){t[1]=t[a].slice(3),t[0]="s3";break}return t},g.prototype.isSingleRegion=function(){return["s3","sdb"].indexOf(this.service)>=0&&"us-east-1"===this.region||["cloudfront","ls","route53","iam","importexport","sts"].indexOf(this.service)>=0},g.prototype.createHost=function(){var e=this.isSingleRegion()?"":"."+this.region;return("ses"===this.service?"email":this.service)+e+".amazonaws.com"},g.prototype.prepareRequest=function(){this.parsePath();var e,t=this.request,a=t.headers;t.signQuery?(this.parsedPath.query=e=this.parsedPath.query||{},this.credentials.sessionToken&&(e["X-Amz-Security-Token"]=this.credentials.sessionToken),"s3"!==this.service||e["X-Amz-Expires"]||(e["X-Amz-Expires"]=86400),e["X-Amz-Date"]?this.datetime=e["X-Amz-Date"]:e["X-Amz-Date"]=this.getDateTime(),e["X-Amz-Algorithm"]="AWS4-HMAC-SHA256",e["X-Amz-Credential"]=this.credentials.accessKeyId+"/"+this.credentialString(),e["X-Amz-SignedHeaders"]=this.signedHeaders()):(t.doNotModifyHeaders||this.isCodeCommitGit||(!t.body||a["Content-Type"]||a["content-type"]||(a["Content-Type"]="application/x-www-form-urlencoded; charset=utf-8"),!t.body||a["Content-Length"]||a["content-length"]||(a["Content-Length"]=Buffer.byteLength(t.body)),!this.credentials.sessionToken||a["X-Amz-Security-Token"]||a["x-amz-security-token"]||(a["X-Amz-Security-Token"]=this.credentials.sessionToken),"s3"!==this.service||a["X-Amz-Content-Sha256"]||a["x-amz-content-sha256"]||(a["X-Amz-Content-Sha256"]=u(this.request.body||"","hex")),a["X-Amz-Date"]||a["x-amz-date"]?this.datetime=a["X-Amz-Date"]||a["x-amz-date"]:a["X-Amz-Date"]=this.getDateTime()),delete a.Authorization,delete a.authorization)},g.prototype.sign=function(){return this.parsedPath||this.prepareRequest(),this.request.signQuery?this.parsedPath.query["X-Amz-Signature"]=this.signature():this.request.headers.Authorization=this.authHeader(),this.request.path=this.formatPath(),this.request},g.prototype.getDateTime=function(){if(!this.datetime){var e=this.request.headers,t=new Date(e.Date||e.date||new Date);this.datetime=t.toISOString().replace(/[:\-]|\.\d{3}/g,""),this.isCodeCommitGit&&(this.datetime=this.datetime.slice(0,-1))}return this.datetime},g.prototype.getDate=function(){return this.getDateTime().substr(0,8)},g.prototype.authHeader=function(){return["AWS4-HMAC-SHA256 Credential="+this.credentials.accessKeyId+"/"+this.credentialString(),"SignedHeaders="+this.signedHeaders(),"Signature="+this.signature()].join(", ")},g.prototype.signature=function(){var e,t,a,i=this.getDate(),s=[this.credentials.secretAccessKey,i,this.region,this.service].join(),o=c.get(s);return o||(e=h("AWS4"+this.credentials.secretAccessKey,i),t=h(e,this.region),a=h(t,this.service),o=h(a,"aws4_request"),c.set(s,o)),h(o,this.stringToSign(),"hex")},g.prototype.stringToSign=function(){return["AWS4-HMAC-SHA256",this.getDateTime(),this.credentialString(),u(this.canonicalString(),"hex")].join("\n")},g.prototype.canonicalString=function(){this.parsedPath||this.prepareRequest();var e,t=this.parsedPath.path,a=this.parsedPath.query,i=this.request.headers,s="",o="s3"!==this.service,n="s3"===this.service||this.request.doNotEncodePath,r="s3"===this.service,c="s3"===this.service;if(e="s3"===this.service&&this.request.signQuery?"UNSIGNED-PAYLOAD":this.isCodeCommitGit?"":i["X-Amz-Content-Sha256"]||i["x-amz-content-sha256"]||u(this.request.body||"","hex"),a){var h=Object.keys(a).reduce((function(e,t){return t?(e[d(t)]=Array.isArray(a[t])&&c?a[t][0]:a[t],e):e}),{}),p=[];Object.keys(h).sort().forEach((function(e){Array.isArray(h[e])?h[e].map(d).sort().forEach((function(t){p.push(e+"="+t)})):p.push(e+"="+d(h[e]))})),s=p.join("&")}return"/"!==t&&(o&&(t=t.replace(/\/{2,}/g,"/")),"/"!==(t=t.split("/").reduce((function(e,t){return o&&".."===t?e.pop():o&&"."===t||(n&&(t=decodeURIComponent(t.replace(/\+/g," "))),e.push(d(t))),e}),[]).join("/"))[0]&&(t="/"+t),r&&(t=t.replace(/%2F/g,"/"))),[this.request.method||"GET",t,s,this.canonicalHeaders()+"\n",this.signedHeaders(),e].join("\n")},g.prototype.canonicalHeaders=function(){var e=this.request.headers;return Object.keys(e).filter((function(e){return null==l[e.toLowerCase()]})).sort((function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:1})).map((function(t){return t.toLowerCase()+":"+e[t].toString().trim().replace(/\s+/g," ")})).join("\n")},g.prototype.signedHeaders=function(){return Object.keys(this.request.headers).map((function(e){return e.toLowerCase()})).filter((function(e){return null==l[e]})).sort().join(";")},g.prototype.credentialString=function(){return[this.getDate(),this.region,this.service,"aws4_request"].join("/")},g.prototype.defaultCredentials=function(){var e=process.env;return{accessKeyId:e.AWS_ACCESS_KEY_ID||e.AWS_ACCESS_KEY,secretAccessKey:e.AWS_SECRET_ACCESS_KEY||e.AWS_SECRET_KEY,sessionToken:e.AWS_SESSION_TOKEN}},g.prototype.parsePath=function(){var e=this.request.path||"/";/[^0-9A-Za-z;,/?:@&=+$\-_.!~*'()#%]/.test(e)&&(e=encodeURI(decodeURI(e)));var t=e.indexOf("?"),a=null;t>=0&&(a=n.parse(e.slice(t+1)),e=e.slice(0,t)),this.parsedPath={path:e,query:a}},g.prototype.formatPath=function(){var e=this.parsedPath.path,t=this.parsedPath.query;return t?(null!=t[""]&&delete t[""],e+"?"+p(n.stringify(t))):e},s.RequestSigner=g,s.sign=function(e,t){return new g(e,t).sign()}}();var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.API_VERSION=H.REGION=H.PAYLOAD_TYPE=H.STATE=void 0,H.STATE={ACTIVE:"ACTIVE",UPDATING:"UPDATING",CREATING:"CREATING",DELETING:"DELETING"},H.PAYLOAD_TYPE="string",H.REGION="eu-west-1",H.API_VERSION="2013-12-02",Object.defineProperty(M,"__esModule",{value:!0});const _=E,O=H;M.default=class{static batchArrayForKinesis(e,t){const a=[];for(let i=0;i<e.length;i+=t){const s=e.slice(i,i+t);a.push({Data:Buffer.from(JSON.stringify(s)).toString("base64"),PartitionKey:Date.now().toString()})}return a}static signRequest(e,t,a){const{accessKeyId:i,secretAccessKey:s}=e,o={Records:this.batchArrayForKinesis(t,a),PartitionKey:Date.now().toString(),StreamName:e.streamName};return _.sign({service:"kinesis",body:JSON.stringify(o),headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"Kinesis_20131202.PutRecords"},region:O.REGION},{accessKeyId:i,secretAccessKey:s})}},Object.defineProperty(N,"__esModule",{value:!0});const j=M;N.default=class{constructor({kinesisStreamName:e,kinesisAccessKey:t,kinesisSecretKey:a,maxLogAgeSeconds:i,logBatchSize:s}){this.logBatchSize=20,this.maxLogAgeSeconds=10,this.logCache=[],this.intervalSet=!1,this.kinesisStreamName=e,this.kinesisAccessKey=t,this.kinesisSecretKey=a,void 0!==i&&i<this.maxLogAgeSeconds&&i>0&&(this.maxLogAgeSeconds=i),void 0!==s&&(this.logBatchSize=s)}async putToKinesis(e){if(0===this.logCache.length)return;const t=[...this.logCache];this.logCache=[];try{const a=j.default.signRequest({streamName:this.kinesisStreamName,accessKeyId:this.kinesisAccessKey,secretAccessKey:this.kinesisSecretKey},t,this.logBatchSize);await e({headers:a.headers,host:`https://${a.hostname}`,method:a.method,path:a.path,body:a.body})}catch(e){this.logCache.push(...t),console.error(e)}}async ingest(e,t){if(this.logCache.push(e),this.intervalSet||(this.intervalSet=!0,await async function(e){await new Promise((t=>{setTimeout(t,e)}))}(1e3*this.maxLogAgeSeconds),await this.putToKinesis(t),this.intervalSet=!1),this.logCache.length>=this.logBatchSize)return await this.putToKinesis(t)}},Object.defineProperty(A,"__esModule",{value:!0});const q=N;A.default=q.default,Object.defineProperty(g,"__esModule",{value:!0}),g.configureMitataExpiry=g.safeParseInt=g.correctTimeout=void 0;const V=y,D=m,$=C,U=A;function L(e){return e<=0?z:e}function G(e,t=0){return isNaN(e)?t:parseInt(e)}g.correctTimeout=L,g.safeParseInt=G;const z=3e3;function X(e,t){return void 0===t?e===V.NetaceaMitigationType.INGEST?3600:60:t}g.configureMitataExpiry=X;g.default=class{constructor({apiKey:e,secretKey:t,timeout:a=z,mitigationServiceUrl:i="https://mitigations.netacea.net",ingestServiceUrl:s="https://ingest.netacea.net",mitigationType:o=V.NetaceaMitigationType.INGEST,captchaSiteKey:n,captchaSecretKey:r,ingestType:c=V.NetaceaIngestType.HTTP,kinesis:h,logVersion:u,mitataCookieExpirySeconds:p,netaceaCookieExpirySeconds:d,netaceaCookieName:l,netaceaCaptchaCookieName:g}){if(this.encryptedCookies=[],null==e)throw new Error("apiKey is a required parameter");this.apiKey=e,this.secretKey=t,this.mitigationServiceUrl=i,this.ingestServiceUrl=s,this.mitigationType=o,this.ingestType=null!=c?c:V.NetaceaIngestType.HTTP,this.logVersion=null!=u?u:V.NetaceaLogVersion.V1,this.ingestType===V.NetaceaIngestType.KINESIS&&(void 0===h?console.warn(`NETACEA WARN: no kinesis args provided, when ingestType is ${this.ingestType}`):this.kinesis=new U.default({...h,apiKey:this.apiKey})),void 0===n&&void 0===r||(this.captchaSiteKey=n,this.captchaSecretKey=r),this.timeout=L(a),this.netaceaCookieName=null!=l?l:"_mitata",this.netaceaCaptchaCookieName=null!=g?g:"_mitatacaptcha",this.encryptedCookies=[this.netaceaCookieName,this.netaceaCaptchaCookieName],this.mitataCookieExpirySeconds=X(o,null!=d?d:p)}async runMitigation(e){try{switch(this.mitigationType){case V.NetaceaMitigationType.MITIGATE:return await this.mitigate(e);case V.NetaceaMitigationType.INJECT:return await this.inject(e);case V.NetaceaMitigationType.INGEST:return await this.processIngest(e);default:throw new Error(`Netacea Error: Mitigation type ${this.mitigationType} not recognised`)}}catch(e){return console.error("Netacea FAILOPEN Error:",e),{injectHeaders:{"x-netacea-captcha":"0","x-netacea-match":"0","x-netacea-mitigate":"0"},sessionStatus:""}}}async readCookie(e,t){if(null==t)return;if("string"==typeof t)return await this.readCookie(e,t.split(";"));const a=`${e}=`;for(const i of t){const t=i.split(";")[0].trimStart();if(t.startsWith(a)){const i=t.slice(a.length);if(this.encryptedCookies.includes(e))try{return await this.decryptCookieValue(i)}catch(e){return}return i}}}async callIngest(e){const t=this.constructWebLog(e);if(this.ingestType===V.NetaceaIngestType.KINESIS){if(void 0===this.kinesis)return void console.error("Netacea Error: Unable to log as Kinesis has not been defined.");try{await this.kinesis.ingest({...t,apiKey:this.apiKey},this.makeRequest.bind(this))}catch(e){console.error("NETACEA Error: ",e.message)}}else{const e={"X-Netacea-API-Key":this.apiKey,"content-type":"application/json"},a=await this.makeIngestApiCall(e,t);if(200!==a.status)throw this.APIError(a)}}async makeIngestApiCall(e,t){return await this.makeRequest({host:this.ingestServiceUrl,method:"POST",path:"/",headers:e,body:JSON.stringify(t),timeout:this.timeout})}constructV2WebLog({ip:e,userAgent:t,status:a,method:i,path:s,protocol:o,referer:n,bytesSent:r,requestTime:c,mitataCookie:h,sessionStatus:u,integrationType:p,integrationVersion:d}){var l;const g=new Date;let y;"/"!==s[0]&&(s=`/${s}`);const m=s.split("?");m.length>1&&(y=`?${m[1]}`);const C=m[0],f=null===(l=$.matchMitataCookie(h))||void 0===l?void 0:l.userId;return{status:a,method:i,bytes_sent:G(r),referrer:""===n?void 0:n,request:`${i} ${C}${null!=y?y:""} ${o}`,request_time:G(c),integration_type:p,integration_version:d,client:e,user_agent:t,bc_type:""===u?void 0:u,hour:g.getUTCHours(),minute:g.getUTCMinutes(),"@timestamp":g.toISOString().replace("Z","+00:00"),path:C,protocol:o,query:y,user_id:f}}constructV1WebLog({ip:e,userAgent:t,status:a,method:i,path:s,protocol:o,referer:n,bytesSent:r,requestTime:c,mitataCookie:h,sessionStatus:u,integrationType:p,integrationVersion:d}){return{Request:`${i} ${s} ${o}`,TimeLocal:(new Date).toUTCString(),RealIp:e,UserAgent:t,Status:a,RequestTime:null==c?void 0:c.toString(),BytesSent:null==r?void 0:r.toString(),Referer:""===n?"-":n,NetaceaUserIdCookie:null!=h?h:"",NetaceaMitigationApplied:null!=u?u:"",IntegrationType:null!=p?p:"",IntegrationVersion:null!=d?d:""}}constructWebLog(e){return e.bytesSent=""===e.bytesSent?"0":e.bytesSent,this.logVersion===V.NetaceaLogVersion.V2?this.constructV2WebLog(e):this.constructV1WebLog(e)}async check(e,t,a,i){var s,o;let n,r,c,h,u,p,d;if(void 0===this.secretKey)throw new Error("Secret key is required to mitigate");const l=$.checkMitataCookie(e,t,this.secretKey);if(!l.isPrimaryHashValid||l.requiresReissue){const e=await this.makeMitigateAPICall(null===(s=l.mitata)||void 0===s?void 0:s.userId,t,a,i);n=e.status,r=e.match,c=e.mitigate,h=e.captcha,u=e.body,p=[await this.createMitata(t,null===(o=l.mitata)||void 0===o?void 0:o.userId,r,c,h,e.mitataMaxAge)],d=e.eventId}else n=-1,r=l.match,c=l.mitigate,h=l.captcha,u=void 0,p=[];return this.composeResult(u,p,n,r,c,h,!1,d)}async createMitata(e,t,a,i,s,o=86400,n=void 0){const r=[1,3,5].includes(s)?-this.mitataCookieExpirySeconds:this.mitataCookieExpirySeconds,c=null!=n?n:Math.floor(Date.now()/1e3)+r;if(void 0===this.secretKey)throw new Error("Cannot build cookie without secret key.");const h=[a,i,s].join(""),u=$.createMitataCookie(e,t,c,this.secretKey,h);return await this.buildCookieFromValues(this.netaceaCookieName,u,o,"/")}async processCaptcha(e,t,a,i){const{status:s,match:o,mitigate:n,captcha:r,body:c,setCookie:h}=await this.makeCaptchaAPICall(e,t,a,i);return this.composeResult(c,h,s,o,n,r,!0)}async getMitataCaptchaFromHeaders(e){if(Object.prototype.hasOwnProperty.call(e,D.netaceaHeaders.mitataCaptcha)){const t=e[D.netaceaHeaders.mitataCaptcha],a=parseInt(e[D.netaceaHeaders.mitataCaptchaExpiry]),i=await this.buildCookieFromValues(this.netaceaCaptchaCookieName,t,a);if(void 0!==i)return i}}async makeCaptchaAPICall(e,t,a,i){const s={"X-Netacea-API-Key":this.apiKey,"X-Netacea-Client-IP":t,"user-agent":a,"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},o=$.matchMitataCookie(e);void 0!==o&&(s["X-Netacea-UserId"]=o.userId),void 0!==this.captchaSiteKey&&void 0!==this.captchaSecretKey&&(s["X-Netacea-Captcha-Site-Key"]=this.captchaSiteKey,s["X-Netacea-Captcha-Secret-Key"]=this.captchaSecretKey);const n=await this.makeRequest({host:this.mitigationServiceUrl,path:"/AtaVerifyCaptcha",headers:s,method:"POST",body:i,timeout:this.timeout});return await this.getApiCallResponseFromResponse(n,null==o?void 0:o.userId,t)}async getApiCallResponseFromResponse(e,t,a){if(200!==e.status)throw this.APIError(e);const i=parseInt(e.headers[D.netaceaHeaders.match]),s=parseInt(e.headers[D.netaceaHeaders.mitigate]),o=parseInt(e.headers[D.netaceaHeaders.captcha]);let n=parseInt(e.headers[D.netaceaHeaders.mitataExpiry]);isNaN(n)&&(n=86400);const r=[await this.createMitata(a,t,i,s,o),await this.getMitataCaptchaFromHeaders(e.headers)].filter((e=>void 0!==e)),c=e.headers[D.netaceaHeaders.eventId];return{status:e.status,match:i,mitigate:s,captcha:o,setCookie:r,body:e.body,eventId:c,mitataMaxAge:n}}async buildCookieFromValues(e,t,a,i="/"){if(this.encryptedCookies.includes(e)){return`${e}=${await this.encryptCookieValue(t)}; Max-Age=${a}; Path=${i}`}return`${e}=${t}; Max-Age=${a}; Path=${i}`}buildCookieHeader(e){let t="",a="";for(const i in e){const s=e[i];void 0!==s&&(t=`${t}${a}${i}=${s}`,a="; ")}return t}async makeMitigateAPICall(e,t,a,i){const s={"X-Netacea-API-Key":this.apiKey,"X-Netacea-Client-IP":t,"user-agent":a,cookie:this.buildCookieHeader({_mitatacaptcha:i})};void 0!==e&&(s["X-Netacea-UserId"]=e),void 0!==this.captchaSiteKey&&void 0!==this.captchaSecretKey&&(s["X-Netacea-Captcha-Site-Key"]=this.captchaSiteKey,s["X-Netacea-Captcha-Secret-Key"]=this.captchaSecretKey);const o=await this.makeRequest({host:this.mitigationServiceUrl,path:"/",headers:s,method:"GET",timeout:this.timeout});return await this.getApiCallResponseFromResponse(o,e,t)}composeResult(e,t,a,i,s,o,n,r){const c=this.findBestMitigation(i,s,o,n),h={body:e,apiCallStatus:a,setCookie:t,sessionStatus:c.sessionStatus,mitigation:c.mitigation,mitigated:[D.mitigationTypes.block,D.mitigationTypes.captcha,D.mitigationTypes.captchaPass].includes(c.mitigation)};if(this.mitigationType===V.NetaceaMitigationType.INJECT){const e={"x-netacea-match":c.parts.match.toString(),"x-netacea-mitigate":c.parts.mitigate.toString(),"x-netacea-captcha":c.parts.captcha.toString()};void 0!==r&&(e["x-netacea-event-id"]=r),h.injectHeaders=e}return h}findBestMitigation(e,t,a,i){var s,o,n;const r="unknown";i||(2===a?a=4:3===a&&(a=5));let c=null!==(s=D.matchMap[e])&&void 0!==s?s:r+"_";c+=null!==(o=D.mitigateMap[t])&&void 0!==o?o:r;let h=D.bestMitigationMap[t];if(0!==a){c+=","+(null!==(n=D.captchaMap[a])&&void 0!==n?n:r);const e=D.bestMitigationCaptchaMap[a];void 0!==e&&(h=e)}return this.mitigationType===V.NetaceaMitigationType.INJECT&&(h=D.mitigationTypes.none),{sessionStatus:c,mitigation:h,parts:{match:e,mitigate:t,captcha:a}}}APIError(e){let t="Unknown error";switch(e.status){case 403:t="Invalid credentials";break;case 500:t="Server error";break;case 502:t="Bad Gateway";break;case 503:t="Service Unavailable";break;case 400:t="Invalid request"}return new Error(`Error reaching Netacea API (${t}), status: ${e.status}`)}isUrlCaptchaPost(e,t){return e.includes("/AtaVerifyCaptcha")&&"post"===t.toLowerCase()}async processMitigateRequest(e){const t=this.isUrlCaptchaPost(e.url,e.method);return await(t?this.processCaptcha(e.mitata,e.clientIp,e.userAgent,await e.getBodyFn()):this.check(e.mitata,e.clientIp,e.userAgent,e.mitataCaptcha))}async setIngestOnlyMitataCookie(e){return{sessionStatus:"",setCookie:[await this.createMitata($.ingestIgnoredIpValue,e,0,0,0,86400)]}}async processIngest(e){var t;if(void 0===this.secretKey)throw new Error("Secret key is required for ingest");const a=this.getCookieHeader(e),i=await this.readCookie(this.netaceaCookieName,a),s=$.checkMitataCookie(i,$.ingestIgnoredIpValue,this.secretKey);return s.isPrimaryHashValid?s.requiresReissue?await this.setIngestOnlyMitataCookie(null===(t=s.mitata)||void 0===t?void 0:t.userId):{sessionStatus:"",setCookie:[]}:await this.setIngestOnlyMitataCookie(void 0)}async encryptCookieValue(e){return e}async decryptCookieValue(e){return e}};var F={};Object.defineProperty(F,"__esModule",{value:!0}),function(e){var t=o&&o.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),a=o&&o.__exportStar||function(e,a){for(var i in e)"default"===i||a.hasOwnProperty(i)||t(a,e,i)};Object.defineProperty(e,"__esModule",{value:!0});const i=g;a(g,e),a(y,e),a(F,e);var s=C;Object.defineProperty(e,"matchMitataCookie",{enumerable:!0,get:function(){return s.matchMitataCookie}}),Object.defineProperty(e,"checkMitataCookie",{enumerable:!0,get:function(){return s.checkMitataCookie}}),Object.defineProperty(e,"createMitataCookie",{enumerable:!0,get:function(){return s.createMitataCookie}}),Object.defineProperty(e,"generateId",{enumerable:!0,get:function(){return s.generateId}}),Object.defineProperty(e,"hexSha256",{enumerable:!0,get:function(){return s.hexSha256}}),Object.defineProperty(e,"ingestIgnoredIpValue",{enumerable:!0,get:function(){return s.ingestIgnoredIpValue}}),Object.defineProperty(e,"warmupCookie",{enumerable:!0,get:function(){return s.warmupCookie}}),e.dictionary=m,e.default=i.default}(l);var W={name:"@netacea/cloudflare",version:"5.1.65",description:"Netacea Cloudflare CDN Integration",main:"dist/index.js",types:"dist/index.d.ts",files:["dist/"],scripts:{test:"npm run test:unit && npm run test:integration:no-clean","test:unit":"npx nyc tape -r ts-node/register -r tsconfig-paths/register './tests/tape/*.test.ts'","test:integration":"npx nyc mocha --timeout 60000 -r ts-node/register -r tsconfig-paths/register './tests/mocha/*.test.ts'","test:integration:no-clean":"npx nyc --no-clean mocha --timeout 60000 -r ts-node/register -r tsconfig-paths/register './tests/mocha/*.test.ts'",lint:"npx eslint . --ext ts","lint:fix":"npx eslint . --ext ts --fix",rollup:"npx rollup -c rollup.config.mjs && npx rollup -c rollup-types.config.mjs",prepublishOnly:"npx tsc --project tsconfig.build.json && npm run rollup"},author:"Jack Scotson <jack.scotson@netacea.com> (https://netacea.com)",publishConfig:{access:"public"},license:"ISC",dependencies:{"@netacea/kinesisingest":"^1.4.64","@netacea/netaceaintegrationbase":"^1.16.63",jose:"^4.11.2"},devDependencies:{"@cloudflare/workers-types":"^2.0.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3","@rollup/plugin-typescript":"^11.1.1","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/node-fetch":"^2.5.7","@types/proxyquire":"^1.3.28","@types/sinon":"^9.0.8","@types/tape":"^4.13.0",chai:"^4.3.7",eslint:"^6.8.0",mocha:"^10.2.0",nyc:"^15.1.0",proxyquire:"^2.1.3",rollup:"^3.23.0","rollup-plugin-dts":"^6.0.2","rollup-plugin-node-externals":"^6.1.1",sinon:"^9.1.0",tape:"^5.0.1","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0",typescript:"^4.9.5"},gitHead:"3322838054b8c920d421270403c993c0597efdf8"},B={};Object.defineProperty(B,"__esModule",{value:!0}),B.fetch=void 0,B.fetch=globalThis.fetch.bind(globalThis);var Y={};Object.defineProperty(Y,"__esModule",{value:!0}),Y.decrypt=Y.encrypt=void 0;const J=s;Y.encrypt=async function(e,t){const a=J.base64url.decode(t),i=(new TextEncoder).encode(e);return await new J.CompactEncrypt(i).setProtectedHeader({alg:"dir",enc:"A256GCM"}).encrypt(a)},Y.decrypt=async function(e,t){const a=J.base64url.decode(t),{plaintext:i}=await J.compactDecrypt(e,a,{keyManagementAlgorithms:["dir"],contentEncryptionAlgorithms:["A256GCM"]});return(new TextDecoder).decode(i)};var Z={};Object.defineProperty(Z,"__esModule",{value:!0}),Z.isUrlCaptchaGet=Z.getTrackingId=Z.modifyCaptchaJsonResponse=Z.getCaptchaPageContentType=void 0,Z.getCaptchaPageContentType=function(e){if(void 0===e)return"text/html";const t=e.toLowerCase(),a=t.includes("application/html")||t.includes("text/html"),i=t.includes("application/json");return!a&&i?"application/json":"text/html"},Z.modifyCaptchaJsonResponse=async function(e,t,a){const i=e.length>0?JSON.parse(e).trackingId:void 0,{hostname:s}=new URL(a);return t.length<2||void 0===i?"":JSON.stringify({captchaRelativeURL:`${t}?trackingId=${i}`,captchaAbsoluteURL:`https://${s}${t}?trackingId=${i}`})},Z.getTrackingId=async function(e){try{const{searchParams:t}=new URL(e);return t.get("trackingId")}catch(e){return null}},Z.isUrlCaptchaGet=async function(e,t,a){if(void 0===a||!Boolean(a))return!1;a.startsWith("/")||(a="/"+a);const{pathname:i,search:s}=new URL(e);return i.includes(a)&&s.includes("trackingId")&&"get"===t.toLowerCase()};var Q={};function ee(e,t){const a=e.split(";").map((e=>e.trim())).filter((e=>e.toLowerCase().startsWith(t.toLowerCase())))[0];return void 0!==a&&a.length>0?null==a?void 0:a.replace(`${t}=`,""):void 0}Object.defineProperty(Q,"__esModule",{value:!0}),Q.extractCookieAttr=Q.extractAndRemoveCookieAttr=Q.configureCookiesDomain=void 0,Q.configureCookiesDomain=function(e,t){let a=e,i=t;if(void 0!==e&&void 0!==t){const s=ee(e,"Domain"),o=ee(t,"Domain");void 0!==s&&void 0!==o?i=t.replace(o,s):void 0!==s&&void 0===o?i=t+`; Domain=${s}`:void 0===s&&void 0!==o&&(a=e+`; Domain=${o}`)}else if(void 0!==e&&void 0===t){const t=ee(e,"Domain");void 0!==t&&(i=`Domain=${t}`)}else if(void 0===e&&void 0!==t){const e=ee(t,"Domain");void 0!==e&&(a=`Domain=${e}`)}return{cookieAttributes:a,captchaCookieAttributes:i}},Q.extractAndRemoveCookieAttr=function(e,t){const a=ee(e,t);if(void 0!==a){return{extractedAttribute:a,cookieAttributes:e.replace(/ /g,"").replace(`${t}=${a}`,"").split(";").filter((e=>e.length>0)).join("; ")}}return{extractedAttribute:void 0,cookieAttributes:e}},Q.extractCookieAttr=ee,Object.defineProperty(d,"__esModule",{value:!0});const te=l,ae=A,ie=W,se=B,oe=Y,ne=Z,re=Q;d.default=class{constructor(e){this.encryptedCookies=[],this.enableDynamicCaptchaContentType=!1;const{apiKey:t,secretKey:a,timeout:i=3e3,mitigationServiceUrl:s="https://mitigations.netacea.net",ingestServiceUrl:o="https://ingest.netacea.net",mitigationType:n=te.NetaceaMitigationType.INGEST,captchaSiteKey:r,captchaSecretKey:c,ingestType:h=te.NetaceaIngestType.HTTP,kinesis:u,logVersion:p,mitataCookieExpirySeconds:d,netaceaCookieExpirySeconds:l,netaceaCookieName:g,netaceaCaptchaCookieName:y,enableDynamicCaptchaContentType:m=!1,captchaHeader:C,netaceaCaptchaPath:f}=e;if(null==t)throw new Error("apiKey is a required parameter");this.apiKey=t,this.secretKey=a,this.mitigationServiceUrl=s,this.ingestServiceUrl=o,this.mitigationType=n,this.ingestType=null!=h?h:te.NetaceaIngestType.HTTP,this.logVersion=null!=p?p:te.NetaceaLogVersion.V1,this.ingestType===te.NetaceaIngestType.KINESIS&&(void 0===u?console.warn(`NETACEA WARN: no kinesis args provided, when ingestType is ${this.ingestType}`):this.kinesis=new ae.default({...u,apiKey:this.apiKey})),void 0===r&&void 0===c||(this.captchaSiteKey=r,this.captchaSecretKey=c),this.timeout=(0,te.correctTimeout)(i),this.netaceaCookieName=null!=g?g:"_mitata",this.netaceaCaptchaCookieName=null!=y?y:"_mitatacaptcha";const{cookieAttributes:v,captchaCookieAttributes:k}=(0,re.configureCookiesDomain)(e.netaceaCookieAttributes,e.netaceaCaptchaCookieAttributes);this.netaceaCookieAttributes=null!=v?v:"",this.netaceaCaptchaCookieAttributes=null!=k?k:"",this.encryptedCookies=[this.netaceaCookieName,this.netaceaCaptchaCookieName],this.mitataCookieExpirySeconds=function(e,t){return void 0===t?e===te.NetaceaMitigationType.INGEST?3600:60:t}(n,null!=l?l:d),this.cookieEncryptionKey=e.cookieEncryptionKey,Boolean(f)&&"string"==typeof f&&(this.netaceaCaptchaPath=f.startsWith("/")?f:`/${f}`),void 0!==this.netaceaCaptchaPath&&(this.enableDynamicCaptchaContentType="boolean"==typeof m?m:"true"===m),this.captchaHeader=C}async run(e,t){const a=await this.timeoutCheck(this.runMitigation(e.request),this.timeout);return await this.handleResponse(e.request,a,t)}async inject(e){const t=await this.getMitigationResponse(e);return{injectHeaders:t.injectHeaders,sessionStatus:t.sessionStatus,setCookie:t.setCookie}}async mitigate(e){const t=await this.getMitigationResponse(e);if(t.mitigated){const a=new Headers;if(!await(0,ne.isUrlCaptchaGet)(e.url,e.method,this.netaceaCaptchaPath))for(const e of t.setCookie)a.append("set-cookie",e);let i="Forbidden";return"captcha"===t.mitigation&&(void 0!==this.captchaHeader&&a.append(this.captchaHeader.name,this.captchaHeader.value),a.append("content-type","text/html; charset=UTF-8"),i=t.body),{response:new Response(i,{status:403,statusText:"Forbidden",headers:a}),setCookie:t.setCookie,sessionStatus:t.sessionStatus}}if(this.isUrlCaptchaPost(e.url,e.method)){const e=new Headers;for(const a of t.setCookie)e.append("set-cookie",a);return{response:new Response(t.body,{status:200,statusText:"OK",headers:e}),setCookie:t.setCookie,sessionStatus:t.sessionStatus}}return{setCookie:t.setCookie,sessionStatus:t.sessionStatus}}async ingest(e,t){var a,i,s,o;const n=this.getHeaderValueOrDefault(t.headers,"set-cookie"),r=""!==n?n:this.getHeaderValueOrDefault(e.headers,"cookie");let c=null!==(a=await this.readCookie(this.netaceaCookieName,r))&&void 0!==a?a:"";if(void 0===c||""===c){const t=this.getHeaderValueOrDefault(e.headers,"cookie");c=null!==(i=await this.readCookie(this.netaceaCookieName,t))&&void 0!==i?i:""}const{match:h,mitigate:u,captcha:p}=null!==(s=(0,te.matchMitataCookie)(c))&&void 0!==s?s:{match:0,mitigate:0,captcha:0},{sessionStatus:d}=this.findBestMitigation(h,u,p,this.isUrlCaptchaPost(e.url,e.method));return await this.callIngest({bytesSent:this.getHeaderValueOrDefault(t.headers,"content-length","0"),ip:this.getHeaderValueOrDefault(e.headers,"cf-connecting-ip",""),method:e.method,path:new URL(e.url).pathname,protocol:(null!==(o=e.cf)&&void 0!==o?o:{}).httpProtocol,referer:this.getHeaderValueOrDefault(e.headers,"referer",""),requestTime:"0",sessionStatus:d,status:t.status.toString(),userAgent:this.getHeaderValueOrDefault(e.headers,"user-agent","-"),mitataCookie:c,integrationType:ie.name.replace("@netacea/",""),integrationVersion:ie.version})}async handleGetCaptchaRequest(e,t,a,i,s,o,n){var r;if(void 0===this.secretKey)throw new Error("Secret key is required to mitigate");const c=(0,te.checkMitataCookie)(e,t,this.secretKey),h=await this.makeMitigateAPICall(null===(r=c.mitata)||void 0===r?void 0:r.userId,t,a,n,i,!0,s,o);return{body:h.body,apiCallStatus:h.status,setCookie:[],sessionStatus:"",mitigation:"captcha",mitigated:!0}}async makeRequest({host:e,method:t,path:a,headers:i,body:s}){const o=`${e}${a}`,n=new Request(o,{method:t,body:s,headers:i}),r=await(0,se.fetch)(o,n),c={};for(const e of r.headers.keys()){const t=r.headers.get(e);null!==t&&(c[e]=t)}return{status:r.status,body:await r.text(),headers:c}}addHeadersToResponse(e,t){var a;if(void 0===t)return e;const i=null!==(a=e.headers.get("set-cookie"))&&void 0!==a?a:"",s=new Headers(e.headers);if(void 0!==t.setCookie)for(const e of t.setCookie)i.includes(e.split("=")[0])||s.append("set-cookie",e);return new Response(e.body,{headers:s,status:e.status,statusText:e.statusText})}addHeadersToRequest(e,t){if(void 0===t.injectHeaders)return e;const a=new Headers(e.headers);for(const[e,i]of Object.entries(t.injectHeaders))a.set(e,i);return new Request(e,{headers:a})}async handleResponse(e,t,a){if(void 0!==t)if(this.mitigationType===te.NetaceaMitigationType.MITIGATE){if(void 0!==t.response)return t.response}else this.mitigationType===te.NetaceaMitigationType.INJECT&&(e=this.addHeadersToRequest(e,t));const i=await a(e);return this.addHeadersToResponse(i,t)}getHeaderValueOrDefault(e,t,a=""){var i;return null!==(i=e.get(t))&&void 0!==i?i:a}async getMitigationResponse(e){var t,a,i,s;const o=e.headers.get("cookie"),n=null!==(t=await this.readCookie(this.netaceaCookieName,o))&&void 0!==t?t:"",r=await this.readCookie(this.netaceaCaptchaCookieName,o),c=null!==(a=e.headers.get("cf-connecting-ip"))&&void 0!==a?a:"",h=null!==(i=e.headers.get("user-agent"))&&void 0!==i?i:"",u=this.enableDynamicCaptchaContentType?(0,ne.getCaptchaPageContentType)(null!==(s=e.headers.get("Accept"))&&void 0!==s?s:void 0):(0,ne.getCaptchaPageContentType)();return await this.processMitigateRequest({clientIp:c,getBodyFn:async()=>await Promise.resolve(e.body),method:e.method,mitata:n,mitataCaptcha:r,url:e.url,userAgent:h,captchaPageContentType:u})}async timeoutCheck(e,t){return await Promise.race([e,new Promise(((e,a)=>{setTimeout((()=>e(void 0)),t)}))])}getCookieHeader(e){return e.headers.get("cookie")}async encryptCookieValue(e){return void 0!==this.cookieEncryptionKey?await(0,oe.encrypt)(e,this.cookieEncryptionKey):e}async decryptCookieValue(e){return void 0!==this.cookieEncryptionKey?await(0,oe.decrypt)(e,this.cookieEncryptionKey):e}async runMitigation(e){try{switch(this.mitigationType){case te.NetaceaMitigationType.MITIGATE:return await this.mitigate(e);case te.NetaceaMitigationType.INJECT:return await this.inject(e);case te.NetaceaMitigationType.INGEST:return await this.processIngest(e);default:throw new Error(`Netacea Error: Mitigation type ${this.mitigationType} not recognised`)}}catch(e){return e instanceof Error&&console.error("Netacea FAILOPEN Error:",e,e.stack),{injectHeaders:{"x-netacea-captcha":"0","x-netacea-match":"0","x-netacea-mitigate":"0"},sessionStatus:""}}}async readCookie(e,t){if(null==t)return;if("string"==typeof t)return await this.readCookie(e,t.split(";"));const a=`${e}=`;for(const i of t){const t=i.split(";")[0].trimStart();if(t.startsWith(a)){const i=t.slice(a.length);if(this.encryptedCookies.includes(e))try{return await this.decryptCookieValue(i)}catch(e){return}return i}}}async callIngest(e){const t=this.constructWebLog(e);if(this.ingestType===te.NetaceaIngestType.KINESIS){if(void 0===this.kinesis)return void console.error("Netacea Error: Unable to log as Kinesis has not been defined.");try{await this.kinesis.ingest({...t,apiKey:this.apiKey},this.makeRequest)}catch(e){console.error("NETACEA Error: ",e.message)}}else{const e={"X-Netacea-API-Key":this.apiKey,"content-type":"application/json"},a=await this.makeIngestApiCall(e,t);if(200!==a.status)throw this.APIError(a)}}async makeIngestApiCall(e,t){return await this.makeRequest({host:this.ingestServiceUrl,method:"POST",path:"/",headers:e,body:JSON.stringify(t),timeout:this.timeout})}constructV2WebLog({ip:e,userAgent:t,status:a,method:i,path:s,protocol:o,referer:n,bytesSent:r,requestTime:c,mitataCookie:h,sessionStatus:u,integrationType:p,integrationVersion:d}){var l;const g=new Date;let y;"/"!==s[0]&&(s=`/${s}`);const m=s.split("?");m.length>1&&(y=`?${m[1]}`);const C=m[0],f=null===(l=(0,te.matchMitataCookie)(h))||void 0===l?void 0:l.userId;return{status:a,method:i,bytes_sent:(0,te.safeParseInt)(r),referrer:""===n?void 0:n,request:`${i} ${C}${null!=y?y:""} ${o}`,request_time:(0,te.safeParseInt)(c),integration_type:p,integration_version:d,client:e,user_agent:t,bc_type:""===u?void 0:u,hour:g.getUTCHours(),minute:g.getUTCMinutes(),"@timestamp":g.toISOString().replace("Z","+00:00"),path:C,protocol:o,query:y,user_id:f}}constructV1WebLog({ip:e,userAgent:t,status:a,method:i,path:s,protocol:o,referer:n,bytesSent:r,requestTime:c,mitataCookie:h,sessionStatus:u,integrationType:p,integrationVersion:d}){return{Request:`${i} ${s} ${o}`,TimeLocal:(new Date).toUTCString(),RealIp:e,UserAgent:t,Status:a,RequestTime:null==c?void 0:c.toString(),BytesSent:null==r?void 0:r.toString(),Referer:""===n?"-":n,NetaceaUserIdCookie:null!=h?h:"",NetaceaMitigationApplied:null!=u?u:"",IntegrationType:null!=p?p:"",IntegrationVersion:null!=d?d:""}}constructWebLog(e){return e.bytesSent=""===e.bytesSent?"0":e.bytesSent,this.logVersion===te.NetaceaLogVersion.V2?this.constructV2WebLog(e):this.constructV1WebLog(e)}async check(e,t,a,i,s,o){var n,r;let c,h,u,p,d,l,g;if(void 0===this.secretKey)throw new Error("Secret key is required to mitigate");const y=(0,te.checkMitataCookie)(e,t,this.secretKey);if(!y.isPrimaryHashValid||y.requiresReissue){const e=await this.makeMitigateAPICall(null===(n=y.mitata)||void 0===n?void 0:n.userId,t,a,o,i,!1,null,s);c=e.status,h=e.match,u=e.mitigate,p=e.captcha,d=e.body,l=[await this.createMitata(t,null===(r=y.mitata)||void 0===r?void 0:r.userId,h,u,p,e.mitataMaxAge)],g=e.eventId}else c=-1,h=y.match,u=y.mitigate,p=y.captcha,d=void 0,l=[];return this.composeResult(d,l,c,h,u,p,!1,g)}async createMitata(e,t,a,i,s,o=86400,n=void 0){const r=[1,3,5].includes(s)?-this.mitataCookieExpirySeconds:this.mitataCookieExpirySeconds,c=null!=n?n:Math.floor(Date.now()/1e3)+r;if(void 0===this.secretKey)throw new Error("Cannot build cookie without secret key.");let h=this.netaceaCookieAttributes,u=o;if(""!==h){const{extractedAttribute:e,cookieAttributes:t}=(0,re.extractAndRemoveCookieAttr)(h,"Max-Age");void 0!==e&&(u=parseInt(e,10)),h=t}const p=[a,i,s].join(""),d=(0,te.createMitataCookie)(e,t,c,this.secretKey,p);return await this.buildCookieFromValues(this.netaceaCookieName,d,u,"/")+(""!==h?`; ${h}`:"")}async processCaptcha(e,t,a,i){const{status:s,match:o,mitigate:n,captcha:r,body:c,setCookie:h}=await this.makeCaptchaAPICall(e,t,a,i);return this.composeResult(c,h,s,o,n,r,!0)}async getMitataCaptchaFromHeaders(e){if(Object.prototype.hasOwnProperty.call(e,te.dictionary.netaceaHeaders.mitataCaptcha)){const t=e[te.dictionary.netaceaHeaders.mitataCaptcha],a=parseInt(e[te.dictionary.netaceaHeaders.mitataCaptchaExpiry]);let i,s=this.netaceaCaptchaCookieAttributes;if(""!==s){const{extractedAttribute:e,cookieAttributes:t}=(0,re.extractAndRemoveCookieAttr)(s,"Max-Age");void 0!==e&&(i=parseInt(e)),s=t}const o=await this.buildCookieFromValues(this.netaceaCaptchaCookieName,t,null!=i?i:a);if(void 0!==o)return o+(""!==s?`; ${s}`:"")}}async makeCaptchaAPICall(e,t,a,i){const s={"X-Netacea-API-Key":this.apiKey,"X-Netacea-Client-IP":t,"user-agent":a,"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},o=(0,te.matchMitataCookie)(e);void 0!==o&&(s["X-Netacea-UserId"]=o.userId),void 0!==this.captchaSiteKey&&void 0!==this.captchaSecretKey&&(s["X-Netacea-Captcha-Site-Key"]=this.captchaSiteKey,s["X-Netacea-Captcha-Secret-Key"]=this.captchaSecretKey);const n=await this.makeRequest({host:this.mitigationServiceUrl,path:"/AtaVerifyCaptcha",headers:s,method:"POST",body:i,timeout:this.timeout});return await this.getApiCallResponseFromResponse(n,null==o?void 0:o.userId,t,"")}async getApiCallResponseFromResponse(e,t,a,i){var s;if(200!==e.status)throw this.APIError(e);const o=parseInt(e.headers[te.dictionary.netaceaHeaders.match]),n=parseInt(e.headers[te.dictionary.netaceaHeaders.mitigate]),r=parseInt(e.headers[te.dictionary.netaceaHeaders.captcha]);let c=parseInt(e.headers[te.dictionary.netaceaHeaders.mitataExpiry]);isNaN(c)&&(c=86400);const h=[await this.createMitata(a,t,o,n,r,c),await this.getMitataCaptchaFromHeaders(e.headers)].filter((e=>void 0!==e)),u=e.headers[te.dictionary.netaceaHeaders.eventId];if("application/json"===(null===(s=e.headers["content-type"])||void 0===s?void 0:s.toLowerCase())){if(void 0===this.netaceaCaptchaPath)throw new Error("netaceaCaptchaPath and URL must be defined to handle JSON captcha");e.body=await(0,ne.modifyCaptchaJsonResponse)(e.body,this.netaceaCaptchaPath,i)}return{status:e.status,match:o,mitigate:n,captcha:r,setCookie:h,body:e.body,eventId:u,mitataMaxAge:c}}async buildCookieFromValues(e,t,a,i="/"){if(this.encryptedCookies.includes(e)){return`${e}=${await this.encryptCookieValue(t)}; Max-Age=${a}; Path=${i}`}return`${e}=${t}; Max-Age=${a}; Path=${i}`}buildCookieHeader(e){let t="",a="";for(const i in e){const s=e[i];void 0!==s&&(t=`${t}${a}${i}=${s}`,a="; ")}return t}async makeMitigateAPICall(e,t,a,i,s,o,n,r){const c={"X-Netacea-API-Key":this.apiKey,"X-Netacea-Client-IP":t,"user-agent":a,cookie:this.buildCookieHeader({_mitatacaptcha:i})};void 0!==e&&(c["X-Netacea-UserId"]=e),void 0!==this.captchaSiteKey&&void 0!==this.captchaSecretKey&&(c["X-Netacea-Captcha-Site-Key"]=this.captchaSiteKey,c["X-Netacea-Captcha-Secret-Key"]=this.captchaSecretKey),c["X-Netacea-Captcha-Content-Type"]=s;const h=await this.makeRequest({host:this.mitigationServiceUrl,path:o?"/captcha"+(null!==n?`?trackingId=${n}`:""):"/",headers:c,method:"GET",timeout:this.timeout});return await this.getApiCallResponseFromResponse(h,e,t,r)}composeResult(e,t,a,i,s,o,n,r){const c=this.findBestMitigation(i,s,o,n),h={body:e,apiCallStatus:a,setCookie:t,sessionStatus:c.sessionStatus,mitigation:c.mitigation,mitigated:[te.dictionary.mitigationTypes.block,te.dictionary.mitigationTypes.captcha].includes(c.mitigation)};if(this.mitigationType===te.NetaceaMitigationType.INJECT){const e={"x-netacea-match":c.parts.match.toString(),"x-netacea-mitigate":c.parts.mitigate.toString(),"x-netacea-captcha":c.parts.captcha.toString()};void 0!==r&&(e["x-netacea-event-id"]=r),h.injectHeaders=e}return h}findBestMitigation(e,t,a,i){var s,o,n;const r="unknown";i||(2===a?a=4:3===a&&(a=5));let c=null!==(s=te.dictionary.matchMap[e])&&void 0!==s?s:r+"_";c+=null!==(o=te.dictionary.mitigateMap[t])&&void 0!==o?o:r;let h=te.dictionary.bestMitigationMap[t];if(0!==a){c+=","+(null!==(n=te.dictionary.captchaMap[a])&&void 0!==n?n:r);const e=te.dictionary.bestMitigationCaptchaMap[a];void 0!==e&&(h=e)}return this.mitigationType===te.NetaceaMitigationType.INJECT&&(h=te.dictionary.mitigationTypes.none),{sessionStatus:c,mitigation:h,parts:{match:e,mitigate:t,captcha:a}}}APIError(e){let t="Unknown error";switch(e.status){case 403:t="Invalid credentials";break;case 500:t="Server error";break;case 502:t="Bad Gateway";break;case 503:t="Service Unavailable";break;case 400:t="Invalid request"}return new Error(`Error reaching Netacea API (${t}), status: ${e.status}`)}isUrlCaptchaPost(e,t){return e.includes("/AtaVerifyCaptcha")&&"post"===t.toLowerCase()}async processMitigateRequest(e){if(await(0,ne.isUrlCaptchaGet)(e.url,e.method,this.netaceaCaptchaPath)){const t=await(0,ne.getTrackingId)(e.url);return await this.handleGetCaptchaRequest(e.mitata,e.clientIp,e.userAgent,e.captchaPageContentType,t,e.url,e.mitataCaptcha)}return this.isUrlCaptchaPost(e.url,e.method)?await this.processCaptcha(e.mitata,e.clientIp,e.userAgent,await e.getBodyFn()):await this.check(e.mitata,e.clientIp,e.userAgent,e.captchaPageContentType,e.url,e.mitataCaptcha)}async setIngestOnlyMitataCookie(e){return{sessionStatus:"",setCookie:[await this.createMitata(te.ingestIgnoredIpValue,e,0,0,0,86400)]}}async processIngest(e){var t;if(void 0===this.secretKey)throw new Error("Secret key is required for ingest");const a=this.getCookieHeader(e),i=await this.readCookie(this.netaceaCookieName,a),s=(0,te.checkMitataCookie)(i,te.ingestIgnoredIpValue,this.secretKey);return s.isPrimaryHashValid?s.requiresReissue?await this.setIngestOnlyMitataCookie(null===(t=s.mitata)||void 0===t?void 0:t.userId):{sessionStatus:"",setCookie:[]}:await this.setIngestOnlyMitataCookie(void 0)}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.NetaceaMitigationType=void 0;const t=d;var a=l;Object.defineProperty(e,"NetaceaMitigationType",{enumerable:!0,get:function(){return a.NetaceaMitigationType}}),e.default=t.default}(p);var ce=n(p);module.exports=ce;
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netacea/cloudflare",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.65",
|
|
4
4
|
"description": "Netacea Cloudflare CDN Integration",
|
|
5
|
-
"main": "dist/
|
|
6
|
-
"types": "dist/
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"index.js",
|
|
9
8
|
"dist/"
|
|
10
9
|
],
|
|
11
10
|
"scripts": {
|
|
@@ -15,7 +14,8 @@
|
|
|
15
14
|
"test:integration:no-clean": "npx nyc --no-clean mocha --timeout 60000 -r ts-node/register -r tsconfig-paths/register './tests/mocha/*.test.ts'",
|
|
16
15
|
"lint": "npx eslint . --ext ts",
|
|
17
16
|
"lint:fix": "npx eslint . --ext ts --fix",
|
|
18
|
-
"
|
|
17
|
+
"rollup": "npx rollup -c rollup.config.mjs && npx rollup -c rollup-types.config.mjs",
|
|
18
|
+
"prepublishOnly": "npx tsc --project tsconfig.build.json && npm run rollup"
|
|
19
19
|
},
|
|
20
20
|
"author": "Jack Scotson <jack.scotson@netacea.com> (https://netacea.com)",
|
|
21
21
|
"publishConfig": {
|
|
@@ -23,12 +23,18 @@
|
|
|
23
23
|
},
|
|
24
24
|
"license": "ISC",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@netacea/kinesisingest": "^1.4.
|
|
27
|
-
"@netacea/netaceaintegrationbase": "^1.16.
|
|
26
|
+
"@netacea/kinesisingest": "^1.4.64",
|
|
27
|
+
"@netacea/netaceaintegrationbase": "^1.16.63",
|
|
28
28
|
"jose": "^4.11.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@cloudflare/workers-types": "^2.0.0",
|
|
32
|
+
"@rollup/plugin-commonjs": "^25.0.0",
|
|
33
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
34
|
+
"@rollup/plugin-node-resolve": "^15.1.0",
|
|
35
|
+
"@rollup/plugin-replace": "^5.0.2",
|
|
36
|
+
"@rollup/plugin-terser": "^0.4.3",
|
|
37
|
+
"@rollup/plugin-typescript": "^11.1.1",
|
|
32
38
|
"@types/chai": "^4.3.5",
|
|
33
39
|
"@types/mocha": "^10.0.1",
|
|
34
40
|
"@types/node-fetch": "^2.5.7",
|
|
@@ -40,11 +46,14 @@
|
|
|
40
46
|
"mocha": "^10.2.0",
|
|
41
47
|
"nyc": "^15.1.0",
|
|
42
48
|
"proxyquire": "^2.1.3",
|
|
49
|
+
"rollup": "^3.23.0",
|
|
50
|
+
"rollup-plugin-dts": "^6.0.2",
|
|
51
|
+
"rollup-plugin-node-externals": "^6.1.1",
|
|
43
52
|
"sinon": "^9.1.0",
|
|
44
53
|
"tape": "^5.0.1",
|
|
45
|
-
"ts-node": "^9.
|
|
46
|
-
"tsconfig-paths": "^
|
|
47
|
-
"typescript": "^
|
|
54
|
+
"ts-node": "^10.9.1",
|
|
55
|
+
"tsconfig-paths": "^4.2.0",
|
|
56
|
+
"typescript": "^4.9.5"
|
|
48
57
|
},
|
|
49
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "3322838054b8c920d421270403c993c0597efdf8"
|
|
50
59
|
}
|
package/dist/package.json
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@netacea/cloudflare",
|
|
3
|
-
"version": "5.1.63",
|
|
4
|
-
"description": "Netacea Cloudflare CDN Integration",
|
|
5
|
-
"main": "dist/src/index.js",
|
|
6
|
-
"types": "dist/src/index.d.ts",
|
|
7
|
-
"files": [
|
|
8
|
-
"index.js",
|
|
9
|
-
"dist/"
|
|
10
|
-
],
|
|
11
|
-
"scripts": {
|
|
12
|
-
"test": "npm run test:unit && npm run test:integration:no-clean",
|
|
13
|
-
"test:unit": "npx nyc tape -r ts-node/register -r tsconfig-paths/register './tests/tape/*.test.ts'",
|
|
14
|
-
"test:integration": "npx nyc mocha --timeout 60000 -r ts-node/register -r tsconfig-paths/register './tests/mocha/*.test.ts'",
|
|
15
|
-
"test:integration:no-clean": "npx nyc --no-clean mocha --timeout 60000 -r ts-node/register -r tsconfig-paths/register './tests/mocha/*.test.ts'",
|
|
16
|
-
"lint": "npx eslint . --ext ts",
|
|
17
|
-
"lint:fix": "npx eslint . --ext ts --fix",
|
|
18
|
-
"prepublishOnly": "npx tsc --project tsconfig.build.json"
|
|
19
|
-
},
|
|
20
|
-
"author": "Jack Scotson <jack.scotson@netacea.com> (https://netacea.com)",
|
|
21
|
-
"publishConfig": {
|
|
22
|
-
"access": "public"
|
|
23
|
-
},
|
|
24
|
-
"license": "ISC",
|
|
25
|
-
"dependencies": {
|
|
26
|
-
"@netacea/kinesisingest": "^1.4.62",
|
|
27
|
-
"@netacea/netaceaintegrationbase": "^1.16.61",
|
|
28
|
-
"jose": "^4.11.2"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@cloudflare/workers-types": "^2.0.0",
|
|
32
|
-
"@types/chai": "^4.3.5",
|
|
33
|
-
"@types/mocha": "^10.0.1",
|
|
34
|
-
"@types/node-fetch": "^2.5.7",
|
|
35
|
-
"@types/proxyquire": "^1.3.28",
|
|
36
|
-
"@types/sinon": "^9.0.8",
|
|
37
|
-
"@types/tape": "^4.13.0",
|
|
38
|
-
"chai": "^4.3.7",
|
|
39
|
-
"eslint": "^6.8.0",
|
|
40
|
-
"mocha": "^10.2.0",
|
|
41
|
-
"nyc": "^15.1.0",
|
|
42
|
-
"proxyquire": "^2.1.3",
|
|
43
|
-
"sinon": "^9.1.0",
|
|
44
|
-
"tape": "^5.0.1",
|
|
45
|
-
"ts-node": "^9.0.0",
|
|
46
|
-
"tsconfig-paths": "^3.9.0",
|
|
47
|
-
"typescript": "^3.9.7"
|
|
48
|
-
},
|
|
49
|
-
"gitHead": "269aed5e4f983f99461c620e160ddc9319c692a3"
|
|
50
|
-
}
|
package/dist/src/Cloudflare.js
DELETED
|
@@ -1,770 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable max-lines */
|
|
4
|
-
const netaceaintegrationbase_1 = require("@netacea/netaceaintegrationbase");
|
|
5
|
-
const kinesisingest_1 = require("@netacea/kinesisingest");
|
|
6
|
-
const pack = require("../package.json");
|
|
7
|
-
const fetch_1 = require("./fetch");
|
|
8
|
-
const cookieEncryption_1 = require("./cookieEncryption");
|
|
9
|
-
const captchaHelpers_1 = require("./captchaHelpers");
|
|
10
|
-
const ONE_HOUR_IN_SECONDS = 60 * 60;
|
|
11
|
-
const ONE_DAY_IN_SECONDS = ONE_HOUR_IN_SECONDS * 24;
|
|
12
|
-
function configureMitataExpiry(mitigationType, expirySeconds) {
|
|
13
|
-
if (expirySeconds === undefined) {
|
|
14
|
-
return mitigationType === netaceaintegrationbase_1.NetaceaMitigationType.INGEST ? ONE_HOUR_IN_SECONDS : 60;
|
|
15
|
-
}
|
|
16
|
-
return expirySeconds;
|
|
17
|
-
}
|
|
18
|
-
class Cloudflare {
|
|
19
|
-
// eslint-disable-next-line complexity, max-lines-per-function
|
|
20
|
-
constructor(args) {
|
|
21
|
-
this.encryptedCookies = [];
|
|
22
|
-
this.enableDynamicCaptchaContentType = false;
|
|
23
|
-
const { apiKey, secretKey, timeout = 3000, mitigationServiceUrl = 'https://mitigations.netacea.net', ingestServiceUrl = 'https://ingest.netacea.net', mitigationType = netaceaintegrationbase_1.NetaceaMitigationType.INGEST, captchaSiteKey, captchaSecretKey, ingestType = netaceaintegrationbase_1.NetaceaIngestType.HTTP, kinesis, logVersion, mitataCookieExpirySeconds, netaceaCookieExpirySeconds, netaceaCookieName, netaceaCaptchaCookieName, enableDynamicCaptchaContentType = false, captchaHeader, netaceaCaptchaPath } = args;
|
|
24
|
-
if (apiKey === null || apiKey === undefined) {
|
|
25
|
-
throw new Error('apiKey is a required parameter');
|
|
26
|
-
}
|
|
27
|
-
this.apiKey = apiKey;
|
|
28
|
-
this.secretKey = secretKey;
|
|
29
|
-
this.mitigationServiceUrl = mitigationServiceUrl;
|
|
30
|
-
this.ingestServiceUrl = ingestServiceUrl;
|
|
31
|
-
this.mitigationType = mitigationType;
|
|
32
|
-
this.ingestType = ingestType !== null && ingestType !== void 0 ? ingestType : netaceaintegrationbase_1.NetaceaIngestType.HTTP;
|
|
33
|
-
this.logVersion = logVersion !== null && logVersion !== void 0 ? logVersion : netaceaintegrationbase_1.NetaceaLogVersion.V1;
|
|
34
|
-
if (this.ingestType === netaceaintegrationbase_1.NetaceaIngestType.KINESIS) {
|
|
35
|
-
if (kinesis === undefined) {
|
|
36
|
-
// eslint-disable-next-line no-console
|
|
37
|
-
console.warn(`NETACEA WARN: no kinesis args provided, when ingestType is ${this.ingestType}`);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this.kinesis = new kinesisingest_1.default({
|
|
41
|
-
...kinesis,
|
|
42
|
-
apiKey: this.apiKey
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
if (captchaSiteKey !== undefined || captchaSecretKey !== undefined) {
|
|
47
|
-
this.captchaSiteKey = captchaSiteKey;
|
|
48
|
-
this.captchaSecretKey = captchaSecretKey;
|
|
49
|
-
}
|
|
50
|
-
this.timeout = netaceaintegrationbase_1.correctTimeout(timeout);
|
|
51
|
-
this.netaceaCookieName = netaceaCookieName !== null && netaceaCookieName !== void 0 ? netaceaCookieName : '_mitata';
|
|
52
|
-
this.netaceaCaptchaCookieName = netaceaCaptchaCookieName !== null && netaceaCaptchaCookieName !== void 0 ? netaceaCaptchaCookieName : '_mitatacaptcha';
|
|
53
|
-
this.encryptedCookies = [
|
|
54
|
-
this.netaceaCookieName,
|
|
55
|
-
this.netaceaCaptchaCookieName
|
|
56
|
-
];
|
|
57
|
-
this.mitataCookieExpirySeconds = configureMitataExpiry(mitigationType, netaceaCookieExpirySeconds !== null && netaceaCookieExpirySeconds !== void 0 ? netaceaCookieExpirySeconds : mitataCookieExpirySeconds);
|
|
58
|
-
this.cookieEncryptionKey = args.cookieEncryptionKey;
|
|
59
|
-
// Ensure netaceaCaptchaPath is not null or undefined, & has length > 0
|
|
60
|
-
if (Boolean(netaceaCaptchaPath) && typeof netaceaCaptchaPath === 'string') {
|
|
61
|
-
// Ensure captcha path starts with a '/'
|
|
62
|
-
this.netaceaCaptchaPath = netaceaCaptchaPath.startsWith('/')
|
|
63
|
-
? netaceaCaptchaPath
|
|
64
|
-
: `/${netaceaCaptchaPath}`;
|
|
65
|
-
}
|
|
66
|
-
if (this.netaceaCaptchaPath !== undefined) {
|
|
67
|
-
// captcha path is required to enable dynamic captcha content type
|
|
68
|
-
this.enableDynamicCaptchaContentType = typeof enableDynamicCaptchaContentType === 'boolean'
|
|
69
|
-
? enableDynamicCaptchaContentType
|
|
70
|
-
: enableDynamicCaptchaContentType === 'true';
|
|
71
|
-
}
|
|
72
|
-
this.captchaHeader = captchaHeader;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
*
|
|
76
|
-
* @param event Cloudflare's FetchEvent
|
|
77
|
-
* @param responsePredicate Promise that takes a request, and returns a response using the Fetch API
|
|
78
|
-
*
|
|
79
|
-
* Runs Netacea. Calling the correct services depending on the mitigationType passed in the constructor
|
|
80
|
-
*/
|
|
81
|
-
async run(event, responsePredicate) {
|
|
82
|
-
const netaceaResult = await this.timeoutCheck(this.runMitigation(event.request), this.timeout);
|
|
83
|
-
return await this.handleResponse(event.request, netaceaResult, responsePredicate);
|
|
84
|
-
}
|
|
85
|
-
// Abstracts
|
|
86
|
-
async inject(request) {
|
|
87
|
-
const result = await this.getMitigationResponse(request);
|
|
88
|
-
return {
|
|
89
|
-
injectHeaders: result.injectHeaders,
|
|
90
|
-
sessionStatus: result.sessionStatus,
|
|
91
|
-
setCookie: result.setCookie
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
/* eslint-disable max-lines-per-function */
|
|
95
|
-
async mitigate(request) {
|
|
96
|
-
const result = await this.getMitigationResponse(request);
|
|
97
|
-
if (result.mitigated) {
|
|
98
|
-
const responseHeaders = new Headers();
|
|
99
|
-
const isCaptchaGet = await captchaHelpers_1.isUrlCaptchaGet(request.url, request.method, this.netaceaCaptchaPath);
|
|
100
|
-
if (!isCaptchaGet) {
|
|
101
|
-
for (const cookie of result.setCookie) {
|
|
102
|
-
responseHeaders.append('set-cookie', cookie);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
let body = 'Forbidden';
|
|
106
|
-
if (result.mitigation === 'captcha') {
|
|
107
|
-
if (this.captchaHeader !== undefined) {
|
|
108
|
-
responseHeaders.append(this.captchaHeader.name, this.captchaHeader.value);
|
|
109
|
-
}
|
|
110
|
-
responseHeaders.append('content-type', 'text/html; charset=UTF-8');
|
|
111
|
-
body = result.body;
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
114
|
-
response: new Response(body, {
|
|
115
|
-
status: 403,
|
|
116
|
-
statusText: 'Forbidden',
|
|
117
|
-
headers: responseHeaders
|
|
118
|
-
}),
|
|
119
|
-
setCookie: result.setCookie,
|
|
120
|
-
sessionStatus: result.sessionStatus
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
const isCaptchaPost = this.isUrlCaptchaPost(request.url, request.method);
|
|
124
|
-
if (isCaptchaPost) {
|
|
125
|
-
const responseHeaders = new Headers();
|
|
126
|
-
for (const cookie of result.setCookie) {
|
|
127
|
-
responseHeaders.append('set-cookie', cookie);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Captcha post request should not go to origin.
|
|
131
|
-
* e.g. on captcha pass.
|
|
132
|
-
* Therefore we need to return a response here.
|
|
133
|
-
*/
|
|
134
|
-
return {
|
|
135
|
-
response: new Response(result.body, {
|
|
136
|
-
status: 200,
|
|
137
|
-
statusText: 'OK',
|
|
138
|
-
headers: responseHeaders
|
|
139
|
-
}),
|
|
140
|
-
setCookie: result.setCookie,
|
|
141
|
-
sessionStatus: result.sessionStatus
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
// Will allow request through to origin website.
|
|
145
|
-
return {
|
|
146
|
-
setCookie: result.setCookie,
|
|
147
|
-
sessionStatus: result.sessionStatus
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
async ingest(request, response) {
|
|
151
|
-
var _a, _b, _c, _d;
|
|
152
|
-
const setCookie = this.getHeaderValueOrDefault(response.headers, 'set-cookie');
|
|
153
|
-
const cookieString = setCookie !== '' ? setCookie : this.getHeaderValueOrDefault(request.headers, 'cookie');
|
|
154
|
-
let mitata = (_a = await this.readCookie(this.netaceaCookieName, cookieString)) !== null && _a !== void 0 ? _a : '';
|
|
155
|
-
if (mitata === undefined || mitata === '') {
|
|
156
|
-
const cookieString = this.getHeaderValueOrDefault(request.headers, 'cookie');
|
|
157
|
-
mitata = (_b = await this.readCookie(this.netaceaCookieName, cookieString)) !== null && _b !== void 0 ? _b : '';
|
|
158
|
-
}
|
|
159
|
-
const { match, mitigate, captcha } = (_c = netaceaintegrationbase_1.matchMitataCookie(mitata)) !== null && _c !== void 0 ? _c : {
|
|
160
|
-
match: 0,
|
|
161
|
-
mitigate: 0,
|
|
162
|
-
captcha: 0
|
|
163
|
-
};
|
|
164
|
-
const { sessionStatus } = this.findBestMitigation(match, mitigate, captcha, this.isUrlCaptchaPost(request.url, request.method));
|
|
165
|
-
return await this.callIngest({
|
|
166
|
-
bytesSent: this.getHeaderValueOrDefault(response.headers, 'content-length', '0'),
|
|
167
|
-
ip: this.getHeaderValueOrDefault(request.headers, 'cf-connecting-ip', ''),
|
|
168
|
-
method: request.method,
|
|
169
|
-
path: new URL(request.url).pathname,
|
|
170
|
-
protocol: ((_d = request.cf) !== null && _d !== void 0 ? _d : {}).httpProtocol,
|
|
171
|
-
referer: this.getHeaderValueOrDefault(request.headers, 'referer', ''),
|
|
172
|
-
requestTime: '0',
|
|
173
|
-
sessionStatus,
|
|
174
|
-
status: response.status.toString(),
|
|
175
|
-
userAgent: this.getHeaderValueOrDefault(request.headers, 'user-agent', '-'),
|
|
176
|
-
mitataCookie: mitata,
|
|
177
|
-
integrationType: pack.name.replace('@netacea/', ''),
|
|
178
|
-
integrationVersion: pack.version
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
async handleGetCaptchaRequest(netaceaCookie, clientIP, userAgent, captchaPageContentType, trackingId, url, captchaCookie) {
|
|
182
|
-
var _a;
|
|
183
|
-
if (this.secretKey === undefined) {
|
|
184
|
-
throw new Error('Secret key is required to mitigate');
|
|
185
|
-
}
|
|
186
|
-
const cookieInfo = netaceaintegrationbase_1.checkMitataCookie(netaceaCookie, clientIP, this.secretKey);
|
|
187
|
-
const apiResponse = await this.makeMitigateAPICall((_a = cookieInfo.mitata) === null || _a === void 0 ? void 0 : _a.userId, clientIP, userAgent, captchaCookie, captchaPageContentType, true, trackingId, url);
|
|
188
|
-
const result = {
|
|
189
|
-
body: apiResponse.body,
|
|
190
|
-
apiCallStatus: apiResponse.status,
|
|
191
|
-
setCookie: [],
|
|
192
|
-
sessionStatus: '',
|
|
193
|
-
mitigation: 'captcha',
|
|
194
|
-
mitigated: true
|
|
195
|
-
};
|
|
196
|
-
return result;
|
|
197
|
-
}
|
|
198
|
-
async makeRequest({ host, method, path, headers, body }) {
|
|
199
|
-
const url = `${host}${path}`;
|
|
200
|
-
const request = new Request(url, {
|
|
201
|
-
method, body, headers
|
|
202
|
-
});
|
|
203
|
-
const response = await fetch_1.fetch(url, request);
|
|
204
|
-
const responseHeaders = {};
|
|
205
|
-
for (const value of response.headers.keys()) {
|
|
206
|
-
const headerVal = response.headers.get(value);
|
|
207
|
-
if (headerVal !== null) {
|
|
208
|
-
responseHeaders[value] = headerVal;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
return {
|
|
212
|
-
status: response.status,
|
|
213
|
-
body: await response.text(),
|
|
214
|
-
headers: responseHeaders
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
// Helpers
|
|
218
|
-
addHeadersToResponse(response, netaceaResult) {
|
|
219
|
-
var _a;
|
|
220
|
-
if (netaceaResult === undefined) {
|
|
221
|
-
return response;
|
|
222
|
-
}
|
|
223
|
-
const responseSetCookie = (_a = response.headers.get('set-cookie')) !== null && _a !== void 0 ? _a : '';
|
|
224
|
-
const headers = new Headers(response.headers);
|
|
225
|
-
if (netaceaResult.setCookie !== undefined) {
|
|
226
|
-
for (const cookie of netaceaResult.setCookie) {
|
|
227
|
-
// If the origin is giving us a new netacea named cookie, don't append our set-cookie
|
|
228
|
-
// This is probably because they're using the /UpdateCaptcha endpoint
|
|
229
|
-
if (!responseSetCookie.includes(cookie.split('=')[0])) {
|
|
230
|
-
headers.append('set-cookie', cookie);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
// There's a bug here, see: https://netacea.atlassian.net/browse/PE2-688
|
|
235
|
-
return new Response(response.body, {
|
|
236
|
-
headers,
|
|
237
|
-
status: response.status,
|
|
238
|
-
statusText: response.statusText
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
addHeadersToRequest(request, netaceaResult) {
|
|
242
|
-
if (netaceaResult.injectHeaders === undefined) {
|
|
243
|
-
return request;
|
|
244
|
-
}
|
|
245
|
-
const headers = new Headers(request.headers);
|
|
246
|
-
for (const [key, value] of Object.entries(netaceaResult.injectHeaders)) {
|
|
247
|
-
headers.set(key, value);
|
|
248
|
-
}
|
|
249
|
-
return new Request(request, {
|
|
250
|
-
headers
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
async handleResponse(request, netaceaResult, responsePredicate) {
|
|
254
|
-
if (netaceaResult !== undefined) {
|
|
255
|
-
if (this.mitigationType === netaceaintegrationbase_1.NetaceaMitigationType.MITIGATE) {
|
|
256
|
-
netaceaResult = netaceaResult;
|
|
257
|
-
if (netaceaResult.response !== undefined) {
|
|
258
|
-
return netaceaResult.response;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
else if (this.mitigationType === netaceaintegrationbase_1.NetaceaMitigationType.INJECT) {
|
|
262
|
-
request = this.addHeadersToRequest(request, netaceaResult);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
const response = await responsePredicate(request);
|
|
266
|
-
return this.addHeadersToResponse(response, netaceaResult);
|
|
267
|
-
}
|
|
268
|
-
getHeaderValueOrDefault(headers, key, defaultVal = '') {
|
|
269
|
-
var _a;
|
|
270
|
-
return (_a = headers.get(key)) !== null && _a !== void 0 ? _a : defaultVal;
|
|
271
|
-
}
|
|
272
|
-
async getMitigationResponse(request) {
|
|
273
|
-
var _a, _b, _c, _d;
|
|
274
|
-
const cookies = request.headers.get('cookie');
|
|
275
|
-
const mitataCookie = (_a = await this.readCookie(this.netaceaCookieName, cookies)) !== null && _a !== void 0 ? _a : '';
|
|
276
|
-
const mitataCaptcha = await this.readCookie(this.netaceaCaptchaCookieName, cookies);
|
|
277
|
-
const clientIp = (_b = request.headers.get('cf-connecting-ip')) !== null && _b !== void 0 ? _b : '';
|
|
278
|
-
const userAgent = (_c = request.headers.get('user-agent')) !== null && _c !== void 0 ? _c : '';
|
|
279
|
-
const captchaPageContentType = this.enableDynamicCaptchaContentType
|
|
280
|
-
? captchaHelpers_1.getCaptchaPageContentType((_d = request.headers.get('Accept')) !== null && _d !== void 0 ? _d : undefined)
|
|
281
|
-
: captchaHelpers_1.getCaptchaPageContentType();
|
|
282
|
-
return await this.processMitigateRequest({
|
|
283
|
-
clientIp,
|
|
284
|
-
getBodyFn: async () => await Promise.resolve(request.body),
|
|
285
|
-
method: request.method,
|
|
286
|
-
mitata: mitataCookie,
|
|
287
|
-
mitataCaptcha,
|
|
288
|
-
url: request.url,
|
|
289
|
-
userAgent,
|
|
290
|
-
captchaPageContentType
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
async timeoutCheck(promise, timeout) {
|
|
294
|
-
return await Promise.race([promise, new Promise((resolve, reject) => {
|
|
295
|
-
setTimeout(() => resolve(undefined), timeout);
|
|
296
|
-
})]);
|
|
297
|
-
}
|
|
298
|
-
getCookieHeader(args) {
|
|
299
|
-
return args.headers.get('cookie');
|
|
300
|
-
}
|
|
301
|
-
async encryptCookieValue(cookieValue) {
|
|
302
|
-
if (this.cookieEncryptionKey !== undefined) {
|
|
303
|
-
return await cookieEncryption_1.encrypt(cookieValue, this.cookieEncryptionKey);
|
|
304
|
-
}
|
|
305
|
-
return cookieValue;
|
|
306
|
-
}
|
|
307
|
-
async decryptCookieValue(encryptedCookieValue) {
|
|
308
|
-
if (this.cookieEncryptionKey !== undefined) {
|
|
309
|
-
return await cookieEncryption_1.decrypt(encryptedCookieValue, this.cookieEncryptionKey);
|
|
310
|
-
}
|
|
311
|
-
return encryptedCookieValue;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* START -- NETACEA BASE METHODS
|
|
315
|
-
*/
|
|
316
|
-
async runMitigation(args) {
|
|
317
|
-
try {
|
|
318
|
-
switch (this.mitigationType) {
|
|
319
|
-
case netaceaintegrationbase_1.NetaceaMitigationType.MITIGATE:
|
|
320
|
-
return await this.mitigate(args);
|
|
321
|
-
case netaceaintegrationbase_1.NetaceaMitigationType.INJECT:
|
|
322
|
-
return await this.inject(args);
|
|
323
|
-
case netaceaintegrationbase_1.NetaceaMitigationType.INGEST:
|
|
324
|
-
return await this.processIngest(args);
|
|
325
|
-
default:
|
|
326
|
-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
327
|
-
throw new Error(`Netacea Error: Mitigation type ${this.mitigationType} not recognised`);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
catch (e) {
|
|
331
|
-
if (e instanceof Error) {
|
|
332
|
-
// eslint-disable-next-line no-console
|
|
333
|
-
console.error('Netacea FAILOPEN Error:', e, e.stack);
|
|
334
|
-
}
|
|
335
|
-
return {
|
|
336
|
-
injectHeaders: {
|
|
337
|
-
'x-netacea-captcha': '0',
|
|
338
|
-
'x-netacea-match': '0',
|
|
339
|
-
'x-netacea-mitigate': '0'
|
|
340
|
-
},
|
|
341
|
-
sessionStatus: ''
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Returns the value of the cookie with the given name from a string or list of cookies.
|
|
347
|
-
* If the cookie name is included in the encryptedCookies class property,
|
|
348
|
-
* then the cookie value will be decrypted automatically.
|
|
349
|
-
* The method may operate of either the HTTP Cookie or Set-Cookie headers.
|
|
350
|
-
* @param cookieName the name of the cookie to find.
|
|
351
|
-
* @param cookies the full list of cookies, either as a string or an array of strings.
|
|
352
|
-
* @returns the value of the cookie, if found.
|
|
353
|
-
*/
|
|
354
|
-
async readCookie(cookieName, cookies) {
|
|
355
|
-
if (cookies === null || cookies === undefined) {
|
|
356
|
-
return undefined;
|
|
357
|
-
}
|
|
358
|
-
if (typeof cookies === 'string') {
|
|
359
|
-
return await this.readCookie(cookieName, cookies.split(';'));
|
|
360
|
-
}
|
|
361
|
-
const valuePrefix = `${cookieName}=`;
|
|
362
|
-
for (const cookie of cookies) {
|
|
363
|
-
// split again on ; to handle Set-Cookie header format.
|
|
364
|
-
const trimmedCookie = cookie.split(';')[0].trimStart();
|
|
365
|
-
if (trimmedCookie.startsWith(valuePrefix)) {
|
|
366
|
-
const cookieValue = trimmedCookie.slice(valuePrefix.length);
|
|
367
|
-
if (this.encryptedCookies.includes(cookieName)) {
|
|
368
|
-
try {
|
|
369
|
-
return await this.decryptCookieValue(cookieValue);
|
|
370
|
-
}
|
|
371
|
-
catch (_e) {
|
|
372
|
-
return undefined;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
return cookieValue;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
return undefined;
|
|
379
|
-
}
|
|
380
|
-
async callIngest(args) {
|
|
381
|
-
const body = this.constructWebLog(args);
|
|
382
|
-
if (this.ingestType === netaceaintegrationbase_1.NetaceaIngestType.KINESIS) {
|
|
383
|
-
if (this.kinesis === undefined) {
|
|
384
|
-
// eslint-disable-next-line no-console
|
|
385
|
-
console.error('Netacea Error: Unable to log as Kinesis has not been defined.');
|
|
386
|
-
return;
|
|
387
|
-
}
|
|
388
|
-
try {
|
|
389
|
-
await this.kinesis.ingest({
|
|
390
|
-
...body,
|
|
391
|
-
apiKey: this.apiKey
|
|
392
|
-
}, this.makeRequest);
|
|
393
|
-
}
|
|
394
|
-
catch (e) {
|
|
395
|
-
// eslint-disable-next-line no-console
|
|
396
|
-
console.error('NETACEA Error: ', e.message);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
else {
|
|
400
|
-
const headers = {
|
|
401
|
-
'X-Netacea-API-Key': this.apiKey,
|
|
402
|
-
'content-type': 'application/json'
|
|
403
|
-
};
|
|
404
|
-
const res = await this.makeIngestApiCall(headers, body);
|
|
405
|
-
if (res.status !== 200) {
|
|
406
|
-
throw this.APIError(res);
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
async makeIngestApiCall(headers, body) {
|
|
411
|
-
return await this.makeRequest({
|
|
412
|
-
host: this.ingestServiceUrl,
|
|
413
|
-
method: 'POST',
|
|
414
|
-
path: '/',
|
|
415
|
-
headers,
|
|
416
|
-
body: JSON.stringify(body),
|
|
417
|
-
timeout: this.timeout
|
|
418
|
-
});
|
|
419
|
-
}
|
|
420
|
-
constructV2WebLog({ ip, userAgent, status, method, path, protocol, referer, bytesSent, requestTime, mitataCookie, sessionStatus, integrationType, integrationVersion }) {
|
|
421
|
-
var _a;
|
|
422
|
-
const now = new Date();
|
|
423
|
-
// Paths must be prefixed with '/'
|
|
424
|
-
if (path[0] !== '/') {
|
|
425
|
-
path = `/${path}`;
|
|
426
|
-
}
|
|
427
|
-
let actualQuery;
|
|
428
|
-
const splitPath = path.split('?');
|
|
429
|
-
if (splitPath.length > 1) {
|
|
430
|
-
actualQuery = `?${splitPath[1]}`;
|
|
431
|
-
}
|
|
432
|
-
const actualPath = splitPath[0];
|
|
433
|
-
const userId = (_a = netaceaintegrationbase_1.matchMitataCookie(mitataCookie)) === null || _a === void 0 ? void 0 : _a.userId;
|
|
434
|
-
const log = {
|
|
435
|
-
status,
|
|
436
|
-
method,
|
|
437
|
-
'bytes_sent': netaceaintegrationbase_1.safeParseInt(bytesSent),
|
|
438
|
-
'referrer': referer === '' ? undefined : referer,
|
|
439
|
-
'request': `${method} ${actualPath}${actualQuery !== null && actualQuery !== void 0 ? actualQuery : ''} ${protocol}`,
|
|
440
|
-
'request_time': netaceaintegrationbase_1.safeParseInt(requestTime),
|
|
441
|
-
'integration_type': integrationType,
|
|
442
|
-
'integration_version': integrationVersion,
|
|
443
|
-
'client': ip,
|
|
444
|
-
'user_agent': userAgent,
|
|
445
|
-
'bc_type': sessionStatus === '' ? undefined : sessionStatus,
|
|
446
|
-
'hour': now.getUTCHours(),
|
|
447
|
-
'minute': now.getUTCMinutes(),
|
|
448
|
-
// '2021-08-04T14:22:41.155Z' = toISOString()
|
|
449
|
-
'@timestamp': now.toISOString().replace('Z', '+00:00'),
|
|
450
|
-
'path': actualPath,
|
|
451
|
-
protocol,
|
|
452
|
-
'query': actualQuery,
|
|
453
|
-
'user_id': userId
|
|
454
|
-
};
|
|
455
|
-
return log;
|
|
456
|
-
}
|
|
457
|
-
constructV1WebLog({ ip, userAgent, status, method, path, protocol, referer, bytesSent, requestTime, mitataCookie, sessionStatus, integrationType, integrationVersion }) {
|
|
458
|
-
const timestamp = new Date().toUTCString();
|
|
459
|
-
return {
|
|
460
|
-
Request: `${method} ${path} ${protocol}`,
|
|
461
|
-
TimeLocal: timestamp,
|
|
462
|
-
RealIp: ip,
|
|
463
|
-
UserAgent: userAgent,
|
|
464
|
-
Status: status,
|
|
465
|
-
RequestTime: requestTime === null || requestTime === void 0 ? void 0 : requestTime.toString(),
|
|
466
|
-
BytesSent: bytesSent === null || bytesSent === void 0 ? void 0 : bytesSent.toString(),
|
|
467
|
-
Referer: referer === '' ? '-' : referer,
|
|
468
|
-
NetaceaUserIdCookie: mitataCookie !== null && mitataCookie !== void 0 ? mitataCookie : '',
|
|
469
|
-
NetaceaMitigationApplied: sessionStatus !== null && sessionStatus !== void 0 ? sessionStatus : '',
|
|
470
|
-
IntegrationType: integrationType !== null && integrationType !== void 0 ? integrationType : '',
|
|
471
|
-
IntegrationVersion: integrationVersion !== null && integrationVersion !== void 0 ? integrationVersion : ''
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
constructWebLog(args) {
|
|
475
|
-
args.bytesSent = args.bytesSent === '' ? '0' : args.bytesSent;
|
|
476
|
-
if (this.logVersion === netaceaintegrationbase_1.NetaceaLogVersion.V2) {
|
|
477
|
-
return this.constructV2WebLog(args);
|
|
478
|
-
}
|
|
479
|
-
return this.constructV1WebLog(args);
|
|
480
|
-
}
|
|
481
|
-
async check(netaceaCookie, clientIP, userAgent, captchaPageContentType, url, captchaCookie) {
|
|
482
|
-
var _a, _b;
|
|
483
|
-
let status, match, mitigate, captcha, body, setCookie, eventId;
|
|
484
|
-
if (this.secretKey === undefined) {
|
|
485
|
-
throw new Error('Secret key is required to mitigate');
|
|
486
|
-
}
|
|
487
|
-
const cookieInfo = netaceaintegrationbase_1.checkMitataCookie(netaceaCookie, clientIP, this.secretKey);
|
|
488
|
-
if (!cookieInfo.isPrimaryHashValid || cookieInfo.requiresReissue) {
|
|
489
|
-
// Get latest mitigation information
|
|
490
|
-
const result = await this.makeMitigateAPICall((_a = cookieInfo.mitata) === null || _a === void 0 ? void 0 : _a.userId, clientIP, userAgent, captchaCookie, captchaPageContentType, false, null, url);
|
|
491
|
-
status = result.status;
|
|
492
|
-
match = result.match;
|
|
493
|
-
mitigate = result.mitigate;
|
|
494
|
-
captcha = result.captcha;
|
|
495
|
-
body = result.body;
|
|
496
|
-
setCookie = [
|
|
497
|
-
await this.createMitata(clientIP, (_b = cookieInfo.mitata) === null || _b === void 0 ? void 0 : _b.userId, match, mitigate, captcha, result.mitataMaxAge)
|
|
498
|
-
];
|
|
499
|
-
eventId = result.eventId;
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
status = -1;
|
|
503
|
-
match = cookieInfo.match;
|
|
504
|
-
mitigate = cookieInfo.mitigate;
|
|
505
|
-
captcha = cookieInfo.captcha;
|
|
506
|
-
body = undefined;
|
|
507
|
-
setCookie = [];
|
|
508
|
-
}
|
|
509
|
-
return this.composeResult(body, setCookie, status, match, mitigate, captcha, false, eventId);
|
|
510
|
-
}
|
|
511
|
-
async createMitata(clientIP, userId, match, mitigate, captcha, maxAge = 86400, expiry = undefined) {
|
|
512
|
-
// serve, fail, cookiefail
|
|
513
|
-
const isCaptchaServe = [1, 3, 5].includes(captcha);
|
|
514
|
-
const expiryDelta = isCaptchaServe ? -this.mitataCookieExpirySeconds : this.mitataCookieExpirySeconds;
|
|
515
|
-
const mitataExpiry = expiry !== null && expiry !== void 0 ? expiry : Math.floor(Date.now() / 1000) + expiryDelta;
|
|
516
|
-
if (this.secretKey === undefined) {
|
|
517
|
-
throw new Error('Cannot build cookie without secret key.');
|
|
518
|
-
}
|
|
519
|
-
const mitataCode = [match, mitigate, captcha].join('');
|
|
520
|
-
const mitataValue = netaceaintegrationbase_1.createMitataCookie(clientIP, userId, mitataExpiry, this.secretKey, mitataCode);
|
|
521
|
-
return await this.buildCookieFromValues(this.netaceaCookieName, mitataValue, maxAge, '/');
|
|
522
|
-
}
|
|
523
|
-
async processCaptcha(netaceaCookie, clientIP, userAgent, captchaData) {
|
|
524
|
-
const { status, match, mitigate, captcha, body, setCookie } = await this.makeCaptchaAPICall(netaceaCookie, clientIP, userAgent, captchaData);
|
|
525
|
-
return this.composeResult(body, setCookie, status, match, mitigate, captcha, true);
|
|
526
|
-
}
|
|
527
|
-
async getMitataCaptchaFromHeaders(headers) {
|
|
528
|
-
if (Object.prototype.hasOwnProperty.call(headers, netaceaintegrationbase_1.dictionary.netaceaHeaders.mitataCaptcha)) {
|
|
529
|
-
const mitataCaptcha = headers[netaceaintegrationbase_1.dictionary.netaceaHeaders.mitataCaptcha];
|
|
530
|
-
const mitataCaptchaExpiry = parseInt(headers[netaceaintegrationbase_1.dictionary.netaceaHeaders.mitataCaptchaExpiry]);
|
|
531
|
-
const mitataCaptchaCookie = await this.buildCookieFromValues(this.netaceaCaptchaCookieName, mitataCaptcha, mitataCaptchaExpiry);
|
|
532
|
-
if (mitataCaptchaCookie !== undefined) {
|
|
533
|
-
return mitataCaptchaCookie;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
return undefined;
|
|
537
|
-
}
|
|
538
|
-
async makeCaptchaAPICall(netaceaCookie, clientIP, userAgent, captchaData) {
|
|
539
|
-
const headers = {
|
|
540
|
-
'X-Netacea-API-Key': this.apiKey,
|
|
541
|
-
'X-Netacea-Client-IP': clientIP,
|
|
542
|
-
'user-agent': userAgent,
|
|
543
|
-
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
|
544
|
-
};
|
|
545
|
-
const mitata = netaceaintegrationbase_1.matchMitataCookie(netaceaCookie);
|
|
546
|
-
if (mitata !== undefined) {
|
|
547
|
-
headers['X-Netacea-UserId'] = mitata.userId;
|
|
548
|
-
}
|
|
549
|
-
if (this.captchaSiteKey !== undefined && this.captchaSecretKey !== undefined) {
|
|
550
|
-
headers['X-Netacea-Captcha-Site-Key'] = this.captchaSiteKey;
|
|
551
|
-
headers['X-Netacea-Captcha-Secret-Key'] = this.captchaSecretKey;
|
|
552
|
-
}
|
|
553
|
-
const res = await this.makeRequest({
|
|
554
|
-
host: this.mitigationServiceUrl,
|
|
555
|
-
path: '/AtaVerifyCaptcha',
|
|
556
|
-
headers,
|
|
557
|
-
method: 'POST',
|
|
558
|
-
body: captchaData,
|
|
559
|
-
timeout: this.timeout
|
|
560
|
-
});
|
|
561
|
-
return await this.getApiCallResponseFromResponse(res, mitata === null || mitata === void 0 ? void 0 : mitata.userId, clientIP, '');
|
|
562
|
-
}
|
|
563
|
-
/* eslint max-lines-per-function: ["error", 60] */
|
|
564
|
-
async getApiCallResponseFromResponse(response, userId, clientIP, url) {
|
|
565
|
-
var _a;
|
|
566
|
-
if (response.status !== 200) {
|
|
567
|
-
throw this.APIError(response);
|
|
568
|
-
}
|
|
569
|
-
const match = parseInt(response.headers[netaceaintegrationbase_1.dictionary.netaceaHeaders.match]);
|
|
570
|
-
const mitigate = parseInt(response.headers[netaceaintegrationbase_1.dictionary.netaceaHeaders.mitigate]);
|
|
571
|
-
const captcha = parseInt(response.headers[netaceaintegrationbase_1.dictionary.netaceaHeaders.captcha]);
|
|
572
|
-
let mitataMaxAge = parseInt(response.headers[netaceaintegrationbase_1.dictionary.netaceaHeaders.mitataExpiry]);
|
|
573
|
-
if (isNaN(mitataMaxAge)) {
|
|
574
|
-
mitataMaxAge = 86400;
|
|
575
|
-
}
|
|
576
|
-
const mitata = await this.createMitata(clientIP, userId, match, mitigate, captcha);
|
|
577
|
-
const mitataCaptcha = await this.getMitataCaptchaFromHeaders(response.headers);
|
|
578
|
-
const setCookie = [
|
|
579
|
-
mitata,
|
|
580
|
-
mitataCaptcha
|
|
581
|
-
].filter(c => c !== undefined);
|
|
582
|
-
const eventId = response.headers[netaceaintegrationbase_1.dictionary.netaceaHeaders.eventId];
|
|
583
|
-
if (((_a = response.headers['content-type']) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'application/json') {
|
|
584
|
-
if (this.netaceaCaptchaPath === undefined) {
|
|
585
|
-
// shouldn't be reachable as we should not request JSON captcha unless netaceaCaptchaPathis defined!
|
|
586
|
-
throw new Error('netaceaCaptchaPath and URL must be defined to handle JSON captcha');
|
|
587
|
-
}
|
|
588
|
-
response.body = await captchaHelpers_1.modifyCaptchaJsonResponse(response.body, this.netaceaCaptchaPath, url);
|
|
589
|
-
}
|
|
590
|
-
return {
|
|
591
|
-
status: response.status,
|
|
592
|
-
match,
|
|
593
|
-
mitigate,
|
|
594
|
-
captcha,
|
|
595
|
-
setCookie,
|
|
596
|
-
body: response.body,
|
|
597
|
-
eventId,
|
|
598
|
-
mitataMaxAge
|
|
599
|
-
};
|
|
600
|
-
}
|
|
601
|
-
async buildCookieFromValues(cookieName, value, maxAge, path = '/') {
|
|
602
|
-
if (this.encryptedCookies.includes(cookieName)) {
|
|
603
|
-
const encyptedValue = await this.encryptCookieValue(value);
|
|
604
|
-
return `${cookieName}=${encyptedValue}; Max-Age=${maxAge}; Path=${path}`;
|
|
605
|
-
}
|
|
606
|
-
return `${cookieName}=${value}; Max-Age=${maxAge}; Path=${path}`;
|
|
607
|
-
}
|
|
608
|
-
buildCookieHeader(cookies) {
|
|
609
|
-
let cookiestr = '';
|
|
610
|
-
let separator = '';
|
|
611
|
-
for (const cookie in cookies) {
|
|
612
|
-
const cookieValue = cookies[cookie];
|
|
613
|
-
if (cookieValue !== undefined) {
|
|
614
|
-
cookiestr = `${cookiestr}${separator}${cookie}=${cookieValue}`;
|
|
615
|
-
separator = '; ';
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
return cookiestr;
|
|
619
|
-
}
|
|
620
|
-
async makeMitigateAPICall(userId, clientIP, userAgent, captchaCookie, captchaPageContentType, isCaptchaGet, trackingId, url) {
|
|
621
|
-
const headers = {
|
|
622
|
-
'X-Netacea-API-Key': this.apiKey,
|
|
623
|
-
'X-Netacea-Client-IP': clientIP,
|
|
624
|
-
'user-agent': userAgent,
|
|
625
|
-
'cookie': this.buildCookieHeader({
|
|
626
|
-
_mitatacaptcha: captchaCookie
|
|
627
|
-
})
|
|
628
|
-
};
|
|
629
|
-
if (userId !== undefined) {
|
|
630
|
-
headers['X-Netacea-UserId'] = userId;
|
|
631
|
-
}
|
|
632
|
-
if (this.captchaSiteKey !== undefined && this.captchaSecretKey !== undefined) {
|
|
633
|
-
headers['X-Netacea-Captcha-Site-Key'] = this.captchaSiteKey;
|
|
634
|
-
headers['X-Netacea-Captcha-Secret-Key'] = this.captchaSecretKey;
|
|
635
|
-
}
|
|
636
|
-
headers['X-Netacea-Captcha-Content-Type'] = captchaPageContentType;
|
|
637
|
-
const res = await this.makeRequest({
|
|
638
|
-
host: this.mitigationServiceUrl,
|
|
639
|
-
path: isCaptchaGet ? `/captcha${trackingId !== null ? `?trackingId=${trackingId}` : ''}` : '/',
|
|
640
|
-
headers,
|
|
641
|
-
method: 'GET',
|
|
642
|
-
timeout: this.timeout
|
|
643
|
-
});
|
|
644
|
-
return await this.getApiCallResponseFromResponse(res, userId, clientIP, url);
|
|
645
|
-
}
|
|
646
|
-
composeResult(body, setCookie, status, match, mitigate, captcha, isCaptchaPost, eventId) {
|
|
647
|
-
const bestMitigation = this.findBestMitigation(match, mitigate, captcha, isCaptchaPost);
|
|
648
|
-
const result = {
|
|
649
|
-
body,
|
|
650
|
-
apiCallStatus: status,
|
|
651
|
-
setCookie,
|
|
652
|
-
sessionStatus: bestMitigation.sessionStatus,
|
|
653
|
-
mitigation: bestMitigation.mitigation,
|
|
654
|
-
mitigated: [
|
|
655
|
-
netaceaintegrationbase_1.dictionary.mitigationTypes.block,
|
|
656
|
-
netaceaintegrationbase_1.dictionary.mitigationTypes.captcha
|
|
657
|
-
].includes(bestMitigation.mitigation)
|
|
658
|
-
};
|
|
659
|
-
if (this.mitigationType === netaceaintegrationbase_1.NetaceaMitigationType.INJECT) {
|
|
660
|
-
const injectHeaders = {
|
|
661
|
-
'x-netacea-match': bestMitigation.parts.match.toString(),
|
|
662
|
-
'x-netacea-mitigate': bestMitigation.parts.mitigate.toString(),
|
|
663
|
-
'x-netacea-captcha': bestMitigation.parts.captcha.toString()
|
|
664
|
-
};
|
|
665
|
-
if (eventId !== undefined) {
|
|
666
|
-
injectHeaders['x-netacea-event-id'] = eventId;
|
|
667
|
-
}
|
|
668
|
-
result.injectHeaders = injectHeaders;
|
|
669
|
-
}
|
|
670
|
-
return result;
|
|
671
|
-
}
|
|
672
|
-
findBestMitigation(match, mitigate, captcha, isCaptchaPost) {
|
|
673
|
-
var _a, _b, _c;
|
|
674
|
-
const UNKNOWN = 'unknown';
|
|
675
|
-
if (!isCaptchaPost) {
|
|
676
|
-
if (captcha === 2) {
|
|
677
|
-
captcha = 4;
|
|
678
|
-
}
|
|
679
|
-
else if (captcha === 3) {
|
|
680
|
-
captcha = 5;
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
let sessionStatus = (_a = netaceaintegrationbase_1.dictionary.matchMap[match]) !== null && _a !== void 0 ? _a : (UNKNOWN + '_');
|
|
684
|
-
sessionStatus += (_b = netaceaintegrationbase_1.dictionary.mitigateMap[mitigate]) !== null && _b !== void 0 ? _b : UNKNOWN;
|
|
685
|
-
let mitigation = netaceaintegrationbase_1.dictionary.bestMitigationMap[mitigate];
|
|
686
|
-
if (captcha !== 0) {
|
|
687
|
-
sessionStatus += ',' + ((_c = netaceaintegrationbase_1.dictionary.captchaMap[captcha]) !== null && _c !== void 0 ? _c : UNKNOWN);
|
|
688
|
-
const bestCaptchaMitigation = netaceaintegrationbase_1.dictionary.bestMitigationCaptchaMap[captcha];
|
|
689
|
-
if (bestCaptchaMitigation !== undefined) {
|
|
690
|
-
mitigation = bestCaptchaMitigation;
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
if (this.mitigationType === netaceaintegrationbase_1.NetaceaMitigationType.INJECT) {
|
|
694
|
-
mitigation = netaceaintegrationbase_1.dictionary.mitigationTypes.none;
|
|
695
|
-
}
|
|
696
|
-
return {
|
|
697
|
-
sessionStatus,
|
|
698
|
-
mitigation,
|
|
699
|
-
parts: {
|
|
700
|
-
match,
|
|
701
|
-
mitigate,
|
|
702
|
-
captcha
|
|
703
|
-
}
|
|
704
|
-
};
|
|
705
|
-
}
|
|
706
|
-
APIError(response) {
|
|
707
|
-
let message = 'Unknown error';
|
|
708
|
-
switch (response.status) {
|
|
709
|
-
case 403:
|
|
710
|
-
message = 'Invalid credentials';
|
|
711
|
-
break;
|
|
712
|
-
case 500:
|
|
713
|
-
message = 'Server error';
|
|
714
|
-
break;
|
|
715
|
-
case 502:
|
|
716
|
-
message = 'Bad Gateway';
|
|
717
|
-
break;
|
|
718
|
-
case 503:
|
|
719
|
-
message = 'Service Unavailable';
|
|
720
|
-
break;
|
|
721
|
-
case 400:
|
|
722
|
-
message = 'Invalid request';
|
|
723
|
-
break;
|
|
724
|
-
}
|
|
725
|
-
return new Error(`Error reaching Netacea API (${message}), status: ${response.status}`);
|
|
726
|
-
}
|
|
727
|
-
isUrlCaptchaPost(url, method) {
|
|
728
|
-
return url.includes('/AtaVerifyCaptcha') && method.toLowerCase() === 'post';
|
|
729
|
-
}
|
|
730
|
-
async processMitigateRequest(args) {
|
|
731
|
-
const isCaptchaGet = await captchaHelpers_1.isUrlCaptchaGet(args.url, args.method, this.netaceaCaptchaPath);
|
|
732
|
-
if (isCaptchaGet) {
|
|
733
|
-
const trackingId = await captchaHelpers_1.getTrackingId(args.url);
|
|
734
|
-
return await this.handleGetCaptchaRequest(args.mitata, args.clientIp, args.userAgent, args.captchaPageContentType, trackingId, args.url, args.mitataCaptcha);
|
|
735
|
-
}
|
|
736
|
-
const isCaptchaPost = this.isUrlCaptchaPost(args.url, args.method);
|
|
737
|
-
if (isCaptchaPost) {
|
|
738
|
-
return await this.processCaptcha(args.mitata, args.clientIp, args.userAgent, await args.getBodyFn());
|
|
739
|
-
}
|
|
740
|
-
return await this.check(args.mitata, args.clientIp, args.userAgent, args.captchaPageContentType, args.url, args.mitataCaptcha);
|
|
741
|
-
}
|
|
742
|
-
async setIngestOnlyMitataCookie(userId) {
|
|
743
|
-
const mitataCookie = await this.createMitata(netaceaintegrationbase_1.ingestIgnoredIpValue, userId, 0, 0, 0, ONE_DAY_IN_SECONDS);
|
|
744
|
-
return {
|
|
745
|
-
sessionStatus: '',
|
|
746
|
-
setCookie: [mitataCookie]
|
|
747
|
-
};
|
|
748
|
-
}
|
|
749
|
-
async processIngest(args) {
|
|
750
|
-
var _a;
|
|
751
|
-
if (this.secretKey === undefined) {
|
|
752
|
-
throw new Error('Secret key is required for ingest');
|
|
753
|
-
}
|
|
754
|
-
const cookies = this.getCookieHeader(args);
|
|
755
|
-
const netaceaCookie = await this.readCookie(this.netaceaCookieName, cookies);
|
|
756
|
-
const cookieInfo = netaceaintegrationbase_1.checkMitataCookie(netaceaCookie, netaceaintegrationbase_1.ingestIgnoredIpValue, this.secretKey);
|
|
757
|
-
if (!cookieInfo.isPrimaryHashValid) {
|
|
758
|
-
return await this.setIngestOnlyMitataCookie(undefined);
|
|
759
|
-
}
|
|
760
|
-
if (cookieInfo.requiresReissue) {
|
|
761
|
-
return await this.setIngestOnlyMitataCookie((_a = cookieInfo.mitata) === null || _a === void 0 ? void 0 : _a.userId);
|
|
762
|
-
}
|
|
763
|
-
return {
|
|
764
|
-
sessionStatus: '',
|
|
765
|
-
setCookie: []
|
|
766
|
-
};
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
exports.default = Cloudflare;
|
|
770
|
-
//# sourceMappingURL=Cloudflare.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Cloudflare.js","sourceRoot":"","sources":["../../src/Cloudflare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export declare function getCaptchaPageContentType(acceptHeader?: string): string;
|
|
2
|
-
export declare function modifyCaptchaJsonResponse(captchaJsonBody: string, captchaUrlPath: string, url: string): Promise<string>;
|
|
3
|
-
export declare function getTrackingId(url: string): Promise<string | null>;
|
|
4
|
-
export declare function isUrlCaptchaGet(url: string, method: string, netaceaCaptchaPath: string | undefined): Promise<boolean>;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isUrlCaptchaGet = exports.getTrackingId = exports.modifyCaptchaJsonResponse = exports.getCaptchaPageContentType = void 0;
|
|
4
|
-
function getCaptchaPageContentType(acceptHeader) {
|
|
5
|
-
if (acceptHeader === undefined) {
|
|
6
|
-
return 'text/html';
|
|
7
|
-
}
|
|
8
|
-
const acceptedContetType = acceptHeader.toLowerCase();
|
|
9
|
-
const acceptsHtml = acceptedContetType.includes('application/html') || acceptedContetType.includes('text/html');
|
|
10
|
-
const acceptsJson = acceptedContetType.includes('application/json');
|
|
11
|
-
return !acceptsHtml && acceptsJson ? 'application/json' : 'text/html';
|
|
12
|
-
}
|
|
13
|
-
exports.getCaptchaPageContentType = getCaptchaPageContentType;
|
|
14
|
-
async function modifyCaptchaJsonResponse(captchaJsonBody, captchaUrlPath, url) {
|
|
15
|
-
const trackingId = captchaJsonBody.length > 0 ? JSON.parse(captchaJsonBody).trackingId : undefined;
|
|
16
|
-
const { hostname } = new URL(url);
|
|
17
|
-
return (captchaUrlPath.length < 2 || trackingId === undefined)
|
|
18
|
-
? ''
|
|
19
|
-
: JSON.stringify({
|
|
20
|
-
captchaRelativeURL: `${captchaUrlPath}?trackingId=${trackingId}`,
|
|
21
|
-
captchaAbsoluteURL: `https://${hostname}${captchaUrlPath}?trackingId=${trackingId}`
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
exports.modifyCaptchaJsonResponse = modifyCaptchaJsonResponse;
|
|
25
|
-
async function getTrackingId(url) {
|
|
26
|
-
try {
|
|
27
|
-
const { searchParams } = new URL(url);
|
|
28
|
-
return searchParams.get('trackingId');
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.getTrackingId = getTrackingId;
|
|
35
|
-
async function isUrlCaptchaGet(url, method, netaceaCaptchaPath) {
|
|
36
|
-
if (netaceaCaptchaPath === undefined || !Boolean(netaceaCaptchaPath)) {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
if (!netaceaCaptchaPath.startsWith('/')) {
|
|
40
|
-
netaceaCaptchaPath = '/' + netaceaCaptchaPath;
|
|
41
|
-
}
|
|
42
|
-
const { pathname, search } = new URL(url);
|
|
43
|
-
return (pathname.includes(netaceaCaptchaPath) &&
|
|
44
|
-
search.includes('trackingId') &&
|
|
45
|
-
method.toLowerCase() === 'get');
|
|
46
|
-
}
|
|
47
|
-
exports.isUrlCaptchaGet = isUrlCaptchaGet;
|
|
48
|
-
//# sourceMappingURL=captchaHelpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"captchaHelpers.js","sourceRoot":"","sources":["../../src/captchaHelpers.ts"],"names":[],"mappings":";;;AAAA,SAAgB,yBAAyB,CAAE,YAAqB;IAC9D,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,OAAO,WAAW,CAAA;KACnB;IACD,MAAM,kBAAkB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC/G,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;IACnE,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAA;AACvE,CAAC;AARD,8DAQC;AAEM,KAAK,UAAU,yBAAyB,CAC7C,eAAuB,EACvB,cAAsB,EACtB,GAAW;IAEX,MAAM,UAAU,GAAuB,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IACtH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IAEjC,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,KAAK,SAAS,CAAC;QAC5D,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YACf,kBAAkB,EAAE,GAAG,cAAc,eAAe,UAAU,EAAE;YAChE,kBAAkB,EAAE,WAAW,QAAQ,GAAG,cAAc,eAAe,UAAU,EAAE;SACpF,CAAC,CAAA;AACN,CAAC;AAdD,8DAcC;AAEM,KAAK,UAAU,aAAa,CAAE,GAAW;IAC9C,IAAI;QACF,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QACrC,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;KACtC;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,IAAI,CAAA;KACZ;AACH,CAAC;AAPD,sCAOC;AAEM,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,MAAc,EACd,kBAAsC;IAEtC,IAAI,kBAAkB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;QACpE,OAAO,KAAK,CAAA;KACb;IAED,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACvC,kBAAkB,GAAG,GAAG,GAAG,kBAAkB,CAAA;KAC9C;IAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IAEzC,OAAO,CACL,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7B,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAC/B,CAAA;AACH,CAAC;AApBD,0CAoBC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decrypt = exports.encrypt = void 0;
|
|
4
|
-
const jose = require("jose");
|
|
5
|
-
async function encrypt(s, secret) {
|
|
6
|
-
const joseSecret = jose.base64url.decode(secret);
|
|
7
|
-
const payload = new TextEncoder().encode(s);
|
|
8
|
-
const jwt = await new jose.CompactEncrypt(payload)
|
|
9
|
-
.setProtectedHeader({ alg: 'dir', enc: 'A256GCM' })
|
|
10
|
-
.encrypt(joseSecret);
|
|
11
|
-
return jwt;
|
|
12
|
-
}
|
|
13
|
-
exports.encrypt = encrypt;
|
|
14
|
-
async function decrypt(jwe, secret) {
|
|
15
|
-
const joseSecret = jose.base64url.decode(secret);
|
|
16
|
-
const { plaintext } = await jose.compactDecrypt(jwe, joseSecret, {
|
|
17
|
-
keyManagementAlgorithms: ['dir'],
|
|
18
|
-
contentEncryptionAlgorithms: ['A256GCM']
|
|
19
|
-
});
|
|
20
|
-
return new TextDecoder().decode(plaintext);
|
|
21
|
-
}
|
|
22
|
-
exports.decrypt = decrypt;
|
|
23
|
-
//# sourceMappingURL=cookieEncryption.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cookieEncryption.js","sourceRoot":"","sources":["../../src/cookieEncryption.ts"],"names":[],"mappings":";;;AAAA,6BAA4B;AAErB,KAAK,UAAU,OAAO,CAAE,CAAS,EAAE,MAAc;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAEhD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;SAC/C,kBAAkB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;SAClD,OAAO,CAAC,UAAU,CAAC,CAAA;IAEtB,OAAO,GAAG,CAAA;AACZ,CAAC;AATD,0BASC;AAEM,KAAK,UAAU,OAAO,CAAE,GAAW,EAAE,MAAc;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAEhD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE;QAC/D,uBAAuB,EAAE,CAAC,KAAK,CAAC;QAChC,2BAA2B,EAAE,CAAC,SAAS,CAAC;KACzC,CAAC,CAAA;IAEF,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAC5C,CAAC;AATD,0BASC"}
|
package/dist/src/fetch.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const fetch: typeof globalThis.fetch;
|
package/dist/src/fetch.js
DELETED
package/dist/src/fetch.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/fetch.ts"],"names":[],"mappings":";;;AAAa,QAAA,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA"}
|
package/dist/src/index.d.ts
DELETED
package/dist/src/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const Cloudflare_1 = require("./Cloudflare");
|
|
4
|
-
var netaceaintegrationbase_1 = require("@netacea/netaceaintegrationbase");
|
|
5
|
-
Object.defineProperty(exports, "NetaceaMitigationType", { enumerable: true, get: function () { return netaceaintegrationbase_1.NetaceaMitigationType; } });
|
|
6
|
-
exports.default = Cloudflare_1.default;
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,6CAAqC;AAErC,0EAAuE;AAA9D,+HAAA,qBAAqB,OAAA;AAC9B,kBAAe,oBAAU,CAAA"}
|