mockforme 4.2.5 → 4.2.6

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.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html><head><meta charset="utf-8"><title>mockforme - The best way to mock your APIs</title><meta name="viewport" content="width=device-width,initial-scale=1"><script defer="defer" src="mockforme.client.cjs.js"></script></head><body></body></html>
1
+ <!doctype html><html><head><meta charset="utf-8"><title>mockforme - The best way to mock your APIs</title><meta name="viewport" content="width=device-width,initial-scale=1"><script defer="defer" src="mockforme.client.umd.js"></script></head><body></body></html>
@@ -1 +1 @@
1
- (()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{mockforme:()=>L});const r=()=>"undefined"!=typeof process&&null!=process.versions?.node,o=e=>{try{return e?e.toLowerCase():e}catch(e){return console.log(e),null}},n=(e,t)=>{const r=e.split("/"),o=t.split("/");if(r.length!==o.length)return!1;for(let e=0;e<r.length;e++){const t=r[e];if(t!==o[e]&&":any"!==t)return!1}return!0};let s=[];function i(e){s=e}function a(){return s}function c(e,t="get"){for(const r of s)if(o(r.apiMethod)===o(t)&&(r.apiEndpoint===e||n(r.apiEndpoint,e))){const t={url:e,method:r.apiMethod,_ack:r._ack||null};return r._ri_&&(t._ri_=r._ri_),t}return null}const u="CHROME_EXTENSION",d="mfmver",h="mockforme",l="4.2.5",f="https://api.mockforme.com",m=`${f}/mockforme`,p=`${f}/gateway/3f4eae522b`;let _=null,y=null,w=null,g=[];function b({_o:e,mk:t,_mck:r,_rules:o}){_=e,y=t,w=r,g=o}function v(){return g}function E(){return`${m}/${_}/${y}`}function x(){return w}const k=e=>{try{return new URL(e,window.location.origin).toString()}catch{return e}};function R({url:e,method:t}){try{const t=v();if(!Array.isArray(t)||0===t.length)return null;const r=globalThis.location?.origin||"http://localhost";for(const o of t){const t=o.rule?.URL;if(!t)continue;const{condition:n}=t;if(!n)continue;let s="";switch(t.type){case"URL":{let t;try{t=new URL(e,r),s=t.pathname}catch{s=e}break}case"QUERY":{let t;try{t=new URL(e,r)}catch{t=null}t&&(s=t.searchParams.get(n.key)||"");break}case"BODY":case"HEADERS":s="";break;default:continue}let i=!1;switch(n.operator){case"contains":i=s.includes(n.value);break;case"equal":case"equals":i=s===n.value;break;case"regexp":try{let e=n.value;if(e.startsWith("/")&&e.lastIndexOf("/")>0){const t=e.lastIndexOf("/"),r=e.slice(1,t),o=e.slice(t+1);i=new RegExp(r,o).test(s)}else i=new RegExp(e).test(s)}catch{i=!1}}if(i){const e=n.activeAction;return{action:e,config:n.actions?.[e]||{}}}}return null}catch(e){return console.error("[mockforme] checkIfRulesToBeApplied error",e),null}}function T(e,t){!function(e,t){const r=window.fetch;window.fetch=function(o,n={}){const s="string"==typeof o?o:o.url;try{const i=new URL(s,window.location.origin),{pathname:a,search:f}=i;let m="get";n&&n.method?m=n.method:o instanceof Request&&o.method&&(m=o.method),m=m.toLowerCase();const p=R({url:s,method:m});if(t!==u&&p){if("delay"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(o,n))}),1e3*p.config.value)}));if("delay_and_redirect"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(p.config.redirectUrl,n))}),1e3*p.config.value)}));if("delay_and_timeout"===p.action){if(0===p.config.value){const e=new AbortController,t=r(o,{...n,signal:e.signal});return e.abort(),t.catch((()=>Promise.reject(new Error("Fetch aborted by rules"))))}return new Promise(((e,t)=>{setTimeout((()=>{t(new Error("Fetch timed out by rules"))}),1e3*p.config.value)}))}}const _=c(a,m);if(!_&&!p)return r(o,n);let y=s;p||(y=`${E()}${_.url}${f}`);let w={};if(!p){w={[h]:e,[d]:l,"x-mfm-adaptor":t};const r=x();r&&_._ack&&(w["x-mfm-key"]=`${r}-${_._ack}`),_?._ri_&&(w._ri_=_._ri_)}const g=o instanceof Request?o.headers:n.headers,b=new Headers(g||{});Object.entries(w).forEach((([e,t])=>{b.set(e,t)}));let v=n.body;if(!v&&o instanceof Request){const e=o.clone();"GET"!==e.method&&"HEAD"!==e.method&&(v=e.text())}const T={method:m,headers:b,credentials:n.credentials||"same-origin",mode:n.mode||"cors"},O=e=>(e&&(T.body=e),t===u?(({actualUrl:e,url:t,method:r,headers:o,body:n,credentials:s,mode:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);return new Promise(((t,d)=>{window.addEventListener("message",(function e(r){if(r.source!==window)return;const o=r.data;if("INTERCEPTED_RESPONSE"===o?.type&&o?.requestId===c){if(window.removeEventListener("message",e),o?.response?.error)return d(new Error(o.response.message));const{status:r,headers:n,body:s}=o.response;t(new Response(s,{status:r,headers:n}))}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:s,mode:i,rule:a}},"*")}))})({actualUrl:s,url:y,method:m,headers:Object.fromEntries(b.entries()),body:e,credentials:T.credentials,mode:T.mode,rule:p}):fetch(y,T).then((e=>{const t=e.clone();return(t.headers.get("content-type")||"").includes("application/json")?t.json().then((r=>new Response(JSON.stringify(r),{status:e.status,headers:t.headers}))):t.text().then((r=>new Response(r,{status:e.status,headers:t.headers})))})).catch((e=>(console.warn("mockforme fetch interceptor error",e),r(o,n)))));return v instanceof Promise?v.then((e=>O(e))):O(v)}catch(e){return console.warn("mockforme fetch interceptor error",e),r(o,n)}}}(e,t),function(e,t){const r=window.XMLHttpRequest;window.XMLHttpRequest=class{constructor(){this._xhr=new r,this._headers={},this._method=null,this._url=null,this._body=null,this._setupEventHandlers()}_setupEventHandlers(){const e=["onload","onerror","onabort","ontimeout","onreadystatechange"];for(const t of e)Object.defineProperty(this,t,{get:()=>this._xhr[t],set:e=>{this._xhr[t]=e}})}open(e,t,r=!0,o=null,n=null){return this._method=e.toUpperCase(),this._url=new URL(t,window.location.href).toString(),this._xhr._mockOriginalUrl=this._url,this._xhr._mockMethod=this._method,this._xhr.open(e,t,r,o,n)}setRequestHeader(e,t){return this._headers[e]=t,this._xhr.setRequestHeader(e,t)}send(o){this._body=o;try{const n=new URL(this._url),{pathname:s,search:i}=n,a=R({url:this._url,method:this._method});if(t!==u&&a){if("delay"===a.action)return setTimeout((()=>this._xhr.send(o)),1e3*a.config.value);if("delay_and_redirect"===a.action)return setTimeout((()=>{this._xhr.open(this._method,a.config.redirectUrl,!0),this._xhr.send(o)}),1e3*a.config.value);if("delay_and_timeout"===a.action)return 0===a.config.value?(this._xhr.open(this._method,this._url,!0),this._xhr.send(o),this._xhr.abort(),void("function"==typeof this.onerror&&this.onerror(new Error("XHR aborted by rules")))):setTimeout((()=>{this._xhr.abort(),"function"==typeof this.onerror&&this.onerror(new Error("XHR timed out by rules"))}),1e3*a.config.value)}const f=c(s,this._method);if(!f&&!a)return this._xhr.send(o);let m=this._url;a||(m=`${E()}${f.url}${i}`);let p={};if(!a){p={[h]:e,[d]:l,"x-mfm-adaptor":t};const r=x();r&&f._ack&&(p["x-mfm-key"]=`${r}-${f._ack}`),f?._ri_&&(p._ri_=f._ri_)}const _={...this._headers,...p};if(t===u)(({actualUrl:e,url:t,method:r,headers:o,body:n,onSuccess:s,onError:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);window.addEventListener("message",(function e(t){if(t.source!==window)return;const r=t.data;if("INTERCEPTED_RESPONSE"===r.type&&r.requestId===c){if(window.removeEventListener("message",e),r.response?.error)return i?.(r.response.message);const{body:t,status:o,headers:n}=r.response;s?.({body:t,status:o,headers:n})}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:"same-origin",mode:"cors",rule:a}},"*")})({actualUrl:this._url,url:m,method:this._method,headers:_,body:this._body,rule:a,onSuccess:({body:e,status:t})=>{Object.defineProperty(this,"responseText",{value:e}),Object.defineProperty(this,"status",{value:t}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},onError:e=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.(new Error(e.message||"XHR mock error"))}});else{const e=new r;e.open(this._method,m,!0);for(const t in _)e.setRequestHeader(t,_[t]);e.onload=()=>{Object.defineProperty(this,"responseText",{value:e.responseText}),Object.defineProperty(this,"status",{value:e.status}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},e.onerror=()=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.()},e.send(this._body)}}catch(e){return console.error("[mockforme][XHR] interception error",e),this._xhr.send(o)}}addEventListener(...e){return this._xhr.addEventListener(...e)}removeEventListener(...e){return this._xhr.removeEventListener(...e)}dispatchEvent(...e){return this._xhr.dispatchEvent(...e)}abort(){return this._xhr.abort()}getAllResponseHeaders(){return this._xhr.getAllResponseHeaders()}getResponseHeader(e){return this._xhr.getResponseHeader(e)}overrideMimeType(e){return this._xhr.overrideMimeType(e)}get readyState(){return this._xhr.readyState}get responseText(){return this._xhr.responseText}get status(){return this._xhr.status}get response(){return this._xhr.response}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get withCredentials(){return this._xhr.withCredentials}set withCredentials(e){this._xhr.withCredentials=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}get upload(){return this._xhr.upload}}}(e,t)}const O=function(e,t,o){const n=r();var s;function i(){if(4==s.readyState)if(s.status.toString().match(/^20[0-9]$/)){var e=function(){var e=s.getResponseHeader("Content-Type"),t=s.responseText;if(e){var r=e.split(";");try{return"application/json"===r[0]?JSON.parse(t):t}catch(e){throw"Unable to convert response header"}}}();t.call(this,e,s)}else o.call(this,s.responseText,s)}function a(e,t){var r=[];for(var o in e)if(e.hasOwnProperty(o)){var n=t?t+"["+o+"]":o,s=e[o];r.push("object"==typeof s?a(s,n):encodeURIComponent(n)+"="+encodeURIComponent(s))}return r.join("&")}return n||(window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"))),{request:function(){if(!n){if(window.XMLHttpRequest)s.onload=i;else{if(!window.ActiveXObject)throw"unable to process ajax";s.onreadystatechange=i}var t=a(e.params);if("get"==e.method.toLowerCase()&&"object"==typeof e.params){if(-1==e.url.indexOf("?"))e.url+="?";else{var r=e.url.split("?");r[1]&&r[1].split("=")[1]&&(e.url+="&")}e.url+=t}e.hasOwnProperty("async")||(e.async=!0),s.open(e.method,e.url,e.async),e.headers&&function(e){for(let t in e)s.setRequestHeader(t,e[t])}(e.headers),s.send(t)}}}};function P({di:e,iv:t},r){var o;const n=function(e,t){const r=t.length;return e.split("").map(((e,o)=>String.fromCharCode(e.charCodeAt(0)^t.charCodeAt(o%r)))).join("")}((o=e,"undefined"!=typeof Buffer?Buffer.from(o,"base64").toString("utf8"):decodeURIComponent(escape(atob(o)))),r+t);return JSON.parse(n)}const S=(e,t=null,o="JAVASCRIPT")=>{if(r())return;t||={mappings:[],_o:null,mk:null,_mck:null,_rules:[]};const{mappings:n=[],_o:s,mk:u,_mck:f,_rules:m=[]}=t;return i(n),b({_o:s,mk:u,_mck:f,_rules:m}),{run:(t,r=()=>{})=>{T(e,o),s&&u?t(a(),{_o:s,mk:u,_mck:f,_rules:m}):function(e,r,o,n){O({method:"get",url:p,async:!1,headers:{[h]:e,[d]:l,"x-mfm-adaptor":r}},(e=>{if(e){const{di:n,iv:s,_o:a,_mck:c,mk:u,r:d}=e,h=P({di:n,iv:s},a);b({_o:a,mk:u,_mck:c,_rules:d}),h&&(i(h),r=h,o={_o:a,mk:u,_mck:c,_rules:d},t?.(r,o))}var r,o}),(e=>{console.log("Error in loading mocked apis"),n(e)})).request()}(e,o,0,r)},checkIfApiToBeMocked:c,getMappings:a,doFetchMappings:(t,r)=>{!function(e,t,r,o){fetch(p,{method:"GET",headers:{[h]:e,[d]:l,"x-mfm-adaptor":t}}).then((e=>{if(!e.ok)throw new Error(`HTTP error ${e.status}`);return e.json()})).then((e=>{if(e){const{di:t,iv:o,_o:n,_mck:s,mk:a,r:c}=e,u=P({di:t,iv:o},n);b({_o:n,mk:a,_mck:s,_rules:c}),u&&(i(u),r(u,{_o:n,mk:a,_mck:s,_rules:c}))}})).catch((e=>{console.error("Error in loading mocked APIs:",e),o(e)}))}(e,o,((e,r)=>{t?.(e,r)}),r)}}},j=r();j||(globalThis.mockforme=S);let H=S;j&&(H=e=>({run:()=>{}}));const L=H;module.exports=t})();
1
+ (()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{mockforme:()=>C});const r=()=>"undefined"!=typeof process&&null!=process.versions?.node,o=e=>{try{return e?e.toLowerCase():e}catch(e){return console.log(e),null}},n=(e,t)=>{const r=e.split("/"),o=t.split("/");if(r.length!==o.length)return!1;for(let e=0;e<r.length;e++){const t=r[e];if(t!==o[e]&&":any"!==t)return!1}return!0};let s=[];function i(e){s=e}function a(){return s}function c(e,t="get"){for(const r of s)if(o(r.apiMethod)===o(t)&&(r.apiEndpoint===e||n(r.apiEndpoint,e))){const t={url:e,method:r.apiMethod,_ack:r._ack||null};return r._ri_&&(t._ri_=r._ri_),t}return null}const u="CHROME_EXTENSION",d="mfmver",l="mockforme",h="4.2.5",f="https://api.mockforme.com",m=`${f}/mockforme`,p=`${f}/gateway/3f4eae522b`;let _=null,y=null,w=null,g=[];function b({_o:e,mk:t,_mck:r,_rules:o}){_=e,y=t,w=r,g=o}function v(){return g}function E(){return`${m}/${_}/${y}`}function x(){return w}const k=e=>{try{return new URL(e,window.location.origin).toString()}catch{return e}};function R({url:e,method:t}){try{const t=v();if(!Array.isArray(t)||0===t.length)return null;const r=globalThis.location?.origin||"http://localhost";for(const o of t){const t=o.rule?.URL;if(!t)continue;const{condition:n}=t;if(!n)continue;let s="";switch(t.type){case"URL":{let t;try{t=new URL(e,r),s=t.pathname}catch{s=e}break}case"QUERY":{let t;try{t=new URL(e,r)}catch{t=null}t&&(s=t.searchParams.get(n.key)||"");break}case"BODY":case"HEADERS":s="";break;default:continue}let i=!1;switch(n.operator){case"contains":i=s.includes(n.value);break;case"equal":case"equals":i=s===n.value;break;case"regexp":try{let e=n.value;if(e.startsWith("/")&&e.lastIndexOf("/")>0){const t=e.lastIndexOf("/"),r=e.slice(1,t),o=e.slice(t+1);i=new RegExp(r,o).test(s)}else i=new RegExp(e).test(s)}catch{i=!1}}if(i){const e=n.activeAction;return{action:e,config:n.actions?.[e]||{}}}}return null}catch(e){return console.error("[mockforme] checkIfRulesToBeApplied error",e),null}}function T(e,t){!function(e,t){const r=window.fetch;window.fetch=function(o,n={}){const s="string"==typeof o?o:o.url;try{const i=new URL(s,window.location.origin),{pathname:a,search:f}=i;let m="get";n&&n.method?m=n.method:o instanceof Request&&o.method&&(m=o.method),m=m.toLowerCase();const p=R({url:s,method:m});if(t!==u&&p){if("delay"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(o,n))}),1e3*p.config.value)}));if("delay_and_redirect"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(p.config.redirectUrl,n))}),1e3*p.config.value)}));if("delay_and_timeout"===p.action){if(0===p.config.value){const e=new AbortController,t=r(o,{...n,signal:e.signal});return e.abort(),t.catch((()=>Promise.reject(new Error("Fetch aborted by rules"))))}return new Promise(((e,t)=>{setTimeout((()=>{t(new Error("Fetch timed out by rules"))}),1e3*p.config.value)}))}}const _=c(a,m);if(!_&&!p)return r(o,n);let y=s;p||(y=`${E()}${_.url}${f}`);let w={};if(!p){w={[l]:e,[d]:h,"x-mfm-adaptor":t};const r=x();r&&_._ack&&(w["x-mfm-key"]=`${r}-${_._ack}`),_?._ri_&&(w._ri_=_._ri_)}const g=o instanceof Request?o.headers:n.headers,b=new Headers(g||{});Object.entries(w).forEach((([e,t])=>{b.set(e,t)}));let v=n.body;if(!v&&o instanceof Request){const e=o.clone();"GET"!==e.method&&"HEAD"!==e.method&&(v=e.text())}let T={method:m,headers:b,credentials:"include",mode:"cors"};p&&(T.credentials=o instanceof Request&&o.credentials||n.credentials||"same-origin",T.mode=o instanceof Request&&o.mode||n.mode||"cors");const O=e=>(e&&(T.body=e),t===u?(({actualUrl:e,url:t,method:r,headers:o,body:n,credentials:s,mode:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);return new Promise(((t,d)=>{window.addEventListener("message",(function e(r){if(r.source!==window)return;const o=r.data;if("INTERCEPTED_RESPONSE"===o?.type&&o?.requestId===c){if(window.removeEventListener("message",e),o?.response?.error)return d(new Error(o.response.message));const{status:r,headers:n,body:s}=o.response;t(new Response(s,{status:r,headers:n}))}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:s,mode:i,rule:a}},"*")}))})({actualUrl:s,url:y,method:m,headers:Object.fromEntries(b.entries()),body:e,credentials:T.credentials,mode:T.mode,rule:p}):fetch(y,T).then((e=>{const t=e.clone();return(t.headers.get("content-type")||"").includes("application/json")?t.json().then((r=>new Response(JSON.stringify(r),{status:e.status,headers:t.headers}))):t.text().then((r=>new Response(r,{status:e.status,headers:t.headers})))})).catch((e=>(console.warn("mockforme fetch interceptor error",e),r(o,n)))));return v instanceof Promise?v.then((e=>O(e))):O(v)}catch(e){return console.warn("mockforme fetch interceptor error",e),r(o,n)}}}(e,t),function(e,t){const r=window.XMLHttpRequest;window.XMLHttpRequest=class{constructor(){this._xhr=new r,this._headers={},this._method=null,this._url=null,this._body=null,this._setupEventHandlers()}_setupEventHandlers(){const e=["onload","onerror","onabort","ontimeout","onreadystatechange"];for(const t of e)Object.defineProperty(this,t,{get:()=>this._xhr[t],set:e=>{this._xhr[t]=e}})}open(e,t,r=!0,o=null,n=null){return this._method=e.toUpperCase(),this._url=new URL(t,window.location.href).toString(),this._xhr._mockOriginalUrl=this._url,this._xhr._mockMethod=this._method,this._xhr.open(e,t,r,o,n)}setRequestHeader(e,t){return this._headers[e]=t,this._xhr.setRequestHeader(e,t)}send(o){this._body=o;try{const n=new URL(this._url),{pathname:s,search:i}=n,a=R({url:this._url,method:this._method});if(t!==u&&a){if("delay"===a.action)return setTimeout((()=>this._xhr.send(o)),1e3*a.config.value);if("delay_and_redirect"===a.action)return setTimeout((()=>{this._xhr.open(this._method,a.config.redirectUrl,!0),this._xhr.send(o)}),1e3*a.config.value);if("delay_and_timeout"===a.action)return 0===a.config.value?(this._xhr.open(this._method,this._url,!0),this._xhr.send(o),this._xhr.abort(),void("function"==typeof this.onerror&&this.onerror(new Error("XHR aborted by rules")))):setTimeout((()=>{this._xhr.abort(),"function"==typeof this.onerror&&this.onerror(new Error("XHR timed out by rules"))}),1e3*a.config.value)}const f=c(s,this._method);if(!f&&!a)return this._xhr.send(o);let m=this._url;a||(m=`${E()}${f.url}${i}`);let p={};if(!a){p={[l]:e,[d]:h,"x-mfm-adaptor":t};const r=x();r&&f._ack&&(p["x-mfm-key"]=`${r}-${f._ack}`),f?._ri_&&(p._ri_=f._ri_)}const _={...this._headers,...p};if(t===u)(({actualUrl:e,url:t,method:r,headers:o,body:n,onSuccess:s,onError:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);window.addEventListener("message",(function e(t){if(t.source!==window)return;const r=t.data;if("INTERCEPTED_RESPONSE"===r.type&&r.requestId===c){if(window.removeEventListener("message",e),r.response?.error)return i?.(r.response.message);const{body:t,status:o,headers:n}=r.response;s?.({body:t,status:o,headers:n})}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:"same-origin",mode:"cors",rule:a}},"*")})({actualUrl:this._url,url:m,method:this._method,headers:_,body:this._body,rule:a,onSuccess:({body:e,status:t})=>{Object.defineProperty(this,"responseText",{value:e}),Object.defineProperty(this,"status",{value:t}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},onError:e=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.(new Error(e.message||"XHR mock error"))}});else{const e=new r;e.open(this._method,m,!0);for(const t in _)e.setRequestHeader(t,_[t]);e.withCredentials=this.withCredentials,e.onload=()=>{Object.defineProperty(this,"responseText",{value:e.responseText}),Object.defineProperty(this,"status",{value:e.status}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},e.onerror=()=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.()},e.send(this._body)}}catch(e){return console.error("[mockforme][XHR] interception error",e),this._xhr.send(o)}}addEventListener(...e){return this._xhr.addEventListener(...e)}removeEventListener(...e){return this._xhr.removeEventListener(...e)}dispatchEvent(...e){return this._xhr.dispatchEvent(...e)}abort(){return this._xhr.abort()}getAllResponseHeaders(){return this._xhr.getAllResponseHeaders()}getResponseHeader(e){return this._xhr.getResponseHeader(e)}overrideMimeType(e){return this._xhr.overrideMimeType(e)}get readyState(){return this._xhr.readyState}get responseText(){return this._xhr.responseText}get status(){return this._xhr.status}get response(){return this._xhr.response}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get withCredentials(){return this._xhr.withCredentials}set withCredentials(e){this._xhr.withCredentials=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}get upload(){return this._xhr.upload}}}(e,t)}const O=function(e,t,o){const n=r();var s;function i(){if(4==s.readyState)if(s.status.toString().match(/^20[0-9]$/)){var e=function(){var e=s.getResponseHeader("Content-Type"),t=s.responseText;if(e){var r=e.split(";");try{return"application/json"===r[0]?JSON.parse(t):t}catch(e){throw"Unable to convert response header"}}}();t.call(this,e,s)}else o.call(this,s.responseText,s)}function a(e,t){var r=[];for(var o in e)if(e.hasOwnProperty(o)){var n=t?t+"["+o+"]":o,s=e[o];r.push("object"==typeof s?a(s,n):encodeURIComponent(n)+"="+encodeURIComponent(s))}return r.join("&")}return n||(window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"))),{request:function(){if(!n){if(window.XMLHttpRequest)s.onload=i;else{if(!window.ActiveXObject)throw"unable to process ajax";s.onreadystatechange=i}var t=a(e.params);if("get"==e.method.toLowerCase()&&"object"==typeof e.params){if(-1==e.url.indexOf("?"))e.url+="?";else{var r=e.url.split("?");r[1]&&r[1].split("=")[1]&&(e.url+="&")}e.url+=t}e.hasOwnProperty("async")||(e.async=!0),s.open(e.method,e.url,e.async),e.headers&&function(e){for(let t in e)s.setRequestHeader(t,e[t])}(e.headers),s.send(t)}}}};function P({di:e,iv:t},r){var o;const n=function(e,t){const r=t.length;return e.split("").map(((e,o)=>String.fromCharCode(e.charCodeAt(0)^t.charCodeAt(o%r)))).join("")}((o=e,"undefined"!=typeof Buffer?Buffer.from(o,"base64").toString("utf8"):decodeURIComponent(escape(atob(o)))),r+t);return JSON.parse(n)}const S=(e,t=null,o="JAVASCRIPT")=>{if(r())return;t||={mappings:[],_o:null,mk:null,_mck:null,_rules:[]};const{mappings:n=[],_o:s,mk:u,_mck:f,_rules:m=[]}=t;return i(n),b({_o:s,mk:u,_mck:f,_rules:m}),{run:(t,r=()=>{})=>{T(e,o),s&&u?t(a(),{_o:s,mk:u,_mck:f,_rules:m}):function(e,r,o,n){O({method:"get",url:p,async:!1,headers:{[l]:e,[d]:h,"x-mfm-adaptor":r}},(e=>{if(e){const{di:n,iv:s,_o:a,_mck:c,mk:u,r:d}=e,l=P({di:n,iv:s},a);b({_o:a,mk:u,_mck:c,_rules:d}),l&&(i(l),r=l,o={_o:a,mk:u,_mck:c,_rules:d},t?.(r,o))}var r,o}),(e=>{console.log("Error in loading mocked apis"),n(e)})).request()}(e,o,0,r)},checkIfApiToBeMocked:c,getMappings:a,doFetchMappings:(t,r)=>{!function(e,t,r,o){fetch(p,{method:"GET",headers:{[l]:e,[d]:h,"x-mfm-adaptor":t}}).then((e=>{if(!e.ok)throw new Error(`HTTP error ${e.status}`);return e.json()})).then((e=>{if(e){const{di:t,iv:o,_o:n,_mck:s,mk:a,r:c}=e,u=P({di:t,iv:o},n);b({_o:n,mk:a,_mck:s,_rules:c}),u&&(i(u),r(u,{_o:n,mk:a,_mck:s,_rules:c}))}})).catch((e=>{console.error("Error in loading mocked APIs:",e),o(e)}))}(e,o,((e,r)=>{t?.(e,r)}),r)}}},j=r();j||(globalThis.mockforme=S);let H=S;j&&(H=e=>({run:()=>{}}));const C=H;module.exports=t})();
@@ -1 +1 @@
1
- const e=()=>"undefined"!=typeof process&&null!=process.versions?.node,t=e=>{try{return e?e.toLowerCase():e}catch(e){return console.log(e),null}},r=(e,t)=>{const r=e.split("/"),n=t.split("/");if(r.length!==n.length)return!1;for(let e=0;e<r.length;e++){const t=r[e];if(t!==n[e]&&":any"!==t)return!1}return!0};let n=[];function o(e){n=e}function s(){return n}function i(e,o="get"){for(const s of n)if(t(s.apiMethod)===t(o)&&(s.apiEndpoint===e||r(s.apiEndpoint,e))){const t={url:e,method:s.apiMethod,_ack:s._ack||null};return s._ri_&&(t._ri_=s._ri_),t}return null}const a="CHROME_EXTENSION",c="mfmver",u="mockforme",h="4.2.5",d="https://api.mockforme.com",l=`${d}/mockforme`,f=`${d}/gateway/3f4eae522b`;let m=null,p=null,_=null,y=[];function w({_o:e,mk:t,_mck:r,_rules:n}){m=e,p=t,_=r,y=n}function g(){return y}function v(){return`${l}/${m}/${p}`}function E(){return _}const b=e=>{try{return new URL(e,window.location.origin).toString()}catch{return e}};function x({url:e,method:t}){try{const t=g();if(!Array.isArray(t)||0===t.length)return null;const r=globalThis.location?.origin||"http://localhost";for(const n of t){const t=n.rule?.URL;if(!t)continue;const{condition:o}=t;if(!o)continue;let s="";switch(t.type){case"URL":{let t;try{t=new URL(e,r),s=t.pathname}catch{s=e}break}case"QUERY":{let t;try{t=new URL(e,r)}catch{t=null}t&&(s=t.searchParams.get(o.key)||"");break}case"BODY":case"HEADERS":s="";break;default:continue}let i=!1;switch(o.operator){case"contains":i=s.includes(o.value);break;case"equal":case"equals":i=s===o.value;break;case"regexp":try{let e=o.value;if(e.startsWith("/")&&e.lastIndexOf("/")>0){const t=e.lastIndexOf("/"),r=e.slice(1,t),n=e.slice(t+1);i=new RegExp(r,n).test(s)}else i=new RegExp(e).test(s)}catch{i=!1}}if(i){const e=o.activeAction;return{action:e,config:o.actions?.[e]||{}}}}return null}catch(e){return console.error("[mockforme] checkIfRulesToBeApplied error",e),null}}function k(e,t){!function(e,t){const r=window.fetch;window.fetch=function(n,o={}){const s="string"==typeof n?n:n.url;try{const d=new URL(s,window.location.origin),{pathname:l,search:f}=d;let m="get";o&&o.method?m=o.method:n instanceof Request&&n.method&&(m=n.method),m=m.toLowerCase();const p=x({url:s,method:m});if(t!==a&&p){if("delay"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(n,o))}),1e3*p.config.value)}));if("delay_and_redirect"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(p.config.redirectUrl,o))}),1e3*p.config.value)}));if("delay_and_timeout"===p.action){if(0===p.config.value){const e=new AbortController,t=r(n,{...o,signal:e.signal});return e.abort(),t.catch((()=>Promise.reject(new Error("Fetch aborted by rules"))))}return new Promise(((e,t)=>{setTimeout((()=>{t(new Error("Fetch timed out by rules"))}),1e3*p.config.value)}))}}const _=i(l,m);if(!_&&!p)return r(n,o);let y=s;p||(y=`${v()}${_.url}${f}`);let w={};if(!p){w={[u]:e,[c]:h,"x-mfm-adaptor":t};const r=E();r&&_._ack&&(w["x-mfm-key"]=`${r}-${_._ack}`),_?._ri_&&(w._ri_=_._ri_)}const g=n instanceof Request?n.headers:o.headers,k=new Headers(g||{});Object.entries(w).forEach((([e,t])=>{k.set(e,t)}));let R=o.body;if(!R&&n instanceof Request){const e=n.clone();"GET"!==e.method&&"HEAD"!==e.method&&(R=e.text())}const T={method:m,headers:k,credentials:o.credentials||"same-origin",mode:o.mode||"cors"},O=e=>(e&&(T.body=e),t===a?(({actualUrl:e,url:t,method:r,headers:n,body:o,credentials:s,mode:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=b(t);return new Promise(((t,h)=>{window.addEventListener("message",(function e(r){if(r.source!==window)return;const n=r.data;if("INTERCEPTED_RESPONSE"===n?.type&&n?.requestId===c){if(window.removeEventListener("message",e),n?.response?.error)return h(new Error(n.response.message));const{status:r,headers:o,body:s}=n.response;t(new Response(s,{status:r,headers:o}))}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:n,body:o,credentials:s,mode:i,rule:a}},"*")}))})({actualUrl:s,url:y,method:m,headers:Object.fromEntries(k.entries()),body:e,credentials:T.credentials,mode:T.mode,rule:p}):fetch(y,T).then((e=>{const t=e.clone();return(t.headers.get("content-type")||"").includes("application/json")?t.json().then((r=>new Response(JSON.stringify(r),{status:e.status,headers:t.headers}))):t.text().then((r=>new Response(r,{status:e.status,headers:t.headers})))})).catch((e=>(console.warn("mockforme fetch interceptor error",e),r(n,o)))));return R instanceof Promise?R.then((e=>O(e))):O(R)}catch(e){return console.warn("mockforme fetch interceptor error",e),r(n,o)}}}(e,t),function(e,t){const r=window.XMLHttpRequest;window.XMLHttpRequest=class{constructor(){this._xhr=new r,this._headers={},this._method=null,this._url=null,this._body=null,this._setupEventHandlers()}_setupEventHandlers(){const e=["onload","onerror","onabort","ontimeout","onreadystatechange"];for(const t of e)Object.defineProperty(this,t,{get:()=>this._xhr[t],set:e=>{this._xhr[t]=e}})}open(e,t,r=!0,n=null,o=null){return this._method=e.toUpperCase(),this._url=new URL(t,window.location.href).toString(),this._xhr._mockOriginalUrl=this._url,this._xhr._mockMethod=this._method,this._xhr.open(e,t,r,n,o)}setRequestHeader(e,t){return this._headers[e]=t,this._xhr.setRequestHeader(e,t)}send(n){this._body=n;try{const o=new URL(this._url),{pathname:s,search:d}=o,l=x({url:this._url,method:this._method});if(t!==a&&l){if("delay"===l.action)return setTimeout((()=>this._xhr.send(n)),1e3*l.config.value);if("delay_and_redirect"===l.action)return setTimeout((()=>{this._xhr.open(this._method,l.config.redirectUrl,!0),this._xhr.send(n)}),1e3*l.config.value);if("delay_and_timeout"===l.action)return 0===l.config.value?(this._xhr.open(this._method,this._url,!0),this._xhr.send(n),this._xhr.abort(),void("function"==typeof this.onerror&&this.onerror(new Error("XHR aborted by rules")))):setTimeout((()=>{this._xhr.abort(),"function"==typeof this.onerror&&this.onerror(new Error("XHR timed out by rules"))}),1e3*l.config.value)}const f=i(s,this._method);if(!f&&!l)return this._xhr.send(n);let m=this._url;l||(m=`${v()}${f.url}${d}`);let p={};if(!l){p={[u]:e,[c]:h,"x-mfm-adaptor":t};const r=E();r&&f._ack&&(p["x-mfm-key"]=`${r}-${f._ack}`),f?._ri_&&(p._ri_=f._ri_)}const _={...this._headers,...p};if(t===a)(({actualUrl:e,url:t,method:r,headers:n,body:o,onSuccess:s,onError:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=b(t);window.addEventListener("message",(function e(t){if(t.source!==window)return;const r=t.data;if("INTERCEPTED_RESPONSE"===r.type&&r.requestId===c){if(window.removeEventListener("message",e),r.response?.error)return i?.(r.response.message);const{body:t,status:n,headers:o}=r.response;s?.({body:t,status:n,headers:o})}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:n,body:o,credentials:"same-origin",mode:"cors",rule:a}},"*")})({actualUrl:this._url,url:m,method:this._method,headers:_,body:this._body,rule:l,onSuccess:({body:e,status:t})=>{Object.defineProperty(this,"responseText",{value:e}),Object.defineProperty(this,"status",{value:t}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},onError:e=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.(new Error(e.message||"XHR mock error"))}});else{const e=new r;e.open(this._method,m,!0);for(const t in _)e.setRequestHeader(t,_[t]);e.onload=()=>{Object.defineProperty(this,"responseText",{value:e.responseText}),Object.defineProperty(this,"status",{value:e.status}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},e.onerror=()=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.()},e.send(this._body)}}catch(e){return console.error("[mockforme][XHR] interception error",e),this._xhr.send(n)}}addEventListener(...e){return this._xhr.addEventListener(...e)}removeEventListener(...e){return this._xhr.removeEventListener(...e)}dispatchEvent(...e){return this._xhr.dispatchEvent(...e)}abort(){return this._xhr.abort()}getAllResponseHeaders(){return this._xhr.getAllResponseHeaders()}getResponseHeader(e){return this._xhr.getResponseHeader(e)}overrideMimeType(e){return this._xhr.overrideMimeType(e)}get readyState(){return this._xhr.readyState}get responseText(){return this._xhr.responseText}get status(){return this._xhr.status}get response(){return this._xhr.response}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get withCredentials(){return this._xhr.withCredentials}set withCredentials(e){this._xhr.withCredentials=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}get upload(){return this._xhr.upload}}}(e,t)}const R=function(t,r,n){const o=e();var s;function i(){if(4==s.readyState)if(s.status.toString().match(/^20[0-9]$/)){var e=function(){var e=s.getResponseHeader("Content-Type"),t=s.responseText;if(e){var r=e.split(";");try{return"application/json"===r[0]?JSON.parse(t):t}catch(e){throw"Unable to convert response header"}}}();r.call(this,e,s)}else n.call(this,s.responseText,s)}function a(e,t){var r=[];for(var n in e)if(e.hasOwnProperty(n)){var o=t?t+"["+n+"]":n,s=e[n];r.push("object"==typeof s?a(s,o):encodeURIComponent(o)+"="+encodeURIComponent(s))}return r.join("&")}return o||(window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"))),{request:function(){if(!o){if(window.XMLHttpRequest)s.onload=i;else{if(!window.ActiveXObject)throw"unable to process ajax";s.onreadystatechange=i}var e=a(t.params);if("get"==t.method.toLowerCase()&&"object"==typeof t.params){if(-1==t.url.indexOf("?"))t.url+="?";else{var r=t.url.split("?");r[1]&&r[1].split("=")[1]&&(t.url+="&")}t.url+=e}t.hasOwnProperty("async")||(t.async=!0),s.open(t.method,t.url,t.async),t.headers&&function(e){for(let t in e)s.setRequestHeader(t,e[t])}(t.headers),s.send(e)}}}};function T({di:e,iv:t},r){var n;const o=function(e,t){const r=t.length;return e.split("").map(((e,n)=>String.fromCharCode(e.charCodeAt(0)^t.charCodeAt(n%r)))).join("")}((n=e,"undefined"!=typeof Buffer?Buffer.from(n,"base64").toString("utf8"):decodeURIComponent(escape(atob(n)))),r+t);return JSON.parse(o)}const O=(t,r=null,n="JAVASCRIPT")=>{if(e())return;r||={mappings:[],_o:null,mk:null,_mck:null,_rules:[]};const{mappings:a=[],_o:d,mk:l,_mck:m,_rules:p=[]}=r;return o(a),w({_o:d,mk:l,_mck:m,_rules:p}),{run:(e,r=()=>{})=>{k(t,n),d&&l?e(s(),{_o:d,mk:l,_mck:m,_rules:p}):function(t,r,n,s){R({method:"get",url:f,async:!1,headers:{[u]:t,[c]:h,"x-mfm-adaptor":r}},(t=>{if(t){const{di:s,iv:i,_o:a,_mck:c,mk:u,r:h}=t,d=T({di:s,iv:i},a);w({_o:a,mk:u,_mck:c,_rules:h}),d&&(o(d),r=d,n={_o:a,mk:u,_mck:c,_rules:h},e?.(r,n))}var r,n}),(e=>{console.log("Error in loading mocked apis"),s(e)})).request()}(t,n,0,r)},checkIfApiToBeMocked:i,getMappings:s,doFetchMappings:(e,r)=>{!function(e,t,r,n){fetch(f,{method:"GET",headers:{[u]:e,[c]:h,"x-mfm-adaptor":t}}).then((e=>{if(!e.ok)throw new Error(`HTTP error ${e.status}`);return e.json()})).then((e=>{if(e){const{di:t,iv:n,_o:s,_mck:i,mk:a,r:c}=e,u=T({di:t,iv:n},s);w({_o:s,mk:a,_mck:i,_rules:c}),u&&(o(u),r(u,{_o:s,mk:a,_mck:i,_rules:c}))}})).catch((e=>{console.error("Error in loading mocked APIs:",e),n(e)}))}(t,n,((t,r)=>{e?.(t,r)}),r)}}},P=e();P||(globalThis.mockforme=O);let H=O;P&&(H=e=>({run:()=>{}}));const S=H;export{S as mockforme};
1
+ const e=()=>"undefined"!=typeof process&&null!=process.versions?.node,t=e=>{try{return e?e.toLowerCase():e}catch(e){return console.log(e),null}},r=(e,t)=>{const r=e.split("/"),n=t.split("/");if(r.length!==n.length)return!1;for(let e=0;e<r.length;e++){const t=r[e];if(t!==n[e]&&":any"!==t)return!1}return!0};let n=[];function o(e){n=e}function s(){return n}function i(e,o="get"){for(const s of n)if(t(s.apiMethod)===t(o)&&(s.apiEndpoint===e||r(s.apiEndpoint,e))){const t={url:e,method:s.apiMethod,_ack:s._ack||null};return s._ri_&&(t._ri_=s._ri_),t}return null}const a="CHROME_EXTENSION",c="mfmver",u="mockforme",h="4.2.5",d="https://api.mockforme.com",l=`${d}/mockforme`,f=`${d}/gateway/3f4eae522b`;let m=null,p=null,_=null,y=[];function w({_o:e,mk:t,_mck:r,_rules:n}){m=e,p=t,_=r,y=n}function g(){return y}function v(){return`${l}/${m}/${p}`}function E(){return _}const b=e=>{try{return new URL(e,window.location.origin).toString()}catch{return e}};function x({url:e,method:t}){try{const t=g();if(!Array.isArray(t)||0===t.length)return null;const r=globalThis.location?.origin||"http://localhost";for(const n of t){const t=n.rule?.URL;if(!t)continue;const{condition:o}=t;if(!o)continue;let s="";switch(t.type){case"URL":{let t;try{t=new URL(e,r),s=t.pathname}catch{s=e}break}case"QUERY":{let t;try{t=new URL(e,r)}catch{t=null}t&&(s=t.searchParams.get(o.key)||"");break}case"BODY":case"HEADERS":s="";break;default:continue}let i=!1;switch(o.operator){case"contains":i=s.includes(o.value);break;case"equal":case"equals":i=s===o.value;break;case"regexp":try{let e=o.value;if(e.startsWith("/")&&e.lastIndexOf("/")>0){const t=e.lastIndexOf("/"),r=e.slice(1,t),n=e.slice(t+1);i=new RegExp(r,n).test(s)}else i=new RegExp(e).test(s)}catch{i=!1}}if(i){const e=o.activeAction;return{action:e,config:o.actions?.[e]||{}}}}return null}catch(e){return console.error("[mockforme] checkIfRulesToBeApplied error",e),null}}function k(e,t){!function(e,t){const r=window.fetch;window.fetch=function(n,o={}){const s="string"==typeof n?n:n.url;try{const d=new URL(s,window.location.origin),{pathname:l,search:f}=d;let m="get";o&&o.method?m=o.method:n instanceof Request&&n.method&&(m=n.method),m=m.toLowerCase();const p=x({url:s,method:m});if(t!==a&&p){if("delay"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(n,o))}),1e3*p.config.value)}));if("delay_and_redirect"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(p.config.redirectUrl,o))}),1e3*p.config.value)}));if("delay_and_timeout"===p.action){if(0===p.config.value){const e=new AbortController,t=r(n,{...o,signal:e.signal});return e.abort(),t.catch((()=>Promise.reject(new Error("Fetch aborted by rules"))))}return new Promise(((e,t)=>{setTimeout((()=>{t(new Error("Fetch timed out by rules"))}),1e3*p.config.value)}))}}const _=i(l,m);if(!_&&!p)return r(n,o);let y=s;p||(y=`${v()}${_.url}${f}`);let w={};if(!p){w={[u]:e,[c]:h,"x-mfm-adaptor":t};const r=E();r&&_._ack&&(w["x-mfm-key"]=`${r}-${_._ack}`),_?._ri_&&(w._ri_=_._ri_)}const g=n instanceof Request?n.headers:o.headers,k=new Headers(g||{});Object.entries(w).forEach((([e,t])=>{k.set(e,t)}));let R=o.body;if(!R&&n instanceof Request){const e=n.clone();"GET"!==e.method&&"HEAD"!==e.method&&(R=e.text())}let T={method:m,headers:k,credentials:"include",mode:"cors"};p&&(T.credentials=n instanceof Request&&n.credentials||o.credentials||"same-origin",T.mode=n instanceof Request&&n.mode||o.mode||"cors");const O=e=>(e&&(T.body=e),t===a?(({actualUrl:e,url:t,method:r,headers:n,body:o,credentials:s,mode:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=b(t);return new Promise(((t,h)=>{window.addEventListener("message",(function e(r){if(r.source!==window)return;const n=r.data;if("INTERCEPTED_RESPONSE"===n?.type&&n?.requestId===c){if(window.removeEventListener("message",e),n?.response?.error)return h(new Error(n.response.message));const{status:r,headers:o,body:s}=n.response;t(new Response(s,{status:r,headers:o}))}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:n,body:o,credentials:s,mode:i,rule:a}},"*")}))})({actualUrl:s,url:y,method:m,headers:Object.fromEntries(k.entries()),body:e,credentials:T.credentials,mode:T.mode,rule:p}):fetch(y,T).then((e=>{const t=e.clone();return(t.headers.get("content-type")||"").includes("application/json")?t.json().then((r=>new Response(JSON.stringify(r),{status:e.status,headers:t.headers}))):t.text().then((r=>new Response(r,{status:e.status,headers:t.headers})))})).catch((e=>(console.warn("mockforme fetch interceptor error",e),r(n,o)))));return R instanceof Promise?R.then((e=>O(e))):O(R)}catch(e){return console.warn("mockforme fetch interceptor error",e),r(n,o)}}}(e,t),function(e,t){const r=window.XMLHttpRequest;window.XMLHttpRequest=class{constructor(){this._xhr=new r,this._headers={},this._method=null,this._url=null,this._body=null,this._setupEventHandlers()}_setupEventHandlers(){const e=["onload","onerror","onabort","ontimeout","onreadystatechange"];for(const t of e)Object.defineProperty(this,t,{get:()=>this._xhr[t],set:e=>{this._xhr[t]=e}})}open(e,t,r=!0,n=null,o=null){return this._method=e.toUpperCase(),this._url=new URL(t,window.location.href).toString(),this._xhr._mockOriginalUrl=this._url,this._xhr._mockMethod=this._method,this._xhr.open(e,t,r,n,o)}setRequestHeader(e,t){return this._headers[e]=t,this._xhr.setRequestHeader(e,t)}send(n){this._body=n;try{const o=new URL(this._url),{pathname:s,search:d}=o,l=x({url:this._url,method:this._method});if(t!==a&&l){if("delay"===l.action)return setTimeout((()=>this._xhr.send(n)),1e3*l.config.value);if("delay_and_redirect"===l.action)return setTimeout((()=>{this._xhr.open(this._method,l.config.redirectUrl,!0),this._xhr.send(n)}),1e3*l.config.value);if("delay_and_timeout"===l.action)return 0===l.config.value?(this._xhr.open(this._method,this._url,!0),this._xhr.send(n),this._xhr.abort(),void("function"==typeof this.onerror&&this.onerror(new Error("XHR aborted by rules")))):setTimeout((()=>{this._xhr.abort(),"function"==typeof this.onerror&&this.onerror(new Error("XHR timed out by rules"))}),1e3*l.config.value)}const f=i(s,this._method);if(!f&&!l)return this._xhr.send(n);let m=this._url;l||(m=`${v()}${f.url}${d}`);let p={};if(!l){p={[u]:e,[c]:h,"x-mfm-adaptor":t};const r=E();r&&f._ack&&(p["x-mfm-key"]=`${r}-${f._ack}`),f?._ri_&&(p._ri_=f._ri_)}const _={...this._headers,...p};if(t===a)(({actualUrl:e,url:t,method:r,headers:n,body:o,onSuccess:s,onError:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=b(t);window.addEventListener("message",(function e(t){if(t.source!==window)return;const r=t.data;if("INTERCEPTED_RESPONSE"===r.type&&r.requestId===c){if(window.removeEventListener("message",e),r.response?.error)return i?.(r.response.message);const{body:t,status:n,headers:o}=r.response;s?.({body:t,status:n,headers:o})}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:n,body:o,credentials:"same-origin",mode:"cors",rule:a}},"*")})({actualUrl:this._url,url:m,method:this._method,headers:_,body:this._body,rule:l,onSuccess:({body:e,status:t})=>{Object.defineProperty(this,"responseText",{value:e}),Object.defineProperty(this,"status",{value:t}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},onError:e=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.(new Error(e.message||"XHR mock error"))}});else{const e=new r;e.open(this._method,m,!0);for(const t in _)e.setRequestHeader(t,_[t]);e.withCredentials=this.withCredentials,e.onload=()=>{Object.defineProperty(this,"responseText",{value:e.responseText}),Object.defineProperty(this,"status",{value:e.status}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},e.onerror=()=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.()},e.send(this._body)}}catch(e){return console.error("[mockforme][XHR] interception error",e),this._xhr.send(n)}}addEventListener(...e){return this._xhr.addEventListener(...e)}removeEventListener(...e){return this._xhr.removeEventListener(...e)}dispatchEvent(...e){return this._xhr.dispatchEvent(...e)}abort(){return this._xhr.abort()}getAllResponseHeaders(){return this._xhr.getAllResponseHeaders()}getResponseHeader(e){return this._xhr.getResponseHeader(e)}overrideMimeType(e){return this._xhr.overrideMimeType(e)}get readyState(){return this._xhr.readyState}get responseText(){return this._xhr.responseText}get status(){return this._xhr.status}get response(){return this._xhr.response}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get withCredentials(){return this._xhr.withCredentials}set withCredentials(e){this._xhr.withCredentials=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}get upload(){return this._xhr.upload}}}(e,t)}const R=function(t,r,n){const o=e();var s;function i(){if(4==s.readyState)if(s.status.toString().match(/^20[0-9]$/)){var e=function(){var e=s.getResponseHeader("Content-Type"),t=s.responseText;if(e){var r=e.split(";");try{return"application/json"===r[0]?JSON.parse(t):t}catch(e){throw"Unable to convert response header"}}}();r.call(this,e,s)}else n.call(this,s.responseText,s)}function a(e,t){var r=[];for(var n in e)if(e.hasOwnProperty(n)){var o=t?t+"["+n+"]":n,s=e[n];r.push("object"==typeof s?a(s,o):encodeURIComponent(o)+"="+encodeURIComponent(s))}return r.join("&")}return o||(window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"))),{request:function(){if(!o){if(window.XMLHttpRequest)s.onload=i;else{if(!window.ActiveXObject)throw"unable to process ajax";s.onreadystatechange=i}var e=a(t.params);if("get"==t.method.toLowerCase()&&"object"==typeof t.params){if(-1==t.url.indexOf("?"))t.url+="?";else{var r=t.url.split("?");r[1]&&r[1].split("=")[1]&&(t.url+="&")}t.url+=e}t.hasOwnProperty("async")||(t.async=!0),s.open(t.method,t.url,t.async),t.headers&&function(e){for(let t in e)s.setRequestHeader(t,e[t])}(t.headers),s.send(e)}}}};function T({di:e,iv:t},r){var n;const o=function(e,t){const r=t.length;return e.split("").map(((e,n)=>String.fromCharCode(e.charCodeAt(0)^t.charCodeAt(n%r)))).join("")}((n=e,"undefined"!=typeof Buffer?Buffer.from(n,"base64").toString("utf8"):decodeURIComponent(escape(atob(n)))),r+t);return JSON.parse(o)}const O=(t,r=null,n="JAVASCRIPT")=>{if(e())return;r||={mappings:[],_o:null,mk:null,_mck:null,_rules:[]};const{mappings:a=[],_o:d,mk:l,_mck:m,_rules:p=[]}=r;return o(a),w({_o:d,mk:l,_mck:m,_rules:p}),{run:(e,r=()=>{})=>{k(t,n),d&&l?e(s(),{_o:d,mk:l,_mck:m,_rules:p}):function(t,r,n,s){R({method:"get",url:f,async:!1,headers:{[u]:t,[c]:h,"x-mfm-adaptor":r}},(t=>{if(t){const{di:s,iv:i,_o:a,_mck:c,mk:u,r:h}=t,d=T({di:s,iv:i},a);w({_o:a,mk:u,_mck:c,_rules:h}),d&&(o(d),r=d,n={_o:a,mk:u,_mck:c,_rules:h},e?.(r,n))}var r,n}),(e=>{console.log("Error in loading mocked apis"),s(e)})).request()}(t,n,0,r)},checkIfApiToBeMocked:i,getMappings:s,doFetchMappings:(e,r)=>{!function(e,t,r,n){fetch(f,{method:"GET",headers:{[u]:e,[c]:h,"x-mfm-adaptor":t}}).then((e=>{if(!e.ok)throw new Error(`HTTP error ${e.status}`);return e.json()})).then((e=>{if(e){const{di:t,iv:n,_o:s,_mck:i,mk:a,r:c}=e,u=T({di:t,iv:n},s);w({_o:s,mk:a,_mck:i,_rules:c}),u&&(o(u),r(u,{_o:s,mk:a,_mck:i,_rules:c}))}})).catch((e=>{console.error("Error in loading mocked APIs:",e),n(e)}))}(t,n,((t,r)=>{e?.(t,r)}),r)}}},P=e();P||(globalThis.mockforme=O);let H=O;P&&(H=e=>({run:()=>{}}));const S=H;export{S as mockforme};
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.mockforme=t():e.mockforme=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{mockforme:()=>L});const r=()=>"undefined"!=typeof process&&null!=process.versions?.node,o=e=>{try{return e?e.toLowerCase():e}catch(e){return console.log(e),null}},n=(e,t)=>{const r=e.split("/"),o=t.split("/");if(r.length!==o.length)return!1;for(let e=0;e<r.length;e++){const t=r[e];if(t!==o[e]&&":any"!==t)return!1}return!0};let s=[];function i(e){s=e}function a(){return s}function c(e,t="get"){for(const r of s)if(o(r.apiMethod)===o(t)&&(r.apiEndpoint===e||n(r.apiEndpoint,e))){const t={url:e,method:r.apiMethod,_ack:r._ack||null};return r._ri_&&(t._ri_=r._ri_),t}return null}const u="CHROME_EXTENSION",h="mfmver",d="mockforme",l="4.2.5",f="https://api.mockforme.com",m=`${f}/mockforme`,p=`${f}/gateway/3f4eae522b`;let _=null,y=null,w=null,g=[];function b({_o:e,mk:t,_mck:r,_rules:o}){_=e,y=t,w=r,g=o}function v(){return g}function x(){return`${m}/${_}/${y}`}function E(){return w}const k=e=>{try{return new URL(e,window.location.origin).toString()}catch{return e}};function R({url:e,method:t}){try{const t=v();if(!Array.isArray(t)||0===t.length)return null;const r=globalThis.location?.origin||"http://localhost";for(const o of t){const t=o.rule?.URL;if(!t)continue;const{condition:n}=t;if(!n)continue;let s="";switch(t.type){case"URL":{let t;try{t=new URL(e,r),s=t.pathname}catch{s=e}break}case"QUERY":{let t;try{t=new URL(e,r)}catch{t=null}t&&(s=t.searchParams.get(n.key)||"");break}case"BODY":case"HEADERS":s="";break;default:continue}let i=!1;switch(n.operator){case"contains":i=s.includes(n.value);break;case"equal":case"equals":i=s===n.value;break;case"regexp":try{let e=n.value;if(e.startsWith("/")&&e.lastIndexOf("/")>0){const t=e.lastIndexOf("/"),r=e.slice(1,t),o=e.slice(t+1);i=new RegExp(r,o).test(s)}else i=new RegExp(e).test(s)}catch{i=!1}}if(i){const e=n.activeAction;return{action:e,config:n.actions?.[e]||{}}}}return null}catch(e){return console.error("[mockforme] checkIfRulesToBeApplied error",e),null}}function T(e,t){!function(e,t){const r=window.fetch;window.fetch=function(o,n={}){const s="string"==typeof o?o:o.url;try{const i=new URL(s,window.location.origin),{pathname:a,search:f}=i;let m="get";n&&n.method?m=n.method:o instanceof Request&&o.method&&(m=o.method),m=m.toLowerCase();const p=R({url:s,method:m});if(t!==u&&p){if("delay"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(o,n))}),1e3*p.config.value)}));if("delay_and_redirect"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(p.config.redirectUrl,n))}),1e3*p.config.value)}));if("delay_and_timeout"===p.action){if(0===p.config.value){const e=new AbortController,t=r(o,{...n,signal:e.signal});return e.abort(),t.catch((()=>Promise.reject(new Error("Fetch aborted by rules"))))}return new Promise(((e,t)=>{setTimeout((()=>{t(new Error("Fetch timed out by rules"))}),1e3*p.config.value)}))}}const _=c(a,m);if(!_&&!p)return r(o,n);let y=s;p||(y=`${x()}${_.url}${f}`);let w={};if(!p){w={[d]:e,[h]:l,"x-mfm-adaptor":t};const r=E();r&&_._ack&&(w["x-mfm-key"]=`${r}-${_._ack}`),_?._ri_&&(w._ri_=_._ri_)}const g=o instanceof Request?o.headers:n.headers,b=new Headers(g||{});Object.entries(w).forEach((([e,t])=>{b.set(e,t)}));let v=n.body;if(!v&&o instanceof Request){const e=o.clone();"GET"!==e.method&&"HEAD"!==e.method&&(v=e.text())}const T={method:m,headers:b,credentials:n.credentials||"same-origin",mode:n.mode||"cors"},O=e=>(e&&(T.body=e),t===u?(({actualUrl:e,url:t,method:r,headers:o,body:n,credentials:s,mode:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);return new Promise(((t,h)=>{window.addEventListener("message",(function e(r){if(r.source!==window)return;const o=r.data;if("INTERCEPTED_RESPONSE"===o?.type&&o?.requestId===c){if(window.removeEventListener("message",e),o?.response?.error)return h(new Error(o.response.message));const{status:r,headers:n,body:s}=o.response;t(new Response(s,{status:r,headers:n}))}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:s,mode:i,rule:a}},"*")}))})({actualUrl:s,url:y,method:m,headers:Object.fromEntries(b.entries()),body:e,credentials:T.credentials,mode:T.mode,rule:p}):fetch(y,T).then((e=>{const t=e.clone();return(t.headers.get("content-type")||"").includes("application/json")?t.json().then((r=>new Response(JSON.stringify(r),{status:e.status,headers:t.headers}))):t.text().then((r=>new Response(r,{status:e.status,headers:t.headers})))})).catch((e=>(console.warn("mockforme fetch interceptor error",e),r(o,n)))));return v instanceof Promise?v.then((e=>O(e))):O(v)}catch(e){return console.warn("mockforme fetch interceptor error",e),r(o,n)}}}(e,t),function(e,t){const r=window.XMLHttpRequest;window.XMLHttpRequest=class{constructor(){this._xhr=new r,this._headers={},this._method=null,this._url=null,this._body=null,this._setupEventHandlers()}_setupEventHandlers(){const e=["onload","onerror","onabort","ontimeout","onreadystatechange"];for(const t of e)Object.defineProperty(this,t,{get:()=>this._xhr[t],set:e=>{this._xhr[t]=e}})}open(e,t,r=!0,o=null,n=null){return this._method=e.toUpperCase(),this._url=new URL(t,window.location.href).toString(),this._xhr._mockOriginalUrl=this._url,this._xhr._mockMethod=this._method,this._xhr.open(e,t,r,o,n)}setRequestHeader(e,t){return this._headers[e]=t,this._xhr.setRequestHeader(e,t)}send(o){this._body=o;try{const n=new URL(this._url),{pathname:s,search:i}=n,a=R({url:this._url,method:this._method});if(t!==u&&a){if("delay"===a.action)return setTimeout((()=>this._xhr.send(o)),1e3*a.config.value);if("delay_and_redirect"===a.action)return setTimeout((()=>{this._xhr.open(this._method,a.config.redirectUrl,!0),this._xhr.send(o)}),1e3*a.config.value);if("delay_and_timeout"===a.action)return 0===a.config.value?(this._xhr.open(this._method,this._url,!0),this._xhr.send(o),this._xhr.abort(),void("function"==typeof this.onerror&&this.onerror(new Error("XHR aborted by rules")))):setTimeout((()=>{this._xhr.abort(),"function"==typeof this.onerror&&this.onerror(new Error("XHR timed out by rules"))}),1e3*a.config.value)}const f=c(s,this._method);if(!f&&!a)return this._xhr.send(o);let m=this._url;a||(m=`${x()}${f.url}${i}`);let p={};if(!a){p={[d]:e,[h]:l,"x-mfm-adaptor":t};const r=E();r&&f._ack&&(p["x-mfm-key"]=`${r}-${f._ack}`),f?._ri_&&(p._ri_=f._ri_)}const _={...this._headers,...p};if(t===u)(({actualUrl:e,url:t,method:r,headers:o,body:n,onSuccess:s,onError:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);window.addEventListener("message",(function e(t){if(t.source!==window)return;const r=t.data;if("INTERCEPTED_RESPONSE"===r.type&&r.requestId===c){if(window.removeEventListener("message",e),r.response?.error)return i?.(r.response.message);const{body:t,status:o,headers:n}=r.response;s?.({body:t,status:o,headers:n})}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:"same-origin",mode:"cors",rule:a}},"*")})({actualUrl:this._url,url:m,method:this._method,headers:_,body:this._body,rule:a,onSuccess:({body:e,status:t})=>{Object.defineProperty(this,"responseText",{value:e}),Object.defineProperty(this,"status",{value:t}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},onError:e=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.(new Error(e.message||"XHR mock error"))}});else{const e=new r;e.open(this._method,m,!0);for(const t in _)e.setRequestHeader(t,_[t]);e.onload=()=>{Object.defineProperty(this,"responseText",{value:e.responseText}),Object.defineProperty(this,"status",{value:e.status}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},e.onerror=()=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.()},e.send(this._body)}}catch(e){return console.error("[mockforme][XHR] interception error",e),this._xhr.send(o)}}addEventListener(...e){return this._xhr.addEventListener(...e)}removeEventListener(...e){return this._xhr.removeEventListener(...e)}dispatchEvent(...e){return this._xhr.dispatchEvent(...e)}abort(){return this._xhr.abort()}getAllResponseHeaders(){return this._xhr.getAllResponseHeaders()}getResponseHeader(e){return this._xhr.getResponseHeader(e)}overrideMimeType(e){return this._xhr.overrideMimeType(e)}get readyState(){return this._xhr.readyState}get responseText(){return this._xhr.responseText}get status(){return this._xhr.status}get response(){return this._xhr.response}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get withCredentials(){return this._xhr.withCredentials}set withCredentials(e){this._xhr.withCredentials=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}get upload(){return this._xhr.upload}}}(e,t)}const O=function(e,t,o){const n=r();var s;function i(){if(4==s.readyState)if(s.status.toString().match(/^20[0-9]$/)){var e=function(){var e=s.getResponseHeader("Content-Type"),t=s.responseText;if(e){var r=e.split(";");try{return"application/json"===r[0]?JSON.parse(t):t}catch(e){throw"Unable to convert response header"}}}();t.call(this,e,s)}else o.call(this,s.responseText,s)}function a(e,t){var r=[];for(var o in e)if(e.hasOwnProperty(o)){var n=t?t+"["+o+"]":o,s=e[o];r.push("object"==typeof s?a(s,n):encodeURIComponent(n)+"="+encodeURIComponent(s))}return r.join("&")}return n||(window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"))),{request:function(){if(!n){if(window.XMLHttpRequest)s.onload=i;else{if(!window.ActiveXObject)throw"unable to process ajax";s.onreadystatechange=i}var t=a(e.params);if("get"==e.method.toLowerCase()&&"object"==typeof e.params){if(-1==e.url.indexOf("?"))e.url+="?";else{var r=e.url.split("?");r[1]&&r[1].split("=")[1]&&(e.url+="&")}e.url+=t}e.hasOwnProperty("async")||(e.async=!0),s.open(e.method,e.url,e.async),e.headers&&function(e){for(let t in e)s.setRequestHeader(t,e[t])}(e.headers),s.send(t)}}}};function P({di:e,iv:t},r){var o;const n=function(e,t){const r=t.length;return e.split("").map(((e,o)=>String.fromCharCode(e.charCodeAt(0)^t.charCodeAt(o%r)))).join("")}((o=e,"undefined"!=typeof Buffer?Buffer.from(o,"base64").toString("utf8"):decodeURIComponent(escape(atob(o)))),r+t);return JSON.parse(n)}const j=(e,t=null,o="JAVASCRIPT")=>{if(r())return;t||={mappings:[],_o:null,mk:null,_mck:null,_rules:[]};const{mappings:n=[],_o:s,mk:u,_mck:f,_rules:m=[]}=t;return i(n),b({_o:s,mk:u,_mck:f,_rules:m}),{run:(t,r=()=>{})=>{T(e,o),s&&u?t(a(),{_o:s,mk:u,_mck:f,_rules:m}):function(e,r,o,n){O({method:"get",url:p,async:!1,headers:{[d]:e,[h]:l,"x-mfm-adaptor":r}},(e=>{if(e){const{di:n,iv:s,_o:a,_mck:c,mk:u,r:h}=e,d=P({di:n,iv:s},a);b({_o:a,mk:u,_mck:c,_rules:h}),d&&(i(d),r=d,o={_o:a,mk:u,_mck:c,_rules:h},t?.(r,o))}var r,o}),(e=>{console.log("Error in loading mocked apis"),n(e)})).request()}(e,o,0,r)},checkIfApiToBeMocked:c,getMappings:a,doFetchMappings:(t,r)=>{!function(e,t,r,o){fetch(p,{method:"GET",headers:{[d]:e,[h]:l,"x-mfm-adaptor":t}}).then((e=>{if(!e.ok)throw new Error(`HTTP error ${e.status}`);return e.json()})).then((e=>{if(e){const{di:t,iv:o,_o:n,_mck:s,mk:a,r:c}=e,u=P({di:t,iv:o},n);b({_o:n,mk:a,_mck:s,_rules:c}),u&&(i(u),r(u,{_o:n,mk:a,_mck:s,_rules:c}))}})).catch((e=>{console.error("Error in loading mocked APIs:",e),o(e)}))}(e,o,((e,r)=>{t?.(e,r)}),r)}}},H=r();H||(globalThis.mockforme=j);let S=j;H&&(S=e=>({run:()=>{}}));const L=S;return t.mockforme})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.mockforme=t():e.mockforme=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{mockforme:()=>C});const r=()=>"undefined"!=typeof process&&null!=process.versions?.node,o=e=>{try{return e?e.toLowerCase():e}catch(e){return console.log(e),null}},n=(e,t)=>{const r=e.split("/"),o=t.split("/");if(r.length!==o.length)return!1;for(let e=0;e<r.length;e++){const t=r[e];if(t!==o[e]&&":any"!==t)return!1}return!0};let s=[];function i(e){s=e}function a(){return s}function c(e,t="get"){for(const r of s)if(o(r.apiMethod)===o(t)&&(r.apiEndpoint===e||n(r.apiEndpoint,e))){const t={url:e,method:r.apiMethod,_ack:r._ack||null};return r._ri_&&(t._ri_=r._ri_),t}return null}const u="CHROME_EXTENSION",d="mfmver",h="mockforme",l="4.2.5",f="https://api.mockforme.com",m=`${f}/mockforme`,p=`${f}/gateway/3f4eae522b`;let _=null,y=null,w=null,g=[];function b({_o:e,mk:t,_mck:r,_rules:o}){_=e,y=t,w=r,g=o}function v(){return g}function x(){return`${m}/${_}/${y}`}function E(){return w}const k=e=>{try{return new URL(e,window.location.origin).toString()}catch{return e}};function R({url:e,method:t}){try{const t=v();if(!Array.isArray(t)||0===t.length)return null;const r=globalThis.location?.origin||"http://localhost";for(const o of t){const t=o.rule?.URL;if(!t)continue;const{condition:n}=t;if(!n)continue;let s="";switch(t.type){case"URL":{let t;try{t=new URL(e,r),s=t.pathname}catch{s=e}break}case"QUERY":{let t;try{t=new URL(e,r)}catch{t=null}t&&(s=t.searchParams.get(n.key)||"");break}case"BODY":case"HEADERS":s="";break;default:continue}let i=!1;switch(n.operator){case"contains":i=s.includes(n.value);break;case"equal":case"equals":i=s===n.value;break;case"regexp":try{let e=n.value;if(e.startsWith("/")&&e.lastIndexOf("/")>0){const t=e.lastIndexOf("/"),r=e.slice(1,t),o=e.slice(t+1);i=new RegExp(r,o).test(s)}else i=new RegExp(e).test(s)}catch{i=!1}}if(i){const e=n.activeAction;return{action:e,config:n.actions?.[e]||{}}}}return null}catch(e){return console.error("[mockforme] checkIfRulesToBeApplied error",e),null}}function T(e,t){!function(e,t){const r=window.fetch;window.fetch=function(o,n={}){const s="string"==typeof o?o:o.url;try{const i=new URL(s,window.location.origin),{pathname:a,search:f}=i;let m="get";n&&n.method?m=n.method:o instanceof Request&&o.method&&(m=o.method),m=m.toLowerCase();const p=R({url:s,method:m});if(t!==u&&p){if("delay"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(o,n))}),1e3*p.config.value)}));if("delay_and_redirect"===p.action)return new Promise(((e,t)=>{setTimeout((()=>{e(r(p.config.redirectUrl,n))}),1e3*p.config.value)}));if("delay_and_timeout"===p.action){if(0===p.config.value){const e=new AbortController,t=r(o,{...n,signal:e.signal});return e.abort(),t.catch((()=>Promise.reject(new Error("Fetch aborted by rules"))))}return new Promise(((e,t)=>{setTimeout((()=>{t(new Error("Fetch timed out by rules"))}),1e3*p.config.value)}))}}const _=c(a,m);if(!_&&!p)return r(o,n);let y=s;p||(y=`${x()}${_.url}${f}`);let w={};if(!p){w={[h]:e,[d]:l,"x-mfm-adaptor":t};const r=E();r&&_._ack&&(w["x-mfm-key"]=`${r}-${_._ack}`),_?._ri_&&(w._ri_=_._ri_)}const g=o instanceof Request?o.headers:n.headers,b=new Headers(g||{});Object.entries(w).forEach((([e,t])=>{b.set(e,t)}));let v=n.body;if(!v&&o instanceof Request){const e=o.clone();"GET"!==e.method&&"HEAD"!==e.method&&(v=e.text())}let T={method:m,headers:b,credentials:"include",mode:"cors"};p&&(T.credentials=o instanceof Request&&o.credentials||n.credentials||"same-origin",T.mode=o instanceof Request&&o.mode||n.mode||"cors");const O=e=>(e&&(T.body=e),t===u?(({actualUrl:e,url:t,method:r,headers:o,body:n,credentials:s,mode:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);return new Promise(((t,d)=>{window.addEventListener("message",(function e(r){if(r.source!==window)return;const o=r.data;if("INTERCEPTED_RESPONSE"===o?.type&&o?.requestId===c){if(window.removeEventListener("message",e),o?.response?.error)return d(new Error(o.response.message));const{status:r,headers:n,body:s}=o.response;t(new Response(s,{status:r,headers:n}))}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:s,mode:i,rule:a}},"*")}))})({actualUrl:s,url:y,method:m,headers:Object.fromEntries(b.entries()),body:e,credentials:T.credentials,mode:T.mode,rule:p}):fetch(y,T).then((e=>{const t=e.clone();return(t.headers.get("content-type")||"").includes("application/json")?t.json().then((r=>new Response(JSON.stringify(r),{status:e.status,headers:t.headers}))):t.text().then((r=>new Response(r,{status:e.status,headers:t.headers})))})).catch((e=>(console.warn("mockforme fetch interceptor error",e),r(o,n)))));return v instanceof Promise?v.then((e=>O(e))):O(v)}catch(e){return console.warn("mockforme fetch interceptor error",e),r(o,n)}}}(e,t),function(e,t){const r=window.XMLHttpRequest;window.XMLHttpRequest=class{constructor(){this._xhr=new r,this._headers={},this._method=null,this._url=null,this._body=null,this._setupEventHandlers()}_setupEventHandlers(){const e=["onload","onerror","onabort","ontimeout","onreadystatechange"];for(const t of e)Object.defineProperty(this,t,{get:()=>this._xhr[t],set:e=>{this._xhr[t]=e}})}open(e,t,r=!0,o=null,n=null){return this._method=e.toUpperCase(),this._url=new URL(t,window.location.href).toString(),this._xhr._mockOriginalUrl=this._url,this._xhr._mockMethod=this._method,this._xhr.open(e,t,r,o,n)}setRequestHeader(e,t){return this._headers[e]=t,this._xhr.setRequestHeader(e,t)}send(o){this._body=o;try{const n=new URL(this._url),{pathname:s,search:i}=n,a=R({url:this._url,method:this._method});if(t!==u&&a){if("delay"===a.action)return setTimeout((()=>this._xhr.send(o)),1e3*a.config.value);if("delay_and_redirect"===a.action)return setTimeout((()=>{this._xhr.open(this._method,a.config.redirectUrl,!0),this._xhr.send(o)}),1e3*a.config.value);if("delay_and_timeout"===a.action)return 0===a.config.value?(this._xhr.open(this._method,this._url,!0),this._xhr.send(o),this._xhr.abort(),void("function"==typeof this.onerror&&this.onerror(new Error("XHR aborted by rules")))):setTimeout((()=>{this._xhr.abort(),"function"==typeof this.onerror&&this.onerror(new Error("XHR timed out by rules"))}),1e3*a.config.value)}const f=c(s,this._method);if(!f&&!a)return this._xhr.send(o);let m=this._url;a||(m=`${x()}${f.url}${i}`);let p={};if(!a){p={[h]:e,[d]:l,"x-mfm-adaptor":t};const r=E();r&&f._ack&&(p["x-mfm-key"]=`${r}-${f._ack}`),f?._ri_&&(p._ri_=f._ri_)}const _={...this._headers,...p};if(t===u)(({actualUrl:e,url:t,method:r,headers:o,body:n,onSuccess:s,onError:i,rule:a})=>{const c=`${Date.now()}-${Math.random()}`,u=k(t);window.addEventListener("message",(function e(t){if(t.source!==window)return;const r=t.data;if("INTERCEPTED_RESPONSE"===r.type&&r.requestId===c){if(window.removeEventListener("message",e),r.response?.error)return i?.(r.response.message);const{body:t,status:o,headers:n}=r.response;s?.({body:t,status:o,headers:n})}})),window.postMessage({type:"REQUEST_INTERCEPTED",requestId:c,payload:{actualUrl:e,url:u,method:r,headers:o,body:n,credentials:"same-origin",mode:"cors",rule:a}},"*")})({actualUrl:this._url,url:m,method:this._method,headers:_,body:this._body,rule:a,onSuccess:({body:e,status:t})=>{Object.defineProperty(this,"responseText",{value:e}),Object.defineProperty(this,"status",{value:t}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},onError:e=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.(new Error(e.message||"XHR mock error"))}});else{const e=new r;e.open(this._method,m,!0);for(const t in _)e.setRequestHeader(t,_[t]);e.withCredentials=this.withCredentials,e.onload=()=>{Object.defineProperty(this,"responseText",{value:e.responseText}),Object.defineProperty(this,"status",{value:e.status}),Object.defineProperty(this,"readyState",{value:4}),this.onreadystatechange?.(),this.onload?.()},e.onerror=()=>{Object.defineProperty(this,"readyState",{value:4}),this.onerror?.()},e.send(this._body)}}catch(e){return console.error("[mockforme][XHR] interception error",e),this._xhr.send(o)}}addEventListener(...e){return this._xhr.addEventListener(...e)}removeEventListener(...e){return this._xhr.removeEventListener(...e)}dispatchEvent(...e){return this._xhr.dispatchEvent(...e)}abort(){return this._xhr.abort()}getAllResponseHeaders(){return this._xhr.getAllResponseHeaders()}getResponseHeader(e){return this._xhr.getResponseHeader(e)}overrideMimeType(e){return this._xhr.overrideMimeType(e)}get readyState(){return this._xhr.readyState}get responseText(){return this._xhr.responseText}get status(){return this._xhr.status}get response(){return this._xhr.response}get responseType(){return this._xhr.responseType}set responseType(e){this._xhr.responseType=e}get withCredentials(){return this._xhr.withCredentials}set withCredentials(e){this._xhr.withCredentials=e}get timeout(){return this._xhr.timeout}set timeout(e){this._xhr.timeout=e}get upload(){return this._xhr.upload}}}(e,t)}const O=function(e,t,o){const n=r();var s;function i(){if(4==s.readyState)if(s.status.toString().match(/^20[0-9]$/)){var e=function(){var e=s.getResponseHeader("Content-Type"),t=s.responseText;if(e){var r=e.split(";");try{return"application/json"===r[0]?JSON.parse(t):t}catch(e){throw"Unable to convert response header"}}}();t.call(this,e,s)}else o.call(this,s.responseText,s)}function a(e,t){var r=[];for(var o in e)if(e.hasOwnProperty(o)){var n=t?t+"["+o+"]":o,s=e[o];r.push("object"==typeof s?a(s,n):encodeURIComponent(n)+"="+encodeURIComponent(s))}return r.join("&")}return n||(window.XMLHttpRequest?s=new XMLHttpRequest:window.ActiveXObject&&(s=new ActiveXObject("Microsoft.XMLHTTP"))),{request:function(){if(!n){if(window.XMLHttpRequest)s.onload=i;else{if(!window.ActiveXObject)throw"unable to process ajax";s.onreadystatechange=i}var t=a(e.params);if("get"==e.method.toLowerCase()&&"object"==typeof e.params){if(-1==e.url.indexOf("?"))e.url+="?";else{var r=e.url.split("?");r[1]&&r[1].split("=")[1]&&(e.url+="&")}e.url+=t}e.hasOwnProperty("async")||(e.async=!0),s.open(e.method,e.url,e.async),e.headers&&function(e){for(let t in e)s.setRequestHeader(t,e[t])}(e.headers),s.send(t)}}}};function P({di:e,iv:t},r){var o;const n=function(e,t){const r=t.length;return e.split("").map(((e,o)=>String.fromCharCode(e.charCodeAt(0)^t.charCodeAt(o%r)))).join("")}((o=e,"undefined"!=typeof Buffer?Buffer.from(o,"base64").toString("utf8"):decodeURIComponent(escape(atob(o)))),r+t);return JSON.parse(n)}const j=(e,t=null,o="JAVASCRIPT")=>{if(r())return;t||={mappings:[],_o:null,mk:null,_mck:null,_rules:[]};const{mappings:n=[],_o:s,mk:u,_mck:f,_rules:m=[]}=t;return i(n),b({_o:s,mk:u,_mck:f,_rules:m}),{run:(t,r=()=>{})=>{T(e,o),s&&u?t(a(),{_o:s,mk:u,_mck:f,_rules:m}):function(e,r,o,n){O({method:"get",url:p,async:!1,headers:{[h]:e,[d]:l,"x-mfm-adaptor":r}},(e=>{if(e){const{di:n,iv:s,_o:a,_mck:c,mk:u,r:d}=e,h=P({di:n,iv:s},a);b({_o:a,mk:u,_mck:c,_rules:d}),h&&(i(h),r=h,o={_o:a,mk:u,_mck:c,_rules:d},t?.(r,o))}var r,o}),(e=>{console.log("Error in loading mocked apis"),n(e)})).request()}(e,o,0,r)},checkIfApiToBeMocked:c,getMappings:a,doFetchMappings:(t,r)=>{!function(e,t,r,o){fetch(p,{method:"GET",headers:{[h]:e,[d]:l,"x-mfm-adaptor":t}}).then((e=>{if(!e.ok)throw new Error(`HTTP error ${e.status}`);return e.json()})).then((e=>{if(e){const{di:t,iv:o,_o:n,_mck:s,mk:a,r:c}=e,u=P({di:t,iv:o},n);b({_o:n,mk:a,_mck:s,_rules:c}),u&&(i(u),r(u,{_o:n,mk:a,_mck:s,_rules:c}))}})).catch((e=>{console.error("Error in loading mocked APIs:",e),o(e)}))}(e,o,((e,r)=>{t?.(e,r)}),r)}}},H=r();H||(globalThis.mockforme=j);let S=j;H&&(S=e=>({run:()=>{}}));const C=S;return t.mockforme})()));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mockforme",
3
- "version": "4.2.5",
3
+ "version": "4.2.6",
4
4
  "description": "mockforme client integration kit. Intercept APIs & get mock responses. Integrate mockforme SDK with your codebase in seconds",
5
5
  "main": "dist/mockforme.client.cjs.js",
6
6
  "module": "dist/mockforme.client.esm.js",
@@ -39,6 +39,7 @@
39
39
  "license": "ISC",
40
40
  "homepage": "https://www.mockforme.com",
41
41
  "dependencies": {
42
+
42
43
  },
43
44
  "devDependencies": {
44
45
  }