skeptic-cli 0.2.0 → 1.0.0
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/AGENTS.md +25 -53
- package/LICENSE +24 -0
- package/LICENSES.md +92 -3
- package/README.md +36 -52
- package/agent-skills/skeptic/SKILL.md +151 -33
- package/dist/adb-DUGGW3FV.mjs +2 -0
- package/dist/adb-driver-TBOCCKEO.mjs +3 -0
- package/dist/adb-session-AVVXL3QQ.mjs +2 -0
- package/dist/add-G7JFXU4S.mjs +67 -0
- package/dist/audit-ID2BSVYC.mjs +7 -0
- package/dist/auto-spawn-4TO4DBO6.mjs +2 -0
- package/dist/browser-verbs-U54BZACP.mjs +21 -0
- package/dist/browsers-install-F2ZWEBOX.mjs +3 -0
- package/dist/chokidar-KB6GLGX4.mjs +7 -0
- package/dist/chunk-2N64R5DC.mjs +457 -0
- package/dist/chunk-2VSGDT7T.mjs +7 -0
- package/dist/chunk-2YKSIUIN.mjs +3 -0
- package/dist/chunk-2ZORFJJP.mjs +11 -0
- package/dist/chunk-42J77CYA.mjs +3 -0
- package/dist/chunk-6TLKI7UN.mjs +4 -0
- package/dist/chunk-6U6H22OR.mjs +3 -0
- package/dist/chunk-7BFRKEFV.mjs +160 -0
- package/dist/chunk-7ZUWKIDM.mjs +3 -0
- package/dist/chunk-AH75LR2T.mjs +3 -0
- package/dist/chunk-B26AZRXU.mjs +41 -0
- package/dist/chunk-BIGNULF6.mjs +12 -0
- package/dist/chunk-COVGJJ47.mjs +3 -0
- package/dist/chunk-CWNYWHJ2.mjs +143 -0
- package/dist/chunk-EU3OXJX4.mjs +3 -0
- package/dist/chunk-EYVJTUBL.mjs +3 -0
- package/dist/chunk-G22LGRZ4.mjs +4 -0
- package/dist/chunk-I4JX25Y5.mjs +13 -0
- package/dist/chunk-IXBYLSGB.mjs +5 -0
- package/dist/chunk-IYLF56WL.mjs +3 -0
- package/dist/chunk-K65JNLTT.mjs +3 -0
- package/dist/chunk-LPJF33QP.mjs +3 -0
- package/dist/chunk-MHNEFL35.mjs +3 -0
- package/dist/chunk-N3533BCE.mjs +3 -0
- package/dist/chunk-NXTEMSUR.mjs +4 -0
- package/dist/chunk-OHVNABCL.mjs +10 -0
- package/dist/chunk-QICYK6XT.mjs +10 -0
- package/dist/chunk-RU7M6UGM.mjs +5 -0
- package/dist/chunk-S3M2RTHJ.mjs +7 -0
- package/dist/chunk-U3KRIAEU.mjs +3 -0
- package/dist/chunk-WBPZGXOC.mjs +8 -0
- package/dist/chunk-YB25SMQ2.mjs +141 -0
- package/dist/chunk-ZN6MI2TU.mjs +4 -0
- package/dist/client-UR65IKYX.mjs +2 -0
- package/dist/comment-F734YE5S.mjs +6 -0
- package/dist/cookies-X7W5U3VE.mjs +3 -0
- package/dist/daemon-M2J3L6JW.mjs +7 -0
- package/dist/device-fixture-MJSDIP75.mjs +2 -0
- package/dist/devices-NG4P5UPS.mjs +4 -0
- package/dist/devtools-N5AYAR54.mjs +12 -0
- package/dist/doctor-WRKNAK3W.mjs +4 -0
- package/dist/extractor-Y477MBN6.mjs +2 -0
- package/dist/html-reporter-7QHIRHEY.mjs +2 -0
- package/dist/index.d.ts +87 -120
- package/dist/index.mjs +30 -1740
- package/dist/init-4PXSHPNW.mjs +15 -0
- package/dist/ink-reporter-4EN7CRMK.mjs +3 -0
- package/dist/inspect-3XFCCSUL.mjs +19 -0
- package/dist/ios-tools-WK66CQ7Q.mjs +2 -0
- package/dist/json-reporter-SXWPAXRY.mjs +2 -0
- package/dist/junit-reporter-5AT3OFWV.mjs +12 -0
- package/dist/mail-GTOZFXJ5.mjs +14 -0
- package/dist/observe-MHEV7OVP.mjs +3 -0
- package/dist/render-MHOBDOSP.mjs +383 -0
- package/dist/run-GW3X5ANC.mjs +2 -0
- package/dist/scaffold-6ZF6K6Y5.mjs +38 -0
- package/dist/screenshot-GUJSIRQB.mjs +2 -0
- package/dist/session-daemon-cmd-23UUK6TD.mjs +4 -0
- package/dist/simctl-driver-PNUN7W7G.mjs +5 -0
- package/dist/skeptic.mjs +3 -1749
- package/dist/slack-reporter-EEFO66V6.mjs +8 -0
- package/dist/watch-A7ZLUYR2.mjs +3 -0
- package/dist/webhook-reporter-BXJGZS2I.mjs +3 -0
- package/dist/worker.mjs +3 -724
- package/package.json +13 -11
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {createRequire}from'node:module';import {b,a,d}from'./chunk-2YKSIUIN.mjs';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
|
|
2
|
+
createRequire(import.meta.url);
|
|
3
|
+
var k=b((ks,Ye)=>{var ze=["nodebuffer","arraybuffer","fragments"],He=typeof Blob<"u";He&&ze.push("blob");Ye.exports={BINARY_TYPES:ze,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:He,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}};});var X=b((Cs,se)=>{var{EMPTY_BUFFER:Jt}=k(),Ee=Buffer[Symbol.species];function er(t,e){if(t.length===0)return Jt;if(t.length===1)return t[0];let r=Buffer.allocUnsafe(e),s=0;for(let i=0;i<t.length;i++){let n=t[i];r.set(n,s),s+=n.length;}return s<e?new Ee(r.buffer,r.byteOffset,s):r}function Ke(t,e,r,s,i){for(let n=0;n<i;n++)r[s+n]=t[n]^e[n&3];}function Xe(t,e){for(let r=0;r<t.length;r++)t[r]^=e[r&3];}function tr(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function ve(t){if(ve.readOnly=true,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new Ee(t):ArrayBuffer.isView(t)?e=new Ee(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),ve.readOnly=false),e}se.exports={concat:er,mask:Ke,toArrayBuffer:tr,toBuffer:ve,unmask:Xe};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=a("bufferutil");se.exports.mask=function(e,r,s,i,n){n<48?Ke(e,r,s,i,n):t.mask(e,r,s,i,n);},se.exports.unmask=function(e,r){e.length<32?Xe(e,r):t.unmask(e,r);};}catch{}});var Je=b((Ls,Qe)=>{var Ze=Symbol("kDone"),be=Symbol("kRun"),we=class{constructor(e){this[Ze]=()=>{this.pending--,this[be]();},this.concurrency=e||1/0,this.jobs=[],this.pending=0;}add(e){this.jobs.push(e),this[be]();}[be](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Ze]);}}};Qe.exports=we;});var G=b((Ns,st)=>{var Z=a("zlib"),et=X(),rr=Je(),{kStatusCode:tt}=k(),sr=Buffer[Symbol.species],ir=Buffer.from([0,0,255,255]),ne=Symbol("permessage-deflate"),C=Symbol("total-length"),W=Symbol("callback"),P=Symbol("buffers"),q=Symbol("error"),ie,Te=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!ie){let r=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ie=new rr(r);}}static get extensionName(){return "permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=true),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=true),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=true),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[W];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"));}}acceptAsServer(e){let r=this._options,s=e.find(i=>!(r.serverNoContextTakeover===false&&i.server_no_context_takeover||i.server_max_window_bits&&(r.serverMaxWindowBits===false||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>i.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!i.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(s.server_no_context_takeover=true),r.clientNoContextTakeover&&(s.client_no_context_takeover=true),typeof r.serverMaxWindowBits=="number"&&(s.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?s.client_max_window_bits=r.clientMaxWindowBits:(s.client_max_window_bits===true||r.clientMaxWindowBits===false)&&delete s.client_max_window_bits,s}acceptAsClient(e){let r=e[0];if(this._options.clientNoContextTakeover===false&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===false||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(e){return e.forEach(r=>{Object.keys(r).forEach(s=>{let i=r[s];if(i.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(i=i[0],s==="client_max_window_bits"){if(i!==true){let n=+i;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=n;}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else if(s==="server_max_window_bits"){let n=+i;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=n;}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(i!==true)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else throw new Error(`Unknown parameter "${s}"`);r[s]=i;});}),e}decompress(e,r,s){ie.add(i=>{this._decompress(e,r,(n,o)=>{i(),s(n,o);});});}compress(e,r,s){ie.add(i=>{this._compress(e,r,(n,o)=>{i(),s(n,o);});});}_decompress(e,r,s){let i=this._isServer?"client":"server";if(!this._inflate){let n=`${i}_max_window_bits`,o=typeof this.params[n]!="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[n];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[ne]=this,this._inflate[C]=0,this._inflate[P]=[],this._inflate.on("error",or),this._inflate.on("data",rt);}this._inflate[W]=s,this._inflate.write(e),r&&this._inflate.write(ir),this._inflate.flush(()=>{let n=this._inflate[q];if(n){this._inflate.close(),this._inflate=null,s(n);return}let o=et.concat(this._inflate[P],this._inflate[C]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[C]=0,this._inflate[P]=[],r&&this.params[`${i}_no_context_takeover`]&&this._inflate.reset()),s(null,o);});}_compress(e,r,s){let i=this._isServer?"server":"client";if(!this._deflate){let n=`${i}_max_window_bits`,o=typeof this.params[n]!="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[n];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[C]=0,this._deflate[P]=[],this._deflate.on("data",nr);}this._deflate[W]=s,this._deflate.write(e),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let n=et.concat(this._deflate[P],this._deflate[C]);r&&(n=new sr(n.buffer,n.byteOffset,n.length-4)),this._deflate[W]=null,this._deflate[C]=0,this._deflate[P]=[],r&&this.params[`${i}_no_context_takeover`]&&this._deflate.reset(),s(null,n);});}};st.exports=Te;function nr(t){this[P].push(t),this[C]+=t.length;}function rt(t){if(this[C]+=t.length,this[ne]._maxPayload<1||this[C]<=this[ne]._maxPayload){this[P].push(t);return}this[q]=new RangeError("Max payload size exceeded"),this[q].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[q][tt]=1009,this.removeListener("data",rt),this.reset();}function or(t){if(this[ne]._inflate=null,this[q]){this[W](this[q]);return}t[tt]=1007,this[W](t);}});var V=b((Ps,oe)=>{var{isUtf8:it}=a("buffer"),{hasBlob:ar}=k(),lr=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function fr(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function Oe(t){let e=t.length,r=0;for(;r<e;)if((t[r]&128)===0)r++;else if((t[r]&224)===192){if(r+1===e||(t[r+1]&192)!==128||(t[r]&254)===192)return false;r+=2;}else if((t[r]&240)===224){if(r+2>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||t[r]===224&&(t[r+1]&224)===128||t[r]===237&&(t[r+1]&224)===160)return false;r+=3;}else if((t[r]&248)===240){if(r+3>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||(t[r+3]&192)!==128||t[r]===240&&(t[r+1]&240)===128||t[r]===244&&t[r+1]>143||t[r]>244)return false;r+=4;}else return false;return true}function hr(t){return ar&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}oe.exports={isBlob:hr,isValidStatusCode:fr,isValidUTF8:Oe,tokenChars:lr};if(it)oe.exports.isValidUTF8=function(t){return t.length<24?Oe(t):it(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=a("utf-8-validate");oe.exports.isValidUTF8=function(e){return e.length<32?Oe(e):t(e)};}catch{}});var Pe=b((Bs,ct)=>{var{Writable:cr}=a("stream"),nt=G(),{BINARY_TYPES:ur,EMPTY_BUFFER:ot,kStatusCode:dr,kWebSocket:_r}=k(),{concat:ke,toArrayBuffer:mr,unmask:pr}=X(),{isValidStatusCode:gr,isValidUTF8:at}=V(),ae=Buffer[Symbol.species],v=0,lt=1,ft=2,ht=3,Ce=4,Le=5,le=6,Ne=class extends cr{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:true,this._binaryType=e.binaryType||ur[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxBufferedChunks=e.maxBufferedChunks|0,this._maxFragments=e.maxFragments|0,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[_r]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=false,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=false,this._fin=false,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=false,this._loop=false,this._state=v;}_write(e,r,s){if(this._opcode===8&&this._state==v)return s();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){s(this.createError(RangeError,"Too many buffered chunks",false,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s);}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new ae(s.buffer,s.byteOffset+e,s.length-e),new ae(s.buffer,s.byteOffset,e)}let r=Buffer.allocUnsafe(e);do{let s=this._buffers[0],i=r.length-e;e>=s.length?r.set(this._buffers.shift(),i):(r.set(new Uint8Array(s.buffer,s.byteOffset,e),i),this._buffers[0]=new ae(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length;}while(e>0);return r}startLoop(e){this._loop=true;do switch(this._state){case v:this.getInfo(e);break;case lt:this.getPayloadLength16(e);break;case ft:this.getPayloadLength64(e);break;case ht:this.getMask();break;case Ce:this.getData(e);break;case Le:case le:this._loop=false;return}while(this._loop);this._errored||e();}getInfo(e){if(this._bufferedBytes<2){this._loop=false;return}let r=this.consume(2);if((r[0]&48)!==0){let i=this.createError(RangeError,"RSV2 and RSV3 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(i);return}let s=(r[0]&64)===64;if(s&&!this._extensions[nt.extensionName]){let i=this.createError(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(s){let i=this.createError(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(!this._fragmented){let i=this.createError(RangeError,"invalid opcode 0",true,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._opcode=this._fragmented;}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._compressed=s;}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let i=this.createError(RangeError,"FIN must be set",true,1002,"WS_ERR_EXPECTED_FIN");e(i);return}if(s){let i=this.createError(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let i=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,true,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(i);return}}else {let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE");e(i);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let i=this.createError(RangeError,"MASK must be set",true,1002,"WS_ERR_EXPECTED_MASK");e(i);return}}else if(this._masked){let i=this.createError(RangeError,"MASK must be clear",true,1002,"WS_ERR_UNEXPECTED_MASK");e(i);return}this._payloadLength===126?this._state=lt:this._payloadLength===127?this._state=ft:this.haveLength(e);}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=false;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e);}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=false;return}let r=this.consume(8),s=r.readUInt32BE(0);if(s>Math.pow(2,21)-1){let i=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",false,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(i);return}this._payloadLength=s*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(e);}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(r);return}this._masked?this._state=ht:this._state=Ce;}getMask(){if(this._bufferedBytes<4){this._loop=false;return}this._mask=this.consume(4),this._state=Ce;}getData(e){let r=ot;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=false;return}r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&pr(r,this._mask);}if(this._opcode>7){this.controlMessage(r,e);return}if(this._compressed){this._state=Le,this.decompress(r,e);return}if(r.length){if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){let s=this.createError(RangeError,"Too many message fragments",false,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");e(s);return}this._messageLength=this._totalPayloadLength,this._fragments.push(r);}this.dataMessage(e);}decompress(e,r){this._extensions[nt.extensionName].decompress(e,this._fin,(i,n)=>{if(i)return r(i);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(o);return}if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){let o=this.createError(RangeError,"Too many message fragments",false,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");r(o);return}this._fragments.push(n);}this.dataMessage(r),this._state===v&&this.startLoop(r);});}dataMessage(e){if(!this._fin){this._state=v;return}let r=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let i;this._binaryType==="nodebuffer"?i=ke(s,r):this._binaryType==="arraybuffer"?i=mr(ke(s,r)):this._binaryType==="blob"?i=new Blob(s):i=s,this._allowSynchronousEvents?(this.emit("message",i,true),this._state=v):(this._state=le,setImmediate(()=>{this.emit("message",i,true),this._state=v,this.startLoop(e);}));}else {let i=ke(s,r);if(!this._skipUTF8Validation&&!at(i)){let n=this.createError(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8");e(n);return}this._state===Le||this._allowSynchronousEvents?(this.emit("message",i,false),this._state=v):(this._state=le,setImmediate(()=>{this.emit("message",i,false),this._state=v,this.startLoop(e);}));}}controlMessage(e,r){if(this._opcode===8){if(e.length===0)this._loop=false,this.emit("conclude",1005,ot),this.end();else {let s=e.readUInt16BE(0);if(!gr(s)){let n=this.createError(RangeError,`invalid status code ${s}`,true,1002,"WS_ERR_INVALID_CLOSE_CODE");r(n);return}let i=new ae(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!at(i)){let n=this.createError(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8");r(n);return}this._loop=false,this.emit("conclude",s,i),this.end();}this._state=v;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=v):(this._state=le,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=v,this.startLoop(r);}));}createError(e,r,s,i,n){this._loop=false,this._errored=true;let o=new e(s?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(o,this.createError),o.code=n,o[dr]=i,o}};ct.exports=Ne;});var Ue=b((Us,_t)=>{var{Duplex:Rs}=a("stream"),{randomFillSync:yr}=a("crypto"),{types:{isUint8Array:xr}}=a("util"),ut=G(),{EMPTY_BUFFER:Sr,kWebSocket:Er,NOOP:vr}=k(),{isBlob:$,isValidStatusCode:br}=V(),{mask:dt,toBuffer:R}=X(),b=Symbol("kByteLength"),wr=Buffer.alloc(4),fe=8*1024,U,j=fe,w=0,Tr=1,Or=2,Be=class t{constructor(e,r,s){this._extensions=r||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=true,this._compress=false,this._bufferedBytes=0,this._queue=[],this._state=w,this.onerror=vr,this[Er]=void 0;}static frame(e,r){let s,i=false,n=2,o=false;r.mask&&(s=r.maskBuffer||wr,r.generateMask?r.generateMask(s):(j===fe&&(U===void 0&&(U=Buffer.alloc(fe)),yr(U,0,fe),j=0),s[0]=U[j++],s[1]=U[j++],s[2]=U[j++],s[3]=U[j++]),o=(s[0]|s[1]|s[2]|s[3])===0,n=6);let l;typeof e=="string"?(!r.mask||o)&&r[b]!==void 0?l=r[b]:(e=Buffer.from(e),l=e.length):(l=e.length,i=r.mask&&r.readOnly&&!o);let f=l;l>=65536?(n+=8,f=127):l>125&&(n+=2,f=126);let a=Buffer.allocUnsafe(i?l+n:n);return a[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(a[0]|=64),a[1]=f,f===126?a.writeUInt16BE(l,2):f===127&&(a[2]=a[3]=0,a.writeUIntBE(l,4,6)),r.mask?(a[1]|=128,a[n-4]=s[0],a[n-3]=s[1],a[n-2]=s[2],a[n-1]=s[3],o?[a,e]:i?(dt(e,s,a,n,l),[a]):(dt(e,s,e,0,l),[a,e])):[a,e]}close(e,r,s,i){let n;if(e===void 0)n=Sr;else {if(typeof e!="number"||!br(e))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)n=Buffer.allocUnsafe(2),n.writeUInt16BE(e,0);else {let l=Buffer.byteLength(r);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");if(n=Buffer.allocUnsafe(2+l),n.writeUInt16BE(e,0),typeof r=="string")n.write(r,2);else if(xr(r))n.set(r,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let o={[b]:n.length,fin:true,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:false,rsv1:false};this._state!==w?this.enqueue([this.dispatch,n,false,o,i]):this.sendFrame(t.frame(n,o),i);}ping(e,r,s){let i,n;if(typeof e=="string"?(i=Buffer.byteLength(e),n=false):$(e)?(i=e.size,n=false):(e=R(e),i=e.length,n=R.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:i,fin:true,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:false};$(e)?this._state!==w?this.enqueue([this.getBlobData,e,false,o,s]):this.getBlobData(e,false,o,s):this._state!==w?this.enqueue([this.dispatch,e,false,o,s]):this.sendFrame(t.frame(e,o),s);}pong(e,r,s){let i,n;if(typeof e=="string"?(i=Buffer.byteLength(e),n=false):$(e)?(i=e.size,n=false):(e=R(e),i=e.length,n=R.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:i,fin:true,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:false};$(e)?this._state!==w?this.enqueue([this.getBlobData,e,false,o,s]):this.getBlobData(e,false,o,s):this._state!==w?this.enqueue([this.dispatch,e,false,o,s]):this.sendFrame(t.frame(e,o),s);}send(e,r,s){let i=this._extensions[ut.extensionName],n=r.binary?2:1,o=r.compress,l,f;typeof e=="string"?(l=Buffer.byteLength(e),f=false):$(e)?(l=e.size,f=false):(e=R(e),l=e.length,f=R.readOnly),this._firstFragment?(this._firstFragment=false,o&&i&&i.params[i._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=i._threshold),this._compress=o):(o=false,n=0),r.fin&&(this._firstFragment=true);let a={[b]:l,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:f,rsv1:o};$(e)?this._state!==w?this.enqueue([this.getBlobData,e,this._compress,a,s]):this.getBlobData(e,this._compress,a,s):this._state!==w?this.enqueue([this.dispatch,e,this._compress,a,s]):this.dispatch(e,this._compress,a,s);}getBlobData(e,r,s,i){this._bufferedBytes+=s[b],this._state=Or,e.arrayBuffer().then(n=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(Re,this,l,i);return}this._bufferedBytes-=s[b];let o=R(n);r?this.dispatch(o,r,s,i):(this._state=w,this.sendFrame(t.frame(o,s),i),this.dequeue());}).catch(n=>{process.nextTick(kr,this,n,i);});}dispatch(e,r,s,i){if(!r){this.sendFrame(t.frame(e,s),i);return}let n=this._extensions[ut.extensionName];this._bufferedBytes+=s[b],this._state=Tr,n.compress(e,s.fin,(o,l)=>{if(this._socket.destroyed){let f=new Error("The socket was closed while data was being compressed");Re(this,f,i);return}this._bufferedBytes-=s[b],this._state=w,s.readOnly=false,this.sendFrame(t.frame(l,s),i),this.dequeue();});}dequeue(){for(;this._state===w&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][b],Reflect.apply(e[0],this,e.slice(1));}}enqueue(e){this._bufferedBytes+=e[3][b],this._queue.push(e);}sendFrame(e,r){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],r),this._socket.uncork()):this._socket.write(e[0],r);}};_t.exports=Be;function Re(t,e,r){typeof r=="function"&&r(e);for(let s=0;s<t._queue.length;s++){let i=t._queue[s],n=i[i.length-1];typeof n=="function"&&n(e);}}function kr(t,e,r){Re(t,e,r),t.onerror(e);}});var bt=b((Is,vt)=>{var{kForOnEventAttribute:Q,kListener:Ie}=k(),mt=Symbol("kCode"),pt=Symbol("kData"),gt=Symbol("kError"),yt=Symbol("kMessage"),xt=Symbol("kReason"),z=Symbol("kTarget"),St=Symbol("kType"),Et=Symbol("kWasClean"),L=class{constructor(e){this[z]=null,this[St]=e;}get target(){return this[z]}get type(){return this[St]}};Object.defineProperty(L.prototype,"target",{enumerable:true});Object.defineProperty(L.prototype,"type",{enumerable:true});var I=class extends L{constructor(e,r={}){super(e),this[mt]=r.code===void 0?0:r.code,this[xt]=r.reason===void 0?"":r.reason,this[Et]=r.wasClean===void 0?false:r.wasClean;}get code(){return this[mt]}get reason(){return this[xt]}get wasClean(){return this[Et]}};Object.defineProperty(I.prototype,"code",{enumerable:true});Object.defineProperty(I.prototype,"reason",{enumerable:true});Object.defineProperty(I.prototype,"wasClean",{enumerable:true});var H=class extends L{constructor(e,r={}){super(e),this[gt]=r.error===void 0?null:r.error,this[yt]=r.message===void 0?"":r.message;}get error(){return this[gt]}get message(){return this[yt]}};Object.defineProperty(H.prototype,"error",{enumerable:true});Object.defineProperty(H.prototype,"message",{enumerable:true});var J=class extends L{constructor(e,r={}){super(e),this[pt]=r.data===void 0?null:r.data;}get data(){return this[pt]}};Object.defineProperty(J.prototype,"data",{enumerable:true});var Cr={addEventListener(t,e,r={}){for(let i of this.listeners(t))if(!r[Q]&&i[Ie]===e&&!i[Q])return;let s;if(t==="message")s=function(n,o){let l=new J("message",{data:o?n:n.toString()});l[z]=this,he(e,this,l);};else if(t==="close")s=function(n,o){let l=new I("close",{code:n,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[z]=this,he(e,this,l);};else if(t==="error")s=function(n){let o=new H("error",{error:n,message:n.message});o[z]=this,he(e,this,o);};else if(t==="open")s=function(){let n=new L("open");n[z]=this,he(e,this,n);};else return;s[Q]=!!r[Q],s[Ie]=e,r.once?this.once(t,s):this.on(t,s);},removeEventListener(t,e){for(let r of this.listeners(t))if(r[Ie]===e&&!r[Q]){this.removeListener(t,r);break}}};vt.exports={CloseEvent:I,ErrorEvent:H,Event:L,EventTarget:Cr,MessageEvent:J};function he(t,e,r){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,r):t.call(e,r);}});var ce=b((Ds,wt)=>{var{tokenChars:ee}=V();function T(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r);}function Lr(t){let e=Object.create(null),r=Object.create(null),s=false,i=false,n=false,o,l,f=-1,a=-1,h=-1,c=0;for(;c<t.length;c++)if(a=t.charCodeAt(c),o===void 0)if(h===-1&&ee[a]===1)f===-1&&(f=c);else if(c!==0&&(a===32||a===9))h===-1&&f!==-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let g=t.slice(f,h);a===44?(T(e,g,r),r=Object.create(null)):o=g,f=h=-1;}else throw new SyntaxError(`Unexpected character at index ${c}`);else if(l===void 0)if(h===-1&&ee[a]===1)f===-1&&(f=c);else if(a===32||a===9)h===-1&&f!==-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c),T(r,t.slice(f,h),true),a===44&&(T(e,o,r),r=Object.create(null),o=void 0),f=h=-1;}else if(a===61&&f!==-1&&h===-1)l=t.slice(f,c),f=h=-1;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(i){if(ee[a]!==1)throw new SyntaxError(`Unexpected character at index ${c}`);f===-1?f=c:s||(s=true),i=false;}else if(n)if(ee[a]===1)f===-1&&(f=c);else if(a===34&&f!==-1)n=false,h=c;else if(a===92)i=true;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(a===34&&t.charCodeAt(c-1)===61)n=true;else if(h===-1&&ee[a]===1)f===-1&&(f=c);else if(f!==-1&&(a===32||a===9))h===-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let g=t.slice(f,h);s&&(g=g.replace(/\\/g,""),s=false),T(r,l,g),a===44&&(T(e,o,r),r=Object.create(null),o=void 0),l=void 0,f=h=-1;}else throw new SyntaxError(`Unexpected character at index ${c}`);if(f===-1||n||a===32||a===9)throw new SyntaxError("Unexpected end of input");h===-1&&(h=c);let _=t.slice(f,h);return o===void 0?T(e,_,r):(l===void 0?T(r,_,true):s?T(r,l,_.replace(/\\/g,"")):T(r,l,_),T(e,o,r)),e}function Nr(t){return Object.keys(t).map(e=>{let r=t[e];return Array.isArray(r)||(r=[r]),r.map(s=>[e].concat(Object.keys(s).map(i=>{let n=s[i];return Array.isArray(n)||(n=[n]),n.map(o=>o===true?i:`${i}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}wt.exports={format:Nr,parse:Lr};});var me=b((As,Dt)=>{var Pr=a("events"),Br=a("https"),Rr=a("http"),kt=a("net"),Ur=a("tls"),{randomBytes:Ir,createHash:Dr}=a("crypto"),{Duplex:Fs,Readable:Ms}=a("stream"),{URL:De}=a("url"),B=G(),Fr=Pe(),Mr=Ue(),{isBlob:Ar}=V(),{BINARY_TYPES:Tt,CLOSE_TIMEOUT:Wr,EMPTY_BUFFER:ue,GUID:qr,kForOnEventAttribute:Fe,kListener:Gr,kStatusCode:Vr,kWebSocket:y,NOOP:Ct}=k(),{EventTarget:{addEventListener:$r,removeEventListener:jr}}=bt(),{format:zr,parse:Hr}=ce(),{toBuffer:Yr}=X(),Lt=Symbol("kAborted"),Me=[8,13],N=["CONNECTING","OPEN","CLOSING","CLOSED"],Kr=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,d=class t extends Pr{constructor(e,r,s){super(),this._binaryType=Tt[0],this._closeCode=1006,this._closeFrameReceived=false,this._closeFrameSent=false,this._closeMessage=ue,this._closeTimer=null,this._errorEmitted=false,this._extensions={},this._paused=false,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=false,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(s=r,r=[]):r=[r]),Nt(this,e,r,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=true);}get binaryType(){return this._binaryType}set binaryType(e){Tt.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e));}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,r,s){let i=new Fr({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:s.maxBufferedChunks,maxFragments:s.maxFragments,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),n=new Mr(e,this._extensions,s.generateMask);this._receiver=i,this._sender=n,this._socket=e,i[y]=this,n[y]=this,e[y]=this,i.on("conclude",Qr),i.on("drain",Jr),i.on("error",es),i.on("message",ts),i.on("ping",rs),i.on("pong",ss),n.onerror=is,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),r.length>0&&e.unshift(r),e.on("close",Rt),e.on("data",_e),e.on("end",Ut),e.on("error",It),this._readyState=t.OPEN,this.emit("open");}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[B.extensionName]&&this._extensions[B.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);}close(e,r){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,r,!this._isServer,s=>{s||(this._closeFrameSent=true,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end());}),Bt(this);}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=true,this._socket.pause());}ping(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=r=void 0):typeof r=="function"&&(s=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ae(this,e,s);return}r===void 0&&(r=!this._isServer),this._sender.ping(e||ue,r,s);}pong(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=r=void 0):typeof r=="function"&&(s=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ae(this,e,s);return}r===void 0&&(r=!this._isServer),this._sender.pong(e||ue,r,s);}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=false,this._receiver._writableState.needDrain||this._socket.resume());}send(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(s=r,r={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Ae(this,e,s);return}let i={binary:typeof e!="string",mask:!this._isServer,compress:true,fin:true,...r};this._extensions[B.extensionName]||(i.compress=false),this._sender.send(e||ue,i,s);}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy());}}};Object.defineProperty(d,"CONNECTING",{enumerable:true,value:N.indexOf("CONNECTING")});Object.defineProperty(d.prototype,"CONNECTING",{enumerable:true,value:N.indexOf("CONNECTING")});Object.defineProperty(d,"OPEN",{enumerable:true,value:N.indexOf("OPEN")});Object.defineProperty(d.prototype,"OPEN",{enumerable:true,value:N.indexOf("OPEN")});Object.defineProperty(d,"CLOSING",{enumerable:true,value:N.indexOf("CLOSING")});Object.defineProperty(d.prototype,"CLOSING",{enumerable:true,value:N.indexOf("CLOSING")});Object.defineProperty(d,"CLOSED",{enumerable:true,value:N.indexOf("CLOSED")});Object.defineProperty(d.prototype,"CLOSED",{enumerable:true,value:N.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(d.prototype,t,{enumerable:true});});["open","error","close","message"].forEach(t=>{Object.defineProperty(d.prototype,`on${t}`,{enumerable:true,get(){for(let e of this.listeners(t))if(e[Fe])return e[Gr];return null},set(e){for(let r of this.listeners(t))if(r[Fe]){this.removeListener(t,r);break}typeof e=="function"&&this.addEventListener(t,e,{[Fe]:true});}});});d.prototype.addEventListener=$r;d.prototype.removeEventListener=jr;Dt.exports=d;function Nt(t,e,r,s){let i={allowSynchronousEvents:true,autoPong:true,closeTimeout:Wr,protocolVersion:Me[1],maxBufferedChunks:1048576,maxFragments:131072,maxPayload:104857600,skipUTF8Validation:false,perMessageDeflate:true,followRedirects:false,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=i.autoPong,t._closeTimeout=i.closeTimeout,!Me.includes(i.protocolVersion))throw new RangeError(`Unsupported protocol version: ${i.protocolVersion} (supported versions: ${Me.join(", ")})`);let n;if(e instanceof De)n=e;else try{n=new De(e);}catch{throw new SyntaxError(`Invalid URL: ${e}`)}n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),t._url=n.href;let o=n.protocol==="wss:",l=n.protocol==="ws+unix:",f;if(n.protocol!=="ws:"&&!o&&!l?f=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!n.pathname?f="The URL's pathname is empty":n.hash&&(f="The URL contains a fragment identifier"),f){let u=new SyntaxError(f);if(t._redirects===0)throw u;de(t,u);return}let a=o?443:80,h=Ir(16).toString("base64"),c=o?Br.request:Rr.request,_=new Set,g;if(i.createConnection=i.createConnection||(o?Zr:Xr),i.defaultPort=i.defaultPort||a,i.port=n.port||a,i.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,i.headers={...i.headers,"Sec-WebSocket-Version":i.protocolVersion,"Sec-WebSocket-Key":h,Connection:"Upgrade",Upgrade:"websocket"},i.path=n.pathname+n.search,i.timeout=i.handshakeTimeout,i.perMessageDeflate&&(g=new B({...i.perMessageDeflate,isServer:false,maxPayload:i.maxPayload}),i.headers["Sec-WebSocket-Extensions"]=zr({[B.extensionName]:g.offer()})),r.length){for(let u of r){if(typeof u!="string"||!Kr.test(u)||_.has(u))throw new SyntaxError("An invalid or duplicated subprotocol was specified");_.add(u);}i.headers["Sec-WebSocket-Protocol"]=r.join(",");}if(i.origin&&(i.protocolVersion<13?i.headers["Sec-WebSocket-Origin"]=i.origin:i.headers.Origin=i.origin),(n.username||n.password)&&(i.auth=`${n.username}:${n.password}`),l){let u=i.path.split(":");i.socketPath=u[0],i.path=u[1];}let m;if(i.followRedirects){if(t._redirects===0){t._originalIpc=l,t._originalSecure=o,t._originalHostOrSocketPath=l?i.socketPath:n.host;let u=s&&s.headers;if(s={...s,headers:{}},u)for(let[x,M]of Object.entries(u))s.headers[x.toLowerCase()]=M;}else if(t.listenerCount("redirect")===0){let u=l?t._originalIpc?i.socketPath===t._originalHostOrSocketPath:false:t._originalIpc?false:n.host===t._originalHostOrSocketPath;(!u||t._originalSecure&&!o)&&(delete i.headers.authorization,delete i.headers.cookie,u||delete i.headers.host,i.auth=void 0);}i.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(i.auth).toString("base64")),m=t._req=c(i),t._redirects&&t.emit("redirect",t.url,m);}else m=t._req=c(i);i.timeout&&m.on("timeout",()=>{E(t,m,"Opening handshake has timed out");}),m.on("error",u=>{m===null||m[Lt]||(m=t._req=null,de(t,u));}),m.on("response",u=>{let x=u.headers.location,M=u.statusCode;if(x&&i.followRedirects&&M>=300&&M<400){if(++t._redirects>i.maxRedirects){E(t,m,"Maximum redirects exceeded");return}m.abort();let Y;try{Y=new De(x,e);}catch{let A=new SyntaxError(`Invalid URL: ${x}`);de(t,A);return}Nt(t,Y,r,s);}else t.emit("unexpected-response",m,u)||E(t,m,`Unexpected server response: ${u.statusCode}`);}),m.on("upgrade",(u,x,M)=>{if(t.emit("upgrade",u),t.readyState!==d.CONNECTING)return;m=t._req=null;let Y=u.headers.upgrade;if(Y===void 0||Y.toLowerCase()!=="websocket"){E(t,x,"Invalid Upgrade header");return}let Ve=Dr("sha1").update(h+qr).digest("base64");if(u.headers["sec-websocket-accept"]!==Ve){E(t,x,"Invalid Sec-WebSocket-Accept header");return}let A=u.headers["sec-websocket-protocol"],K;if(A!==void 0?_.size?_.has(A)||(K="Server sent an invalid subprotocol"):K="Server sent a subprotocol but none was requested":_.size&&(K="Server sent no subprotocol"),K){E(t,x,K);return}A&&(t._protocol=A);let $e=u.headers["sec-websocket-extensions"];if($e!==void 0){if(!g){E(t,x,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let xe;try{xe=Hr($e);}catch{E(t,x,"Invalid Sec-WebSocket-Extensions header");return}let je=Object.keys(xe);if(je.length!==1||je[0]!==B.extensionName){E(t,x,"Server indicated an extension that was not requested");return}try{g.accept(xe[B.extensionName]);}catch{E(t,x,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[B.extensionName]=g;}t.setSocket(x,M,{allowSynchronousEvents:i.allowSynchronousEvents,generateMask:i.generateMask,maxBufferedChunks:i.maxBufferedChunks,maxFragments:i.maxFragments,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation});}),i.finishRequest?i.finishRequest(m,t):m.end();}function de(t,e){t._readyState=d.CLOSING,t._errorEmitted=true,t.emit("error",e),t.emitClose();}function Xr(t){return t.path=t.socketPath,kt.connect(t)}function Zr(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=kt.isIP(t.host)?"":t.host),Ur.connect(t)}function E(t,e,r){t._readyState=d.CLOSING;let s=new Error(r);Error.captureStackTrace(s,E),e.setHeader?(e[Lt]=true,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(de,t,s)):(e.destroy(s),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)));}function Ae(t,e,r){if(e){let s=Ar(e)?e.size:Yr(e).length;t._socket?t._sender._bufferedBytes+=s:t._bufferedAmount+=s;}if(r){let s=new Error(`WebSocket is not open: readyState ${t.readyState} (${N[t.readyState]})`);process.nextTick(r,s);}}function Qr(t,e){let r=this[y];r._closeFrameReceived=true,r._closeMessage=e,r._closeCode=t,r._socket[y]!==void 0&&(r._socket.removeListener("data",_e),process.nextTick(Pt,r._socket),t===1005?r.close():r.close(t,e));}function Jr(){let t=this[y];t.isPaused||t._socket.resume();}function es(t){let e=this[y];e._socket[y]!==void 0&&(e._socket.removeListener("data",_e),process.nextTick(Pt,e._socket),e.close(t[Vr])),e._errorEmitted||(e._errorEmitted=true,e.emit("error",t));}function Ot(){this[y].emitClose();}function ts(t,e){this[y].emit("message",t,e);}function rs(t){let e=this[y];e._autoPong&&e.pong(t,!this._isServer,Ct),e.emit("ping",t);}function ss(t){this[y].emit("pong",t);}function Pt(t){t.resume();}function is(t){let e=this[y];e.readyState!==d.CLOSED&&(e.readyState===d.OPEN&&(e._readyState=d.CLOSING,Bt(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=true,e.emit("error",t)));}function Bt(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout);}function Rt(){let t=this[y];if(this.removeListener("close",Rt),this.removeListener("data",_e),this.removeListener("end",Ut),t._readyState=d.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e);}t._receiver.end(),this[y]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Ot),t._receiver.on("finish",Ot));}function _e(t){this[y]._receiver.write(t)||this.pause();}function Ut(){let t=this[y];t._readyState=d.CLOSING,t._receiver.end(),this.end();}function It(){let t=this[y];this.removeListener("error",It),this.on("error",Ct),t&&(t._readyState=d.CLOSING,this.destroy());}});var Wt=b((qs,At)=>{me();var {Duplex:ns}=a("stream");function Ft(t){t.emit("close");}function os(){!this.destroyed&&this._writableState.finished&&this.destroy();}function Mt(t){this.removeListener("error",Mt),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t);}function as(t,e){let r=true,s=new ns({...e,autoDestroy:false,emitClose:false,objectMode:false,writableObjectMode:false});return t.on("message",function(n,o){let l=!o&&s._readableState.objectMode?n.toString():n;s.push(l)||t.pause();}),t.once("error",function(n){s.destroyed||(r=false,s.destroy(n));}),t.once("close",function(){s.destroyed||s.push(null);}),s._destroy=function(i,n){if(t.readyState===t.CLOSED){n(i),process.nextTick(Ft,s);return}let o=false;t.once("error",function(f){o=true,n(f);}),t.once("close",function(){o||n(i),process.nextTick(Ft,s);}),r&&t.terminate();},s._final=function(i){if(t.readyState===t.CONNECTING){t.once("open",function(){s._final(i);});return}t._socket!==null&&(t._socket._writableState.finished?(i(),s._readableState.endEmitted&&s.destroy()):(t._socket.once("finish",function(){i();}),t.close()));},s._read=function(){t.isPaused&&t.resume();},s._write=function(i,n,o){if(t.readyState===t.CONNECTING){t.once("open",function(){s._write(i,n,o);});return}t.send(i,o);},s.on("end",os),s.on("error",Mt),s}At.exports=as;});var We=b((Gs,qt)=>{var{tokenChars:ls}=V();function fs(t){let e=new Set,r=-1,s=-1,i=0;for(i;i<t.length;i++){let o=t.charCodeAt(i);if(s===-1&&ls[o]===1)r===-1&&(r=i);else if(i!==0&&(o===32||o===9))s===-1&&r!==-1&&(s=i);else if(o===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${i}`);s===-1&&(s=i);let l=t.slice(r,s);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),r=s=-1;}else throw new SyntaxError(`Unexpected character at index ${i}`)}if(r===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let n=t.slice(r,i);if(e.has(n))throw new SyntaxError(`The "${n}" subprotocol is duplicated`);return e.add(n),e}qt.exports={parse:fs};});var Yt=b(($s,Ht)=>{var hs=a("events"),pe=a("http"),{Duplex:Vs}=a("stream"),{createHash:cs}=a("crypto"),Gt=ce(),D=G(),us=We(),ds=me(),{CLOSE_TIMEOUT:_s,GUID:ms,kWebSocket:ps}=k(),gs=/^[+/0-9A-Za-z]{22}==$/,Vt=0,$t=1,zt=2,qe=class extends hs{constructor(e,r){if(super(),e={allowSynchronousEvents:true,autoPong:true,maxBufferedChunks:1024*1024,maxFragments:128*1024,maxPayload:100*1024*1024,skipUTF8Validation:false,perMessageDeflate:false,handleProtocols:null,clientTracking:true,closeTimeout:_s,verifyClient:null,noServer:false,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ds,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=pe.createServer((s,i)=>{let n=pe.STATUS_CODES[426];i.writeHead(426,{"Content-Length":n.length,"Content-Type":"text/plain"}),i.end(n);}),this._server.listen(e.port,e.host,e.backlog,r)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=ys(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(i,n,o)=>{this.handleUpgrade(i,n,o,s);}});}e.perMessageDeflate===true&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=false),this.options=e,this._state=Vt;}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===zt){e&&this.once("close",()=>{e(new Error("The server is not running"));}),process.nextTick(te,this);return}if(e&&this.once("close",e),this._state!==$t)if(this._state=$t,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=true:process.nextTick(te,this):process.nextTick(te,this);else {let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{te(this);});}}shouldHandle(e){if(this.options.path){let r=e.url.indexOf("?");if((r!==-1?e.url.slice(0,r):e.url)!==this.options.path)return false}return true}handleUpgrade(e,r,s,i){r.on("error",jt);let n=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){F(this,e,r,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){F(this,e,r,400,"Invalid Upgrade header");return}if(n===void 0||!gs.test(n)){F(this,e,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){F(this,e,r,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){re(r,400);return}let f=e.headers["sec-websocket-protocol"],a=new Set;if(f!==void 0)try{a=us.parse(f);}catch{F(this,e,r,400,"Invalid Sec-WebSocket-Protocol header");return}let h=e.headers["sec-websocket-extensions"],c={};if(this.options.perMessageDeflate&&h!==void 0){let _=new D({...this.options.perMessageDeflate,isServer:true,maxPayload:this.options.maxPayload});try{let g=Gt.parse(h);g[D.extensionName]&&(_.accept(g[D.extensionName]),c[D.extensionName]=_);}catch{F(this,e,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let _={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(_,(g,m,u,x)=>{if(!g)return re(r,m||401,u,x);this.completeUpgrade(c,n,a,e,r,s,i);});return}if(!this.options.verifyClient(_))return re(r,401)}this.completeUpgrade(c,n,a,e,r,s,i);}completeUpgrade(e,r,s,i,n,o,l){if(!n.readable||!n.writable)return n.destroy();if(n[ps])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Vt)return re(n,503);let a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${cs("sha1").update(r+ms).digest("base64")}`],h=new this.options.WebSocket(null,void 0,this.options);if(s.size){let c=this.options.handleProtocols?this.options.handleProtocols(s,i):s.values().next().value;c&&(a.push(`Sec-WebSocket-Protocol: ${c}`),h._protocol=c);}if(e[D.extensionName]){let c=e[D.extensionName].params,_=Gt.format({[D.extensionName]:[c]});a.push(`Sec-WebSocket-Extensions: ${_}`),h._extensions=e;}this.emit("headers",a,i),n.write(a.concat(`\r
|
|
4
|
+
`).join(`\r
|
|
5
|
+
`)),n.removeListener("error",jt),h.setSocket(n,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(h),h.on("close",()=>{this.clients.delete(h),this._shouldEmitClose&&!this.clients.size&&process.nextTick(te,this);})),l(h,i);}};Ht.exports=qe;function ys(t,e){for(let r of Object.keys(e))t.on(r,e[r]);return function(){for(let s of Object.keys(e))t.removeListener(s,e[s]);}}function te(t){t._state=zt,t.emit("close");}function jt(){this.destroy();}function re(t,e,r,s){r=r||pe.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...s},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${pe.STATUS_CODES[e]}\r
|
|
6
|
+
`+Object.keys(s).map(i=>`${i}: ${s[i]}`).join(`\r
|
|
7
|
+
`)+`\r
|
|
8
|
+
\r
|
|
9
|
+
`+r);}function F(t,e,r,s,i,n){if(t.listenerCount("wsClientError")){let o=new Error(i);Error.captureStackTrace(o,F),t.emit("wsClientError",o,r,e);}else re(r,s,i,n);}});var Zt=b((Hs,Xt)=>{Xt.exports={};});d(Wt(),1);d(ce(),1);d(G(),1);d(Pe(),1);d(Ue(),1);d(We(),1);var Kt=d(me(),1);d(Yt(),1);var ge=Kt.default;var ye=globalThis;ye.WebSocket||=ge;ye.window||=globalThis;ye.self||=globalThis;ye.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:true},{type:2,value:"InternalApp",isEnabled:true,isValid:true},{type:2,value:"InternalAppContext",isEnabled:true,isValid:true},{type:2,value:"InternalStdoutContext",isEnabled:true,isValid:true},{type:2,value:"InternalStderrContext",isEnabled:true,isValid:true},{type:2,value:"InternalStdinContext",isEnabled:true,isValid:true},{type:2,value:"InternalFocusContext",isEnabled:true,isValid:true}];var Ge=d(Zt(),1),Os=async()=>new Promise(t=>{let e=new ge("ws://localhost:8097"),r=setTimeout(()=>{e.terminate(),t(false);},2e3);r.unref(),e.on("open",()=>{clearTimeout(r),e.terminate(),t(true);}),e.on("error",()=>{clearTimeout(r),e.terminate(),t(false);});});await Os()?(Ge.default.initialize(),Ge.default.connectToDevTools()):console.warn(`DEV is set to true, but the React DevTools server is not running. Start it with:
|
|
10
|
+
|
|
11
|
+
$ npx react-devtools
|
|
12
|
+
`);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import {createRequire}from'node:module';import {a as a$2}from'./chunk-IXBYLSGB.mjs';import {a as a$3}from'./chunk-QICYK6XT.mjs';import {c}from'./chunk-CWNYWHJ2.mjs';import'./chunk-6U6H22OR.mjs';import {a,m,d as d$1,f as f$1,e,g,c as c$1,i,k,j,h as h$1}from'./chunk-2VSGDT7T.mjs';import {a as a$1}from'./chunk-IYLF56WL.mjs';import {d as d$2}from'./chunk-ZN6MI2TU.mjs';import {d,a as a$4}from'./chunk-MHNEFL35.mjs';import'./chunk-S3M2RTHJ.mjs';import'./chunk-2YKSIUIN.mjs';import*as f from'fs';import*as te from'os';import*as h from'path';import {execFile}from'child_process';import {createRequire as createRequire$1}from'module';import'crypto';import'fs/promises';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
|
|
2
|
+
createRequire(import.meta.url);
|
|
3
|
+
var se=16e3,ie=new Set(["Locator","ElementHandle","JSHandle","Frame","Page","BrowserContext","Browser","CDPSession"]),L=e=>{try{return String(e)}catch{return "[unserializable]"}},z=(e,n={})=>{let r=new WeakSet,i=n.maxStringLength??se,a=n.spaces??2;return JSON.stringify(e,(u,t)=>{if(t===void 0)return;if(t===null)return null;switch(typeof t){case "bigint":return `${t}n`;case "function":return `[Function: ${t.name||"anonymous"}]`;case "symbol":return L(t);case "string":return t.length>i?`${t.slice(0,i)}... [truncated ${t.length-i} chars]`:t;case "object":break;default:return t}let d=t;if(r.has(d))return "[Circular]";if(r.add(d),Buffer.isBuffer(t))return `[Buffer: ${t.length} bytes]`;if(t instanceof RegExp)return L(t);if(t instanceof Error)return {error:t.name,message:t.message,stack:t.stack};if(t instanceof Map)return Array.from(t.entries());if(t instanceof Set)return Array.from(t.values());let m=t.constructor?.name;return typeof m=="string"&&ie.has(m)?`[${m}: ${L(t)}]`:t},a)};var le=createRequire$1(import.meta.url),o=(e,n,r,i,a,u)=>{e.push({id:n,status:r,title:i,detail:a,...u?{data:u}:{}});},Z=(e,n)=>{try{if(!f.existsSync(e)){if(!n)return {ok:!1,detail:"directory does not exist"};f.mkdirSync(e,{recursive:!0});}return f.accessSync(e,f.constants.W_OK),{ok:!0,detail:"writable"}}catch(r){return {ok:false,detail:r instanceof Error?r.message:String(r)}}},Y=(e,n)=>{try{return le.resolve(n??e),!0}catch{return false}},p=e=>{try{return f.readFileSync(e,"utf-8").split(/\r?\n/,1)[0]??null}catch{return null}},fe=()=>{let e=process.env.ANDROID_HOME??process.env.ANDROID_SDK_ROOT;return e?h.join(e,"platform-tools","adb"):"adb"},ee=(e,n,r=4e3)=>new Promise(i=>{execFile(e,n,{timeout:r},(a,u,t)=>{let d=`${u??""}${t??""}`.split(/\r?\n/).find(m=>m.trim())??"";if(a){i({ok:false,line:d||(a instanceof Error?a.message:String(a))});return}i({ok:true,line:d});});}),ue=async(e$1={})=>{let n=h.resolve(e$1.cwd??process.cwd()),r=[];o(r,"runtime","info","Runtime","Node and OS detected",{node:process.version,platform:`${process.platform}-${process.arch}`,home:te.homedir()});let i$1=null;try{i$1=c({searchCwd:n}),o(r,"config","pass","Config",i$1.configPath?`loaded ${i$1.configPath}`:"no config found; using defaults",{configPath:i$1.configPath,tests:i$1.config.tests,browser:i$1.config.browser.engine});}catch(s){o(r,"config","fail","Config",s instanceof Error?s.message:String(s));}let a$5=i$1?.config,u=a(),t=Z(u,!!e$1.fix);o(r,"home-dir",t.ok?"pass":"warn","Home Directory",`${u}: ${t.detail}${e$1.fix?" (fix enabled)":""}`),e$1.fix&&t.ok&&m();let d$2=h.resolve(n,a$5?.output.dir??d),m$1=Z(d$2,!!e$1.fix);o(r,"output-dir",m$1.ok?"pass":"warn","Output Directory",`${d$2}: ${m$1.detail}`),o(r,"axe-core","pass","axe-core","bundled into skeptic-cli; accessibility audits can run without a project-level @axe-core/playwright install");let N=Y("accessibility-checker-engine","accessibility-checker-engine/ace.js"),B=a$5?.observability.accessibilityDualEngine===true;o(r,"ibm-equal-access",N?"pass":B?"warn":"info","IBM Equal Access",N?"installed":B?"optional dependency missing; dual-engine accessibility will fall back to axe-core":"not installed; only required when observability.accessibilityDualEngine is enabled");let I=Y("better-sqlite3"),q=a$5?.auth.cookies===true;o(r,"better-sqlite3",I?"pass":q?"warn":"info","Cookie SQLite Reader",I?"installed":q?"optional dependency missing; Chromium/Firefox cookie extraction may be limited":"not installed; only required when auth.cookies is enabled");try{let s=await a$1();for(let c of ["chromium","firefox","webkit"])try{let l=s[c].executablePath();o(r,`playwright-${c}`,f.existsSync(l)?"pass":"warn",`Playwright ${c}`,f.existsSync(l)?`browser executable found at ${l}`:`browser executable not found at ${l}; run skeptic browsers install ${c}`,{executablePath:l});}catch(l){o(r,`playwright-${c}`,"warn",`Playwright ${c}`,l instanceof Error?l.message:String(l));}if(!e$1.quick&&a$5)try{await(await s[a$5.browser.engine].launch({headless:a$5.browser.headless})).close(),o(r,"playwright-launch","pass","Browser Launch",`${a$5.browser.engine} launched and closed successfully`);}catch(c){o(r,"playwright-launch","fail","Browser Launch",c instanceof Error?c.message:String(c));}}catch(s){o(r,"playwright","fail","Playwright",s instanceof Error?s.message:String(s));}let P=d$1(),w=p(P),b=w?Number(w):null,T=b!==null&&Number.isFinite(b)&&a$2(b);o(r,"daemon",T?"pass":w?"warn":"info","Daemon",T?`running at PID ${b}`:w?`stale or inaccessible PID sidecar at ${P}`:"not running",{socketPath:c$1(),pidPath:P,versionPath:e(),enginePath:f$1(),logPath:g(),version:p(e()),engine:p(f$1())});let $=i(),y=p($),k$1=y?Number(y):null,F=k$1!==null&&Number.isFinite(k$1)&&a$2(k$1);o(r,"session-daemon",F?"pass":y?"warn":"info","Session Daemon",F?`running at PID ${k$1}`:y?`stale or inaccessible PID sidecar at ${$}`:"not running",{socketPath:h$1(),pidPath:$,versionPath:j(),enginePath:k(),version:p(j()),engine:p(k())});let S=a$3();o(r,"cookies",S.length>0?"pass":"warn","Cookie Profiles",S.length>0?`detected ${S.length} supported browser profile(s)`:"no supported browser profiles detected",{browsers:S.map(s=>({browser:s.browser,profilePath:s.profilePath}))});let D=fe(),x=await ee(D,["version"]);if(o(r,"adb",x.ok?"pass":"info","Android adb",x.ok?`${x.line||"adb available"} (${D})`:`adb not found (${D}); install Android platform-tools or set ANDROID_HOME to enable Android (mobile) QA`,{adbPath:D}),process.platform==="darwin"){let{resolveDeveloperDir:s}=await import('./ios-tools-WK66CQ7Q.mjs'),c=s();o(r,"simctl",c?"pass":"info","iOS simctl",c?`full Xcode found (${c})`:"no full Xcode found; --platform ios-sim needs Xcode (Command Line Tools lack simctl)");let l=await ee("axe",["--version"]);o(r,"axe",l.ok?"pass":"info","iOS axe",l.ok?`axe ${l.line||"available"} (--platform ios-sim)`:"axe not installed; --platform ios-sim needs it \u2014 `brew install cameroncooke/axe/axe`");}let j$1={pass:0,warn:0,fail:0,info:0};for(let s of r)j$1[s.status]+=1;return {product:a$4,version:"1.0.0",cwd:n,platform:{os:process.platform,arch:process.arch,node:process.version},summary:j$1,checks:r}},de=e=>e==="pass"?"PASS":e==="warn"?"WARN":e==="fail"?"FAIL":"INFO",me=e=>{d$2.raw(`${a$4} doctor`),d$2.raw(`cwd: ${e.cwd}`),d$2.raw(`runtime: ${e.platform.os}-${e.platform.arch}, ${e.platform.node}`),d$2.raw(`summary: ${e.summary.pass} pass, ${e.summary.warn} warn, ${e.summary.fail} fail, ${e.summary.info} info`),d$2.raw("");for(let n of e.checks)d$2.raw(`${de(n.status).padEnd(4)} ${n.title}: ${n.detail}`);},_e=async(e={})=>{let n=await ue(e);e.json?process.stdout.write(`${z(n)}
|
|
4
|
+
`):me(n),n.summary.fail>0&&(process.exitCode=1);};export{ue as collectDoctorReport,_e as runDoctor};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {createRequire}from'node:module';export{d as cookiesFirstUseNotice,a as detectBrowsers,e as extractAndInjectCookies,b as extractCookies,c as mergeCookies}from'./chunk-QICYK6XT.mjs';import'./chunk-ZN6MI2TU.mjs';import'./chunk-MHNEFL35.mjs';import'./chunk-S3M2RTHJ.mjs';import'./chunk-2YKSIUIN.mjs';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
|
|
2
|
+
createRequire(import.meta.url);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {createRequire}from'node:module';export{a as HtmlReporter}from'./chunk-YB25SMQ2.mjs';import'./chunk-EYVJTUBL.mjs';import'./chunk-ZN6MI2TU.mjs';import'./chunk-MHNEFL35.mjs';import'./chunk-S3M2RTHJ.mjs';import'./chunk-2YKSIUIN.mjs';/*! @license skeptic-cli — see LICENSES.md for third-party attributions */
|
|
2
|
+
createRequire(import.meta.url);
|
package/dist/index.d.ts
CHANGED
|
@@ -58,23 +58,6 @@ interface PrewarmOptions {
|
|
|
58
58
|
*/
|
|
59
59
|
declare const prewarmDaemonIfNeeded: (argv: readonly string[], opts: PrewarmOptions) => Promise<boolean>;
|
|
60
60
|
|
|
61
|
-
type AIProvider = "gemini" | "openai" | "anthropic";
|
|
62
|
-
/**
|
|
63
|
-
* Result of an AI call. `retryCount` is the number of transient retries that
|
|
64
|
-
* `withRetry` performed before success; 0 means the first attempt worked.
|
|
65
|
-
* Surfacing this lets step handlers add a `StepResult.warnings` entry like
|
|
66
|
-
* "AI retried 2× before success" so users can see when CI was rescued.
|
|
67
|
-
*/
|
|
68
|
-
interface AIResult {
|
|
69
|
-
text: string;
|
|
70
|
-
retryCount: number;
|
|
71
|
-
}
|
|
72
|
-
interface AIClient {
|
|
73
|
-
readonly provider: AIProvider;
|
|
74
|
-
analyzeImage(imageBuffer: Buffer, prompt: string, temperature?: number): Promise<AIResult>;
|
|
75
|
-
generateText(prompt: string, system?: string, temperature?: number): Promise<AIResult>;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
61
|
/**
|
|
79
62
|
* ARIA snapshot-ref entry — one record per minted ref.
|
|
80
63
|
*
|
|
@@ -156,8 +139,6 @@ declare class ExecutionContext {
|
|
|
156
139
|
lastElement: Locator | null;
|
|
157
140
|
readonly testDir: string;
|
|
158
141
|
readonly sourceDir: string;
|
|
159
|
-
readonly aiClient?: AIClient;
|
|
160
|
-
readonly aiProvider?: AIProvider;
|
|
161
142
|
readonly defaultTimeout: number;
|
|
162
143
|
activeTimeout: number;
|
|
163
144
|
readonly collectors: Map<CollectorName, Collector>;
|
|
@@ -186,7 +167,7 @@ declare class ExecutionContext {
|
|
|
186
167
|
* aborted test body.
|
|
187
168
|
*/
|
|
188
169
|
inTeardown: boolean;
|
|
189
|
-
constructor(page: Page, baseUrl: string, testDir?: string, sourceDir?: string,
|
|
170
|
+
constructor(page: Page, baseUrl: string, testDir?: string, sourceDir?: string, defaultTimeout?: number, collectors?: Collector[], artifactConfig?: ArtifactRuntimeConfig);
|
|
190
171
|
resolveUrl(path: string): string;
|
|
191
172
|
addScreenshot(path: string): void;
|
|
192
173
|
}
|
|
@@ -266,6 +247,19 @@ interface ConsoleMessage {
|
|
|
266
247
|
columnNumber?: number;
|
|
267
248
|
};
|
|
268
249
|
timestamp: number;
|
|
250
|
+
/**
|
|
251
|
+
* Marks synthesized evidence entries that did NOT arrive via the page's
|
|
252
|
+
* `console` event: a JS dialog skeptic captured then auto-dismissed
|
|
253
|
+
* (`"dialog"`, recorded at warning level), or a renderer process crash
|
|
254
|
+
* (`"crash"`, recorded at error level). Absent for ordinary console/pageerror
|
|
255
|
+
* messages so existing consumers stay unaffected.
|
|
256
|
+
*/
|
|
257
|
+
kind?: "dialog" | "crash";
|
|
258
|
+
/** Present only when `kind === "dialog"` — the dialog's type and default value. */
|
|
259
|
+
dialog?: {
|
|
260
|
+
type: string;
|
|
261
|
+
defaultValue?: string;
|
|
262
|
+
};
|
|
269
263
|
}
|
|
270
264
|
interface ConsoleSnapshot {
|
|
271
265
|
messages: ConsoleMessage[];
|
|
@@ -419,7 +413,8 @@ interface SnapshotTree {
|
|
|
419
413
|
rawYaml: string;
|
|
420
414
|
refs: Map<string, AriaRefEntry>;
|
|
421
415
|
stats: SnapshotStats;
|
|
422
|
-
byRef(
|
|
416
|
+
/** Always async — `await tree.byRef("eN")` for every ref kind. */
|
|
417
|
+
byRef(ref: string): Promise<Locator>;
|
|
423
418
|
byRole(role: string, opts?: ByRoleOptions): Locator;
|
|
424
419
|
byText(text: string | RegExp): Locator;
|
|
425
420
|
byTestId(id: string): Locator;
|
|
@@ -445,25 +440,6 @@ interface SnapshotStats {
|
|
|
445
440
|
cursorInteractiveRefs: number;
|
|
446
441
|
}
|
|
447
442
|
|
|
448
|
-
interface AiAssertOpts {
|
|
449
|
-
target?: Locator;
|
|
450
|
-
}
|
|
451
|
-
interface AiDefectsOpts extends AiAssertOpts {
|
|
452
|
-
/** Future hook for severity filtering — wired in B5 along with the AI rewrite. */
|
|
453
|
-
minSeverity?: "low" | "medium" | "high" | "critical";
|
|
454
|
-
}
|
|
455
|
-
interface AiExtractOpts<T> extends AiAssertOpts {
|
|
456
|
-
/** Optional Zod-or-similar schema. We accept any object exposing `.parse(value)`. */
|
|
457
|
-
schema?: {
|
|
458
|
-
parse: (value: unknown) => T;
|
|
459
|
-
};
|
|
460
|
-
}
|
|
461
|
-
interface AiFixture {
|
|
462
|
-
assert(claim: string, opts?: AiAssertOpts): Promise<void>;
|
|
463
|
-
assertNoDefects(opts?: AiDefectsOpts): Promise<void>;
|
|
464
|
-
extract<T = string>(query: string, opts?: AiExtractOpts<T>): Promise<T>;
|
|
465
|
-
}
|
|
466
|
-
|
|
467
443
|
interface PerfThresholds {
|
|
468
444
|
/** Largest Contentful Paint, e.g. "<2500ms". */
|
|
469
445
|
lcp?: string;
|
|
@@ -502,8 +478,55 @@ interface ObservabilityFixture {
|
|
|
502
478
|
}>;
|
|
503
479
|
}
|
|
504
480
|
|
|
481
|
+
interface DeviceRef {
|
|
482
|
+
ref: string;
|
|
483
|
+
role: string;
|
|
484
|
+
name: string;
|
|
485
|
+
selectorHint: string;
|
|
486
|
+
}
|
|
487
|
+
interface DeviceSnapshot {
|
|
488
|
+
/** ARIA-style YAML tree of the current screen. */
|
|
489
|
+
yaml: string;
|
|
490
|
+
/** Interactive refs minted this snapshot, each with a stable selectorHint. */
|
|
491
|
+
refs: DeviceRef[];
|
|
492
|
+
/** True when any ref matches `query` (exact selectorHint, or a substring of the
|
|
493
|
+
* selectorHint / accessible name / `role:name`). */
|
|
494
|
+
has(query: string): boolean;
|
|
495
|
+
/** The `@eN` ref of the first match, or throws with the available refs. */
|
|
496
|
+
ref(query: string): string;
|
|
497
|
+
}
|
|
498
|
+
interface DeviceApi {
|
|
499
|
+
/** Launch an app by package name or open a deep link (`scheme://…`). */
|
|
500
|
+
open(target: string): Promise<void>;
|
|
501
|
+
/** Dump the current screen into refs + selectorHints. Re-call after every screen change. */
|
|
502
|
+
snapshot(): Promise<DeviceSnapshot>;
|
|
503
|
+
click(target: string): Promise<void>;
|
|
504
|
+
/** Alias for click (mobile vocabulary). */
|
|
505
|
+
tap(target: string): Promise<void>;
|
|
506
|
+
fill(target: string, text: string): Promise<void>;
|
|
507
|
+
type(target: string, text: string): Promise<void>;
|
|
508
|
+
press(target: string, key: string): Promise<void>;
|
|
509
|
+
hover(target: string): Promise<void>;
|
|
510
|
+
check(target: string): Promise<void>;
|
|
511
|
+
uncheck(target: string): Promise<void>;
|
|
512
|
+
select(target: string, value: string): Promise<void>;
|
|
513
|
+
/** Scroll an element into view (`target`) or pan the viewport (`{dx,dy}`). */
|
|
514
|
+
scroll(targetOrPan?: string | {
|
|
515
|
+
dx?: number;
|
|
516
|
+
dy?: number;
|
|
517
|
+
}): Promise<void>;
|
|
518
|
+
/** Capture a device screencap; returns the file path. */
|
|
519
|
+
screenshot(name: string): Promise<string>;
|
|
520
|
+
is(state: "visible" | "enabled" | "checked", target: string): Promise<boolean>;
|
|
521
|
+
get(query: "text" | "value", target: string): Promise<string | null>;
|
|
522
|
+
wait(ms: number): Promise<void>;
|
|
523
|
+
}
|
|
524
|
+
|
|
505
525
|
interface SkepticFixture {
|
|
506
526
|
page: Page;
|
|
527
|
+
/** The Android device API under `--platform android`. On web it throws if touched
|
|
528
|
+
* (web specs use `page`); on android `page`/`snapshot`/`observability` throw instead. */
|
|
529
|
+
device: DeviceApi;
|
|
507
530
|
ctx: ExecutionContext;
|
|
508
531
|
/** Wraps a fixture-method body in the abort-aware boundary. Re-checks ctx.abortReason
|
|
509
532
|
* before each await, surfaces a clean error after a hard-timeout, and emits a
|
|
@@ -513,11 +536,15 @@ interface SkepticFixture {
|
|
|
513
536
|
screenshot: (name: string, opts?: ScreenshotOptions) => Promise<ScreenshotResult>;
|
|
514
537
|
settle: () => Promise<void>;
|
|
515
538
|
observability: ObservabilityFixture;
|
|
516
|
-
ai: AiFixture;
|
|
517
539
|
}
|
|
518
540
|
|
|
519
541
|
interface TestUseOptions {
|
|
520
|
-
/**
|
|
542
|
+
/**
|
|
543
|
+
* Base URL for the test page. Relative `page.goto('/path')` calls resolve
|
|
544
|
+
* against it — the runner passes it through as Playwright's browser-context
|
|
545
|
+
* `baseURL` (see `worker.ts`). Pass an absolute URL to `page.goto(...)` to
|
|
546
|
+
* override it for a single navigation. CLI `--base-url` takes precedence.
|
|
547
|
+
*/
|
|
521
548
|
url?: string;
|
|
522
549
|
viewport?: {
|
|
523
550
|
width: number;
|
|
@@ -649,14 +676,14 @@ declare const OutputConfigSchema: z.ZodObject<{
|
|
|
649
676
|
open: z.ZodDefault<z.ZodBoolean>;
|
|
650
677
|
verbose: z.ZodDefault<z.ZodBoolean>;
|
|
651
678
|
}, "strip", z.ZodTypeAny, {
|
|
679
|
+
open: boolean;
|
|
652
680
|
dir: string;
|
|
653
681
|
reporters: ("console" | "html" | "json" | "junit")[];
|
|
654
|
-
open: boolean;
|
|
655
682
|
verbose: boolean;
|
|
656
683
|
}, {
|
|
684
|
+
open?: boolean | undefined;
|
|
657
685
|
dir?: string | undefined;
|
|
658
686
|
reporters?: ("console" | "html" | "json" | "junit")[] | undefined;
|
|
659
|
-
open?: boolean | undefined;
|
|
660
687
|
verbose?: boolean | undefined;
|
|
661
688
|
}>;
|
|
662
689
|
/** Safety controls for agent-driven browser work. */
|
|
@@ -693,29 +720,6 @@ declare const SafetyConfigSchema: z.ZodObject<{
|
|
|
693
720
|
maxOutputChars?: number | undefined;
|
|
694
721
|
contentBoundaries?: boolean | undefined;
|
|
695
722
|
}>;
|
|
696
|
-
/** AI configuration. */
|
|
697
|
-
declare const AIConfigSchema: z.ZodObject<{
|
|
698
|
-
provider: z.ZodDefault<z.ZodEnum<["gemini", "openai", "anthropic"]>>;
|
|
699
|
-
apiKey: z.ZodOptional<z.ZodString>;
|
|
700
|
-
model: z.ZodOptional<z.ZodString>;
|
|
701
|
-
maxRequestsPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
702
|
-
baseBranch: z.ZodDefault<z.ZodString>;
|
|
703
|
-
excludePaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
704
|
-
}, "strip", z.ZodTypeAny, {
|
|
705
|
-
provider: "gemini" | "openai" | "anthropic";
|
|
706
|
-
maxRequestsPerMinute: number;
|
|
707
|
-
baseBranch: string;
|
|
708
|
-
excludePaths: string[];
|
|
709
|
-
apiKey?: string | undefined;
|
|
710
|
-
model?: string | undefined;
|
|
711
|
-
}, {
|
|
712
|
-
provider?: "gemini" | "openai" | "anthropic" | undefined;
|
|
713
|
-
apiKey?: string | undefined;
|
|
714
|
-
model?: string | undefined;
|
|
715
|
-
maxRequestsPerMinute?: number | undefined;
|
|
716
|
-
baseBranch?: string | undefined;
|
|
717
|
-
excludePaths?: string[] | undefined;
|
|
718
|
-
}>;
|
|
719
723
|
/** Top-level skeptic.config.yaml schema. */
|
|
720
724
|
declare const skepticConfigSchema: z.ZodObject<{
|
|
721
725
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -795,38 +799,16 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
795
799
|
open: z.ZodDefault<z.ZodBoolean>;
|
|
796
800
|
verbose: z.ZodDefault<z.ZodBoolean>;
|
|
797
801
|
}, "strip", z.ZodTypeAny, {
|
|
802
|
+
open: boolean;
|
|
798
803
|
dir: string;
|
|
799
804
|
reporters: ("console" | "html" | "json" | "junit")[];
|
|
800
|
-
open: boolean;
|
|
801
805
|
verbose: boolean;
|
|
802
806
|
}, {
|
|
807
|
+
open?: boolean | undefined;
|
|
803
808
|
dir?: string | undefined;
|
|
804
809
|
reporters?: ("console" | "html" | "json" | "junit")[] | undefined;
|
|
805
|
-
open?: boolean | undefined;
|
|
806
810
|
verbose?: boolean | undefined;
|
|
807
811
|
}>>;
|
|
808
|
-
ai: z.ZodDefault<z.ZodObject<{
|
|
809
|
-
provider: z.ZodDefault<z.ZodEnum<["gemini", "openai", "anthropic"]>>;
|
|
810
|
-
apiKey: z.ZodOptional<z.ZodString>;
|
|
811
|
-
model: z.ZodOptional<z.ZodString>;
|
|
812
|
-
maxRequestsPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
813
|
-
baseBranch: z.ZodDefault<z.ZodString>;
|
|
814
|
-
excludePaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
815
|
-
}, "strip", z.ZodTypeAny, {
|
|
816
|
-
provider: "gemini" | "openai" | "anthropic";
|
|
817
|
-
maxRequestsPerMinute: number;
|
|
818
|
-
baseBranch: string;
|
|
819
|
-
excludePaths: string[];
|
|
820
|
-
apiKey?: string | undefined;
|
|
821
|
-
model?: string | undefined;
|
|
822
|
-
}, {
|
|
823
|
-
provider?: "gemini" | "openai" | "anthropic" | undefined;
|
|
824
|
-
apiKey?: string | undefined;
|
|
825
|
-
model?: string | undefined;
|
|
826
|
-
maxRequestsPerMinute?: number | undefined;
|
|
827
|
-
baseBranch?: string | undefined;
|
|
828
|
-
excludePaths?: string[] | undefined;
|
|
829
|
-
}>>;
|
|
830
812
|
observability: z.ZodDefault<z.ZodObject<{
|
|
831
813
|
collectors: z.ZodDefault<z.ZodArray<z.ZodEnum<["performance", "network", "accessibility", "console"]>, "many">>;
|
|
832
814
|
networkCaptureLimit: z.ZodDefault<z.ZodNumber>;
|
|
@@ -861,7 +843,7 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
861
843
|
/** Default blank-frame mode for screenshot steps. Per-step overrides win. */
|
|
862
844
|
blankFrameDetection: z.ZodDefault<z.ZodEnum<["off", "warn", "fail"]>>;
|
|
863
845
|
}, "strip", z.ZodTypeAny, {
|
|
864
|
-
collectors: ("console" | "performance" | "
|
|
846
|
+
collectors: ("console" | "performance" | "accessibility" | "network")[];
|
|
865
847
|
networkCaptureLimit: number;
|
|
866
848
|
duplicateWindowMs: number;
|
|
867
849
|
accessibilityDualEngine: boolean;
|
|
@@ -873,10 +855,10 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
873
855
|
accessibilityStandard: "WCAG2A" | "WCAG2AA" | "WCAG21A" | "WCAG21AA" | "WCAG22AA";
|
|
874
856
|
accessibilityMaxRulesPerImpact: number;
|
|
875
857
|
fullPageScreenshots: boolean;
|
|
876
|
-
blankFrameDetection: "
|
|
858
|
+
blankFrameDetection: "off" | "warn" | "fail";
|
|
877
859
|
accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
|
|
878
860
|
}, {
|
|
879
|
-
collectors?: ("console" | "performance" | "
|
|
861
|
+
collectors?: ("console" | "performance" | "accessibility" | "network")[] | undefined;
|
|
880
862
|
networkCaptureLimit?: number | undefined;
|
|
881
863
|
duplicateWindowMs?: number | undefined;
|
|
882
864
|
accessibilityDualEngine?: boolean | undefined;
|
|
@@ -889,7 +871,7 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
889
871
|
accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
|
|
890
872
|
accessibilityMaxRulesPerImpact?: number | undefined;
|
|
891
873
|
fullPageScreenshots?: boolean | undefined;
|
|
892
|
-
blankFrameDetection?: "
|
|
874
|
+
blankFrameDetection?: "off" | "warn" | "fail" | undefined;
|
|
893
875
|
}>>;
|
|
894
876
|
safety: z.ZodDefault<z.ZodObject<{
|
|
895
877
|
/**
|
|
@@ -1011,21 +993,13 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
1011
993
|
grep?: string | undefined;
|
|
1012
994
|
};
|
|
1013
995
|
output: {
|
|
996
|
+
open: boolean;
|
|
1014
997
|
dir: string;
|
|
1015
998
|
reporters: ("console" | "html" | "json" | "junit")[];
|
|
1016
|
-
open: boolean;
|
|
1017
999
|
verbose: boolean;
|
|
1018
1000
|
};
|
|
1019
|
-
ai: {
|
|
1020
|
-
provider: "gemini" | "openai" | "anthropic";
|
|
1021
|
-
maxRequestsPerMinute: number;
|
|
1022
|
-
baseBranch: string;
|
|
1023
|
-
excludePaths: string[];
|
|
1024
|
-
apiKey?: string | undefined;
|
|
1025
|
-
model?: string | undefined;
|
|
1026
|
-
};
|
|
1027
1001
|
observability: {
|
|
1028
|
-
collectors: ("console" | "performance" | "
|
|
1002
|
+
collectors: ("console" | "performance" | "accessibility" | "network")[];
|
|
1029
1003
|
networkCaptureLimit: number;
|
|
1030
1004
|
duplicateWindowMs: number;
|
|
1031
1005
|
accessibilityDualEngine: boolean;
|
|
@@ -1037,7 +1011,7 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
1037
1011
|
accessibilityStandard: "WCAG2A" | "WCAG2AA" | "WCAG21A" | "WCAG21AA" | "WCAG22AA";
|
|
1038
1012
|
accessibilityMaxRulesPerImpact: number;
|
|
1039
1013
|
fullPageScreenshots: boolean;
|
|
1040
|
-
blankFrameDetection: "
|
|
1014
|
+
blankFrameDetection: "off" | "warn" | "fail";
|
|
1041
1015
|
accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
|
|
1042
1016
|
};
|
|
1043
1017
|
safety: {
|
|
@@ -1064,8 +1038,8 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
1064
1038
|
} | undefined;
|
|
1065
1039
|
} | undefined;
|
|
1066
1040
|
}, {
|
|
1067
|
-
url?: string | undefined;
|
|
1068
1041
|
tests?: string | string[] | undefined;
|
|
1042
|
+
url?: string | undefined;
|
|
1069
1043
|
browser?: {
|
|
1070
1044
|
engine?: "chromium" | "firefox" | "webkit" | undefined;
|
|
1071
1045
|
headless?: boolean | undefined;
|
|
@@ -1090,21 +1064,13 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
1090
1064
|
tags?: string[] | undefined;
|
|
1091
1065
|
} | undefined;
|
|
1092
1066
|
output?: {
|
|
1067
|
+
open?: boolean | undefined;
|
|
1093
1068
|
dir?: string | undefined;
|
|
1094
1069
|
reporters?: ("console" | "html" | "json" | "junit")[] | undefined;
|
|
1095
|
-
open?: boolean | undefined;
|
|
1096
1070
|
verbose?: boolean | undefined;
|
|
1097
1071
|
} | undefined;
|
|
1098
|
-
ai?: {
|
|
1099
|
-
provider?: "gemini" | "openai" | "anthropic" | undefined;
|
|
1100
|
-
apiKey?: string | undefined;
|
|
1101
|
-
model?: string | undefined;
|
|
1102
|
-
maxRequestsPerMinute?: number | undefined;
|
|
1103
|
-
baseBranch?: string | undefined;
|
|
1104
|
-
excludePaths?: string[] | undefined;
|
|
1105
|
-
} | undefined;
|
|
1106
1072
|
observability?: {
|
|
1107
|
-
collectors?: ("console" | "performance" | "
|
|
1073
|
+
collectors?: ("console" | "performance" | "accessibility" | "network")[] | undefined;
|
|
1108
1074
|
networkCaptureLimit?: number | undefined;
|
|
1109
1075
|
duplicateWindowMs?: number | undefined;
|
|
1110
1076
|
accessibilityDualEngine?: boolean | undefined;
|
|
@@ -1117,7 +1083,7 @@ declare const skepticConfigSchema: z.ZodObject<{
|
|
|
1117
1083
|
accessibilityImpacts?: ("critical" | "serious" | "moderate" | "minor")[] | undefined;
|
|
1118
1084
|
accessibilityMaxRulesPerImpact?: number | undefined;
|
|
1119
1085
|
fullPageScreenshots?: boolean | undefined;
|
|
1120
|
-
blankFrameDetection?: "
|
|
1086
|
+
blankFrameDetection?: "off" | "warn" | "fail" | undefined;
|
|
1121
1087
|
} | undefined;
|
|
1122
1088
|
safety?: {
|
|
1123
1089
|
allowedDomains?: string[] | undefined;
|
|
@@ -1147,7 +1113,6 @@ type BrowserConfig = z.infer<typeof BrowserConfigSchema>;
|
|
|
1147
1113
|
type AuthConfig = z.infer<typeof AuthConfigSchema>;
|
|
1148
1114
|
type ExecutionConfig = z.infer<typeof ExecutionConfigSchema>;
|
|
1149
1115
|
type OutputConfig = z.infer<typeof OutputConfigSchema>;
|
|
1150
|
-
type AIConfig = z.infer<typeof AIConfigSchema>;
|
|
1151
1116
|
type SafetyConfig = z.infer<typeof SafetyConfigSchema>;
|
|
1152
1117
|
|
|
1153
1118
|
/**
|
|
@@ -1247,6 +1212,8 @@ declare function interpolateEnv(value: string): string;
|
|
|
1247
1212
|
/** Recursively interpolate all string values in an object. */
|
|
1248
1213
|
declare function interpolateEnvDeep(obj: unknown): unknown;
|
|
1249
1214
|
|
|
1215
|
+
declare function parsePositiveInt(value: string): number;
|
|
1216
|
+
declare function parseNonNegativeInt(value: string): number;
|
|
1250
1217
|
declare const program: Command;
|
|
1251
1218
|
|
|
1252
|
-
export { type
|
|
1219
|
+
export { type AuthConfig, type AxeAuditOpts, type BrowserConfig, type ConsoleAssertOpts, DEVICE_PROFILES, type DeviceCategory, type DeviceProfile, type EnvironmentInfo, type ExecutionConfig, type HookFn, type NetworkAssertOpts, type ObservabilityFixture, type OutputConfig, type PerfThresholds, type SafetyConfig, type ScreenshotOptions, type ScreenshotResult, type SkepticFixture, type SnapshotOptions, type SnapshotTree, type TestFn, type TestUseOptions, Timer, commandUsesBrowser, detectCI, expect, getDeviceProfile, getLogLevel, getProfilesByCategory, interpolateEnv, interpolateEnvDeep, loadConfig, logger, parseNonNegativeInt, parsePositiveInt, prewarmDaemonIfNeeded, program, setLogLevel, type skepticConfig, test };
|