@netacea/cloudflare 6.8.13 → 6.8.15

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/index.d.ts CHANGED
@@ -256,12 +256,21 @@ declare class WebStandardKinesis {
256
256
  private signRequest;
257
257
  }
258
258
 
259
+ interface HttpMsgSignature {
260
+ computedInput?: string;
261
+ signature?: string;
262
+ signatureSha256?: string;
263
+ signatureInput?: string;
264
+ signatureAgent?: string;
265
+ }
266
+
259
267
  interface NetaceaCloudflareResult {
260
268
  protectorLatencyMs?: number;
261
269
  protectorStatus?: number;
262
270
  requestDetails: NetaceaRequestDetails;
263
271
  response: Response;
264
272
  sessionStatus: string;
273
+ signatureStatus?: string;
265
274
  }
266
275
  interface NetaceaSessionCookieDetails {
267
276
  userId: string | undefined;
@@ -309,6 +318,7 @@ interface NetaceaRequestDetails {
309
318
  headerFingerprint: string;
310
319
  cookieFingerprint: string;
311
320
  };
321
+ httpMessageSignatures: HttpMsgSignature;
312
322
  }
313
323
 
314
324
  interface KinesisIngestConfigArgs {
@@ -381,6 +391,7 @@ interface ComposeResultResponse {
381
391
  body?: string | ReadableStream<Uint8Array>;
382
392
  apiCallStatus?: number;
383
393
  apiCallLatency?: number;
394
+ signatureStatus?: string;
384
395
  setCookie: string[];
385
396
  sessionStatus: string;
386
397
  mitigation: string;
@@ -407,6 +418,7 @@ declare class Cloudflare {
407
418
  protected readonly kinesis?: WebStandardKinesis;
408
419
  private readonly requestAnalyser;
409
420
  private readonly cookieFactory;
421
+ private readonly protectorApiClient;
410
422
  private workerInstanceId;
411
423
  constructor(args: CloudflareConstructorArgs);
412
424
  /**
@@ -450,6 +462,7 @@ declare class Cloudflare {
450
462
  protected check(requestDetails: NetaceaRequestDetails, captchaPageContentType: string): Promise<ComposeResultResponse>;
451
463
  protected createMitata(clientIP: string, userId: string, match: string, mitigate: string, captcha: string, maxAge?: number, expiry?: number | undefined, issueReason?: NetaceaCookieV3IssueReason): Promise<string>;
452
464
  private processCaptcha;
465
+ private getMitataCaptchaFromResponseView;
453
466
  private getMitataCaptchaFromHeaders;
454
467
  private parseCaptchaAPICallBody;
455
468
  private makeCaptchaAPICall;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("aws4fetch"),t=require("buffer/"),i=require("jose"),a=require("uuid");function o(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var a=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,a.get?a:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}var s,n,r,c=o(i),u=o(a);!function(e){e.ORIGIN="ORIGIN",e.HTTP="HTTP",e.KINESIS="KINESIS",e.NATIVE="NATIVE"}(s||(s={})),exports.NetaceaMitigationType=void 0,(n=exports.NetaceaMitigationType||(exports.NetaceaMitigationType={})).MITIGATE="MITIGATE",n.INJECT="INJECT",n.INGEST="INGEST",function(e){e.CAPTCHA_GET="captcha_get",e.CAPTCHA_POST="captcha_post",e.EXPIRED_SESSION="expired_session",e.FORCED_REVALIDATION="forced_revalidation",e.INVALID_SESSION="invalid_session",e.IP_CHANGE="ip_change",e.NO_SESSION="no_session"}(r||(r={}));const d=3e3;function h(e,t){const i=e.split(";").map((e=>e.trim())).filter((e=>e.toLowerCase().startsWith(t.toLowerCase())))[0];return void 0!==i&&i.length>0?i?.replace(`${t}=`,""):void 0}function p(e,t=!1){return"string"!=typeof e&&(e=e.join("; ")),""===e?"":l(e.split(";"),t).join("; ")}function l(e,t=!1){if(t)return l(e.reverse()).reverse();const i=new Set,a=[];for(let t of e){if(t=t.trimStart(),""===t.trim())continue;const e=t.split("=")[0].toUpperCase();i.has(e)||(i.add(e),a.push(t))}return a}var f=Object.freeze({__proto__:null,configureCookiesDomain:function(e,t){let i=e=p(e??"",!0),a=t=p(t??"",!0);if(void 0!==e&&void 0!==t){const o=h(e,"Domain"),s=h(t,"Domain");void 0!==o&&void 0!==s?a=t.replace(s,o):void 0!==o&&void 0===s?a=t+(""!==t?`; Domain=${o}`:`Domain=${o}`):void 0===o&&void 0!==s&&(i=e+(""!==e?`; Domain=${s}`:`Domain=${s}`))}else if(void 0!==e&&void 0===t){const t=h(e,"Domain");void 0!==t&&(a=`Domain=${t}`)}else if(void 0===e&&void 0!==t){const e=h(t,"Domain");void 0!==e&&(i=`Domain=${e}`)}return{cookieAttributes:""!==i?i:void 0,captchaCookieAttributes:""!==a?a:void 0}},extractAndRemoveCookieAttr:function(e,t){const i=h(e,t);if(void 0!==i){return{extractedAttribute:i,cookieAttributes:e.replace(/ /g,"").replace(`${t}=${i}`,"").split(";").filter((e=>e.length>0)).join("; ")}}return{extractedAttribute:void 0,cookieAttributes:e}},extractCookieAttr:h,removeDuplicateAttrs:p});function g(e){const t=p([e.otherAttributes??"",`Max-Age=${e.maxAgeAttribute??86400}`,"Path=/"].join("; "));return`${e.cookieName}=${e.cookieValue}; ${t}`}var y=Object.freeze({__proto__:null,createNetaceaCaptchaSetCookieString:function(e){return g({...e,cookieName:e.cookieName??"_mitatacaptcha"})},createNetaceaSetCookieString:function(e){return g({...e,cookieName:e.cookieName??"_mitata"})},createSetCookieString:g});var m=Object.freeze({__proto__:null,parseSetCookie:function(e){const t=e.indexOf("=");if(t<0)throw new Error("Could not parse the given set-cookie value.");const i=e.slice(0,t),a=e.slice(t+1),o=a.indexOf(";");if(o<0){return{name:i,value:a,attributes:""}}return{name:i,value:a.slice(0,o),attributes:a.slice(o).trimStart()}}});const C={cookie:{parse:m,attributes:f,netaceaSession:y}},S=globalThis.fetch.bind(globalThis),k={none:"",block:"block",captcha:"captcha",allow:"allow",captchaPass:"captchapass",flag:"flag",monetise:"monetise"},v="x-netacea-mitatacaptcha-value",w="x-netacea-mitatacaptcha-expiry",I={0:"",1:"ua_",2:"ip_",3:"visitor_",4:"datacenter_",5:"customer_session_",6:"organisation_",7:"asn_",8:"country_",9:"combination_",b:"headerFP_",c:"vendorFamily_",d:"vendorName_",e:"vendor_",f:"vendorCrawlerClassification_"},b={0:"",1:"blocked",2:"allow",3:"hardblocked",4:"flagged",5:"monetised"},N={0:"",1:"captcha_serve",2:"captcha_pass",3:"captcha_fail",4:"captcha_cookiepass",5:"captcha_cookiefail",6:"checkpoint_signal",7:"checkpoint_post",a:"checkpoint_serve",b:"checkpoint_pass",c:"checkpoint_fail",d:"checkpoint_cookiepass",e:"checkpoint_cookiefail"},E={0:k.none,1:k.block,2:k.none,3:k.block,4:k.flag,5:k.monetise},A={1:k.captcha,2:k.captchaPass,3:k.captcha,4:k.allow,5:k.captcha,6:k.allow,7:k.captcha,a:k.captcha,b:k.captchaPass,c:k.captcha,d:k.allow,e:k.captcha},R="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),O=/^(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/((\d|[a-z])(\d)(\d|[a-z]))$/i;function P(e=16,t=R){const i=new Uint16Array(e-1);crypto.getRandomValues(i);return`c${Array.from(i).map((e=>t[e%t.length])).join("")}`}async function _(e,t){const i=await async function(e){return await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"])}(function(e){return"string"==typeof e?(new TextEncoder).encode(e):e}(t));return new Uint8Array(await crypto.subtle.sign("HMAC",i,e))}var T,x="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},M={},V={};Object.defineProperty(V,"__esModule",{value:!0}),V.NetaceaCookieV3IssueReason=void 0,function(e){e.CAPTCHA_GET="captcha_get",e.CAPTCHA_POST="captcha_post",e.EXPIRED_SESSION="expired_session",e.FORCED_REVALIDATION="forced_revalidation",e.INVALID_SESSION="invalid_session",e.IP_CHANGE="ip_change",e.NO_SESSION="no_session",e.UNKNOWN="unknown"}(T||(V.NetaceaCookieV3IssueReason=T={}));var K={},L={},j={};Object.defineProperty(j,"__esModule",{value:!0}),j.netaceaCookieV3OptionalKeyMap=j.netaceaCookieV3KeyMap=j.COOKIEDELIMITER=void 0,j.COOKIEDELIMITER="_/@#/",j.netaceaCookieV3KeyMap={clientIP:"cip",userId:"uid",gracePeriod:"grp",cookieId:"cid",match:"mat",mitigate:"mit",captcha:"cap",issueTimestamp:"ist",issueReason:"isr"},j.netaceaCookieV3OptionalKeyMap={checkAllPostRequests:"fCAPR"},Object.defineProperty(L,"__esModule",{value:!0}),L.defaultInvalidResponse=L.matchNetaceaCookieV3=L.checkNetaceaCookieV3=L.objectIsNetaceaCookieV3=L.cookieIsNetaceaV3Format=L.createNetaceaCookieV3=void 0;const H=V,D=j;function F(e){if(void 0===e||""===e)return;const t=e.split("&"),i={clientIP:"",userId:"",cookieId:"",gracePeriod:0,match:"0",mitigate:"0",captcha:"0",issueTimestamp:0,issueReason:"",checkAllPostRequests:void 0};for(const e of t){const[t,a]=e.split("="),o=decodeURIComponent(a);let s,n=Object.keys(D.netaceaCookieV3KeyMap).find((e=>D.netaceaCookieV3KeyMap[e]===t));void 0===n&&(n=Object.keys(D.netaceaCookieV3OptionalKeyMap).find((e=>D.netaceaCookieV3OptionalKeyMap[e]===t))),s=void 0!==n&&["match","mitigate","captcha"].includes(n)?""===o?void 0:o:""===o?void 0:Number(o),void 0!==s&&"string"!=typeof s&&isNaN(s)&&(s=o),i[n]=s}return i}function q(){return{mitata:void 0,requiresReissue:!1,isExpired:!1,shouldExpire:!1,isSameIP:!1,isPrimaryHashValid:!1,captcha:"0",match:"0",mitigate:"0",issueReason:H.NetaceaCookieV3IssueReason.NO_SESSION}}L.createNetaceaCookieV3=function(e){return Object.entries(e).filter((([e,t])=>void 0!==t)).map((([e,t])=>e in D.netaceaCookieV3OptionalKeyMap?`${D.netaceaCookieV3OptionalKeyMap[e]}=${encodeURIComponent(t)}`:`${D.netaceaCookieV3KeyMap[e]}=${encodeURIComponent(t)}`)).join("&")},L.cookieIsNetaceaV3Format=function(e){if(void 0===e||""===e)return!1;const t=e.split("&").map((e=>e.split("=")[0])).filter((e=>!Object.values(D.netaceaCookieV3OptionalKeyMap).includes(e)));return 0!==t.length&&t.every((e=>Object.values(D.netaceaCookieV3KeyMap).includes(e)))},L.objectIsNetaceaCookieV3=function(e){if("object"!=typeof e||null===e)return!1;for(const t of Object.keys(D.netaceaCookieV3KeyMap)){if(!(t in e))return!1;if(void 0===e[t])return!1}return!0},L.checkNetaceaCookieV3=function(e,t){if(void 0===e||""===e)return q();let i;try{i=F(e)}catch{return q()}if(void 0!==i){const e=Math.floor(Date.now()/1e3),a=i.issueTimestamp+i.gracePeriod<e,o=t===i.clientIP,s=["1","3","5","a","c","e"].includes(i.captcha),n="3"===i.mitigate;return{mitata:i,requiresReissue:a||!o,isExpired:a,shouldExpire:s||n,isSameIP:o,isPrimaryHashValid:!0,match:i.match,mitigate:i.mitigate,captcha:i.captcha,issueReason:i.issueReason}}return q()},L.matchNetaceaCookieV3=F,L.defaultInvalidResponse=q;var B={};Object.defineProperty(B,"__esModule",{value:!0}),B.AbstractCookieFactory=void 0;const $=V,U=L,G=j,z="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),W=/^(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/((\d|[a-z])(\d)(\d|[a-z]))$/i;B.AbstractCookieFactory=class{constructor(e){this.config=e}isEncrypted(e){return 5===e.split(".").length}async createCookieValue(e){if(void 0!==this.config.cookieEncryptionKey){const t=(0,U.createNetaceaCookieV3)({clientIP:e.clientIP,userId:e.userId??this.generateUserId(),match:e.match,mitigate:e.mitigate,captcha:e.captcha,gracePeriod:e.gracePeriod,cookieId:e.cookieId,issueTimestamp:Math.floor(Date.now()/1e3),issueReason:e.issueReason??$.NetaceaCookieV3IssueReason.NO_SESSION,checkAllPostRequests:e.checkAllPostRequests});return await this.encrypt(t)}if(void 0===this.config.secretKey)throw new Error("Cannot build cookie without secret key.");const t=[e.match,e.mitigate,e.captcha].join(""),i=Math.floor(Date.now()/1e3)+e.gracePeriod;return await this.buildMitataCookie(e.clientIP,e.userId,i,this.config.secretKey,t)}async retrieveCookieInfo(e,t){if(void 0===e||""===e)return(0,U.defaultInvalidResponse)();let i=e;return this.isEncrypted(e)&&(i=await this.decrypt(e)),(0,U.cookieIsNetaceaV3Format)(i)?(0,U.checkNetaceaCookieV3)(i,t):await this.checkMitataCookie(i,t,this.config.secretKey??"")}async buildMitataCookie(e,t,i,a,o){const s=[i,t??this.generateUserId(),await this.hash(`${e}|${String(i)}`,a),o].join(G.COOKIEDELIMITER);return`${await this.hash(s,a)}${G.COOKIEDELIMITER}${s}`}async checkMitataCookie(e,t,i){const a=function(e){const t=e.match(W);if(null===t)return;const[,i,a,o,s,n,r,c,u]=t;return{signature:i,expiry:a,userId:o,ipHash:s,mitigationType:n,match:r,mitigate:c,captcha:u}}(e);if(void 0===a)return(0,U.defaultInvalidResponse)();const o=Math.floor(Date.now()/1e3),s=parseInt(a.expiry)<o,n=["1","3","5"].includes(a.captcha),r="3"===a.mitigate,c=n||r,u=await this.hash(`${t}|${a.expiry}`,i)===a.ipHash,d=[a.expiry,a.userId,a.ipHash,a.mitigationType].join(G.COOKIEDELIMITER);return{mitata:a,requiresReissue:s||!u,isExpired:s,shouldExpire:c,isSameIP:u,isPrimaryHashValid:await this.hash(d,i)===a.signature,match:a.match,mitigate:a.mitigate,captcha:a.captcha,issueReason:$.NetaceaCookieV3IssueReason.NO_SESSION}}generateUserId(e=16){const t=new Uint16Array(e-1);this.getRandomValues(t);return`c${Array.from(t).map((e=>z[e%z.length])).join("")}`}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.NetaceaCookieV3IssueReason=e.COOKIEDELIMITER=e.netaceaCookieV3OptionalKeyMap=e.netaceaCookieV3KeyMap=e.AbstractCookieFactory=e.defaultInvalidResponse=e.objectIsNetaceaCookieV3=e.cookieIsNetaceaV3Format=e.matchNetaceaCookieV3=e.checkNetaceaCookieV3=e.createNetaceaCookieV3=void 0;var t=L;Object.defineProperty(e,"createNetaceaCookieV3",{enumerable:!0,get:function(){return t.createNetaceaCookieV3}}),Object.defineProperty(e,"checkNetaceaCookieV3",{enumerable:!0,get:function(){return t.checkNetaceaCookieV3}}),Object.defineProperty(e,"matchNetaceaCookieV3",{enumerable:!0,get:function(){return t.matchNetaceaCookieV3}}),Object.defineProperty(e,"cookieIsNetaceaV3Format",{enumerable:!0,get:function(){return t.cookieIsNetaceaV3Format}}),Object.defineProperty(e,"objectIsNetaceaCookieV3",{enumerable:!0,get:function(){return t.objectIsNetaceaCookieV3}}),Object.defineProperty(e,"defaultInvalidResponse",{enumerable:!0,get:function(){return t.defaultInvalidResponse}});var i=B;Object.defineProperty(e,"AbstractCookieFactory",{enumerable:!0,get:function(){return i.AbstractCookieFactory}});var a=j;Object.defineProperty(e,"netaceaCookieV3KeyMap",{enumerable:!0,get:function(){return a.netaceaCookieV3KeyMap}}),Object.defineProperty(e,"netaceaCookieV3OptionalKeyMap",{enumerable:!0,get:function(){return a.netaceaCookieV3OptionalKeyMap}}),Object.defineProperty(e,"COOKIEDELIMITER",{enumerable:!0,get:function(){return a.COOKIEDELIMITER}});var o=V;Object.defineProperty(e,"NetaceaCookieV3IssueReason",{enumerable:!0,get:function(){return o.NetaceaCookieV3IssueReason}})}(K);var J={};Object.defineProperty(J,"__esModule",{value:!0}),J.validateRedirectLocation=void 0,J.validateRedirectLocation=function(e){if(""!==(e=e??""))try{return new URL(e).toString()}catch{if(/^https?:\/\//i.test(e))return;return e.startsWith("/")?e:`/${e}`}};var X={},Q={};function Y(e,t){for(const i of Object.keys(e)){if("cookie"!==i&&"Cookie"!==i)continue;const a=e[i]??"",o=ee("string"==typeof a?a:a.join("; "),t);if(void 0!==o)return o}}function Z(e,t){const i=[];for(const a of Object.keys(e)){if("cookie"!==a&&"Cookie"!==a)continue;const o=e[a]??"",s="string"==typeof o?o:o.join("; ");i.push(...te(s,t))}return i}function ee(e,t){const i=t+"=";return e.split(";").map((e=>e.trimStart())).find((e=>e.startsWith(i)))}function te(e,t){const i=t+"=";return e.split(";").map((e=>e.trimStart())).filter((e=>e.startsWith(i)))}Object.defineProperty(Q,"__esModule",{value:!0}),Q.findAllInCookieString=Q.findFirstInCookieString=Q.findAllInHeaders=Q.findFirstInHeaders=Q.findOnlyValueInHeaders=Q.findAllValuesInHeaders=Q.findFirstValueInHeaders=void 0,Q.findFirstValueInHeaders=function(e,t){const i=Y(e,t);if(void 0!==i)return i.slice(t.length+1)},Q.findAllValuesInHeaders=function(e,t){return Z(e,t).map((e=>e.slice(t.length+1)))},Q.findOnlyValueInHeaders=function(e,t){const i=Z(e,t);if(i.length>1)throw new Error(`Found more than one cookie with name ${t}`);return i[0]?.slice(t.length+1)},Q.findFirstInHeaders=Y,Q.findAllInHeaders=Z,Q.findFirstInCookieString=ee,Q.findAllInCookieString=te;var ie={};function ae(e){return"set-cookie"===e||"Set-Cookie"===e}function oe(e,t){const i=t+"=";return e.startsWith(i)}function se(e,t){if(!oe(e,t))throw new Error(`Cookie '${t}' not found in '${e}'`);return e.slice(t.length+1).split(";")[0]}function ne(e,t){const i=e[t]??[];return"string"==typeof i?[i]:i}function re(e,t){for(const i of Object.keys(e)){if(!ae(i))continue;const a=ce(ne(e,i),t);if(void 0!==a)return a}}function ce(e,t){return e.map((e=>e.trimStart())).find((e=>oe(e,t)))}function ue(e,t){const i=[];for(const a of Object.keys(e)){if(!ae(a))continue;const o=ne(e,a);i.push(...de(o,t))}return i}function de(e,t){return e.map((e=>e.trimStart())).filter((e=>oe(e,t)))}Object.defineProperty(ie,"__esModule",{value:!0}),ie.findAllInSetCookieStrings=ie.findAllInHeaders=ie.findValueInSetCookieStrings=ie.findFirstInSetCookieStrings=ie.findFirstInHeaders=ie.findOnlyValueInHeaders=ie.findFirstValueInHeaders=ie.parseValueFromString=void 0,ie.parseValueFromString=se,ie.findFirstValueInHeaders=function(e,t){const i=re(e,t);return void 0!==i?se(i,t):void 0},ie.findOnlyValueInHeaders=function(e,t){const i=ue(e,t);if(i.length>1)throw new Error(`Found more than one set-cookie with name ${t}`);return void 0!==i[0]?se(i[0],t):void 0},ie.findFirstInHeaders=re,ie.findFirstInSetCookieStrings=ce,ie.findValueInSetCookieStrings=function(e,t){const i=ce(e,t);if(void 0!==i)return se(i,t)},ie.findAllInHeaders=ue,ie.findAllInSetCookieStrings=de;var he=x&&x.__createBinding||(Object.create?function(e,t,i,a){void 0===a&&(a=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,a,o)}:function(e,t,i,a){void 0===a&&(a=i),e[a]=t[i]}),pe=x&&x.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),le=x&&x.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&he(t,e,i);return pe(t,e),t};Object.defineProperty(X,"__esModule",{value:!0}),X.setCookie=X.cookie=void 0,X.cookie=le(Q),X.setCookie=le(ie);var fe={},ge={},ye={};Object.defineProperty(ye,"__esModule",{value:!0}),ye.KINESIS_URL=ye.API_VERSION=ye.REGION=ye.PAYLOAD_TYPE=ye.STATE=void 0,ye.STATE={ACTIVE:"ACTIVE",UPDATING:"UPDATING",CREATING:"CREATING",DELETING:"DELETING"},ye.PAYLOAD_TYPE="string",ye.REGION="eu-west-1",ye.API_VERSION="2013-12-02",ye.KINESIS_URL="https://kinesis.eu-west-1.amazonaws.com";var me={};Object.defineProperty(me,"__esModule",{value:!0}),me.headersToRecord=me.increaseBatchSize=me.handleFailedLogs=me.batchArrayForKinesis=me.sleep=void 0,me.sleep=async function(e){await new Promise((t=>{setTimeout(t,e)}))},me.batchArrayForKinesis=function(e,t,i){const a=[];for(let o=0;o<e.length;o+=t){const s=e.slice(o,o+t);a.push({Data:i.from(JSON.stringify(s)).toString("base64"),PartitionKey:Date.now().toString()})}return a},me.handleFailedLogs=function(e,t,i){const a=2*i,o=[...e,...t],s=o.length-a;return s>0&&(console.error(`Netacea Error :: failed to send ${s} log(s) to Kinesis ingest.`),o.splice(0,s)),o},me.increaseBatchSize=function(e,t){return e!==t?Math.min(t,2*e):e},me.headersToRecord=function(e){const t={};return e.forEach(((e,i)=>{t[i]=e})),t},Object.defineProperty(ge,"__esModule",{value:!0}),ge.WebStandardKinesis=void 0;const Ce=ye,Se=me;ge.WebStandardKinesis=class{constructor({deps:e,kinesisIngestArgs:t}){if(this.maxLogBatchSize=20,this.maxLogAgeSeconds=10,this.logBatchSize=20,this.logCache=[],this.intervalSet=!1,this.deps=e,void 0===t.kinesisAccessKey)throw new Error("kinesisAccessKey is required for kinesis ingest");if(void 0===t.kinesisSecretKey)throw new Error("kinesisSecretKey is required for kinesis ingest");this.kinesisStreamName=t.kinesisStreamName,this.kinesisAccessKey=t.kinesisAccessKey,this.kinesisSecretKey=t.kinesisSecretKey,this.maxAwaitTimePerIngestCallMs=t.maxAwaitTimePerIngestCallMs,void 0!==t.maxLogAgeSeconds&&t.maxLogAgeSeconds<this.maxLogAgeSeconds&&t.maxLogAgeSeconds>0&&(this.maxLogAgeSeconds=t.maxLogAgeSeconds),void 0!==t.logBatchSize&&(this.maxLogBatchSize=t.logBatchSize),this.logBatchSize=!0===t.rampUpBatchSize?1:this.maxLogBatchSize}async putToKinesis(){if(0===this.logCache.length)return;const e=[...this.logCache];this.logCache=[];try{const t=new this.deps.AwsClient({accessKeyId:this.kinesisAccessKey,secretAccessKey:this.kinesisSecretKey}),i=await this.signRequest(t,{streamName:this.kinesisStreamName,accessKeyId:this.kinesisAccessKey,secretAccessKey:this.kinesisSecretKey},e,this.logBatchSize);await this.deps.makeRequest({headers:(0,Se.headersToRecord)(i.headers),host:Ce.KINESIS_URL,method:"POST",path:"/",body:i.body}),this.logBatchSize=(0,Se.increaseBatchSize)(this.logBatchSize,this.maxLogBatchSize)}catch(t){this.logCache=(0,Se.handleFailedLogs)(this.logCache,e,this.maxLogBatchSize)}}async ingest(e){if(this.logCache.push(e),this.logCache.length>=this.logBatchSize){const e=[];e.push(this.putToKinesis()),void 0!==this.maxAwaitTimePerIngestCallMs&&e.push((0,Se.sleep)(this.maxAwaitTimePerIngestCallMs)),await Promise.race(e)}else if(!this.intervalSet){this.intervalSet=!0;const e=(0,Se.sleep)(1e3*this.maxLogAgeSeconds).then((async()=>{await this.putToKinesis(),this.intervalSet=!1})).catch((()=>{}));void 0===this.maxAwaitTimePerIngestCallMs&&await e}}async signRequest(e,t,i,a){const o={Records:(0,Se.batchArrayForKinesis)(i,a,this.deps.Buffer),PartitionKey:Date.now().toString(),StreamName:t.streamName};return await e.sign(Ce.KINESIS_URL,{body:JSON.stringify(o),method:"POST",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"Kinesis_20131202.PutRecords"}})}};var ke={};Object.defineProperty(ke,"__esModule",{value:!0}),ke.Kinesis=void 0;const ve=ye,we=me;ke.Kinesis=class{constructor({deps:e,kinesisIngestArgs:t}){this.maxLogBatchSize=20,this.maxLogAgeSeconds=10,this.logBatchSize=20,this.logCache=[],this.intervalSet=!1,this.deps=e,this.kinesisStreamName=t.kinesisStreamName,this.kinesisAccessKey=t.kinesisAccessKey,this.kinesisSecretKey=t.kinesisSecretKey,this.maxAwaitTimePerIngestCallMs=t.maxAwaitTimePerIngestCallMs,void 0!==t.maxLogAgeSeconds&&t.maxLogAgeSeconds<this.maxLogAgeSeconds&&t.maxLogAgeSeconds>0&&(this.maxLogAgeSeconds=t.maxLogAgeSeconds),void 0!==t.logBatchSize&&(this.maxLogBatchSize=t.logBatchSize),this.logBatchSize=!0===t.rampUpBatchSize?1:this.maxLogBatchSize}async putToKinesis(){if(0===this.logCache.length)return;const e=[...this.logCache];this.logCache=[];try{const t=this.signRequest({streamName:this.kinesisStreamName,accessKeyId:this.kinesisAccessKey,secretAccessKey:this.kinesisSecretKey},e,this.logBatchSize);if("POST"!==t.method)throw new Error(`Unexpected method. Expected POST but got ${t.method}`);await this.deps.makeRequest({headers:t.headers??{},host:`https://${t.hostname}`,method:t.method,path:t.path??"/",body:t.body}),this.logBatchSize=(0,we.increaseBatchSize)(this.logBatchSize,this.maxLogBatchSize)}catch(t){this.logCache=(0,we.handleFailedLogs)(this.logCache,e,this.maxLogBatchSize)}}async ingest(e){if(this.logCache.push(e),this.logCache.length>=this.logBatchSize){const e=[];e.push(this.putToKinesis()),void 0!==this.maxAwaitTimePerIngestCallMs&&e.push((0,we.sleep)(this.maxAwaitTimePerIngestCallMs)),await Promise.race(e)}else if(!this.intervalSet){this.intervalSet=!0;const e=(0,we.sleep)(1e3*this.maxLogAgeSeconds).then((async()=>{await this.putToKinesis(),this.intervalSet=!1})).catch((()=>{}));void 0===this.maxAwaitTimePerIngestCallMs&&await e}}signRequest(e,t,i){const{accessKeyId:a,secretAccessKey:o}=e,s={Records:(0,we.batchArrayForKinesis)(t,i,this.deps.Buffer),PartitionKey:Date.now().toString(),StreamName:e.streamName};return this.deps.aws4.sign({service:"kinesis",body:JSON.stringify(s),headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"Kinesis_20131202.PutRecords"},region:ve.REGION},{accessKeyId:a,secretAccessKey:o})}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Kinesis=e.WebStandardKinesis=void 0;var t=ge;Object.defineProperty(e,"WebStandardKinesis",{enumerable:!0,get:function(){return t.WebStandardKinesis}});var i=ke;Object.defineProperty(e,"Kinesis",{enumerable:!0,get:function(){return i.Kinesis}})}(fe);var Ie={};function be(e,t){let i=null;if("number"==typeof e&&Number.isFinite(e))i=e;else if("string"==typeof e&&""!==e.trim()){const t=Number(e);Number.isFinite(t)&&(i=t)}if(null===i){if("number"!=typeof t.defaultValue)return t.defaultValue;i=t.defaultValue}return void 0!==t.minValue&&(i=Math.max(t.minValue,i)),void 0!==t.maxValue&&(i=Math.min(t.maxValue,i)),i}Object.defineProperty(Ie,"__esModule",{value:!0}),Ie.parseHttpHeaderName=Ie.stringOrDefault=Ie.parseIntOrDefault=Ie.parseNumberOrDefault=void 0,Ie.parseNumberOrDefault=be,Ie.parseIntOrDefault=function(e,t){const i=be(e,t);return"number"==typeof i?Math.floor(i):i},Ie.stringOrDefault=function(e,t){return"string"==typeof e&&""!==e?e:"number"==typeof e?e.toString():t},Ie.parseHttpHeaderName=function(e){if("string"!=typeof e)return;return/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(e)?e:void 0};var Ne={};Object.defineProperty(Ne,"__esModule",{value:!0}),Ne.searchParamsFromRecord=void 0,Ne.searchParamsFromRecord=function(e){const t=new URLSearchParams;for(const[i,a]of Object.entries(e))t.append(i,a);return t};var Ee={},Ae={};Object.defineProperty(Ae,"__esModule",{value:!0}),Ae.JweFactory=void 0;Ae.JweFactory=class{constructor(e){this.jose=e}async encrypt(e,t,i="A128CBC-HS256"){const a=this.jose.base64url.decode(t),o=(new TextEncoder).encode(e);return await new this.jose.CompactEncrypt(o).setProtectedHeader({alg:"dir",enc:i}).encrypt(a)}async decrypt(e,t){const i=this.jose.base64url.decode(t),{plaintext:a}=await this.jose.compactDecrypt(e,i,{keyManagementAlgorithms:["dir"],contentEncryptionAlgorithms:["A256GCM","A128CBC-HS256"]});return(new TextDecoder).decode(a)}static isJweEncrypted(e){return 5===e.split(".").length&&e.includes("..")}};var Re=x&&x.__createBinding||(Object.create?function(e,t,i,a){void 0===a&&(a=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,a,o)}:function(e,t,i,a){void 0===a&&(a=i),e[a]=t[i]}),Oe=x&&x.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Pe=x&&x.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&Re(t,e,i);return Oe(t,e),t};Object.defineProperty(Ee,"__esModule",{value:!0}),Ee.jwe=void 0,Ee.jwe=Pe(Ae);var _e={};Object.defineProperty(_e,"__esModule",{value:!0}),_e.truncateLongFields=_e.parseGraphQl=_e.parseGraphQlRequestBody=_e.getGraphQLParserConfig=void 0;const Te=Ie;function xe(e,t){const i=e.parserRegex;return t.match(i)?.groups??{}}function Me(e,t){const i=e.maxValueLength;for(const e of Object.keys(t)){const s=t[e];t[e]=(o=i,(a=s).length<=o?a:a.slice(0,o)+"…")}var a,o;return t}_e.getGraphQLParserConfig=function(e){const t={includePaths:[],maxParsableBytes:(0,Te.parseIntOrDefault)(e?.maxParsableBytes,{defaultValue:1e6,minValue:1e3}),maxValueLength:(0,Te.parseIntOrDefault)(e?.maxValueLength,{defaultValue:256,minValue:8}),parserRegex:/^\s*(?<OpType>query|mutation|subscription)\s+(?<OpName>[_A-Za-z][_0-9A-Za-z]+)?/,useStrictAcceptHeaderCheck:e?.useStrictAcceptHeaderCheck??!0};if(Array.isArray(e?.includePaths))for(const i of e.includePaths)"string"==typeof i&&t.includePaths.push(i);try{if(e?.parserRegex instanceof RegExp)t.parserRegex=e?.parserRegex;else if("object"==typeof e?.parserRegex){const{regex:i,flags:a}=e?.parserRegex;"string"==typeof i&&(t.parserRegex=new RegExp(i,a))}}catch{}return t},_e.parseGraphQlRequestBody=function(e,t){if(""===t)throw new Error("Netacea Error: Empty GraphQL body received");const i=JSON.parse(t);if("object"!=typeof i)throw new Error("Netacea Error: Invalid GraphQL JSON");const a={...xe(e,i?.query??"")},o=(i?.operationName??"").trim();return""!==o&&(a.OpName=o),Me(e,a)},_e.parseGraphQl=xe,_e.truncateLongFields=Me;var Ve={},Ke={};Object.defineProperty(Ke,"__esModule",{value:!0}),Ke.ResponseView=Ke.AbstractResponseView=void 0;class Le{constructor(e){this.cacheStatus=e}get contentType(){return this.readHeader("content-type")?.[0]}get contentLength(){return this.readHeader("content-length")?.[0]}get location(){return this.readHeader("location")?.[0]}get setCookie(){return this.readHeader("set-cookie")}}Ke.AbstractResponseView=Le;Ke.ResponseView=class extends Le{constructor(e,t){super(t),this.response=e}get status(){return this.response.status}async getBody(){return void 0===this._body&&(this._body=await this.response.clone().text()??""),this._body}readHeader(e){if("set-cookie"===(e=e.toLowerCase()))return this.response.headers.getSetCookie();const t=this.response.headers.get(e)??void 0;return void 0!==t?[t]:[]}readHeaders(){const e={};return this.response.headers.forEach(((t,i)=>{e[i]=[t]})),e["set-cookie"]=this.response.headers.getSetCookie(),e}},Object.defineProperty(Ve,"__esModule",{value:!0}),Ve.HttpClient=Ve.AbstractHttpClient=void 0;const je=Ke;class He{constructor(e){this.fetchFn=e.fetch,this.cache=e.cache}async request(e,t){const i=this.cache?.get(e,t);if(void 0!==i)return this.createResponseView(i,"HIT");const a=await this.fetchFn(e,t),o=this.createResponseView(a,"MISS");return await this.populateCache(e,t,o),o}async populateCache(e,t,i){void 0!==this.cache&&await this.cache.set(e,t,i).catch((()=>{}))}async get(e,t){return await this.request(e,{...t,method:"GET"})}async post(e,t,i){return await this.request(e,{...i,method:"POST",body:t})}}Ve.AbstractHttpClient=He;Ve.HttpClient=class extends He{createResponseView(e,t){return new je.ResponseView(e,t)}};var De={},Fe={};Object.defineProperty(Fe,"__esModule",{value:!0}),Fe.LruCache=void 0;Fe.LruCache=class{constructor(e){if(this.capacity=e,this.entries=new Map,!Number.isInteger(e)||e<=0)throw new RangeError("LruCache capacity must be a positive integer")}get size(){return this.entries.size}get(e){if(!this.entries.has(e))return;const t=this.entries.get(e);return this.entries.delete(e),this.entries.set(e,t),t}set(e,t){if(this.entries.delete(e),this.entries.set(e,t),this.entries.size>this.capacity){const e=Array.from(this.entries.keys());e.length>0&&this.entries.delete(e[0])}}find(e){for(const[t,i]of this.entries)if(e(i,t))return this.get(t)}delete(e){return this.entries.delete(e)}clear(){this.entries.clear()}},Object.defineProperty(De,"__esModule",{value:!0}),De.HttpCache=void 0;const qe=Fe,Be=Ie,$e=1048576;function Ue(e){const t={};if(void 0===e)return t;if(Array.isArray(e)){for(const[i,a]of e)t[i.toLowerCase()]=a;return t}if("function"==typeof e.forEach)return e.forEach(((e,i)=>{"string"==typeof i&&"string"==typeof e&&(t[i.toLowerCase()]=e)})),t;for(const[i,a]of Object.entries(e))t[i.toLowerCase()]=a;return t}function Ge(e){if(void 0===e||""===e.trim())return{};const t={};for(const i of e.split(",")){const e=i.trim();if(""===e)continue;const a=e.indexOf("=");if(-1===a){t[e.toLowerCase()]=!0;continue}t[e.slice(0,a).trim().toLowerCase()]=e.slice(a+1).trim().replace(/^"(.+)"$/,"$1")}return t}function ze(e){const t=(0,Be.parseNumberOrDefault)(e,{defaultValue:void 0});return"number"==typeof t&&t>=0?t:void 0}function We(e){if(void 0===e)return;const t=Date.parse(e);return Number.isNaN(t)?void 0:t}function Je(e,t){return{method:(i=t?.method,(i??"GET").toUpperCase()),url:e,headers:Ue(t?.headers)};var i}function Xe(e){if("GET"!==e.method)return`method=${e.method}`;if(void 0!==e.headers.authorization)return"authorization header present";if(void 0!==e.headers.range)return"range header present";if(void 0!==e.headers["if-match"])return"if-match header present";if(void 0!==e.headers["if-none-match"])return"if-none-match header present";if(void 0!==e.headers["if-modified-since"])return"if-modified-since header present";if(void 0!==e.headers["if-unmodified-since"])return"if-unmodified-since header present";if(void 0!==e.headers["if-range"])return"if-range header present";return void 0!==Ge(e.headers["cache-control"])["no-store"]?"request cache-control=no-store":void 0}function Qe(e,t){return!t.vary.includes("*")&&t.vary.every((i=>(e.headers[i]??"")===(t.varyRequestHeaders[i]??"")))}function Ye(e){const t=ze(e.cacheControl["s-maxage"]);if(void 0!==t)return t;const i=ze(e.cacheControl["max-age"]);if(void 0!==i)return i;const a=We(e.headers.expires);return void 0===a?0:Math.max(0,Math.floor((a-(e.dateHeaderMs??e.storedAt))/1e3))}function Ze(e){return JSON.stringify([e.url,e.vary.map((t=>[t,e.varyRequestHeaders[t]??""]))])}De.HttpCache=class{constructor(e={}){this.entries=new qe.LruCache(10),this.defaultCacheControl=e.defaultCacheControl,this.now=e.now??(()=>Date.now())}get(e,t){const i=Je(e,t);if("GET"!==i.method)return new Response("Not Found",{status:404,statusText:"Not Found"});if(void 0!==Xe(i))return;const a=Ge(i.headers["cache-control"]);if(void 0!==a["no-cache"])return;const o=this.entries.find((e=>e.url===i.url&&Qe(i,e)));if(void 0===o)return;if(void 0!==o.cacheControl["no-cache"])return;const s=ze(a["max-age"]),n=void 0===s?Ye(o):Math.min(Ye(o),s),r=function(e,t){return Math.max(0,Math.floor((t-e.storedAt)/1e3))+e.ageSeconds}(o,this.now());return r>=n?void 0:new Response(o.body,{headers:{...o.headers,age:String(r)},status:o.status})}async set(e,t,i){const a=Je(e,t);if(void 0!==Xe(a))return;const o=this.entries.find((e=>e.url===a.url&&Qe(a,e))),s=function(e){const t={};for(const[i,a]of Object.entries(e.readHeaders()))a.length>0&&(t[i.toLowerCase()]=a.join(", "));return t}(i),n=Ge(s["cache-control"]??this.defaultCacheControl);if(200!==i.status||void 0!==n["no-store"]||void 0!==n.private||i.setCookie.length>0)return void this.removeEntry(o);const r=function(e){return void 0===e.vary?[]:e.vary.split(",").map((e=>e.trim().toLowerCase())).filter((e=>""!==e))}(s);if(r.includes("*"))return void this.removeEntry(o);const c=Number(s["content-length"]);if(Number.isFinite(c)&&c>$e)return void this.removeEntry(o);const u=await i.getBody();if((new TextEncoder).encode(u).byteLength>$e)return void this.removeEntry(o);const d=this.now(),h=Number(s.age??"0"),p=We(s.date),l=void 0===p?0:Math.max(0,Math.floor((d-p)/1e3)),f={body:u,headers:s,status:i.status,storedAt:d,url:a.url,vary:r,varyRequestHeaders:Object.fromEntries(r.map((e=>[e,a.headers[e]??""]))),cacheControl:n,dateHeaderMs:p,ageSeconds:Math.max(Number.isFinite(h)&&h>=0?h:0,l)};void 0!==o&&this.entries.delete(Ze(o)),this.entries.set(Ze(f),f)}removeEntry(e){void 0!==e&&this.entries.delete(Ze(e))}};var et={};Object.defineProperty(et,"__esModule",{value:!0}),et.RequestView=et.AbstractRequestView=void 0;const tt=Ie;class it{get contentLength(){return(0,tt.parseIntOrDefault)(this.readHeader("content-length")?.[0],{defaultValue:0,minValue:0,maxValue:Number.MAX_SAFE_INTEGER})}get userAgent(){return this.readHeader("user-agent")?.[0]??""}get contentType(){return this.readHeader("content-type")?.[0]}get xForwardedFor(){return this.readHeader("x-forwarded-for")?.[0]}get referer(){return this.readHeader("referer")?.[0]}get accept(){return this.readHeader("accept")?.[0]}get host(){return this.readHeader("host")?.[0]}async getHttpMessageSignatureFields(){const e=this.readJoinedHeader("Signature");return{httpMsgSigSha256:void 0===e?void 0:(await this.sha256Hash(e)).toLowerCase().slice(0,12),httpMsgSigInput:this.readJoinedHeader("Signature-Input"),httpMsgSigAgent:this.readJoinedHeader("Signature-Agent")}}readJoinedHeader(e){const t=this.readHeader(e).join(",");return""!==t?t:void 0}}et.AbstractRequestView=it;et.RequestView=class extends it{constructor(e,t){super(),this.request=e,this.sha256Digest=t}get method(){return this.request.method}get url(){return new URL(this.request.url)}async getBody(){return void 0===this._body&&(this._body=await this.request.clone().text()??""),this._body}readHeader(e){const t=this.request.headers.get(e)??void 0;return void 0!==t?[t]:[]}async sha256Hash(e){const t=(new TextEncoder).encode(e),i=await this.sha256Digest.digest("SHA-256",t);return Array.from(new Uint8Array(i)).map((e=>e.toString(16).padStart(2,"0"))).join("")}};var at={};Object.defineProperty(at,"__esModule",{value:!0}),at.ProtectorApiResponseView=at.AbstractProtectorApiResponseView=void 0;const ot=Ie;class st{get redirectHost(){return this.readHeader("x-netacea-redirect-host")?.[0]}get redirectLocation(){return this.readHeader("x-netacea-redirect-location")?.[0]}get redirectStatus(){return this.readHeader("x-netacea-redirect-status")?.[0]}get redirectStatusCode(){const e=this.readHeader("x-netacea-redirect-status")?.[0];if(void 0===e)return;const t=(0,ot.parseIntOrDefault)(e,{defaultValue:0,minValue:0,maxValue:Number.MAX_SAFE_INTEGER});return t>=300&&t<400?t:void 0}get eventId(){return this.readHeader("x-netacea-event-id")?.[0]}get sessionCookieMaxAge(){return(0,ot.parseIntOrDefault)(this.readHeader("x-netacea-mitata-expiry")?.[0],{defaultValue:86400,minValue:0,maxValue:Number.MAX_SAFE_INTEGER})}get captchaCookieMaxAge(){const e=this.readHeader("x-netacea-mitatacaptcha-expiry")?.[0];return(0,ot.parseIntOrDefault)(e,{defaultValue:86400,minValue:0,maxValue:Number.MAX_SAFE_INTEGER})}getProtectorCodes(e){return{match:this.readHeader("x-netacea-match")?.[0]??e?.match??"0",mitigate:this.readHeader("x-netacea-mitigate")?.[0]??e?.mitigate??"0",captcha:this.readHeader("x-netacea-captcha")?.[0]??e?.captcha??"0"}}getMonetisationRedirectLocation(e,t){const i=this.redirectLocation;if(void 0!==i)return i;const a=this.redirectHost;if(void 0!==a){const i=new URL(`https://${a}`);return i.pathname=e,i.search=t,i.toString()}}getMonetisationRedirect(e,t){const i=this.getMonetisationRedirectLocation(e,t);if(void 0!==i)return{location:i,statusCode:this.redirectStatusCode??303}}async getCaptchaJson(e,t){const i=await this.getBody();let a=this.eventId;if(void 0===a&&"string"==typeof i){a=function(e){if(null==e||"object"!=typeof e)throw new Error("Response body is not a valid object!");const{trackingId:t}=e;if("string"!=typeof t||0===t.length)throw new Error("Response body does not contain a valid trackingId!");return t}(JSON.parse(i))}if(void 0===a)throw new Error("Could not resolve Tracking ID for captcha event.");return function(e,t,i){const a=`${e}?trackingId=${i}`,o=void 0!==t?`https://${t}${a}`:void 0;return JSON.stringify({captchaRelativeURL:a,captchaAbsoluteURL:o})}(e,t,a)}}at.AbstractProtectorApiResponseView=st;at.ProtectorApiResponseView=class extends st{constructor(e){super(),this.response=e}get status(){return this.response.status}async getBody(){return void 0===this._body&&(this._body=await this.response.clone().text()??""),this._body}readHeader(e){if("set-cookie"===(e=e.toLowerCase()))return this.response.headers.getSetCookie();const t=this.response.headers.get(e)??void 0;return void 0!==t?[t]:[]}},function(e){var t=x&&x.__createBinding||(Object.create?function(e,t,i,a){void 0===a&&(a=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,a,o)}:function(e,t,i,a){void 0===a&&(a=i),e[a]=t[i]}),i=x&&x.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=x&&x.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(null!=e)for(var o in e)"default"!==o&&Object.prototype.hasOwnProperty.call(e,o)&&t(a,e,o);return i(a,e),a},o=x&&x.__exportStar||function(e,i){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(i,a)||t(i,e,a)};Object.defineProperty(e,"__esModule",{value:!0}),e.graphql=e.webcrypto=e.url=e.parsing=e.ingest=e.headers=e.configValidation=e.cookie=e.NetaceaCookieV3IssueReason=void 0;var s=V;Object.defineProperty(e,"NetaceaCookieV3IssueReason",{enumerable:!0,get:function(){return s.NetaceaCookieV3IssueReason}}),e.cookie=a(K),e.configValidation=a(J),e.headers=a(X),e.ingest=a(fe),e.parsing=a(Ie),e.url=a(Ne),e.webcrypto=a(Ee),e.graphql=a(_e),o(Ve,e),o(De,e),o(Fe,e),o(et,e),o(Ke,e),o(at,e)}(M);const nt=new M.webcrypto.jwe.JweFactory(c);class rt extends M.cookie.AbstractCookieFactory{async encrypt(e){if(void 0===this.config.cookieEncryptionKey)throw new Error("CloudflareCookieFactory.encrypt called without a configured encryption key");return await nt.encrypt(e,this.config.cookieEncryptionKey,"A256GCM")}async decrypt(e){if(void 0===this.config.cookieEncryptionKey)throw new Error("CloudflareCookieFactory.decrypt called without a configured encryption key");return await nt.decrypt(e,this.config.cookieEncryptionKey)}async hash(e,i){const a=await _(t.Buffer.from(e),i),o=t.Buffer.from(a).toString("hex");return t.Buffer.from(o).toString("base64")}getRandomValues(e){return crypto.getRandomValues(e)}}var ct;function ut(e){if(void 0===e)return"text/html";const t=e.toLowerCase(),i=t.includes("application/html")||t.includes("text/html"),a=t.includes("application/json");return!i&&a?"application/json":"text/html"}function dt(e,t,i){if(void 0===i||""===i)return!1;i.startsWith("/")||(i="/"+i);const{pathname:a}=e;return a===i&&"get"===t.toLowerCase()}function ht(e,t,i){return i.startsWith("/")||(i="/"+i),e.pathname===i&&"post"===t.toLowerCase()}function pt(e,t){if(void 0===t)return e;const i=e.headers.get("set-cookie")??"",a=new Headers(e.headers);if(void 0!==t.setCookie)for(const e of t.setCookie)i.includes(e.split("=")[0])||a.append("set-cookie",e);return new Response(e.body,{headers:a,status:e.status,statusText:e.statusText})}function lt(e){let t="",i="";for(const a in e){const o=e[a];void 0!==o&&(t=`${t}${i}${a}=${o}`,i="; ")}return t}function ft(e){if(void 0!==e.config.netaceaBlockedResponseRedirectLocation&&function(e){if("GET"!==e.method?.toUpperCase())return!1;const t=e.headers.get("sec-fetch-mode");return(void 0===t||"navigate"===t)&&(e.headers.get("accept")?.split(/, ?/)??[]).includes("text/html")}(e.request)){if(void 0===e.config.netaceaBlockedResponseRedirectLocation)throw new Error("Cannot redirect without a configured location");return yt(e,e.config.netaceaBlockedResponseRedirectLocation)}return gt(e)}function gt(e){const t=e.status??403;return new Response("Forbidden",{status:t,statusText:{402:"Payment Required",403:"Forbidden"}[t]??"",headers:e.responseHeaders})}function yt(e,t,i=303){const a=new Headers(e.responseHeaders);return a.append("Location",t),new Response("Forbidden",{status:i,statusText:"",headers:a})}function mt(e){const t=new Headers(e.responseHeaders);return void 0!==e.config.captchaHeader&&t.append(e.config.captchaHeader.name,e.config.captchaHeader.value),t.has("content-type")||t.append("content-type","text/html; charset=UTF-8"),new Response(e.body,{status:403,headers:t})}!function(e){e[e.NEW_SESSION=1]="NEW_SESSION",e[e.EXISTING_SESSION=2]="EXISTING_SESSION",e[e.RENEW_SESSION=3]="RENEW_SESSION"}(ct||(ct={}));class Ct extends Error{protectorApiResponse;latencyMs;constructor(e,t){super(`Got status ${e.status} when calling protector API with ${t}ms latency.`),this.protectorApiResponse=e,this.latencyMs=t}}var St="@netacea/cloudflare",kt="6.8.13";const vt="unknown";function wt(e,t,i){let{match:a,mitigate:o,captcha:s}=t;i||("2"===s?s="4":"3"===s?s="5":"b"===s?s="d":"c"===s&&(s="e"));let n=I[a]??vt+"_";n+=b[o]??vt;let r=E[o];if("0"!==s){n+=","+(N[s]??vt);const e=A[s];void 0!==e&&(r=e)}return e===exports.NetaceaMitigationType.INJECT&&(r=k.none),{sessionStatus:n,mitigation:r,parts:{match:a,mitigate:o,captcha:s}}}function It(e,t){const i={"x-netacea-match":e.match,"x-netacea-mitigate":e.mitigate,"x-netacea-captcha":e.captcha};return void 0!==t&&(i["x-netacea-event-id"]=t),i}async function bt(e){let t="";try{t=await async function(e,t){const i=(new TextEncoder).encode(t),a=await crypto.subtle.digest(e,i);return Array.from(new Uint8Array(a)).map((e=>e.toString(16).padStart(2,"0"))).join("")}("SHA-256",e)}catch(e){t=""}return t}async function Nt(e,t){const i=t.clone(),a=await async function(e,t){const i=t.body?.getReader();if(null==i)return"";let a=0;const o=[];for(;;){const{done:t,value:s}=await i.read();if(t)break;if(a+=s.length,a>e.maxParsableBytes)throw i.releaseLock(),new Et("Request body too large",a);if(!(s instanceof Uint8Array))throw new Error("Body must be read as Uint8Array chunks");o.push(s)}const s=new Uint8Array(a);let n=0;for(const e of o)s.set(e,n),n+=e.length;return(new TextDecoder).decode(s)}(e,i);return{contentLength:a.length,graphQL:M.graphql.parseGraphQlRequestBody(e,a)}}class Et extends Error{bodySize;constructor(e,t){super(e),this.bodySize=t}}class At{config;constructor(e){this.config=e}async getNetaceaRequestDetails(e){const t=new URL(e.url),i=e.method,a=await this.readCookie(e,this.config.netaceaCookieName),o=await this.readCookie(e,this.config.netaceaCaptchaCookieName),s=e.headers.get("cf-connecting-ip")??"",n=e.headers.get("cf-ray")??"",r=M.parsing.parseIntOrDefault(e.headers.get("content-length"),{defaultValue:0}),{sessionCookieDetails:c,sessionCookieStatus:u,sessionStatus:d,userId:h}=await async function(e,t,i,a,o){const s=await e.cookieFactory.retrieveCookieInfo(a,o),n={userId:void 0!==s.mitata?s.mitata.userId:void 0,requiresReissue:s.requiresReissue,isExpired:s.isExpired,shouldExpire:s.shouldExpire,isSameIP:s.isSameIP,isPrimaryHashValid:s.isPrimaryHashValid,protectorCheckCodes:{match:s.match,mitigate:s.mitigate,captcha:s.captcha},issueReason:s.issueReason};if(void 0!==n.userId&&n.isPrimaryHashValid){const a=n.userId,{isExpired:o,shouldExpire:s,isSameIP:r}=n,c=o||s||!r&&e.mitigationType!==exports.NetaceaMitigationType.INGEST?ct.RENEW_SESSION:ct.EXISTING_SESSION,{sessionStatus:u}=wt(e.mitigationType,n.protectorCheckCodes,ht(t,i,e.netaceaCaptchaVerificationPath));return{sessionCookieDetails:n,sessionCookieStatus:c,sessionStatus:u,userId:a}}return{sessionStatus:"",userId:P(),sessionCookieStatus:ct.NEW_SESSION,sessionCookieDetails:void 0}}(this.config,t,i,a,s),p={contentLength:r,clientIp:s,fingerprints:await Rt(e),method:i,protocol:String(e.cf?.httpProtocol),url:t,userAgent:e.headers.get("user-agent")??"",contentType:e.headers.get("content-type")??void 0,xForwardedFor:e.headers.get("x-forwarded-for")??void 0,referer:e.headers.get("referer")??void 0,accept:e.headers.get("accept")??void 0,requestId:n,sessionDetails:{captchaToken:o,sessionCookie:a,sessionCookieDetails:c,sessionCookieStatus:u,sessionStatus:d,userId:h}};try{if(function(e,t){const i=e.includePaths;return"POST"===t.method&&i.includes(t.url.pathname)&&(!e.useStrictAcceptHeaderCheck||void 0!==t.accept&&t.accept.toLocaleLowerCase().includes("graphql"))&&t.contentLength<=e.maxParsableBytes&&"application/json"===t.contentType}(this.config.graphQL,p)){const{contentLength:t,graphQL:i}=await Nt(this.config.graphQL,e);p.contentLength=t,p.graphQL=i}}catch(e){if(e instanceof Et){const t=e.bodySize;t>p.contentLength&&(p.contentLength=t)}}return p}async readCookie(e,t){const i=e.headers.get("Cookie");if(null==i)return;const a=i.split(/; ?/g),o=`${t}=`;for(const e of a)if(e.startsWith(o)){const i=e.slice(o.length),a=this.config.encryptedCookies??[];if(void 0!==this.config.cookieEncryptionKey&&a.includes(t))try{return await nt.decrypt(i,this.config.cookieEncryptionKey)}catch(e){return}return i}}}async function Rt(e){const{headers:t}=e,i=await async function(e){const t=function(e){const t=[];return e.forEach(((e,i)=>{const a=i.toLowerCase();"cookie"===a||"referer"===a||a.startsWith("x-netacea-")||t.push(i)})),t.join(",")}(e);return await bt(t)}(t),a=""===i?i:`h_${i.substring(1,15)}`,o=function(e,t){return e.get(t)?.split(/; ?/)??[]}(t,"cookie").map((e=>e.split("=")[0])).flat(),s=await async function(e){const t=e.join(",");return await bt(t)}(o);return{headerFingerprint:a,cookieFingerprint:""===s?s:`c_${s.substring(1,15)}`}}const{validateRedirectLocation:Ot}=M.configValidation,{configureCookiesDomain:Pt}=C.cookie.attributes;class _t{apiKey;captchaHeader;captchaSecretKey;captchaSiteKey;cookieEncryptionKey;enableDynamicCaptchaContentType=!1;encryptedCookies=[];graphQL;ingestServiceUrl;ingestType;kinesisConfigArgs;mitataCookieExpirySeconds;mitigationServiceTimeoutMs;mitigationServiceUrl;mitigationType;netaceaBlockedResponseRedirectLocation;netaceaCaptchaCookieAttributes;netaceaCaptchaCookieName;netaceaCaptchaPath;netaceaCaptchaVerificationPath;netaceaCheckpointSignalPath;netaceaCookieAttributes;netaceaCookieName;secretKey;timeout;constructor(e){const{apiKey:t,secretKey:i,timeout:a=3e3,mitigationServiceTimeoutMs:o=1e3,mitigationServiceUrl:n="https://mitigations.netacea.net",ingestServiceUrl:r="https://ingest.netacea.net",mitigationType:c=exports.NetaceaMitigationType.INGEST,captchaSiteKey:u,captchaSecretKey:h,ingestType:p=s.HTTP,kinesis:l,mitataCookieExpirySeconds:f,netaceaCookieExpirySeconds:g,enableDynamicCaptchaContentType:y=!1,captchaHeader:m,netaceaCaptchaPath:C,netaceaCaptchaVerificationPath:S,netaceaCheckpointSignalPath:k}=e;if(null==t)throw new Error("apiKey is a required parameter");this.apiKey=t,this.secretKey=i,this.mitigationServiceUrl=n.endsWith("/")?n.slice(0,-1):n,this.ingestServiceUrl=r,this.mitigationType=c,this.ingestType=p??s.HTTP,this.kinesisConfigArgs=l,void 0===u&&void 0===h||(this.captchaSiteKey=u,this.captchaSecretKey=h),this.timeout=function(e){return e<=0?d:e}(a),this.mitigationServiceTimeoutMs=M.parsing.parseIntOrDefault(o,{defaultValue:1e3,minValue:100,maxValue:1e4}),this.netaceaCookieName=M.parsing.stringOrDefault(e.netaceaCookieName,"_mitata"),this.netaceaCaptchaCookieName=M.parsing.stringOrDefault(e.netaceaCaptchaCookieName,"_mitatacaptcha");const{cookieAttributes:v,captchaCookieAttributes:w}=Pt(e.netaceaCookieAttributes,e.netaceaCaptchaCookieAttributes);var I;this.netaceaCookieAttributes=v??"",this.netaceaCaptchaCookieAttributes=w??"",this.encryptedCookies=[this.netaceaCookieName,this.netaceaCaptchaCookieName],this.mitataCookieExpirySeconds=function(e,t){return void 0===t?e===exports.NetaceaMitigationType.INGEST?3600:60:t}(c,g??f),this.cookieEncryptionKey=e.cookieEncryptionKey,Boolean(C)&&"string"==typeof C&&(this.netaceaCaptchaPath=C.startsWith("/")?C:`/${C}`),void 0!==this.netaceaCaptchaPath&&(this.enableDynamicCaptchaContentType="boolean"==typeof y?y:"true"===y),this.captchaHeader=m,this.netaceaCaptchaVerificationPath=void 0!==(I=S)&&I.startsWith("/")&&I.length>=5?I:"/AtaVerifyCaptcha",this.netaceaCheckpointSignalPath=k,this.netaceaBlockedResponseRedirectLocation=Ot(e.netaceaBlockedResponseRedirectLocation),this.graphQL=M.graphql.getGraphQLParserConfig(e.graphQL)}}function Tt(e){if(void 0===e.sessionDetails.sessionCookieDetails)return M.NetaceaCookieV3IssueReason.NO_SESSION;const{isSameIP:t,isExpired:i}=e.sessionDetails.sessionCookieDetails;return t?i?M.NetaceaCookieV3IssueReason.EXPIRED_SESSION:M.NetaceaCookieV3IssueReason.UNKNOWN:M.NetaceaCookieV3IssueReason.IP_CHANGE}exports.default=class{config;kinesis;requestAnalyser;cookieFactory;workerInstanceId;constructor(i){this.config=new _t(i),this.cookieFactory=new rt({cookieEncryptionKey:this.config.cookieEncryptionKey,secretKey:this.config.secretKey,expirySeconds:this.config.mitataCookieExpirySeconds}),this.config.ingestType===s.KINESIS&&(void 0===this.config.kinesisConfigArgs?console.warn(`NETACEA WARN: no kinesis args provided, when ingestType is ${this.config.ingestType}`):this.kinesis=new M.ingest.WebStandardKinesis({deps:{AwsClient:e.AwsClient,Buffer:t.Buffer,makeRequest:this.makeRequest.bind(this)},kinesisIngestArgs:{...this.config.kinesisConfigArgs,apiKey:this.config.apiKey}})),this.requestAnalyser=new At({...this.config,cookieFactory:this.cookieFactory}),this.workerInstanceId=""}async run(e,t){""===this.workerInstanceId&&(this.workerInstanceId=u.v4());const i=new Request(e.request),a=await this.requestAnalyser.getNetaceaRequestDetails(i);if(function(e,t,i){let a=e;try{a=new URL(e).pathname}catch(e){}return void 0!==i&&i.length>0&&a.endsWith(i)&&"get"===t.toLowerCase()}(i.url,i.method,this.config.netaceaCheckpointSignalPath)){const e={sessionStatus:",checkpoint_signal"};return await this.handleResponse(i,a,e,t)}let o=await async function(e,t){const i=new Promise(((e,i)=>{const a=Date.now();setTimeout((()=>{const t=Date.now()-a;e(t)}),t)}));return await Promise.race([e,i])}(this.runMitigation(i,a),this.config.mitigationServiceTimeoutMs);return"number"==typeof o&&(o={sessionStatus:"error_open",apiCallLatency:o}),await this.handleResponse(i,a,o,t)}async inject(e,t){const i=await this.getMitigationResponse(e,t);return{injectHeaders:i.injectHeaders,sessionStatus:i.sessionStatus,setCookie:i.setCookie,apiCallLatency:i.apiCallLatency,apiCallStatus:i.apiCallStatus}}async mitigate(e,t){const i=await this.getMitigationResponse(e,t),a=ht(t.url,e.method,this.config.netaceaCaptchaVerificationPath),o=a&&i.sessionStatus.includes("checkpoint_post"),s=!a&&dt(t.url,e.method,this.config.netaceaCaptchaPath),n=()=>{const e=new Headers;if(!s&&!o)for(const t of i.setCookie)e.append("set-cookie",t);return e};if(i.mitigated&&!o){if("captcha"===i.mitigation){const e=n();return"application/json"===i.captchaPageContentType&&e.set("content-type","application/json"),{...i,response:mt({config:this.config,responseHeaders:e,body:i.body})}}return{...i,response:ft({config:this.config,request:e,responseHeaders:n()})}}return"5"===i.protectorCheckCodes.mitigate?void 0===i.redirect?{...i,response:gt({status:402,responseHeaders:n()})}:{...i,response:yt({config:this.config,responseHeaders:n()},i.redirect.location,i.redirect.statusCode)}:a?{...i,response:new Response(i.body,{status:200,statusText:"OK",headers:n()})}:i}async getNetaceaSession(e,t){const i=(void 0!==t?await this.getNetaceaCookieFromResponse(t):void 0)??await this.getNetaceaCookieFromRequest(e),{protectorCheckCodes:a,userId:o}=function(e){if(void 0===e)return;const t=e.match(O);if(null!=t){const[,e,i,a,o,s,n,r,c]=t;return{signature:e,expiry:i,userId:a,ipHash:o,mitigationType:s,protectorCheckCodes:{match:n,mitigate:r,captcha:c}}}}(i??"")??{userId:"",protectorCheckCodes:{match:"0",mitigate:"0",captcha:"0"}},{sessionStatus:s}=wt(this.config.mitigationType,a,ht(new URL(e.url),e.method,this.config.netaceaCaptchaVerificationPath));return{userId:o,sessionStatus:s,netaceaCookie:i}}async getResponseDetails(e){if(e instanceof Response){const t=e;return{rawResponse:t,sessionCookie:await this.getNetaceaCookieFromResponse(t)}}{const t=e;return{rawResponse:t.response,mitigationLatency:t.protectorLatencyMs,mitigationStatus:t.protectorStatus,sessionStatus:t.sessionStatus,sessionCookie:await this.getNetaceaCookieFromResponse(t.response)}}}async ingest(e,t){""===this.workerInstanceId&&(this.workerInstanceId=u.v4());const i=await this.getResponseDetails(t),a="requestDetails"in t?t.requestDetails:await this.requestAnalyser.getNetaceaRequestDetails(e),o=function(e,t,i,a){const o=i.sessionStatus??t.sessionDetails.sessionStatus,s=t.method,n=t.url.pathname,r=t.protocol??null,c=Date.now(),u=t.referer??"",d=M.parsing.parseIntOrDefault(i.rawResponse.headers.get("content-length"),{defaultValue:0});return{BytesReceived:t.contentLength,BytesSent:d,Query:t.url.search.slice(1),GraphQL:t.graphQL,IntegrationType:St?.replace("@netacea/","")??"",IntegrationVersion:kt,NetaceaMitigationApplied:o??"",UserId:t.sessionDetails.userId,NetaceaUserIdCookieStatus:t.sessionDetails.sessionCookieStatus,ProtectionMode:e.mitigationType??"",ProtectorLatencyMs:i.mitigationLatency,ProtectorStatus:i.mitigationStatus,RealIp:t.clientIp,Referer:""===u?"-":u,Request:`${s} ${n} ${r}`,RequestHost:t.url.host,RequestId:t.requestId,RequestTime:"0",Status:i.rawResponse.status.toString(),TimeLocal:new Date(c).toUTCString(),TimeUnixMsUTC:c,UserAgent:t.userAgent,WorkerInstanceId:a,XForwardedFor:t.xForwardedFor,optional:{headerFingerprint:t.fingerprints.headerFingerprint,cookieFingerprint:t.fingerprints.cookieFingerprint}}}(this.config,a,i,this.workerInstanceId);try{if(this.config.ingestType===s.KINESIS){if(void 0===this.kinesis)return void console.error("Netacea Error: Unable to log as Kinesis has not been defined.");await this.kinesis.ingest({...o,apiKey:this.config.apiKey})}else{const e=function(e,t){const i={"X-Netacea-API-Key":e.apiKey,"content-type":"application/json"};return{host:e.ingestServiceUrl,method:"POST",path:"/",headers:i,body:t,timeout:e.timeout}}(this.config,JSON.stringify(o)),t=await this.makeRequest(e);if(200!==t.status)throw function(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}`)}(t)}}catch(e){console.error("NETACEA Error: ",e.message)}}async handleGetCaptchaRequest(e,t,i){if(void 0===this.config.secretKey)throw new Error("Secret key is required to mitigate");const a=await this.makeMitigateAPICall(e,t,!0,i),{match:o,mitigate:s,captcha:n}=a.responseView.getProtectorCodes();return{body:a.body,apiCallStatus:a.status,apiCallLatency:a.latency,setCookie:[],sessionStatus:",captcha_serve",mitigation:"captcha",mitigated:!0,protectorCheckCodes:{match:o,mitigate:s,captcha:n},captchaPageContentType:t}}async makeRequest({host:e,method:t,path:i,headers:a,body:o}){const s=`${e}${i}`,n=new Request(s,{...{method:t,body:o,headers:a},duplex:"half"}),r=await S(s,n),c={};return r.headers.forEach(((e,t)=>{null!==e&&(c[t]=e)})),{status:r.status,body:await r.clone().text(),headers:c,fetchResponse:r}}async handleResponse(e,t,i,a){if(this.config.mitigationType===exports.NetaceaMitigationType.MITIGATE&&void 0!==i?.response)return{protectorLatencyMs:i?.apiCallLatency,protectorStatus:i?.apiCallStatus,requestDetails:t,response:i.response,sessionStatus:i?.sessionStatus??""};if(void 0!==i&&"injectHeaders"in i){e=function(e,t){if(void 0===t.injectHeaders)return e;const i=new Headers(e.headers);for(const[e,a]of Object.entries(t.injectHeaders))i.set(e,a);return new Request(e,{headers:i})}(e,i)}if(this.config.ingestType===s.ORIGIN){const{sessionStatus:t,userId:a}=await this.getNetaceaSession(e,i);!function(e,t,i){e.headers.set("x-netacea-integration-type",St.replace("@netacea/","")),e.headers.set("x-netacea-integration-version",kt),e.headers.set("x-netacea-userid",i),e.headers.set("x-netacea-bc-type",t)}(e,t,a)}const o=await a(e);return{protectorLatencyMs:i?.apiCallLatency,protectorStatus:i?.apiCallStatus,requestDetails:t,response:pt(o,i),sessionStatus:i?.sessionStatus??""}}async getMitigationResponse(e,t){const i=this.config.enableDynamicCaptchaContentType?ut(e.headers.get("Accept")??void 0):ut();return await this.processMitigateRequest({getBodyFn:async()=>await Promise.resolve(e.body)??void 0,requestDetails:t,captchaPageContentType:i,body:e.body})}async runMitigation(e,t){try{if(function(e,t){if(void 0===t)return!1;const i=new URL(e.url);if(t.startsWith("/"))return t===i.pathname;try{const e=new URL(t);return e.host===i.host&&e.pathname===i.pathname}catch{return!1}}(e,this.config.netaceaBlockedResponseRedirectLocation))return{sessionStatus:""};switch(this.config.mitigationType){case exports.NetaceaMitigationType.MITIGATE:return await this.mitigate(e,t);case exports.NetaceaMitigationType.INJECT:return await this.inject(e,t);case exports.NetaceaMitigationType.INGEST:return await this.processIngest(t);default:throw new Error(`Netacea Error: Mitigation type ${String(this.config.mitigationType)} not recognised`)}}catch(i){let a,o;i instanceof Error&&console.error("Netacea FAILOPEN Error:",i,i.stack),i instanceof Ct&&(o=i.latencyMs,a=i.protectorApiResponse?.status);return{response:ht(t.url,e.method,this.config.netaceaCaptchaVerificationPath)?new Response("",{status:500,statusText:"Internal Server Error",headers:{}}):void 0,injectHeaders:It({match:"0",mitigate:"0",captcha:"0"}),sessionStatus:"error_open",apiCallLatency:o,apiCallStatus:a}}}async readCookie(e,t){if(null==t)return;if("string"==typeof t)return await this.readCookie(e,t.split(";"));const i=`${e}=`;for(const a of t){const t=a.split(";")[0].trimStart();if(t.startsWith(i)){const a=t.slice(i.length);if(void 0!==this.config.cookieEncryptionKey&&this.config.encryptedCookies.includes(e))try{return await nt.decrypt(a,this.config.cookieEncryptionKey)}catch(e){return}return a}}}async getNetaceaCookieFromResponse(e){if(void 0===e)return;const t=e instanceof Response?e.headers.getSetCookie():e.setCookie;if(void 0!==t){const e=`${this.config.netaceaCookieName}=`;for(const i of t)if(i.startsWith(e))return await this.readCookie(this.config.netaceaCookieName,i)}}async getNetaceaCookieFromRequest(e){const t=function(e,t,i=""){return e.get(t)??i}(e.headers,"cookie");return await this.readCookie(this.config.netaceaCookieName,t)??""}async check(e,t){if(void 0===this.config.secretKey)throw new Error("Secret key is required to mitigate");if([ct.NEW_SESSION,ct.RENEW_SESSION].includes(e.sessionDetails.sessionCookieStatus)){const i=e.sessionDetails.userId,a=await this.makeMitigateAPICall(e,t,!1,null),{responseView:o}=a,s=o.getProtectorCodes(),{match:n,mitigate:r,captcha:c}=s,u=[await this.createMitata(e.clientIp,i,n,r,c,a.mitataMaxAge,void 0,Tt(e))],d={match:n,mitigate:r,captcha:c},h=wt(this.config.mitigationType,d,!1),p={body:a.body,apiCallStatus:a.status,apiCallLatency:a.latency,setCookie:u,sessionStatus:h.sessionStatus,mitigation:h.mitigation,mitigated:[k.block,k.captcha].includes(h.mitigation),redirect:"5"===r?o.getMonetisationRedirect(e.url.pathname,e.url.search):void 0,protectorCheckCodes:h.parts,captchaPageContentType:t};return this.config.mitigationType!==exports.NetaceaMitigationType.INJECT&&h.mitigation!==k.flag||(p.injectHeaders=It(h.parts,a.eventId)),p}{const i=e.sessionDetails.sessionCookieDetails?.protectorCheckCodes,a={match:i?.match??"0",mitigate:i?.mitigate??"0",captcha:i?.captcha??"0"},o=wt(this.config.mitigationType,a,!1),s={body:void 0,apiCallStatus:void 0,apiCallLatency:void 0,setCookie:[],sessionStatus:o.sessionStatus,mitigation:o.mitigation,mitigated:[k.block,k.captcha].includes(o.mitigation),redirect:void 0,protectorCheckCodes:o.parts,captchaPageContentType:t};return this.config.mitigationType!==exports.NetaceaMitigationType.INJECT&&o.mitigation!==k.flag||(s.injectHeaders=It(o.parts)),s}}async createMitata(e,t,i,a,o,s=86400,n=void 0,r=M.NetaceaCookieV3IssueReason.NO_SESSION){const c=["1","3","5","a","c","e"].includes(o)||"3"===a||"5"===a?-60:this.config.mitataCookieExpirySeconds,u=void 0!==n?n-Math.floor(Date.now()/1e3):c,d=await this.cookieFactory.createCookieValue({clientIP:e,userId:t,match:i,mitigate:a,captcha:o,gracePeriod:u,cookieId:"",issueReason:r});return C.cookie.netaceaSession.createNetaceaSetCookieString({cookieName:this.config.netaceaCookieName,cookieValue:d,otherAttributes:this.config.netaceaCookieAttributes})}async processCaptcha(e,t){const{status:i,match:a,mitigate:o,captcha:s,body:n,setCookie:r,latency:c}=await this.makeCaptchaAPICall(e,t),u={match:a,mitigate:o,captcha:s},d=wt(this.config.mitigationType,u,!0);return{body:n,apiCallStatus:i,apiCallLatency:c,setCookie:r,sessionStatus:d.sessionStatus,mitigation:d.mitigation,mitigated:[k.block,k.captcha].includes(d.mitigation),redirect:void 0,protectorCheckCodes:{match:d.parts.match.toString(),mitigate:d.parts.mitigate.toString(),captcha:d.parts.captcha.toString()}}}async getMitataCaptchaFromHeaders(e){let t=e[v];const i=parseInt(e[w]);if(void 0!==t)return void 0!==this.config.cookieEncryptionKey&&this.config.encryptedCookies.includes(this.config.netaceaCaptchaCookieName)&&(t=await nt.encrypt(t,this.config.cookieEncryptionKey,"A256GCM")),C.cookie.netaceaSession.createNetaceaCaptchaSetCookieString({cookieName:this.config.netaceaCaptchaCookieName,cookieValue:t,maxAgeAttribute:String(i),otherAttributes:this.config.netaceaCaptchaCookieAttributes})}parseCaptchaAPICallBody(e,t){let i;if(null!=e)if("string"==typeof e){const a=e.trim();if(a.length>0)if(t.includes("application/json"))try{JSON.parse(a),i=a}catch(e){console.warn("Invalid JSON in captcha data, attempting to serialize:",e),i=JSON.stringify({data:a})}else i=e}else if(e instanceof ReadableStream)i=e;else if(t.includes("application/json"))try{i=JSON.stringify(e)}catch(t){console.warn("Failed to stringify captcha object, wrapping generic container"),i=JSON.stringify({data:e})}else try{i=JSON.stringify(e)}catch{i=String(e)}return i}async makeCaptchaAPICall(e,t){const i={"X-Netacea-API-Key":this.config.apiKey,"X-Netacea-Client-IP":e.clientIp,"user-agent":e.userAgent,"Content-Type":e.contentType??"application/x-www-form-urlencoded; charset=UTF-8"},a=e.sessionDetails.userId;e.sessionDetails.sessionCookieStatus!==ct.NEW_SESSION&&(i["X-Netacea-UserId"]=a),void 0!==this.config.captchaSiteKey&&void 0!==this.config.captchaSecretKey&&(i["X-Netacea-Captcha-Site-Key"]=this.config.captchaSiteKey,i["X-Netacea-Captcha-Secret-Key"]=this.config.captchaSecretKey),i["X-Netacea-Request-Id"]=e.requestId;const o=new URLSearchParams;o.append("headerFP",e.fingerprints.headerFingerprint),o.append("netaceaHeaders","request-id");const s=e.contentType??"application/x-www-form-urlencoded; charset=UTF-8",n=this.parseCaptchaAPICallBody(t,s),r=Date.now(),c=await this.makeRequest({host:this.config.mitigationServiceUrl,path:`/AtaVerifyCaptcha?${o.toString()}`,headers:i,method:"POST",body:n,timeout:this.config.mitigationServiceTimeoutMs}),u=Date.now()-r;if(200!==c.status)throw new Ct(c,u);const d=new M.ProtectorApiResponseView(c.fetchResponse),{match:h,mitigate:p,captcha:l}=d.getProtectorCodes(),f=d.sessionCookieMaxAge,g=e.sessionDetails.userId,y=await this.getMitataCaptchaFromHeaders(c.headers),m=[await this.createMitata(e.clientIp,g,h,p,l,f,void 0,Tt(e)),y].filter((e=>void 0!==e)),C=d.eventId,S="5"===p?d.getMonetisationRedirect(e.url.pathname,e.url.search):void 0;return{status:c.status,match:h,mitigate:p,captcha:l,setCookie:m,body:c.body,eventId:C,mitataMaxAge:f,latency:u,redirect:S}}async makeMitigateAPICall(e,t,i,a){const o={"X-Netacea-API-Key":this.config.apiKey,"X-Netacea-Client-IP":e.clientIp,"user-agent":e.userAgent,cookie:lt({_mitatacaptcha:e.sessionDetails.captchaToken})};e.sessionDetails.sessionCookieStatus!==ct.NEW_SESSION&&(o["X-Netacea-UserId"]=e.sessionDetails.userId),void 0!==this.config.captchaSiteKey&&void 0!==this.config.captchaSecretKey&&(o["X-Netacea-Captcha-Site-Key"]=this.config.captchaSiteKey,o["X-Netacea-Captcha-Secret-Key"]=this.config.captchaSecretKey),o["X-Netacea-Captcha-Content-Type"]=t,o["X-Netacea-Request-Id"]=e.requestId;let s="/";const n=new URLSearchParams;n.append("headerFP",e.fingerprints.headerFingerprint),n.append("netaceaHeaders","request-id"),i&&(s="/captcha",null!==a&&n.append("trackingId",a));const r=Date.now(),c=await this.makeRequest({host:this.config.mitigationServiceUrl,path:`${s}?${n.toString()}`,headers:o,method:"GET",timeout:this.config.mitigationServiceTimeoutMs}),u=Date.now()-r;if(200!==c.status)throw new Ct(c,u);const d=new M.ProtectorApiResponseView(c.fetchResponse),{match:h,mitigate:p,captcha:l}=d.getProtectorCodes(),f=[await this.createMitata(e.clientIp,e.sessionDetails.userId,h,p,l,d.sessionCookieMaxAge,void 0,Tt(e)),await this.getMitataCaptchaFromHeaders(c.headers)].filter((e=>void 0!==e)),g=d.eventId;if("application/json"===c.headers["content-type"]?.toLowerCase()){if(void 0===this.config.netaceaCaptchaPath)throw new Error("netaceaCaptchaPath and URL must be defined to handle JSON captcha");c.body=await d.getCaptchaJson(this.config.netaceaCaptchaPath,e.url.host)}return{responseView:d,status:c.status,setCookie:f,body:c.body,eventId:g,mitataMaxAge:d.sessionCookieMaxAge,latency:u}}async processMitigateRequest(e){if(dt(e.requestDetails.url,e.requestDetails.method,this.config.netaceaCaptchaPath)){const t=await async function(e){try{const{searchParams:t}=e;return t.get("trackingId")}catch(e){return null}}(e.requestDetails.url);return await this.handleGetCaptchaRequest(e.requestDetails,e.captchaPageContentType,t)}if(ht(e.requestDetails.url,e.requestDetails.method,this.config.netaceaCaptchaVerificationPath)){const t=await e.getBodyFn()??"";return await this.processCaptcha(e.requestDetails,t)}return await this.check(e.requestDetails,e.captchaPageContentType)}async setIngestOnlyMitataCookie(e){return{sessionStatus:"",setCookie:[await this.createMitata("ignored",e.sessionDetails.userId,"0","0","0",86400,void 0,Tt(e))]}}async processIngest(e){if(void 0===this.config.secretKey)throw new Error("Secret key is required for ingest");const t=e.sessionDetails.sessionCookieStatus,i=t===ct.NEW_SESSION,a=t===ct.RENEW_SESSION;return i||a?await this.setIngestOnlyMitataCookie(e):{sessionStatus:"",setCookie:[]}}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("aws4fetch"),t=require("buffer/"),i=require("jose"),a=require("uuid");function o(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var a=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,a.get?a:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}var s,n,r,c=o(i),u=o(a);!function(e){e.ORIGIN="ORIGIN",e.HTTP="HTTP",e.KINESIS="KINESIS",e.NATIVE="NATIVE"}(s||(s={})),exports.NetaceaMitigationType=void 0,(n=exports.NetaceaMitigationType||(exports.NetaceaMitigationType={})).MITIGATE="MITIGATE",n.INJECT="INJECT",n.INGEST="INGEST",function(e){e.CAPTCHA_GET="captcha_get",e.CAPTCHA_POST="captcha_post",e.EXPIRED_SESSION="expired_session",e.FORCED_REVALIDATION="forced_revalidation",e.INVALID_SESSION="invalid_session",e.IP_CHANGE="ip_change",e.NO_SESSION="no_session"}(r||(r={}));const d=3e3;function h(e,t){const i=e.split(";").map((e=>e.trim())).filter((e=>e.toLowerCase().startsWith(t.toLowerCase())))[0];return void 0!==i&&i.length>0?i?.replace(`${t}=`,""):void 0}function p(e,t=!1){return"string"!=typeof e&&(e=e.join("; ")),""===e?"":l(e.split(";"),t).join("; ")}function l(e,t=!1){if(t)return l(e.reverse()).reverse();const i=new Set,a=[];for(let t of e){if(t=t.trimStart(),""===t.trim())continue;const e=t.split("=")[0].toUpperCase();i.has(e)||(i.add(e),a.push(t))}return a}var g=Object.freeze({__proto__:null,configureCookiesDomain:function(e,t){let i=e=p(e??"",!0),a=t=p(t??"",!0);if(void 0!==e&&void 0!==t){const o=h(e,"Domain"),s=h(t,"Domain");void 0!==o&&void 0!==s?a=t.replace(s,o):void 0!==o&&void 0===s?a=t+(""!==t?`; Domain=${o}`:`Domain=${o}`):void 0===o&&void 0!==s&&(i=e+(""!==e?`; Domain=${s}`:`Domain=${s}`))}else if(void 0!==e&&void 0===t){const t=h(e,"Domain");void 0!==t&&(a=`Domain=${t}`)}else if(void 0===e&&void 0!==t){const e=h(t,"Domain");void 0!==e&&(i=`Domain=${e}`)}return{cookieAttributes:""!==i?i:void 0,captchaCookieAttributes:""!==a?a:void 0}},extractAndRemoveCookieAttr:function(e,t){const i=h(e,t);if(void 0!==i){return{extractedAttribute:i,cookieAttributes:e.replace(/ /g,"").replace(`${t}=${i}`,"").split(";").filter((e=>e.length>0)).join("; ")}}return{extractedAttribute:void 0,cookieAttributes:e}},extractCookieAttr:h,removeDuplicateAttrs:p});function f(e){const t=p([e.otherAttributes??"",`Max-Age=${e.maxAgeAttribute??86400}`,"Path=/"].join("; "));return`${e.cookieName}=${e.cookieValue}; ${t}`}var y=Object.freeze({__proto__:null,createNetaceaCaptchaSetCookieString:function(e){return f({...e,cookieName:e.cookieName??"_mitatacaptcha"})},createNetaceaSetCookieString:function(e){return f({...e,cookieName:e.cookieName??"_mitata"})},createSetCookieString:f});var C=Object.freeze({__proto__:null,parseSetCookie:function(e){const t=e.indexOf("=");if(t<0)throw new Error("Could not parse the given set-cookie value.");const i=e.slice(0,t),a=e.slice(t+1),o=a.indexOf(";");if(o<0){return{name:i,value:a,attributes:""}}return{name:i,value:a.slice(0,o),attributes:a.slice(o).trimStart()}}});const m={cookie:{parse:C,attributes:g,netaceaSession:y}},S=globalThis.fetch.bind(globalThis),I={none:"",block:"block",captcha:"captcha",allow:"allow",captchaPass:"captchapass",flag:"flag",monetise:"monetise"},v="x-netacea-mitatacaptcha-value",k="x-netacea-mitatacaptcha-expiry",w={0:"",1:"ua_",2:"ip_",3:"visitor_",4:"datacenter_",5:"customer_session_",6:"organisation_",7:"asn_",8:"country_",9:"combination_",b:"headerFP_",c:"vendorFamily_",d:"vendorName_",e:"vendor_",f:"vendorCrawlerClassification_"},N={0:"",1:"blocked",2:"allow",3:"hardblocked",4:"flagged",5:"monetised"},b={0:"",1:"captcha_serve",2:"captcha_pass",3:"captcha_fail",4:"captcha_cookiepass",5:"captcha_cookiefail",6:"checkpoint_signal",7:"checkpoint_post",a:"checkpoint_serve",b:"checkpoint_pass",c:"checkpoint_fail",d:"checkpoint_cookiepass",e:"checkpoint_cookiefail"},A={0:I.none,1:I.block,2:I.none,3:I.block,4:I.flag,5:I.monetise},E={1:I.captcha,2:I.captchaPass,3:I.captcha,4:I.allow,5:I.captcha,6:I.allow,7:I.captcha,a:I.captcha,b:I.captchaPass,c:I.captcha,d:I.allow,e:I.captcha},O="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),_=/^(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/((\d|[a-z])(\d)(\d|[a-z]))$/i;function P(e=16,t=O){const i=new Uint16Array(e-1);crypto.getRandomValues(i);return`c${Array.from(i).map((e=>t[e%t.length])).join("")}`}async function R(e,t){const i=await async function(e){return await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"])}(function(e){return"string"==typeof e?(new TextEncoder).encode(e):e}(t));return new Uint8Array(await crypto.subtle.sign("HMAC",i,e))}var T,M,x,K="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},V={},L={};Object.defineProperty(L,"__esModule",{value:!0}),L.MitigateCode=L.MatchCode=L.CaptchaCode=void 0,function(e){e.NONE="0",e.SERVE="1",e.PASS="2",e.FAIL="3",e.COOKIE_PASS="4",e.COOKIE_FAIL="5",e.CHECKPOINT_SIGNAL="6",e.CHECKPOINT_POST="7",e.CHECKPOINT_SERVE="a",e.CHECKPOINT_PASS="b",e.CHECKPOINT_FAIL="c",e.CHECKPOINT_COOKIE_PASS="d",e.CHECKPOINT_COOKIE_FAIL="e"}(T||(L.CaptchaCode=T={})),function(e){e.NONE="0",e.USER_AGENT="1",e.IP="2",e.VISITOR="3",e.DATACENTER="4",e.CUSTOMER_SESSION="5",e.ORGANISATION="6",e.ASN="7",e.COUNTRY="8",e.COMBINATION="9",e.HEADER_FINGERPRINT="b",e.VENDOR_FAMILY="c",e.VENDOR_NAME="d",e.VENDOR="e",e.VENDOR_CRAWLER_CLASSIFICATION="f"}(M||(L.MatchCode=M={})),function(e){e.NONE="0",e.BLOCK="1",e.ALLOW="2",e.HARDBLOCK="3",e.FLAG="4",e.MONETISE="5"}(x||(L.MitigateCode=x={}));var H,j={};Object.defineProperty(j,"__esModule",{value:!0}),j.NetaceaCookieV3IssueReason=void 0,function(e){e.CAPTCHA_GET="captcha_get",e.CAPTCHA_POST="captcha_post",e.EXPIRED_SESSION="expired_session",e.FORCED_REVALIDATION="forced_revalidation",e.INVALID_SESSION="invalid_session",e.IP_CHANGE="ip_change",e.NO_SESSION="no_session",e.UNKNOWN="unknown"}(H||(j.NetaceaCookieV3IssueReason=H={}));var D={},q={},F={};Object.defineProperty(F,"__esModule",{value:!0}),F.netaceaCookieV3OptionalKeyMap=F.netaceaCookieV3KeyMap=F.COOKIEDELIMITER=void 0,F.COOKIEDELIMITER="_/@#/",F.netaceaCookieV3KeyMap={clientIP:"cip",userId:"uid",gracePeriod:"grp",cookieId:"cid",match:"mat",mitigate:"mit",captcha:"cap",issueTimestamp:"ist",issueReason:"isr"},F.netaceaCookieV3OptionalKeyMap={checkAllPostRequests:"fCAPR"},Object.defineProperty(q,"__esModule",{value:!0}),q.defaultInvalidResponse=q.matchNetaceaCookieV3=q.checkNetaceaCookieV3=q.objectIsNetaceaCookieV3=q.cookieIsNetaceaV3Format=q.createNetaceaCookieV3=void 0;const U=j,$=F;function B(e){if(void 0===e||""===e)return;const t=e.split("&"),i={clientIP:"",userId:"",cookieId:"",gracePeriod:0,match:"0",mitigate:"0",captcha:"0",issueTimestamp:0,issueReason:"",checkAllPostRequests:void 0};for(const e of t){const[t,a]=e.split("="),o=decodeURIComponent(a);let s,n=Object.keys($.netaceaCookieV3KeyMap).find((e=>$.netaceaCookieV3KeyMap[e]===t));void 0===n&&(n=Object.keys($.netaceaCookieV3OptionalKeyMap).find((e=>$.netaceaCookieV3OptionalKeyMap[e]===t))),s=void 0!==n&&["match","mitigate","captcha"].includes(n)?""===o?void 0:o:""===o?void 0:Number(o),void 0!==s&&"string"!=typeof s&&isNaN(s)&&(s=o),i[n]=s}return i}function G(){return{mitata:void 0,requiresReissue:!1,isExpired:!1,shouldExpire:!1,isSameIP:!1,isPrimaryHashValid:!1,captcha:"0",match:"0",mitigate:"0",issueReason:U.NetaceaCookieV3IssueReason.NO_SESSION}}q.createNetaceaCookieV3=function(e){return Object.entries(e).filter((([e,t])=>void 0!==t)).map((([e,t])=>e in $.netaceaCookieV3OptionalKeyMap?`${$.netaceaCookieV3OptionalKeyMap[e]}=${encodeURIComponent(t)}`:`${$.netaceaCookieV3KeyMap[e]}=${encodeURIComponent(t)}`)).join("&")},q.cookieIsNetaceaV3Format=function(e){if(void 0===e||""===e)return!1;const t=e.split("&").map((e=>e.split("=")[0])).filter((e=>!Object.values($.netaceaCookieV3OptionalKeyMap).includes(e)));return 0!==t.length&&t.every((e=>Object.values($.netaceaCookieV3KeyMap).includes(e)))},q.objectIsNetaceaCookieV3=function(e){if("object"!=typeof e||null===e)return!1;for(const t of Object.keys($.netaceaCookieV3KeyMap)){if(!(t in e))return!1;if(void 0===e[t])return!1}return!0},q.checkNetaceaCookieV3=function(e,t){if(void 0===e||""===e)return G();let i;try{i=B(e)}catch{return G()}if(void 0!==i){const e=Math.floor(Date.now()/1e3),a=i.issueTimestamp+i.gracePeriod<e,o=t===i.clientIP,s=["1","3","5","a","c","e"].includes(i.captcha),n="3"===i.mitigate;return{mitata:i,requiresReissue:a||!o,isExpired:a,shouldExpire:s||n,isSameIP:o,isPrimaryHashValid:!0,match:i.match,mitigate:i.mitigate,captcha:i.captcha,issueReason:i.issueReason}}return G()},q.matchNetaceaCookieV3=B,q.defaultInvalidResponse=G;var z={};Object.defineProperty(z,"__esModule",{value:!0}),z.AbstractCookieFactory=void 0;const W=j,J=q,Q=F,X="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),Y=/^(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/(.*)_\/@#\/((\d|[a-z])(\d)(\d|[a-z]))$/i;z.AbstractCookieFactory=class{constructor(e){this.config=e}isEncrypted(e){return 5===e.split(".").length}async createCookieValue(e){if(void 0!==this.config.cookieEncryptionKey){const t=(0,J.createNetaceaCookieV3)({clientIP:e.clientIP,userId:e.userId??this.generateUserId(),match:e.match,mitigate:e.mitigate,captcha:e.captcha,gracePeriod:e.gracePeriod,cookieId:e.cookieId,issueTimestamp:Math.floor(Date.now()/1e3),issueReason:e.issueReason??W.NetaceaCookieV3IssueReason.NO_SESSION,checkAllPostRequests:e.checkAllPostRequests});return await this.encrypt(t)}if(void 0===this.config.secretKey)throw new Error("Cannot build cookie without secret key.");const t=[e.match,e.mitigate,e.captcha].join(""),i=Math.floor(Date.now()/1e3)+e.gracePeriod;return await this.buildMitataCookie(e.clientIP,e.userId,i,this.config.secretKey,t)}async retrieveCookieInfo(e,t){if(void 0===e||""===e)return(0,J.defaultInvalidResponse)();let i=e;return this.isEncrypted(e)&&(i=await this.decrypt(e)),(0,J.cookieIsNetaceaV3Format)(i)?(0,J.checkNetaceaCookieV3)(i,t):await this.checkMitataCookie(i,t,this.config.secretKey??"")}async buildMitataCookie(e,t,i,a,o){const s=[i,t??this.generateUserId(),await this.hash(`${e}|${String(i)}`,a),o].join(Q.COOKIEDELIMITER);return`${await this.hash(s,a)}${Q.COOKIEDELIMITER}${s}`}async checkMitataCookie(e,t,i){const a=function(e){const t=e.match(Y);if(null===t)return;const[,i,a,o,s,n,r,c,u]=t;return{signature:i,expiry:a,userId:o,ipHash:s,mitigationType:n,match:r,mitigate:c,captcha:u}}(e);if(void 0===a)return(0,J.defaultInvalidResponse)();const o=Math.floor(Date.now()/1e3),s=parseInt(a.expiry)<o,n=["1","3","5"].includes(a.captcha),r="3"===a.mitigate,c=n||r,u=await this.hash(`${t}|${a.expiry}`,i)===a.ipHash,d=[a.expiry,a.userId,a.ipHash,a.mitigationType].join(Q.COOKIEDELIMITER);return{mitata:a,requiresReissue:s||!u,isExpired:s,shouldExpire:c,isSameIP:u,isPrimaryHashValid:await this.hash(d,i)===a.signature,match:a.match,mitigate:a.mitigate,captcha:a.captcha,issueReason:W.NetaceaCookieV3IssueReason.NO_SESSION}}generateUserId(e=16){const t=new Uint16Array(e-1);this.getRandomValues(t);return`c${Array.from(t).map((e=>X[e%X.length])).join("")}`}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.NetaceaCookieV3IssueReason=e.COOKIEDELIMITER=e.netaceaCookieV3OptionalKeyMap=e.netaceaCookieV3KeyMap=e.AbstractCookieFactory=e.defaultInvalidResponse=e.objectIsNetaceaCookieV3=e.cookieIsNetaceaV3Format=e.matchNetaceaCookieV3=e.checkNetaceaCookieV3=e.createNetaceaCookieV3=void 0;var t=q;Object.defineProperty(e,"createNetaceaCookieV3",{enumerable:!0,get:function(){return t.createNetaceaCookieV3}}),Object.defineProperty(e,"checkNetaceaCookieV3",{enumerable:!0,get:function(){return t.checkNetaceaCookieV3}}),Object.defineProperty(e,"matchNetaceaCookieV3",{enumerable:!0,get:function(){return t.matchNetaceaCookieV3}}),Object.defineProperty(e,"cookieIsNetaceaV3Format",{enumerable:!0,get:function(){return t.cookieIsNetaceaV3Format}}),Object.defineProperty(e,"objectIsNetaceaCookieV3",{enumerable:!0,get:function(){return t.objectIsNetaceaCookieV3}}),Object.defineProperty(e,"defaultInvalidResponse",{enumerable:!0,get:function(){return t.defaultInvalidResponse}});var i=z;Object.defineProperty(e,"AbstractCookieFactory",{enumerable:!0,get:function(){return i.AbstractCookieFactory}});var a=F;Object.defineProperty(e,"netaceaCookieV3KeyMap",{enumerable:!0,get:function(){return a.netaceaCookieV3KeyMap}}),Object.defineProperty(e,"netaceaCookieV3OptionalKeyMap",{enumerable:!0,get:function(){return a.netaceaCookieV3OptionalKeyMap}}),Object.defineProperty(e,"COOKIEDELIMITER",{enumerable:!0,get:function(){return a.COOKIEDELIMITER}});var o=j;Object.defineProperty(e,"NetaceaCookieV3IssueReason",{enumerable:!0,get:function(){return o.NetaceaCookieV3IssueReason}})}(D);var Z={};Object.defineProperty(Z,"__esModule",{value:!0}),Z.validateRedirectLocation=void 0,Z.validateRedirectLocation=function(e){if(""!==(e=e??""))try{return new URL(e).toString()}catch{if(/^https?:\/\//i.test(e))return;return e.startsWith("/")?e:`/${e}`}};var ee={},te={};function ie(e,t){for(const i of Object.keys(e)){if("cookie"!==i&&"Cookie"!==i)continue;const a=e[i]??"",o=oe("string"==typeof a?a:a.join("; "),t);if(void 0!==o)return o}}function ae(e,t){const i=[];for(const a of Object.keys(e)){if("cookie"!==a&&"Cookie"!==a)continue;const o=e[a]??"",s="string"==typeof o?o:o.join("; ");i.push(...se(s,t))}return i}function oe(e,t){const i=t+"=";return e.split(";").map((e=>e.trimStart())).find((e=>e.startsWith(i)))}function se(e,t){const i=t+"=";return e.split(";").map((e=>e.trimStart())).filter((e=>e.startsWith(i)))}Object.defineProperty(te,"__esModule",{value:!0}),te.findAllInCookieString=te.findFirstInCookieString=te.findAllInHeaders=te.findFirstInHeaders=te.findOnlyValueInHeaders=te.findAllValuesInHeaders=te.findFirstValueInHeaders=void 0,te.findFirstValueInHeaders=function(e,t){const i=ie(e,t);if(void 0!==i)return i.slice(t.length+1)},te.findAllValuesInHeaders=function(e,t){return ae(e,t).map((e=>e.slice(t.length+1)))},te.findOnlyValueInHeaders=function(e,t){const i=ae(e,t);if(i.length>1)throw new Error(`Found more than one cookie with name ${t}`);return i[0]?.slice(t.length+1)},te.findFirstInHeaders=ie,te.findAllInHeaders=ae,te.findFirstInCookieString=oe,te.findAllInCookieString=se;var ne={};function re(e){return"set-cookie"===e||"Set-Cookie"===e}function ce(e,t){const i=t+"=";return e.startsWith(i)}function ue(e,t){if(!ce(e,t))throw new Error(`Cookie '${t}' not found in '${e}'`);return e.slice(t.length+1).split(";")[0]}function de(e,t){const i=e[t]??[];return"string"==typeof i?[i]:i}function he(e,t){for(const i of Object.keys(e)){if(!re(i))continue;const a=pe(de(e,i),t);if(void 0!==a)return a}}function pe(e,t){return e.map((e=>e.trimStart())).find((e=>ce(e,t)))}function le(e,t){const i=[];for(const a of Object.keys(e)){if(!re(a))continue;const o=de(e,a);i.push(...ge(o,t))}return i}function ge(e,t){return e.map((e=>e.trimStart())).filter((e=>ce(e,t)))}Object.defineProperty(ne,"__esModule",{value:!0}),ne.findAllInSetCookieStrings=ne.findAllInHeaders=ne.findValueInSetCookieStrings=ne.findFirstInSetCookieStrings=ne.findFirstInHeaders=ne.findOnlyValueInHeaders=ne.findFirstValueInHeaders=ne.parseValueFromString=void 0,ne.parseValueFromString=ue,ne.findFirstValueInHeaders=function(e,t){const i=he(e,t);return void 0!==i?ue(i,t):void 0},ne.findOnlyValueInHeaders=function(e,t){const i=le(e,t);if(i.length>1)throw new Error(`Found more than one set-cookie with name ${t}`);return void 0!==i[0]?ue(i[0],t):void 0},ne.findFirstInHeaders=he,ne.findFirstInSetCookieStrings=pe,ne.findValueInSetCookieStrings=function(e,t){const i=pe(e,t);if(void 0!==i)return ue(i,t)},ne.findAllInHeaders=le,ne.findAllInSetCookieStrings=ge;var fe=K&&K.__createBinding||(Object.create?function(e,t,i,a){void 0===a&&(a=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,a,o)}:function(e,t,i,a){void 0===a&&(a=i),e[a]=t[i]}),ye=K&&K.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Ce=K&&K.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&fe(t,e,i);return ye(t,e),t};Object.defineProperty(ee,"__esModule",{value:!0}),ee.setCookie=ee.cookie=void 0,ee.cookie=Ce(te),ee.setCookie=Ce(ne);var me={},Se={},Ie={};Object.defineProperty(Ie,"__esModule",{value:!0}),Ie.KINESIS_URL=Ie.API_VERSION=Ie.REGION=Ie.PAYLOAD_TYPE=Ie.STATE=void 0,Ie.STATE={ACTIVE:"ACTIVE",UPDATING:"UPDATING",CREATING:"CREATING",DELETING:"DELETING"},Ie.PAYLOAD_TYPE="string",Ie.REGION="eu-west-1",Ie.API_VERSION="2013-12-02",Ie.KINESIS_URL="https://kinesis.eu-west-1.amazonaws.com";var ve={};Object.defineProperty(ve,"__esModule",{value:!0}),ve.headersToRecord=ve.increaseBatchSize=ve.handleFailedLogs=ve.batchArrayForKinesis=ve.sleep=void 0,ve.sleep=async function(e){await new Promise((t=>{setTimeout(t,e)}))},ve.batchArrayForKinesis=function(e,t,i){const a=[];for(let o=0;o<e.length;o+=t){const s=e.slice(o,o+t);a.push({Data:i.from(JSON.stringify(s)).toString("base64"),PartitionKey:Date.now().toString()})}return a},ve.handleFailedLogs=function(e,t,i){const a=2*i,o=[...e,...t],s=o.length-a;return s>0&&(console.error(`Netacea Error :: failed to send ${s} log(s) to Kinesis ingest.`),o.splice(0,s)),o},ve.increaseBatchSize=function(e,t){return e!==t?Math.min(t,2*e):e},ve.headersToRecord=function(e){const t={};return e.forEach(((e,i)=>{t[i]=e})),t},Object.defineProperty(Se,"__esModule",{value:!0}),Se.WebStandardKinesis=void 0;const ke=Ie,we=ve;Se.WebStandardKinesis=class{constructor({deps:e,kinesisIngestArgs:t}){if(this.maxLogBatchSize=20,this.maxLogAgeSeconds=10,this.logBatchSize=20,this.logCache=[],this.intervalSet=!1,this.deps=e,void 0===t.kinesisAccessKey)throw new Error("kinesisAccessKey is required for kinesis ingest");if(void 0===t.kinesisSecretKey)throw new Error("kinesisSecretKey is required for kinesis ingest");this.kinesisStreamName=t.kinesisStreamName,this.kinesisAccessKey=t.kinesisAccessKey,this.kinesisSecretKey=t.kinesisSecretKey,this.maxAwaitTimePerIngestCallMs=t.maxAwaitTimePerIngestCallMs,void 0!==t.maxLogAgeSeconds&&t.maxLogAgeSeconds<this.maxLogAgeSeconds&&t.maxLogAgeSeconds>0&&(this.maxLogAgeSeconds=t.maxLogAgeSeconds),void 0!==t.logBatchSize&&(this.maxLogBatchSize=t.logBatchSize),this.logBatchSize=!0===t.rampUpBatchSize?1:this.maxLogBatchSize}async putToKinesis(){if(0===this.logCache.length)return;const e=[...this.logCache];this.logCache=[];try{const t=new this.deps.AwsClient({accessKeyId:this.kinesisAccessKey,secretAccessKey:this.kinesisSecretKey}),i=await this.signRequest(t,{streamName:this.kinesisStreamName,accessKeyId:this.kinesisAccessKey,secretAccessKey:this.kinesisSecretKey},e,this.logBatchSize);await this.deps.makeRequest({headers:(0,we.headersToRecord)(i.headers),host:ke.KINESIS_URL,method:"POST",path:"/",body:i.body}),this.logBatchSize=(0,we.increaseBatchSize)(this.logBatchSize,this.maxLogBatchSize)}catch(t){this.logCache=(0,we.handleFailedLogs)(this.logCache,e,this.maxLogBatchSize)}}async ingest(e){if(this.logCache.push(e),this.logCache.length>=this.logBatchSize){const e=[];e.push(this.putToKinesis()),void 0!==this.maxAwaitTimePerIngestCallMs&&e.push((0,we.sleep)(this.maxAwaitTimePerIngestCallMs)),await Promise.race(e)}else if(!this.intervalSet){this.intervalSet=!0;const e=(0,we.sleep)(1e3*this.maxLogAgeSeconds).then((async()=>{await this.putToKinesis(),this.intervalSet=!1})).catch((()=>{}));void 0===this.maxAwaitTimePerIngestCallMs&&await e}}async signRequest(e,t,i,a){const o={Records:(0,we.batchArrayForKinesis)(i,a,this.deps.Buffer),PartitionKey:Date.now().toString(),StreamName:t.streamName};return await e.sign(ke.KINESIS_URL,{body:JSON.stringify(o),method:"POST",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"Kinesis_20131202.PutRecords"}})}};var Ne={};Object.defineProperty(Ne,"__esModule",{value:!0}),Ne.Kinesis=void 0;const be=Ie,Ae=ve;Ne.Kinesis=class{constructor({deps:e,kinesisIngestArgs:t}){this.maxLogBatchSize=20,this.maxLogAgeSeconds=10,this.logBatchSize=20,this.logCache=[],this.intervalSet=!1,this.deps=e,this.kinesisStreamName=t.kinesisStreamName,this.kinesisAccessKey=t.kinesisAccessKey,this.kinesisSecretKey=t.kinesisSecretKey,this.maxAwaitTimePerIngestCallMs=t.maxAwaitTimePerIngestCallMs,void 0!==t.maxLogAgeSeconds&&t.maxLogAgeSeconds<this.maxLogAgeSeconds&&t.maxLogAgeSeconds>0&&(this.maxLogAgeSeconds=t.maxLogAgeSeconds),void 0!==t.logBatchSize&&(this.maxLogBatchSize=t.logBatchSize),this.logBatchSize=!0===t.rampUpBatchSize?1:this.maxLogBatchSize}async putToKinesis(){if(0===this.logCache.length)return;const e=[...this.logCache];this.logCache=[];try{const t=this.signRequest({streamName:this.kinesisStreamName,accessKeyId:this.kinesisAccessKey,secretAccessKey:this.kinesisSecretKey},e,this.logBatchSize);if("POST"!==t.method)throw new Error(`Unexpected method. Expected POST but got ${t.method}`);await this.deps.makeRequest({headers:t.headers??{},host:`https://${t.hostname}`,method:t.method,path:t.path??"/",body:t.body}),this.logBatchSize=(0,Ae.increaseBatchSize)(this.logBatchSize,this.maxLogBatchSize)}catch(t){this.logCache=(0,Ae.handleFailedLogs)(this.logCache,e,this.maxLogBatchSize)}}async ingest(e){if(this.logCache.push(e),this.logCache.length>=this.logBatchSize){const e=[];e.push(this.putToKinesis()),void 0!==this.maxAwaitTimePerIngestCallMs&&e.push((0,Ae.sleep)(this.maxAwaitTimePerIngestCallMs)),await Promise.race(e)}else if(!this.intervalSet){this.intervalSet=!0;const e=(0,Ae.sleep)(1e3*this.maxLogAgeSeconds).then((async()=>{await this.putToKinesis(),this.intervalSet=!1})).catch((()=>{}));void 0===this.maxAwaitTimePerIngestCallMs&&await e}}signRequest(e,t,i){const{accessKeyId:a,secretAccessKey:o}=e,s={Records:(0,Ae.batchArrayForKinesis)(t,i,this.deps.Buffer),PartitionKey:Date.now().toString(),StreamName:e.streamName};return this.deps.aws4.sign({service:"kinesis",body:JSON.stringify(s),headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"Kinesis_20131202.PutRecords"},region:be.REGION},{accessKeyId:a,secretAccessKey:o})}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Kinesis=e.WebStandardKinesis=void 0;var t=Se;Object.defineProperty(e,"WebStandardKinesis",{enumerable:!0,get:function(){return t.WebStandardKinesis}});var i=Ne;Object.defineProperty(e,"Kinesis",{enumerable:!0,get:function(){return i.Kinesis}})}(me);var Ee={};function Oe(e,t){let i=null;if("number"==typeof e&&Number.isFinite(e))i=e;else if("string"==typeof e&&""!==e.trim()){const t=Number(e);Number.isFinite(t)&&(i=t)}if(null===i){if("number"!=typeof t.defaultValue)return t.defaultValue;i=t.defaultValue}return void 0!==t.minValue&&(i=Math.max(t.minValue,i)),void 0!==t.maxValue&&(i=Math.min(t.maxValue,i)),i}Object.defineProperty(Ee,"__esModule",{value:!0}),Ee.parseUrl=Ee.parseHttpHeaderName=Ee.stringOrDefault=Ee.parseIntOrDefault=Ee.parseNumberOrDefault=void 0,Ee.parseNumberOrDefault=Oe,Ee.parseIntOrDefault=function(e,t){const i=Oe(e,t);return"number"==typeof i?Math.floor(i):i},Ee.stringOrDefault=function(e,t){return"string"==typeof e&&""!==e?e:"number"==typeof e?e.toString():t},Ee.parseHttpHeaderName=function(e){if("string"!=typeof e)return;return/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(e)?e:void 0},Ee.parseUrl=function(e){const t=/^[a-z][a-z\d+.-]*:\/\/([^/?#]+)([^?#]*)?(?:[?#].*)?$/i.exec(e);if(null===t)return;const[,i,a]=t;return{host:i.slice(i.lastIndexOf("@")+1),path:void 0===a||""===a?"/":a}};var _e={};Object.defineProperty(_e,"__esModule",{value:!0}),_e.searchParamsFromRecord=void 0,_e.searchParamsFromRecord=function(e){const t=new URLSearchParams;for(const[i,a]of Object.entries(e))t.append(i,a);return t};var Pe={},Re={};Object.defineProperty(Re,"__esModule",{value:!0}),Re.JweFactory=void 0;Re.JweFactory=class{constructor(e){this.jose=e}async encrypt(e,t,i="A128CBC-HS256"){const a=this.jose.base64url.decode(t),o=(new TextEncoder).encode(e);return await new this.jose.CompactEncrypt(o).setProtectedHeader({alg:"dir",enc:i}).encrypt(a)}async decrypt(e,t){const i=this.jose.base64url.decode(t),{plaintext:a}=await this.jose.compactDecrypt(e,i,{keyManagementAlgorithms:["dir"],contentEncryptionAlgorithms:["A256GCM","A128CBC-HS256"]});return(new TextDecoder).decode(a)}static isJweEncrypted(e){return 5===e.split(".").length&&e.includes("..")}};var Te=K&&K.__createBinding||(Object.create?function(e,t,i,a){void 0===a&&(a=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,a,o)}:function(e,t,i,a){void 0===a&&(a=i),e[a]=t[i]}),Me=K&&K.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),xe=K&&K.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&Te(t,e,i);return Me(t,e),t};Object.defineProperty(Pe,"__esModule",{value:!0}),Pe.jwe=void 0,Pe.jwe=xe(Re);var Ke={};Object.defineProperty(Ke,"__esModule",{value:!0}),Ke.truncateLongFields=Ke.parseGraphQl=Ke.parseGraphQlRequestBody=Ke.getGraphQLParserConfig=void 0;const Ve=Ee;function Le(e,t){const i=e.parserRegex;return t.match(i)?.groups??{}}function He(e,t){const i=e.maxValueLength;for(const e of Object.keys(t)){const s=t[e];t[e]=(o=i,(a=s).length<=o?a:a.slice(0,o)+"…")}var a,o;return t}Ke.getGraphQLParserConfig=function(e){const t={includePaths:[],maxParsableBytes:(0,Ve.parseIntOrDefault)(e?.maxParsableBytes,{defaultValue:1e6,minValue:1e3}),maxValueLength:(0,Ve.parseIntOrDefault)(e?.maxValueLength,{defaultValue:256,minValue:8}),parserRegex:/^\s*(?<OpType>query|mutation|subscription)\s+(?<OpName>[_A-Za-z][_0-9A-Za-z]+)?/,useStrictAcceptHeaderCheck:e?.useStrictAcceptHeaderCheck??!0};if(Array.isArray(e?.includePaths))for(const i of e.includePaths)"string"==typeof i&&t.includePaths.push(i);try{if(e?.parserRegex instanceof RegExp)t.parserRegex=e?.parserRegex;else if("object"==typeof e?.parserRegex){const{regex:i,flags:a}=e?.parserRegex;"string"==typeof i&&(t.parserRegex=new RegExp(i,a))}}catch{}return t},Ke.parseGraphQlRequestBody=function(e,t){if(""===t)throw new Error("Netacea Error: Empty GraphQL body received");const i=JSON.parse(t);if("object"!=typeof i)throw new Error("Netacea Error: Invalid GraphQL JSON");const a={...Le(e,i?.query??"")},o=(i?.operationName??"").trim();return""!==o&&(a.OpName=o),He(e,a)},Ke.parseGraphQl=Le,Ke.truncateLongFields=He;var je={},De={},qe={};Object.defineProperty(qe,"__esModule",{value:!0}),qe.createComputedSignatureInputs=qe.createComputedSignatureInput=void 0;const Fe=/^[a-z*][a-z0-9_.*-]{0,63}$/,Ue=/^"(?:[^"\\]|\\.)*"$/,$e=/^[^;"\s]+$/,Be=/^"[^"\\]+"(?:;[a-z*][a-z0-9_.*-]*(?:=(?:"(?:[^"\\]|\\.)*"|[^; ]+))?)*$/;function Ge(e,t){const i=Je(t);if(void 0===i)return;const a=[...i.componentIdentifiers.map((t=>{const i=function(e,t){const i=/^"([^"\\]+)"/.exec(t)?.[1];if(void 0===i)return;const a=ze(t,"name");let o;switch(i){case"@authority":o=e.url.host;break;case"@method":o=e.method;break;case"@path":o=e.url.path;break;case"@query":o=e.url.query;break;case"@query-param":o="string"==typeof a?function(e,t){const i=new URLSearchParams(e.slice(1)).getAll(t);return i.map(We).join(", ")}(e.url.query,a):void 0;break;case"@request-target":o=`${e.method.toLowerCase()} ${e.url.path}${e.url.query}`;break;case"@scheme":o=e.url.scheme;break;case"@target-uri":o=e.url.toString();break;default:o=function(e,t,i){const a=e.readHeader(t),o=0===a.length?void 0:a.map((e=>e.trim())).join(", ");return void 0!==o&&i?function(e){let t="",i=!1,a=!1,o=!1,s=!1;for(const n of e.trim())a?(t+=n,a=!1):i&&"\\"===n?(t+=n,a=!0):'"'===n?(t+=n,i=!i):i?t+=n:/\s/.test(n)?s||(o=!0):"="===n||";"===n?(t=t.trimEnd()+n,o=!1,s=!0):","===n?(t=t.trimEnd()+", ",o=!1,s=!1):(o&&""!==t&&!t.endsWith(" ")&&(t+=" "),t+=n,o=!1,s=!1);return t.trimEnd()}(o):o}(e,i,!0===ze(t,"sf"))}return o}(e,t);return void 0===i?void 0:`${t}: ${i}`})),`"@signature-params": ${i.parameters}`];return a.some((e=>void 0===e))?void 0:a.join("\n")}function ze(e,t){const i=e.indexOf('"',1),a=e.slice(i+1);if(a.startsWith(";"))for(const e of Xe(a.slice(1),";")){const i=e.indexOf("=");if((-1===i?e:e.slice(0,i))!==t)continue;if(-1===i)return!0;const a=e.slice(i+1);return Ue.test(a)?a.slice(1,-1).replace(/\\(.)/g,"$1"):a}}function We(e){return encodeURIComponent(e).replace(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`))}function Je(e){const t=e.indexOf("=");if(-1===t)return;const i=e.slice(0,t);if(!Fe.test(i))return;const a=e.slice(t+1),o=Qe(a,")",1);if(!a.startsWith("(")||-1===o)return;if(!function(e){if(""===e)return!0;return e.startsWith(";")&&Xe(e.slice(1),";").every((e=>{const t=e.indexOf("=");if(-1===t)return!1;const i=e.slice(0,t),a=e.slice(t+1);return Fe.test(i)&&function(e){return Ue.test(e)||$e.test(e)}(a)}))}(a.slice(o+1)))return;const s=a.slice(1,o),n=""===s?[]:Xe(s," ");return n.every((e=>Be.test(e)))?{label:i,componentIdentifiers:n,parameters:a}:void 0}function Qe(e,t,i=0){let a=!1,o=!1;for(let s=i;s<e.length;s++){const i=e[s];if(o)o=!1;else if(a&&"\\"===i)o=!0;else if('"'===i)a=!a;else if(!a&&i===t)return s}return-1}function Xe(e,t){const i=[];let a=0,o=Qe(e,t);for(;-1!==o;)i.push(e.slice(a,o)),a=o+1,o=Qe(e,t,a);return i.push(e.slice(a)),i}qe.createComputedSignatureInput=Ge,qe.createComputedSignatureInputs=function(e,t){const i=Xe(t,","),a={};for(const t of i){const i=t.trim(),o=Je(i),s=Ge(e,i);if(void 0===o||void 0===s)return;a[o.label]=s}return a},Object.defineProperty(De,"__esModule",{value:!0}),De.AbstractRequestView=void 0;const Ye=Ee,Ze=qe;De.AbstractRequestView=class{constructor(e){this._httpMsgSignature=void 0,this._buffer=e}get contentLength(){return(0,Ye.parseIntOrDefault)(this.readHeader("content-length")?.[0],{defaultValue:0,minValue:0,maxValue:Number.MAX_SAFE_INTEGER})}get userAgent(){return this.readHeader("user-agent")?.[0]??""}get contentType(){return this.readHeader("content-type")?.[0]}get xForwardedFor(){return this.readHeader("x-forwarded-for")?.[0]}get referer(){return this.readHeader("referer")?.[0]}get accept(){return this.readHeader("accept")?.[0]}get host(){return this.readHeader("host")?.[0]}async getHttpMsgSignature(){const e=this.readJoinedHeader("Signature-Input"),t=this.readJoinedHeader("Signature"),i=void 0===e?void 0:this.createBase64SignatureInput(e);return void 0===this._httpMsgSignature&&(this._httpMsgSignature={signature:t,signatureSha256:void 0===t?void 0:(await this.sha256Hash(t)).toLowerCase().slice(0,12),signatureInput:e,signatureAgent:this.readJoinedHeader("Signature-Agent"),computedInput:i}),this._httpMsgSignature}readJoinedHeader(e){const t=this.readHeader(e).join(",");return""!==t?t:void 0}toBase64(e){if(void 0===e)return;return this._buffer.from(e).toString("base64")}createBase64SignatureInput(e){const t=(0,Ze.createComputedSignatureInputs)(this,e);if(void 0!==t)return Object.entries(t).map((([e,t])=>`${e}=:${this.toBase64(t)}:`)).join(", ")}};var et={};Object.defineProperty(et,"__esModule",{value:!0}),et.RequestUrl=void 0;class tt{constructor(e,t,i,a){this.scheme=e,this.host=t,this.path=i,this.query=a}static fromString(e){const t=/^(?:([a-z][a-z0-9+.-]*):\/\/)?([^/?#]+)(\/[^?#]*)?(\?[^#]*)?(?:#.*)?$/i.exec(e);if(null===t)throw new TypeError(`Invalid request URL: ${e}`);return new tt(t[1]??"",t[2],t[3]??"/",t[4]??"")}toString(){return`${""===this.scheme?"":`${this.scheme}://`}${this.host}${this.path}${this.query}`}}et.RequestUrl=tt,Object.defineProperty(je,"__esModule",{value:!0}),je.RequestView=void 0;const it=t,at=De,ot=et;class st extends at.AbstractRequestView{constructor(e,t){super(it.Buffer),this.request=e,this.sha256Digest=t}get method(){return this.request.method}get url(){return ot.RequestUrl.fromString(this.request.url)}async getBody(){return void 0===this._body&&(this._body=await this.request.clone().text()??""),this._body}readHeader(e){const t=this.request.headers.get(e)??void 0;return void 0!==t?[t]:[]}async sha256Hash(e){const t=(new TextEncoder).encode(e),i=await this.sha256Digest.digest("SHA-256",t);return Array.from(new Uint8Array(i)).map((e=>e.toString(16).padStart(2,"0"))).join("")}}je.RequestView=st;var nt={},rt={};Object.defineProperty(rt,"__esModule",{value:!0}),rt.findBestMitigation=rt.isCaptchaMitigation=void 0;const ct=L;function ut(e){return`[${e}]`}const dt={[ct.MatchCode.NONE]:"",[ct.MatchCode.USER_AGENT]:"ua_",[ct.MatchCode.IP]:"ip_",[ct.MatchCode.VISITOR]:"visitor_",[ct.MatchCode.DATACENTER]:"datacenter_",[ct.MatchCode.CUSTOMER_SESSION]:"customer_session_",[ct.MatchCode.ORGANISATION]:"organisation_",[ct.MatchCode.ASN]:"asn_",[ct.MatchCode.COUNTRY]:"country_",[ct.MatchCode.COMBINATION]:"combination_",[ct.MatchCode.HEADER_FINGERPRINT]:"headerFP_",[ct.MatchCode.VENDOR_FAMILY]:"vendorFamily_",[ct.MatchCode.VENDOR_NAME]:"vendorName_",[ct.MatchCode.VENDOR]:"vendor_",[ct.MatchCode.VENDOR_CRAWLER_CLASSIFICATION]:"vendorCrawlerClassification_"},ht={[ct.MitigateCode.NONE]:"",[ct.MitigateCode.BLOCK]:"blocked",[ct.MitigateCode.ALLOW]:"allow",[ct.MitigateCode.HARDBLOCK]:"hardblocked",[ct.MitigateCode.FLAG]:"flagged",[ct.MitigateCode.MONETISE]:"monetised"},pt={[ct.CaptchaCode.NONE]:"",[ct.CaptchaCode.SERVE]:"captcha_serve",[ct.CaptchaCode.PASS]:"captcha_pass",[ct.CaptchaCode.FAIL]:"captcha_fail",[ct.CaptchaCode.COOKIE_PASS]:"captcha_cookiepass",[ct.CaptchaCode.COOKIE_FAIL]:"captcha_cookiefail",[ct.CaptchaCode.CHECKPOINT_SIGNAL]:"checkpoint_signal",[ct.CaptchaCode.CHECKPOINT_POST]:"checkpoint_post",[ct.CaptchaCode.CHECKPOINT_SERVE]:"checkpoint_serve",[ct.CaptchaCode.CHECKPOINT_PASS]:"checkpoint_pass",[ct.CaptchaCode.CHECKPOINT_FAIL]:"checkpoint_fail",[ct.CaptchaCode.CHECKPOINT_COOKIE_PASS]:"checkpoint_cookiepass",[ct.CaptchaCode.CHECKPOINT_COOKIE_FAIL]:"checkpoint_cookiefail"};rt.isCaptchaMitigation=function(e){return[ct.CaptchaCode.SERVE,ct.CaptchaCode.FAIL,ct.CaptchaCode.COOKIE_FAIL,ct.CaptchaCode.CHECKPOINT_POST,ct.CaptchaCode.CHECKPOINT_SERVE,ct.CaptchaCode.CHECKPOINT_FAIL,ct.CaptchaCode.CHECKPOINT_COOKIE_FAIL].includes(e.captcha)},rt.findBestMitigation=function(e,t,i,a,o=!1){i=function(e,t){return t?e:{[ct.CaptchaCode.PASS]:ct.CaptchaCode.COOKIE_PASS,[ct.CaptchaCode.FAIL]:ct.CaptchaCode.COOKIE_FAIL,[ct.CaptchaCode.CHECKPOINT_PASS]:ct.CaptchaCode.CHECKPOINT_COOKIE_PASS,[ct.CaptchaCode.CHECKPOINT_FAIL]:ct.CaptchaCode.CHECKPOINT_COOKIE_FAIL}[e]??e}(i,a),o&&(i=ct.CaptchaCode.CHECKPOINT_SIGNAL);let s=dt[e]??ut(e)+"_";return s+=ht[t]??ut(t),i!==ct.CaptchaCode.NONE&&(s+=","+(pt[i]??ut(i))),{sessionStatus:s,codes:{match:e,mitigate:t,captcha:i}}},function(e){var t=K&&K.__createBinding||(Object.create?function(e,t,i,a){void 0===a&&(a=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,a,o)}:function(e,t,i,a){void 0===a&&(a=i),e[a]=t[i]}),i=K&&K.__exportStar||function(e,i){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(i,a)||t(i,e,a)};Object.defineProperty(e,"__esModule",{value:!0}),i(rt,e)}(nt);var lt={},gt={};Object.defineProperty(gt,"__esModule",{value:!0}),gt.ResponseView=gt.AbstractResponseView=void 0;class ft{constructor(e){this.cacheStatus=e}get contentType(){return this.readHeader("content-type")?.[0]}get contentLength(){return this.readHeader("content-length")?.[0]}get location(){return this.readHeader("location")?.[0]}get setCookie(){return this.readHeader("set-cookie")}}gt.AbstractResponseView=ft;gt.ResponseView=class extends ft{constructor(e,t){super(t),this.response=e}get status(){return this.response.status}async getBody(){return void 0===this._body&&(this._body=await this.response.clone().text()??""),this._body}readHeader(e){if("set-cookie"===(e=e.toLowerCase()))return this.response.headers.getSetCookie();const t=this.response.headers.get(e)??void 0;return void 0!==t?[t]:[]}readHeaders(){const e={};return this.response.headers.forEach(((t,i)=>{e[i]=[t]})),e["set-cookie"]=this.response.headers.getSetCookie(),e}},Object.defineProperty(lt,"__esModule",{value:!0}),lt.HttpClient=lt.AbstractHttpClient=void 0;const yt=gt;class Ct{constructor(e={}){this.cache=e.cache}async request(e,t){const i=this.cache?.get(e,t);if(void 0!==i)return this.createCachedResponseView(i);const a=await this.fetch(e,t);return await this.populateCache(e,t,a),a}async populateCache(e,t,i){void 0!==this.cache&&await this.cache.set(e,t,i).catch((()=>{}))}async get(e,t){return await this.request(e,{...t,method:"GET"})}async post(e,t,i){return await this.request(e,{...i,method:"POST",body:t})}}lt.AbstractHttpClient=Ct;lt.HttpClient=class extends Ct{constructor(e){super(e),this.fetchFn=e.fetch}async fetch(e,t){const i=new AbortController,a=await async function(e,t,i){if(void 0===t)return await e;let a;const o=new Promise(((e,o)=>{a=setTimeout((()=>{i(),o(new Error(`HTTP request timed out after ${t}ms`))}),t)}));try{return await Promise.race([e,o])}finally{void 0!==a&&clearTimeout(a),Promise.resolve(e).catch((()=>{}))}}(this.fetchFn(e,{...t,signal:i.signal}),t?.timeoutMs,(()=>{i.abort()}));return new yt.ResponseView(a,"MISS")}createCachedResponseView(e){const t=new Response(e.body,e);return new yt.ResponseView(t,"HIT")}};var mt={},St={};Object.defineProperty(St,"__esModule",{value:!0}),St.LruCache=void 0;St.LruCache=class{constructor(e){if(this.capacity=e,this.entries=new Map,!Number.isInteger(e)||e<=0)throw new RangeError("LruCache capacity must be a positive integer")}get size(){return this.entries.size}get(e){if(!this.entries.has(e))return;const t=this.entries.get(e);return this.entries.delete(e),this.entries.set(e,t),t}set(e,t){if(this.entries.delete(e),this.entries.set(e,t),this.entries.size>this.capacity){const e=Array.from(this.entries.keys());e.length>0&&this.entries.delete(e[0])}}find(e){for(const[t,i]of this.entries)if(e(i,t))return this.get(t)}delete(e){return this.entries.delete(e)}clear(){this.entries.clear()}},Object.defineProperty(mt,"__esModule",{value:!0}),mt.HttpCache=void 0;const It=St,vt=Ee,kt=1048576;function wt(e){const t={};if(void 0===e)return t;for(const[i,a]of Object.entries(e))t[i.toLowerCase()]=a;return t}function Nt(e){if(void 0===e||""===e.trim())return{};const t={};for(const i of e.split(",")){const e=i.trim();if(""===e)continue;const a=e.indexOf("=");if(-1===a){t[e.toLowerCase()]=!0;continue}t[e.slice(0,a).trim().toLowerCase()]=e.slice(a+1).trim().replace(/^"(.+)"$/,"$1")}return t}function bt(e){const t=(0,vt.parseNumberOrDefault)(e,{defaultValue:void 0});return"number"==typeof t&&t>=0?t:void 0}function At(e){if(void 0===e)return;const t=Date.parse(e);return Number.isNaN(t)?void 0:t}function Et(e,t){return{method:(i=t?.method,(i??"GET").toUpperCase()),url:e,headers:wt(t?.headers)};var i}function Ot(e){if("GET"!==e.method)return`method=${e.method}`;if(void 0!==e.headers.authorization)return"authorization header present";if(void 0!==e.headers.range)return"range header present";if(void 0!==e.headers["if-match"])return"if-match header present";if(void 0!==e.headers["if-none-match"])return"if-none-match header present";if(void 0!==e.headers["if-modified-since"])return"if-modified-since header present";if(void 0!==e.headers["if-unmodified-since"])return"if-unmodified-since header present";if(void 0!==e.headers["if-range"])return"if-range header present";return void 0!==Nt(e.headers["cache-control"])["no-store"]?"request cache-control=no-store":void 0}function _t(e,t){return!t.vary.includes("*")&&t.vary.every((i=>(e.headers[i]??"")===(t.varyRequestHeaders[i]??"")))}function Pt(e){const t=bt(e.cacheControl["s-maxage"]);if(void 0!==t)return t;const i=bt(e.cacheControl["max-age"]);if(void 0!==i)return i;const a=At(e.headers.expires);return void 0===a?0:Math.max(0,Math.floor((a-(e.dateHeaderMs??e.storedAt))/1e3))}function Rt(e){return JSON.stringify([e.url,e.vary.map((t=>[t,e.varyRequestHeaders[t]??""]))])}mt.HttpCache=class{constructor(e={}){this.entries=new It.LruCache(10),this.defaultCacheControl=e.defaultCacheControl,this.now=e.now??(()=>Date.now())}get(e,t){const i=Et(e,t);if("GET"!==i.method)return{body:"Not Found",headers:{},status:404,storedAt:this.now(),url:i.url,vary:[],varyRequestHeaders:{},cacheControl:{},ageSeconds:0};if(void 0!==Ot(i))return;const a=Nt(i.headers["cache-control"]);if(void 0!==a["no-cache"])return;const o=this.entries.find((e=>e.url===i.url&&_t(i,e)));if(void 0===o)return;if(void 0!==o.cacheControl["no-cache"])return;const s=bt(a["max-age"]),n=void 0===s?Pt(o):Math.min(Pt(o),s),r=function(e,t){return Math.max(0,Math.floor((t-e.storedAt)/1e3))+e.ageSeconds}(o,this.now());return r>=n?void 0:{...o,headers:{...o.headers,age:String(r)}}}async set(e,t,i){const a=Et(e,t);if(void 0!==Ot(a))return;const o=this.entries.find((e=>e.url===a.url&&_t(a,e))),s=function(e){const t={};for(const[i,a]of Object.entries(e.readHeaders()))a.length>0&&(t[i.toLowerCase()]=a.join(", "));return t}(i),n=Nt(s["cache-control"]??this.defaultCacheControl);if(200!==i.status||void 0!==n["no-store"]||void 0!==n.private||i.setCookie.length>0)return void this.removeEntry(o);const r=function(e){return void 0===e.vary?[]:e.vary.split(",").map((e=>e.trim().toLowerCase())).filter((e=>""!==e))}(s);if(r.includes("*"))return void this.removeEntry(o);const c=Number(s["content-length"]);if(Number.isFinite(c)&&c>kt)return void this.removeEntry(o);const u=await i.getBody();if((new TextEncoder).encode(u).byteLength>kt)return void this.removeEntry(o);const d=this.now(),h=Number(s.age??"0"),p=At(s.date),l=void 0===p?0:Math.max(0,Math.floor((d-p)/1e3)),g={body:u,headers:s,status:i.status,storedAt:d,url:a.url,vary:r,varyRequestHeaders:Object.fromEntries(r.map((e=>[e,a.headers[e]??""]))),cacheControl:n,dateHeaderMs:p,ageSeconds:Math.max(Number.isFinite(h)&&h>=0?h:0,l)};void 0!==o&&this.entries.delete(Rt(o)),this.entries.set(Rt(g),g)}removeEntry(e){void 0!==e&&this.entries.delete(Rt(e))}};var Tt={};Object.defineProperty(Tt,"__esModule",{value:!0}),Tt.ProtectorApiResponseView=void 0;const Mt=Ee;Tt.ProtectorApiResponseView=class{constructor(e){this.responseView=e}get status(){return this.responseView.status}async getBody(){return await this.responseView.getBody()}readHeader(e){return this.responseView.readHeader(e)}get redirectHost(){return this.readHeader("x-netacea-redirect-host")?.[0]}get redirectLocation(){return this.readHeader("x-netacea-redirect-location")?.[0]}get redirectStatus(){return this.readHeader("x-netacea-redirect-status")?.[0]}get redirectStatusCode(){const e=this.readHeader("x-netacea-redirect-status")?.[0];if(void 0===e)return;const t=(0,Mt.parseIntOrDefault)(e,{defaultValue:0,minValue:0,maxValue:Number.MAX_SAFE_INTEGER});return t>=300&&t<400?t:void 0}get eventId(){return this.readHeader("x-netacea-event-id")?.[0]}get signatureStatus(){return this.readHeader("x-netacea-signature-status")?.[0]}get netaceaSettings(){const e=this.readHeader("x-netacea-settings")?.[0];if(void 0===e)return{checkAllPostRequests:!1};try{const t=new URLSearchParams(e).get("checkAllPostRequests");return null===t?{checkAllPostRequests:!1}:{checkAllPostRequests:"1"===t}}catch{return{checkAllPostRequests:!1}}}get sessionCookieMaxAge(){return(0,Mt.parseIntOrDefault)(this.readHeader("x-netacea-mitata-expiry")?.[0],{defaultValue:86400,minValue:0,maxValue:Number.MAX_SAFE_INTEGER})}get captchaCookieMaxAge(){const e=this.readHeader("x-netacea-mitatacaptcha-expiry")?.[0];return(0,Mt.parseIntOrDefault)(e,{defaultValue:86400,minValue:0,maxValue:Number.MAX_SAFE_INTEGER})}getProtectorCodes(e){return{match:this.readHeader("x-netacea-match")?.[0]??e?.match??"0",mitigate:this.readHeader("x-netacea-mitigate")?.[0]??e?.mitigate??"0",captcha:this.readHeader("x-netacea-captcha")?.[0]??e?.captcha??"0"}}getMonetisationRedirectLocation(e,t){const i=this.redirectLocation;if(void 0!==i)return i;const a=this.redirectHost;if(void 0!==a){const i=new URL(`https://${a}`);return i.pathname=e,i.search=t,i.toString()}}getMonetisationRedirect(e,t){const i=this.getMonetisationRedirectLocation(e,t);if(void 0!==i)return{location:i,statusCode:this.redirectStatusCode??303}}async getCaptchaJson(e,t){const i=await this.getBody();let a=this.eventId;if(void 0===a&&"string"==typeof i){a=function(e){if(null==e||"object"!=typeof e)throw new Error("Response body is not a valid object!");const{trackingId:t}=e;if("string"!=typeof t||0===t.length)throw new Error("Response body does not contain a valid trackingId!");return t}(JSON.parse(i))}if(void 0===a)throw new Error("Could not resolve Tracking ID for captcha event.");return function(e,t,i){const a=`${e}?trackingId=${i}`,o=void 0!==t?`https://${t}${a}`:void 0;return JSON.stringify({captchaRelativeURL:a,captchaAbsoluteURL:o})}(e,t,a)}};var xt={};Object.defineProperty(xt,"__esModule",{value:!0}),xt.acceptHeaderToNetaceaContentType=xt.APIError=xt.ProtectorApiClient=void 0;const Kt=Tt;xt.ProtectorApiClient=class{constructor(e,t){this.httpClient=e.httpClient,this.timeoutMs=e.timeoutMs;const i=/^https:\/\/([^/?#]+)/i.exec(t.protectorApiUrl);if(null===i)throw new Error("Protector API URL must use HTTPS");this.protectorApiHost=i[1],this.apiKey=t.apiKey}async getDecisionResponse(e){return await this.getResponse("/",e)}async getChallengePage(e){return await this.getResponse("/captcha",e)}async getResponse(e,t){const i=[],a=new Ht,o={"X-Netacea-API-Key":this.apiKey,"X-Netacea-Client-IP":t.clientIp};void 0===t.userId||t.isNewUser||(o["X-Netacea-UserId"]=t.userId);const{captchaSiteKey:s,captchaSecretKey:n}=t;if(void 0!==s&&void 0!==n&&(o["X-Netacea-Captcha-Site-Key"]=s,o["X-Netacea-Captcha-Secret-Key"]=n),void 0!==t.customerSessionId&&(o["X-Netacea-Customer-Session-ID"]=t.customerSessionId),void 0!==t.accept){o.Accept=t.accept;const e=Lt(t.accept);o["X-Netacea-Captcha-Content-Type"]=e}if(void 0!==t.headerFingerprint&&a.setQuery("headerFP",t.headerFingerprint),void 0===t.checkAllPostRequests&&a.setQuery("getSettings","checkAllPostRequests"),void 0!==t.challengeAssetsPath&&a.setQuery("challengeAssetsPath",t.challengeAssetsPath),void 0!==t.trackingId&&a.setQuery("trackingId",t.trackingId),void 0!==t.base64UserAgent?(o["X-Netacea-User-Agent"]=t.base64UserAgent,i.push("User-Agent")):void 0!==t.userAgent&&(o["User-Agent"]=t.userAgent),void 0!==t.requestId&&(o["X-Netacea-Request-Id"]=t.requestId,i.push("Request-Id")),void 0!==t.captchaCookie){let e=t.captchaCookie;e.startsWith("_mitatacaptcha=")||(e="_mitatacaptcha="+e),o.Cookie=e}void 0!==t.httpMsgSignature&&function(e,t,i){void 0!==i.signature&&(e.Signature=i.signature);void 0!==i.signatureInput&&(e["Signature-Input"]=i.signatureInput);void 0!==i.signatureAgent&&(e["Signature-Agent"]=i.signatureAgent);void 0!==i.computedInput&&(e["X-Netacea-Computed-Signature-Input"]=i.computedInput,t.push("Computed-Signature-Input"))}(o,i,t.httpMsgSignature),i.length>0&&a.setQuery("netaceaHeaders",i.join(","));const r=this.protectorApiHost,c=await this.httpClient.get(`https://${r}${e}`+a.buildQueryString(),{headers:o,timeoutMs:this.timeoutMs});if(200!==c.status)throw Vt.fromResponse(c);return new Kt.ProtectorApiResponseView(c)}};let Vt=class e extends Error{constructor(e,t){super(e),this.response=t}static fromResponse(t){let i="Unknown error";switch(t.status){case 403:i="Invalid credentials";break;case 500:i="Server error";break;case 502:i="Bad Gateway";break;case 503:i="Service Unavailable";break;case 400:i="Invalid request"}return new e(i,t)}};function Lt(e){const t=e?.toLowerCase()??"text/html",i=t?.includes("text/html")||t?.includes("application/html"),a=t?.includes("application/json");return a&&!i?"application/json":"text/html"}xt.APIError=Vt,xt.acceptHeaderToNetaceaContentType=Lt;class Ht{constructor(){this.queries={}}setQuery(e,t){return this.queries[e]=encodeURIComponent(t),this}removeQuery(e){const{[e]:t,...i}=this.queries;return this.queries=i,this}buildQueryString(){const e=Object.entries(this.queries).map((([e,t])=>`${e}=${t}`)).join("&");return e.length>0?`?${e}`:""}}!function(e){var t=K&&K.__createBinding||(Object.create?function(e,t,i,a){void 0===a&&(a=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,a,o)}:function(e,t,i,a){void 0===a&&(a=i),e[a]=t[i]}),i=K&&K.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=K&&K.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(null!=e)for(var o in e)"default"!==o&&Object.prototype.hasOwnProperty.call(e,o)&&t(a,e,o);return i(a,e),a},o=K&&K.__exportStar||function(e,i){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(i,a)||t(i,e,a)};Object.defineProperty(e,"__esModule",{value:!0}),e.mitigation=e.graphql=e.webcrypto=e.url=e.parsing=e.ingest=e.headers=e.configValidation=e.cookie=e.NetaceaCookieV3IssueReason=e.MitigateCode=e.MatchCode=e.CaptchaCode=void 0;var s=L;Object.defineProperty(e,"CaptchaCode",{enumerable:!0,get:function(){return s.CaptchaCode}}),Object.defineProperty(e,"MatchCode",{enumerable:!0,get:function(){return s.MatchCode}}),Object.defineProperty(e,"MitigateCode",{enumerable:!0,get:function(){return s.MitigateCode}});var n=j;Object.defineProperty(e,"NetaceaCookieV3IssueReason",{enumerable:!0,get:function(){return n.NetaceaCookieV3IssueReason}}),e.cookie=a(D),e.configValidation=a(Z),e.headers=a(ee),e.ingest=a(me),e.parsing=a(Ee),e.url=a(_e),e.webcrypto=a(Pe),e.graphql=a(Ke),o(je,e),e.mitigation=a(nt),o(lt,e),o(mt,e),o(St,e),o(De,e),o(et,e),o(gt,e),o(Tt,e),o(xt,e)}(V);const jt=new V.webcrypto.jwe.JweFactory(c);class Dt extends V.cookie.AbstractCookieFactory{async encrypt(e){if(void 0===this.config.cookieEncryptionKey)throw new Error("CloudflareCookieFactory.encrypt called without a configured encryption key");return await jt.encrypt(e,this.config.cookieEncryptionKey,"A256GCM")}async decrypt(e){if(void 0===this.config.cookieEncryptionKey)throw new Error("CloudflareCookieFactory.decrypt called without a configured encryption key");return await jt.decrypt(e,this.config.cookieEncryptionKey)}async hash(e,i){const a=await R(t.Buffer.from(e),i),o=t.Buffer.from(a).toString("hex");return t.Buffer.from(o).toString("base64")}getRandomValues(e){return crypto.getRandomValues(e)}}var qt;function Ft(e){if(void 0===e)return"text/html";const t=e.toLowerCase(),i=t.includes("application/html")||t.includes("text/html"),a=t.includes("application/json");return!i&&a?"application/json":"text/html"}function Ut(e,t,i){if(void 0===i||""===i)return!1;i.startsWith("/")||(i="/"+i);const{pathname:a}=e;return a===i&&"get"===t.toLowerCase()}function $t(e,t,i){return i.startsWith("/")||(i="/"+i),e.pathname===i&&"post"===t.toLowerCase()}function Bt(e,t){if(void 0===t)return e;const i=e.headers.get("set-cookie")??"",a=new Headers(e.headers);if(void 0!==t.setCookie)for(const e of t.setCookie)i.includes(e.split("=")[0])||a.append("set-cookie",e);return new Response(e.body,{headers:a,status:e.status,statusText:e.statusText})}function Gt(e){if(void 0!==e.config.netaceaBlockedResponseRedirectLocation&&function(e){if("GET"!==e.method?.toUpperCase())return!1;const t=e.headers.get("sec-fetch-mode");return(void 0===t||"navigate"===t)&&(e.headers.get("accept")?.split(/, ?/)??[]).includes("text/html")}(e.request)){if(void 0===e.config.netaceaBlockedResponseRedirectLocation)throw new Error("Cannot redirect without a configured location");return Wt(e,e.config.netaceaBlockedResponseRedirectLocation)}return zt(e)}function zt(e){const t=e.status??403;return new Response("Forbidden",{status:t,statusText:{402:"Payment Required",403:"Forbidden"}[t]??"",headers:e.responseHeaders})}function Wt(e,t,i=303){const a=new Headers(e.responseHeaders);return a.append("Location",t),new Response("Forbidden",{status:i,statusText:"",headers:a})}function Jt(e){const t=new Headers(e.responseHeaders);return void 0!==e.config.captchaHeader&&t.append(e.config.captchaHeader.name,e.config.captchaHeader.value),t.has("content-type")||t.append("content-type","text/html; charset=UTF-8"),new Response(e.body,{status:403,headers:t})}!function(e){e[e.NEW_SESSION=1]="NEW_SESSION",e[e.EXISTING_SESSION=2]="EXISTING_SESSION",e[e.RENEW_SESSION=3]="RENEW_SESSION"}(qt||(qt={}));class Qt extends Error{protectorApiResponse;latencyMs;constructor(e,t){super(`Got status ${e.status} when calling protector API with ${t}ms latency.`),this.protectorApiResponse=e,this.latencyMs=t}}var Xt="@netacea/cloudflare",Yt="6.8.15";function Zt(e){return`[${e}]`}function ei(e,t,i){let{match:a,mitigate:o,captcha:s}=t;i||("2"===s?s="4":"3"===s?s="5":"b"===s?s="d":"c"===s&&(s="e"));let n=w[a]??Zt(a)+"_";n+=N[o]??Zt(o);let r=A[o];if("0"!==s){n+=","+(b[s]??Zt(s));const e=E[s];void 0!==e&&(r=e)}return e===exports.NetaceaMitigationType.INJECT&&(r=I.none),{sessionStatus:n,mitigation:r,parts:{match:a,mitigate:o,captcha:s}}}function ti(e,t){const i={"x-netacea-match":e.match,"x-netacea-mitigate":e.mitigate,"x-netacea-captcha":e.captcha};return void 0!==t&&(i["x-netacea-event-id"]=t),i}async function ii(e){let t="";try{t=await async function(e,t){const i=(new TextEncoder).encode(t),a=await crypto.subtle.digest(e,i);return Array.from(new Uint8Array(a)).map((e=>e.toString(16).padStart(2,"0"))).join("")}("SHA-256",e)}catch(e){t=""}return t}async function ai(e,t){const i=t.clone(),a=await async function(e,t){const i=t.body?.getReader();if(null==i)return"";let a=0;const o=[];for(;;){const{done:t,value:s}=await i.read();if(t)break;if(a+=s.length,a>e.maxParsableBytes)throw i.releaseLock(),new oi("Request body too large",a);if(!(s instanceof Uint8Array))throw new Error("Body must be read as Uint8Array chunks");o.push(s)}const s=new Uint8Array(a);let n=0;for(const e of o)s.set(e,n),n+=e.length;return(new TextDecoder).decode(s)}(e,i);return{contentLength:a.length,graphQL:V.graphql.parseGraphQlRequestBody(e,a)}}class oi extends Error{bodySize;constructor(e,t){super(e),this.bodySize=t}}class si{config;constructor(e){this.config=e}async getNetaceaRequestDetails(e){const t=new URL(e.url),i=e.method,a=await this.readCookie(e,this.config.netaceaCookieName),o=await this.readCookie(e,this.config.netaceaCaptchaCookieName),s=e.headers.get("cf-connecting-ip")??"",n=e.headers.get("cf-ray")??"",r=V.parsing.parseIntOrDefault(e.headers.get("content-length"),{defaultValue:0}),{sessionCookieDetails:c,sessionCookieStatus:u,sessionStatus:d,userId:h}=await async function(e,t,i,a,o){const s=await e.cookieFactory.retrieveCookieInfo(a,o),n={userId:void 0!==s.mitata?s.mitata.userId:void 0,requiresReissue:s.requiresReissue,isExpired:s.isExpired,shouldExpire:s.shouldExpire,isSameIP:s.isSameIP,isPrimaryHashValid:s.isPrimaryHashValid,protectorCheckCodes:{match:s.match,mitigate:s.mitigate,captcha:s.captcha},issueReason:s.issueReason};if(void 0!==n.userId&&n.isPrimaryHashValid){const a=n.userId,{isExpired:o,shouldExpire:s,isSameIP:r}=n,c=o||s||!r&&e.mitigationType!==exports.NetaceaMitigationType.INGEST?qt.RENEW_SESSION:qt.EXISTING_SESSION,{sessionStatus:u}=ei(e.mitigationType,n.protectorCheckCodes,$t(t,i,e.netaceaCaptchaVerificationPath));return{sessionCookieDetails:n,sessionCookieStatus:c,sessionStatus:u,userId:a}}return{sessionStatus:"",userId:P(),sessionCookieStatus:qt.NEW_SESSION,sessionCookieDetails:void 0}}(this.config,t,i,a,s),p={contentLength:r,clientIp:s,fingerprints:await ri(e),httpMessageSignatures:await ni(e),method:i,protocol:String(e.cf?.httpProtocol),url:t,userAgent:e.headers.get("user-agent")??"",contentType:e.headers.get("content-type")??void 0,xForwardedFor:e.headers.get("x-forwarded-for")??void 0,referer:e.headers.get("referer")??void 0,accept:e.headers.get("accept")??void 0,requestId:n,sessionDetails:{captchaToken:o,sessionCookie:a,sessionCookieDetails:c,sessionCookieStatus:u,sessionStatus:d,userId:h}};try{if(function(e,t){const i=e.includePaths;return"POST"===t.method&&i.includes(t.url.pathname)&&(!e.useStrictAcceptHeaderCheck||void 0!==t.accept&&t.accept.toLocaleLowerCase().includes("graphql"))&&t.contentLength<=e.maxParsableBytes&&"application/json"===t.contentType}(this.config.graphQL,p)){const{contentLength:t,graphQL:i}=await ai(this.config.graphQL,e);p.contentLength=t,p.graphQL=i}}catch(e){if(e instanceof oi){const t=e.bodySize;t>p.contentLength&&(p.contentLength=t)}}return p}async readCookie(e,t){const i=e.headers.get("Cookie");if(null==i)return;const a=i.split(/; ?/g),o=`${t}=`;for(const e of a)if(e.startsWith(o)){const i=e.slice(o.length),a=this.config.encryptedCookies??[];if(void 0!==this.config.cookieEncryptionKey&&a.includes(t))try{return await jt.decrypt(i,this.config.cookieEncryptionKey)}catch(e){return}return i}}}async function ni(e){const t=new V.RequestView(e,crypto.subtle);return await t.getHttpMsgSignature()}async function ri(e){const{headers:t}=e,i=await async function(e){const t=function(e){const t=[];return e.forEach(((e,i)=>{const a=i.toLowerCase();"cookie"===a||"referer"===a||a.startsWith("x-netacea-")||t.push(i)})),t.join(",")}(e);return await ii(t)}(t),a=""===i?i:`h_${i.substring(1,15)}`,o=function(e,t){return e.get(t)?.split(/; ?/)??[]}(t,"cookie").map((e=>e.split("=")[0])).flat(),s=await async function(e){const t=e.join(",");return await ii(t)}(o);return{headerFingerprint:a,cookieFingerprint:""===s?s:`c_${s.substring(1,15)}`}}const{validateRedirectLocation:ci}=V.configValidation,{configureCookiesDomain:ui}=m.cookie.attributes;class di{apiKey;captchaHeader;captchaSecretKey;captchaSiteKey;cookieEncryptionKey;enableDynamicCaptchaContentType=!1;encryptedCookies=[];graphQL;ingestServiceUrl;ingestType;kinesisConfigArgs;mitataCookieExpirySeconds;mitigationServiceTimeoutMs;mitigationServiceUrl;mitigationType;netaceaBlockedResponseRedirectLocation;netaceaCaptchaCookieAttributes;netaceaCaptchaCookieName;netaceaCaptchaPath;netaceaCaptchaVerificationPath;netaceaCheckpointSignalPath;netaceaCookieAttributes;netaceaCookieName;secretKey;timeout;constructor(e){const{apiKey:t,secretKey:i,timeout:a=3e3,mitigationServiceTimeoutMs:o=1e3,mitigationServiceUrl:n="https://mitigations.netacea.net",ingestServiceUrl:r="https://ingest.netacea.net",mitigationType:c=exports.NetaceaMitigationType.INGEST,captchaSiteKey:u,captchaSecretKey:h,ingestType:p=s.HTTP,kinesis:l,mitataCookieExpirySeconds:g,netaceaCookieExpirySeconds:f,enableDynamicCaptchaContentType:y=!1,captchaHeader:C,netaceaCaptchaPath:m,netaceaCaptchaVerificationPath:S,netaceaCheckpointSignalPath:I}=e;if(null==t)throw new Error("apiKey is a required parameter");this.apiKey=t,this.secretKey=i,this.mitigationServiceUrl=n.endsWith("/")?n.slice(0,-1):n,this.ingestServiceUrl=r,this.mitigationType=c,this.ingestType=p??s.HTTP,this.kinesisConfigArgs=l,void 0===u&&void 0===h||(this.captchaSiteKey=u,this.captchaSecretKey=h),this.timeout=function(e){return e<=0?d:e}(a),this.mitigationServiceTimeoutMs=V.parsing.parseIntOrDefault(o,{defaultValue:1e3,minValue:100,maxValue:1e4}),this.netaceaCookieName=V.parsing.stringOrDefault(e.netaceaCookieName,"_mitata"),this.netaceaCaptchaCookieName=V.parsing.stringOrDefault(e.netaceaCaptchaCookieName,"_mitatacaptcha");const{cookieAttributes:v,captchaCookieAttributes:k}=ui(e.netaceaCookieAttributes,e.netaceaCaptchaCookieAttributes);var w;this.netaceaCookieAttributes=v??"",this.netaceaCaptchaCookieAttributes=k??"",this.encryptedCookies=[this.netaceaCookieName,this.netaceaCaptchaCookieName],this.mitataCookieExpirySeconds=function(e,t){return void 0===t?e===exports.NetaceaMitigationType.INGEST?3600:60:t}(c,f??g),this.cookieEncryptionKey=e.cookieEncryptionKey,Boolean(m)&&"string"==typeof m&&(this.netaceaCaptchaPath=m.startsWith("/")?m:`/${m}`),void 0!==this.netaceaCaptchaPath&&(this.enableDynamicCaptchaContentType="boolean"==typeof y?y:"true"===y),this.captchaHeader=C,this.netaceaCaptchaVerificationPath=void 0!==(w=S)&&w.startsWith("/")&&w.length>=5?w:"/AtaVerifyCaptcha",this.netaceaCheckpointSignalPath=I,this.netaceaBlockedResponseRedirectLocation=ci(e.netaceaBlockedResponseRedirectLocation),this.graphQL=V.graphql.getGraphQLParserConfig(e.graphQL)}}function hi(e){if(void 0===e.sessionDetails.sessionCookieDetails)return V.NetaceaCookieV3IssueReason.NO_SESSION;const{isSameIP:t,isExpired:i}=e.sessionDetails.sessionCookieDetails;return t?i?V.NetaceaCookieV3IssueReason.EXPIRED_SESSION:V.NetaceaCookieV3IssueReason.UNKNOWN:V.NetaceaCookieV3IssueReason.IP_CHANGE}exports.default=class{config;kinesis;requestAnalyser;cookieFactory;protectorApiClient;workerInstanceId;constructor(i){this.config=new di(i),this.protectorApiClient=new V.ProtectorApiClient({httpClient:new V.HttpClient({fetch:S}),timeoutMs:this.config.mitigationServiceTimeoutMs},{apiKey:this.config.apiKey,protectorApiUrl:this.config.mitigationServiceUrl}),this.cookieFactory=new Dt({cookieEncryptionKey:this.config.cookieEncryptionKey,secretKey:this.config.secretKey,expirySeconds:this.config.mitataCookieExpirySeconds}),this.config.ingestType===s.KINESIS&&(void 0===this.config.kinesisConfigArgs?console.warn(`NETACEA WARN: no kinesis args provided, when ingestType is ${this.config.ingestType}`):this.kinesis=new V.ingest.WebStandardKinesis({deps:{AwsClient:e.AwsClient,Buffer:t.Buffer,makeRequest:this.makeRequest.bind(this)},kinesisIngestArgs:{...this.config.kinesisConfigArgs,apiKey:this.config.apiKey}})),this.requestAnalyser=new si({...this.config,cookieFactory:this.cookieFactory}),this.workerInstanceId=""}async run(e,t){""===this.workerInstanceId&&(this.workerInstanceId=u.v4());const i=new Request(e.request),a=await this.requestAnalyser.getNetaceaRequestDetails(i);if(function(e,t,i){let a=e;try{a=new URL(e).pathname}catch(e){}return void 0!==i&&i.length>0&&a.endsWith(i)&&"get"===t.toLowerCase()}(i.url,i.method,this.config.netaceaCheckpointSignalPath)){const e={sessionStatus:",checkpoint_signal"};return await this.handleResponse(i,a,e,t)}let o=await async function(e,t){const i=new Promise(((e,i)=>{const a=Date.now();setTimeout((()=>{const t=Date.now()-a;e(t)}),t)}));return await Promise.race([e,i])}(this.runMitigation(i,a),this.config.mitigationServiceTimeoutMs);return"number"==typeof o&&(o={sessionStatus:"error_open",apiCallLatency:o}),await this.handleResponse(i,a,o,t)}async inject(e,t){const i=await this.getMitigationResponse(e,t);return{injectHeaders:i.injectHeaders,sessionStatus:i.sessionStatus,setCookie:i.setCookie,apiCallLatency:i.apiCallLatency,apiCallStatus:i.apiCallStatus}}async mitigate(e,t){const i=await this.getMitigationResponse(e,t),a=$t(t.url,e.method,this.config.netaceaCaptchaVerificationPath),o=a&&i.sessionStatus.includes("checkpoint_post"),s=!a&&Ut(t.url,e.method,this.config.netaceaCaptchaPath),n=()=>{const e=new Headers;if(!s&&!o)for(const t of i.setCookie)e.append("set-cookie",t);return e};if(i.mitigated&&!o){if("captcha"===i.mitigation){const e=n();return"application/json"===i.captchaPageContentType&&e.set("content-type","application/json"),{...i,response:Jt({config:this.config,responseHeaders:e,body:i.body})}}return{...i,response:Gt({config:this.config,request:e,responseHeaders:n()})}}return"5"===i.protectorCheckCodes.mitigate?void 0===i.redirect?{...i,response:zt({status:402,responseHeaders:n()})}:{...i,response:Wt({config:this.config,responseHeaders:n()},i.redirect.location,i.redirect.statusCode)}:a?{...i,response:new Response(i.body,{status:200,statusText:"OK",headers:n()})}:i}async getNetaceaSession(e,t){const i=(void 0!==t?await this.getNetaceaCookieFromResponse(t):void 0)??await this.getNetaceaCookieFromRequest(e),{protectorCheckCodes:a,userId:o}=function(e){if(void 0===e)return;const t=e.match(_);if(null!=t){const[,e,i,a,o,s,n,r,c]=t;return{signature:e,expiry:i,userId:a,ipHash:o,mitigationType:s,protectorCheckCodes:{match:n,mitigate:r,captcha:c}}}}(i??"")??{userId:"",protectorCheckCodes:{match:"0",mitigate:"0",captcha:"0"}},{sessionStatus:s}=ei(this.config.mitigationType,a,$t(new URL(e.url),e.method,this.config.netaceaCaptchaVerificationPath));return{userId:o,sessionStatus:s,netaceaCookie:i}}async getResponseDetails(e){if(e instanceof Response){const t=e;return{rawResponse:t,sessionCookie:await this.getNetaceaCookieFromResponse(t)}}{const t=e;return{rawResponse:t.response,mitigationLatency:t.protectorLatencyMs,mitigationStatus:t.protectorStatus,sessionStatus:t.sessionStatus,signatureStatus:t.signatureStatus,sessionCookie:await this.getNetaceaCookieFromResponse(t.response)}}}async ingest(e,t){""===this.workerInstanceId&&(this.workerInstanceId=u.v4());const i=await this.getResponseDetails(t),a="requestDetails"in t?t.requestDetails:await this.requestAnalyser.getNetaceaRequestDetails(e),o=function(e,t,i,a){const o=i.sessionStatus??t.sessionDetails.sessionStatus,s=t.method,n=t.url.pathname,r=t.protocol??null,c=Date.now(),u=t.referer??"",d=V.parsing.parseIntOrDefault(i.rawResponse.headers.get("content-length"),{defaultValue:0}),{signatureAgent:h,signatureInput:p,signatureSha256:l}=t.httpMessageSignatures??{};return{BytesReceived:t.contentLength,BytesSent:d,Query:t.url.search.slice(1),GraphQL:t.graphQL,IntegrationType:Xt?.replace("@netacea/","")??"",IntegrationVersion:Yt,NetaceaMitigationApplied:o??"",UserId:t.sessionDetails.userId,NetaceaUserIdCookieStatus:t.sessionDetails.sessionCookieStatus,ProtectionMode:e.mitigationType??"",ProtectorLatencyMs:i.mitigationLatency,ProtectorStatus:i.mitigationStatus,RealIp:t.clientIp,Referer:""===u?"-":u,Request:`${s} ${n} ${r}`,RequestHost:t.url.host,RequestId:t.requestId,RequestTime:"0",Status:i.rawResponse.status.toString(),TimeLocal:new Date(c).toUTCString(),TimeUnixMsUTC:c,UserAgent:t.userAgent,WorkerInstanceId:a,XForwardedFor:t.xForwardedFor,optional:{headerFingerprint:t.fingerprints.headerFingerprint,cookieFingerprint:t.fingerprints.cookieFingerprint},HttpMsgSigAgent:h,HttpMsgSigInput:p,HttpMsgSigSha256:l,HttpMsgSigStatus:i.signatureStatus}}(this.config,a,i,this.workerInstanceId);try{if(this.config.ingestType===s.KINESIS){if(void 0===this.kinesis)return void console.error("Netacea Error: Unable to log as Kinesis has not been defined.");await this.kinesis.ingest({...o,apiKey:this.config.apiKey})}else{const e=function(e,t){const i={"X-Netacea-API-Key":e.apiKey,"content-type":"application/json"};return{host:e.ingestServiceUrl,method:"POST",path:"/",headers:i,body:t,timeout:e.timeout}}(this.config,JSON.stringify(o)),t=await this.makeRequest(e);if(200!==t.status)throw function(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}`)}(t)}}catch(e){console.error("NETACEA Error: ",e.message)}}async handleGetCaptchaRequest(e,t,i){if(void 0===this.config.secretKey)throw new Error("Secret key is required to mitigate");const a=await this.makeMitigateAPICall(e,t,!0,i),{match:o,mitigate:s,captcha:n}=a.responseView.getProtectorCodes();return{body:a.body,apiCallStatus:a.status,apiCallLatency:a.latency,setCookie:[],sessionStatus:",captcha_serve",mitigation:"captcha",mitigated:!0,protectorCheckCodes:{match:o,mitigate:s,captcha:n},captchaPageContentType:t}}async makeRequest({host:e,method:t,path:i,headers:a,body:o}){const s=`${e}${i}`,n=new Request(s,{...{method:t,body:o,headers:a},duplex:"half"}),r=await S(s,n),c={};return r.headers.forEach(((e,t)=>{null!==e&&(c[t]=e)})),{status:r.status,body:await r.clone().text(),headers:c,fetchResponse:r}}async handleResponse(e,t,i,a){if(this.config.mitigationType===exports.NetaceaMitigationType.MITIGATE&&void 0!==i?.response)return{protectorLatencyMs:i?.apiCallLatency,protectorStatus:i?.apiCallStatus,requestDetails:t,response:i.response,sessionStatus:i?.sessionStatus??"",signatureStatus:i?.signatureStatus};if(void 0!==i&&"injectHeaders"in i){e=function(e,t){if(void 0===t.injectHeaders)return e;const i=new Headers(e.headers);for(const[e,a]of Object.entries(t.injectHeaders))i.set(e,a);return new Request(e,{headers:i})}(e,i)}if(this.config.ingestType===s.ORIGIN){const{sessionStatus:t,userId:a}=await this.getNetaceaSession(e,i);!function(e,t,i){e.headers.set("x-netacea-integration-type",Xt.replace("@netacea/","")),e.headers.set("x-netacea-integration-version",Yt),e.headers.set("x-netacea-userid",i),e.headers.set("x-netacea-bc-type",t)}(e,t,a)}const o=await a(e);return{protectorLatencyMs:i?.apiCallLatency,protectorStatus:i?.apiCallStatus,requestDetails:t,response:Bt(o,i),sessionStatus:i?.sessionStatus??"",signatureStatus:i?.signatureStatus}}async getMitigationResponse(e,t){const i=this.config.enableDynamicCaptchaContentType?Ft(e.headers.get("Accept")??void 0):Ft();return await this.processMitigateRequest({getBodyFn:async()=>await Promise.resolve(e.body)??void 0,requestDetails:t,captchaPageContentType:i,body:e.body})}async runMitigation(e,t){try{if(function(e,t){if(void 0===t)return!1;const i=new URL(e.url);if(t.startsWith("/"))return t===i.pathname;try{const e=new URL(t);return e.host===i.host&&e.pathname===i.pathname}catch{return!1}}(e,this.config.netaceaBlockedResponseRedirectLocation))return{sessionStatus:""};switch(this.config.mitigationType){case exports.NetaceaMitigationType.MITIGATE:return await this.mitigate(e,t);case exports.NetaceaMitigationType.INJECT:return await this.inject(e,t);case exports.NetaceaMitigationType.INGEST:return await this.processIngest(t);default:throw new Error(`Netacea Error: Mitigation type ${String(this.config.mitigationType)} not recognised`)}}catch(i){let a,o;i instanceof Error&&console.error("Netacea FAILOPEN Error:",i,i.stack),i instanceof Qt&&(o=i.latencyMs,a=i.protectorApiResponse?.status);return{response:$t(t.url,e.method,this.config.netaceaCaptchaVerificationPath)?new Response("",{status:500,statusText:"Internal Server Error",headers:{}}):void 0,injectHeaders:ti({match:"0",mitigate:"0",captcha:"0"}),sessionStatus:"error_open",apiCallLatency:o,apiCallStatus:a}}}async readCookie(e,t){if(null==t)return;if("string"==typeof t)return await this.readCookie(e,t.split(";"));const i=`${e}=`;for(const a of t){const t=a.split(";")[0].trimStart();if(t.startsWith(i)){const a=t.slice(i.length);if(void 0!==this.config.cookieEncryptionKey&&this.config.encryptedCookies.includes(e))try{return await jt.decrypt(a,this.config.cookieEncryptionKey)}catch(e){return}return a}}}async getNetaceaCookieFromResponse(e){if(void 0===e)return;const t=e instanceof Response?e.headers.getSetCookie():e.setCookie;if(void 0!==t){const e=`${this.config.netaceaCookieName}=`;for(const i of t)if(i.startsWith(e))return await this.readCookie(this.config.netaceaCookieName,i)}}async getNetaceaCookieFromRequest(e){const t=function(e,t,i=""){return e.get(t)??i}(e.headers,"cookie");return await this.readCookie(this.config.netaceaCookieName,t)??""}async check(e,t){if(void 0===this.config.secretKey)throw new Error("Secret key is required to mitigate");if([qt.NEW_SESSION,qt.RENEW_SESSION].includes(e.sessionDetails.sessionCookieStatus)){const i=e.sessionDetails.userId,a=await this.makeMitigateAPICall(e,t,!1,null),{responseView:o}=a,s=o.getProtectorCodes(),{match:n,mitigate:r,captcha:c}=s,u=[await this.createMitata(e.clientIp,i,n,r,c,a.mitataMaxAge,void 0,hi(e))],d={match:n,mitigate:r,captcha:c},h=ei(this.config.mitigationType,d,!1),p={body:a.body,apiCallStatus:a.status,apiCallLatency:a.latency,signatureStatus:o.signatureStatus,setCookie:u,sessionStatus:h.sessionStatus,mitigation:h.mitigation,mitigated:[I.block,I.captcha].includes(h.mitigation),redirect:"5"===r?o.getMonetisationRedirect(e.url.pathname,e.url.search):void 0,protectorCheckCodes:h.parts,captchaPageContentType:t};return this.config.mitigationType!==exports.NetaceaMitigationType.INJECT&&h.mitigation!==I.flag||(p.injectHeaders=ti(h.parts,a.eventId)),p}{const i=e.sessionDetails.sessionCookieDetails?.protectorCheckCodes,a={match:i?.match??"0",mitigate:i?.mitigate??"0",captcha:i?.captcha??"0"},o=ei(this.config.mitigationType,a,!1),s={body:void 0,apiCallStatus:void 0,apiCallLatency:void 0,setCookie:[],sessionStatus:o.sessionStatus,mitigation:o.mitigation,mitigated:[I.block,I.captcha].includes(o.mitigation),redirect:void 0,protectorCheckCodes:o.parts,captchaPageContentType:t};return this.config.mitigationType!==exports.NetaceaMitigationType.INJECT&&o.mitigation!==I.flag||(s.injectHeaders=ti(o.parts)),s}}async createMitata(e,t,i,a,o,s=86400,n=void 0,r=V.NetaceaCookieV3IssueReason.NO_SESSION){const c=["1","3","5","a","c","e"].includes(o)||"3"===a||"5"===a?-60:this.config.mitataCookieExpirySeconds,u=void 0!==n?n-Math.floor(Date.now()/1e3):c,d=await this.cookieFactory.createCookieValue({clientIP:e,userId:t,match:i,mitigate:a,captcha:o,gracePeriod:u,cookieId:"",issueReason:r});return m.cookie.netaceaSession.createNetaceaSetCookieString({cookieName:this.config.netaceaCookieName,cookieValue:d,otherAttributes:this.config.netaceaCookieAttributes})}async processCaptcha(e,t){const{status:i,match:a,mitigate:o,captcha:s,body:n,setCookie:r,latency:c}=await this.makeCaptchaAPICall(e,t),u={match:a,mitigate:o,captcha:s},d=ei(this.config.mitigationType,u,!0);return{body:n,apiCallStatus:i,apiCallLatency:c,setCookie:r,sessionStatus:d.sessionStatus,mitigation:d.mitigation,mitigated:[I.block,I.captcha].includes(d.mitigation),redirect:void 0,protectorCheckCodes:{match:d.parts.match.toString(),mitigate:d.parts.mitigate.toString(),captcha:d.parts.captcha.toString()}}}async getMitataCaptchaFromResponseView(e){const t={[v]:e.readHeader(v)?.[0],[k]:String(e.captchaCookieMaxAge)};return await this.getMitataCaptchaFromHeaders(t)}async getMitataCaptchaFromHeaders(e){let t=e[v];const i=parseInt(e[k]??"");if(void 0!==t)return void 0!==this.config.cookieEncryptionKey&&this.config.encryptedCookies.includes(this.config.netaceaCaptchaCookieName)&&(t=await jt.encrypt(t,this.config.cookieEncryptionKey,"A256GCM")),m.cookie.netaceaSession.createNetaceaCaptchaSetCookieString({cookieName:this.config.netaceaCaptchaCookieName,cookieValue:t,maxAgeAttribute:String(i),otherAttributes:this.config.netaceaCaptchaCookieAttributes})}parseCaptchaAPICallBody(e,t){let i;if(null!=e)if("string"==typeof e){const a=e.trim();if(a.length>0)if(t.includes("application/json"))try{JSON.parse(a),i=a}catch(e){console.warn("Invalid JSON in captcha data, attempting to serialize:",e),i=JSON.stringify({data:a})}else i=e}else if(e instanceof ReadableStream)i=e;else if(t.includes("application/json"))try{i=JSON.stringify(e)}catch(t){console.warn("Failed to stringify captcha object, wrapping generic container"),i=JSON.stringify({data:e})}else try{i=JSON.stringify(e)}catch{i=String(e)}return i}async makeCaptchaAPICall(e,t){const i={"X-Netacea-API-Key":this.config.apiKey,"X-Netacea-Client-IP":e.clientIp,"user-agent":e.userAgent,"Content-Type":e.contentType??"application/x-www-form-urlencoded; charset=UTF-8"},a=e.sessionDetails.userId;e.sessionDetails.sessionCookieStatus!==qt.NEW_SESSION&&(i["X-Netacea-UserId"]=a),void 0!==this.config.captchaSiteKey&&void 0!==this.config.captchaSecretKey&&(i["X-Netacea-Captcha-Site-Key"]=this.config.captchaSiteKey,i["X-Netacea-Captcha-Secret-Key"]=this.config.captchaSecretKey),i["X-Netacea-Request-Id"]=e.requestId;const o=new URLSearchParams;o.append("headerFP",e.fingerprints.headerFingerprint),o.append("netaceaHeaders","request-id");const s=e.contentType??"application/x-www-form-urlencoded; charset=UTF-8",n=this.parseCaptchaAPICallBody(t,s),r=Date.now(),c=await this.makeRequest({host:this.config.mitigationServiceUrl,path:`/AtaVerifyCaptcha?${o.toString()}`,headers:i,method:"POST",body:n,timeout:this.config.mitigationServiceTimeoutMs}),u=Date.now()-r;if(200!==c.status)throw new Qt(c,u);const d=new V.ProtectorApiResponseView(new V.ResponseView(c.fetchResponse)),{match:h,mitigate:p,captcha:l}=d.getProtectorCodes(),g=d.sessionCookieMaxAge,f=e.sessionDetails.userId,y=await this.getMitataCaptchaFromHeaders(c.headers),C=[await this.createMitata(e.clientIp,f,h,p,l,g,void 0,hi(e)),y].filter((e=>void 0!==e)),m=d.eventId,S="5"===p?d.getMonetisationRedirect(e.url.pathname,e.url.search):void 0;return{status:c.status,match:h,mitigate:p,captcha:l,setCookie:C,body:c.body,eventId:m,mitataMaxAge:g,latency:u,redirect:S}}async makeMitigateAPICall(e,t,i,a){const o=e.sessionDetails.sessionCookieStatus===qt.NEW_SESSION,s={accept:t,base64UserAgent:void 0,captchaCookie:e.sessionDetails.captchaToken,captchaSecretKey:this.config.captchaSecretKey,captchaSiteKey:this.config.captchaSiteKey,checkAllPostRequests:!0,clientIp:e.clientIp,customerSessionId:void 0,headerFingerprint:e.fingerprints.headerFingerprint,isNewUser:o,requestId:e.requestId,trackingId:i&&null!==a?a:void 0,userAgent:e.userAgent,userId:e.sessionDetails.userId,httpMsgSignature:e.httpMessageSignatures},n=Date.now();let r;try{r=i?await this.protectorApiClient.getChallengePage(s):await this.protectorApiClient.getDecisionResponse(s)}catch(e){if(e instanceof V.APIError)throw new Qt({headers:{},status:e.response.status},Date.now()-n);throw e}const c=Date.now()-n,{match:u,mitigate:d,captcha:h}=r.getProtectorCodes(),p=[await this.createMitata(e.clientIp,e.sessionDetails.userId,u,d,h,r.sessionCookieMaxAge,void 0,hi(e)),await this.getMitataCaptchaFromResponseView(r)].filter((e=>void 0!==e)),l=r.eventId;let g=await r.getBody();if("application/json"===r.readHeader("content-type")?.[0]?.toLowerCase()){if(void 0===this.config.netaceaCaptchaPath)throw new Error("netaceaCaptchaPath and URL must be defined to handle JSON captcha");g=await r.getCaptchaJson(this.config.netaceaCaptchaPath,e.url.host)}return{responseView:r,status:r.status,setCookie:p,body:g,eventId:l,mitataMaxAge:r.sessionCookieMaxAge,latency:c}}async processMitigateRequest(e){if(Ut(e.requestDetails.url,e.requestDetails.method,this.config.netaceaCaptchaPath)){const t=await async function(e){try{const{searchParams:t}=e;return t.get("trackingId")}catch(e){return null}}(e.requestDetails.url);return await this.handleGetCaptchaRequest(e.requestDetails,e.captchaPageContentType,t)}if($t(e.requestDetails.url,e.requestDetails.method,this.config.netaceaCaptchaVerificationPath)){const t=await e.getBodyFn()??"";return await this.processCaptcha(e.requestDetails,t)}return await this.check(e.requestDetails,e.captchaPageContentType)}async setIngestOnlyMitataCookie(e){return{sessionStatus:"",setCookie:[await this.createMitata("ignored",e.sessionDetails.userId,"0","0","0",86400,void 0,hi(e))]}}async processIngest(e){if(void 0===this.config.secretKey)throw new Error("Secret key is required for ingest");const t=e.sessionDetails.sessionCookieStatus,i=t===qt.NEW_SESSION,a=t===qt.RENEW_SESSION;return i||a?await this.setIngestOnlyMitataCookie(e):{sessionStatus:"",setCookie:[]}}};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netacea/cloudflare",
3
- "version": "6.8.13",
3
+ "version": "6.8.15",
4
4
  "description": "Netacea Cloudflare CDN Integration",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -23,5 +23,5 @@
23
23
  "jose": "^4.15.9",
24
24
  "uuid": "^10.0.0"
25
25
  },
26
- "gitHead": "6f55e5302bae53db7861b06f0146e301c3c60fe7"
26
+ "gitHead": "0e34d53dd4bb95038b1e8bfd9fcf3035163246e5"
27
27
  }