@unotest/web 0.43.2 → 0.44.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/.claude/skills/write-e2e-test/SKILL.md +7 -6
- package/.claude/skills/write-e2e-test-ground/SKILL.md +7 -6
- package/CHANGELOG.md +91 -3
- package/dist/config/schema.d.ts +77 -31
- package/dist/config/schema.js +1 -1
- package/dist/driver/index.d.ts +5 -3
- package/dist/driver/index.js +1 -1
- package/dist/dsl/index.d.ts +223 -6
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/web-dsl-language-service.js +1 -1
- package/dist/inspection/page-inject.d.ts +1 -1
- package/dist/{interfaces-ClW2IRgY.d.ts → interfaces-DEmGI704.d.ts} +85 -5
- package/dist/mcp/server.js +1 -1
- package/dist/runner/cli.js +1 -1
- package/dist/runner/init/chrome-probe.js +1 -1
- package/dist/runner/init.js +1 -1
- package/dist/runner/install-chromium.js +1 -1
- package/dist/runner/prepare-fix.js +1 -1
- package/dist/runner/scaffold-workspace.js +1 -1
- package/dist/runner/serve-fixture.js +1 -1
- package/dist/runner/web-runner-adapter.js +1 -1
- package/guides/agent-integration.md +8 -0
- package/guides/dsl-reference.md +433 -9
- package/package.json +9 -8
- package/types/unotest-dsl.d.ts +49 -0
package/dist/driver/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x389f(_0x23c25d,_0x291f4c){_0x23c25d=_0x23c25d-0x9d;const _0x3f6528=_0x3f65();let _0x389f36=_0x3f6528[_0x23c25d];if(_0x389f['HBIuoT']===undefined){var _0x2a29af=function(_0x4a00c6){const _0x2ad076='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x39ccd7='',_0x4dbc93='';for(let _0x53c645=0x0,_0x156d5a,_0x35f335,_0x52b9ed=0x0;_0x35f335=_0x4a00c6['charAt'](_0x52b9ed++);~_0x35f335&&(_0x156d5a=_0x53c645%0x4?_0x156d5a*0x40+_0x35f335:_0x35f335,_0x53c645++%0x4)?_0x39ccd7+=String['fromCharCode'](0xff&_0x156d5a>>(-0x2*_0x53c645&0x6)):0x0){_0x35f335=_0x2ad076['indexOf'](_0x35f335);}for(let _0x21f22a=0x0,_0x15e21b=_0x39ccd7['length'];_0x21f22a<_0x15e21b;_0x21f22a++){_0x4dbc93+='%'+('00'+_0x39ccd7['charCodeAt'](_0x21f22a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4dbc93);};_0x389f['ptkoXO']=_0x2a29af,_0x389f['hzYVSA']={},_0x389f['HBIuoT']=!![];}const _0x260655=_0x3f6528[0x0],_0x1c4061=_0x23c25d+_0x260655,_0x2b5f6a=_0x389f['hzYVSA'][_0x1c4061];return!_0x2b5f6a?(_0x389f36=_0x389f['ptkoXO'](_0x389f36),_0x389f['hzYVSA'][_0x1c4061]=_0x389f36):_0x389f36=_0x2b5f6a,_0x389f36;}const _0x562ca9=_0x389f;(function(_0x21d0aa,_0x354f9b){const _0x42e522={_0xf0dd9b:0xc1,_0x2dedc8:0xde,_0xc0d620:0xcc,_0x3452a0:0x11e,_0x585f7c:0xc7,_0x48104f:0xa7},_0x1dc3e6=_0x389f,_0x1740e8=_0x21d0aa();while(!![]){try{const _0x7794af=parseInt(_0x1dc3e6(0xb3))/0x1*(parseInt(_0x1dc3e6(0xb1))/0x2)+-parseInt(_0x1dc3e6(0xdc))/0x3*(parseInt(_0x1dc3e6(0xa6))/0x4)+-parseInt(_0x1dc3e6(_0x42e522._0xf0dd9b))/0x5*(-parseInt(_0x1dc3e6(_0x42e522._0x2dedc8))/0x6)+-parseInt(_0x1dc3e6(_0x42e522._0xc0d620))/0x7*(parseInt(_0x1dc3e6(_0x42e522._0x3452a0))/0x8)+parseInt(_0x1dc3e6(_0x42e522._0x585f7c))/0x9+-parseInt(_0x1dc3e6(0xc0))/0xa*(parseInt(_0x1dc3e6(0xdd))/0xb)+-parseInt(_0x1dc3e6(0x111))/0xc*(parseInt(_0x1dc3e6(_0x42e522._0x48104f))/0xd);if(_0x7794af===_0x354f9b)break;else _0x1740e8['push'](_0x1740e8['shift']());}catch(_0x4d5419){_0x1740e8['push'](_0x1740e8['shift']());}}}(_0x3f65,0xd1a39));var __defProp=Object[_0x562ca9(0xdf)],__name=(_0x39ccd7,_0x4dbc93)=>__defProp(_0x39ccd7,_0x562ca9(0xca),{'value':_0x4dbc93,'configurable':!![]});function subscribe(_0x53c645,_0x156d5a){const _0x173388={_0xa8031f:0xe5},_0x1a4d56=_0x562ca9;return _0x53c645[_0x1a4d56(0x11a)](_0x156d5a),()=>{const _0x43dc68=_0x1a4d56;_0x53c645[_0x43dc68(_0x173388._0xa8031f)](_0x156d5a);};}function _0x3f65(){const _0x126918=['y29VA2LLu3rHDgu','mJrdEwv2rKS','C2nYzwvUC2HVDa','tg9JyxrVCKvYCM9Y','Cg9W','y29UC29SzuvUDhjPzxm','rMfRzvDLyKrYAxzLCG','y29VA2LLCW','C3rLChm','CMvSB2fK','D3nfBMrWB2LUDa','zw50zxjgCMfTzsbJywXSzwqGD2L0AcbLBxb0EsbSB2nHDg9Y','A2LUza','ywn0AxzLswr4','pgrPDIbKyxrHlxvUB3rLC3qTCMvMpsi','zMLSBa','z2v0q29VA2LL','D2fPDezVCK5HDMLNyxrPB24','mtGZndyZmLjIsKXvqW','mty5rNPqt3bU','zw50zxjgCMfTzq','BgvUz3rO','y2HLy2TLzfn0yxrL','AxneAxnHyMXLza','C2v0tg9JywXtDg9YywDL','DgL0Bgu','y2XPCgjVyxjKugfZDgu','ywn0AxzLugfNzq','y3vYCMvUDfvYBa','ndq2ugDPv3vp','C2v0q29VA2LL','nJaYoxLlrurQtG','z29gB3j3yxjK','CgfNzuXPC3q','D2fPDezVCKXVywrtDgf0zq','Bwf5yMvuAhjVDW','ChvZAa','y29UBMvJDfnOyxjLza','y2HLy2TLzfn0yxrLqNLezwzHDwX0','zw1PDezHA2vqB3b1Ca','AxnwAxnPyMXLqNLezwzHDwX0','zhjPDMvY','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','zMLSDgvY','mtaWmhfZv0v3wa','mtK3nJe1svDrEKvO','DxjS','y291BNrcEurLzMf1Bhq','B25bzNrLCKnSAwnR','CgfNzsbPBMrLEcbVDxqGB2yGCMfUz2u','ywjVDxq6yMXHBMS','nJGWmti0nKLxAhPwEq','ChjLC3m','lNbHz2u','BMfTzq','y2fSBhngB3i','mJe5odu2y09LwvjO','y29UDgv4Dhm','CgfNzxm','BMv3q29UDgv4Da','rhjPDMvYrxjYB3i','B3v0zxjive1m','C2nVCgu','Aw5WDxrwywX1zq','zxHPDezYyw1L','C2nYzwvUC2HVDevSzw1LBNq','D2fPDezVCLvYBa','Bg9JywXtDg9YywDLu3rHDgu','zxzHBhvHDgvpBKXVy2f0B3i','BM8Gywn0AxzLihbHz2uGAw4Gy29UDgv4Da','C2f2zvn0B3jHz2vtDgf0zq','zwXLBwvUDeHPBNrcEvjLzG','m0DPAe5jvq','mJK3ntvhCeLyEgS','ndjtr3njtKi','zgvMAw5LuhjVCgvYDhK','DhLWzq','y2fSBhm','zg91yMXLq2XPy2S','yMvOyxzPB3i','y291BNq','zgvSzxrL','z2v0tg9JywXtDg9YywDL','Dgv4DenVBNrLBNrcEurLzMf1Bhq','AxnwAxnPyMXL','BMv0D29YA0vUDhjPzxm','yxr0CMLIDxrLC0j5rgvMyxvSDa','rMfRzunVBNrLEhq','z290BW','y2XVC2u','y2XVC2vgywTLugfNzq','AxneAxnHyMXLzej5rgvMyxvSDa','rMfRzvbHz2u','Aw5UzxjuzxH0','lNbHz2uW','B3v0zxjiDg1SqNLszwy','Bgf1BMnOzwq','y2XPy2S','zxjYB3jpBK5LEhrby3rPB24','y29UBMvJDfnOyxjLzcbUB3qGC3vWCg9YDgvKigj5iezHA2vxzwjeCML2zxi','Cg9WDxbpBKnSAwnR','BMv3q29UDgv4DcbJywXSzwqGyMvMB3jLigXHDw5JAcGP','Bgf1BMnO','Aw5ZCgvJDevSzw1LBNq','zhjHz0fUzerYB3a','CMvJB3jK','D2fPDezVCG','zNjHBwvtDgfJAW','y2HLy2S','zNvUy3rPB24','CMvM','B25ozxDqywDL','zMfRzsb0AxrSzq','BMv3ugfNzuXPC3rLBMvYCW','C3vIC2nYAwjL','y3jLyxrLuMvJB3jKzxi','CMvJB3jKzxi','z29cywnR','y3r4','C2vSzwn0t3b0Aw9U','Aw5UzxjuzxH0qNLezwzHDwX0','iJ48l2rPDJ4','DxbSB2fKrMLSzq','z2v0qxr0CMLIDxrL','zxzHBhvHDgu','nJqXmZe2shrmDgLP','Ag92zxi','zxzHBhvHDgvszxn1Bhq','C2nYB2XSsw50B1zPzxC','Aw5PDgLHBfvYBa','Bwv0Ag9K','Dgv4DenVBNrLBNq','D2fPDezVCLrLEhq','C3bSAwnL','ywrK','C2v0qwn0AxzLugfNzq','C2nYzwvUC2HVDej5DgvZ'];_0x3f65=function(){return _0x126918;};return _0x3f65();}__name(subscribe,_0x562ca9(0x106));import{UnotestError}from'@unotest/core';var DriverError=class extends UnotestError{static{__name(this,_0x562ca9(0xd0));}},LocatorError=class extends UnotestError{static{__name(this,_0x562ca9(0x120));}};function createRecorder(){const _0x4586c2={_0x57d957:0xb8,_0x30f612:0xe1},_0x4422c9=_0x562ca9,_0x35f335=[];let _0x52b9ed=0x0;return{'push':__name(_0x21f22a=>_0x35f335[_0x4422c9(0xb8)]({..._0x21f22a,'seq':_0x52b9ed++}),_0x4422c9(_0x4586c2._0x57d957)),'calls':__name(()=>_0x35f335,_0x4422c9(_0x4586c2._0x30f612))};}__name(createRecorder,_0x562ca9(0x107));var FakePage=class{constructor(_0x15e21b,_0x98d4fa,_0x551e25,_0x248129){const _0x5bc653={_0x399fbd:0xe3},_0x5e46fb=_0x562ca9;this['recorder']=_0x15e21b,this[_0x5e46fb(_0x5bc653._0x399fbd)]=_0x98d4fa,this['scope']=_0x551e25,this['currentUrl']=_0x248129;}[_0x562ca9(0x108)];[_0x562ca9(0xe3)];[_0x562ca9(0xd2)];static{__name(this,_0x562ca9(0xf0));}[_0x562ca9(0xb0)];[_0x562ca9(0xc4)];[_0x562ca9(0xfd)](_0x22c45c,_0x334c19){const _0x3b657b={_0x2cf371:0xb8},_0xcc7ec1=_0x562ca9;this['recorder'][_0xcc7ec1(_0x3b657b._0x2cf371)]({'scope':this[_0xcc7ec1(0xd2)],'method':_0x22c45c,'args':_0x334c19});}[_0x562ca9(0xb7)](){const _0x5b5dfe=_0x562ca9;if(this[_0x5b5dfe(0xe3)][_0x5b5dfe(0xf6)]){const _0x23ae7b=this[_0x5b5dfe(0xe3)][_0x5b5dfe(0xf6)];this['behavior'][_0x5b5dfe(0xf6)]=void 0x0;throw _0x23ae7b;}}[_0x562ca9(0xc2)](){return this['currentUrl'];}async[_0x562ca9(0xad)](){const _0x233d31={_0x3548ad:0x104},_0x127117=_0x562ca9;return this[_0x127117(0xfd)](_0x127117(0xad),[]),_0x127117(_0x233d31._0x3548ad);}async[_0x562ca9(0xf5)](_0x390844,_0x3baf0e){const _0x465649={_0x54f47c:0xb7,_0x1f8698:0xc4},_0x1703a6=_0x562ca9;this[_0x1703a6(0xfd)](_0x1703a6(0xf5),[_0x390844,_0x3baf0e]),this[_0x1703a6(_0x465649._0x54f47c)](),this[_0x1703a6(_0x465649._0x1f8698)]?.();}async[_0x562ca9(0xe2)](_0x373caa,_0x55383b){const _0x40a84b={_0x34965f:0xfd,_0x2c0fd0:0xe2,_0x202535:0xb7},_0x2ea8ad=_0x562ca9;this[_0x2ea8ad(_0x40a84b._0x34965f)](_0x2ea8ad(_0x40a84b._0x2c0fd0),[_0x373caa,_0x55383b]),this[_0x2ea8ad(_0x40a84b._0x202535)]();}async[_0x562ca9(0xa3)](_0x337e1e,_0x4c4c5a,_0x28ebf9){const _0x22a579={_0x44b9f3:0xb7},_0x5943ab=_0x562ca9;this[_0x5943ab(0xfd)]('fill',[_0x337e1e,_0x4c4c5a,_0x28ebf9]),this[_0x5943ab(_0x22a579._0x44b9f3)]();}async[_0x562ca9(0xc8)](_0x3e7793,_0x47ac91,_0x4c0b1b){const _0x33fbf0={_0x5d8723:0xc8,_0x4ae42a:0xb7},_0x48c6b0=_0x562ca9;this[_0x48c6b0(0xfd)](_0x48c6b0(_0x33fbf0._0x5d8723),[_0x3e7793,_0x47ac91,_0x4c0b1b]),this[_0x48c6b0(_0x33fbf0._0x4ae42a)]();}async[_0x562ca9(0x100)](_0x436fa0,_0x2806b5){const _0x46f7c7={_0x3f317a:0x100},_0x379420=_0x562ca9;this[_0x379420(0xfd)](_0x379420(_0x46f7c7._0x3f317a),[_0x436fa0,_0x2806b5]),this['maybeThrow']();}async['uncheck'](_0x55c10b,_0x5764dd){const _0x486f60={_0x29d686:0xfd},_0x1f59b5=_0x562ca9;this[_0x1f59b5(_0x486f60._0x29d686)]('uncheck',[_0x55c10b,_0x5764dd]),this['maybeThrow']();}async[_0x562ca9(0x10b)](_0x21806b,_0x246266,_0x1662a5){const _0x3b619d={_0x920bec:0xfd},_0x173b8d=_0x562ca9;this[_0x173b8d(_0x3b619d._0x920bec)](_0x173b8d(0x10b),[_0x21806b,_0x246266,_0x1662a5]),this['maybeThrow']();}async[_0x562ca9(0x112)](_0x4c4f44,_0x186daf){const _0x40fd9c={_0x1da568:0xb7},_0x3dd960=_0x562ca9;this[_0x3dd960(0xfd)](_0x3dd960(0x112),[_0x4c4f44,_0x186daf]),this[_0x3dd960(_0x40fd9c._0x1da568)]();}async[_0x562ca9(0x114)](_0xf14588){const _0x2bbe3f={_0x4d2de8:0x114},_0x172909=_0x562ca9;this['record'](_0x172909(_0x2bbe3f._0x4d2de8),[_0xf14588]),this[_0x172909(0xb7)]();}async[_0x562ca9(0xfc)](_0x2c5b15,_0x44f689,_0x2035ce){const _0x39cbcf={_0x40bdcb:0xfc,_0x4cd41f:0xb7},_0x1b03d5=_0x562ca9;this[_0x1b03d5(0xfd)](_0x1b03d5(_0x39cbcf._0x40bdcb),[_0x2c5b15,_0x44f689,_0x2035ce]),this[_0x1b03d5(_0x39cbcf._0x4cd41f)]();}async[_0x562ca9(0x10e)](_0x5c122d,_0x4fa330){const _0x6e25c2={_0x3e0bd7:0xb7},_0x48e0ed=_0x562ca9;this[_0x48e0ed(0xfd)]('uploadFile',[_0x5c122d,_0x4fa330]),this[_0x48e0ed(_0x6e25c2._0x3e0bd7)]();}async[_0x562ca9(0xae)](_0x539307,_0x19b2ab){const _0x4fe12e={_0x5700ba:0xfd},_0x421ef4=_0x562ca9;this[_0x421ef4(_0x4fe12e._0x5700ba)](_0x421ef4(0xae),[_0x539307,_0x19b2ab]),this['maybeThrow']();}async[_0x562ca9(0xe4)](_0x1e20c2){const _0x4b992e={_0x158359:0xfd,_0x55f4b3:0xe3},_0x135320=_0x562ca9;return this[_0x135320(_0x4b992e._0x158359)](_0x135320(0xe4),[_0x1e20c2]),this[_0x135320(_0x4b992e._0x55f4b3)][_0x135320(0xc3)]??0x1;}async[_0x562ca9(0x117)](_0x1d1ec7){const _0x4feae4={_0x12ebda:0x117},_0x3816f1=_0x562ca9;return this[_0x3816f1(0xfd)](_0x3816f1(_0x4feae4._0x12ebda),[_0x1d1ec7]),this['behavior']['textContentByDefault']??'';}async[_0x562ca9(0xf1)](_0x5f52ef){const _0x4daa3b={_0x517fd3:0xe3,_0x46ecd1:0xe7},_0x3a5e2a=_0x562ca9;return this[_0x3a5e2a(0xfd)]('innerText',[_0x5f52ef]),this[_0x3a5e2a(0xe3)][_0x3a5e2a(0x10c)]??this[_0x3a5e2a(_0x4daa3b._0x517fd3)][_0x3a5e2a(_0x4daa3b._0x46ecd1)]??'';}async[_0x562ca9(0xd3)](_0x33c848){const _0x27017b={_0x41df2b:0xd3,_0x309abf:0xe3},_0x4129b1=_0x562ca9;return this[_0x4129b1(0xfd)](_0x4129b1(_0x27017b._0x41df2b),[_0x33c848]),this[_0x4129b1(_0x27017b._0x309abf)]['inputValueByDefault']??'';}async[_0x562ca9(0xaa)](_0x5b7139){const _0x3eade0={_0x14dddc:0xaa},_0x25160f=_0x562ca9;return this['record'](_0x25160f(_0x3eade0._0x14dddc),[_0x5b7139]),this[_0x25160f(0xe3)][_0x25160f(0xba)]??null;}async[_0x562ca9(0xe8)](_0x3afc2e){const _0x178960={_0x28aa6f:0xe8},_0x1857e1=_0x562ca9;return this['record'](_0x1857e1(_0x178960._0x28aa6f),[_0x3afc2e]),this[_0x1857e1(0xe3)][_0x1857e1(0xbc)]??!![];}async[_0x562ca9(0xab)](_0xaabeb6){const _0x2400c3={_0x29db0a:0xab,_0x5c9b8f:0xe3},_0x1a03ac=_0x562ca9;return this['record'](_0x1a03ac(_0x2400c3._0x29db0a),[_0xaabeb6]),this[_0x1a03ac(_0x2400c3._0x5c9b8f)][_0x1a03ac(0xef)]??![];}async[_0x562ca9(0x10f)](_0x4b2dc0,_0x48b0d1){const _0x2cface={_0x1234b2:0x10f,_0x4e3ecd:0xe3},_0x1fc93f=_0x562ca9;return this[_0x1fc93f(0xfd)](_0x1fc93f(_0x2cface._0x1234b2),[_0x4b2dc0,_0x48b0d1]),this[_0x1fc93f(_0x2cface._0x4e3ecd)][_0x1fc93f(0xea)]?.[_0x48b0d1]??null;}async[_0x562ca9(0xfe)](_0xfcff2b,_0x12c613){const _0x2e6e01=_0x562ca9;this[_0x2e6e01(0xfd)]('waitFor',[_0xfcff2b,_0x12c613]);}async[_0x562ca9(0xd6)](_0x2e5774,_0xb689e9){const _0x1ea473={_0x9a7a36:0xd6},_0x4e703f=_0x562ca9;this[_0x4e703f(0xfd)](_0x4e703f(_0x1ea473._0x9a7a36),[_0x2e5774,_0xb689e9]);}async[_0x562ca9(0x118)](_0x33e0c2,_0xa0a60a){const _0xa418bb=_0x562ca9;this['record'](_0xa418bb(0x118),[_0x33e0c2,_0xa0a60a]);}async[_0x562ca9(0xa5)](_0x5644d2){const _0x5e21c6=_0x562ca9;this['record'](_0x5e21c6(0xa5),[_0x5644d2]);}async[_0x562ca9(0xb6)](_0x29ddec,_0x59da14){const _0x337222={_0x515a0f:0xb6},_0x2db09b=_0x562ca9;this[_0x2db09b(0xfd)](_0x2db09b(_0x337222._0x515a0f),[_0x29ddec,_0x59da14]);}async[_0x562ca9(0xec)](_0x276922,_0x3d12ed){const _0x10a0fb={_0x1ef77a:0xec},_0x3d8aa4=_0x562ca9;this[_0x3d8aa4(0xfd)](_0x3d8aa4(_0x10a0fb._0x1ef77a),[_0x276922,_0x3d12ed]),this[_0x3d8aa4(0xb0)]=_0x276922;}async[_0x562ca9(0x9d)](_0x480ae7){const _0x4e4504=_0x562ca9;this[_0x4e4504(0xfd)](_0x4e4504(0x9d),[_0x480ae7]);}async[_0x562ca9(0x109)](_0x1013e3){const _0x18e17b={_0x19d930:0xfd},_0xee2d7=_0x562ca9;this[_0xee2d7(_0x18e17b._0x19d930)]('goBack',[_0x1013e3]);}async['goForward'](_0x49deaa){const _0x22c2c3={_0x3f46cd:0xfd},_0x196949=_0x562ca9;this[_0x196949(_0x22c2c3._0x3f46cd)](_0x196949(0xb4),[_0x49deaa]);}async[_0x562ca9(0x110)](_0x39485d){const _0x30580c={_0x5dbff3:0x113},_0x2b0d82=_0x562ca9;return this[_0x2b0d82(0xfd)](_0x2b0d82(0x110),[_0x39485d]),this['behavior'][_0x2b0d82(_0x30580c._0x5dbff3)];}async[_0x562ca9(0xd8)](_0x5db91c,_0x230f39){const _0x505335={_0x2417a5:0xfd,_0x2fe4b6:0xd8},_0x39e49a=_0x562ca9;return this[_0x39e49a(_0x505335._0x2417a5)](_0x39e49a(_0x505335._0x2fe4b6),[_0x5db91c,_0x230f39]),void 0x0;}async[_0x562ca9(0xfb)](_0x2a876a){const _0xed7884={_0x531dce:0xfd,_0x530a4a:0x102,_0x4490a0:0x102,_0xad541f:0xe3,_0x1f0463:0xdb},_0x4f07a3=_0x562ca9;this[_0x4f07a3(_0xed7884._0x531dce)](_0x4f07a3(0xfb),[_0x2a876a]);if(_0x2a876a['steps'][_0x4f07a3(0xa9)]!==0x1||_0x2a876a[_0x4f07a3(0x125)][0x0][_0x4f07a3(0xa0)]!==_0x4f07a3(_0xed7884._0x530a4a))return null;const _0xc1cde4=_0x2a876a[_0x4f07a3(0x125)][0x0][_0x4f07a3(_0xed7884._0x4490a0)],_0x5c8166=this[_0x4f07a3(_0xed7884._0xad541f)][_0x4f07a3(_0xed7884._0x1f0463)]?.[_0xc1cde4];return _0x5c8166??null;}async[_0x562ca9(0x11f)](_0x4ec762){const _0x13a51a={_0x2c1a2b:0x11c},_0x1b9a02=_0x562ca9;return this['record']('screenshot',[_0x4ec762]),this[_0x1b9a02(_0x13a51a._0x2c1a2b)](_0x4ec762?.[_0x1b9a02(0xe0)]);}async[_0x562ca9(0xd5)](_0x144429,_0x51d7bc){const _0x14ba39=_0x562ca9;return this[_0x14ba39(0xfd)]('screenshotElement',[_0x144429,_0x51d7bc]),this[_0x14ba39(0x11c)](_0x51d7bc?.[_0x14ba39(0xe0)]);}[_0x562ca9(0x11c)](_0xc37b8f){const _0x1406eb={_0xfa079c:0xe3},_0x130989=_0x562ca9,_0x4ce78d=this[_0x130989(_0x1406eb._0xfa079c)][_0x130989(0x11c)];if(_0x4ce78d===void 0x0)return Buffer['from']('fake-png');return typeof _0x4ce78d===_0x130989(0x101)?_0x4ce78d(_0xc37b8f):_0x4ce78d;}async[_0x562ca9(0xd1)](_0x4d3308){const _0x8f390e={_0xf4a3c3:0xfd,_0x2bb7a3:0xd1,_0x35bf71:0x125,_0xb083bc:0xa0,_0x21b0ad:0xa2},_0x128a03=_0x562ca9;this[_0x128a03(_0x8f390e._0xf4a3c3)](_0x128a03(_0x8f390e._0x2bb7a3),[_0x4d3308]);if(_0x4d3308[_0x128a03(_0x8f390e._0x35bf71)]['length']===0x1&&_0x4d3308[_0x128a03(0x125)][0x0][_0x128a03(_0x8f390e._0xb083bc)]===_0x128a03(0x102)){const _0x7d3ac4=_0x4d3308[_0x128a03(0x125)][0x0]['ref'];return this['behavior'][_0x128a03(0xf3)]?.[_0x7d3ac4]??_0x128a03(_0x8f390e._0x21b0ad)+_0x7d3ac4+_0x128a03(0x10d);}return'<div></div>';}},FakeContext=class{constructor(_0x439a96,_0x18f25b,_0x1271cd){const _0x13f89c={_0x387339:0xe3,_0x16d742:0xf2,_0x2c743e:0xc4},_0x290230={_0x2151d7:0xf8},_0x5b9fa3=_0x562ca9;this['recorder']=_0x439a96,this[_0x5b9fa3(_0x13f89c._0x387339)]=_0x18f25b,this['scope']=_0x1271cd;const _0x92b4ce=new FakePage(_0x439a96,_0x18f25b,_0x1271cd+_0x5b9fa3(_0x13f89c._0x16d742),_0x18f25b[_0x5b9fa3(0x115)]??_0x5b9fa3(0xc6));_0x18f25b[_0x5b9fa3(0xf8)]&&(_0x92b4ce[_0x5b9fa3(_0x13f89c._0x2c743e)]=()=>{const _0x4e983f=_0x5b9fa3;this['emitFakePopup'](_0x18f25b[_0x4e983f(_0x290230._0x2151d7)]);}),this['pageList']=[_0x92b4ce],this[_0x5b9fa3(0xd7)]={..._0x18f25b['localStorage']??{}},this[_0x5b9fa3(0x11d)]={..._0x18f25b[_0x5b9fa3(0x124)]??{}};}[_0x562ca9(0x108)];[_0x562ca9(0xe3)];['scope'];static{__name(this,_0x562ca9(0xeb));}[_0x562ca9(0xb5)];[_0x562ca9(0xa1)]=0x0;[_0x562ca9(0xff)]=[];[_0x562ca9(0xd7)];[_0x562ca9(0x11d)];[_0x562ca9(0x105)]=new Set();['record'](_0x374055,_0x3dc477){const _0x234ee5={_0x2bdae4:0x108,_0x49d330:0xb8,_0x4399ed:0xd2},_0x268b5c=_0x562ca9;this[_0x268b5c(_0x234ee5._0x2bdae4)][_0x268b5c(_0x234ee5._0x49d330)]({'scope':this[_0x268b5c(_0x234ee5._0x4399ed)],'method':_0x374055,'args':_0x3dc477});}[_0x562ca9(0xce)](){const _0x5355d9=_0x562ca9;return this[_0x5355d9(0xb5)];}[_0x562ca9(0xaf)](){const _0x56657c={_0x1cb9b7:0xd9},_0x324c1=_0x562ca9,_0xfc4254=this[_0x324c1(0xb5)][this[_0x324c1(0xa1)]];if(!_0xfc4254)throw new DriverError(_0x324c1(_0x56657c._0x1cb9b7),{'activeIdx':this[_0x324c1(0xa1)]});return _0xfc4254;}['consoleEntries'](){const _0x242e12={_0x45cf1d:0x122},_0x6ef77f=_0x562ca9;return this[_0x6ef77f(0xe3)][_0x6ef77f(_0x242e12._0x45cf1d)]??[];}['networkEntries'](){const _0x1f9a93={_0x1fc114:0xe9},_0x258a1b=_0x562ca9;return this['behavior'][_0x258a1b(_0x1f9a93._0x1fc114)]??[];}async[_0x562ca9(0x11b)](_0x20d49a){const _0x4bbf2f={_0x501140:0xfd,_0x4134e8:0xb5},_0x3dc724=_0x562ca9;this[_0x3dc724(_0x4bbf2f._0x501140)]('setActivePage',[_0x20d49a]);if(_0x20d49a<0x0||_0x20d49a>=this[_0x3dc724(_0x4bbf2f._0x4134e8)][_0x3dc724(0xa9)])throw new DriverError(_0x3dc724(0xc5),{'index':_0x20d49a,'available':this['pageList'][_0x3dc724(0xa9)]});this['activeIdx']=_0x20d49a,this[_0x3dc724(0xff)][_0x3dc724(0xa9)]=0x0;}[_0x562ca9(0x103)](_0x515319){const _0xebf6a0=_0x562ca9;return subscribe(this[_0xebf6a0(0x105)],_0x515319);}[_0x562ca9(0xbb)](_0x4de472){const _0x10f6ae={_0x5f33e9:0xc9,_0x27eb8b:0xe3},_0x16e172=_0x562ca9,_0x2b6187=this[_0x16e172(0xd2)]+_0x16e172(_0x10f6ae._0x5f33e9)+this[_0x16e172(0xb5)][_0x16e172(0xa9)],_0x29339b=new FakePage(this['recorder'],this[_0x16e172(_0x10f6ae._0x27eb8b)],_0x2b6187,_0x4de472);this[_0x16e172(0xb5)][_0x16e172(0xb8)](_0x29339b);const _0x3ab528=this['pageList'][_0x16e172(0xa9)]-0x1;for(const _0x130219 of this[_0x16e172(0x105)]){try{_0x130219({'index':_0x3ab528,'url':_0x4de472});}catch{}}return _0x3ab528;}[_0x562ca9(0xee)](_0x4878e5){const _0x76cc45={_0x4961bd:0xa9,_0x342f69:0xc5,_0x22a57d:0xb5,_0x59032a:0xb5,_0x23e7c9:0x119},_0x5159c3=_0x562ca9;if(_0x4878e5<0x0||_0x4878e5>=this[_0x5159c3(0xb5)][_0x5159c3(_0x76cc45._0x4961bd)])throw new DriverError(_0x5159c3(_0x76cc45._0x342f69),{'index':_0x4878e5,'available':this[_0x5159c3(_0x76cc45._0x22a57d)][_0x5159c3(0xa9)]});this[_0x5159c3(_0x76cc45._0x59032a)][_0x5159c3(_0x76cc45._0x23e7c9)](_0x4878e5,0x1);}async[_0x562ca9(0xa8)](_0x13bfad){const _0x5f298a={_0x204cae:0xfd,_0x57c483:0xa8,_0x2e267d:0x125,_0x3c2a46:0xa9,_0x1e7585:0xff},_0x3e9585=_0x562ca9;this[_0x3e9585(_0x5f298a._0x204cae)](_0x3e9585(_0x5f298a._0x57c483),[_0x13bfad]);if(!_0x13bfad[_0x3e9585(_0x5f298a._0x2e267d)][_0x3e9585(_0x5f298a._0x3c2a46)])throw new LocatorError(_0x3e9585(0x9f),{'locator':_0x13bfad});this[_0x3e9585(_0x5f298a._0x1e7585)]['push'](_0x13bfad);}async[_0x562ca9(0xd4)](){const _0x5c8cb6={_0x183d8c:0xfd,_0x328bb6:0xbe,_0x545745:0x121},_0x3200dc=_0x562ca9;this[_0x3200dc(_0x5c8cb6._0x183d8c)](_0x3200dc(0xd4),[]);if(this['frameStack'][_0x3200dc(0xa9)]===0x0)throw new DriverError(_0x3200dc(_0x5c8cb6._0x328bb6),{});this[_0x3200dc(0xff)][_0x3200dc(_0x5c8cb6._0x545745)]();}async[_0x562ca9(0xac)](_0x36cf3d,_0x5498cd){const _0x142387={_0x17722b:0xac},_0x542c3a=_0x562ca9;this[_0x542c3a(0xfd)](_0x542c3a(_0x142387._0x17722b),[_0x36cf3d,_0x5498cd]),this[_0x542c3a(0xd7)][_0x36cf3d]=_0x5498cd;}async[_0x562ca9(0xe6)](_0x294e6f){const _0x20d151={_0x50967a:0xe6,_0xc2755:0xd7},_0xe3a234=_0x562ca9;return this[_0xe3a234(0xfd)](_0xe3a234(_0x20d151._0x50967a),[_0x294e6f]),this[_0xe3a234(_0x20d151._0xc2755)][_0x294e6f]??null;}async[_0x562ca9(0xb2)](_0x463a14,_0x2086a3,_0x1df3ca){const _0x4f5ee0={_0xe2d51f:0x11d},_0x8da4b4=_0x562ca9;this['record'](_0x8da4b4(0xb2),[_0x463a14,_0x2086a3,_0x1df3ca]),this[_0x8da4b4(_0x4f5ee0._0xe2d51f)][_0x463a14]=_0x2086a3;}async['getCookie'](_0x29020e){const _0x2eeba0=_0x562ca9;return this['record'](_0x2eeba0(0xa4),[_0x29020e]),this['cookieState'][_0x29020e]??null;}async[_0x562ca9(0xda)](_0x7ecb21){const _0x5322ce=_0x562ca9;this[_0x5322ce(0xfd)]('saveStorageState',[_0x7ecb21]);}async[_0x562ca9(0x110)](_0x4790ba){const _0x79be34=_0x562ca9;return this[_0x79be34(0xfd)](_0x79be34(0x110),[_0x4790ba]),void 0x0;}async[_0x562ca9(0xed)](){const _0xff1f88={_0x25abf2:0xfd},_0x1426c9=_0x562ca9;this[_0x1426c9(_0xff1f88._0x25abf2)]('close',[]);}['frameDepth'](){const _0x31134c=_0x562ca9;return this[_0x31134c(0xff)]['length'];}},FakeWebDriver=class{constructor(_0x435e32={}){const _0x16d750={_0x1fc109:0x108},_0x11ba80=_0x562ca9;this['behavior']=_0x435e32,this[_0x11ba80(_0x16d750._0x1fc109)]=createRecorder();}[_0x562ca9(0xe3)];static{__name(this,_0x562ca9(0x123));}['launched']=![];[_0x562ca9(0x108)];[_0x562ca9(0xcd)]=[];async[_0x562ca9(0xfa)](_0x10dfae){const _0x137cc0=_0x562ca9;this[_0x137cc0(0x108)][_0x137cc0(0xb8)]({'scope':_0x137cc0(0xbd),'method':'launch','args':[_0x10dfae]}),this[_0x137cc0(0xf4)]=!![];}async['newContext'](_0xf71149){const _0x573e34={_0x59484a:0xb8,_0x274b59:0xcf,_0x1e55ec:0x108,_0x2f1257:0x10a,_0x4bd0ff:0xcd},_0x4683eb=_0x562ca9;this[_0x4683eb(0x108)][_0x4683eb(_0x573e34._0x59484a)]({'scope':'driver','method':_0x4683eb(_0x573e34._0x274b59),'args':[_0xf71149]});if(!this[_0x4683eb(0xf4)])throw new DriverError(_0x4683eb(0xf9),{});const _0x1d316b=new FakeContext(this[_0x4683eb(_0x573e34._0x1e55ec)],this['behavior'],_0x4683eb(_0x573e34._0x2f1257)+this[_0x4683eb(0xcd)][_0x4683eb(0xa9)]);return this[_0x4683eb(_0x573e34._0x4bd0ff)]['push'](_0x1d316b),_0x1d316b;}async[_0x562ca9(0xed)](){const _0x5cab2d={_0xec489f:0x108,_0x20458d:0xbd,_0x99dfd2:0xed,_0x1a8fb3:0xf4},_0x498e49=_0x562ca9;this[_0x498e49(_0x5cab2d._0xec489f)][_0x498e49(0xb8)]({'scope':_0x498e49(_0x5cab2d._0x20458d),'method':_0x498e49(_0x5cab2d._0x99dfd2),'args':[]}),this[_0x498e49(_0x5cab2d._0x1a8fb3)]=![];}[_0x562ca9(0x9e)](){return void 0x0;}async[_0x562ca9(0xb9)](){const _0x1602bc=_0x562ca9;throw new DriverError(_0x1602bc(0xf7),{});}['attachExisting'](_0x431c9d){throw new DriverError('attachExisting\x20not\x20supported\x20by\x20FakeWebDriver',{});}[_0x562ca9(0xe1)](){const _0x39213f={_0x677f36:0x108},_0x2e997d=_0x562ca9;return this[_0x2e997d(_0x39213f._0x677f36)][_0x2e997d(0xe1)]();}[_0x562ca9(0xcb)](_0x31054d){const _0x201644={_0x4a1cd0:0x108,_0x4d4747:0xbf},_0x1b49fb=_0x562ca9;return this[_0x1b49fb(_0x201644._0x4a1cd0)][_0x1b49fb(0xe1)]()[_0x1b49fb(_0x201644._0x4d4747)](_0x2d771e=>_0x2d771e[_0x1b49fb(0x116)]===_0x31054d);}};export{FakeWebDriver};
|
|
1
|
+
const _0xaec1f4=_0x5d47;function _0x5d47(_0x346a48,_0x24cb8f){_0x346a48=_0x346a48-0x9e;const _0x103582=_0x1035();let _0x5d47b0=_0x103582[_0x346a48];if(_0x5d47['UnXDjG']===undefined){var _0x480385=function(_0x23f3e9){const _0x3695ab='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4568e9='',_0x259e8d='';for(let _0x343e89=0x0,_0x57ba9a,_0x242d64,_0x1f3c6e=0x0;_0x242d64=_0x23f3e9['charAt'](_0x1f3c6e++);~_0x242d64&&(_0x57ba9a=_0x343e89%0x4?_0x57ba9a*0x40+_0x242d64:_0x242d64,_0x343e89++%0x4)?_0x4568e9+=String['fromCharCode'](0xff&_0x57ba9a>>(-0x2*_0x343e89&0x6)):0x0){_0x242d64=_0x3695ab['indexOf'](_0x242d64);}for(let _0x8b620=0x0,_0x4bde26=_0x4568e9['length'];_0x8b620<_0x4bde26;_0x8b620++){_0x259e8d+='%'+('00'+_0x4568e9['charCodeAt'](_0x8b620)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x259e8d);};_0x5d47['IOIyNP']=_0x480385,_0x5d47['wdzDBj']={},_0x5d47['UnXDjG']=!![];}const _0x4bb564=_0x103582[0x0],_0x5ebbb1=_0x346a48+_0x4bb564,_0x3edcfb=_0x5d47['wdzDBj'][_0x5ebbb1];return!_0x3edcfb?(_0x5d47b0=_0x5d47['IOIyNP'](_0x5d47b0),_0x5d47['wdzDBj'][_0x5ebbb1]=_0x5d47b0):_0x5d47b0=_0x3edcfb,_0x5d47b0;}(function(_0x2d9e26,_0x2dfc2d){const _0x5cf95a={_0x2e2c4e:0xed,_0x444cd6:0xf8,_0x2f8d40:0x105,_0x25e8d3:0xf3},_0x4d6d73=_0x5d47,_0x1b6627=_0x2d9e26();while(!![]){try{const _0x512d7d=parseInt(_0x4d6d73(0x107))/0x1+-parseInt(_0x4d6d73(0xd2))/0x2*(-parseInt(_0x4d6d73(0xaf))/0x3)+parseInt(_0x4d6d73(_0x5cf95a._0x2e2c4e))/0x4+parseInt(_0x4d6d73(0xaa))/0x5*(-parseInt(_0x4d6d73(_0x5cf95a._0x444cd6))/0x6)+parseInt(_0x4d6d73(_0x5cf95a._0x2f8d40))/0x7*(parseInt(_0x4d6d73(0xb2))/0x8)+-parseInt(_0x4d6d73(_0x5cf95a._0x25e8d3))/0x9+parseInt(_0x4d6d73(0x11c))/0xa;if(_0x512d7d===_0x2dfc2d)break;else _0x1b6627['push'](_0x1b6627['shift']());}catch(_0x54809f){_0x1b6627['push'](_0x1b6627['shift']());}}}(_0x1035,0xc65bf));var __defProp=Object[_0xaec1f4(0xfa)],__name=(_0x4568e9,_0x259e8d)=>__defProp(_0x4568e9,_0xaec1f4(0xb3),{'value':_0x259e8d,'configurable':!![]});function _0x1035(){const _0x2e1ce5=['C3bSAwnL','nZm3odeXsLncs1Dm','Ag92zxi','iJ48l2rPDJ4','C2nYzwvUC2HVDa','y2XPy2S','mtaYD2P0EwDT','DhLWzq','zgvMAw5LuhjVCgvYDhK','y2HLy2TLzfn0yxrLqNLezwzHDwX0','Aw5UzxjuzxH0','zxzHBhvHDgvpBKXVy2f0B3i','B25bzNrLCKnSAwnR','C2f2zvn0B3jHz2vtDgf0zq','BMv3ugfNzuXPC3rLBMvYCW','y291BNrcEurLzMf1Bhq','zxjYB3jpBK5LEhrby3rPB24','DxbSB2fKrMLSzq','Bgf1BMnOzwq','ndLttLrJDeW','DgLJAW','nde4nJu4s1PPrwDs','y2XPCgjVyxjKugfZDgu','A2LUza','zMLSBa','y29UC29SzuvUDhjPzxm','zw50zxjgCMfTzq','Dgv4DenVBNrLBNrcEurLzMf1Bhq','zhjHz0fUzerYB3a','C2nYB2XSsw50B1zPzxC','y2XVC2vgywTLugfNzq','y29UBMvJDfnOyxjLza','zMLSDgvY','zNjLzxPL','Aw5WDxrwywX1zq','CNvU','yxr0ywnOrxHPC3rPBMC','pgrPDJ48l2rPDJ4','C3rLChm','Cg9W','lNbHz2uW','zgvSzxrL','nZKWmtGZmefeAw5ZzW','C2nYzwvUC2HVDej5DgvZ','z29gB3j3yxjK','CgfNzxm','ywn0AxzLugfNzq','zMfRzsb0AxrSzq','CMvQzwn0','B3v0zxjive1m','Cg9WDxbpBKnSAwnR','Bwv0Ag9K','y2XVy2S','C2nYzwvUC2HVDevSzw1LBNq','zNjVEMvU','C2v0vMLLD3bVCNq','B3v0zxjiDg1SqNLszwy','AxnwAxnPyMXL','rMfRzvDLyKrYAxzLCG','CgfNzuXPC3q','C2vSzwn0t3b0Aw9U','y29VA2LLCW','C2nVCgu','AxneAxnHyMXLzej5rgvMyxvSDa','z2v0qxr0CMLIDxrL','D2fPDezVCG','nde4ntiWz3fMq1zt','yNjVD3nLCKnVBNrLEhrjza','Bg9JywXtDg9YywDLu3rHDgu','y29UBMvJDfnOyxjLzcbUB3qGC3vWCg9YDgvKigj5iezHA2vxzwjeCML2zxi','Aw5WDxrwywX1zuj5rgvMyxvSDa','mZuWmZfft0rMuKC','Bgf1BMnO','y3r4','nJiWmJqWvwz6rLHm','BMfTzq','zNvUy3rPB24','Aw5UzxjuzxH0qNLezwzHDwX0','D2fPDezVCK5HDMLNyxrPB24','ChjLC3m','ywjVDxq6yMXHBMS','z2v0q29VA2LL','y2XVC2u','zw1PDezHA2vqB3b1Ca','yM94zxnjBKnHChr1CMu','zhjPDMvY','tg9JyxrVCKvYCM9Y','yMvOyxzPB3i','zxHPDezYyw1L','y29VA2LLu3rHDgu','zNjHBwvtDgfJAW','AgfZq2XVy2S','DgL0Bgu','C2v0tg9JywXtDg9YywDL','y2HLy2TLzfn0yxrL','y291BNq','y2HLy2S','Dw5JAgvJAW','z290BW','D2fPDezVCKXVywrtDgf0zq','y2fSBhngB3i','ywn0AxzLswr4','y2XVy2SUDgLJAW','zxzHBhvHDgu','rMfRzvbHz2u','BgvUz3rO','nhbnD0jSAa','y3vYCMvUDfvYBa','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','CMvM','C3vIC2nYAwjL','zMfRzs1WBMC','Dgv4DenVBNrLBNq','CMvJB3jK','D2fPDezVCLvYBa','ChvZAa','BM8Gywn0AxzLihbHz2uGAw4Gy29UDgv4Da','y2fSBhm','pgrPDIbKyxrHlxvUB3rLC3qTCMvMpsi','rMfRzunVBNrLEhq','y2XVy2TgCM96zw4','zNjHBwvezxb0Aa','y2XVy2SUzNjLzxPL','zg91yMXLq2XPy2S','C2v0q29VA2LL','CMvJB3jKzxi','zwXLBwvUDeHPBNrcEvjLzG','AxneAxnHyMXLza','CMvSB2fK','C2v0qwn0AxzLugfNzq','Bwf5yMvuAhjVDW','z29cywnR','BMv0D29YA0vUDhjPzxm','mJe3mda4nfriufLdDG','D2fPDezVCLrLEhq','BMv3q29UDgv4Da','Aw5ZCgvJDevSzw1LBNq','y2fWDhvYzujVEgvZ'];_0x1035=function(){return _0x2e1ce5;};return _0x1035();}function subscribe(_0x343e89,_0x57ba9a){return _0x343e89['add'](_0x57ba9a),()=>{const _0x494374=_0x5d47;_0x343e89[_0x494374(0x11b)](_0x57ba9a);};}__name(subscribe,_0xaec1f4(0xd6));import{UnotestError}from'@unotest/core';var DriverError=class extends UnotestError{static{__name(this,'DriverError');}},LocatorError=class extends UnotestError{static{__name(this,_0xaec1f4(0xbe));}},ClockNotInstalledError=class extends DriverError{static{__name(this,'ClockNotInstalledError');}constructor(){super('the\x20page\x20clock\x20is\x20not\x20installed\x20on\x20this\x20browser\x20—\x20it\x20has\x20to\x20be\x20in\x20place\x20before\x20the\x20first\x20page\x20loads,\x20or\x20the\x20page\x27s\x20own\x20timers\x20keep\x20real\x20time.\x20A\x20run\x20installs\x20it\x20when\x20the\x20scenario\x20or\x20its\x20helpers\x20call\x20clockFreeze\x20/\x20clockTick\x20/\x20clockRun;\x20over\x20MCP,\x20open\x20the\x20browser\x20with\x20new_context\x20{clock:\x20true}\x20(or\x20explore_start\x20{clock:\x20true}).',{});}},NO_CLOCK={'freeze':__name(()=>Promise[_0xaec1f4(0x122)](new ClockNotInstalledError()),_0xaec1f4(0x113)),'tick':__name(()=>Promise['reject'](new ClockNotInstalledError()),'tick'),'run':__name(()=>Promise[_0xaec1f4(0x122)](new ClockNotInstalledError()),_0xaec1f4(0x115)),'frozen':__name(()=>![],'frozen')};function createRecorder(){const _0x441227={_0x4f4bb3:0xdd},_0x3aa806=_0xaec1f4,_0x242d64=[];let _0x1f3c6e=0x0;return{'push':__name(_0x8b620=>_0x242d64['push']({..._0x8b620,'seq':_0x1f3c6e++}),'push'),'calls':__name(()=>_0x242d64,_0x3aa806(_0x441227._0x4f4bb3))};}__name(createRecorder,'createRecorder');var FakePage=class{constructor(_0x4bde26,_0x32d208,_0x4525cf,_0x234dc8){const _0x3e81d7={_0x5a637f:0xe5,_0x519e1b:0xbf,_0x133ac7:0xd3},_0x18ad5a=_0xaec1f4;this[_0x18ad5a(_0x3e81d7._0x5a637f)]=_0x4bde26,this[_0x18ad5a(_0x3e81d7._0x519e1b)]=_0x32d208,this['scope']=_0x4525cf,this[_0x18ad5a(_0x3e81d7._0x133ac7)]=_0x234dc8;}[_0xaec1f4(0xe5)];[_0xaec1f4(0xbf)];['scope'];static{__name(this,_0xaec1f4(0xd0));}[_0xaec1f4(0xd3)];[_0xaec1f4(0xfe)];[_0xaec1f4(0xd9)](_0x3dbcc9,_0xf0ff12){const _0x19c028=_0xaec1f4;this[_0x19c028(0xe5)][_0x19c028(0xdb)]({'scope':this[_0x19c028(0xa6)],'method':_0x3dbcc9,'args':_0xf0ff12});}['maybeThrow'](){const _0x30b02d={_0x28ca2a:0xbf,_0x58e933:0x102,_0x288f6e:0xbf},_0x285a49=_0xaec1f4;if(this[_0x285a49(_0x30b02d._0x28ca2a)][_0x285a49(_0x30b02d._0x58e933)]){const _0x409f70=this[_0x285a49(_0x30b02d._0x28ca2a)][_0x285a49(0x102)];this[_0x285a49(_0x30b02d._0x288f6e)]['errorOnNextAction']=void 0x0;throw _0x409f70;}}['url'](){return this['currentUrl'];}async['title'](){const _0x4defa9={_0x32b5ba:0xd9},_0x43b14b=_0xaec1f4;return this[_0x43b14b(_0x4defa9._0x32b5ba)](_0x43b14b(0xc4),[]),_0x43b14b(0x121);}async[_0xaec1f4(0xf7)](_0x43fa74,_0x1282a1){const _0x1bf9a6={_0x1dcd69:0xd9,_0x4f7ab2:0xea},_0x2f477f=_0xaec1f4;this[_0x2f477f(_0x1bf9a6._0x1dcd69)](_0x2f477f(0xf7),[_0x43fa74,_0x1282a1]),this[_0x2f477f(_0x1bf9a6._0x4f7ab2)](),this['onAfterClick']?.();}async[_0xaec1f4(0xe3)](_0x1397b7,_0x124124){const _0x5ad487={_0x3f085d:0xe3,_0x2ee1ea:0xea},_0x154d60=_0xaec1f4;this['record'](_0x154d60(_0x5ad487._0x3f085d),[_0x1397b7,_0x124124]),this[_0x154d60(_0x5ad487._0x2ee1ea)]();}async['fill'](_0x232c81,_0x44f4fc,_0x47e5ab){const _0x46238d={_0x4c906b:0x10a},_0x3c3929=_0xaec1f4;this[_0x3c3929(0xd9)](_0x3c3929(_0x46238d._0x4c906b),[_0x232c81,_0x44f4fc,_0x47e5ab]),this['maybeThrow']();}async[_0xaec1f4(0xb7)](_0x505563,_0x4b5acb,_0x2ec1a0){const _0x4459ff={_0x5a931a:0xb7,_0x596a38:0xea},_0x2e8c78=_0xaec1f4;this[_0x2e8c78(0xd9)](_0x2e8c78(_0x4459ff._0x5a931a),[_0x505563,_0x4b5acb,_0x2ec1a0]),this[_0x2e8c78(_0x4459ff._0x596a38)]();}async[_0xaec1f4(0xc8)](_0x3b0a8f,_0x2b70cb){const _0x5461b4={_0x15dd4d:0xd9},_0x247028=_0xaec1f4;this[_0x247028(_0x5461b4._0x15dd4d)](_0x247028(0xc8),[_0x3b0a8f,_0x2b70cb]),this[_0x247028(0xea)]();}async['uncheck'](_0x316b28,_0x2e9e65){const _0x1311a1={_0x12f9c0:0xc9},_0x5e59ad=_0xaec1f4;this[_0x5e59ad(0xd9)](_0x5e59ad(_0x1311a1._0x12f9c0),[_0x316b28,_0x2e9e65]),this[_0x5e59ad(0xea)]();}async[_0xaec1f4(0xa4)](_0xf64fd5,_0x507368,_0x43a762){const _0x328960={_0x2ed593:0xd9,_0x191f17:0xea},_0x3c954c=_0xaec1f4;this[_0x3c954c(_0x328960._0x2ed593)](_0x3c954c(0xa4),[_0xf64fd5,_0x507368,_0x43a762]),this[_0x3c954c(_0x328960._0x191f17)]();}async[_0xaec1f4(0xf4)](_0x1c2387,_0x35173d){const _0x3861e9={_0x335ac8:0xf4},_0x342e3c=_0xaec1f4;this[_0x342e3c(0xd9)](_0x342e3c(_0x3861e9._0x335ac8),[_0x1c2387,_0x35173d]),this['maybeThrow']();}async[_0xaec1f4(0x10f)](_0x3c6134){const _0x496ee6={_0x4a89e1:0xd9,_0x582928:0xea},_0xe6507b=_0xaec1f4;this[_0xe6507b(_0x496ee6._0x4a89e1)]('scrollIntoView',[_0x3c6134]),this[_0xe6507b(_0x496ee6._0x582928)]();}async[_0xaec1f4(0x10e)](_0x1aa306,_0x3c7a06,_0xcfa1a){const _0x40e74c={_0x539f04:0xd9,_0x1e6a7a:0x10e},_0x3815ea=_0xaec1f4;this[_0x3815ea(_0x40e74c._0x539f04)](_0x3815ea(_0x40e74c._0x1e6a7a),[_0x1aa306,_0x3c7a06,_0xcfa1a]),this[_0x3815ea(0xea)]();}async[_0xaec1f4(0x103)](_0x320db9,_0x2c8a97){const _0x19cbb7={_0x5dbab9:0xea},_0x29671b=_0xaec1f4;this['record']('uploadFile',[_0x320db9,_0x2c8a97]),this[_0x29671b(_0x19cbb7._0x5dbab9)]();}async[_0xaec1f4(0x108)](_0xa8a6dd,_0x3a5fa9){const _0x4b1f26={_0x3b829c:0xd9,_0x104ff9:0x108},_0x5a164c=_0xaec1f4;this[_0x5a164c(_0x4b1f26._0x3b829c)](_0x5a164c(_0x4b1f26._0x104ff9),[_0xa8a6dd,_0x3a5fa9]),this['maybeThrow']();}async[_0xaec1f4(0xc7)](_0x59af3c){const _0x56c9da=_0xaec1f4;return this[_0x56c9da(0xd9)](_0x56c9da(0xc7),[_0x59af3c]),this['behavior'][_0x56c9da(0x101)]??0x1;}async[_0xaec1f4(0xd8)](_0x3fc461){const _0x38c135={_0x31aeac:0xd9},_0x71ec86=_0xaec1f4;return this[_0x71ec86(_0x38c135._0x31aeac)]('textContent',[_0x3fc461]),this['behavior'][_0x71ec86(0x10d)]??'';}async[_0xaec1f4(0xfc)](_0x40b5b6){const _0x2b8afa={_0xce41bb:0xfc,_0x5b568e:0xb5},_0xa602ec=_0xaec1f4;return this[_0xa602ec(0xd9)](_0xa602ec(_0x2b8afa._0xce41bb),[_0x40b5b6]),this['behavior'][_0xa602ec(_0x2b8afa._0x5b568e)]??this[_0xa602ec(0xbf)][_0xa602ec(0x10d)]??'';}async[_0xaec1f4(0x114)](_0x4a473f){const _0x195efe={_0x23ebbc:0xae},_0x28189a=_0xaec1f4;return this[_0x28189a(0xd9)](_0x28189a(0x114),[_0x4a473f]),this['behavior'][_0x28189a(_0x195efe._0x23ebbc)]??'';}async[_0xaec1f4(0xc6)](_0x55cc95){const _0x366059={_0x4f43d1:0xd9},_0x547669=_0xaec1f4;return this[_0x547669(_0x366059._0x4f43d1)]('checkedState',[_0x55cc95]),this[_0x547669(0xbf)][_0x547669(0xfb)]??null;}async[_0xaec1f4(0xa1)](_0x3fed1c){const _0x130bb5={_0x989a18:0xbf},_0xe6fb51=_0xaec1f4;return this[_0xe6fb51(0xd9)](_0xe6fb51(0xa1),[_0x3fed1c]),this[_0xe6fb51(_0x130bb5._0x989a18)]['isVisibleByDefault']??!![];}async[_0xaec1f4(0xe7)](_0x4dc45c){const _0x450ede={_0xb04814:0xbf},_0x4cfca4=_0xaec1f4;return this[_0x4cfca4(0xd9)](_0x4cfca4(0xe7),[_0x4dc45c]),this[_0x4cfca4(_0x450ede._0xb04814)][_0x4cfca4(0xa7)]??![];}async[_0xaec1f4(0xa8)](_0x4ac476,_0x21501c){const _0x47249e={_0x59fe1c:0xbf},_0x6b4797=_0xaec1f4;return this[_0x6b4797(0xd9)]('getAttribute',[_0x4ac476,_0x21501c]),this[_0x6b4797(_0x47249e._0x59fe1c)]['attributesByDefault']?.[_0x21501c]??null;}async[_0xaec1f4(0xa9)](_0x3d293e,_0xb4b607){const _0x3acd87={_0x92014b:0xa9},_0x303447=_0xaec1f4;this['record'](_0x303447(_0x3acd87._0x92014b),[_0x3d293e,_0xb4b607]);}async[_0xaec1f4(0xda)](_0x2845bd,_0x120e87){const _0x62f474={_0x24898b:0xd9,_0x18ceb8:0xda},_0x58f936=_0xaec1f4;this[_0x58f936(_0x62f474._0x24898b)](_0x58f936(_0x62f474._0x18ceb8),[_0x2845bd,_0x120e87]);}async[_0xaec1f4(0xee)](_0x3ed274,_0x446050){const _0x2b6a59={_0x4d11a9:0xee},_0x38b889=_0xaec1f4;this[_0x38b889(0xd9)](_0x38b889(_0x2b6a59._0x4d11a9),[_0x3ed274,_0x446050]);}async[_0xaec1f4(0xb6)](_0x5d8abb){const _0x5491cd=_0xaec1f4;this['record'](_0x5491cd(0xb6),[_0x5d8abb]);}async[_0xaec1f4(0xcb)](_0x17c6a4,_0x367146){const _0x2b1c69={_0x2e8597:0xd9,_0x4951c0:0xcb},_0x29f275=_0xaec1f4;this[_0x29f275(_0x2b1c69._0x2e8597)](_0x29f275(_0x2b1c69._0x4951c0),[_0x17c6a4,_0x367146]);}async[_0xaec1f4(0xca)](_0x181295,_0x1266aa){const _0x3e72fe={_0x404dbd:0xd9,_0x44b088:0xca,_0x1408d7:0xd3},_0x25edb9=_0xaec1f4;this[_0x25edb9(_0x3e72fe._0x404dbd)](_0x25edb9(_0x3e72fe._0x44b088),[_0x181295,_0x1266aa]),this[_0x25edb9(_0x3e72fe._0x1408d7)]=_0x181295;}async[_0xaec1f4(0xe8)](_0x4d6f8){this['record']('reload',[_0x4d6f8]);}async[_0xaec1f4(0xeb)](_0x43f349){const _0x205ed0=_0xaec1f4;this[_0x205ed0(0xd9)](_0x205ed0(0xeb),[_0x43f349]);}async[_0xaec1f4(0x11e)](_0x512bfb){const _0x49e6e2={_0x32235c:0xd9},_0xcd739d=_0xaec1f4;this[_0xcd739d(_0x49e6e2._0x32235c)](_0xcd739d(0x11e),[_0x512bfb]);}async['evaluate'](_0x1038ea){const _0x1cdc03={_0x32806c:0xbf},_0x3f76bb=_0xaec1f4;return this['record'](_0x3f76bb(0xcf),[_0x1038ea]),this[_0x3f76bb(_0x1cdc03._0x32806c)]['evaluateResult'];}async[_0xaec1f4(0xfd)](_0x3de627,_0x343a51){const _0x3a5b8d=_0xaec1f4;return this[_0x3a5b8d(0xd9)](_0x3a5b8d(0xfd),[_0x3de627,_0x343a51]),void 0x0;}async[_0xaec1f4(0xf0)](_0x28cc91){const _0x996240={_0x5c3ca5:0x118,_0x2d4d17:0x109,_0x21ba5d:0xd5},_0x13d336=_0xaec1f4;this[_0x13d336(0xd9)]('inspectElement',[_0x28cc91]);if(_0x28cc91[_0x13d336(_0x996240._0x5c3ca5)][_0x13d336(0xd1)]!==0x1||_0x28cc91['steps'][0x0][_0x13d336(_0x996240._0x2d4d17)]!==_0x13d336(_0x996240._0x21ba5d))return null;const _0x242cef=_0x28cc91[_0x13d336(0x118)][0x0]['ref'],_0x4516c5=this[_0x13d336(0xbf)][_0x13d336(0xe6)]?.[_0x242cef];return _0x4516c5??null;}async[_0xaec1f4(0xf6)](_0x31b497){const _0x470032={_0x1dc2c5:0xd9,_0x2a4c3b:0x11d},_0x576d77=_0xaec1f4;return this[_0x576d77(_0x470032._0x1dc2c5)]('screenshot',[_0x31b497]),this[_0x576d77(_0x470032._0x2a4c3b)](_0x31b497?.['type']);}async[_0xaec1f4(0x127)](_0x31303f,_0x36c8d4){const _0x2f9e75={_0x5e26ab:0x127,_0x5163cf:0x11d,_0x35c801:0xf9},_0x447347=_0xaec1f4;return this['record'](_0x447347(_0x2f9e75._0x5e26ab),[_0x31303f,_0x36c8d4]),this[_0x447347(_0x2f9e75._0x5163cf)](_0x36c8d4?.[_0x447347(_0x2f9e75._0x35c801)]);}async[_0xaec1f4(0xbc)](_0x2bbe6e,_0x2c7b6a){const _0x528cd0={_0x446d80:0xd9,_0x5dc335:0xbf},_0x2dc675=_0xaec1f4;return this[_0x2dc675(_0x528cd0._0x446d80)](_0x2dc675(0xbc),[_0x2bbe6e,_0x2c7b6a]),this[_0x2dc675(_0x528cd0._0x5dc335)][_0x2dc675(0xf1)]?this['behavior']['captureBoxes'](_0x2bbe6e,_0x2c7b6a):[];}[_0xaec1f4(0x11d)](_0x12c683){const _0x1284c8={_0x3058c4:0x11d,_0x2beee7:0xd7},_0x3c4b08=_0xaec1f4,_0x1167c9=this['behavior'][_0x3c4b08(_0x1284c8._0x3058c4)];if(_0x1167c9===void 0x0)return Buffer['from'](_0x3c4b08(_0x1284c8._0x2beee7));return typeof _0x1167c9===_0x3c4b08(0xb4)?_0x1167c9(_0x12c683):_0x1167c9;}async['outerHTML'](_0x5ac332){const _0x470b2f={_0xed0172:0x118,_0x3170da:0x109,_0x56a708:0xbf,_0x1b3d6c:0xde},_0x112a78=_0xaec1f4;this['record'](_0x112a78(0x123),[_0x5ac332]);if(_0x5ac332[_0x112a78(_0x470b2f._0xed0172)][_0x112a78(0xd1)]===0x1&&_0x5ac332['steps'][0x0][_0x112a78(_0x470b2f._0x3170da)]===_0x112a78(0xd5)){const _0x1beb65=_0x5ac332['steps'][0x0][_0x112a78(0xd5)];return this[_0x112a78(_0x470b2f._0x56a708)][_0x112a78(0xa0)]?.[_0x1beb65]??_0x112a78(_0x470b2f._0x1b3d6c)+_0x1beb65+_0x112a78(0xf5);}return _0x112a78(0x117);}},FakeContext=class{constructor(_0xab326f,_0x56d4ac,_0x496561,_0x5e3541=![]){const _0x45b3fa={_0xcd078f:0xa6,_0x5bc6e5:0xc3,_0x3f3c69:0xe0,_0x29e00b:0x11a,_0x5f160a:0xb8,_0x50d4e9:0xa5},_0x17f5b9={_0x4cc3b5:0x124},_0x4c4bf1=_0xaec1f4;this['recorder']=_0xab326f,this[_0x4c4bf1(0xbf)]=_0x56d4ac,this[_0x4c4bf1(_0x45b3fa._0xcd078f)]=_0x496561,this[_0x4c4bf1(_0x45b3fa._0x5bc6e5)]=_0x5e3541,this[_0x4c4bf1(_0x45b3fa._0x3f3c69)]=![];const _0x4de301=new FakePage(_0xab326f,_0x56d4ac,_0x496561+_0x4c4bf1(_0x45b3fa._0x29e00b),_0x56d4ac['initialUrl']??_0x4c4bf1(_0x45b3fa._0x5f160a));_0x56d4ac[_0x4c4bf1(0x124)]&&(_0x4de301['onAfterClick']=()=>{const _0xcc2bf9=_0x4c4bf1;this[_0xcc2bf9(0xbb)](_0x56d4ac[_0xcc2bf9(_0x17f5b9._0x4cc3b5)]);}),this[_0x4c4bf1(0xa3)]=[_0x4de301],this[_0x4c4bf1(0xac)]={..._0x56d4ac['localStorage']??{}},this[_0x4c4bf1(0xc1)]={..._0x56d4ac[_0x4c4bf1(_0x45b3fa._0x50d4e9)]??{}};}[_0xaec1f4(0xe5)];[_0xaec1f4(0xbf)];[_0xaec1f4(0xa6)];[_0xaec1f4(0xc3)];static{__name(this,_0xaec1f4(0xdf));}['clockFrozen'];[_0xaec1f4(0xa3)];['activeIdx']=0x0;[_0xaec1f4(0xc2)]=[];[_0xaec1f4(0xac)];[_0xaec1f4(0xc1)];[_0xaec1f4(0x100)]=new Set();[_0xaec1f4(0xd9)](_0x1605e2,_0x5d26b8){const _0x3ce8b5=_0xaec1f4;this[_0x3ce8b5(0xe5)][_0x3ce8b5(0xdb)]({'scope':this[_0x3ce8b5(0xa6)],'method':_0x1605e2,'args':_0x5d26b8});}[_0xaec1f4(0x11f)](){const _0x19efdd={_0x20f361:0xa3},_0x448ca5=_0xaec1f4;return this[_0x448ca5(_0x19efdd._0x20f361)];}[_0xaec1f4(0x120)](){const _0x196d81={_0x4ba8f6:0xa3},_0x6f7be4=_0xaec1f4,_0x2cc784=this[_0x6f7be4(_0x196d81._0x4ba8f6)][this[_0x6f7be4(0xcd)]];if(!_0x2cc784)throw new DriverError(_0x6f7be4(0xdc),{'activeIdx':this['activeIdx']});return _0x2cc784;}[_0xaec1f4(0x10b)](){const _0x3fa345={_0x10824e:0xbf},_0xbb6405=_0xaec1f4;return this[_0xbb6405(_0x3fa345._0x10824e)][_0xbb6405(0x10b)]??[];}[_0xaec1f4(0xec)](){const _0x16d6ff=_0xaec1f4;return this['behavior'][_0x16d6ff(0xec)]??[];}async[_0xaec1f4(0xe9)](_0xcbd6f6){const _0x17789e={_0x41f2cd:0xe9,_0x530f8a:0xa3,_0x489c1b:0xd1},_0x5bf01f=_0xaec1f4;this[_0x5bf01f(0xd9)](_0x5bf01f(_0x17789e._0x41f2cd),[_0xcbd6f6]);if(_0xcbd6f6<0x0||_0xcbd6f6>=this[_0x5bf01f(_0x17789e._0x530f8a)][_0x5bf01f(_0x17789e._0x489c1b)])throw new DriverError('page\x20index\x20out\x20of\x20range',{'index':_0xcbd6f6,'available':this[_0x5bf01f(0xa3)]['length']});this[_0x5bf01f(0xcd)]=_0xcbd6f6,this[_0x5bf01f(0xc2)][_0x5bf01f(0xd1)]=0x0;}['onNewPage'](_0x21709f){const _0x1ddaa3={_0x30aeab:0x100},_0x5b4b70=_0xaec1f4;return subscribe(this[_0x5b4b70(_0x1ddaa3._0x30aeab)],_0x21709f);}async[_0xaec1f4(0x9f)](_0x52f3f5){const _0x37b7a6={_0x28d17d:0xd9},_0x268ecd=_0xaec1f4;this[_0x268ecd(_0x37b7a6._0x28d17d)](_0x268ecd(0x9f),[_0x52f3f5]);}async[_0xaec1f4(0xab)](){const _0x326b08={_0x3eb2c3:0xa6},_0x5d05dd=_0xaec1f4;return this[_0x5d05dd(_0x326b08._0x3eb2c3)];}[_0xaec1f4(0x126)](){const _0x4680fe={_0x3bb3fa:0x106,_0x52e02c:0x115,_0xaf50d3:0x9e},_0x2282bd={_0x1bfc30:0xd9,_0x12a507:0xe0},_0x27937a={_0x25828f:0xe2},_0x4bf6fd=_0xaec1f4;if(!this['hasClock'])return NO_CLOCK;return{'freeze':__name(async _0x8cae18=>{const _0x62e485=_0x5d47;this[_0x62e485(0xd9)](_0x62e485(_0x27937a._0x25828f),[_0x8cae18]),this[_0x62e485(0xe0)]=!![];},_0x4bf6fd(0x113)),'tick':__name(async _0x15573b=>this[_0x4bf6fd(0xd9)](_0x4bf6fd(0xce),[_0x15573b]),_0x4bf6fd(_0x4680fe._0x3bb3fa)),'run':__name(async()=>{const _0x4fadd2=_0x4bf6fd;this[_0x4fadd2(_0x2282bd._0x1bfc30)]('clock.run',[]),this[_0x4fadd2(_0x2282bd._0x12a507)]=![];},_0x4bf6fd(_0x4680fe._0x52e02c)),'frozen':__name(()=>this[_0x4bf6fd(0xe0)],_0x4bf6fd(_0x4680fe._0xaf50d3))};}['emitFakePopup'](_0x5cb17c){const _0xab6c94={_0x1b1e0a:0xa6,_0x590af0:0xa3,_0xbafca4:0xe5},_0x57f028=_0xaec1f4,_0x18f13f=this[_0x57f028(_0xab6c94._0x1b1e0a)]+'.page'+this[_0x57f028(_0xab6c94._0x590af0)]['length'],_0x4119c0=new FakePage(this[_0x57f028(_0xab6c94._0xbafca4)],this['behavior'],_0x18f13f,_0x5cb17c);this['pageList']['push'](_0x4119c0);const _0x54c314=this[_0x57f028(0xa3)][_0x57f028(0xd1)]-0x1;for(const _0x5eab78 of this[_0x57f028(0x100)]){try{_0x5eab78({'index':_0x54c314,'url':_0x5cb17c});}catch{}}return _0x54c314;}[_0xaec1f4(0x110)](_0x153672){const _0x58d9a3={_0x3e9800:0xa3,_0x113cf4:0xd1,_0x1ccb2d:0xa3,_0x34e60b:0xa3,_0x11d507:0xf2},_0xa866b5=_0xaec1f4;if(_0x153672<0x0||_0x153672>=this[_0xa866b5(_0x58d9a3._0x3e9800)][_0xa866b5(_0x58d9a3._0x113cf4)])throw new DriverError('page\x20index\x20out\x20of\x20range',{'index':_0x153672,'available':this[_0xa866b5(_0x58d9a3._0x1ccb2d)]['length']});this[_0xa866b5(_0x58d9a3._0x34e60b)][_0xa866b5(_0x58d9a3._0x11d507)](_0x153672,0x1);}async[_0xaec1f4(0x10c)](_0x1bd8f3){const _0x10dc36={_0x11934b:0x118},_0x34a997=_0xaec1f4;this[_0x34a997(0xd9)](_0x34a997(0x10c),[_0x1bd8f3]);if(!_0x1bd8f3[_0x34a997(_0x10dc36._0x11934b)][_0x34a997(0xd1)])throw new LocatorError('enterFrame\x20called\x20with\x20empty\x20locator',{'locator':_0x1bd8f3});this[_0x34a997(0xc2)][_0x34a997(0xdb)](_0x1bd8f3);}async[_0xaec1f4(0xc0)](){const _0x401186={_0x5d6dc3:0x119},_0x25f8ae=_0xaec1f4;this['record'](_0x25f8ae(0xc0),[]);if(this[_0x25f8ae(0xc2)]['length']===0x0)throw new DriverError(_0x25f8ae(0xd4),{});this[_0x25f8ae(0xc2)][_0x25f8ae(_0x401186._0x5d6dc3)]();}async[_0xaec1f4(0xc5)](_0x3b56ee,_0x448c06){const _0xf24f2={_0x2bcf08:0xc5,_0x21058c:0xac},_0x188424=_0xaec1f4;this[_0x188424(0xd9)](_0x188424(_0xf24f2._0x2bcf08),[_0x3b56ee,_0x448c06]),this[_0x188424(_0xf24f2._0x21058c)][_0x3b56ee]=_0x448c06;}async['getLocalStorage'](_0x5931e8){const _0x1e51f3=_0xaec1f4;return this[_0x1e51f3(0xd9)]('getLocalStorage',[_0x5931e8]),this['localStorageState'][_0x5931e8]??null;}async[_0xaec1f4(0xe4)](_0x14643f,_0x1e1bd9,_0x1bfb1c){const _0x10ad48=_0xaec1f4;this[_0x10ad48(0xd9)](_0x10ad48(0xe4),[_0x14643f,_0x1e1bd9,_0x1bfb1c]),this[_0x10ad48(0xc1)][_0x14643f]=_0x1e1bd9;}async[_0xaec1f4(0xb9)](_0x2b87cb){const _0xebe33f={_0x2eb727:0xd9,_0x14a028:0xb9},_0x36c81a=_0xaec1f4;return this[_0x36c81a(_0xebe33f._0x2eb727)](_0x36c81a(_0xebe33f._0x14a028),[_0x2b87cb]),this[_0x36c81a(0xc1)][_0x2b87cb]??null;}async[_0xaec1f4(0xff)](_0x1ccc65){const _0x440494={_0x4aff44:0xff},_0x517d8e=_0xaec1f4;this['record'](_0x517d8e(_0x440494._0x4aff44),[_0x1ccc65]);}async[_0xaec1f4(0xcf)](_0x45d862){const _0xeb59de={_0x33724b:0xd9},_0x545ae0=_0xaec1f4;return this[_0x545ae0(_0xeb59de._0x33724b)]('evaluate',[_0x45d862]),void 0x0;}async[_0xaec1f4(0xba)](){const _0x3fbded={_0x3fc0c7:0xba},_0x221028=_0xaec1f4;this[_0x221028(0xd9)](_0x221028(_0x3fbded._0x3fc0c7),[]);}[_0xaec1f4(0xe1)](){return this['frameStack']['length'];}},FakeWebDriver=class{constructor(_0xdc3a90={}){const _0x41110c={_0x13d92d:0xbf,_0x2fa439:0xe5},_0x24d3a1=_0xaec1f4;this[_0x24d3a1(_0x41110c._0x13d92d)]=_0xdc3a90,this[_0x24d3a1(_0x41110c._0x2fa439)]=createRecorder();}[_0xaec1f4(0xbf)];static{__name(this,_0xaec1f4(0xa2));}[_0xaec1f4(0x104)]=![];[_0xaec1f4(0xe5)];['contexts']=[];async[_0xaec1f4(0xb0)](_0x10f766){const _0x422868={_0x1c2e6b:0xe5},_0x1388c6=_0xaec1f4;this[_0x1388c6(_0x422868._0x1c2e6b)][_0x1388c6(0xdb)]({'scope':'driver','method':'launch','args':[_0x10f766]}),this[_0x1388c6(0x104)]=!![];}async[_0xaec1f4(0xef)](_0x215ee1){const _0x5a6b29=_0xaec1f4;this[_0x5a6b29(0xe5)][_0x5a6b29(0xdb)]({'scope':_0x5a6b29(0xbd),'method':'newContext','args':[_0x215ee1]});if(!this['launched'])throw new DriverError('newContext\x20called\x20before\x20launch()',{});const _0x1180b0=new FakeContext(this['recorder'],this[_0x5a6b29(0xbf)],_0x5a6b29(0xb1)+this['contexts']['length'],_0x215ee1?.[_0x5a6b29(0x126)]===!![]);return this['contexts']['push'](_0x1180b0),_0x1180b0;}async[_0xaec1f4(0xba)](){const _0x31da30={_0x2db3d0:0x104},_0x1d645d=_0xaec1f4;this[_0x1d645d(0xe5)][_0x1d645d(0xdb)]({'scope':_0x1d645d(0xbd),'method':'close','args':[]}),this[_0x1d645d(_0x31da30._0x2db3d0)]=![];}['wsEndpoint'](){return void 0x0;}async[_0xaec1f4(0x111)](){const _0x29c7f2={_0x395348:0xad},_0x4f698c=_0xaec1f4;throw new DriverError(_0x4f698c(_0x29c7f2._0x395348),{});}async[_0xaec1f4(0x116)](_0x266441){throw new DriverError('attachExisting\x20not\x20supported\x20by\x20FakeWebDriver',{});}[_0xaec1f4(0xdd)](){const _0x442ad2=_0xaec1f4;return this[_0x442ad2(0xe5)]['calls']();}[_0xaec1f4(0xcc)](_0x42441c){const _0x36bf69={_0x96fe94:0xdd},_0xd8b6f4=_0xaec1f4;return this[_0xd8b6f4(0xe5)][_0xd8b6f4(_0x36bf69._0x96fe94)]()[_0xd8b6f4(0x112)](_0x152a55=>_0x152a55[_0xd8b6f4(0x125)]===_0x42441c);}};export{FakeWebDriver};
|
package/dist/dsl/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
import { Matcher, RegexLiteral, JudgeRequest, JudgeVerdict, SoftFailureRecord } from '@unotest/protocol';
|
|
1
|
+
import { L as LocatorValue, D as DriverContext, W as WebDriver, h as DriverPage } from '../interfaces-DEmGI704.js';
|
|
2
|
+
export { n as LocatorStep, o as appendStep, p as describeLocator, q as isLocatorValue, r as rootedAt } from '../interfaces-DEmGI704.js';
|
|
3
|
+
import { Matcher, RegexLiteral, JudgeRequest, JudgeVerdict, VisualFailureRecord, SoftFailureRecord, TeardownStateRecord, TeardownFailureRecord } from '@unotest/protocol';
|
|
4
4
|
import { ExecutionWalker, ExecutionEvent, RunResult, RunOptions } from '@unotest/dsl/executor';
|
|
5
5
|
export { ExecutionError, ExecutionEvent, RunOptions, RunResult } from '@unotest/dsl/executor';
|
|
6
6
|
import { SandboxConfig } from '../config/schema.js';
|
|
@@ -168,6 +168,131 @@ interface AnnotationSink {
|
|
|
168
168
|
log(text: string): Promise<void>;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
declare class BaselineNames {
|
|
172
|
+
private readonly warn;
|
|
173
|
+
/** scenario → file-safe name → the name the scenario wrote, and the
|
|
174
|
+
* attempts it was asserted in. */
|
|
175
|
+
private readonly given;
|
|
176
|
+
/** `warn` hears of a baseline written twice in one attempt. */
|
|
177
|
+
constructor(warn?: (line: string) => void);
|
|
178
|
+
/** Refuses `raw` when another name of the same scenario already became
|
|
179
|
+
* `file`. The same name twice in one attempt of update mode writes the
|
|
180
|
+
* same file twice — said, since only the last picture stays. */
|
|
181
|
+
claim(scenarioFile: string, file: string, raw: string, attempt: number, updating: boolean): void;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
interface BaselineStore {
|
|
185
|
+
/** Update mode: a snapshot is written as the new baseline and passes. */
|
|
186
|
+
readonly updating: boolean;
|
|
187
|
+
/** Project-relative posix path of the baseline `name` of a scenario. */
|
|
188
|
+
pathFor(scenarioFile: string, name: string): string;
|
|
189
|
+
/** The baseline's bytes, or null when there is none yet. */
|
|
190
|
+
read(scenarioFile: string, name: string): Promise<Uint8Array | null>;
|
|
191
|
+
/** Write `png` as the baseline; returns its project path. */
|
|
192
|
+
write(scenarioFile: string, name: string, png: Uint8Array): Promise<string>;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
interface Rect {
|
|
196
|
+
x: number;
|
|
197
|
+
y: number;
|
|
198
|
+
width: number;
|
|
199
|
+
height: number;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
interface ImageSize {
|
|
203
|
+
width: number;
|
|
204
|
+
height: number;
|
|
205
|
+
}
|
|
206
|
+
interface VisualCheckInput {
|
|
207
|
+
expectedPng: Uint8Array;
|
|
208
|
+
/** Names the baseline in a refusal (its project path). */
|
|
209
|
+
expectedSource: string;
|
|
210
|
+
actualPng: Uint8Array;
|
|
211
|
+
threshold: number;
|
|
212
|
+
excluded: readonly Rect[];
|
|
213
|
+
}
|
|
214
|
+
type VisualCheck = {
|
|
215
|
+
kind: "size-mismatch";
|
|
216
|
+
expected: ImageSize;
|
|
217
|
+
actual: ImageSize;
|
|
218
|
+
} | {
|
|
219
|
+
kind: "compared";
|
|
220
|
+
size: ImageSize;
|
|
221
|
+
differing: number;
|
|
222
|
+
compared: number;
|
|
223
|
+
ratio: number;
|
|
224
|
+
/** The diff picture, PNG. */
|
|
225
|
+
diffPng: Uint8Array;
|
|
226
|
+
};
|
|
227
|
+
interface ImageComparator {
|
|
228
|
+
compare(input: VisualCheckInput): VisualCheck;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
type VisualOutcome = "passed" | "failed" | "updated" | "missing-baseline" | "size-mismatch"
|
|
232
|
+
/** The baseline is there but not a PNG this runner will read. */
|
|
233
|
+
| "unreadable-baseline";
|
|
234
|
+
interface VisualImages {
|
|
235
|
+
expected?: Uint8Array;
|
|
236
|
+
actual?: Uint8Array;
|
|
237
|
+
diff?: Uint8Array;
|
|
238
|
+
/** The snapshot as a baseline would be — named as the assert expects it. */
|
|
239
|
+
candidate?: Uint8Array;
|
|
240
|
+
}
|
|
241
|
+
/** Artifact-root-relative paths of the pictures written for one assert. */
|
|
242
|
+
interface VisualPaths {
|
|
243
|
+
expected?: string;
|
|
244
|
+
actual?: string;
|
|
245
|
+
diff?: string;
|
|
246
|
+
candidate?: string;
|
|
247
|
+
}
|
|
248
|
+
interface VisualAssertReport {
|
|
249
|
+
name: string;
|
|
250
|
+
outcome: VisualOutcome;
|
|
251
|
+
/** Project-relative path of the baseline this assert reads. */
|
|
252
|
+
baseline: string;
|
|
253
|
+
maxDiffRatio: number;
|
|
254
|
+
threshold: number;
|
|
255
|
+
ratio?: number;
|
|
256
|
+
differing?: number;
|
|
257
|
+
compared?: number;
|
|
258
|
+
/** Size of the snapshot. */
|
|
259
|
+
width?: number;
|
|
260
|
+
height?: number;
|
|
261
|
+
/** Size of the baseline, when it differs from the snapshot's. */
|
|
262
|
+
expectedWidth?: number;
|
|
263
|
+
expectedHeight?: number;
|
|
264
|
+
paths: VisualPaths;
|
|
265
|
+
/** Retry attempt the assert ran in, 1-based. */
|
|
266
|
+
attempt: number;
|
|
267
|
+
/** Browser context the snapshot was taken in, when the test holds more
|
|
268
|
+
* than one (#197). */
|
|
269
|
+
contextIndex?: number;
|
|
270
|
+
}
|
|
271
|
+
interface VisualSink {
|
|
272
|
+
/** Write the pictures of one assert under its attempt — a later attempt
|
|
273
|
+
* never overwrites an earlier one. Best-effort: a picture that cannot be
|
|
274
|
+
* written is left out of the returned paths, never thrown. */
|
|
275
|
+
save(name: string, attempt: number, images: VisualImages): Promise<VisualPaths>;
|
|
276
|
+
/** Journal the verdict — pass AND fail. Must not throw on sink faults. */
|
|
277
|
+
record(report: VisualAssertReport): Promise<void>;
|
|
278
|
+
/** The last assert that did not pass, for the failure bundle and
|
|
279
|
+
* runtime.json; null while every one passed. */
|
|
280
|
+
failure(): VisualFailureRecord | null;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** What the assert needs besides the page — wired per run entry. */
|
|
284
|
+
interface VisualAssertDeps {
|
|
285
|
+
comparator: ImageComparator;
|
|
286
|
+
baselines: BaselineStore;
|
|
287
|
+
sink?: VisualSink;
|
|
288
|
+
/** Project-relative posix path of the scenario; the baseline lives next to it. */
|
|
289
|
+
scenarioFile: string;
|
|
290
|
+
/** Retry attempt, 1-based. */
|
|
291
|
+
attempt: number;
|
|
292
|
+
/** The names this run has given, to refuse two that became one file. */
|
|
293
|
+
names: BaselineNames;
|
|
294
|
+
}
|
|
295
|
+
|
|
171
296
|
type FrameFormat = "png" | "webp";
|
|
172
297
|
|
|
173
298
|
interface ScreenshotSink {
|
|
@@ -178,16 +303,61 @@ interface ScreenshotSink {
|
|
|
178
303
|
save(name: string, bytes: Buffer, format: FrameFormat): Promise<string>;
|
|
179
304
|
}
|
|
180
305
|
|
|
306
|
+
type ContextFactory = () => Promise<DriverContext>;
|
|
307
|
+
/** A context that did not close — reported, never swallowed. */
|
|
308
|
+
interface ContextCloseFailure {
|
|
309
|
+
index: number;
|
|
310
|
+
error: unknown;
|
|
311
|
+
}
|
|
312
|
+
declare class ContextSet {
|
|
313
|
+
private readonly opts;
|
|
314
|
+
private readonly list;
|
|
315
|
+
private activeIdx;
|
|
316
|
+
/** Called with the new active index on every switch (open or select). */
|
|
317
|
+
private readonly listeners;
|
|
318
|
+
constructor(first: DriverContext, opts?: {
|
|
319
|
+
open?: ContextFactory;
|
|
320
|
+
max?: number;
|
|
321
|
+
});
|
|
322
|
+
active(): DriverContext;
|
|
323
|
+
activeIndex(): number;
|
|
324
|
+
size(): number;
|
|
325
|
+
all(): readonly DriverContext[];
|
|
326
|
+
/** Open one more context, make it active, return its index. */
|
|
327
|
+
open(): Promise<number>;
|
|
328
|
+
select(index: unknown): void;
|
|
329
|
+
onSwitch(listener: (index: number) => void): () => void;
|
|
330
|
+
/** Close every context, newest first; the failures come back. */
|
|
331
|
+
closeAll(): Promise<ContextCloseFailure[]>;
|
|
332
|
+
private switchTo;
|
|
333
|
+
}
|
|
334
|
+
|
|
181
335
|
type DslPrimitive = string | number | boolean | null;
|
|
182
336
|
type DslObject = {
|
|
183
337
|
readonly [key: string]: DslValue;
|
|
184
338
|
};
|
|
185
339
|
type DslArray = readonly DslValue[];
|
|
186
340
|
type DslValue = DslPrimitive | DslObject | DslArray;
|
|
187
|
-
|
|
341
|
+
/** The browser contexts a runtime acts in: its own set, started from the
|
|
342
|
+
* context the runner opened — or one it SHARES with its host (a flow
|
|
343
|
+
* replayed in an MCP session switches the session's contexts). */
|
|
344
|
+
type RuntimeContexts = {
|
|
345
|
+
/** Context 0 — the one the runner opened for this entry. */
|
|
346
|
+
readonly context: DriverContext;
|
|
347
|
+
/** Opens one more context with the entry's options (`newContext()`).
|
|
348
|
+
* Absent → the runtime cannot add one (an attached debug session). */
|
|
349
|
+
readonly openContext?: ContextFactory;
|
|
350
|
+
/** Ceiling on contexts per entry (`config.maxContexts`). */
|
|
351
|
+
readonly maxContexts?: number;
|
|
352
|
+
readonly contexts?: undefined;
|
|
353
|
+
} | {
|
|
354
|
+
readonly contexts: ContextSet;
|
|
355
|
+
readonly context?: undefined;
|
|
356
|
+
};
|
|
357
|
+
type TestRuntimeDeps = RuntimeContexts & TestRuntimeServices;
|
|
358
|
+
interface TestRuntimeServices {
|
|
188
359
|
readonly runId: string;
|
|
189
360
|
readonly driver: WebDriver;
|
|
190
|
-
readonly context: DriverContext;
|
|
191
361
|
readonly logger: Logger;
|
|
192
362
|
/** Sandbox connection / base-URL config (D-27). DSL primitives `shell`,
|
|
193
363
|
* `dbQuery`/`dbExec`, `apiCall` read these — scenarios can NOT pass a
|
|
@@ -218,11 +388,16 @@ interface TestRuntimeDeps {
|
|
|
218
388
|
* it to the run's steps.jsonl; absent in ad-hoc / explore runtimes
|
|
219
389
|
* (`log` still reaches the logger, `note` is logged in its place). */
|
|
220
390
|
readonly annotations?: AnnotationSink;
|
|
391
|
+
/** Baselines, comparator and sink behind `assertScreenshot` — wired per
|
|
392
|
+
* run entry by the runner; absent in ad-hoc / explore runtimes, where
|
|
393
|
+
* the DSL function fails with a setup message. */
|
|
394
|
+
readonly visual?: VisualAssertDeps;
|
|
221
395
|
}
|
|
222
396
|
declare class TestRuntime {
|
|
223
397
|
readonly runId: string;
|
|
224
398
|
readonly driver: WebDriver;
|
|
225
|
-
|
|
399
|
+
/** Every browser context of this entry and which one is active. */
|
|
400
|
+
readonly contexts: ContextSet;
|
|
226
401
|
readonly logger: Logger;
|
|
227
402
|
readonly sandbox: SandboxConfig;
|
|
228
403
|
readonly baseUrl?: string;
|
|
@@ -230,11 +405,19 @@ declare class TestRuntime {
|
|
|
230
405
|
readonly judge?: Judge;
|
|
231
406
|
readonly judgeVerdicts?: JudgeVerdictSink;
|
|
232
407
|
readonly annotations?: AnnotationSink;
|
|
408
|
+
readonly visual?: VisualAssertDeps;
|
|
233
409
|
private readonly variables;
|
|
234
410
|
private readonly nowFn;
|
|
235
411
|
private readonly scope;
|
|
236
412
|
private _callDepth;
|
|
237
413
|
constructor(deps: TestRuntimeDeps);
|
|
414
|
+
/** The ACTIVE context — what every DSL function acts on. `setContext`
|
|
415
|
+
* and `newContext` move it; one-context scenarios never notice. */
|
|
416
|
+
get context(): DriverContext;
|
|
417
|
+
/** The active context's index once the test holds more than one — the
|
|
418
|
+
* journal, the failure bundle and `assertScreenshot` carry it only then
|
|
419
|
+
* (#197), so a one-context run writes exactly what it did before. */
|
|
420
|
+
reportedContextIndex(): number | undefined;
|
|
238
421
|
/** Current epoch ms — injectable for deterministic tests. */
|
|
239
422
|
now(): number;
|
|
240
423
|
/** The active DriverPage. Tracks DriverContext.activePage which is mutated
|
|
@@ -352,6 +535,20 @@ interface ActiveRuntime {
|
|
|
352
535
|
ttlTimer: NodeJS.Timeout | null;
|
|
353
536
|
/** The runtime's own last-rites hook — see `register`. */
|
|
354
537
|
onAbort?: () => Promise<void>;
|
|
538
|
+
/** The run's rollback pass, read for the snapshot — see `register`. */
|
|
539
|
+
teardown?: TeardownProgress;
|
|
540
|
+
}
|
|
541
|
+
/** What the manager reads off a run's rollback pass: the pass itself is
|
|
542
|
+
* driven by the runner (it plays it from the run's end and from
|
|
543
|
+
* `onAbort`), the manager only reports it. */
|
|
544
|
+
interface TeardownProgress {
|
|
545
|
+
status(): TeardownStateRecord | undefined;
|
|
546
|
+
failureRecords(): TeardownFailureRecord[];
|
|
547
|
+
/** Drop what has not been played; the labels dropped, newest first. */
|
|
548
|
+
skip(): string[];
|
|
549
|
+
/** Blocks are registered and the pass has not begun: the run is not over
|
|
550
|
+
* until the stand is given back. */
|
|
551
|
+
owed(): boolean;
|
|
355
552
|
}
|
|
356
553
|
interface RuntimeSummary {
|
|
357
554
|
id: string;
|
|
@@ -372,6 +569,10 @@ interface RuntimeSnapshot {
|
|
|
372
569
|
lastFailure: ActiveRuntime['lastFailure'];
|
|
373
570
|
softFailures: readonly SoftFailureRecord[];
|
|
374
571
|
lastResult: RunResult | null;
|
|
572
|
+
/** The rollback pass, once it has begun. */
|
|
573
|
+
teardown?: TeardownStateRecord;
|
|
574
|
+
/** Rollback blocks that failed or never ran. */
|
|
575
|
+
teardownFailures?: readonly TeardownFailureRecord[];
|
|
375
576
|
}
|
|
376
577
|
interface TestRuntimeManagerDeps {
|
|
377
578
|
logger: Logger;
|
|
@@ -391,6 +592,13 @@ declare class TestRuntimeManager {
|
|
|
391
592
|
* `aborted`. Bounded — only the last few matter (a writer flushes once). */
|
|
392
593
|
private readonly terminalTombstones;
|
|
393
594
|
private static readonly MAX_TOMBSTONES;
|
|
595
|
+
/** Aborts in flight. A second `abort` while the first one is still
|
|
596
|
+
* rolling the stand back gets the same promise — it must not run the
|
|
597
|
+
* generator's return, the last rites and the hooks a second time over a
|
|
598
|
+
* runtime that is half torn down. Giving up on the rollback is the
|
|
599
|
+
* caller's decision (a second Stop), not a side effect of calling
|
|
600
|
+
* abort twice. */
|
|
601
|
+
private readonly aborting;
|
|
394
602
|
private nextId;
|
|
395
603
|
constructor(deps: TestRuntimeManagerDeps);
|
|
396
604
|
register(opts: {
|
|
@@ -406,6 +614,9 @@ declare class TestRuntimeManager {
|
|
|
406
614
|
* anything the run still owes the disk has to be settled here (#194
|
|
407
615
|
* tail). */
|
|
408
616
|
onAbort?: () => Promise<void>;
|
|
617
|
+
/** The run's rollback pass, reported in `inspect()` (and so in
|
|
618
|
+
* runtime.json) while it plays. */
|
|
619
|
+
teardown?: TeardownProgress;
|
|
409
620
|
}): string;
|
|
410
621
|
pump(id: string): Promise<ExecutionEvent | RunResult>;
|
|
411
622
|
/** The run's verdict — the executor's own, corrected for the one thing
|
|
@@ -418,9 +629,15 @@ declare class TestRuntimeManager {
|
|
|
418
629
|
* going past it — web never sets it, and if it ever does, the retry's
|
|
419
630
|
* own `step-end` decides and this correction has to be revisited.) */
|
|
420
631
|
private verdict;
|
|
632
|
+
/** The run's final verdict, rollback included — see `pump`. */
|
|
633
|
+
finish(id: string, result: RunResult): void;
|
|
421
634
|
step(id: string): Promise<ExecutionEvent | RunResult>;
|
|
422
635
|
resume(id: string): Promise<ExecutionEvent | RunResult>;
|
|
423
636
|
abort(id: string): Promise<void>;
|
|
637
|
+
private abortOnce;
|
|
638
|
+
/** The second Stop: give up on the rest of the run's rollback pass. The
|
|
639
|
+
* labels never played, newest first; empty when nothing was left. */
|
|
640
|
+
skipTeardown(id: string): string[];
|
|
424
641
|
/** Snapshot a just-aborted (still-live) runtime into the tombstone map so a
|
|
425
642
|
* later inspect() reflects `aborted`. Bounded LRU; best-effort. */
|
|
426
643
|
private rememberTombstone;
|