@meego-harness/worker-sdk 0.0.1
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/README.md +22 -0
- package/README_CN.md +22 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +375 -0
- package/dist/index.d.ts +375 -0
- package/dist/index.js +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# `@meego-harness/worker-sdk`
|
|
2
|
+
|
|
3
|
+
Worker transport SDK for Meego harness.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @meego-harness/worker-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Example
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { WorkerClientSDK, WorkerServerSDK } from '@meego-harness/worker-sdk'
|
|
15
|
+
|
|
16
|
+
const server = new WorkerServerSDK()
|
|
17
|
+
await server.listen(3001)
|
|
18
|
+
|
|
19
|
+
const client = new WorkerClientSDK({
|
|
20
|
+
serverUrl: 'ws://127.0.0.1:3001/workers',
|
|
21
|
+
})
|
|
22
|
+
```
|
package/README_CN.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# `@meego-harness/worker-sdk`
|
|
2
|
+
|
|
3
|
+
只负责 worker 连接、登录、心跳和任务派发。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @meego-harness/worker-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 示例
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { WorkerClientSDK, WorkerServerSDK } from '@meego-harness/worker-sdk'
|
|
15
|
+
|
|
16
|
+
const server = new WorkerServerSDK()
|
|
17
|
+
await server.listen(3001)
|
|
18
|
+
|
|
19
|
+
const client = new WorkerClientSDK({
|
|
20
|
+
serverUrl: 'ws://127.0.0.1:3001/workers',
|
|
21
|
+
})
|
|
22
|
+
```
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';const _0x5268ee=_0x26a2;(function(_0x680647,_0x1ff9c8){const _0x557950=_0x26a2,_0x43ad09=_0x680647();while(!![]){try{const _0x13afac=-parseInt(_0x557950(0x302))/0x1*(-parseInt(_0x557950(0x1da))/0x2)+-parseInt(_0x557950(0x244))/0x3*(parseInt(_0x557950(0x289))/0x4)+-parseInt(_0x557950(0x27a))/0x5*(parseInt(_0x557950(0x325))/0x6)+-parseInt(_0x557950(0x22a))/0x7+-parseInt(_0x557950(0x32f))/0x8+parseInt(_0x557950(0x200))/0x9+parseInt(_0x557950(0x2f6))/0xa;if(_0x13afac===_0x1ff9c8)break;else _0x43ad09['push'](_0x43ad09['shift']());}catch(_0x121830){_0x43ad09['push'](_0x43ad09['shift']());}}}(_0x1261,0xbf7c2));var __create=Object[_0x5268ee(0x2dd)],__defProp=Object[_0x5268ee(0x1ec)],__getOwnPropDesc=Object[_0x5268ee(0x33b)],__getOwnPropNames=Object[_0x5268ee(0x341)],__getProtoOf=Object[_0x5268ee(0x2c0)],__hasOwnProp=Object[_0x5268ee(0x268)][_0x5268ee(0x252)],__export=(_0x82373c,_0x381b26)=>{for(var _0x289ae7 in _0x381b26)__defProp(_0x82373c,_0x289ae7,{'get':_0x381b26[_0x289ae7],'enumerable':!![]});},__copyProps=(_0x33c70b,_0x5252f9,_0x36e33c,_0x110377)=>{const _0x374461=_0x5268ee;if(_0x5252f9&&typeof _0x5252f9===_0x374461(0x2f4)||typeof _0x5252f9==='function'){for(let _0x1c0bf5 of __getOwnPropNames(_0x5252f9))if(!__hasOwnProp[_0x374461(0x1fd)](_0x33c70b,_0x1c0bf5)&&_0x1c0bf5!==_0x36e33c)__defProp(_0x33c70b,_0x1c0bf5,{'get':()=>_0x5252f9[_0x1c0bf5],'enumerable':!(_0x110377=__getOwnPropDesc(_0x5252f9,_0x1c0bf5))||_0x110377[_0x374461(0x228)]});}return _0x33c70b;},__toESM=(_0x35693d,_0x608aa6,_0x1e15fe)=>(_0x1e15fe=_0x35693d!=null?__create(__getProtoOf(_0x35693d)):{},__copyProps(_0x608aa6||!_0x35693d||!_0x35693d[_0x5268ee(0x2fc)]?__defProp(_0x1e15fe,'default',{'value':_0x35693d,'enumerable':!![]}):_0x1e15fe,_0x35693d)),__toCommonJS=_0x367d48=>__copyProps(__defProp({},'__esModule',{'value':!![]}),_0x367d48),index_exports={};__export(index_exports,{'WorkerClientSDK':()=>WorkerClientSDK,'WorkerServerSDK':()=>WorkerServerSDK,'isTerminalTaskState':()=>isTerminalTaskState,'issueLoginToken':()=>issueLoginToken,'resolveDefaultWorkerCredentialFile':()=>resolveDefaultWorkerCredentialFile,'splitWorkerKey':()=>splitWorkerKey,'verifyLoginToken':()=>verifyLoginToken}),module[_0x5268ee(0x30d)]=__toCommonJS(index_exports);var import_node_crypto=require('crypto'),import_promises=require(_0x5268ee(0x335)),import_node_os=require('os'),import_node_path=require(_0x5268ee(0x1f5)),import_node_process=__toESM(require(_0x5268ee(0x2ae)),0x1);function resolveDefaultWorkerCredentialFile(_0x241e5f,_0xb8915,_0x16c474,_0x38e808=(0x0,import_node_os[_0x5268ee(0x225)])()){const _0x224a60=_0x5268ee,_0x849ece=(0x0,import_node_crypto[_0x224a60(0x27d)])(_0x224a60(0x27e))[_0x224a60(0x1d1)](_0x241e5f+'::'+_0xb8915+'::'+_0x16c474)['digest'](_0x224a60(0x1cc));return(0x0,import_node_path[_0x224a60(0x2d4)])(_0x38e808,'.meego-harness',_0x224a60(0x317),_0x849ece+_0x224a60(0x2ba));}async function readWorkerCredential(_0x1d1731){const _0xebbf43=_0x5268ee;try{const _0x8dd627=await(0x0,import_promises['readFile'])(_0x1d1731,'utf8'),_0x394846=JSON[_0xebbf43(0x24e)](_0x8dd627);if(typeof _0x394846[_0xebbf43(0x1f4)]!==_0xebbf43(0x220)||_0x394846[_0xebbf43(0x1f4)][_0xebbf43(0x210)]===0x0)return void 0x0;return _0x394846;}catch(_0x1c34c0){if(_0x1c34c0?.[_0xebbf43(0x301)]===_0xebbf43(0x2ef))return void 0x0;throw _0x1c34c0;}}async function writeWorkerCredential(_0x484919,_0xa13387){const _0x503e10=_0x5268ee;await(0x0,import_promises[_0x503e10(0x2cc)])((0x0,import_node_path[_0x503e10(0x262)])(_0x484919),{'recursive':!![]});const _0x29d205=_0x484919+'.'+import_node_process[_0x503e10(0x290)][_0x503e10(0x20c)]+'.'+Date['now']()+_0x503e10(0x30b),_0x34f1a1=JSON[_0x503e10(0x257)]({..._0xa13387,'updatedAt':Date[_0x503e10(0x24d)]()});await(0x0,import_promises['writeFile'])(_0x29d205,_0x34f1a1,{'encoding':_0x503e10(0x24b),'mode':0x180}),await(0x0,import_promises[_0x503e10(0x2b4)])(_0x29d205,_0x484919),await(0x0,import_promises[_0x503e10(0x272)])(_0x484919,0x180);}async function deleteWorkerCredential(_0x3ab639){const _0x2865ae=_0x5268ee;try{await(0x0,import_promises['rm'])(_0x3ab639,{'force':!![]});}catch(_0x19439a){if(_0x19439a?.[_0x2865ae(0x301)]===_0x2865ae(0x2ef))return;throw _0x19439a;}}function parseClientMessage(_0x13933c){const _0x52f414=_0x5268ee;try{const _0xba8784=JSON['parse'](_0x13933c);if(!_0xba8784||typeof _0xba8784!==_0x52f414(0x2f4)||typeof _0xba8784[_0x52f414(0x270)]!==_0x52f414(0x220))return null;switch(_0xba8784[_0x52f414(0x270)]){case _0x52f414(0x320):case _0x52f414(0x1f8):case _0x52f414(0x1f6):case _0x52f414(0x33d):case'heartbeat-ack':case _0x52f414(0x221):case _0x52f414(0x250):case _0x52f414(0x296):case _0x52f414(0x23b):case _0x52f414(0x27b):return _0xba8784;default:return null;}}catch{return null;}}function stringifyServerMessage(_0x4c4798){const _0xd358ca=_0x5268ee;return JSON[_0xd358ca(0x257)](_0x4c4798);}function stringifyClientMessage(_0x22dc03){const _0x1ba68e=_0x5268ee;return JSON[_0x1ba68e(0x257)](_0x22dc03);}var DEFAULT_CONFIG={'reconnect':!![],'reconnectBaseDelayMs':0xc8,'reconnectMaxDelayMs':0x1388,'credentialStore':{}},WorkerClientSDK=class{['config'];[_0x5268ee(0x339)]=new Set();[_0x5268ee(0x211)]=new Set();[_0x5268ee(0x2ac)]=null;['connectPromise']=null;[_0x5268ee(0x22c)]=new Map();[_0x5268ee(0x249)];[_0x5268ee(0x2c1)];['shouldStayConnected']=![];[_0x5268ee(0x1c8)]=![];[_0x5268ee(0x1d2)]=![];['isLoggedIn']=![];[_0x5268ee(0x1cb)];[_0x5268ee(0x322)];[_0x5268ee(0x235)];constructor(_0x218a0f){const _0x13f832=_0x5268ee;this[_0x13f832(0x2b7)]={...DEFAULT_CONFIG,..._0x218a0f,'WebSocketCtor':_0x218a0f[_0x13f832(0x246)]??WebSocket},this[_0x13f832(0x2c1)]=this[_0x13f832(0x2b7)]['reconnectBaseDelayMs'];}async[_0x5268ee(0x2fd)](){const _0x4261b5=_0x5268ee;this[_0x4261b5(0x33e)]=!![];if(this[_0x4261b5(0x2ac)]&&this[_0x4261b5(0x2ac)][_0x4261b5(0x32c)]===WebSocket[_0x4261b5(0x2d5)])return this;if(this[_0x4261b5(0x240)])return this[_0x4261b5(0x240)];return this['manualClose']=![],this[_0x4261b5(0x240)]=new Promise((_0x4993dd,_0x2aa978)=>{const _0x25f79a=_0x4261b5,_0x166a32=new this['config'][(_0x25f79a(0x246))](this['config']['serverUrl']);this[_0x25f79a(0x2ac)]=_0x166a32,_0x166a32[_0x25f79a(0x2c6)](_0x25f79a(0x239),()=>{const _0x2301c2=_0x25f79a;this[_0x2301c2(0x2c1)]=this['config'][_0x2301c2(0x1ce)],this[_0x2301c2(0x240)]=null,void this['restoreSessionIfNeeded'](),_0x4993dd(this);}),_0x166a32[_0x25f79a(0x2c6)](_0x25f79a(0x293),()=>{const _0x8aa080=_0x25f79a;_0x166a32[_0x8aa080(0x32c)]!==WebSocket[_0x8aa080(0x2d5)]&&(this['connectPromise']=null,_0x2aa978(new Error(_0x8aa080(0x1cf))));}),_0x166a32[_0x25f79a(0x2c6)](_0x25f79a(0x279),_0x46e9af=>{const _0x2e73ff=_0x25f79a;void this[_0x2e73ff(0x306)](String(_0x46e9af[_0x2e73ff(0x32a)]));}),_0x166a32['addEventListener'](_0x25f79a(0x23c),()=>{const _0x1f8a08=_0x25f79a;this[_0x1f8a08(0x243)]();});}),this[_0x4261b5(0x240)];}async[_0x5268ee(0x26c)](){const _0x17575d=_0x5268ee;this['shouldStayConnected']=![],this[_0x17575d(0x1c8)]=!![],this['reconnectTimer']&&(clearTimeout(this[_0x17575d(0x249)]),this[_0x17575d(0x249)]=void 0x0),this[_0x17575d(0x1ef)]&&await this['logout'](),this['socket']&&this[_0x17575d(0x2ac)][_0x17575d(0x32c)]<WebSocket[_0x17575d(0x27f)]&&this['socket'][_0x17575d(0x23c)](),this[_0x17575d(0x2ac)]=null,this[_0x17575d(0x23a)](new Error(_0x17575d(0x1d0)));}async[_0x5268ee(0x320)](_0x3bd595){const _0x425e6c=_0x5268ee,_0x57847c=await this[_0x425e6c(0x2c2)](_0x3bd595);let _0x448a75;try{_0x448a75=await this[_0x425e6c(0x214)]({'type':_0x425e6c(0x320),'payload':_0x57847c},{'kind':'login','onPending':async _0x1b9bc5=>{const _0x4e8c22=_0x425e6c;_0x1b9bc5[_0x4e8c22(0x2b3)]===_0x4e8c22(0x263)&&await this[_0x4e8c22(0x2b8)](_0x3bd595);}});}catch(_0x3d28c2){await this[_0x425e6c(0x2b8)](_0x3bd595);throw _0x3d28c2;}_0x448a75['loginToken']&&(this[_0x425e6c(0x235)]=_0x448a75[_0x425e6c(0x1f4)],await this[_0x425e6c(0x2e9)](_0x3bd595,_0x448a75[_0x425e6c(0x1f4)])),this[_0x425e6c(0x1cb)]={..._0x3bd595,'loginToken':void 0x0},this[_0x425e6c(0x1ef)]=!![],this[_0x425e6c(0x1d2)]=![],this[_0x425e6c(0x322)]=void 0x0;}async['logout'](){const _0x8886f5=_0x5268ee;await this[_0x8886f5(0x214)]({'type':_0x8886f5(0x1f8)},{'kind':_0x8886f5(0x290)}),this[_0x8886f5(0x1ef)]=![],this[_0x8886f5(0x1cb)]=void 0x0,this[_0x8886f5(0x322)]=void 0x0,this[_0x8886f5(0x1d2)]=![];}async[_0x5268ee(0x321)](_0x3af1d6){const _0x33e16e=_0x5268ee;await this[_0x33e16e(0x214)]({'type':_0x33e16e(0x1f6),'availability':_0x3af1d6},{'kind':_0x33e16e(0x290)}),this['explicitState']={'type':'availability','availability':_0x3af1d6};}async[_0x5268ee(0x331)](_0x542330){const _0x3e9ab7=_0x5268ee;if(_0x542330['trim']()[_0x3e9ab7(0x210)]===0x0)throw new Error(_0x3e9ab7(0x1e1));await this['sendRequest']({'type':_0x3e9ab7(0x33d),'reason':_0x542330},{'kind':_0x3e9ab7(0x290)}),this['explicitState']={'type':_0x3e9ab7(0x25f),'reason':_0x542330};}['onMessage'](_0x13fbeb){const _0x389519=_0x5268ee;return this[_0x389519(0x339)]['add'](_0x13fbeb),this;}['onCancel'](_0x31766e){const _0x2b02ba=_0x5268ee;return this[_0x2b02ba(0x211)][_0x2b02ba(0x2fe)](_0x31766e),this;}[_0x5268ee(0x1e8)](_0x496b75){const _0x2d69ee=_0x5268ee;return this[_0x2d69ee(0x211)][_0x2d69ee(0x1ee)](_0x496b75),this;}async[_0x5268ee(0x306)](_0x205073){const _0x3f8d8e=_0x5268ee,_0x383d57=JSON[_0x3f8d8e(0x24e)](_0x205073);switch(_0x383d57[_0x3f8d8e(0x270)]){case _0x3f8d8e(0x1f7):{const _0x13f243=this[_0x3f8d8e(0x22c)][_0x3f8d8e(0x24f)](_0x383d57['requestId']);if(!_0x13f243)return;this[_0x3f8d8e(0x22c)][_0x3f8d8e(0x1ee)](_0x383d57[_0x3f8d8e(0x241)]),_0x13f243[_0x3f8d8e(0x2d9)]();return;}case _0x3f8d8e(0x2db):{const _0x464c02=this[_0x3f8d8e(0x22c)][_0x3f8d8e(0x24f)](_0x383d57['requestId']);if(!_0x464c02)return;await _0x464c02['onPending']?.(_0x383d57);return;}case _0x3f8d8e(0x238):{const _0x2393bd=this[_0x3f8d8e(0x22c)]['get'](_0x383d57['requestId']);if(!_0x2393bd)return;this[_0x3f8d8e(0x22c)][_0x3f8d8e(0x1ee)](_0x383d57[_0x3f8d8e(0x241)]),_0x2393bd[_0x3f8d8e(0x2d9)](_0x383d57);return;}case'login-rejected':{const _0x14b31a=this['pendingRequests'][_0x3f8d8e(0x24f)](_0x383d57['requestId']);if(!_0x14b31a)return;this[_0x3f8d8e(0x22c)]['delete'](_0x383d57['requestId']),_0x14b31a['reject'](new Error(_0x383d57[_0x3f8d8e(0x279)]));return;}case _0x3f8d8e(0x293):{const _0x2df779=_0x383d57[_0x3f8d8e(0x241)]?this[_0x3f8d8e(0x22c)][_0x3f8d8e(0x24f)](_0x383d57['requestId']):void 0x0;if(_0x2df779&&_0x383d57[_0x3f8d8e(0x241)]){this[_0x3f8d8e(0x22c)][_0x3f8d8e(0x1ee)](_0x383d57[_0x3f8d8e(0x241)]),_0x2df779[_0x3f8d8e(0x311)](new Error(_0x383d57[_0x3f8d8e(0x279)]));return;}throw new Error(_0x383d57[_0x3f8d8e(0x279)]);}case _0x3f8d8e(0x264):{await this[_0x3f8d8e(0x31e)](_0x383d57);return;}case'SendMessage':{await this[_0x3f8d8e(0x1eb)](_0x383d57);return;}case _0x3f8d8e(0x21f):{await this[_0x3f8d8e(0x237)](_0x383d57);}}}async[_0x5268ee(0x31e)](_0x43ba7d){const _0xd35b67=_0x5268ee;this[_0xd35b67(0x313)](),this[_0xd35b67(0x2ac)]['send'](stringifyClientMessage({'type':_0xd35b67(0x300)}));}['handleSocketClose'](){const _0x1bea77=_0x5268ee,_0x7ca4b2=this[_0x1bea77(0x33e)]&&!this['manualClose']&&this['config']['reconnect'];this[_0x1bea77(0x240)]=null,this[_0x1bea77(0x2ac)]=null,this[_0x1bea77(0x23a)](new Error(_0x1bea77(0x1d0)));this[_0x1bea77(0x1ef)]&&(this[_0x1bea77(0x1d2)]=!![]);this['isLoggedIn']=![];if(!_0x7ca4b2)return;this[_0x1bea77(0x342)]();}[_0x5268ee(0x342)](){const _0x276b4b=_0x5268ee;if(this[_0x276b4b(0x249)])return;const _0x42e8f8=this[_0x276b4b(0x2c1)];this['reconnectDelayMs']=Math[_0x276b4b(0x334)](this[_0x276b4b(0x2c1)]*0x2,this[_0x276b4b(0x2b7)][_0x276b4b(0x1d5)]),this[_0x276b4b(0x249)]=setTimeout(()=>{const _0xd9905=_0x276b4b;this[_0xd9905(0x249)]=void 0x0,void this[_0xd9905(0x2fd)]()['catch'](()=>{const _0x57d34f=_0xd9905;this[_0x57d34f(0x33e)]&&this[_0x57d34f(0x2b7)][_0x57d34f(0x1d8)]&&this[_0x57d34f(0x342)]();});},_0x42e8f8);}async[_0x5268ee(0x2ce)](){const _0x158bca=_0x5268ee;if(!this['needsRestoreOnOpen']||!this[_0x158bca(0x1cb)])return;try{const _0xda0894=await this['buildLoginPayload'](this[_0x158bca(0x1cb)]),_0x1b3c90=await this['sendRequest']({'type':_0x158bca(0x320),'payload':_0xda0894},{'kind':'login','onPending':async _0x56dffb=>{const _0x37de17=_0x158bca;_0x56dffb[_0x37de17(0x2b3)]===_0x37de17(0x263)&&await this[_0x37de17(0x2b8)](this[_0x37de17(0x1cb)]);}});this[_0x158bca(0x1ef)]=!![];_0x1b3c90[_0x158bca(0x1f4)]&&(this['latestLoginToken']=_0x1b3c90[_0x158bca(0x1f4)],await this[_0x158bca(0x2e9)](this[_0x158bca(0x1cb)],_0x1b3c90['loginToken']));if(!this[_0x158bca(0x322)]){this[_0x158bca(0x1d2)]=![];return;}if(this[_0x158bca(0x322)][_0x158bca(0x270)]===_0x158bca(0x1dc)&&this['explicitState'][_0x158bca(0x1dc)]===(this['lastLoginPayload']['initialAvailability']??'available')){this[_0x158bca(0x1d2)]=![];return;}this[_0x158bca(0x322)][_0x158bca(0x270)]==='availability'?await this[_0x158bca(0x214)]({'type':'update-availability','availability':this[_0x158bca(0x322)][_0x158bca(0x1dc)]},{'kind':_0x158bca(0x290)}):await this[_0x158bca(0x214)]({'type':_0x158bca(0x33d),'reason':this[_0x158bca(0x322)][_0x158bca(0x2b3)]},{'kind':'default'}),this['needsRestoreOnOpen']=![];}catch{this['socket']&&this[_0x158bca(0x2ac)][_0x158bca(0x32c)]<WebSocket[_0x158bca(0x27f)]&&this[_0x158bca(0x2ac)][_0x158bca(0x23c)]();}}async[_0x5268ee(0x1eb)](_0xf93049){const _0x28d784=_0x5268ee,_0x2f9a18={'task':structuredClone(_0xf93049['task']),'message':structuredClone(_0xf93049[_0x28d784(0x279)]),'controller':this[_0x28d784(0x30e)](_0xf93049['task'])};for(const _0x31f9c5 of this[_0x28d784(0x339)]){await _0x31f9c5(_0x2f9a18);}}async[_0x5268ee(0x237)](_0x593e60){const _0x5b3c46=_0x5268ee,_0x3ef5d4={'taskId':_0x593e60['taskId']};for(const _0x470b4e of this[_0x5b3c46(0x211)]){await _0x470b4e(_0x3ef5d4);}}[_0x5268ee(0x30e)](_0xccb5ee){return{'working':async _0x357511=>{const _0x400312=_0x26a2;await this['sendTaskStatusUpdate'](_0xccb5ee,_0x400312(0x316),_0x357511);},'inputRequired':async _0x3a4071=>{const _0x31fec6=_0x26a2;await this[_0x31fec6(0x202)](_0xccb5ee,'input-required',_0x3a4071);},'addArtifact':async _0x6c2f86=>{const _0x40e80a=_0x26a2,_0x2e9ff=this[_0x40e80a(0x213)](_0x6c2f86);return await this[_0x40e80a(0x214)]({'type':_0x40e80a(0x27b),'taskId':_0xccb5ee['id'],'artifact':_0x2e9ff},{'kind':_0x40e80a(0x290)}),_0x2e9ff;},'complete':async _0x191ef1=>{const _0x24dc69=_0x26a2;await this[_0x24dc69(0x202)](_0xccb5ee,'completed',_0x191ef1);},'fail':async _0x39824b=>{const _0x2c1739=_0x26a2;await this[_0x2c1739(0x202)](_0xccb5ee,_0x2c1739(0x2a3),_0x39824b);},'reject':async _0x338117=>{const _0x56ac4c=_0x26a2;await this['sendTaskStatusUpdate'](_0xccb5ee,_0x56ac4c(0x21d),_0x338117);}};}async[_0x5268ee(0x202)](_0x5778f0,_0xeaf244,_0x4294ab){const _0x153048=_0x5268ee,_0x4cf391=_0x4294ab?this[_0x153048(0x2f3)](_0x5778f0,_0x4294ab):void 0x0;await this[_0x153048(0x214)]({'type':_0x153048(0x23b),'taskId':_0x5778f0['id'],'status':{'state':_0xeaf244,'timestamp':Date[_0x153048(0x24d)](),'message':toStatusMessage(_0x4294ab)},'message':_0x4cf391},{'kind':'default'});}[_0x5268ee(0x2f3)](_0x26c46a,_0x24a6a5){const _0x177249=_0x5268ee;return{'messageId':crypto[_0x177249(0x1db)](),'contextId':_0x26c46a[_0x177249(0x256)],'taskId':_0x26c46a['id'],'role':_0x177249(0x2bf),'parts':structuredClone(_0x24a6a5[_0x177249(0x2ff)]),'metadata':_0x24a6a5[_0x177249(0x212)]?structuredClone(_0x24a6a5[_0x177249(0x212)]):void 0x0};}['buildArtifact'](_0x2be57e){const _0x44ad6a=_0x5268ee;return{'artifactId':_0x2be57e[_0x44ad6a(0x287)]??crypto[_0x44ad6a(0x1db)](),'name':_0x2be57e[_0x44ad6a(0x2f2)],'description':_0x2be57e[_0x44ad6a(0x216)],'parts':structuredClone(_0x2be57e[_0x44ad6a(0x2ff)]),'metadata':_0x2be57e[_0x44ad6a(0x212)]?structuredClone(_0x2be57e[_0x44ad6a(0x212)]):void 0x0};}async[_0x5268ee(0x2c2)](_0x354829){const _0x47b008=_0x5268ee;if(_0x354829[_0x47b008(0x1f4)])return{..._0x354829};const _0x56c09b=this[_0x47b008(0x235)]??await this[_0x47b008(0x1fe)](_0x354829);return _0x56c09b?{..._0x354829,'loginToken':_0x56c09b}:{..._0x354829};}async[_0x5268ee(0x2e9)](_0x2d2c8d,_0x5872eb){const _0x2914d3=_0x5268ee;if(this[_0x2914d3(0x2b7)][_0x2914d3(0x2b5)]===![])return;await writeWorkerCredential(this['resolveCredentialFile'](_0x2d2c8d),{'serverUrl':this[_0x2914d3(0x2b7)][_0x2914d3(0x333)],'workerId':_0x2d2c8d[_0x2914d3(0x25d)],'email':_0x2d2c8d[_0x2914d3(0x20d)],'loginToken':_0x5872eb});}async['readStoredLoginToken'](_0x14861a){const _0x1d8f73=_0x5268ee;if(this[_0x1d8f73(0x2b7)]['credentialStore']===![])return void 0x0;const _0x6ad393=await readWorkerCredential(this['resolveCredentialFile'](_0x14861a));return _0x6ad393?.['loginToken'];}async[_0x5268ee(0x2b8)](_0x10ace6){const _0x4b07c0=_0x5268ee;this['latestLoginToken']=void 0x0;if(this['config'][_0x4b07c0(0x2b5)]===![])return;await deleteWorkerCredential(this['resolveCredentialFile'](_0x10ace6));}[_0x5268ee(0x21b)](_0x2adba3){const _0x2b0358=_0x5268ee;if(this[_0x2b0358(0x2b7)][_0x2b0358(0x2b5)]!==![]&&this[_0x2b0358(0x2b7)][_0x2b0358(0x2b5)]['file'])return this[_0x2b0358(0x2b7)][_0x2b0358(0x2b5)][_0x2b0358(0x2af)];return resolveDefaultWorkerCredentialFile(this[_0x2b0358(0x2b7)][_0x2b0358(0x333)],_0x2adba3[_0x2b0358(0x25d)],_0x2adba3['email']);}async[_0x5268ee(0x214)](_0x2fb10e,_0x2c1048){const _0x43bcf6=_0x5268ee;this['ensureSocketOpen']();const _0x4f748e=crypto['randomUUID'](),_0x1d3bf1=new Promise((_0x572c3b,_0x1371cb)=>{const _0x4ec1f6=_0x26a2;this[_0x4ec1f6(0x22c)][_0x4ec1f6(0x2c3)](_0x4f748e,{'kind':_0x2c1048[_0x4ec1f6(0x2eb)],'onPending':_0x2c1048[_0x4ec1f6(0x291)],'resolve':_0x572c3b,'reject':_0x1371cb});}),_0x5b8d2e={..._0x2fb10e,'requestId':_0x4f748e};return this[_0x43bcf6(0x2ac)]['send'](stringifyClientMessage(_0x5b8d2e)),await _0x1d3bf1;}[_0x5268ee(0x313)](){const _0x1f06b3=_0x5268ee;if(!this[_0x1f06b3(0x2ac)]||this['socket']['readyState']!==WebSocket['OPEN'])throw new Error(_0x1f06b3(0x2df));}['rejectPendingRequests'](_0x121b63){const _0x529498=_0x5268ee;for(const _0x49b6be of this[_0x529498(0x22c)][_0x529498(0x28e)]()){_0x49b6be[_0x529498(0x311)](_0x121b63);}this['pendingRequests'][_0x529498(0x204)]();}};function toStatusMessage(_0x4debfe){const _0xff4a32=_0x5268ee,_0x507da3=_0x4debfe?.[_0xff4a32(0x2ff)][0x0];if(!_0x507da3)return void 0x0;if(_0x507da3[_0xff4a32(0x270)]===_0xff4a32(0x2ed))return _0x507da3[_0xff4a32(0x2ed)];if(_0x507da3[_0xff4a32(0x270)]==='file-ref')return _0x507da3['name']??_0x507da3[_0xff4a32(0x2e6)];return _0x507da3[_0xff4a32(0x20a)]??_0xff4a32(0x2e8);}var import_node_buffer=require(_0x5268ee(0x310)),import_node_crypto2=require(_0x5268ee(0x22d));function issueLoginToken(_0x261d24,_0x8b1cfd){const _0x61fe44=_0x5268ee,_0x2c2637=import_node_buffer[_0x61fe44(0x2ca)][_0x61fe44(0x33c)](JSON[_0x61fe44(0x257)](_0x261d24))['toString'](_0x61fe44(0x2d8)),_0x258bcd=signPayload(_0x2c2637,_0x8b1cfd);return _0x2c2637+'.'+_0x258bcd;}function verifyLoginToken(_0x209dd9,_0x22f6f0){const _0x64a2a6=_0x5268ee,_0x27cd2a=_0x209dd9['split']('.');if(_0x27cd2a[_0x64a2a6(0x210)]!==0x2)return null;const [_0x2d76bd,_0x48fb7d]=_0x27cd2a;if(!_0x2d76bd||!_0x48fb7d||signPayload(_0x2d76bd,_0x22f6f0)!==_0x48fb7d)return null;try{const _0x473033=JSON[_0x64a2a6(0x24e)](import_node_buffer[_0x64a2a6(0x2ca)]['from'](_0x2d76bd,_0x64a2a6(0x2d8))[_0x64a2a6(0x1f0)](_0x64a2a6(0x24b)));if(typeof _0x473033[_0x64a2a6(0x25d)]!=='string'||typeof _0x473033[_0x64a2a6(0x20d)]!==_0x64a2a6(0x220)||_0x473033['role']!==_0x64a2a6(0x2d6)&&_0x473033['role']!=='coder'&&_0x473033[_0x64a2a6(0x1fb)]!==_0x64a2a6(0x2ab)&&_0x473033['role']!==_0x64a2a6(0x2da)||typeof _0x473033[_0x64a2a6(0x1ed)]!==_0x64a2a6(0x231)||!Number[_0x64a2a6(0x281)](_0x473033['issuedAt']))return null;return _0x473033;}catch{return null;}}function signPayload(_0x297581,_0xe20065){const _0x3a58ad=_0x5268ee;return(0x0,import_node_crypto2['createHmac'])(_0x3a58ad(0x27e),_0xe20065)[_0x3a58ad(0x1d1)](_0x297581)[_0x3a58ad(0x299)](_0x3a58ad(0x2d8));}var import_node_http=require(_0x5268ee(0x2de)),import_node_process2=__toESM(require(_0x5268ee(0x2ae)),0x1),DISCONNECT_REASON_MAP={'socket-closed':_0x5268ee(0x30a),'heartbeat-timeout':_0x5268ee(0x344),'session-replaced':'session\x20replaced\x20by\x20a\x20new\x20login'};function createWorkerIdentityKey(_0x1237cf,_0x269267){return _0x1237cf+'::'+_0x269267;}var WorkerSessionRegistry=class{[_0x5268ee(0x1e5)]=new Map();['seedSnapshots'](_0x40c234){const _0x429f28=_0x5268ee;this[_0x429f28(0x1e5)]['clear']();for(const _0x1f1190 of _0x40c234){const _0x219b1f=createWorkerIdentityKey(_0x1f1190[_0x429f28(0x25d)],_0x1f1190[_0x429f28(0x20d)]);this[_0x429f28(0x1e5)][_0x429f28(0x2c3)](_0x219b1f,{'identityKey':_0x219b1f,'sessionId':_0x429f28(0x294)+_0x219b1f,'snapshot':cloneSnapshot(_0x1f1190)});}}['registerLogin'](_0x26607c,_0x56190d,_0x160f19){const _0x1d73f4=_0x5268ee,_0x592ef4=createWorkerIdentityKey(_0x56190d['workerId'],_0x56190d[_0x1d73f4(0x20d)]),_0x2fbd00={'workerId':_0x56190d['workerId'],'email':_0x56190d[_0x1d73f4(0x20d)],'role':_0x56190d['role'],'capabilitySummary':_0x56190d[_0x1d73f4(0x232)],'availability':_0x56190d[_0x1d73f4(0x23e)]??'available','activityState':'idle','activeTaskCount':0x0,'connectionState':'connected','connectedAt':_0x160f19,'lastSeenAt':_0x160f19,'lastAvailabilityUpdatedAt':_0x160f19};let _0x54c763;_0x2fbd00[_0x1d73f4(0x1dc)]===_0x1d73f4(0x2a2)&&(_0x2fbd00[_0x1d73f4(0x2be)]=_0x1d73f4(0x245),_0x2fbd00['abnormalReason']=_0x1d73f4(0x2e1),_0x54c763={'type':_0x1d73f4(0x25f),'reason':_0x1d73f4(0x2e1)});const _0x3dbde7={'identityKey':_0x592ef4,'sessionId':_0x26607c,'snapshot':_0x2fbd00,'explicitState':_0x54c763};return this[_0x1d73f4(0x1e5)]['set'](_0x592ef4,_0x3dbde7),this[_0x1d73f4(0x29a)](_0x3dbde7);}[_0x5268ee(0x24f)](_0x27ff61){const _0x152da9=_0x5268ee,_0x42c9ac=this[_0x152da9(0x1e5)]['get'](_0x27ff61);return _0x42c9ac?this[_0x152da9(0x29a)](_0x42c9ac):void 0x0;}[_0x5268ee(0x219)](_0x9e0bc){const _0x135ea6=_0x5268ee;for(const _0x3d6b4b of this[_0x135ea6(0x1e5)][_0x135ea6(0x28e)]()){if(_0x3d6b4b[_0x135ea6(0x298)]===_0x9e0bc)return this[_0x135ea6(0x29a)](_0x3d6b4b);}return void 0x0;}[_0x5268ee(0x2fb)](_0x2e7f12,_0x415eaa){const _0x2399d4=_0x5268ee,_0xe7bdeb=this[_0x2399d4(0x1e5)]['get'](_0x2e7f12);if(!_0xe7bdeb)return void 0x0;return _0xe7bdeb[_0x2399d4(0x2dc)]['lastSeenAt']=_0x415eaa,this['cloneRecord'](_0xe7bdeb);}[_0x5268ee(0x321)](_0x4455e5,_0x53f494,_0x1d5e63){const _0x43f2a4=_0x5268ee,_0xe525f7=this[_0x43f2a4(0x1e5)][_0x43f2a4(0x24f)](_0x4455e5);if(!_0xe525f7)return void 0x0;return _0xe525f7[_0x43f2a4(0x2dc)][_0x43f2a4(0x1dc)]=_0x53f494,_0xe525f7[_0x43f2a4(0x2dc)][_0x43f2a4(0x308)]=_0x1d5e63,_0xe525f7[_0x43f2a4(0x2dc)][_0x43f2a4(0x2f1)]=_0x1d5e63,delete _0xe525f7[_0x43f2a4(0x2dc)][_0x43f2a4(0x2be)],delete _0xe525f7[_0x43f2a4(0x2dc)]['abnormalReason'],_0xe525f7['explicitState']={'type':_0x43f2a4(0x1dc),'availability':_0x53f494},this[_0x43f2a4(0x29a)](_0xe525f7);}[_0x5268ee(0x331)](_0x45c64b,_0x12ea4f,_0x484a1d){const _0x42085b=_0x5268ee,_0x10a20f=this[_0x42085b(0x1e5)][_0x42085b(0x24f)](_0x45c64b);if(!_0x10a20f)return void 0x0;return _0x10a20f[_0x42085b(0x2dc)][_0x42085b(0x1dc)]=_0x42085b(0x2a2),_0x10a20f[_0x42085b(0x2dc)][_0x42085b(0x2be)]=_0x42085b(0x245),_0x10a20f[_0x42085b(0x2dc)]['abnormalReason']=_0x12ea4f,_0x10a20f[_0x42085b(0x2dc)]['lastAvailabilityUpdatedAt']=_0x484a1d,_0x10a20f['snapshot'][_0x42085b(0x2f1)]=_0x484a1d,_0x10a20f[_0x42085b(0x322)]={'type':_0x42085b(0x25f),'reason':_0x12ea4f},this[_0x42085b(0x29a)](_0x10a20f);}['markDisconnected'](_0x2a9ac9,_0x2e753d,_0x522911){const _0x53814e=_0x5268ee,_0x58ab8b=this[_0x53814e(0x1e5)][_0x53814e(0x24f)](_0x2a9ac9);if(!_0x58ab8b)return void 0x0;return _0x58ab8b['snapshot'][_0x53814e(0x1dc)]=_0x53814e(0x2a2),_0x58ab8b['snapshot']['connectionState']=_0x53814e(0x312),_0x58ab8b[_0x53814e(0x2dc)][_0x53814e(0x2be)]=_0x53814e(0x26c),_0x58ab8b[_0x53814e(0x2dc)][_0x53814e(0x223)]=DISCONNECT_REASON_MAP[_0x2e753d],_0x58ab8b[_0x53814e(0x2dc)][_0x53814e(0x2f1)]=_0x522911,_0x58ab8b['snapshot'][_0x53814e(0x308)]=_0x522911,this[_0x53814e(0x29a)](_0x58ab8b);}[_0x5268ee(0x267)](_0x4b2338){const _0x3505a3=_0x5268ee,_0x489ebb=this['records'][_0x3505a3(0x24f)](_0x4b2338);if(!_0x489ebb)return void 0x0;return this['records'][_0x3505a3(0x1ee)](_0x4b2338),this[_0x3505a3(0x29a)](_0x489ebb);}[_0x5268ee(0x2a1)](_0x384672={}){const _0x9bfbea=_0x5268ee;return Array[_0x9bfbea(0x33c)](this['records'][_0x9bfbea(0x28e)]())[_0x9bfbea(0x2f9)](_0x10fd9d=>matchesFilters(_0x10fd9d[_0x9bfbea(0x2dc)],_0x384672))['map'](_0x1b5195=>cloneSnapshot(_0x1b5195[_0x9bfbea(0x2dc)]));}['listAbnormal'](_0x2def9b={}){const _0x1a4be5=_0x5268ee;return this[_0x1a4be5(0x2a1)]({..._0x2def9b,'availability':_0x1a4be5(0x2a2)});}['allRecords'](){const _0x393107=_0x5268ee;return Array[_0x393107(0x33c)](this[_0x393107(0x1e5)][_0x393107(0x28e)]())[_0x393107(0x29c)](_0xd6c66b=>this[_0x393107(0x29a)](_0xd6c66b));}['cloneRecord'](_0x453f42){const _0x3263f2=_0x5268ee;return{'identityKey':_0x453f42[_0x3263f2(0x319)],'sessionId':_0x453f42[_0x3263f2(0x298)],'snapshot':cloneSnapshot(_0x453f42[_0x3263f2(0x2dc)]),'explicitState':_0x453f42[_0x3263f2(0x322)]?{..._0x453f42[_0x3263f2(0x322)]}:void 0x0};}};function matchesFilters(_0x128549,_0x4fef60){const _0x4b96af=_0x5268ee;if(_0x4fef60[_0x4b96af(0x25d)]&&_0x128549[_0x4b96af(0x25d)]!==_0x4fef60[_0x4b96af(0x25d)])return![];if(_0x4fef60['email']&&_0x128549[_0x4b96af(0x20d)]!==_0x4fef60[_0x4b96af(0x20d)])return![];if(_0x4fef60['role']&&_0x128549['role']!==_0x4fef60['role'])return![];if(_0x4fef60[_0x4b96af(0x1dc)]&&_0x128549[_0x4b96af(0x1dc)]!==_0x4fef60['availability'])return![];if(_0x4fef60[_0x4b96af(0x2a6)]&&_0x128549[_0x4b96af(0x2a6)]!==_0x4fef60[_0x4b96af(0x2a6)])return![];if(_0x4fef60[_0x4b96af(0x326)]&&_0x128549['connectionState']!==_0x4fef60['connectionState'])return![];if(_0x4fef60[_0x4b96af(0x2be)]&&_0x128549['abnormalSource']!==_0x4fef60[_0x4b96af(0x2be)])return![];return!![];}function cloneSnapshot(_0x1135b3){return{..._0x1135b3};}var TERMINAL_TASK_STATES=new Set([_0x5268ee(0x283),'failed','canceled','rejected']),TaskStore=class{['tasks']=new Map();[_0x5268ee(0x251)](_0x39da48){const _0x52a9c8=_0x5268ee;this['tasks'][_0x52a9c8(0x204)]();for(const _0x5387fb of _0x39da48){this[_0x52a9c8(0x2fa)]['set'](_0x5387fb['id'],clone(_0x5387fb));}}[_0x5268ee(0x254)](_0x190151){const _0x5e3944=_0x5268ee,_0x51326b=createWorkerIdentityKey(_0x190151['workerId'],_0x190151[_0x5e3944(0x20d)]),_0x16fdd7=this[_0x5e3944(0x2fa)][_0x5e3944(0x24f)](_0x190151[_0x5e3944(0x279)]['taskId']);if(!_0x16fdd7){const _0x5ccfa3={'id':_0x190151['message']['taskId'],'contextId':_0x190151[_0x5e3944(0x279)]['contextId'],'status':{'state':_0x5e3944(0x278),'timestamp':_0x190151['now']},'artifacts':[],'history':[clone(_0x190151[_0x5e3944(0x279)])],'metadata':_0x190151[_0x5e3944(0x212)]?clone(_0x190151[_0x5e3944(0x212)]):void 0x0,'assigneeWorkerKey':_0x51326b};return this[_0x5e3944(0x2fa)][_0x5e3944(0x2c3)](_0x5ccfa3['id'],_0x5ccfa3),clone(_0x5ccfa3);}if(_0x16fdd7[_0x5e3944(0x276)]!==_0x51326b)throw new Error(_0x5e3944(0x1f1));if(isTerminalTaskState(_0x16fdd7[_0x5e3944(0x226)][_0x5e3944(0x314)]))throw new Error(_0x5e3944(0x224));return _0x16fdd7[_0x5e3944(0x2cb)][_0x5e3944(0x247)](clone(_0x190151[_0x5e3944(0x279)])),_0x16fdd7[_0x5e3944(0x226)]={'state':_0x5e3944(0x278),'timestamp':_0x190151[_0x5e3944(0x24d)]},_0x190151[_0x5e3944(0x212)]&&(_0x16fdd7[_0x5e3944(0x212)]=clone(_0x190151[_0x5e3944(0x212)])),clone(_0x16fdd7);}[_0x5268ee(0x321)](_0x28df3d,_0xe1afa3,_0x457a98){const _0x1aa18a=_0x5268ee,_0xbd08ff=this[_0x1aa18a(0x2fa)]['get'](_0x28df3d);if(!_0xbd08ff)throw new Error(_0x1aa18a(0x1dd));if(isTerminalTaskState(_0xbd08ff[_0x1aa18a(0x226)][_0x1aa18a(0x314)]))throw new Error(_0x1aa18a(0x2e5));return _0xbd08ff[_0x1aa18a(0x226)]=clone(_0xe1afa3),_0x457a98&&_0xbd08ff[_0x1aa18a(0x2cb)]['push'](clone(_0x457a98)),clone(_0xbd08ff);}[_0x5268ee(0x1df)](_0x250d06,_0x1c48e3){const _0x52dfed=_0x5268ee,_0x48e9cf=this[_0x52dfed(0x2fa)][_0x52dfed(0x24f)](_0x250d06);if(!_0x48e9cf)throw new Error('task\x20not\x20found');if(isTerminalTaskState(_0x48e9cf[_0x52dfed(0x226)]['state']))throw new Error(_0x52dfed(0x2e5));return _0x48e9cf[_0x52dfed(0x229)][_0x52dfed(0x247)](clone(_0x1c48e3)),clone(_0x48e9cf);}[_0x5268ee(0x25b)](_0x56350e,_0x51c209){const _0x3d2150=_0x5268ee,_0x491778=this[_0x3d2150(0x2fa)]['get'](_0x56350e);if(!_0x491778)throw new Error(_0x3d2150(0x1dd));if(isTerminalTaskState(_0x491778['status'][_0x3d2150(0x314)]))return clone(_0x491778);return _0x491778['status']={'state':_0x3d2150(0x327),'timestamp':_0x51c209},clone(_0x491778);}[_0x5268ee(0x24f)](_0x525842,_0x2b03fb={}){const _0x33763f=_0x5268ee,_0x768c76=this['tasks'][_0x33763f(0x24f)](_0x525842);if(!_0x768c76)return void 0x0;if(!_0x2b03fb[_0x33763f(0x1e6)]||_0x768c76[_0x33763f(0x2cb)][_0x33763f(0x210)]<=_0x2b03fb['historyLength'])return clone(_0x768c76);const _0x575fb5=clone(_0x768c76);return _0x575fb5[_0x33763f(0x2cb)]=_0x575fb5[_0x33763f(0x2cb)]['slice'](-_0x2b03fb[_0x33763f(0x1e6)]),_0x575fb5;}[_0x5268ee(0x25e)](_0x57d141={}){const _0x4809d5=_0x5268ee;return Array[_0x4809d5(0x33c)](this[_0x4809d5(0x2fa)][_0x4809d5(0x28e)]())['filter'](_0x5e4b19=>this[_0x4809d5(0x277)](_0x5e4b19,_0x57d141))[_0x4809d5(0x29c)](_0x4e9408=>clone(_0x4e9408));}[_0x5268ee(0x259)](_0x4fbca4){const _0x14484b=_0x5268ee;return Array[_0x14484b(0x33c)](this[_0x14484b(0x2fa)][_0x14484b(0x28e)]())[_0x14484b(0x2f9)](_0x2f84b0=>_0x2f84b0[_0x14484b(0x276)]===_0x4fbca4&&!isTerminalTaskState(_0x2f84b0[_0x14484b(0x226)][_0x14484b(0x314)]))[_0x14484b(0x29c)](_0x1044a0=>clone(_0x1044a0));}[_0x5268ee(0x2a5)](_0x41a9f2){const _0x1af7d9=_0x5268ee;return Array['from'](this[_0x1af7d9(0x2fa)][_0x1af7d9(0x28e)]())[_0x1af7d9(0x2f9)](_0x2d2743=>_0x2d2743[_0x1af7d9(0x276)]===_0x41a9f2&&_0x2d2743[_0x1af7d9(0x226)][_0x1af7d9(0x314)]===_0x1af7d9(0x278))['map'](_0x3ee330=>clone(_0x3ee330));}[_0x5268ee(0x2d7)](_0x3eb946){const _0x23ed38=_0x5268ee,_0x1082a3=this['tasks'][_0x23ed38(0x24f)](_0x3eb946);if(!_0x1082a3)return void 0x0;for(let _0x4ebc1c=_0x1082a3[_0x23ed38(0x2cb)][_0x23ed38(0x210)]-0x1;_0x4ebc1c>=0x0;_0x4ebc1c-=0x1){const _0x41395c=_0x1082a3[_0x23ed38(0x2cb)][_0x4ebc1c];if(_0x41395c[_0x23ed38(0x1fb)]===_0x23ed38(0x1f9))return clone(_0x41395c);}return void 0x0;}[_0x5268ee(0x277)](_0x16828e,_0x89c130){const _0x2d0b5c=_0x5268ee;if(_0x89c130[_0x2d0b5c(0x256)]&&_0x16828e[_0x2d0b5c(0x256)]!==_0x89c130[_0x2d0b5c(0x256)])return![];if(_0x89c130[_0x2d0b5c(0x314)]&&_0x16828e[_0x2d0b5c(0x226)][_0x2d0b5c(0x314)]!==_0x89c130[_0x2d0b5c(0x314)])return![];if(_0x89c130[_0x2d0b5c(0x25d)]||_0x89c130['email']){const [_0x3b0b1f,_0x23549b]=splitWorkerKey(_0x16828e['assigneeWorkerKey']);if(_0x89c130['workerId']&&_0x3b0b1f!==_0x89c130[_0x2d0b5c(0x25d)])return![];if(_0x89c130[_0x2d0b5c(0x20d)]&&_0x23549b!==_0x89c130[_0x2d0b5c(0x20d)])return![];}return!![];}};function isTerminalTaskState(_0x444e6b){return TERMINAL_TASK_STATES['has'](_0x444e6b);}function _0x26a2(_0xac5c04,_0x48c85c){_0xac5c04=_0xac5c04-0x1c6;const _0x126137=_0x1261();let _0x26a296=_0x126137[_0xac5c04];return _0x26a296;}function splitWorkerKey(_0x52af1f){const _0x2e8c93=_0x5268ee,[_0xeb2575,_0x289db5]=_0x52af1f[_0x2e8c93(0x2a8)]('::');return[_0xeb2575,_0x289db5];}function _0x1261(){const _0x4bc693=['3176334vRalFi','offLoginAuthorization','sendTaskStatusUpdate','invalid\x20message','clear','managerToken','offWorkerEvent','queryWorkers','worker\x20is\x20not\x20logged\x20in','exception\x20reason\x20is\x20required','mimeType','has','pid','email','required','manager\x20commands\x20require\x20manager\x20role','length','cancelHandlers','metadata','buildArtifact','sendRequest','forceDisconnect','description','env','login-rejected','getBySessionId','server\x20stopping','resolveCredentialFile','task\x20artifact\x20update\x20failed','rejected','eventHandlers','CancelTask','string','manager-command','onLoginAuthorization','abnormalReason','cannot\x20continue\x20a\x20terminal\x20task','homedir','status','peer','enumerable','artifacts','8453753zSSgRF','emitLoginAuthorizationEvent','pendingRequests','crypto','availability-change','includes','registerManagerControlPlane','number','capabilitySummary','handleManagerSubscribeMessage','listen','latestLoginToken','nodeServer','handleTaskCancel','login-approved','open','rejectPendingRequests','TaskStatusUpdate','close','worker\x20session\x20not\x20found','initialAvailability','login\x20authorization\x20not\x20found','connectPromise','requestId','http://localhost','handleSocketClose','3ZWpplV','self-reported','WebSocketCtor','push','isArray','reconnectTimer','args','utf8','active','now','parse','get','manager-subscribe','seedTasks','hasOwnProperty','managerSubscriptions','createOrContinue','pathname','contextId','stringify','completeLogin','listActiveByWorker','url','cancel','socket-closed','workerId','list','exception','deriveWorkerSnapshot','nodeAdapter','dirname','invalid-token','heartbeat','validateManagerLogin','worker','remove','prototype','task-status-update','handleManagerCommandMessage','loginAuthorization','disconnect','peerId','seedSnapshots','manager\x20control\x20plane\x20is\x20not\x20configured','type','sendAck','chmod','upgrade','workerId\x20is\x20required','markDisconnected','assigneeWorkerKey','matchesFilters','submitted','message','5QnjwCP','TaskArtifactUpdate','session-replaced','createHash','sha256','CLOSING','onTaskUpdate','isFinite','onWorkerEvent','completed','role\x20is\x20invalid','server-stopping','session\x20replaced','artifactId','task-artifact-update','2949412wyEuqk','listTasks','heartbeatTimer','worker.email\x20is\x20required','handleSocketOpen','values','messageId','default','onPending','loginAuthorizationHandlers','error','seed:','emitWorkerEvent','manager-unsubscribe','worker.workerId\x20is\x20required','sessionId','digest','cloneRecord','loginAuthorization.signingSecret\x20is\x20required','map','createHooks','executeCommand','text\x20part\x20must\x20not\x20be\x20empty','parts\x20must\x20contain\x20at\x20least\x20one\x20entry','query','abnormal','failed','requireManagerContext','listReplayableByWorker','activityState','terminate','split','cancelPendingAuthorization','email\x20is\x20required','verifier','socket','eventName','process','file','replayActiveTasks','taskId','initialAvailability\x20is\x20invalid','reason','rename','credentialStore','startHeartbeatLoop','config','clearLoginToken','manager\x20is\x20already\x20connected','.json','handleLogoutMessage','available','authorization','abnormalSource','agent','getPrototypeOf','reconnectDelayMs','buildLoginPayload','set','loginTimer','managerControlPlane','addEventListener','taskUpdateHandlers','login\x20payload\x20is\x20required','trim','Buffer','history','mkdir','task\x20status\x20state\x20is\x20invalid','restoreSessionIfNeeded','artifact','crossws/adapters/node','handleReportExceptionMessage','manager\x20token\x20is\x20not\x20configured','manager\x20subscriptions\x20are\x20not\x20configured','join','OPEN','environment-operator','getLatestActionableMessage','base64url','resolve','manager','login-pending','snapshot','create','http','WebSocket\x20is\x20not\x20connected','cause','reported\x20as\x20abnormal\x20during\x20login','subscribe','end','startsWith','task\x20is\x20already\x20terminal','uri','function','structured\x20payload','persistLoginToken','cancelTask','kind','pendingAuthorizations','text','emitTaskUpdate','ENOENT','authorizationId','lastSeenAt','name','buildAgentMessage','object','listenWithNode','35728580yWHXzu','send','identityToPeerId','filter','tasks','touch','__esModule','connect','add','parts','heartbeat-ack','code','148898zhBmHI','createPendingAuthorization','payload','idle','handleIncomingMessage','taskStore','lastAvailabilityUpdatedAt','SendMessage','socket\x20closed\x20unexpectedly','.tmp','manager-command-result','exports','createTaskController','missing-token','buffer','reject','disconnected','ensureSocketOpen','state','heartbeatIntervalMs','working','worker-client-credentials','statusCode','identityKey','initialWorkers','connections','some','handleLoginMessage','sendHeartbeatAck','handleSocketMessage','login','updateAvailability','explicitState','coder','Not\x20Found','4810422MrylBP','connectionState','canceled','listAbnormalWorkers','entries','data','matchesPath','readyState','initialTasks','disposeManagerSubscription','6731096qzQRNF','sendLoginApproved','reportException','stop','serverUrl','min','fs/promises','signingSecret','clearPendingAuthorization','input-required','messageHandlers','handleTaskStatusUpdateMessage','getOwnPropertyDescriptor','from','report-exception','shouldStayConnected','task','rejectLoginAuthorization','getOwnPropertyNames','scheduleReconnect','handleManagerUnsubscribeMessage','heartbeat\x20timed\x20out','manager\x20token\x20is\x20invalid','once','artifact\x20name\x20is\x20required','manualClose','task\x20status\x20update\x20failed','heartbeatTimeoutMs','lastLoginPayload','hex','approveLoginAuthorization','reconnectBaseDelayMs','WebSocket\x20connection\x20failed','connection\x20closed','update','needsRestoreOnOpen','handleUpdateAvailabilityMessage','registry','reconnectMaxDelayMs','sendLoginPending','runHeartbeatSweep','reconnect','pendingAuthorizationId','6wjmgIs','randomUUID','availability','task\x20not\x20found','manager\x20command\x20failed','addArtifact','registerLogin','reason\x20is\x20required','dispatchTaskCancel','clearManagerSubscriptions','busy','records','historyLength','sendError','offCancel','sendManagerEvent','closeAll','dispatchTaskMessage','defineProperty','issuedAt','delete','isLoggedIn','toString','task\x20assignee\x20does\x20not\x20match\x20worker','destroy','sendLoginRejected','loginToken','path','update-availability','ack','logout','user','unknown\x20connection','role','file-ref\x20part\x20uri\x20is\x20required','call','readStoredLoginToken','sendManagerCommandResult'];_0x1261=function(){return _0x4bc693;};return _0x1261();}function clone(_0x242084){return structuredClone(_0x242084);}var DEFAULT_CONFIG2={'path':'/workers','heartbeatIntervalMs':0x3a98,'heartbeatTimeoutMs':0xafc8,'loginTimeoutMs':0x2710},WorkerServerSDK=class{['config'];[_0x5268ee(0x1d4)]=new WorkerSessionRegistry();[_0x5268ee(0x307)]=new TaskStore();[_0x5268ee(0x21e)]=new Set();[_0x5268ee(0x292)]=new Set();[_0x5268ee(0x2c7)]=new Set();[_0x5268ee(0x31b)]=new Map();['identityToPeerId']=new Map();['pendingAuthorizations']=new Map();['managerControlPlane']=null;[_0x5268ee(0x28b)];[_0x5268ee(0x236)];[_0x5268ee(0x261)];constructor(_0x29089a={}){const _0x3468c0=_0x5268ee;this[_0x3468c0(0x2b7)]={...DEFAULT_CONFIG2,..._0x29089a,'managerToken':_0x29089a['managerToken']??import_node_process2[_0x3468c0(0x290)][_0x3468c0(0x217)]['MEEGO_HARNESS_WORKER_MANAGER_TOKEN'],'loginAuthorization':resolveLoginAuthorizationConfig(_0x29089a[_0x3468c0(0x26b)])},this[_0x3468c0(0x1d4)][_0x3468c0(0x26e)](_0x29089a[_0x3468c0(0x31a)]??[]),this[_0x3468c0(0x307)][_0x3468c0(0x251)](_0x29089a[_0x3468c0(0x32d)]??[]);}[_0x5268ee(0x230)](_0x2fdcb9){const _0x161768=_0x5268ee;return this[_0x161768(0x2c5)]=_0x2fdcb9,this;}async['listen'](_0x384073,_0x1de71e='127.0.0.1'){const _0x156824=_0x5268ee;if(this[_0x156824(0x236)])throw new Error('WorkerServerSDK\x20is\x20already\x20listening');return await this[_0x156824(0x2f5)](_0x384073,_0x1de71e),this[_0x156824(0x2b6)](),this;}async[_0x5268ee(0x332)](){const _0x129dc7=_0x5268ee;this[_0x129dc7(0x28b)]&&(clearInterval(this[_0x129dc7(0x28b)]),this[_0x129dc7(0x28b)]=void 0x0);for(const _0x19c217 of this[_0x129dc7(0x31b)]['values']()){_0x19c217[_0x129dc7(0x2c4)]&&clearTimeout(_0x19c217['loginTimer']);await this[_0x129dc7(0x1e3)](_0x19c217),await this[_0x129dc7(0x2a9)](_0x19c217,_0x129dc7(0x285));if(_0x19c217[_0x129dc7(0x319)]){const _0xad9eac=this[_0x129dc7(0x1d4)][_0x129dc7(0x275)](_0x19c217[_0x129dc7(0x319)],_0x129dc7(0x25c),Date[_0x129dc7(0x24d)]());this[_0x129dc7(0x2f8)][_0x129dc7(0x1ee)](_0x19c217['identityKey']),_0xad9eac&&await this[_0x129dc7(0x295)]({'type':_0x129dc7(0x26c),'worker':_0xad9eac[_0x129dc7(0x2dc)],'cause':_0x129dc7(0x25c)});}try{_0x19c217[_0x129dc7(0x227)]['close'](0x3f4,'server\x20stopping');}catch{_0x19c217[_0x129dc7(0x227)][_0x129dc7(0x2a7)]();}}this['connections'][_0x129dc7(0x204)](),this['identityToPeerId']['clear'](),this['pendingAuthorizations'][_0x129dc7(0x204)](),this[_0x129dc7(0x261)]&&(this[_0x129dc7(0x261)][_0x129dc7(0x1ea)](0x3f4,_0x129dc7(0x21a),!![]),this[_0x129dc7(0x261)]=void 0x0),this[_0x129dc7(0x236)]&&(await new Promise((_0x14965d,_0x5093b8)=>this[_0x129dc7(0x236)][_0x129dc7(0x23c)](_0x5a60b9=>_0x5a60b9?_0x5093b8(_0x5a60b9):_0x14965d())),this[_0x129dc7(0x236)]=void 0x0);}[_0x5268ee(0x282)](_0x5de44b){const _0x2f65cc=_0x5268ee;return this[_0x2f65cc(0x21e)][_0x2f65cc(0x2fe)](_0x5de44b),this;}[_0x5268ee(0x206)](_0x40ac6a){const _0x3b96cd=_0x5268ee;return this[_0x3b96cd(0x21e)][_0x3b96cd(0x1ee)](_0x40ac6a),this;}[_0x5268ee(0x222)](_0x15b5e0){const _0x5e8141=_0x5268ee;return this[_0x5e8141(0x292)][_0x5e8141(0x2fe)](_0x15b5e0),this;}[_0x5268ee(0x201)](_0x1336ef){const _0x4d7792=_0x5268ee;return this['loginAuthorizationHandlers'][_0x4d7792(0x1ee)](_0x1336ef),this;}[_0x5268ee(0x207)](_0x512342={}){const _0x45dbb3=_0x5268ee,{activityState:_0xe19021,..._0x368f1b}=_0x512342;return this[_0x45dbb3(0x1d4)][_0x45dbb3(0x2a1)](_0x368f1b)[_0x45dbb3(0x29c)](_0x19c455=>this[_0x45dbb3(0x260)](_0x19c455))[_0x45dbb3(0x2f9)](_0xfc8bf6=>_0xe19021?_0xfc8bf6[_0x45dbb3(0x2a6)]===_0xe19021:!![]);}[_0x5268ee(0x328)](_0x26428e={}){const _0x108636=_0x5268ee;return this[_0x108636(0x207)]({..._0x26428e,'availability':_0x108636(0x2a2)});}async[_0x5268ee(0x1cd)](_0x2b52a5,_0x3bb59b){const _0x5d9865=_0x5268ee,_0x563be8=this['pendingAuthorizations'][_0x5d9865(0x24f)](_0x2b52a5);if(!_0x563be8)throw new Error(_0x5d9865(0x23f));const _0x2fe859=this[_0x5d9865(0x31b)]['get'](_0x563be8[_0x5d9865(0x26d)]);if(!_0x2fe859||_0x2fe859[_0x5d9865(0x1d9)]!==_0x2b52a5){this[_0x5d9865(0x2ec)][_0x5d9865(0x1ee)](_0x2b52a5);throw new Error(_0x5d9865(0x23f));}this[_0x5d9865(0x337)](_0x2fe859);const _0x4251f3=this[_0x5d9865(0x2b7)][_0x5d9865(0x26b)]?issueLoginToken({'workerId':_0x563be8[_0x5d9865(0x304)][_0x5d9865(0x25d)],'email':_0x563be8[_0x5d9865(0x304)][_0x5d9865(0x20d)],'role':_0x563be8['payload'][_0x5d9865(0x1fb)],'issuedAt':Date['now']()},this['config']['loginAuthorization']['signingSecret']):void 0x0;await this['completeLogin'](_0x2fe859,_0x563be8['requestId'],_0x563be8[_0x5d9865(0x304)],_0x4251f3);}async[_0x5268ee(0x340)](_0x397fab,_0x367141,_0x1e12b2){const _0x4b2fed=_0x5268ee;if(_0x367141[_0x4b2fed(0x2c9)]()[_0x4b2fed(0x210)]===0x0)throw new Error('login\x20rejection\x20reason\x20is\x20required');const _0x4993df=this[_0x4b2fed(0x2ec)][_0x4b2fed(0x24f)](_0x397fab);if(!_0x4993df)throw new Error(_0x4b2fed(0x23f));const _0xc05977=this[_0x4b2fed(0x31b)][_0x4b2fed(0x24f)](_0x4993df[_0x4b2fed(0x26d)]);this['pendingAuthorizations'][_0x4b2fed(0x1ee)](_0x397fab),_0xc05977?.[_0x4b2fed(0x1d9)]===_0x397fab&&(_0xc05977['pendingAuthorizationId']=void 0x0),_0xc05977&&this[_0x4b2fed(0x1f3)](_0xc05977[_0x4b2fed(0x227)],_0x4993df[_0x4b2fed(0x241)],_0x367141);}[_0x5268ee(0x280)](_0x516846){const _0x107972=_0x5268ee;return this[_0x107972(0x2c7)][_0x107972(0x2fe)](_0x516846),this;}async['sendMessage'](_0x14b8a7){const _0xbde849=_0x5268ee;validateSendMessageParams(_0x14b8a7);const _0x3088b9=Date['now'](),_0x1e26ce=_0x14b8a7['taskId']?this[_0xbde849(0x307)]['get'](_0x14b8a7['taskId']):void 0x0;if(_0x14b8a7[_0xbde849(0x2b1)]&&!_0x1e26ce)throw new Error(_0xbde849(0x1dd));const _0x44e06f=_0x14b8a7[_0xbde849(0x2b1)]??crypto[_0xbde849(0x1db)](),_0x5f487a=_0x1e26ce?.[_0xbde849(0x256)]??_0x14b8a7[_0xbde849(0x256)]??crypto[_0xbde849(0x1db)](),_0x41aaf7={'messageId':_0x14b8a7[_0xbde849(0x28f)]??crypto['randomUUID'](),'contextId':_0x5f487a,'taskId':_0x44e06f,'role':_0xbde849(0x1f9),'parts':clone(_0x14b8a7[_0xbde849(0x2ff)]),'metadata':_0x14b8a7[_0xbde849(0x212)]?clone(_0x14b8a7[_0xbde849(0x212)]):void 0x0},_0x4dc853=this[_0xbde849(0x307)][_0xbde849(0x254)]({'workerId':_0x14b8a7['worker']['workerId'],'email':_0x14b8a7['worker']['email'],'message':_0x41aaf7,'metadata':_0x14b8a7[_0xbde849(0x212)],'now':_0x3088b9});return await this[_0xbde849(0x2ee)]({'type':_0xbde849(0x269),'task':_0x4dc853,'status':_0x4dc853[_0xbde849(0x226)],'message':_0x41aaf7}),this[_0xbde849(0x1eb)](_0x4dc853[_0xbde849(0x276)],_0x4dc853,_0x41aaf7),_0x4dc853;}['getTask'](_0x160ecd,_0x5c3fab={}){const _0x8de0fc=_0x5268ee;return this[_0x8de0fc(0x307)]['get'](_0x160ecd,_0x5c3fab);}[_0x5268ee(0x28a)](_0x14a395={}){const _0x119400=_0x5268ee;return this[_0x119400(0x307)]['list'](_0x14a395);}async[_0x5268ee(0x2ea)](_0x511e1a){const _0x143310=_0x5268ee,_0xc35fbe=this[_0x143310(0x307)][_0x143310(0x25b)](_0x511e1a,Date['now']());return await this['emitTaskUpdate']({'type':'task-status-update','task':_0xc35fbe,'status':_0xc35fbe[_0x143310(0x226)]}),this[_0x143310(0x1e2)](_0xc35fbe[_0x143310(0x276)],_0xc35fbe['id']),_0xc35fbe;}async[_0x5268ee(0x2f5)](_0x446ecd,_0x34d2a9){const _0xe0c219=_0x5268ee,_0x27c9ed=await import(_0xe0c219(0x2d0)),_0x5124a1=_0x27c9ed[_0xe0c219(0x290)]({'hooks':this['createHooks']()});this[_0xe0c219(0x261)]=_0x5124a1,this[_0xe0c219(0x236)]=(0x0,import_node_http['createServer'])((_0xfbb034,_0x53c48e)=>{const _0x56cdb6=_0xe0c219;_0x53c48e[_0x56cdb6(0x318)]=0x194,_0x53c48e[_0x56cdb6(0x2e3)](_0x56cdb6(0x324));}),this['nodeServer']['on'](_0xe0c219(0x273),(_0x5d337f,_0x3cb3b1,_0x525205)=>{const _0x48e073=_0xe0c219;if(!this[_0x48e073(0x32b)](_0x5d337f[_0x48e073(0x25a)]??'/')){_0x3cb3b1[_0x48e073(0x1f2)]();return;}void this[_0x48e073(0x261)]['handleUpgrade'](_0x5d337f,_0x3cb3b1,_0x525205)['catch'](()=>{const _0x46986d=_0x48e073;_0x3cb3b1[_0x46986d(0x1f2)]();});}),await new Promise((_0x4caaaa,_0x516db8)=>{const _0xc892e8=_0xe0c219;this[_0xc892e8(0x236)][_0xc892e8(0x1c6)](_0xc892e8(0x293),_0x516db8),this['nodeServer'][_0xc892e8(0x234)](_0x446ecd,_0x34d2a9,()=>_0x4caaaa());});}[_0x5268ee(0x29d)](){return{'open':async _0x28d96d=>{const _0xd7b9d6=_0x26a2;this[_0xd7b9d6(0x28d)](_0x28d96d);},'message':async(_0x40af0e,_0x48c2b0)=>{await this['handleSocketMessage'](_0x40af0e,_0x48c2b0['text']());},'close':async _0x213b40=>{const _0x3a0b95=_0x26a2;await this[_0x3a0b95(0x243)](_0x213b40,_0x3a0b95(0x25c));},'error':async()=>{}};}[_0x5268ee(0x28d)](_0x507be7){const _0x3483bb=_0x5268ee,_0x3ce482={'peer':_0x507be7,'sessionId':crypto['randomUUID'](),'managerSubscriptions':new Map(),'loginTimer':setTimeout(()=>{const _0xf33817=_0x26a2,_0x48d122=this['connections'][_0xf33817(0x24f)](_0x507be7['id']);!_0x48d122?.['identityKey']&&(_0x507be7[_0xf33817(0x23c)](0xfa1,'login\x20required'),this[_0xf33817(0x31b)][_0xf33817(0x1ee)](_0x507be7['id']));},this[_0x3483bb(0x2b7)]['loginTimeoutMs'])};this['connections']['set'](_0x507be7['id'],_0x3ce482);}async[_0x5268ee(0x31f)](_0x214df5,_0xb00065){const _0x2813c3=_0x5268ee,_0x1f4ac6=parseClientMessage(_0xb00065);if(!_0x1f4ac6){this[_0x2813c3(0x1e7)](_0x214df5,_0x2813c3(0x203));return;}const _0x45dfcb=this[_0x2813c3(0x31b)][_0x2813c3(0x24f)](_0x214df5['id']);if(!_0x45dfcb){this[_0x2813c3(0x1e7)](_0x214df5,_0x2813c3(0x1fa));return;}_0x1f4ac6['type']!==_0x2813c3(0x300)&&_0x45dfcb[_0x2813c3(0x319)]&&this[_0x2813c3(0x1d4)][_0x2813c3(0x2fb)](_0x45dfcb[_0x2813c3(0x319)],Date[_0x2813c3(0x24d)]());if(_0x45dfcb[_0x2813c3(0x1d9)]&&_0x1f4ac6['type']!=='login'&&_0x1f4ac6[_0x2813c3(0x270)]!=='heartbeat-ack'){this['sendError'](_0x214df5,_0x2813c3(0x208),'requestId'in _0x1f4ac6?_0x1f4ac6['requestId']:void 0x0);return;}switch(_0x1f4ac6['type']){case _0x2813c3(0x320):await this[_0x2813c3(0x31d)](_0x45dfcb,_0x1f4ac6);return;case _0x2813c3(0x1f8):await this[_0x2813c3(0x2bb)](_0x45dfcb,_0x1f4ac6[_0x2813c3(0x241)]);return;case'update-availability':await this['handleUpdateAvailabilityMessage'](_0x45dfcb,_0x1f4ac6);return;case'report-exception':await this[_0x2813c3(0x2d1)](_0x45dfcb,_0x1f4ac6);return;case'manager-command':await this[_0x2813c3(0x26a)](_0x45dfcb,_0x1f4ac6);return;case _0x2813c3(0x250):await this[_0x2813c3(0x233)](_0x45dfcb,_0x1f4ac6);return;case'manager-unsubscribe':await this['handleManagerUnsubscribeMessage'](_0x45dfcb,_0x1f4ac6);return;case _0x2813c3(0x23b):await this[_0x2813c3(0x33a)](_0x45dfcb,_0x1f4ac6);return;case _0x2813c3(0x27b):await this['handleTaskArtifactUpdateMessage'](_0x45dfcb,_0x1f4ac6);return;case _0x2813c3(0x300):_0x45dfcb['identityKey']&&this[_0x2813c3(0x1d4)]['touch'](_0x45dfcb[_0x2813c3(0x319)],Date['now']());}}async[_0x5268ee(0x31d)](_0x9dd7ad,_0x6f5eb7){const _0x41b83a=_0x5268ee,_0x5c15f5=validateLoginPayload(_0x6f5eb7['payload']);if(_0x5c15f5){this[_0x41b83a(0x1e7)](_0x9dd7ad[_0x41b83a(0x227)],_0x5c15f5,_0x6f5eb7[_0x41b83a(0x241)]);return;}_0x9dd7ad[_0x41b83a(0x2c4)]&&(clearTimeout(_0x9dd7ad['loginTimer']),_0x9dd7ad[_0x41b83a(0x2c4)]=void 0x0);await this[_0x41b83a(0x2a9)](_0x9dd7ad,'login-retried');const _0x1d7054=createWorkerIdentityKey(_0x6f5eb7[_0x41b83a(0x304)][_0x41b83a(0x25d)],_0x6f5eb7['payload'][_0x41b83a(0x20d)]),_0x2eb6b0=this[_0x41b83a(0x265)](_0x6f5eb7[_0x41b83a(0x304)],_0x1d7054);if(_0x2eb6b0){this['sendLoginRejected'](_0x9dd7ad[_0x41b83a(0x227)],_0x6f5eb7[_0x41b83a(0x241)],_0x2eb6b0);return;}if(_0x6f5eb7[_0x41b83a(0x304)][_0x41b83a(0x1fb)]===_0x41b83a(0x2da)){await this[_0x41b83a(0x258)](_0x9dd7ad,_0x6f5eb7[_0x41b83a(0x241)],_0x6f5eb7[_0x41b83a(0x304)]);return;}if(!this[_0x41b83a(0x2b7)][_0x41b83a(0x26b)]){await this[_0x41b83a(0x258)](_0x9dd7ad,_0x6f5eb7[_0x41b83a(0x241)],_0x6f5eb7['payload']);return;}const _0x50ef91=_0x6f5eb7[_0x41b83a(0x304)][_0x41b83a(0x1f4)]?verifyLoginToken(_0x6f5eb7['payload'][_0x41b83a(0x1f4)],this[_0x41b83a(0x2b7)][_0x41b83a(0x26b)][_0x41b83a(0x336)]):null,_0x564352=_0x50ef91&&_0x50ef91[_0x41b83a(0x25d)]===_0x6f5eb7[_0x41b83a(0x304)][_0x41b83a(0x25d)]&&_0x50ef91[_0x41b83a(0x20d)]===_0x6f5eb7['payload'][_0x41b83a(0x20d)]&&_0x50ef91[_0x41b83a(0x1fb)]===_0x6f5eb7['payload'][_0x41b83a(0x1fb)];if(_0x564352){const _0x30c536=issueLoginToken({'workerId':_0x6f5eb7[_0x41b83a(0x304)][_0x41b83a(0x25d)],'email':_0x6f5eb7[_0x41b83a(0x304)][_0x41b83a(0x20d)],'role':_0x6f5eb7[_0x41b83a(0x304)]['role'],'issuedAt':Date[_0x41b83a(0x24d)]()},this[_0x41b83a(0x2b7)][_0x41b83a(0x26b)][_0x41b83a(0x336)]);await this[_0x41b83a(0x258)](_0x9dd7ad,_0x6f5eb7['requestId'],_0x6f5eb7[_0x41b83a(0x304)],_0x30c536);return;}await this[_0x41b83a(0x303)](_0x9dd7ad,_0x6f5eb7,_0x6f5eb7['payload'][_0x41b83a(0x1f4)]?_0x41b83a(0x263):_0x41b83a(0x30f));}[_0x5268ee(0x265)](_0x19731e,_0x5dc8ef){const _0x267b9f=_0x5268ee;if(_0x19731e[_0x267b9f(0x1fb)]!==_0x267b9f(0x2da))return null;if(!this[_0x267b9f(0x2b7)][_0x267b9f(0x205)]||this[_0x267b9f(0x2b7)][_0x267b9f(0x205)][_0x267b9f(0x2c9)]()[_0x267b9f(0x210)]===0x0)return _0x267b9f(0x2d2);if(_0x19731e[_0x267b9f(0x205)]!==this[_0x267b9f(0x2b7)][_0x267b9f(0x205)])return _0x267b9f(0x345);const _0x5ae31b=this[_0x267b9f(0x1d4)][_0x267b9f(0x2a1)]({'role':'manager','connectionState':'connected'});if(_0x5ae31b[_0x267b9f(0x31c)](_0x5646f3=>createWorkerIdentityKey(_0x5646f3['workerId'],_0x5646f3[_0x267b9f(0x20d)])!==_0x5dc8ef))return'manager\x20is\x20already\x20connected';if(_0x5ae31b[_0x267b9f(0x210)]>0x0)return _0x267b9f(0x2b9);return null;}async[_0x5268ee(0x303)](_0x4b65db,_0xae13b5,_0xd886e5){const _0x1e5d17=_0x5268ee,_0x58870e={'authorizationId':crypto['randomUUID'](),'workerId':_0xae13b5[_0x1e5d17(0x304)][_0x1e5d17(0x25d)],'email':_0xae13b5[_0x1e5d17(0x304)][_0x1e5d17(0x20d)],'role':_0xae13b5[_0x1e5d17(0x304)][_0x1e5d17(0x1fb)],'capabilitySummary':_0xae13b5[_0x1e5d17(0x304)][_0x1e5d17(0x232)],'initialAvailability':_0xae13b5[_0x1e5d17(0x304)][_0x1e5d17(0x23e)]??_0x1e5d17(0x2bc),'requestedAt':Date['now'](),'reason':_0xd886e5};_0x4b65db[_0x1e5d17(0x1d9)]=_0x58870e[_0x1e5d17(0x2f0)],this[_0x1e5d17(0x2ec)]['set'](_0x58870e[_0x1e5d17(0x2f0)],{'authorization':_0x58870e,'peerId':_0x4b65db[_0x1e5d17(0x227)]['id'],'requestId':_0xae13b5[_0x1e5d17(0x241)],'payload':clone(_0xae13b5[_0x1e5d17(0x304)])}),await this[_0x1e5d17(0x22b)]({'type':'required','authorization':clonePendingAuthorization(_0x58870e)}),this['sendLoginPending'](_0x4b65db[_0x1e5d17(0x227)],_0xae13b5['requestId'],_0x58870e['authorizationId'],_0xd886e5);}async[_0x5268ee(0x258)](_0x3b5242,_0x4e953a,_0x1facd0,_0x55407b){const _0x33fd29=_0x5268ee,_0x141385=Date[_0x33fd29(0x24d)](),_0x2c9596=createWorkerIdentityKey(_0x1facd0[_0x33fd29(0x25d)],_0x1facd0[_0x33fd29(0x20d)]),_0x3e5d8e=this[_0x33fd29(0x2f8)][_0x33fd29(0x24f)](_0x2c9596),_0x1be370=_0x3e5d8e&&_0x3e5d8e!==_0x3b5242[_0x33fd29(0x227)]['id']?this[_0x33fd29(0x31b)]['get'](_0x3e5d8e):void 0x0;_0x1be370?.[_0x33fd29(0x319)]===_0x2c9596&&await this[_0x33fd29(0x215)](_0x1be370,_0x33fd29(0x27c));_0x3b5242[_0x33fd29(0x2c4)]&&(clearTimeout(_0x3b5242['loginTimer']),_0x3b5242[_0x33fd29(0x2c4)]=void 0x0);this['clearPendingAuthorization'](_0x3b5242),_0x3b5242[_0x33fd29(0x319)]=_0x2c9596,this[_0x33fd29(0x2f8)]['set'](_0x2c9596,_0x3b5242[_0x33fd29(0x227)]['id']);const _0x2e50a8=this[_0x33fd29(0x1d4)][_0x33fd29(0x1e0)](_0x3b5242[_0x33fd29(0x298)],_0x1facd0,_0x141385);await this[_0x33fd29(0x295)]({'type':_0x33fd29(0x320),'worker':this[_0x33fd29(0x260)](_0x2e50a8[_0x33fd29(0x2dc)])}),this[_0x33fd29(0x2b0)](_0x2c9596),this[_0x33fd29(0x330)](_0x3b5242['peer'],_0x4e953a,_0x55407b);}[_0x5268ee(0x337)](_0x28a728){const _0x4a06b5=_0x5268ee;if(!_0x28a728[_0x4a06b5(0x1d9)])return;this['pendingAuthorizations'][_0x4a06b5(0x1ee)](_0x28a728['pendingAuthorizationId']),_0x28a728[_0x4a06b5(0x1d9)]=void 0x0;}async['cancelPendingAuthorization'](_0x31f74d,_0x43ebc6){const _0x1f080f=_0x5268ee;if(!_0x31f74d[_0x1f080f(0x1d9)])return;const _0x32f23f=_0x31f74d['pendingAuthorizationId'],_0x4a5a79=this['pendingAuthorizations'][_0x1f080f(0x24f)](_0x32f23f);this['pendingAuthorizations'][_0x1f080f(0x1ee)](_0x32f23f),_0x31f74d[_0x1f080f(0x1d9)]=void 0x0;if(!_0x4a5a79)return;await this[_0x1f080f(0x22b)]({'type':_0x1f080f(0x327),'authorization':clonePendingAuthorization(_0x4a5a79[_0x1f080f(0x2bd)]),'cause':_0x43ebc6});}async[_0x5268ee(0x2bb)](_0x33c217,_0x2a474f){const _0x32b1e8=_0x5268ee;if(!_0x33c217[_0x32b1e8(0x319)]){this[_0x32b1e8(0x1e7)](_0x33c217[_0x32b1e8(0x227)],_0x32b1e8(0x208),_0x2a474f);return;}await this['clearManagerSubscriptions'](_0x33c217);const _0x4d91a8=this['registry'][_0x32b1e8(0x267)](_0x33c217['identityKey']);this[_0x32b1e8(0x2f8)][_0x32b1e8(0x1ee)](_0x33c217[_0x32b1e8(0x319)]),_0x33c217[_0x32b1e8(0x319)]=void 0x0,_0x4d91a8&&await this[_0x32b1e8(0x295)]({'type':'logout','worker':this[_0x32b1e8(0x260)](_0x4d91a8[_0x32b1e8(0x2dc)])}),this['sendAck'](_0x33c217[_0x32b1e8(0x227)],_0x2a474f);}async[_0x5268ee(0x1d3)](_0x509ded,_0x5784eb){const _0x3d448f=_0x5268ee;if(!_0x509ded[_0x3d448f(0x319)]){this['sendError'](_0x509ded[_0x3d448f(0x227)],_0x3d448f(0x208),_0x5784eb[_0x3d448f(0x241)]);return;}const _0x6c751d=this['registry'][_0x3d448f(0x24f)](_0x509ded[_0x3d448f(0x319)]);if(!_0x6c751d){this[_0x3d448f(0x1e7)](_0x509ded[_0x3d448f(0x227)],_0x3d448f(0x23d),_0x5784eb[_0x3d448f(0x241)]);return;}const _0x234bcd=this[_0x3d448f(0x1d4)]['updateAvailability'](_0x509ded[_0x3d448f(0x319)],_0x5784eb[_0x3d448f(0x1dc)],Date['now']());if(!_0x234bcd){this[_0x3d448f(0x1e7)](_0x509ded[_0x3d448f(0x227)],_0x3d448f(0x23d),_0x5784eb[_0x3d448f(0x241)]);return;}await this[_0x3d448f(0x295)]({'type':_0x3d448f(0x22e),'worker':this[_0x3d448f(0x260)](_0x234bcd[_0x3d448f(0x2dc)]),'previousAvailability':_0x6c751d[_0x3d448f(0x2dc)][_0x3d448f(0x1dc)],'previousAbnormalSource':_0x6c751d['snapshot'][_0x3d448f(0x2be)],'previousAbnormalReason':_0x6c751d[_0x3d448f(0x2dc)][_0x3d448f(0x223)]}),this[_0x3d448f(0x271)](_0x509ded['peer'],_0x5784eb[_0x3d448f(0x241)]);}async[_0x5268ee(0x2d1)](_0x775ed3,_0x19dd68){const _0x306d74=_0x5268ee;if(!_0x775ed3[_0x306d74(0x319)]){this['sendError'](_0x775ed3['peer'],_0x306d74(0x208),_0x19dd68[_0x306d74(0x241)]);return;}if(_0x19dd68[_0x306d74(0x2b3)][_0x306d74(0x2c9)]()[_0x306d74(0x210)]===0x0){this[_0x306d74(0x1e7)](_0x775ed3['peer'],_0x306d74(0x209),_0x19dd68[_0x306d74(0x241)]);return;}const _0x4b5159=this['registry'][_0x306d74(0x24f)](_0x775ed3[_0x306d74(0x319)]);if(!_0x4b5159){this['sendError'](_0x775ed3[_0x306d74(0x227)],_0x306d74(0x23d),_0x19dd68[_0x306d74(0x241)]);return;}const _0x900b8a=this[_0x306d74(0x1d4)]['reportException'](_0x775ed3[_0x306d74(0x319)],_0x19dd68[_0x306d74(0x2b3)],Date[_0x306d74(0x24d)]());if(!_0x900b8a){this['sendError'](_0x775ed3['peer'],_0x306d74(0x23d),_0x19dd68[_0x306d74(0x241)]);return;}await this['emitWorkerEvent']({'type':'availability-change','worker':this[_0x306d74(0x260)](_0x900b8a[_0x306d74(0x2dc)]),'previousAvailability':_0x4b5159[_0x306d74(0x2dc)][_0x306d74(0x1dc)],'previousAbnormalSource':_0x4b5159[_0x306d74(0x2dc)][_0x306d74(0x2be)],'previousAbnormalReason':_0x4b5159[_0x306d74(0x2dc)][_0x306d74(0x223)]}),this['sendAck'](_0x775ed3[_0x306d74(0x227)],_0x19dd68[_0x306d74(0x241)]);}async[_0x5268ee(0x33a)](_0x3fbcde,_0x46938e){const _0x2891cb=_0x5268ee;if(!_0x3fbcde[_0x2891cb(0x319)]){this[_0x2891cb(0x1e7)](_0x3fbcde[_0x2891cb(0x227)],_0x2891cb(0x208),_0x46938e[_0x2891cb(0x241)]);return;}const _0x23d624=this[_0x2891cb(0x307)][_0x2891cb(0x24f)](_0x46938e[_0x2891cb(0x2b1)]);if(!_0x23d624){this[_0x2891cb(0x1e7)](_0x3fbcde[_0x2891cb(0x227)],_0x2891cb(0x1dd),_0x46938e['requestId']);return;}if(_0x23d624[_0x2891cb(0x276)]!==_0x3fbcde[_0x2891cb(0x319)]){this['sendError'](_0x3fbcde['peer'],_0x2891cb(0x1f1),_0x46938e['requestId']);return;}try{validateTaskStatusUpdate(_0x46938e[_0x2891cb(0x226)],_0x23d624[_0x2891cb(0x226)]);const _0x2837e9=this['taskStore'][_0x2891cb(0x321)](_0x46938e[_0x2891cb(0x2b1)],clone(_0x46938e[_0x2891cb(0x226)]),_0x46938e['message']?clone(_0x46938e[_0x2891cb(0x279)]):void 0x0);await this[_0x2891cb(0x2ee)]({'type':_0x2891cb(0x269),'task':_0x2837e9,'status':_0x2837e9[_0x2891cb(0x226)],'message':_0x46938e['message']?clone(_0x46938e[_0x2891cb(0x279)]):void 0x0}),this[_0x2891cb(0x271)](_0x3fbcde[_0x2891cb(0x227)],_0x46938e[_0x2891cb(0x241)]);}catch(_0x26121f){this[_0x2891cb(0x1e7)](_0x3fbcde[_0x2891cb(0x227)],_0x26121f instanceof Error?_0x26121f['message']:_0x2891cb(0x1c9),_0x46938e[_0x2891cb(0x241)]);}}async['handleTaskArtifactUpdateMessage'](_0x5a5984,_0x1447a6){const _0x354f69=_0x5268ee;if(!_0x5a5984[_0x354f69(0x319)]){this[_0x354f69(0x1e7)](_0x5a5984[_0x354f69(0x227)],_0x354f69(0x208),_0x1447a6[_0x354f69(0x241)]);return;}const _0x28cf45=this[_0x354f69(0x307)][_0x354f69(0x24f)](_0x1447a6[_0x354f69(0x2b1)]);if(!_0x28cf45){this[_0x354f69(0x1e7)](_0x5a5984[_0x354f69(0x227)],_0x354f69(0x1dd),_0x1447a6[_0x354f69(0x241)]);return;}if(_0x28cf45[_0x354f69(0x276)]!==_0x5a5984['identityKey']){this[_0x354f69(0x1e7)](_0x5a5984['peer'],'task\x20assignee\x20does\x20not\x20match\x20worker',_0x1447a6['requestId']);return;}try{validateArtifact(_0x1447a6[_0x354f69(0x2cf)]);const _0x9e481f=this[_0x354f69(0x307)][_0x354f69(0x1df)](_0x1447a6[_0x354f69(0x2b1)],_0x1447a6[_0x354f69(0x2cf)]);await this[_0x354f69(0x2ee)]({'type':_0x354f69(0x288),'task':_0x9e481f,'artifact':clone(_0x1447a6[_0x354f69(0x2cf)])}),this[_0x354f69(0x271)](_0x5a5984[_0x354f69(0x227)],_0x1447a6['requestId']);}catch(_0xc46b79){this[_0x354f69(0x1e7)](_0x5a5984[_0x354f69(0x227)],_0xc46b79 instanceof Error?_0xc46b79[_0x354f69(0x279)]:_0x354f69(0x21c),_0x1447a6[_0x354f69(0x241)]);}}async[_0x5268ee(0x26a)](_0x2b8ef2,_0x2321bb){const _0x1be124=_0x5268ee,_0x59aa11=this[_0x1be124(0x2a4)](_0x2b8ef2,_0x2321bb[_0x1be124(0x241)]);if(!_0x59aa11)return;if(!this[_0x1be124(0x2c5)]){this[_0x1be124(0x1e7)](_0x2b8ef2[_0x1be124(0x227)],_0x1be124(0x26f),_0x2321bb['requestId']);return;}try{const _0x102484=await this[_0x1be124(0x2c5)][_0x1be124(0x29e)]({'name':_0x2321bb[_0x1be124(0x2f2)],'args':cloneIfDefined(_0x2321bb[_0x1be124(0x24a)])},_0x59aa11);this[_0x1be124(0x1ff)](_0x2b8ef2['peer'],_0x2321bb[_0x1be124(0x241)],cloneIfDefined(_0x102484));}catch(_0x121ba4){this[_0x1be124(0x1e7)](_0x2b8ef2[_0x1be124(0x227)],_0x121ba4 instanceof Error?_0x121ba4[_0x1be124(0x279)]:_0x1be124(0x1de),_0x2321bb['requestId']);}}async[_0x5268ee(0x233)](_0x585446,_0x5be387){const _0x19baa5=_0x5268ee,_0x531756=this['requireManagerContext'](_0x585446,_0x5be387[_0x19baa5(0x241)]);if(!_0x531756)return;if(!this[_0x19baa5(0x2c5)]?.[_0x19baa5(0x2e2)]){this[_0x19baa5(0x1e7)](_0x585446[_0x19baa5(0x227)],_0x19baa5(0x2d3),_0x5be387[_0x19baa5(0x241)]);return;}await this[_0x19baa5(0x32e)](_0x585446,_0x5be387[_0x19baa5(0x2ad)]);const _0x13c7b3=await this[_0x19baa5(0x2c5)][_0x19baa5(0x2e2)](_0x5be387[_0x19baa5(0x2ad)],async _0x32e22e=>{const _0x1ad9db=_0x19baa5;if(!this[_0x1ad9db(0x31b)][_0x1ad9db(0x20b)](_0x585446[_0x1ad9db(0x227)]['id'])||!_0x585446['identityKey'])return;this[_0x1ad9db(0x1e9)](_0x585446[_0x1ad9db(0x227)],{'eventName':_0x32e22e[_0x1ad9db(0x2ad)],'payload':cloneIfDefined(_0x32e22e[_0x1ad9db(0x304)])});},_0x531756);_0x585446[_0x19baa5(0x253)][_0x19baa5(0x2c3)](_0x5be387[_0x19baa5(0x2ad)],_0x13c7b3),this[_0x19baa5(0x271)](_0x585446[_0x19baa5(0x227)],_0x5be387['requestId']);}async[_0x5268ee(0x343)](_0x450c1e,_0x46570a){const _0x556b89=_0x5268ee,_0x2849f7=this[_0x556b89(0x2a4)](_0x450c1e,_0x46570a['requestId']);if(!_0x2849f7)return;await this[_0x556b89(0x32e)](_0x450c1e,_0x46570a[_0x556b89(0x2ad)]),this['sendAck'](_0x450c1e[_0x556b89(0x227)],_0x46570a[_0x556b89(0x241)]);}async[_0x5268ee(0x243)](_0x38402f,_0x5f5247){const _0x440f84=_0x5268ee,_0x23e1b4=this[_0x440f84(0x31b)][_0x440f84(0x24f)](_0x38402f['id']);if(!_0x23e1b4)return;_0x23e1b4[_0x440f84(0x2c4)]&&clearTimeout(_0x23e1b4['loginTimer']);await this[_0x440f84(0x1e3)](_0x23e1b4),this[_0x440f84(0x31b)]['delete'](_0x38402f['id']),await this[_0x440f84(0x2a9)](_0x23e1b4,_0x5f5247);if(!_0x23e1b4[_0x440f84(0x319)])return;if(this[_0x440f84(0x2f8)][_0x440f84(0x24f)](_0x23e1b4[_0x440f84(0x319)])!==_0x38402f['id'])return;const _0x58bf99=this[_0x440f84(0x1d4)][_0x440f84(0x275)](_0x23e1b4[_0x440f84(0x319)],_0x5f5247,Date[_0x440f84(0x24d)]());this[_0x440f84(0x2f8)]['delete'](_0x23e1b4['identityKey']),_0x58bf99&&await this[_0x440f84(0x295)]({'type':'disconnect','worker':this['deriveWorkerSnapshot'](_0x58bf99[_0x440f84(0x2dc)]),'cause':_0x5f5247});}async[_0x5268ee(0x215)](_0x5bc490,_0x1e0110){const _0x5f4ec3=_0x5268ee;this['connections'][_0x5f4ec3(0x1ee)](_0x5bc490[_0x5f4ec3(0x227)]['id']);_0x5bc490[_0x5f4ec3(0x2c4)]&&clearTimeout(_0x5bc490[_0x5f4ec3(0x2c4)]);await this[_0x5f4ec3(0x1e3)](_0x5bc490),await this['cancelPendingAuthorization'](_0x5bc490,_0x1e0110);if(_0x5bc490[_0x5f4ec3(0x319)]){const _0x4205cf=this[_0x5f4ec3(0x1d4)][_0x5f4ec3(0x275)](_0x5bc490[_0x5f4ec3(0x319)],_0x1e0110,Date['now']());this['identityToPeerId']['delete'](_0x5bc490['identityKey']),_0x5bc490['identityKey']=void 0x0,_0x4205cf&&await this['emitWorkerEvent']({'type':_0x5f4ec3(0x26c),'worker':this['deriveWorkerSnapshot'](_0x4205cf[_0x5f4ec3(0x2dc)]),'cause':_0x1e0110});}try{_0x5bc490[_0x5f4ec3(0x227)][_0x5f4ec3(0x23c)](0xfa2,_0x5f4ec3(0x286));}catch{_0x5bc490[_0x5f4ec3(0x227)]['terminate']();}}['startHeartbeatLoop'](){const _0x175641=_0x5268ee;this['heartbeatTimer']=setInterval(()=>{const _0x2fdd4a=_0x26a2,_0x55fc8a=Date[_0x2fdd4a(0x24d)]();void this[_0x2fdd4a(0x1d7)](_0x55fc8a);},this[_0x175641(0x2b7)][_0x175641(0x315)]);}async[_0x5268ee(0x1d7)](_0xde73bc){const _0x1ff862=_0x5268ee;for(const _0x3376c6 of this[_0x1ff862(0x31b)]['values']()){if(!_0x3376c6[_0x1ff862(0x319)])continue;const _0x11cf5d=this['registry'][_0x1ff862(0x24f)](_0x3376c6['identityKey']);if(!_0x11cf5d)continue;if(_0xde73bc-_0x11cf5d[_0x1ff862(0x2dc)][_0x1ff862(0x2f1)]>this[_0x1ff862(0x2b7)][_0x1ff862(0x1ca)]){await this[_0x1ff862(0x215)](_0x3376c6,'heartbeat-timeout');continue;}_0x3376c6[_0x1ff862(0x227)][_0x1ff862(0x2f7)](stringifyServerMessage({'type':'heartbeat','sentAt':_0xde73bc}));}}[_0x5268ee(0x32b)](_0x1ddbb2){const _0x2a06fe=_0x5268ee,_0x656b83=_0x1ddbb2[_0x2a06fe(0x2e4)](_0x2a06fe(0x2de))?new URL(_0x1ddbb2)['pathname']:new URL(_0x1ddbb2,_0x2a06fe(0x242))[_0x2a06fe(0x255)];return _0x656b83===this[_0x2a06fe(0x2b7)]['path'];}['sendAck'](_0x5409bb,_0x292f72){const _0x2093e9=_0x5268ee,_0x353e40={'type':_0x2093e9(0x1f7),'requestId':_0x292f72};_0x5409bb[_0x2093e9(0x2f7)](stringifyServerMessage(_0x353e40));}[_0x5268ee(0x1d6)](_0x5e4d65,_0x35f688,_0x88937b,_0x4d7db0){const _0x314d43={'type':'login-pending','requestId':_0x35f688,'authorizationId':_0x88937b,'reason':_0x4d7db0};_0x5e4d65['send'](stringifyServerMessage(_0x314d43));}[_0x5268ee(0x330)](_0x11fabc,_0x362fbc,_0x186435){const _0x49f714=_0x5268ee,_0xb938c3={'type':_0x49f714(0x238),'requestId':_0x362fbc,'loginToken':_0x186435};_0x11fabc['send'](stringifyServerMessage(_0xb938c3));}[_0x5268ee(0x1f3)](_0x2db2cd,_0x5c64ed,_0x3a6072){const _0x408934=_0x5268ee,_0xf820ad={'type':_0x408934(0x218),'requestId':_0x5c64ed,'message':_0x3a6072};_0x2db2cd[_0x408934(0x2f7)](stringifyServerMessage(_0xf820ad));}['sendError'](_0x265799,_0x3f7d27,_0x21eaee){const _0x13dddf=_0x5268ee,_0x28dfef={'type':_0x13dddf(0x293),'message':_0x3f7d27,'requestId':_0x21eaee};_0x265799[_0x13dddf(0x2f7)](stringifyServerMessage(_0x28dfef));}['dispatchTaskMessage'](_0x2f5348,_0x109fee,_0x36f472){const _0x2e236c=_0x5268ee,_0x3f6707=this[_0x2e236c(0x2f8)][_0x2e236c(0x24f)](_0x2f5348);if(!_0x3f6707)return;const _0x41b3b4=this[_0x2e236c(0x31b)][_0x2e236c(0x24f)](_0x3f6707);if(!_0x41b3b4)return;const _0x90f44b={'type':_0x2e236c(0x309),'task':clone(_0x109fee),'message':clone(_0x36f472)};_0x41b3b4[_0x2e236c(0x227)][_0x2e236c(0x2f7)](stringifyServerMessage(_0x90f44b));}[_0x5268ee(0x1e2)](_0x45259d,_0x5a6fda){const _0x36b17a=_0x5268ee,_0x3a2e62=this[_0x36b17a(0x2f8)][_0x36b17a(0x24f)](_0x45259d);if(!_0x3a2e62)return;const _0x56a4a9=this[_0x36b17a(0x31b)][_0x36b17a(0x24f)](_0x3a2e62);if(!_0x56a4a9)return;_0x56a4a9[_0x36b17a(0x227)][_0x36b17a(0x2f7)](stringifyServerMessage({'type':'CancelTask','taskId':_0x5a6fda}));}[_0x5268ee(0x2b0)](_0xe2d197){const _0x3565f1=_0x5268ee,_0x47b3f1=this[_0x3565f1(0x307)][_0x3565f1(0x2a5)](_0xe2d197);for(const _0x3b4c4e of _0x47b3f1){const _0x4a47f8=this['taskStore']['getLatestActionableMessage'](_0x3b4c4e['id']);if(!_0x4a47f8)continue;this[_0x3565f1(0x1eb)](_0xe2d197,_0x3b4c4e,_0x4a47f8);}}[_0x5268ee(0x2a4)](_0x3170e9,_0x5039a2){const _0x4fb9d7=_0x5268ee;if(!_0x3170e9[_0x4fb9d7(0x319)])return this['sendError'](_0x3170e9['peer'],_0x4fb9d7(0x208),_0x5039a2),null;const _0x49f261=this[_0x4fb9d7(0x1d4)][_0x4fb9d7(0x24f)](_0x3170e9[_0x4fb9d7(0x319)])?.[_0x4fb9d7(0x2dc)];if(!_0x49f261)return this[_0x4fb9d7(0x1e7)](_0x3170e9[_0x4fb9d7(0x227)],_0x4fb9d7(0x23d),_0x5039a2),null;const _0x19336b=this['deriveWorkerSnapshot'](_0x49f261);if(_0x19336b['role']!==_0x4fb9d7(0x2da))return this['sendError'](_0x3170e9[_0x4fb9d7(0x227)],_0x4fb9d7(0x20f),_0x5039a2),null;return{'worker':_0x19336b};}async[_0x5268ee(0x1e3)](_0x29dfc2){const _0x2e37d4=_0x5268ee,_0x30a4a7=[..._0x29dfc2[_0x2e37d4(0x253)][_0x2e37d4(0x329)]()];_0x29dfc2[_0x2e37d4(0x253)]['clear']();for(const [,_0x235de2]of _0x30a4a7){typeof _0x235de2===_0x2e37d4(0x2e7)&&await _0x235de2();}}async[_0x5268ee(0x32e)](_0x4eed06,_0x4fc1cb){const _0x1767bf=_0x5268ee,_0x83820d=_0x4eed06[_0x1767bf(0x253)][_0x1767bf(0x24f)](_0x4fc1cb);_0x4eed06[_0x1767bf(0x253)][_0x1767bf(0x1ee)](_0x4fc1cb),typeof _0x83820d===_0x1767bf(0x2e7)&&await _0x83820d();}['sendManagerCommandResult'](_0x20c320,_0x229853,_0x3122fd){const _0x121b8e=_0x5268ee,_0x23fa33={'type':_0x121b8e(0x30c),'requestId':_0x229853,'result':_0x3122fd};_0x20c320['send'](stringifyServerMessage(_0x23fa33));}[_0x5268ee(0x1e9)](_0x3b78a3,_0x49f496){const _0x1897ed=_0x5268ee,_0x51df8f={'type':'manager-event','eventName':_0x49f496[_0x1897ed(0x2ad)],'payload':_0x49f496[_0x1897ed(0x304)]};_0x3b78a3[_0x1897ed(0x2f7)](stringifyServerMessage(_0x51df8f));}[_0x5268ee(0x260)](_0x5e55ed){const _0x4f0777=_0x5268ee,_0x38fb58=createWorkerIdentityKey(_0x5e55ed[_0x4f0777(0x25d)],_0x5e55ed[_0x4f0777(0x20d)]),_0x39a5de=this[_0x4f0777(0x307)][_0x4f0777(0x259)](_0x38fb58)[_0x4f0777(0x210)],_0x43c8c0=_0x39a5de>0x0?_0x4f0777(0x24c):_0x4f0777(0x305);return{..._0x5e55ed,'activityState':_0x43c8c0,'activeTaskCount':_0x39a5de};}async[_0x5268ee(0x295)](_0x5bc5e6){for(const _0x125d62 of this['eventHandlers']){try{await _0x125d62({..._0x5bc5e6,'worker':cloneWorkerSnapshot(_0x5bc5e6['worker'])});}catch{}}}async[_0x5268ee(0x22b)](_0x5d6521){const _0x66fc32=_0x5268ee;for(const _0x3899af of this[_0x66fc32(0x292)]){try{_0x5d6521[_0x66fc32(0x270)]===_0x66fc32(0x20e)?await _0x3899af({'type':'required','authorization':clonePendingAuthorization(_0x5d6521[_0x66fc32(0x2bd)])}):await _0x3899af({'type':_0x66fc32(0x327),'authorization':clonePendingAuthorization(_0x5d6521[_0x66fc32(0x2bd)]),'cause':_0x5d6521[_0x66fc32(0x2e0)]});}catch{}}}async[_0x5268ee(0x2ee)](_0x331145){const _0x1d8c5f=_0x5268ee;for(const _0x2db074 of this['taskUpdateHandlers']){try{_0x331145['type']===_0x1d8c5f(0x269)?await _0x2db074({'type':_0x1d8c5f(0x269),'task':clone(_0x331145[_0x1d8c5f(0x33f)]),'status':clone(_0x331145[_0x1d8c5f(0x226)]),'message':_0x331145[_0x1d8c5f(0x279)]?clone(_0x331145[_0x1d8c5f(0x279)]):void 0x0}):await _0x2db074({'type':_0x1d8c5f(0x288),'task':clone(_0x331145['task']),'artifact':clone(_0x331145['artifact'])});}catch{}}}};function cloneWorkerSnapshot(_0x122cfd){return{..._0x122cfd};}function clonePendingAuthorization(_0x30b8ad){return{..._0x30b8ad};}function cloneIfDefined(_0x4cfcb8){return _0x4cfcb8===void 0x0?_0x4cfcb8:clone(_0x4cfcb8);}function resolveLoginAuthorizationConfig(_0x231db8){const _0x5d9b44=_0x5268ee;if(_0x231db8===![])return![];if(!_0x231db8||typeof _0x231db8['signingSecret']!==_0x5d9b44(0x220)||_0x231db8[_0x5d9b44(0x336)][_0x5d9b44(0x2c9)]()['length']===0x0)throw new Error(_0x5d9b44(0x29b));return{'mode':'manual','signingSecret':_0x231db8[_0x5d9b44(0x336)][_0x5d9b44(0x2c9)]()};}function validateLoginPayload(_0x4e7c19){const _0x3273a5=_0x5268ee;if(!_0x4e7c19||typeof _0x4e7c19!==_0x3273a5(0x2f4))return _0x3273a5(0x2c8);if(typeof _0x4e7c19[_0x3273a5(0x25d)]!==_0x3273a5(0x220)||_0x4e7c19[_0x3273a5(0x25d)]['trim']()[_0x3273a5(0x210)]===0x0)return _0x3273a5(0x274);if(typeof _0x4e7c19[_0x3273a5(0x20d)]!==_0x3273a5(0x220)||_0x4e7c19[_0x3273a5(0x20d)]['trim']()['length']===0x0)return _0x3273a5(0x2aa);if(_0x4e7c19[_0x3273a5(0x1fb)]!==_0x3273a5(0x2d6)&&_0x4e7c19['role']!==_0x3273a5(0x323)&&_0x4e7c19['role']!==_0x3273a5(0x2ab)&&_0x4e7c19['role']!==_0x3273a5(0x2da))return _0x3273a5(0x284);if(_0x4e7c19['initialAvailability']!==void 0x0&&_0x4e7c19[_0x3273a5(0x23e)]!==_0x3273a5(0x2bc)&&_0x4e7c19[_0x3273a5(0x23e)]!==_0x3273a5(0x1e4)&&_0x4e7c19[_0x3273a5(0x23e)]!==_0x3273a5(0x2a2))return _0x3273a5(0x2b2);if(typeof _0x4e7c19[_0x3273a5(0x232)]!==_0x3273a5(0x220)||_0x4e7c19['capabilitySummary'][_0x3273a5(0x2c9)]()[_0x3273a5(0x210)]===0x0)return'capabilitySummary\x20is\x20required';return null;}function validateSendMessageParams(_0x590901){const _0xaffecd=_0x5268ee;if(!_0x590901[_0xaffecd(0x266)][_0xaffecd(0x25d)]['trim']())throw new Error(_0xaffecd(0x297));if(!_0x590901[_0xaffecd(0x266)]['email']['trim']())throw new Error(_0xaffecd(0x28c));validateParts(_0x590901[_0xaffecd(0x2ff)]);}function validateTaskStatusUpdate(_0x5526e7,_0x284591){const _0x4aed7e=_0x5268ee,_0x44f421=['submitted',_0x4aed7e(0x316),_0x4aed7e(0x338),'completed','failed',_0x4aed7e(0x327),_0x4aed7e(0x21d)];if(!_0x44f421[_0x4aed7e(0x22f)](_0x5526e7['state']))throw new Error(_0x4aed7e(0x2cd));if(isTerminalTaskState(_0x284591[_0x4aed7e(0x314)]))throw new Error(_0x4aed7e(0x2e5));}function validateArtifact(_0x328f23){const _0x4ac163=_0x5268ee;if(!_0x328f23['name'][_0x4ac163(0x2c9)]())throw new Error(_0x4ac163(0x1c7));validateParts(_0x328f23['parts']);}function validateParts(_0x2a782b){const _0x4b3403=_0x5268ee;if(!Array[_0x4b3403(0x248)](_0x2a782b)||_0x2a782b[_0x4b3403(0x210)]===0x0)throw new Error(_0x4b3403(0x2a0));for(const _0x5e04de of _0x2a782b){if(_0x5e04de[_0x4b3403(0x270)]===_0x4b3403(0x2ed)&&_0x5e04de[_0x4b3403(0x2ed)][_0x4b3403(0x2c9)]()[_0x4b3403(0x210)]===0x0)throw new Error(_0x4b3403(0x29f));if(_0x5e04de[_0x4b3403(0x270)]==='file-ref'&&_0x5e04de[_0x4b3403(0x2e6)][_0x4b3403(0x2c9)]()[_0x4b3403(0x210)]===0x0)throw new Error(_0x4b3403(0x1fc));}}0x0&&(module[_0x5268ee(0x30d)]={'WorkerClientSDK':WorkerClientSDK,'WorkerServerSDK':WorkerServerSDK,'isTerminalTaskState':isTerminalTaskState,'issueLoginToken':issueLoginToken,'resolveDefaultWorkerCredentialFile':resolveDefaultWorkerCredentialFile,'splitWorkerKey':splitWorkerKey,'verifyLoginToken':verifyLoginToken});
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
type WorkerRole = 'environment-operator' | 'coder' | 'verifier' | 'manager';
|
|
2
|
+
type WorkerAvailability = 'available' | 'busy' | 'abnormal';
|
|
3
|
+
type WorkerActivityState = 'active' | 'idle';
|
|
4
|
+
type ConnectionState = 'connected' | 'disconnected';
|
|
5
|
+
type AbnormalSource = 'self-reported' | 'disconnect';
|
|
6
|
+
type DisconnectCause = 'socket-closed' | 'heartbeat-timeout' | 'session-replaced';
|
|
7
|
+
type LoginPendingReason = 'missing-token' | 'invalid-token';
|
|
8
|
+
type LoginAuthorizationCancelCause = 'socket-closed' | 'heartbeat-timeout' | 'session-replaced' | 'server-stopping' | 'login-retried';
|
|
9
|
+
interface WorkerIdentity {
|
|
10
|
+
workerId: string;
|
|
11
|
+
email: string;
|
|
12
|
+
}
|
|
13
|
+
interface WorkerLoginPayload extends WorkerIdentity {
|
|
14
|
+
role: WorkerRole;
|
|
15
|
+
managerToken?: string;
|
|
16
|
+
loginToken?: string;
|
|
17
|
+
capabilitySummary: string;
|
|
18
|
+
initialAvailability?: WorkerAvailability;
|
|
19
|
+
}
|
|
20
|
+
interface WorkerSnapshot extends WorkerIdentity {
|
|
21
|
+
role: WorkerRole;
|
|
22
|
+
capabilitySummary: string;
|
|
23
|
+
availability: WorkerAvailability;
|
|
24
|
+
activityState: WorkerActivityState;
|
|
25
|
+
activeTaskCount: number;
|
|
26
|
+
connectionState: ConnectionState;
|
|
27
|
+
abnormalSource?: AbnormalSource;
|
|
28
|
+
abnormalReason?: string;
|
|
29
|
+
connectedAt: number;
|
|
30
|
+
lastSeenAt: number;
|
|
31
|
+
lastAvailabilityUpdatedAt: number;
|
|
32
|
+
}
|
|
33
|
+
interface WorkerQueryFilters {
|
|
34
|
+
workerId?: string;
|
|
35
|
+
email?: string;
|
|
36
|
+
role?: WorkerRole;
|
|
37
|
+
availability?: WorkerAvailability;
|
|
38
|
+
activityState?: WorkerActivityState;
|
|
39
|
+
connectionState?: ConnectionState;
|
|
40
|
+
abnormalSource?: AbnormalSource;
|
|
41
|
+
}
|
|
42
|
+
interface WorkerAvailabilityChangeEvent {
|
|
43
|
+
type: 'availability-change';
|
|
44
|
+
worker: WorkerSnapshot;
|
|
45
|
+
previousAvailability: WorkerAvailability;
|
|
46
|
+
previousAbnormalSource?: AbnormalSource;
|
|
47
|
+
previousAbnormalReason?: string;
|
|
48
|
+
}
|
|
49
|
+
interface WorkerLoginEvent {
|
|
50
|
+
type: 'login';
|
|
51
|
+
worker: WorkerSnapshot;
|
|
52
|
+
}
|
|
53
|
+
interface WorkerLogoutEvent {
|
|
54
|
+
type: 'logout';
|
|
55
|
+
worker: WorkerSnapshot;
|
|
56
|
+
}
|
|
57
|
+
interface WorkerDisconnectEvent {
|
|
58
|
+
type: 'disconnect';
|
|
59
|
+
worker: WorkerSnapshot;
|
|
60
|
+
cause: DisconnectCause;
|
|
61
|
+
}
|
|
62
|
+
type WorkerEvent = WorkerLoginEvent | WorkerLogoutEvent | WorkerDisconnectEvent | WorkerAvailabilityChangeEvent;
|
|
63
|
+
type WorkerEventHandler = (event: WorkerEvent) => void | Promise<void>;
|
|
64
|
+
interface ManagerCommandRequest {
|
|
65
|
+
name: string;
|
|
66
|
+
args?: unknown;
|
|
67
|
+
}
|
|
68
|
+
interface ManagerEventEnvelope {
|
|
69
|
+
eventName: string;
|
|
70
|
+
payload: unknown;
|
|
71
|
+
}
|
|
72
|
+
interface ManagerSessionContext {
|
|
73
|
+
worker: WorkerSnapshot;
|
|
74
|
+
}
|
|
75
|
+
type ManagerEventHandler = (event: ManagerEventEnvelope) => void | Promise<void>;
|
|
76
|
+
type ManagerSubscriptionCleanup = void | (() => void | Promise<void>);
|
|
77
|
+
interface WorkerManagerControlPlane {
|
|
78
|
+
executeCommand: (request: ManagerCommandRequest, context: ManagerSessionContext) => unknown | Promise<unknown>;
|
|
79
|
+
subscribe?: (eventName: string, emit: ManagerEventHandler, context: ManagerSessionContext) => ManagerSubscriptionCleanup | Promise<ManagerSubscriptionCleanup>;
|
|
80
|
+
}
|
|
81
|
+
interface WorkerServerSDKConfig {
|
|
82
|
+
path?: string;
|
|
83
|
+
heartbeatIntervalMs?: number;
|
|
84
|
+
heartbeatTimeoutMs?: number;
|
|
85
|
+
loginTimeoutMs?: number;
|
|
86
|
+
managerToken?: string;
|
|
87
|
+
loginAuthorization?: false | {
|
|
88
|
+
mode: 'manual';
|
|
89
|
+
signingSecret: string;
|
|
90
|
+
};
|
|
91
|
+
initialWorkers?: WorkerSnapshot[];
|
|
92
|
+
initialTasks?: Task[];
|
|
93
|
+
}
|
|
94
|
+
interface WorkerClientSDKConfig {
|
|
95
|
+
serverUrl: string;
|
|
96
|
+
reconnect?: boolean;
|
|
97
|
+
reconnectBaseDelayMs?: number;
|
|
98
|
+
reconnectMaxDelayMs?: number;
|
|
99
|
+
credentialStore?: false | {
|
|
100
|
+
file?: string;
|
|
101
|
+
};
|
|
102
|
+
WebSocketCtor?: typeof WebSocket;
|
|
103
|
+
}
|
|
104
|
+
interface PendingLoginAuthorization extends WorkerIdentity {
|
|
105
|
+
authorizationId: string;
|
|
106
|
+
role: WorkerRole;
|
|
107
|
+
capabilitySummary: string;
|
|
108
|
+
initialAvailability: WorkerAvailability;
|
|
109
|
+
requestedAt: number;
|
|
110
|
+
reason: LoginPendingReason;
|
|
111
|
+
}
|
|
112
|
+
interface LoginAuthorizationRequiredEvent {
|
|
113
|
+
type: 'required';
|
|
114
|
+
authorization: PendingLoginAuthorization;
|
|
115
|
+
}
|
|
116
|
+
interface LoginAuthorizationCanceledEvent {
|
|
117
|
+
type: 'canceled';
|
|
118
|
+
authorization: PendingLoginAuthorization;
|
|
119
|
+
cause: LoginAuthorizationCancelCause;
|
|
120
|
+
}
|
|
121
|
+
type LoginAuthorizationEvent = LoginAuthorizationRequiredEvent | LoginAuthorizationCanceledEvent;
|
|
122
|
+
type LoginAuthorizationHandler = (event: LoginAuthorizationEvent) => void | Promise<void>;
|
|
123
|
+
type Metadata = Record<string, unknown>;
|
|
124
|
+
type TaskState = 'submitted' | 'working' | 'input-required' | 'completed' | 'failed' | 'canceled' | 'rejected';
|
|
125
|
+
interface TaskStatus {
|
|
126
|
+
state: TaskState;
|
|
127
|
+
timestamp: number;
|
|
128
|
+
message?: string;
|
|
129
|
+
}
|
|
130
|
+
type MessageRole = 'user' | 'agent';
|
|
131
|
+
interface BasePart {
|
|
132
|
+
metadata?: Metadata;
|
|
133
|
+
}
|
|
134
|
+
interface TextPart extends BasePart {
|
|
135
|
+
type: 'text';
|
|
136
|
+
text: string;
|
|
137
|
+
}
|
|
138
|
+
interface DataPart extends BasePart {
|
|
139
|
+
type: 'data';
|
|
140
|
+
data: unknown;
|
|
141
|
+
mimeType?: string;
|
|
142
|
+
}
|
|
143
|
+
interface FileRefPart extends BasePart {
|
|
144
|
+
type: 'file-ref';
|
|
145
|
+
uri: string;
|
|
146
|
+
name?: string;
|
|
147
|
+
mimeType?: string;
|
|
148
|
+
}
|
|
149
|
+
type Part = TextPart | DataPart | FileRefPart;
|
|
150
|
+
interface Message {
|
|
151
|
+
messageId: string;
|
|
152
|
+
contextId: string;
|
|
153
|
+
taskId: string;
|
|
154
|
+
role: MessageRole;
|
|
155
|
+
parts: Part[];
|
|
156
|
+
metadata?: Metadata;
|
|
157
|
+
}
|
|
158
|
+
interface Artifact {
|
|
159
|
+
artifactId: string;
|
|
160
|
+
name: string;
|
|
161
|
+
description?: string;
|
|
162
|
+
parts: Part[];
|
|
163
|
+
metadata?: Metadata;
|
|
164
|
+
}
|
|
165
|
+
interface Task {
|
|
166
|
+
id: string;
|
|
167
|
+
contextId: string;
|
|
168
|
+
status: TaskStatus;
|
|
169
|
+
artifacts: Artifact[];
|
|
170
|
+
history: Message[];
|
|
171
|
+
metadata?: Metadata;
|
|
172
|
+
assigneeWorkerKey: string;
|
|
173
|
+
}
|
|
174
|
+
interface AgentProfileLite {
|
|
175
|
+
workerKey: string;
|
|
176
|
+
workerId: string;
|
|
177
|
+
email: string;
|
|
178
|
+
role: WorkerRole;
|
|
179
|
+
capabilitySummary: string;
|
|
180
|
+
}
|
|
181
|
+
interface SendMessageParams {
|
|
182
|
+
worker: WorkerIdentity;
|
|
183
|
+
parts: Part[];
|
|
184
|
+
taskId?: string;
|
|
185
|
+
contextId?: string;
|
|
186
|
+
metadata?: Metadata;
|
|
187
|
+
messageId?: string;
|
|
188
|
+
}
|
|
189
|
+
interface GetTaskOptions {
|
|
190
|
+
historyLength?: number;
|
|
191
|
+
}
|
|
192
|
+
interface ListTasksFilters {
|
|
193
|
+
contextId?: string;
|
|
194
|
+
state?: TaskState;
|
|
195
|
+
workerId?: string;
|
|
196
|
+
email?: string;
|
|
197
|
+
}
|
|
198
|
+
interface TaskUpdateStatusEvent {
|
|
199
|
+
type: 'task-status-update';
|
|
200
|
+
task: Task;
|
|
201
|
+
status: TaskStatus;
|
|
202
|
+
message?: Message;
|
|
203
|
+
}
|
|
204
|
+
interface TaskArtifactUpdateEvent {
|
|
205
|
+
type: 'task-artifact-update';
|
|
206
|
+
task: Task;
|
|
207
|
+
artifact: Artifact;
|
|
208
|
+
}
|
|
209
|
+
type TaskUpdateEvent = TaskUpdateStatusEvent | TaskArtifactUpdateEvent;
|
|
210
|
+
type TaskUpdateHandler = (event: TaskUpdateEvent) => void | Promise<void>;
|
|
211
|
+
interface MessageInput {
|
|
212
|
+
parts: Part[];
|
|
213
|
+
metadata?: Metadata;
|
|
214
|
+
}
|
|
215
|
+
interface ArtifactInput {
|
|
216
|
+
artifactId?: string;
|
|
217
|
+
name: string;
|
|
218
|
+
description?: string;
|
|
219
|
+
parts: Part[];
|
|
220
|
+
metadata?: Metadata;
|
|
221
|
+
}
|
|
222
|
+
interface TaskController {
|
|
223
|
+
working: (message?: MessageInput) => Promise<void>;
|
|
224
|
+
inputRequired: (message?: MessageInput) => Promise<void>;
|
|
225
|
+
addArtifact: (artifact: ArtifactInput) => Promise<Artifact>;
|
|
226
|
+
complete: (message?: MessageInput) => Promise<void>;
|
|
227
|
+
fail: (message?: MessageInput) => Promise<void>;
|
|
228
|
+
reject: (message?: MessageInput) => Promise<void>;
|
|
229
|
+
}
|
|
230
|
+
interface TaskMessageContext {
|
|
231
|
+
task: Task;
|
|
232
|
+
message: Message;
|
|
233
|
+
controller: TaskController;
|
|
234
|
+
}
|
|
235
|
+
type TaskMessageHandler = (context: TaskMessageContext) => void | Promise<void>;
|
|
236
|
+
interface TaskCancelContext {
|
|
237
|
+
taskId: string;
|
|
238
|
+
}
|
|
239
|
+
type TaskCancelHandler = (context: TaskCancelContext) => void | Promise<void>;
|
|
240
|
+
|
|
241
|
+
declare class WorkerClientSDK {
|
|
242
|
+
private readonly config;
|
|
243
|
+
private readonly messageHandlers;
|
|
244
|
+
private readonly cancelHandlers;
|
|
245
|
+
private socket;
|
|
246
|
+
private connectPromise;
|
|
247
|
+
private readonly pendingRequests;
|
|
248
|
+
private reconnectTimer?;
|
|
249
|
+
private reconnectDelayMs;
|
|
250
|
+
private shouldStayConnected;
|
|
251
|
+
private manualClose;
|
|
252
|
+
private needsRestoreOnOpen;
|
|
253
|
+
private isLoggedIn;
|
|
254
|
+
private lastLoginPayload?;
|
|
255
|
+
private explicitState?;
|
|
256
|
+
private latestLoginToken?;
|
|
257
|
+
constructor(config: WorkerClientSDKConfig);
|
|
258
|
+
connect(): Promise<this>;
|
|
259
|
+
disconnect(): Promise<void>;
|
|
260
|
+
login(payload: WorkerLoginPayload): Promise<void>;
|
|
261
|
+
logout(): Promise<void>;
|
|
262
|
+
updateAvailability(availability: 'available' | 'busy'): Promise<void>;
|
|
263
|
+
reportException(reason: string): Promise<void>;
|
|
264
|
+
onMessage(handler: TaskMessageHandler): this;
|
|
265
|
+
onCancel(handler: TaskCancelHandler): this;
|
|
266
|
+
offCancel(handler: TaskCancelHandler): this;
|
|
267
|
+
private handleIncomingMessage;
|
|
268
|
+
private sendHeartbeatAck;
|
|
269
|
+
private handleSocketClose;
|
|
270
|
+
private scheduleReconnect;
|
|
271
|
+
private restoreSessionIfNeeded;
|
|
272
|
+
private dispatchTaskMessage;
|
|
273
|
+
private handleTaskCancel;
|
|
274
|
+
private createTaskController;
|
|
275
|
+
private sendTaskStatusUpdate;
|
|
276
|
+
private buildAgentMessage;
|
|
277
|
+
private buildArtifact;
|
|
278
|
+
private buildLoginPayload;
|
|
279
|
+
private persistLoginToken;
|
|
280
|
+
private readStoredLoginToken;
|
|
281
|
+
private clearLoginToken;
|
|
282
|
+
private resolveCredentialFile;
|
|
283
|
+
private sendRequest;
|
|
284
|
+
private ensureSocketOpen;
|
|
285
|
+
private rejectPendingRequests;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
declare function resolveDefaultWorkerCredentialFile(serverUrl: string, workerId: string, email: string, homeDirectory?: string): string;
|
|
289
|
+
|
|
290
|
+
interface WorkerLoginTokenClaims {
|
|
291
|
+
workerId: string;
|
|
292
|
+
email: string;
|
|
293
|
+
role: WorkerRole;
|
|
294
|
+
issuedAt: number;
|
|
295
|
+
}
|
|
296
|
+
declare function issueLoginToken(claims: WorkerLoginTokenClaims, signingSecret: string): string;
|
|
297
|
+
declare function verifyLoginToken(token: string, signingSecret: string): WorkerLoginTokenClaims | null;
|
|
298
|
+
|
|
299
|
+
declare class WorkerServerSDK {
|
|
300
|
+
private readonly config;
|
|
301
|
+
private readonly registry;
|
|
302
|
+
private readonly taskStore;
|
|
303
|
+
private readonly eventHandlers;
|
|
304
|
+
private readonly loginAuthorizationHandlers;
|
|
305
|
+
private readonly taskUpdateHandlers;
|
|
306
|
+
private readonly connections;
|
|
307
|
+
private readonly identityToPeerId;
|
|
308
|
+
private readonly pendingAuthorizations;
|
|
309
|
+
private managerControlPlane;
|
|
310
|
+
private heartbeatTimer?;
|
|
311
|
+
private nodeServer?;
|
|
312
|
+
private nodeAdapter?;
|
|
313
|
+
constructor(config?: WorkerServerSDKConfig);
|
|
314
|
+
registerManagerControlPlane(controlPlane: WorkerManagerControlPlane | null): this;
|
|
315
|
+
listen(port: number, host?: string): Promise<this>;
|
|
316
|
+
stop(): Promise<void>;
|
|
317
|
+
onWorkerEvent(handler: WorkerEventHandler): this;
|
|
318
|
+
offWorkerEvent(handler: WorkerEventHandler): this;
|
|
319
|
+
onLoginAuthorization(handler: LoginAuthorizationHandler): this;
|
|
320
|
+
offLoginAuthorization(handler: LoginAuthorizationHandler): this;
|
|
321
|
+
queryWorkers(filters?: WorkerQueryFilters): WorkerSnapshot[];
|
|
322
|
+
listAbnormalWorkers(filters?: WorkerQueryFilters): WorkerSnapshot[];
|
|
323
|
+
approveLoginAuthorization(authorizationId: string, _metadata?: Record<string, unknown>): Promise<void>;
|
|
324
|
+
rejectLoginAuthorization(authorizationId: string, reason: string, _metadata?: Record<string, unknown>): Promise<void>;
|
|
325
|
+
onTaskUpdate(handler: TaskUpdateHandler): this;
|
|
326
|
+
sendMessage(params: SendMessageParams): Promise<Task>;
|
|
327
|
+
getTask(taskId: string, options?: GetTaskOptions): Task | undefined;
|
|
328
|
+
listTasks(filters?: ListTasksFilters): Task[];
|
|
329
|
+
cancelTask(taskId: string): Promise<Task>;
|
|
330
|
+
private listenWithNode;
|
|
331
|
+
private createHooks;
|
|
332
|
+
private handleSocketOpen;
|
|
333
|
+
private handleSocketMessage;
|
|
334
|
+
private handleLoginMessage;
|
|
335
|
+
private validateManagerLogin;
|
|
336
|
+
private createPendingAuthorization;
|
|
337
|
+
private completeLogin;
|
|
338
|
+
private clearPendingAuthorization;
|
|
339
|
+
private cancelPendingAuthorization;
|
|
340
|
+
private handleLogoutMessage;
|
|
341
|
+
private handleUpdateAvailabilityMessage;
|
|
342
|
+
private handleReportExceptionMessage;
|
|
343
|
+
private handleTaskStatusUpdateMessage;
|
|
344
|
+
private handleTaskArtifactUpdateMessage;
|
|
345
|
+
private handleManagerCommandMessage;
|
|
346
|
+
private handleManagerSubscribeMessage;
|
|
347
|
+
private handleManagerUnsubscribeMessage;
|
|
348
|
+
private handleSocketClose;
|
|
349
|
+
private forceDisconnect;
|
|
350
|
+
private startHeartbeatLoop;
|
|
351
|
+
private runHeartbeatSweep;
|
|
352
|
+
private matchesPath;
|
|
353
|
+
private sendAck;
|
|
354
|
+
private sendLoginPending;
|
|
355
|
+
private sendLoginApproved;
|
|
356
|
+
private sendLoginRejected;
|
|
357
|
+
private sendError;
|
|
358
|
+
private dispatchTaskMessage;
|
|
359
|
+
private dispatchTaskCancel;
|
|
360
|
+
private replayActiveTasks;
|
|
361
|
+
private requireManagerContext;
|
|
362
|
+
private clearManagerSubscriptions;
|
|
363
|
+
private disposeManagerSubscription;
|
|
364
|
+
private sendManagerCommandResult;
|
|
365
|
+
private sendManagerEvent;
|
|
366
|
+
private deriveWorkerSnapshot;
|
|
367
|
+
private emitWorkerEvent;
|
|
368
|
+
private emitLoginAuthorizationEvent;
|
|
369
|
+
private emitTaskUpdate;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
declare function isTerminalTaskState(state: TaskState): boolean;
|
|
373
|
+
declare function splitWorkerKey(workerKey: string): readonly [string, string];
|
|
374
|
+
|
|
375
|
+
export { type AbnormalSource, type AgentProfileLite, type Artifact, type ArtifactInput, type ConnectionState, type DisconnectCause, type GetTaskOptions, type ListTasksFilters, type LoginAuthorizationCancelCause, type LoginAuthorizationEvent, type LoginAuthorizationHandler, type LoginPendingReason, type ManagerCommandRequest, type ManagerEventEnvelope, type ManagerEventHandler, type ManagerSessionContext, type ManagerSubscriptionCleanup, type Message, type MessageInput, type MessageRole, type Metadata, type Part, type PendingLoginAuthorization, type SendMessageParams, type Task, type TaskCancelContext, type TaskCancelHandler, type TaskController, type TaskMessageContext, type TaskMessageHandler, type TaskState, type TaskStatus, type TaskUpdateEvent, type TaskUpdateHandler, type WorkerActivityState, type WorkerAvailability, WorkerClientSDK, type WorkerClientSDKConfig, type WorkerEvent, type WorkerEventHandler, type WorkerIdentity, type WorkerLoginPayload, type WorkerManagerControlPlane, type WorkerQueryFilters, type WorkerRole, WorkerServerSDK, type WorkerServerSDKConfig, type WorkerSnapshot, isTerminalTaskState, issueLoginToken, resolveDefaultWorkerCredentialFile, splitWorkerKey, verifyLoginToken };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
type WorkerRole = 'environment-operator' | 'coder' | 'verifier' | 'manager';
|
|
2
|
+
type WorkerAvailability = 'available' | 'busy' | 'abnormal';
|
|
3
|
+
type WorkerActivityState = 'active' | 'idle';
|
|
4
|
+
type ConnectionState = 'connected' | 'disconnected';
|
|
5
|
+
type AbnormalSource = 'self-reported' | 'disconnect';
|
|
6
|
+
type DisconnectCause = 'socket-closed' | 'heartbeat-timeout' | 'session-replaced';
|
|
7
|
+
type LoginPendingReason = 'missing-token' | 'invalid-token';
|
|
8
|
+
type LoginAuthorizationCancelCause = 'socket-closed' | 'heartbeat-timeout' | 'session-replaced' | 'server-stopping' | 'login-retried';
|
|
9
|
+
interface WorkerIdentity {
|
|
10
|
+
workerId: string;
|
|
11
|
+
email: string;
|
|
12
|
+
}
|
|
13
|
+
interface WorkerLoginPayload extends WorkerIdentity {
|
|
14
|
+
role: WorkerRole;
|
|
15
|
+
managerToken?: string;
|
|
16
|
+
loginToken?: string;
|
|
17
|
+
capabilitySummary: string;
|
|
18
|
+
initialAvailability?: WorkerAvailability;
|
|
19
|
+
}
|
|
20
|
+
interface WorkerSnapshot extends WorkerIdentity {
|
|
21
|
+
role: WorkerRole;
|
|
22
|
+
capabilitySummary: string;
|
|
23
|
+
availability: WorkerAvailability;
|
|
24
|
+
activityState: WorkerActivityState;
|
|
25
|
+
activeTaskCount: number;
|
|
26
|
+
connectionState: ConnectionState;
|
|
27
|
+
abnormalSource?: AbnormalSource;
|
|
28
|
+
abnormalReason?: string;
|
|
29
|
+
connectedAt: number;
|
|
30
|
+
lastSeenAt: number;
|
|
31
|
+
lastAvailabilityUpdatedAt: number;
|
|
32
|
+
}
|
|
33
|
+
interface WorkerQueryFilters {
|
|
34
|
+
workerId?: string;
|
|
35
|
+
email?: string;
|
|
36
|
+
role?: WorkerRole;
|
|
37
|
+
availability?: WorkerAvailability;
|
|
38
|
+
activityState?: WorkerActivityState;
|
|
39
|
+
connectionState?: ConnectionState;
|
|
40
|
+
abnormalSource?: AbnormalSource;
|
|
41
|
+
}
|
|
42
|
+
interface WorkerAvailabilityChangeEvent {
|
|
43
|
+
type: 'availability-change';
|
|
44
|
+
worker: WorkerSnapshot;
|
|
45
|
+
previousAvailability: WorkerAvailability;
|
|
46
|
+
previousAbnormalSource?: AbnormalSource;
|
|
47
|
+
previousAbnormalReason?: string;
|
|
48
|
+
}
|
|
49
|
+
interface WorkerLoginEvent {
|
|
50
|
+
type: 'login';
|
|
51
|
+
worker: WorkerSnapshot;
|
|
52
|
+
}
|
|
53
|
+
interface WorkerLogoutEvent {
|
|
54
|
+
type: 'logout';
|
|
55
|
+
worker: WorkerSnapshot;
|
|
56
|
+
}
|
|
57
|
+
interface WorkerDisconnectEvent {
|
|
58
|
+
type: 'disconnect';
|
|
59
|
+
worker: WorkerSnapshot;
|
|
60
|
+
cause: DisconnectCause;
|
|
61
|
+
}
|
|
62
|
+
type WorkerEvent = WorkerLoginEvent | WorkerLogoutEvent | WorkerDisconnectEvent | WorkerAvailabilityChangeEvent;
|
|
63
|
+
type WorkerEventHandler = (event: WorkerEvent) => void | Promise<void>;
|
|
64
|
+
interface ManagerCommandRequest {
|
|
65
|
+
name: string;
|
|
66
|
+
args?: unknown;
|
|
67
|
+
}
|
|
68
|
+
interface ManagerEventEnvelope {
|
|
69
|
+
eventName: string;
|
|
70
|
+
payload: unknown;
|
|
71
|
+
}
|
|
72
|
+
interface ManagerSessionContext {
|
|
73
|
+
worker: WorkerSnapshot;
|
|
74
|
+
}
|
|
75
|
+
type ManagerEventHandler = (event: ManagerEventEnvelope) => void | Promise<void>;
|
|
76
|
+
type ManagerSubscriptionCleanup = void | (() => void | Promise<void>);
|
|
77
|
+
interface WorkerManagerControlPlane {
|
|
78
|
+
executeCommand: (request: ManagerCommandRequest, context: ManagerSessionContext) => unknown | Promise<unknown>;
|
|
79
|
+
subscribe?: (eventName: string, emit: ManagerEventHandler, context: ManagerSessionContext) => ManagerSubscriptionCleanup | Promise<ManagerSubscriptionCleanup>;
|
|
80
|
+
}
|
|
81
|
+
interface WorkerServerSDKConfig {
|
|
82
|
+
path?: string;
|
|
83
|
+
heartbeatIntervalMs?: number;
|
|
84
|
+
heartbeatTimeoutMs?: number;
|
|
85
|
+
loginTimeoutMs?: number;
|
|
86
|
+
managerToken?: string;
|
|
87
|
+
loginAuthorization?: false | {
|
|
88
|
+
mode: 'manual';
|
|
89
|
+
signingSecret: string;
|
|
90
|
+
};
|
|
91
|
+
initialWorkers?: WorkerSnapshot[];
|
|
92
|
+
initialTasks?: Task[];
|
|
93
|
+
}
|
|
94
|
+
interface WorkerClientSDKConfig {
|
|
95
|
+
serverUrl: string;
|
|
96
|
+
reconnect?: boolean;
|
|
97
|
+
reconnectBaseDelayMs?: number;
|
|
98
|
+
reconnectMaxDelayMs?: number;
|
|
99
|
+
credentialStore?: false | {
|
|
100
|
+
file?: string;
|
|
101
|
+
};
|
|
102
|
+
WebSocketCtor?: typeof WebSocket;
|
|
103
|
+
}
|
|
104
|
+
interface PendingLoginAuthorization extends WorkerIdentity {
|
|
105
|
+
authorizationId: string;
|
|
106
|
+
role: WorkerRole;
|
|
107
|
+
capabilitySummary: string;
|
|
108
|
+
initialAvailability: WorkerAvailability;
|
|
109
|
+
requestedAt: number;
|
|
110
|
+
reason: LoginPendingReason;
|
|
111
|
+
}
|
|
112
|
+
interface LoginAuthorizationRequiredEvent {
|
|
113
|
+
type: 'required';
|
|
114
|
+
authorization: PendingLoginAuthorization;
|
|
115
|
+
}
|
|
116
|
+
interface LoginAuthorizationCanceledEvent {
|
|
117
|
+
type: 'canceled';
|
|
118
|
+
authorization: PendingLoginAuthorization;
|
|
119
|
+
cause: LoginAuthorizationCancelCause;
|
|
120
|
+
}
|
|
121
|
+
type LoginAuthorizationEvent = LoginAuthorizationRequiredEvent | LoginAuthorizationCanceledEvent;
|
|
122
|
+
type LoginAuthorizationHandler = (event: LoginAuthorizationEvent) => void | Promise<void>;
|
|
123
|
+
type Metadata = Record<string, unknown>;
|
|
124
|
+
type TaskState = 'submitted' | 'working' | 'input-required' | 'completed' | 'failed' | 'canceled' | 'rejected';
|
|
125
|
+
interface TaskStatus {
|
|
126
|
+
state: TaskState;
|
|
127
|
+
timestamp: number;
|
|
128
|
+
message?: string;
|
|
129
|
+
}
|
|
130
|
+
type MessageRole = 'user' | 'agent';
|
|
131
|
+
interface BasePart {
|
|
132
|
+
metadata?: Metadata;
|
|
133
|
+
}
|
|
134
|
+
interface TextPart extends BasePart {
|
|
135
|
+
type: 'text';
|
|
136
|
+
text: string;
|
|
137
|
+
}
|
|
138
|
+
interface DataPart extends BasePart {
|
|
139
|
+
type: 'data';
|
|
140
|
+
data: unknown;
|
|
141
|
+
mimeType?: string;
|
|
142
|
+
}
|
|
143
|
+
interface FileRefPart extends BasePart {
|
|
144
|
+
type: 'file-ref';
|
|
145
|
+
uri: string;
|
|
146
|
+
name?: string;
|
|
147
|
+
mimeType?: string;
|
|
148
|
+
}
|
|
149
|
+
type Part = TextPart | DataPart | FileRefPart;
|
|
150
|
+
interface Message {
|
|
151
|
+
messageId: string;
|
|
152
|
+
contextId: string;
|
|
153
|
+
taskId: string;
|
|
154
|
+
role: MessageRole;
|
|
155
|
+
parts: Part[];
|
|
156
|
+
metadata?: Metadata;
|
|
157
|
+
}
|
|
158
|
+
interface Artifact {
|
|
159
|
+
artifactId: string;
|
|
160
|
+
name: string;
|
|
161
|
+
description?: string;
|
|
162
|
+
parts: Part[];
|
|
163
|
+
metadata?: Metadata;
|
|
164
|
+
}
|
|
165
|
+
interface Task {
|
|
166
|
+
id: string;
|
|
167
|
+
contextId: string;
|
|
168
|
+
status: TaskStatus;
|
|
169
|
+
artifacts: Artifact[];
|
|
170
|
+
history: Message[];
|
|
171
|
+
metadata?: Metadata;
|
|
172
|
+
assigneeWorkerKey: string;
|
|
173
|
+
}
|
|
174
|
+
interface AgentProfileLite {
|
|
175
|
+
workerKey: string;
|
|
176
|
+
workerId: string;
|
|
177
|
+
email: string;
|
|
178
|
+
role: WorkerRole;
|
|
179
|
+
capabilitySummary: string;
|
|
180
|
+
}
|
|
181
|
+
interface SendMessageParams {
|
|
182
|
+
worker: WorkerIdentity;
|
|
183
|
+
parts: Part[];
|
|
184
|
+
taskId?: string;
|
|
185
|
+
contextId?: string;
|
|
186
|
+
metadata?: Metadata;
|
|
187
|
+
messageId?: string;
|
|
188
|
+
}
|
|
189
|
+
interface GetTaskOptions {
|
|
190
|
+
historyLength?: number;
|
|
191
|
+
}
|
|
192
|
+
interface ListTasksFilters {
|
|
193
|
+
contextId?: string;
|
|
194
|
+
state?: TaskState;
|
|
195
|
+
workerId?: string;
|
|
196
|
+
email?: string;
|
|
197
|
+
}
|
|
198
|
+
interface TaskUpdateStatusEvent {
|
|
199
|
+
type: 'task-status-update';
|
|
200
|
+
task: Task;
|
|
201
|
+
status: TaskStatus;
|
|
202
|
+
message?: Message;
|
|
203
|
+
}
|
|
204
|
+
interface TaskArtifactUpdateEvent {
|
|
205
|
+
type: 'task-artifact-update';
|
|
206
|
+
task: Task;
|
|
207
|
+
artifact: Artifact;
|
|
208
|
+
}
|
|
209
|
+
type TaskUpdateEvent = TaskUpdateStatusEvent | TaskArtifactUpdateEvent;
|
|
210
|
+
type TaskUpdateHandler = (event: TaskUpdateEvent) => void | Promise<void>;
|
|
211
|
+
interface MessageInput {
|
|
212
|
+
parts: Part[];
|
|
213
|
+
metadata?: Metadata;
|
|
214
|
+
}
|
|
215
|
+
interface ArtifactInput {
|
|
216
|
+
artifactId?: string;
|
|
217
|
+
name: string;
|
|
218
|
+
description?: string;
|
|
219
|
+
parts: Part[];
|
|
220
|
+
metadata?: Metadata;
|
|
221
|
+
}
|
|
222
|
+
interface TaskController {
|
|
223
|
+
working: (message?: MessageInput) => Promise<void>;
|
|
224
|
+
inputRequired: (message?: MessageInput) => Promise<void>;
|
|
225
|
+
addArtifact: (artifact: ArtifactInput) => Promise<Artifact>;
|
|
226
|
+
complete: (message?: MessageInput) => Promise<void>;
|
|
227
|
+
fail: (message?: MessageInput) => Promise<void>;
|
|
228
|
+
reject: (message?: MessageInput) => Promise<void>;
|
|
229
|
+
}
|
|
230
|
+
interface TaskMessageContext {
|
|
231
|
+
task: Task;
|
|
232
|
+
message: Message;
|
|
233
|
+
controller: TaskController;
|
|
234
|
+
}
|
|
235
|
+
type TaskMessageHandler = (context: TaskMessageContext) => void | Promise<void>;
|
|
236
|
+
interface TaskCancelContext {
|
|
237
|
+
taskId: string;
|
|
238
|
+
}
|
|
239
|
+
type TaskCancelHandler = (context: TaskCancelContext) => void | Promise<void>;
|
|
240
|
+
|
|
241
|
+
declare class WorkerClientSDK {
|
|
242
|
+
private readonly config;
|
|
243
|
+
private readonly messageHandlers;
|
|
244
|
+
private readonly cancelHandlers;
|
|
245
|
+
private socket;
|
|
246
|
+
private connectPromise;
|
|
247
|
+
private readonly pendingRequests;
|
|
248
|
+
private reconnectTimer?;
|
|
249
|
+
private reconnectDelayMs;
|
|
250
|
+
private shouldStayConnected;
|
|
251
|
+
private manualClose;
|
|
252
|
+
private needsRestoreOnOpen;
|
|
253
|
+
private isLoggedIn;
|
|
254
|
+
private lastLoginPayload?;
|
|
255
|
+
private explicitState?;
|
|
256
|
+
private latestLoginToken?;
|
|
257
|
+
constructor(config: WorkerClientSDKConfig);
|
|
258
|
+
connect(): Promise<this>;
|
|
259
|
+
disconnect(): Promise<void>;
|
|
260
|
+
login(payload: WorkerLoginPayload): Promise<void>;
|
|
261
|
+
logout(): Promise<void>;
|
|
262
|
+
updateAvailability(availability: 'available' | 'busy'): Promise<void>;
|
|
263
|
+
reportException(reason: string): Promise<void>;
|
|
264
|
+
onMessage(handler: TaskMessageHandler): this;
|
|
265
|
+
onCancel(handler: TaskCancelHandler): this;
|
|
266
|
+
offCancel(handler: TaskCancelHandler): this;
|
|
267
|
+
private handleIncomingMessage;
|
|
268
|
+
private sendHeartbeatAck;
|
|
269
|
+
private handleSocketClose;
|
|
270
|
+
private scheduleReconnect;
|
|
271
|
+
private restoreSessionIfNeeded;
|
|
272
|
+
private dispatchTaskMessage;
|
|
273
|
+
private handleTaskCancel;
|
|
274
|
+
private createTaskController;
|
|
275
|
+
private sendTaskStatusUpdate;
|
|
276
|
+
private buildAgentMessage;
|
|
277
|
+
private buildArtifact;
|
|
278
|
+
private buildLoginPayload;
|
|
279
|
+
private persistLoginToken;
|
|
280
|
+
private readStoredLoginToken;
|
|
281
|
+
private clearLoginToken;
|
|
282
|
+
private resolveCredentialFile;
|
|
283
|
+
private sendRequest;
|
|
284
|
+
private ensureSocketOpen;
|
|
285
|
+
private rejectPendingRequests;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
declare function resolveDefaultWorkerCredentialFile(serverUrl: string, workerId: string, email: string, homeDirectory?: string): string;
|
|
289
|
+
|
|
290
|
+
interface WorkerLoginTokenClaims {
|
|
291
|
+
workerId: string;
|
|
292
|
+
email: string;
|
|
293
|
+
role: WorkerRole;
|
|
294
|
+
issuedAt: number;
|
|
295
|
+
}
|
|
296
|
+
declare function issueLoginToken(claims: WorkerLoginTokenClaims, signingSecret: string): string;
|
|
297
|
+
declare function verifyLoginToken(token: string, signingSecret: string): WorkerLoginTokenClaims | null;
|
|
298
|
+
|
|
299
|
+
declare class WorkerServerSDK {
|
|
300
|
+
private readonly config;
|
|
301
|
+
private readonly registry;
|
|
302
|
+
private readonly taskStore;
|
|
303
|
+
private readonly eventHandlers;
|
|
304
|
+
private readonly loginAuthorizationHandlers;
|
|
305
|
+
private readonly taskUpdateHandlers;
|
|
306
|
+
private readonly connections;
|
|
307
|
+
private readonly identityToPeerId;
|
|
308
|
+
private readonly pendingAuthorizations;
|
|
309
|
+
private managerControlPlane;
|
|
310
|
+
private heartbeatTimer?;
|
|
311
|
+
private nodeServer?;
|
|
312
|
+
private nodeAdapter?;
|
|
313
|
+
constructor(config?: WorkerServerSDKConfig);
|
|
314
|
+
registerManagerControlPlane(controlPlane: WorkerManagerControlPlane | null): this;
|
|
315
|
+
listen(port: number, host?: string): Promise<this>;
|
|
316
|
+
stop(): Promise<void>;
|
|
317
|
+
onWorkerEvent(handler: WorkerEventHandler): this;
|
|
318
|
+
offWorkerEvent(handler: WorkerEventHandler): this;
|
|
319
|
+
onLoginAuthorization(handler: LoginAuthorizationHandler): this;
|
|
320
|
+
offLoginAuthorization(handler: LoginAuthorizationHandler): this;
|
|
321
|
+
queryWorkers(filters?: WorkerQueryFilters): WorkerSnapshot[];
|
|
322
|
+
listAbnormalWorkers(filters?: WorkerQueryFilters): WorkerSnapshot[];
|
|
323
|
+
approveLoginAuthorization(authorizationId: string, _metadata?: Record<string, unknown>): Promise<void>;
|
|
324
|
+
rejectLoginAuthorization(authorizationId: string, reason: string, _metadata?: Record<string, unknown>): Promise<void>;
|
|
325
|
+
onTaskUpdate(handler: TaskUpdateHandler): this;
|
|
326
|
+
sendMessage(params: SendMessageParams): Promise<Task>;
|
|
327
|
+
getTask(taskId: string, options?: GetTaskOptions): Task | undefined;
|
|
328
|
+
listTasks(filters?: ListTasksFilters): Task[];
|
|
329
|
+
cancelTask(taskId: string): Promise<Task>;
|
|
330
|
+
private listenWithNode;
|
|
331
|
+
private createHooks;
|
|
332
|
+
private handleSocketOpen;
|
|
333
|
+
private handleSocketMessage;
|
|
334
|
+
private handleLoginMessage;
|
|
335
|
+
private validateManagerLogin;
|
|
336
|
+
private createPendingAuthorization;
|
|
337
|
+
private completeLogin;
|
|
338
|
+
private clearPendingAuthorization;
|
|
339
|
+
private cancelPendingAuthorization;
|
|
340
|
+
private handleLogoutMessage;
|
|
341
|
+
private handleUpdateAvailabilityMessage;
|
|
342
|
+
private handleReportExceptionMessage;
|
|
343
|
+
private handleTaskStatusUpdateMessage;
|
|
344
|
+
private handleTaskArtifactUpdateMessage;
|
|
345
|
+
private handleManagerCommandMessage;
|
|
346
|
+
private handleManagerSubscribeMessage;
|
|
347
|
+
private handleManagerUnsubscribeMessage;
|
|
348
|
+
private handleSocketClose;
|
|
349
|
+
private forceDisconnect;
|
|
350
|
+
private startHeartbeatLoop;
|
|
351
|
+
private runHeartbeatSweep;
|
|
352
|
+
private matchesPath;
|
|
353
|
+
private sendAck;
|
|
354
|
+
private sendLoginPending;
|
|
355
|
+
private sendLoginApproved;
|
|
356
|
+
private sendLoginRejected;
|
|
357
|
+
private sendError;
|
|
358
|
+
private dispatchTaskMessage;
|
|
359
|
+
private dispatchTaskCancel;
|
|
360
|
+
private replayActiveTasks;
|
|
361
|
+
private requireManagerContext;
|
|
362
|
+
private clearManagerSubscriptions;
|
|
363
|
+
private disposeManagerSubscription;
|
|
364
|
+
private sendManagerCommandResult;
|
|
365
|
+
private sendManagerEvent;
|
|
366
|
+
private deriveWorkerSnapshot;
|
|
367
|
+
private emitWorkerEvent;
|
|
368
|
+
private emitLoginAuthorizationEvent;
|
|
369
|
+
private emitTaskUpdate;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
declare function isTerminalTaskState(state: TaskState): boolean;
|
|
373
|
+
declare function splitWorkerKey(workerKey: string): readonly [string, string];
|
|
374
|
+
|
|
375
|
+
export { type AbnormalSource, type AgentProfileLite, type Artifact, type ArtifactInput, type ConnectionState, type DisconnectCause, type GetTaskOptions, type ListTasksFilters, type LoginAuthorizationCancelCause, type LoginAuthorizationEvent, type LoginAuthorizationHandler, type LoginPendingReason, type ManagerCommandRequest, type ManagerEventEnvelope, type ManagerEventHandler, type ManagerSessionContext, type ManagerSubscriptionCleanup, type Message, type MessageInput, type MessageRole, type Metadata, type Part, type PendingLoginAuthorization, type SendMessageParams, type Task, type TaskCancelContext, type TaskCancelHandler, type TaskController, type TaskMessageContext, type TaskMessageHandler, type TaskState, type TaskStatus, type TaskUpdateEvent, type TaskUpdateHandler, type WorkerActivityState, type WorkerAvailability, WorkerClientSDK, type WorkerClientSDKConfig, type WorkerEvent, type WorkerEventHandler, type WorkerIdentity, type WorkerLoginPayload, type WorkerManagerControlPlane, type WorkerQueryFilters, type WorkerRole, WorkerServerSDK, type WorkerServerSDKConfig, type WorkerSnapshot, isTerminalTaskState, issueLoginToken, resolveDefaultWorkerCredentialFile, splitWorkerKey, verifyLoginToken };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x98b479=_0x4d6b;(function(_0x18dc43,_0x43e1ca){const _0x48a85e=_0x4d6b,_0x439788=_0x18dc43();while(!![]){try{const _0x53ab1e=parseInt(_0x48a85e(0x23f))/0x1*(parseInt(_0x48a85e(0x2ee))/0x2)+-parseInt(_0x48a85e(0x31b))/0x3*(parseInt(_0x48a85e(0x21f))/0x4)+parseInt(_0x48a85e(0x287))/0x5+-parseInt(_0x48a85e(0x1df))/0x6*(-parseInt(_0x48a85e(0x1d3))/0x7)+parseInt(_0x48a85e(0x25d))/0x8+-parseInt(_0x48a85e(0x2fe))/0x9*(parseInt(_0x48a85e(0x314))/0xa)+-parseInt(_0x48a85e(0x2d6))/0xb*(parseInt(_0x48a85e(0x1d8))/0xc);if(_0x53ab1e===_0x43e1ca)break;else _0x439788['push'](_0x439788['shift']());}catch(_0x1b0735){_0x439788['push'](_0x439788['shift']());}}}(_0x532d,0x5b246));import{createHash}from'crypto';import{chmod,mkdir,readFile,rename,rm,writeFile}from'fs/promises';import{homedir}from'os';import{dirname,join}from'path';function _0x4d6b(_0x564012,_0x25e3ef){_0x564012=_0x564012-0x1bb;const _0x532d85=_0x532d();let _0x4d6b5e=_0x532d85[_0x564012];return _0x4d6b5e;}import _0x25b6f6 from'process';function resolveDefaultWorkerCredentialFile(_0x1bece7,_0x456708,_0x2115ae,_0x1ed9ad=homedir()){const _0x2ff9a3=_0x4d6b,_0x355064=createHash(_0x2ff9a3(0x2fd))['update'](_0x1bece7+'::'+_0x456708+'::'+_0x2115ae)[_0x2ff9a3(0x2ca)](_0x2ff9a3(0x281));return join(_0x1ed9ad,_0x2ff9a3(0x298),_0x2ff9a3(0x2e8),_0x355064+_0x2ff9a3(0x316));}async function readWorkerCredential(_0xc69e89){const _0x5810f2=_0x4d6b;try{const _0x5e9692=await readFile(_0xc69e89,_0x5810f2(0x25f)),_0x188d4f=JSON[_0x5810f2(0x248)](_0x5e9692);if(typeof _0x188d4f[_0x5810f2(0x225)]!=='string'||_0x188d4f['loginToken'][_0x5810f2(0x2fa)]===0x0)return void 0x0;return _0x188d4f;}catch(_0x51b92e){if(_0x51b92e?.[_0x5810f2(0x205)]==='ENOENT')return void 0x0;throw _0x51b92e;}}async function writeWorkerCredential(_0x8a2862,_0x37c948){const _0x561c79=_0x4d6b;await mkdir(dirname(_0x8a2862),{'recursive':!![]});const _0x19fa5c=_0x8a2862+'.'+_0x25b6f6[_0x561c79(0x2aa)]+'.'+Date[_0x561c79(0x29a)]()+_0x561c79(0x1de),_0x4a0a00=JSON[_0x561c79(0x300)]({..._0x37c948,'updatedAt':Date[_0x561c79(0x29a)]()});await writeFile(_0x19fa5c,_0x4a0a00,{'encoding':_0x561c79(0x25f),'mode':0x180}),await rename(_0x19fa5c,_0x8a2862),await chmod(_0x8a2862,0x180);}async function deleteWorkerCredential(_0x863208){const _0x1ae9ec=_0x4d6b;try{await rm(_0x863208,{'force':!![]});}catch(_0x4cddae){if(_0x4cddae?.[_0x1ae9ec(0x205)]===_0x1ae9ec(0x237))return;throw _0x4cddae;}}function parseClientMessage(_0x5e73ae){const _0x40fe51=_0x4d6b;try{const _0x23b349=JSON[_0x40fe51(0x248)](_0x5e73ae);if(!_0x23b349||typeof _0x23b349!=='object'||typeof _0x23b349['type']!=='string')return null;switch(_0x23b349['type']){case _0x40fe51(0x2f6):case _0x40fe51(0x2e3):case _0x40fe51(0x27c):case _0x40fe51(0x249):case'heartbeat-ack':case _0x40fe51(0x29f):case _0x40fe51(0x310):case'manager-unsubscribe':case _0x40fe51(0x255):case _0x40fe51(0x20b):return _0x23b349;default:return null;}}catch{return null;}}function stringifyServerMessage(_0x5b2ab0){const _0x4561b7=_0x4d6b;return JSON[_0x4561b7(0x300)](_0x5b2ab0);}function stringifyClientMessage(_0x4734b6){const _0x547d73=_0x4d6b;return JSON[_0x547d73(0x300)](_0x4734b6);}function _0x532d(){const _0x53d81e=['cancelTask','issuedAt','onMessage','emitLoginAuthorizationEvent','kind','history','isArray','offWorkerEvent','reconnect','handleManagerUnsubscribeMessage','reportException','persistLoginToken','filter','text\x20part\x20must\x20not\x20be\x20empty','get','reason\x20is\x20required','code','peerId','crossws/adapters/node','task\x20artifact\x20update\x20failed','map','lastLoginPayload','TaskArtifactUpdate','manager\x20token\x20is\x20invalid','heartbeat-timeout','sendManagerCommandResult','email\x20is\x20required','task-status-update','peer','failed','heartbeatTimer','connectPromise','role\x20is\x20invalid','credentialStore','seedTasks','listTasks','manager\x20commands\x20require\x20manager\x20role','handleTaskCancel','stop','/workers','login\x20rejection\x20reason\x20is\x20required','type','1112932CIhEan','sendManagerEvent','base64url','lastAvailabilityUpdatedAt','manager\x20token\x20is\x20not\x20configured','coder','loginToken','worker.workerId\x20is\x20required','handleLoginMessage','cause','status','contextId','deriveWorkerSnapshot','push','createOrContinue','snapshot','manager\x20control\x20plane\x20is\x20not\x20configured','nodeServer','email','file-ref\x20part\x20uri\x20is\x20required','clearPendingAuthorization','destroy','active','invalid\x20message','ENOENT','open','manager-command-result','handleManagerSubscribeMessage','pathname','session\x20replaced\x20by\x20a\x20new\x20login','manager\x20command\x20failed','connection\x20closed','53458HIXBxU','heartbeatIntervalMs','closeAll','requestId','records','needsRestoreOnOpen','user','randomUUID','uri','parse','report-exception','toString','name','self-reported','listenWithNode','catch','managerToken','manualClose','function','seed:','initialTasks','signingSecret','TaskStatusUpdate','login-pending','scheduleReconnect','registerLogin','getTask','identityToPeerId','historyLength','startHeartbeatLoop','3917480GLRkRx','handleUpdateAvailabilityMessage','utf8','string','ensureSocketOpen','loginTimer','eventName','upgrade','http','onCancel','available','terminate','workerId','restoreSessionIfNeeded','OPEN','file','getLatestActionableMessage','required','manager-event','verifier','list','sendRequest','listAbnormal','assigneeWorkerKey','exception','working','cancelHandlers','artifactId','env','values','error','update-availability','clearManagerSubscriptions','set','createPendingAuthorization','seedSnapshots','hex','description','availability-change','listActiveByWorker','managerControlPlane','sendError','2905545ZaJgvJ','session\x20replaced','task-artifact-update','pendingAuthorizationId','registry','state','abnormalReason','environment-operator','requireManagerContext','connectionState','ack','shouldStayConnected','MEEGO_HARNESS_WORKER_MANAGER_TOKEN','some','completed','WorkerServerSDK\x20is\x20already\x20listening','forceDisconnect','.meego-harness','emitWorkerEvent','now','agent','buildArtifact','manager','includes','manager-command','reconnectDelayMs','completeLogin','heartbeat-ack','idle','authorizationId','login\x20authorization\x20not\x20found','taskUpdateHandlers','eventHandlers','object','reconnectMaxDelayMs','pid','listReplayableByWorker','task\x20is\x20already\x20terminal','runHeartbeatSweep','getBySessionId','socket-closed','rejectPendingRequests','dispatchTaskMessage','reject','disposeManagerSubscription','pendingRequests','parts','manager\x20is\x20already\x20connected','data','sessionId','abnormal','authorization','createHooks','text','matchesPath','message','sendTaskStatusUpdate','connected','disconnect','loginTimeoutMs','add','cancelPendingAuthorization','file-ref','queryWorkers','clearLoginToken','task\x20not\x20found','login\x20payload\x20is\x20required','digest','WebSocket\x20connection\x20failed','has','replayActiveTasks','sendHeartbeatAck','loginAuthorization','invalid-token','default','once','canceled','metadata','loginAuthorizationHandlers','322047fuvpoY','cloneRecord','isFinite','reconnectTimer','createTaskController','initialAvailability\x20is\x20invalid','sendLoginPending','handleUpgrade','managerSubscriptions','server-stopping','SendMessage','messageId','reported\x20as\x20abnormal\x20during\x20login','logout','artifact','handleSocketClose','session-replaced','heartbeatTimeoutMs','worker-client-credentials','readStoredLoginToken','server\x20stopping','trim','sendAck','readyState','26afxUaT','rejectLoginAuthorization','pendingAuthorizations','task','number','delete','remove','worker','login','sendLoginRejected','connections','messageHandlers','length','payload','activityState','sha256','10629iaDeyI','missing-token','stringify','workerId\x20is\x20required','touch','role','task\x20assignee\x20does\x20not\x20match\x20worker','task\x20status\x20update\x20failed','login\x20required','initialAvailability','nodeAdapter','handleSocketOpen','connect','handleTaskArtifactUpdateMessage','abnormalSource','updateAvailability','reason','resolveCredentialFile','manager-subscribe','latestLoginToken','args','manager\x20subscriptions\x20are\x20not\x20configured','2540BUBMEo','lastSeenAt','.json','clear','markDisconnected','CLOSING','resolve','6MIbPvC','worker\x20is\x20not\x20logged\x20in','handleSocketMessage','socket','slice','heartbeat','serverUrl','reconnectBaseDelayMs','worker\x20session\x20not\x20found','buildAgentMessage','taskStore','path','addEventListener','task\x20status\x20state\x20is\x20invalid','update','onPending','rejected','busy','send','CancelTask','subscribe','query','artifacts','http://localhost','worker.email\x20is\x20required','7xfVzwb','sendLoginApproved','onLoginAuthorization','end','handleManagerCommandMessage','372MtknNg','capabilitySummary','handleIncomingMessage','mimeType','disconnected','config','.tmp','2229582FUKChk','capabilitySummary\x20is\x20required','buildLoginPayload','handleReportExceptionMessage','identityKey','availability','listen','from','127.0.0.1','parts\x20must\x20contain\x20at\x20least\x20one\x20entry','tasks','input-required','taskId','isLoggedIn','submitted','emitTaskUpdate','validateManagerLogin','cancel','handleLogoutMessage','executeCommand','explicitState','close'];_0x532d=function(){return _0x53d81e;};return _0x532d();}var DEFAULT_CONFIG={'reconnect':!![],'reconnectBaseDelayMs':0xc8,'reconnectMaxDelayMs':0x1388,'credentialStore':{}},WorkerClientSDK=class{[_0x98b479(0x1dd)];['messageHandlers']=new Set();[_0x98b479(0x277)]=new Set();[_0x98b479(0x1bd)]=null;[_0x98b479(0x214)]=null;['pendingRequests']=new Map();[_0x98b479(0x2d9)];[_0x98b479(0x2a0)];[_0x98b479(0x292)]=![];[_0x98b479(0x250)]=![];[_0x98b479(0x244)]=![];[_0x98b479(0x1ec)]=![];[_0x98b479(0x20a)];[_0x98b479(0x1f3)];['latestLoginToken'];constructor(_0x26725f){const _0x58344b=_0x98b479;this[_0x58344b(0x1dd)]={...DEFAULT_CONFIG,..._0x26725f,'WebSocketCtor':_0x26725f['WebSocketCtor']??WebSocket},this[_0x58344b(0x2a0)]=this[_0x58344b(0x1dd)][_0x58344b(0x1c1)];}async['connect'](){const _0x466ee9=_0x98b479;this[_0x466ee9(0x292)]=!![];if(this['socket']&&this[_0x466ee9(0x1bd)][_0x466ee9(0x2ed)]===WebSocket[_0x466ee9(0x26b)])return this;if(this[_0x466ee9(0x214)])return this[_0x466ee9(0x214)];return this[_0x466ee9(0x250)]=![],this[_0x466ee9(0x214)]=new Promise((_0xebd912,_0x5b8188)=>{const _0x524796=_0x466ee9,_0x503b4e=new this['config']['WebSocketCtor'](this[_0x524796(0x1dd)]['serverUrl']);this[_0x524796(0x1bd)]=_0x503b4e,_0x503b4e['addEventListener'](_0x524796(0x238),()=>{const _0x37c16f=_0x524796;this[_0x37c16f(0x2a0)]=this[_0x37c16f(0x1dd)]['reconnectBaseDelayMs'],this[_0x37c16f(0x214)]=null,void this[_0x37c16f(0x26a)](),_0xebd912(this);}),_0x503b4e[_0x524796(0x1c6)](_0x524796(0x27b),()=>{const _0x491b34=_0x524796;_0x503b4e[_0x491b34(0x2ed)]!==WebSocket[_0x491b34(0x26b)]&&(this[_0x491b34(0x214)]=null,_0x5b8188(new Error(_0x491b34(0x2cb))));}),_0x503b4e[_0x524796(0x1c6)]('message',_0x345eea=>{const _0x4c5a72=_0x524796;void this[_0x4c5a72(0x1da)](String(_0x345eea[_0x4c5a72(0x2b7)]));}),_0x503b4e[_0x524796(0x1c6)](_0x524796(0x1f4),()=>{const _0x1756d1=_0x524796;this[_0x1756d1(0x2e5)]();});}),this['connectPromise'];}async[_0x98b479(0x2c1)](){const _0x3a8cbd=_0x98b479;this[_0x3a8cbd(0x292)]=![],this['manualClose']=!![],this['reconnectTimer']&&(clearTimeout(this['reconnectTimer']),this[_0x3a8cbd(0x2d9)]=void 0x0),this[_0x3a8cbd(0x1ec)]&&await this[_0x3a8cbd(0x2e3)](),this[_0x3a8cbd(0x1bd)]&&this[_0x3a8cbd(0x1bd)]['readyState']<WebSocket['CLOSING']&&this[_0x3a8cbd(0x1bd)][_0x3a8cbd(0x1f4)](),this['socket']=null,this[_0x3a8cbd(0x2b0)](new Error('connection\x20closed'));}async['login'](_0x37c22e){const _0x5d040f=_0x98b479,_0x554b7e=await this[_0x5d040f(0x1e1)](_0x37c22e);let _0x557467;try{_0x557467=await this['sendRequest']({'type':'login','payload':_0x554b7e},{'kind':_0x5d040f(0x2f6),'onPending':async _0x17958d=>{const _0x2afc5c=_0x5d040f;_0x17958d[_0x2afc5c(0x30e)]===_0x2afc5c(0x2d0)&&await this[_0x2afc5c(0x2c7)](_0x37c22e);}});}catch(_0x27a2af){await this[_0x5d040f(0x2c7)](_0x37c22e);throw _0x27a2af;}_0x557467['loginToken']&&(this[_0x5d040f(0x311)]=_0x557467[_0x5d040f(0x225)],await this[_0x5d040f(0x200)](_0x37c22e,_0x557467['loginToken'])),this[_0x5d040f(0x20a)]={..._0x37c22e,'loginToken':void 0x0},this[_0x5d040f(0x1ec)]=!![],this[_0x5d040f(0x244)]=![],this['explicitState']=void 0x0;}async['logout'](){const _0x1ace16=_0x98b479;await this[_0x1ace16(0x272)]({'type':_0x1ace16(0x2e3)},{'kind':_0x1ace16(0x2d1)}),this[_0x1ace16(0x1ec)]=![],this[_0x1ace16(0x20a)]=void 0x0,this[_0x1ace16(0x1f3)]=void 0x0,this[_0x1ace16(0x244)]=![];}async[_0x98b479(0x30d)](_0x24c830){const _0x19a834=_0x98b479;await this[_0x19a834(0x272)]({'type':_0x19a834(0x27c),'availability':_0x24c830},{'kind':'default'}),this['explicitState']={'type':_0x19a834(0x1e4),'availability':_0x24c830};}async['reportException'](_0x1c9117){const _0x3d5afd=_0x98b479;if(_0x1c9117[_0x3d5afd(0x2eb)]()[_0x3d5afd(0x2fa)]===0x0)throw new Error(_0x3d5afd(0x204));await this[_0x3d5afd(0x272)]({'type':_0x3d5afd(0x249),'reason':_0x1c9117},{'kind':_0x3d5afd(0x2d1)}),this['explicitState']={'type':_0x3d5afd(0x275),'reason':_0x1c9117};}[_0x98b479(0x1f7)](_0x22e5fb){const _0x390c09=_0x98b479;return this[_0x390c09(0x2f9)][_0x390c09(0x2c3)](_0x22e5fb),this;}[_0x98b479(0x266)](_0x487a49){const _0x28ab44=_0x98b479;return this[_0x28ab44(0x277)][_0x28ab44(0x2c3)](_0x487a49),this;}['offCancel'](_0x502fed){const _0x37c017=_0x98b479;return this[_0x37c017(0x277)][_0x37c017(0x2f3)](_0x502fed),this;}async[_0x98b479(0x1da)](_0x2cca0c){const _0x207bbe=_0x98b479,_0xca4d18=JSON[_0x207bbe(0x248)](_0x2cca0c);switch(_0xca4d18['type']){case _0x207bbe(0x291):{const _0x5e7467=this['pendingRequests'][_0x207bbe(0x203)](_0xca4d18['requestId']);if(!_0x5e7467)return;this['pendingRequests'][_0x207bbe(0x2f3)](_0xca4d18[_0x207bbe(0x242)]),_0x5e7467[_0x207bbe(0x31a)]();return;}case _0x207bbe(0x256):{const _0x33aad4=this['pendingRequests']['get'](_0xca4d18[_0x207bbe(0x242)]);if(!_0x33aad4)return;await _0x33aad4['onPending']?.(_0xca4d18);return;}case'login-approved':{const _0x454972=this[_0x207bbe(0x2b4)][_0x207bbe(0x203)](_0xca4d18[_0x207bbe(0x242)]);if(!_0x454972)return;this['pendingRequests'][_0x207bbe(0x2f3)](_0xca4d18[_0x207bbe(0x242)]),_0x454972[_0x207bbe(0x31a)](_0xca4d18);return;}case'login-rejected':{const _0x424ef3=this[_0x207bbe(0x2b4)][_0x207bbe(0x203)](_0xca4d18[_0x207bbe(0x242)]);if(!_0x424ef3)return;this[_0x207bbe(0x2b4)][_0x207bbe(0x2f3)](_0xca4d18['requestId']),_0x424ef3[_0x207bbe(0x2b2)](new Error(_0xca4d18[_0x207bbe(0x2be)]));return;}case'error':{const _0x2a0eaa=_0xca4d18[_0x207bbe(0x242)]?this[_0x207bbe(0x2b4)][_0x207bbe(0x203)](_0xca4d18[_0x207bbe(0x242)]):void 0x0;if(_0x2a0eaa&&_0xca4d18[_0x207bbe(0x242)]){this['pendingRequests']['delete'](_0xca4d18[_0x207bbe(0x242)]),_0x2a0eaa[_0x207bbe(0x2b2)](new Error(_0xca4d18['message']));return;}throw new Error(_0xca4d18[_0x207bbe(0x2be)]);}case _0x207bbe(0x1bf):{await this[_0x207bbe(0x2ce)](_0xca4d18);return;}case _0x207bbe(0x2e0):{await this[_0x207bbe(0x2b1)](_0xca4d18);return;}case _0x207bbe(0x1cd):{await this[_0x207bbe(0x21a)](_0xca4d18);}}}async[_0x98b479(0x2ce)](_0x2f624d){const _0x2bbde4=_0x98b479;this[_0x2bbde4(0x261)](),this['socket'][_0x2bbde4(0x1cc)](stringifyClientMessage({'type':'heartbeat-ack'}));}['handleSocketClose'](){const _0x404afa=_0x98b479,_0x2658ad=this[_0x404afa(0x292)]&&!this[_0x404afa(0x250)]&&this[_0x404afa(0x1dd)][_0x404afa(0x1fd)];this['connectPromise']=null,this[_0x404afa(0x1bd)]=null,this[_0x404afa(0x2b0)](new Error(_0x404afa(0x23e)));this[_0x404afa(0x1ec)]&&(this['needsRestoreOnOpen']=!![]);this[_0x404afa(0x1ec)]=![];if(!_0x2658ad)return;this[_0x404afa(0x257)]();}[_0x98b479(0x257)](){const _0xe0ce60=_0x98b479;if(this[_0xe0ce60(0x2d9)])return;const _0x5dbbdc=this['reconnectDelayMs'];this[_0xe0ce60(0x2a0)]=Math['min'](this[_0xe0ce60(0x2a0)]*0x2,this[_0xe0ce60(0x1dd)][_0xe0ce60(0x2a9)]),this[_0xe0ce60(0x2d9)]=setTimeout(()=>{const _0xdbd847=_0xe0ce60;this[_0xdbd847(0x2d9)]=void 0x0,void this[_0xdbd847(0x30a)]()['catch'](()=>{const _0x3eebf9=_0xdbd847;this[_0x3eebf9(0x292)]&&this[_0x3eebf9(0x1dd)][_0x3eebf9(0x1fd)]&&this[_0x3eebf9(0x257)]();});},_0x5dbbdc);}async[_0x98b479(0x26a)](){const _0x2272e3=_0x98b479;if(!this[_0x2272e3(0x244)]||!this[_0x2272e3(0x20a)])return;try{const _0x46e949=await this[_0x2272e3(0x1e1)](this[_0x2272e3(0x20a)]),_0x16b52d=await this[_0x2272e3(0x272)]({'type':'login','payload':_0x46e949},{'kind':_0x2272e3(0x2f6),'onPending':async _0x4fd43a=>{const _0x2a01d6=_0x2272e3;_0x4fd43a[_0x2a01d6(0x30e)]==='invalid-token'&&await this['clearLoginToken'](this['lastLoginPayload']);}});this[_0x2272e3(0x1ec)]=!![];_0x16b52d[_0x2272e3(0x225)]&&(this['latestLoginToken']=_0x16b52d[_0x2272e3(0x225)],await this[_0x2272e3(0x200)](this['lastLoginPayload'],_0x16b52d[_0x2272e3(0x225)]));if(!this['explicitState']){this[_0x2272e3(0x244)]=![];return;}if(this[_0x2272e3(0x1f3)][_0x2272e3(0x21e)]===_0x2272e3(0x1e4)&&this['explicitState'][_0x2272e3(0x1e4)]===(this[_0x2272e3(0x20a)][_0x2272e3(0x307)]??_0x2272e3(0x267))){this['needsRestoreOnOpen']=![];return;}this[_0x2272e3(0x1f3)]['type']===_0x2272e3(0x1e4)?await this['sendRequest']({'type':_0x2272e3(0x27c),'availability':this[_0x2272e3(0x1f3)]['availability']},{'kind':'default'}):await this[_0x2272e3(0x272)]({'type':_0x2272e3(0x249),'reason':this[_0x2272e3(0x1f3)]['reason']},{'kind':_0x2272e3(0x2d1)}),this[_0x2272e3(0x244)]=![];}catch{this['socket']&&this[_0x2272e3(0x1bd)][_0x2272e3(0x2ed)]<WebSocket[_0x2272e3(0x319)]&&this[_0x2272e3(0x1bd)]['close']();}}async[_0x98b479(0x2b1)](_0x3bfd73){const _0x18185f=_0x98b479,_0x493485={'task':structuredClone(_0x3bfd73['task']),'message':structuredClone(_0x3bfd73[_0x18185f(0x2be)]),'controller':this[_0x18185f(0x2da)](_0x3bfd73[_0x18185f(0x2f1)])};for(const _0x4c30fc of this[_0x18185f(0x2f9)]){await _0x4c30fc(_0x493485);}}async[_0x98b479(0x21a)](_0x282471){const _0xa64739=_0x98b479,_0x503ca3={'taskId':_0x282471['taskId']};for(const _0x139d8f of this[_0xa64739(0x277)]){await _0x139d8f(_0x503ca3);}}['createTaskController'](_0x2e8edb){return{'working':async _0x5a1f90=>{const _0x9c81fb=_0x4d6b;await this[_0x9c81fb(0x2bf)](_0x2e8edb,_0x9c81fb(0x276),_0x5a1f90);},'inputRequired':async _0x21c5d8=>{const _0x4aae5c=_0x4d6b;await this[_0x4aae5c(0x2bf)](_0x2e8edb,_0x4aae5c(0x1ea),_0x21c5d8);},'addArtifact':async _0x5ee429=>{const _0x2eae98=_0x4d6b,_0x2e94c9=this[_0x2eae98(0x29c)](_0x5ee429);return await this[_0x2eae98(0x272)]({'type':'TaskArtifactUpdate','taskId':_0x2e8edb['id'],'artifact':_0x2e94c9},{'kind':_0x2eae98(0x2d1)}),_0x2e94c9;},'complete':async _0x534bdb=>{const _0x200daa=_0x4d6b;await this[_0x200daa(0x2bf)](_0x2e8edb,'completed',_0x534bdb);},'fail':async _0x5527ca=>{const _0x37fa71=_0x4d6b;await this[_0x37fa71(0x2bf)](_0x2e8edb,_0x37fa71(0x212),_0x5527ca);},'reject':async _0x397f75=>{const _0x36a57d=_0x4d6b;await this['sendTaskStatusUpdate'](_0x2e8edb,_0x36a57d(0x1ca),_0x397f75);}};}async['sendTaskStatusUpdate'](_0x2820e8,_0x4390a3,_0x292e7a){const _0x182bd1=_0x98b479,_0x241739=_0x292e7a?this['buildAgentMessage'](_0x2820e8,_0x292e7a):void 0x0;await this[_0x182bd1(0x272)]({'type':_0x182bd1(0x255),'taskId':_0x2820e8['id'],'status':{'state':_0x4390a3,'timestamp':Date['now'](),'message':toStatusMessage(_0x292e7a)},'message':_0x241739},{'kind':_0x182bd1(0x2d1)});}[_0x98b479(0x1c3)](_0x4da4ba,_0x4fa7d1){const _0x282301=_0x98b479;return{'messageId':crypto[_0x282301(0x246)](),'contextId':_0x4da4ba[_0x282301(0x22a)],'taskId':_0x4da4ba['id'],'role':_0x282301(0x29b),'parts':structuredClone(_0x4fa7d1['parts']),'metadata':_0x4fa7d1[_0x282301(0x2d4)]?structuredClone(_0x4fa7d1[_0x282301(0x2d4)]):void 0x0};}[_0x98b479(0x29c)](_0x208258){const _0x4d6102=_0x98b479;return{'artifactId':_0x208258[_0x4d6102(0x278)]??crypto[_0x4d6102(0x246)](),'name':_0x208258[_0x4d6102(0x24b)],'description':_0x208258[_0x4d6102(0x282)],'parts':structuredClone(_0x208258[_0x4d6102(0x2b5)]),'metadata':_0x208258[_0x4d6102(0x2d4)]?structuredClone(_0x208258[_0x4d6102(0x2d4)]):void 0x0};}async[_0x98b479(0x1e1)](_0x528687){const _0x3a0d71=_0x98b479;if(_0x528687[_0x3a0d71(0x225)])return{..._0x528687};const _0x4e346e=this['latestLoginToken']??await this[_0x3a0d71(0x2e9)](_0x528687);return _0x4e346e?{..._0x528687,'loginToken':_0x4e346e}:{..._0x528687};}async['persistLoginToken'](_0x23d8d0,_0x2819f5){const _0x1575a9=_0x98b479;if(this[_0x1575a9(0x1dd)][_0x1575a9(0x216)]===![])return;await writeWorkerCredential(this['resolveCredentialFile'](_0x23d8d0),{'serverUrl':this[_0x1575a9(0x1dd)]['serverUrl'],'workerId':_0x23d8d0[_0x1575a9(0x269)],'email':_0x23d8d0[_0x1575a9(0x231)],'loginToken':_0x2819f5});}async[_0x98b479(0x2e9)](_0x1a6b57){const _0x56bba5=_0x98b479;if(this[_0x56bba5(0x1dd)][_0x56bba5(0x216)]===![])return void 0x0;const _0x1bac78=await readWorkerCredential(this[_0x56bba5(0x30f)](_0x1a6b57));return _0x1bac78?.[_0x56bba5(0x225)];}async[_0x98b479(0x2c7)](_0x1f6bf6){const _0x308be3=_0x98b479;this[_0x308be3(0x311)]=void 0x0;if(this[_0x308be3(0x1dd)][_0x308be3(0x216)]===![])return;await deleteWorkerCredential(this[_0x308be3(0x30f)](_0x1f6bf6));}[_0x98b479(0x30f)](_0x5eef57){const _0x55662f=_0x98b479;if(this[_0x55662f(0x1dd)]['credentialStore']!==![]&&this[_0x55662f(0x1dd)][_0x55662f(0x216)]['file'])return this[_0x55662f(0x1dd)]['credentialStore'][_0x55662f(0x26c)];return resolveDefaultWorkerCredentialFile(this[_0x55662f(0x1dd)][_0x55662f(0x1c0)],_0x5eef57['workerId'],_0x5eef57[_0x55662f(0x231)]);}async[_0x98b479(0x272)](_0x2149e3,_0x135665){const _0x50fc00=_0x98b479;this[_0x50fc00(0x261)]();const _0x357695=crypto[_0x50fc00(0x246)](),_0x11ae82=new Promise((_0x1c2c1d,_0x511d92)=>{const _0x6be0e2=_0x50fc00;this[_0x6be0e2(0x2b4)][_0x6be0e2(0x27e)](_0x357695,{'kind':_0x135665[_0x6be0e2(0x1f9)],'onPending':_0x135665[_0x6be0e2(0x1c9)],'resolve':_0x1c2c1d,'reject':_0x511d92});}),_0x13a149={..._0x2149e3,'requestId':_0x357695};return this[_0x50fc00(0x1bd)][_0x50fc00(0x1cc)](stringifyClientMessage(_0x13a149)),await _0x11ae82;}[_0x98b479(0x261)](){const _0x13bf49=_0x98b479;if(!this[_0x13bf49(0x1bd)]||this[_0x13bf49(0x1bd)][_0x13bf49(0x2ed)]!==WebSocket[_0x13bf49(0x26b)])throw new Error('WebSocket\x20is\x20not\x20connected');}[_0x98b479(0x2b0)](_0x54008a){const _0x19587b=_0x98b479;for(const _0x5a78c8 of this[_0x19587b(0x2b4)][_0x19587b(0x27a)]()){_0x5a78c8[_0x19587b(0x2b2)](_0x54008a);}this[_0x19587b(0x2b4)][_0x19587b(0x317)]();}};function toStatusMessage(_0x3f173d){const _0x41c29b=_0x98b479,_0x22c9d8=_0x3f173d?.[_0x41c29b(0x2b5)][0x0];if(!_0x22c9d8)return void 0x0;if(_0x22c9d8[_0x41c29b(0x21e)]===_0x41c29b(0x2bc))return _0x22c9d8[_0x41c29b(0x2bc)];if(_0x22c9d8['type']==='file-ref')return _0x22c9d8[_0x41c29b(0x24b)]??_0x22c9d8[_0x41c29b(0x247)];return _0x22c9d8[_0x41c29b(0x1db)]??'structured\x20payload';}import{Buffer}from'buffer';import{createHmac}from'crypto';function issueLoginToken(_0x25e2b8,_0x8694da){const _0x16d8f5=_0x98b479,_0x29b52c=Buffer[_0x16d8f5(0x1e6)](JSON[_0x16d8f5(0x300)](_0x25e2b8))[_0x16d8f5(0x24a)](_0x16d8f5(0x221)),_0x45fde4=signPayload(_0x29b52c,_0x8694da);return _0x29b52c+'.'+_0x45fde4;}function verifyLoginToken(_0x5d83b7,_0x56c64a){const _0x28d1cf=_0x98b479,_0x79a60=_0x5d83b7['split']('.');if(_0x79a60[_0x28d1cf(0x2fa)]!==0x2)return null;const [_0x2b85ed,_0x167d5a]=_0x79a60;if(!_0x2b85ed||!_0x167d5a||signPayload(_0x2b85ed,_0x56c64a)!==_0x167d5a)return null;try{const _0x33f283=JSON[_0x28d1cf(0x248)](Buffer[_0x28d1cf(0x1e6)](_0x2b85ed,_0x28d1cf(0x221))[_0x28d1cf(0x24a)]('utf8'));if(typeof _0x33f283[_0x28d1cf(0x269)]!==_0x28d1cf(0x260)||typeof _0x33f283['email']!=='string'||_0x33f283[_0x28d1cf(0x303)]!==_0x28d1cf(0x28e)&&_0x33f283[_0x28d1cf(0x303)]!==_0x28d1cf(0x224)&&_0x33f283[_0x28d1cf(0x303)]!==_0x28d1cf(0x270)&&_0x33f283[_0x28d1cf(0x303)]!=='manager'||typeof _0x33f283[_0x28d1cf(0x1f6)]!==_0x28d1cf(0x2f2)||!Number[_0x28d1cf(0x2d8)](_0x33f283['issuedAt']))return null;return _0x33f283;}catch{return null;}}function signPayload(_0x258e32,_0x272c0e){const _0x4120c8=_0x98b479;return createHmac(_0x4120c8(0x2fd),_0x272c0e)[_0x4120c8(0x1c8)](_0x258e32)[_0x4120c8(0x2ca)](_0x4120c8(0x221));}import{createServer}from'http';import _0x1eef0d from'process';var DISCONNECT_REASON_MAP={'socket-closed':'socket\x20closed\x20unexpectedly','heartbeat-timeout':'heartbeat\x20timed\x20out','session-replaced':_0x98b479(0x23c)};function createWorkerIdentityKey(_0x126372,_0x420a04){return _0x126372+'::'+_0x420a04;}var WorkerSessionRegistry=class{['records']=new Map();['seedSnapshots'](_0x35abec){const _0x2a7cab=_0x98b479;this[_0x2a7cab(0x243)][_0x2a7cab(0x317)]();for(const _0x228e85 of _0x35abec){const _0x1617f9=createWorkerIdentityKey(_0x228e85[_0x2a7cab(0x269)],_0x228e85[_0x2a7cab(0x231)]);this[_0x2a7cab(0x243)][_0x2a7cab(0x27e)](_0x1617f9,{'identityKey':_0x1617f9,'sessionId':_0x2a7cab(0x252)+_0x1617f9,'snapshot':cloneSnapshot(_0x228e85)});}}[_0x98b479(0x258)](_0xf21ea0,_0x279aef,_0x44fa09){const _0x328db8=_0x98b479,_0x5b73ec=createWorkerIdentityKey(_0x279aef[_0x328db8(0x269)],_0x279aef[_0x328db8(0x231)]),_0x3c501e={'workerId':_0x279aef[_0x328db8(0x269)],'email':_0x279aef[_0x328db8(0x231)],'role':_0x279aef['role'],'capabilitySummary':_0x279aef[_0x328db8(0x1d9)],'availability':_0x279aef[_0x328db8(0x307)]??'available','activityState':_0x328db8(0x2a3),'activeTaskCount':0x0,'connectionState':_0x328db8(0x2c0),'connectedAt':_0x44fa09,'lastSeenAt':_0x44fa09,'lastAvailabilityUpdatedAt':_0x44fa09};let _0x3f93d0;_0x3c501e['availability']===_0x328db8(0x2b9)&&(_0x3c501e[_0x328db8(0x30c)]=_0x328db8(0x24c),_0x3c501e['abnormalReason']=_0x328db8(0x2e2),_0x3f93d0={'type':_0x328db8(0x275),'reason':'reported\x20as\x20abnormal\x20during\x20login'});const _0x50a974={'identityKey':_0x5b73ec,'sessionId':_0xf21ea0,'snapshot':_0x3c501e,'explicitState':_0x3f93d0};return this[_0x328db8(0x243)][_0x328db8(0x27e)](_0x5b73ec,_0x50a974),this[_0x328db8(0x2d7)](_0x50a974);}['get'](_0x5de9ee){const _0x2115c3=_0x98b479,_0x19f79b=this[_0x2115c3(0x243)][_0x2115c3(0x203)](_0x5de9ee);return _0x19f79b?this[_0x2115c3(0x2d7)](_0x19f79b):void 0x0;}[_0x98b479(0x2ae)](_0x37b213){const _0x504fc6=_0x98b479;for(const _0x49a510 of this[_0x504fc6(0x243)][_0x504fc6(0x27a)]()){if(_0x49a510[_0x504fc6(0x2b8)]===_0x37b213)return this[_0x504fc6(0x2d7)](_0x49a510);}return void 0x0;}['touch'](_0x5093f1,_0x452c04){const _0x2dc91b=_0x98b479,_0x2162a8=this[_0x2dc91b(0x243)]['get'](_0x5093f1);if(!_0x2162a8)return void 0x0;return _0x2162a8['snapshot'][_0x2dc91b(0x315)]=_0x452c04,this[_0x2dc91b(0x2d7)](_0x2162a8);}[_0x98b479(0x30d)](_0xcb4cdf,_0x298b78,_0x3715a0){const _0x58b0aa=_0x98b479,_0x5981cc=this[_0x58b0aa(0x243)][_0x58b0aa(0x203)](_0xcb4cdf);if(!_0x5981cc)return void 0x0;return _0x5981cc[_0x58b0aa(0x22e)][_0x58b0aa(0x1e4)]=_0x298b78,_0x5981cc[_0x58b0aa(0x22e)][_0x58b0aa(0x222)]=_0x3715a0,_0x5981cc[_0x58b0aa(0x22e)][_0x58b0aa(0x315)]=_0x3715a0,delete _0x5981cc[_0x58b0aa(0x22e)]['abnormalSource'],delete _0x5981cc['snapshot'][_0x58b0aa(0x28d)],_0x5981cc['explicitState']={'type':'availability','availability':_0x298b78},this['cloneRecord'](_0x5981cc);}['reportException'](_0x12634c,_0x4e2818,_0x454831){const _0x55544f=_0x98b479,_0x41c4e6=this[_0x55544f(0x243)][_0x55544f(0x203)](_0x12634c);if(!_0x41c4e6)return void 0x0;return _0x41c4e6[_0x55544f(0x22e)]['availability']=_0x55544f(0x2b9),_0x41c4e6[_0x55544f(0x22e)][_0x55544f(0x30c)]=_0x55544f(0x24c),_0x41c4e6['snapshot'][_0x55544f(0x28d)]=_0x4e2818,_0x41c4e6['snapshot'][_0x55544f(0x222)]=_0x454831,_0x41c4e6[_0x55544f(0x22e)][_0x55544f(0x315)]=_0x454831,_0x41c4e6['explicitState']={'type':'exception','reason':_0x4e2818},this[_0x55544f(0x2d7)](_0x41c4e6);}[_0x98b479(0x318)](_0x127d4b,_0x1a3daa,_0x416c68){const _0x5dd5a3=_0x98b479,_0xa93bc8=this[_0x5dd5a3(0x243)][_0x5dd5a3(0x203)](_0x127d4b);if(!_0xa93bc8)return void 0x0;return _0xa93bc8[_0x5dd5a3(0x22e)]['availability']='abnormal',_0xa93bc8[_0x5dd5a3(0x22e)][_0x5dd5a3(0x290)]=_0x5dd5a3(0x1dc),_0xa93bc8[_0x5dd5a3(0x22e)][_0x5dd5a3(0x30c)]=_0x5dd5a3(0x2c1),_0xa93bc8[_0x5dd5a3(0x22e)][_0x5dd5a3(0x28d)]=DISCONNECT_REASON_MAP[_0x1a3daa],_0xa93bc8[_0x5dd5a3(0x22e)][_0x5dd5a3(0x315)]=_0x416c68,_0xa93bc8['snapshot'][_0x5dd5a3(0x222)]=_0x416c68,this[_0x5dd5a3(0x2d7)](_0xa93bc8);}['remove'](_0x250efd){const _0x457c29=_0x98b479,_0x22f778=this[_0x457c29(0x243)][_0x457c29(0x203)](_0x250efd);if(!_0x22f778)return void 0x0;return this[_0x457c29(0x243)][_0x457c29(0x2f3)](_0x250efd),this[_0x457c29(0x2d7)](_0x22f778);}[_0x98b479(0x1cf)](_0x40e756={}){const _0x330bd4=_0x98b479;return Array['from'](this['records'][_0x330bd4(0x27a)]())[_0x330bd4(0x201)](_0x17cd5e=>matchesFilters(_0x17cd5e[_0x330bd4(0x22e)],_0x40e756))[_0x330bd4(0x209)](_0x1a6624=>cloneSnapshot(_0x1a6624['snapshot']));}[_0x98b479(0x273)](_0x3120cd={}){return this['query']({..._0x3120cd,'availability':'abnormal'});}['allRecords'](){const _0x23ca35=_0x98b479;return Array['from'](this[_0x23ca35(0x243)]['values']())['map'](_0x4f841b=>this[_0x23ca35(0x2d7)](_0x4f841b));}[_0x98b479(0x2d7)](_0x1f520e){const _0x2bd10b=_0x98b479;return{'identityKey':_0x1f520e['identityKey'],'sessionId':_0x1f520e[_0x2bd10b(0x2b8)],'snapshot':cloneSnapshot(_0x1f520e['snapshot']),'explicitState':_0x1f520e['explicitState']?{..._0x1f520e[_0x2bd10b(0x1f3)]}:void 0x0};}};function matchesFilters(_0x415245,_0x4201e1){const _0xb39fed=_0x98b479;if(_0x4201e1[_0xb39fed(0x269)]&&_0x415245[_0xb39fed(0x269)]!==_0x4201e1[_0xb39fed(0x269)])return![];if(_0x4201e1[_0xb39fed(0x231)]&&_0x415245['email']!==_0x4201e1[_0xb39fed(0x231)])return![];if(_0x4201e1[_0xb39fed(0x303)]&&_0x415245[_0xb39fed(0x303)]!==_0x4201e1['role'])return![];if(_0x4201e1[_0xb39fed(0x1e4)]&&_0x415245[_0xb39fed(0x1e4)]!==_0x4201e1[_0xb39fed(0x1e4)])return![];if(_0x4201e1[_0xb39fed(0x2fc)]&&_0x415245[_0xb39fed(0x2fc)]!==_0x4201e1['activityState'])return![];if(_0x4201e1['connectionState']&&_0x415245[_0xb39fed(0x290)]!==_0x4201e1[_0xb39fed(0x290)])return![];if(_0x4201e1[_0xb39fed(0x30c)]&&_0x415245[_0xb39fed(0x30c)]!==_0x4201e1[_0xb39fed(0x30c)])return![];return!![];}function cloneSnapshot(_0x2baeaa){return{..._0x2baeaa};}var TERMINAL_TASK_STATES=new Set([_0x98b479(0x295),_0x98b479(0x212),'canceled',_0x98b479(0x1ca)]),TaskStore=class{[_0x98b479(0x1e9)]=new Map();[_0x98b479(0x217)](_0x49b007){const _0x4d1033=_0x98b479;this['tasks'][_0x4d1033(0x317)]();for(const _0x265f81 of _0x49b007){this[_0x4d1033(0x1e9)][_0x4d1033(0x27e)](_0x265f81['id'],clone(_0x265f81));}}[_0x98b479(0x22d)](_0x5f39f9){const _0x4c96ec=_0x98b479,_0xa03702=createWorkerIdentityKey(_0x5f39f9[_0x4c96ec(0x269)],_0x5f39f9[_0x4c96ec(0x231)]),_0x1a5281=this[_0x4c96ec(0x1e9)][_0x4c96ec(0x203)](_0x5f39f9[_0x4c96ec(0x2be)]['taskId']);if(!_0x1a5281){const _0x5abf9c={'id':_0x5f39f9['message'][_0x4c96ec(0x1eb)],'contextId':_0x5f39f9['message']['contextId'],'status':{'state':'submitted','timestamp':_0x5f39f9[_0x4c96ec(0x29a)]},'artifacts':[],'history':[clone(_0x5f39f9[_0x4c96ec(0x2be)])],'metadata':_0x5f39f9[_0x4c96ec(0x2d4)]?clone(_0x5f39f9[_0x4c96ec(0x2d4)]):void 0x0,'assigneeWorkerKey':_0xa03702};return this[_0x4c96ec(0x1e9)][_0x4c96ec(0x27e)](_0x5abf9c['id'],_0x5abf9c),clone(_0x5abf9c);}if(_0x1a5281['assigneeWorkerKey']!==_0xa03702)throw new Error(_0x4c96ec(0x304));if(isTerminalTaskState(_0x1a5281[_0x4c96ec(0x229)][_0x4c96ec(0x28c)]))throw new Error('cannot\x20continue\x20a\x20terminal\x20task');return _0x1a5281[_0x4c96ec(0x1fa)][_0x4c96ec(0x22c)](clone(_0x5f39f9[_0x4c96ec(0x2be)])),_0x1a5281['status']={'state':_0x4c96ec(0x1ed),'timestamp':_0x5f39f9['now']},_0x5f39f9[_0x4c96ec(0x2d4)]&&(_0x1a5281[_0x4c96ec(0x2d4)]=clone(_0x5f39f9[_0x4c96ec(0x2d4)])),clone(_0x1a5281);}[_0x98b479(0x30d)](_0xc447b9,_0x1226a7,_0x1dfd82){const _0x5bce1c=_0x98b479,_0x530fbf=this[_0x5bce1c(0x1e9)][_0x5bce1c(0x203)](_0xc447b9);if(!_0x530fbf)throw new Error(_0x5bce1c(0x2c8));if(isTerminalTaskState(_0x530fbf[_0x5bce1c(0x229)]['state']))throw new Error('task\x20is\x20already\x20terminal');return _0x530fbf[_0x5bce1c(0x229)]=clone(_0x1226a7),_0x1dfd82&&_0x530fbf[_0x5bce1c(0x1fa)]['push'](clone(_0x1dfd82)),clone(_0x530fbf);}['addArtifact'](_0x76a21e,_0x428699){const _0x5bca3a=_0x98b479,_0x33b54f=this[_0x5bca3a(0x1e9)][_0x5bca3a(0x203)](_0x76a21e);if(!_0x33b54f)throw new Error(_0x5bca3a(0x2c8));if(isTerminalTaskState(_0x33b54f[_0x5bca3a(0x229)][_0x5bca3a(0x28c)]))throw new Error('task\x20is\x20already\x20terminal');return _0x33b54f[_0x5bca3a(0x1d0)][_0x5bca3a(0x22c)](clone(_0x428699)),clone(_0x33b54f);}[_0x98b479(0x1f0)](_0x12c62b,_0x227c87){const _0x13ce40=_0x98b479,_0x47c51e=this['tasks'][_0x13ce40(0x203)](_0x12c62b);if(!_0x47c51e)throw new Error(_0x13ce40(0x2c8));if(isTerminalTaskState(_0x47c51e[_0x13ce40(0x229)]['state']))return clone(_0x47c51e);return _0x47c51e[_0x13ce40(0x229)]={'state':_0x13ce40(0x2d3),'timestamp':_0x227c87},clone(_0x47c51e);}['get'](_0x5b8fdd,_0x5bb1cb={}){const _0x47146f=_0x98b479,_0x1f5ad1=this['tasks']['get'](_0x5b8fdd);if(!_0x1f5ad1)return void 0x0;if(!_0x5bb1cb['historyLength']||_0x1f5ad1['history']['length']<=_0x5bb1cb[_0x47146f(0x25b)])return clone(_0x1f5ad1);const _0x51b2f9=clone(_0x1f5ad1);return _0x51b2f9[_0x47146f(0x1fa)]=_0x51b2f9[_0x47146f(0x1fa)][_0x47146f(0x1be)](-_0x5bb1cb[_0x47146f(0x25b)]),_0x51b2f9;}['list'](_0xb7d4cc={}){const _0xa2401c=_0x98b479;return Array[_0xa2401c(0x1e6)](this[_0xa2401c(0x1e9)][_0xa2401c(0x27a)]())[_0xa2401c(0x201)](_0x121917=>this['matchesFilters'](_0x121917,_0xb7d4cc))[_0xa2401c(0x209)](_0x3b5f3a=>clone(_0x3b5f3a));}[_0x98b479(0x284)](_0x1697cc){const _0x3afca8=_0x98b479;return Array[_0x3afca8(0x1e6)](this[_0x3afca8(0x1e9)][_0x3afca8(0x27a)]())[_0x3afca8(0x201)](_0x1ecaa9=>_0x1ecaa9['assigneeWorkerKey']===_0x1697cc&&!isTerminalTaskState(_0x1ecaa9[_0x3afca8(0x229)]['state']))[_0x3afca8(0x209)](_0x3ce980=>clone(_0x3ce980));}[_0x98b479(0x2ab)](_0x191800){const _0x3607c3=_0x98b479;return Array[_0x3607c3(0x1e6)](this['tasks'][_0x3607c3(0x27a)]())[_0x3607c3(0x201)](_0x1a5a85=>_0x1a5a85[_0x3607c3(0x274)]===_0x191800&&_0x1a5a85[_0x3607c3(0x229)][_0x3607c3(0x28c)]===_0x3607c3(0x1ed))[_0x3607c3(0x209)](_0x53090a=>clone(_0x53090a));}[_0x98b479(0x26d)](_0x13911f){const _0x28947a=_0x98b479,_0x351969=this[_0x28947a(0x1e9)][_0x28947a(0x203)](_0x13911f);if(!_0x351969)return void 0x0;for(let _0x2d64ea=_0x351969[_0x28947a(0x1fa)]['length']-0x1;_0x2d64ea>=0x0;_0x2d64ea-=0x1){const _0x3f2dba=_0x351969['history'][_0x2d64ea];if(_0x3f2dba[_0x28947a(0x303)]===_0x28947a(0x245))return clone(_0x3f2dba);}return void 0x0;}['matchesFilters'](_0x363d53,_0xaf88a){const _0x5e5272=_0x98b479;if(_0xaf88a[_0x5e5272(0x22a)]&&_0x363d53[_0x5e5272(0x22a)]!==_0xaf88a[_0x5e5272(0x22a)])return![];if(_0xaf88a['state']&&_0x363d53[_0x5e5272(0x229)][_0x5e5272(0x28c)]!==_0xaf88a[_0x5e5272(0x28c)])return![];if(_0xaf88a[_0x5e5272(0x269)]||_0xaf88a['email']){const [_0x2d2675,_0x4bbcaf]=splitWorkerKey(_0x363d53[_0x5e5272(0x274)]);if(_0xaf88a[_0x5e5272(0x269)]&&_0x2d2675!==_0xaf88a[_0x5e5272(0x269)])return![];if(_0xaf88a[_0x5e5272(0x231)]&&_0x4bbcaf!==_0xaf88a[_0x5e5272(0x231)])return![];}return!![];}};function isTerminalTaskState(_0x473e69){const _0x510adf=_0x98b479;return TERMINAL_TASK_STATES[_0x510adf(0x2cc)](_0x473e69);}function splitWorkerKey(_0x3f2784){const [_0x50bb89,_0x350296]=_0x3f2784['split']('::');return[_0x50bb89,_0x350296];}function clone(_0x4d2f0e){return structuredClone(_0x4d2f0e);}var DEFAULT_CONFIG2={'path':_0x98b479(0x21c),'heartbeatIntervalMs':0x3a98,'heartbeatTimeoutMs':0xafc8,'loginTimeoutMs':0x2710},WorkerServerSDK=class{['config'];['registry']=new WorkerSessionRegistry();[_0x98b479(0x1c4)]=new TaskStore();['eventHandlers']=new Set();[_0x98b479(0x2d5)]=new Set();[_0x98b479(0x2a6)]=new Set();['connections']=new Map();[_0x98b479(0x25a)]=new Map();[_0x98b479(0x2f0)]=new Map();[_0x98b479(0x285)]=null;[_0x98b479(0x213)];[_0x98b479(0x230)];[_0x98b479(0x308)];constructor(_0x237146={}){const _0x45d0ee=_0x98b479;this[_0x45d0ee(0x1dd)]={...DEFAULT_CONFIG2,..._0x237146,'managerToken':_0x237146[_0x45d0ee(0x24f)]??_0x1eef0d[_0x45d0ee(0x279)][_0x45d0ee(0x293)],'loginAuthorization':resolveLoginAuthorizationConfig(_0x237146[_0x45d0ee(0x2cf)])},this[_0x45d0ee(0x28b)][_0x45d0ee(0x280)](_0x237146['initialWorkers']??[]),this[_0x45d0ee(0x1c4)][_0x45d0ee(0x217)](_0x237146[_0x45d0ee(0x253)]??[]);}['registerManagerControlPlane'](_0x37fa40){const _0x2dd0b9=_0x98b479;return this[_0x2dd0b9(0x285)]=_0x37fa40,this;}async['listen'](_0x27a7c4,_0x5ad989=_0x98b479(0x1e7)){const _0xaf34e0=_0x98b479;if(this[_0xaf34e0(0x230)])throw new Error(_0xaf34e0(0x296));return await this[_0xaf34e0(0x24d)](_0x27a7c4,_0x5ad989),this[_0xaf34e0(0x25c)](),this;}async[_0x98b479(0x21b)](){const _0x4d320a=_0x98b479;this[_0x4d320a(0x213)]&&(clearInterval(this['heartbeatTimer']),this[_0x4d320a(0x213)]=void 0x0);for(const _0x55e603 of this['connections']['values']()){_0x55e603[_0x4d320a(0x262)]&&clearTimeout(_0x55e603[_0x4d320a(0x262)]);await this[_0x4d320a(0x27d)](_0x55e603),await this[_0x4d320a(0x2c4)](_0x55e603,_0x4d320a(0x2df));if(_0x55e603['identityKey']){const _0x55e592=this[_0x4d320a(0x28b)][_0x4d320a(0x318)](_0x55e603[_0x4d320a(0x1e3)],_0x4d320a(0x2af),Date['now']());this['identityToPeerId']['delete'](_0x55e603[_0x4d320a(0x1e3)]),_0x55e592&&await this[_0x4d320a(0x299)]({'type':'disconnect','worker':_0x55e592[_0x4d320a(0x22e)],'cause':_0x4d320a(0x2af)});}try{_0x55e603[_0x4d320a(0x211)]['close'](0x3f4,_0x4d320a(0x2ea));}catch{_0x55e603['peer'][_0x4d320a(0x268)]();}}this['connections'][_0x4d320a(0x317)](),this[_0x4d320a(0x25a)][_0x4d320a(0x317)](),this[_0x4d320a(0x2f0)][_0x4d320a(0x317)](),this[_0x4d320a(0x308)]&&(this[_0x4d320a(0x308)][_0x4d320a(0x241)](0x3f4,'server\x20stopping',!![]),this[_0x4d320a(0x308)]=void 0x0),this[_0x4d320a(0x230)]&&(await new Promise((_0xe4d50d,_0x1ecd8a)=>this[_0x4d320a(0x230)][_0x4d320a(0x1f4)](_0xa23731=>_0xa23731?_0x1ecd8a(_0xa23731):_0xe4d50d())),this[_0x4d320a(0x230)]=void 0x0);}['onWorkerEvent'](_0x292587){const _0x4cc71a=_0x98b479;return this['eventHandlers'][_0x4cc71a(0x2c3)](_0x292587),this;}[_0x98b479(0x1fc)](_0x279603){return this['eventHandlers']['delete'](_0x279603),this;}[_0x98b479(0x1d5)](_0x20072e){const _0xbcc38f=_0x98b479;return this[_0xbcc38f(0x2d5)][_0xbcc38f(0x2c3)](_0x20072e),this;}['offLoginAuthorization'](_0x1c9872){const _0x1822e5=_0x98b479;return this[_0x1822e5(0x2d5)][_0x1822e5(0x2f3)](_0x1c9872),this;}[_0x98b479(0x2c6)](_0x18f7b4={}){const _0x54f0c0=_0x98b479,{activityState:_0x1944a4,..._0x164503}=_0x18f7b4;return this[_0x54f0c0(0x28b)]['query'](_0x164503)[_0x54f0c0(0x209)](_0x173dcb=>this[_0x54f0c0(0x22b)](_0x173dcb))['filter'](_0x439d03=>_0x1944a4?_0x439d03[_0x54f0c0(0x2fc)]===_0x1944a4:!![]);}['listAbnormalWorkers'](_0x260b07={}){const _0x419d9d=_0x98b479;return this[_0x419d9d(0x2c6)]({..._0x260b07,'availability':_0x419d9d(0x2b9)});}async['approveLoginAuthorization'](_0x19dd03,_0x37cf7c){const _0x145041=_0x98b479,_0x39a310=this['pendingAuthorizations'][_0x145041(0x203)](_0x19dd03);if(!_0x39a310)throw new Error('login\x20authorization\x20not\x20found');const _0x53e357=this[_0x145041(0x2f8)]['get'](_0x39a310['peerId']);if(!_0x53e357||_0x53e357['pendingAuthorizationId']!==_0x19dd03){this[_0x145041(0x2f0)][_0x145041(0x2f3)](_0x19dd03);throw new Error(_0x145041(0x2a5));}this[_0x145041(0x233)](_0x53e357);const _0x4bca73=this[_0x145041(0x1dd)][_0x145041(0x2cf)]?issueLoginToken({'workerId':_0x39a310[_0x145041(0x2fb)][_0x145041(0x269)],'email':_0x39a310[_0x145041(0x2fb)]['email'],'role':_0x39a310[_0x145041(0x2fb)][_0x145041(0x303)],'issuedAt':Date['now']()},this[_0x145041(0x1dd)]['loginAuthorization']['signingSecret']):void 0x0;await this[_0x145041(0x2a1)](_0x53e357,_0x39a310['requestId'],_0x39a310[_0x145041(0x2fb)],_0x4bca73);}async[_0x98b479(0x2ef)](_0x1c57bf,_0x487369,_0x1ab0bb){const _0x17976a=_0x98b479;if(_0x487369[_0x17976a(0x2eb)]()[_0x17976a(0x2fa)]===0x0)throw new Error(_0x17976a(0x21d));const _0x185d0e=this[_0x17976a(0x2f0)][_0x17976a(0x203)](_0x1c57bf);if(!_0x185d0e)throw new Error('login\x20authorization\x20not\x20found');const _0x82aac2=this[_0x17976a(0x2f8)][_0x17976a(0x203)](_0x185d0e[_0x17976a(0x206)]);this[_0x17976a(0x2f0)][_0x17976a(0x2f3)](_0x1c57bf),_0x82aac2?.[_0x17976a(0x28a)]===_0x1c57bf&&(_0x82aac2['pendingAuthorizationId']=void 0x0),_0x82aac2&&this[_0x17976a(0x2f7)](_0x82aac2['peer'],_0x185d0e['requestId'],_0x487369);}['onTaskUpdate'](_0x4d7d88){const _0x3c0a7d=_0x98b479;return this[_0x3c0a7d(0x2a6)][_0x3c0a7d(0x2c3)](_0x4d7d88),this;}async['sendMessage'](_0x5088c3){const _0x62c585=_0x98b479;validateSendMessageParams(_0x5088c3);const _0x3d6ea1=Date[_0x62c585(0x29a)](),_0x3ab39f=_0x5088c3[_0x62c585(0x1eb)]?this[_0x62c585(0x1c4)][_0x62c585(0x203)](_0x5088c3[_0x62c585(0x1eb)]):void 0x0;if(_0x5088c3[_0x62c585(0x1eb)]&&!_0x3ab39f)throw new Error(_0x62c585(0x2c8));const _0x113e6b=_0x5088c3['taskId']??crypto['randomUUID'](),_0x49ad74=_0x3ab39f?.['contextId']??_0x5088c3[_0x62c585(0x22a)]??crypto[_0x62c585(0x246)](),_0x472c1d={'messageId':_0x5088c3[_0x62c585(0x2e1)]??crypto[_0x62c585(0x246)](),'contextId':_0x49ad74,'taskId':_0x113e6b,'role':'user','parts':clone(_0x5088c3[_0x62c585(0x2b5)]),'metadata':_0x5088c3['metadata']?clone(_0x5088c3[_0x62c585(0x2d4)]):void 0x0},_0x4e16d8=this[_0x62c585(0x1c4)][_0x62c585(0x22d)]({'workerId':_0x5088c3['worker'][_0x62c585(0x269)],'email':_0x5088c3[_0x62c585(0x2f5)]['email'],'message':_0x472c1d,'metadata':_0x5088c3[_0x62c585(0x2d4)],'now':_0x3d6ea1});return await this[_0x62c585(0x1ee)]({'type':_0x62c585(0x210),'task':_0x4e16d8,'status':_0x4e16d8[_0x62c585(0x229)],'message':_0x472c1d}),this[_0x62c585(0x2b1)](_0x4e16d8[_0x62c585(0x274)],_0x4e16d8,_0x472c1d),_0x4e16d8;}[_0x98b479(0x259)](_0xff1808,_0x44142f={}){const _0xd1f73=_0x98b479;return this[_0xd1f73(0x1c4)]['get'](_0xff1808,_0x44142f);}[_0x98b479(0x218)](_0x69a594={}){const _0x3167b1=_0x98b479;return this[_0x3167b1(0x1c4)][_0x3167b1(0x271)](_0x69a594);}async[_0x98b479(0x1f5)](_0x1a96f){const _0x2cdd30=_0x98b479,_0x1a2a42=this['taskStore']['cancel'](_0x1a96f,Date['now']());return await this['emitTaskUpdate']({'type':_0x2cdd30(0x210),'task':_0x1a2a42,'status':_0x1a2a42[_0x2cdd30(0x229)]}),this['dispatchTaskCancel'](_0x1a2a42[_0x2cdd30(0x274)],_0x1a2a42['id']),_0x1a2a42;}async['listenWithNode'](_0x56d8d8,_0x3b28c1){const _0x37dbc4=_0x98b479,_0x3b161d=await import(_0x37dbc4(0x207)),_0xefeb71=_0x3b161d[_0x37dbc4(0x2d1)]({'hooks':this[_0x37dbc4(0x2bb)]()});this['nodeAdapter']=_0xefeb71,this[_0x37dbc4(0x230)]=createServer((_0x178bb9,_0x4fc9a3)=>{const _0x1a07a9=_0x37dbc4;_0x4fc9a3['statusCode']=0x194,_0x4fc9a3[_0x1a07a9(0x1d6)]('Not\x20Found');}),this[_0x37dbc4(0x230)]['on'](_0x37dbc4(0x264),(_0x363fab,_0x379be6,_0x2413b1)=>{const _0x4fb05a=_0x37dbc4;if(!this['matchesPath'](_0x363fab['url']??'/')){_0x379be6[_0x4fb05a(0x234)]();return;}void this[_0x4fb05a(0x308)][_0x4fb05a(0x2dd)](_0x363fab,_0x379be6,_0x2413b1)[_0x4fb05a(0x24e)](()=>{const _0x3d11eb=_0x4fb05a;_0x379be6[_0x3d11eb(0x234)]();});}),await new Promise((_0x281e2c,_0x23917d)=>{const _0x1f6801=_0x37dbc4;this[_0x1f6801(0x230)][_0x1f6801(0x2d2)](_0x1f6801(0x27b),_0x23917d),this[_0x1f6801(0x230)][_0x1f6801(0x1e5)](_0x56d8d8,_0x3b28c1,()=>_0x281e2c());});}[_0x98b479(0x2bb)](){return{'open':async _0x150237=>{this['handleSocketOpen'](_0x150237);},'message':async(_0x5ac784,_0x22d8a7)=>{const _0xaa06b2=_0x4d6b;await this[_0xaa06b2(0x1bc)](_0x5ac784,_0x22d8a7[_0xaa06b2(0x2bc)]());},'close':async _0x312c5e=>{const _0x177ded=_0x4d6b;await this[_0x177ded(0x2e5)](_0x312c5e,_0x177ded(0x2af));},'error':async()=>{}};}[_0x98b479(0x309)](_0x2fd92c){const _0x135348=_0x98b479,_0x3476a0={'peer':_0x2fd92c,'sessionId':crypto['randomUUID'](),'managerSubscriptions':new Map(),'loginTimer':setTimeout(()=>{const _0x32df73=_0x4d6b,_0x586652=this['connections'][_0x32df73(0x203)](_0x2fd92c['id']);!_0x586652?.[_0x32df73(0x1e3)]&&(_0x2fd92c[_0x32df73(0x1f4)](0xfa1,_0x32df73(0x306)),this['connections']['delete'](_0x2fd92c['id']));},this[_0x135348(0x1dd)][_0x135348(0x2c2)])};this['connections']['set'](_0x2fd92c['id'],_0x3476a0);}async['handleSocketMessage'](_0xd15ca,_0x5db0ff){const _0x2543d8=_0x98b479,_0x12ee45=parseClientMessage(_0x5db0ff);if(!_0x12ee45){this[_0x2543d8(0x286)](_0xd15ca,_0x2543d8(0x236));return;}const _0xadb62d=this[_0x2543d8(0x2f8)]['get'](_0xd15ca['id']);if(!_0xadb62d){this[_0x2543d8(0x286)](_0xd15ca,'unknown\x20connection');return;}_0x12ee45[_0x2543d8(0x21e)]!==_0x2543d8(0x2a2)&&_0xadb62d[_0x2543d8(0x1e3)]&&this[_0x2543d8(0x28b)][_0x2543d8(0x302)](_0xadb62d['identityKey'],Date[_0x2543d8(0x29a)]());if(_0xadb62d[_0x2543d8(0x28a)]&&_0x12ee45[_0x2543d8(0x21e)]!==_0x2543d8(0x2f6)&&_0x12ee45['type']!==_0x2543d8(0x2a2)){this[_0x2543d8(0x286)](_0xd15ca,_0x2543d8(0x1bb),_0x2543d8(0x242)in _0x12ee45?_0x12ee45['requestId']:void 0x0);return;}switch(_0x12ee45[_0x2543d8(0x21e)]){case _0x2543d8(0x2f6):await this['handleLoginMessage'](_0xadb62d,_0x12ee45);return;case _0x2543d8(0x2e3):await this[_0x2543d8(0x1f1)](_0xadb62d,_0x12ee45[_0x2543d8(0x242)]);return;case _0x2543d8(0x27c):await this[_0x2543d8(0x25e)](_0xadb62d,_0x12ee45);return;case _0x2543d8(0x249):await this[_0x2543d8(0x1e2)](_0xadb62d,_0x12ee45);return;case _0x2543d8(0x29f):await this['handleManagerCommandMessage'](_0xadb62d,_0x12ee45);return;case _0x2543d8(0x310):await this['handleManagerSubscribeMessage'](_0xadb62d,_0x12ee45);return;case'manager-unsubscribe':await this[_0x2543d8(0x1fe)](_0xadb62d,_0x12ee45);return;case _0x2543d8(0x255):await this['handleTaskStatusUpdateMessage'](_0xadb62d,_0x12ee45);return;case'TaskArtifactUpdate':await this['handleTaskArtifactUpdateMessage'](_0xadb62d,_0x12ee45);return;case _0x2543d8(0x2a2):_0xadb62d[_0x2543d8(0x1e3)]&&this['registry'][_0x2543d8(0x302)](_0xadb62d[_0x2543d8(0x1e3)],Date['now']());}}async[_0x98b479(0x227)](_0x18eb24,_0x194a32){const _0x287e4a=_0x98b479,_0x22dfaa=validateLoginPayload(_0x194a32[_0x287e4a(0x2fb)]);if(_0x22dfaa){this[_0x287e4a(0x286)](_0x18eb24[_0x287e4a(0x211)],_0x22dfaa,_0x194a32[_0x287e4a(0x242)]);return;}_0x18eb24[_0x287e4a(0x262)]&&(clearTimeout(_0x18eb24[_0x287e4a(0x262)]),_0x18eb24[_0x287e4a(0x262)]=void 0x0);await this[_0x287e4a(0x2c4)](_0x18eb24,'login-retried');const _0x307b99=createWorkerIdentityKey(_0x194a32['payload']['workerId'],_0x194a32['payload'][_0x287e4a(0x231)]),_0x30a89c=this[_0x287e4a(0x1ef)](_0x194a32[_0x287e4a(0x2fb)],_0x307b99);if(_0x30a89c){this[_0x287e4a(0x2f7)](_0x18eb24[_0x287e4a(0x211)],_0x194a32[_0x287e4a(0x242)],_0x30a89c);return;}if(_0x194a32[_0x287e4a(0x2fb)]['role']===_0x287e4a(0x29d)){await this['completeLogin'](_0x18eb24,_0x194a32[_0x287e4a(0x242)],_0x194a32[_0x287e4a(0x2fb)]);return;}if(!this['config'][_0x287e4a(0x2cf)]){await this[_0x287e4a(0x2a1)](_0x18eb24,_0x194a32['requestId'],_0x194a32[_0x287e4a(0x2fb)]);return;}const _0x34cfca=_0x194a32['payload']['loginToken']?verifyLoginToken(_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x225)],this[_0x287e4a(0x1dd)]['loginAuthorization'][_0x287e4a(0x254)]):null,_0x20f2dd=_0x34cfca&&_0x34cfca['workerId']===_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x269)]&&_0x34cfca[_0x287e4a(0x231)]===_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x231)]&&_0x34cfca[_0x287e4a(0x303)]===_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x303)];if(_0x20f2dd){const _0x44ae57=issueLoginToken({'workerId':_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x269)],'email':_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x231)],'role':_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x303)],'issuedAt':Date[_0x287e4a(0x29a)]()},this['config'][_0x287e4a(0x2cf)][_0x287e4a(0x254)]);await this['completeLogin'](_0x18eb24,_0x194a32[_0x287e4a(0x242)],_0x194a32[_0x287e4a(0x2fb)],_0x44ae57);return;}await this[_0x287e4a(0x27f)](_0x18eb24,_0x194a32,_0x194a32[_0x287e4a(0x2fb)][_0x287e4a(0x225)]?_0x287e4a(0x2d0):_0x287e4a(0x2ff));}[_0x98b479(0x1ef)](_0x50339f,_0x2634b9){const _0xae9549=_0x98b479;if(_0x50339f[_0xae9549(0x303)]!=='manager')return null;if(!this[_0xae9549(0x1dd)]['managerToken']||this[_0xae9549(0x1dd)][_0xae9549(0x24f)][_0xae9549(0x2eb)]()[_0xae9549(0x2fa)]===0x0)return _0xae9549(0x223);if(_0x50339f[_0xae9549(0x24f)]!==this[_0xae9549(0x1dd)][_0xae9549(0x24f)])return _0xae9549(0x20c);const _0x3ef907=this['registry'][_0xae9549(0x1cf)]({'role':_0xae9549(0x29d),'connectionState':'connected'});if(_0x3ef907[_0xae9549(0x294)](_0x3b54f7=>createWorkerIdentityKey(_0x3b54f7[_0xae9549(0x269)],_0x3b54f7[_0xae9549(0x231)])!==_0x2634b9))return _0xae9549(0x2b6);if(_0x3ef907[_0xae9549(0x2fa)]>0x0)return _0xae9549(0x2b6);return null;}async[_0x98b479(0x27f)](_0xca0fbf,_0x42610d,_0x218c48){const _0x31fe84=_0x98b479,_0x2e3e37={'authorizationId':crypto[_0x31fe84(0x246)](),'workerId':_0x42610d[_0x31fe84(0x2fb)]['workerId'],'email':_0x42610d[_0x31fe84(0x2fb)][_0x31fe84(0x231)],'role':_0x42610d['payload'][_0x31fe84(0x303)],'capabilitySummary':_0x42610d[_0x31fe84(0x2fb)][_0x31fe84(0x1d9)],'initialAvailability':_0x42610d[_0x31fe84(0x2fb)][_0x31fe84(0x307)]??_0x31fe84(0x267),'requestedAt':Date[_0x31fe84(0x29a)](),'reason':_0x218c48};_0xca0fbf[_0x31fe84(0x28a)]=_0x2e3e37[_0x31fe84(0x2a4)],this[_0x31fe84(0x2f0)][_0x31fe84(0x27e)](_0x2e3e37[_0x31fe84(0x2a4)],{'authorization':_0x2e3e37,'peerId':_0xca0fbf[_0x31fe84(0x211)]['id'],'requestId':_0x42610d[_0x31fe84(0x242)],'payload':clone(_0x42610d['payload'])}),await this[_0x31fe84(0x1f8)]({'type':_0x31fe84(0x26e),'authorization':clonePendingAuthorization(_0x2e3e37)}),this[_0x31fe84(0x2dc)](_0xca0fbf[_0x31fe84(0x211)],_0x42610d[_0x31fe84(0x242)],_0x2e3e37[_0x31fe84(0x2a4)],_0x218c48);}async['completeLogin'](_0x2868e1,_0x3cdfc1,_0xf67d23,_0x13d012){const _0x156d83=_0x98b479,_0x3b9698=Date[_0x156d83(0x29a)](),_0x3f9276=createWorkerIdentityKey(_0xf67d23[_0x156d83(0x269)],_0xf67d23[_0x156d83(0x231)]),_0x2e6971=this[_0x156d83(0x25a)][_0x156d83(0x203)](_0x3f9276),_0x51a426=_0x2e6971&&_0x2e6971!==_0x2868e1[_0x156d83(0x211)]['id']?this[_0x156d83(0x2f8)][_0x156d83(0x203)](_0x2e6971):void 0x0;_0x51a426?.['identityKey']===_0x3f9276&&await this[_0x156d83(0x297)](_0x51a426,_0x156d83(0x2e6));_0x2868e1[_0x156d83(0x262)]&&(clearTimeout(_0x2868e1[_0x156d83(0x262)]),_0x2868e1[_0x156d83(0x262)]=void 0x0);this['clearPendingAuthorization'](_0x2868e1),_0x2868e1[_0x156d83(0x1e3)]=_0x3f9276,this[_0x156d83(0x25a)][_0x156d83(0x27e)](_0x3f9276,_0x2868e1['peer']['id']);const _0x2f4ceb=this['registry'][_0x156d83(0x258)](_0x2868e1[_0x156d83(0x2b8)],_0xf67d23,_0x3b9698);await this['emitWorkerEvent']({'type':_0x156d83(0x2f6),'worker':this[_0x156d83(0x22b)](_0x2f4ceb[_0x156d83(0x22e)])}),this[_0x156d83(0x2cd)](_0x3f9276),this[_0x156d83(0x1d4)](_0x2868e1['peer'],_0x3cdfc1,_0x13d012);}[_0x98b479(0x233)](_0x158c6f){const _0x83dd5=_0x98b479;if(!_0x158c6f[_0x83dd5(0x28a)])return;this[_0x83dd5(0x2f0)]['delete'](_0x158c6f[_0x83dd5(0x28a)]),_0x158c6f[_0x83dd5(0x28a)]=void 0x0;}async['cancelPendingAuthorization'](_0x2a35ee,_0x1498b7){const _0xc43f04=_0x98b479;if(!_0x2a35ee[_0xc43f04(0x28a)])return;const _0x2bfdfc=_0x2a35ee[_0xc43f04(0x28a)],_0x5c5b7b=this[_0xc43f04(0x2f0)][_0xc43f04(0x203)](_0x2bfdfc);this[_0xc43f04(0x2f0)][_0xc43f04(0x2f3)](_0x2bfdfc),_0x2a35ee[_0xc43f04(0x28a)]=void 0x0;if(!_0x5c5b7b)return;await this['emitLoginAuthorizationEvent']({'type':_0xc43f04(0x2d3),'authorization':clonePendingAuthorization(_0x5c5b7b[_0xc43f04(0x2ba)]),'cause':_0x1498b7});}async['handleLogoutMessage'](_0x5e0ea5,_0x5b3e6c){const _0xd21344=_0x98b479;if(!_0x5e0ea5['identityKey']){this[_0xd21344(0x286)](_0x5e0ea5[_0xd21344(0x211)],'worker\x20is\x20not\x20logged\x20in',_0x5b3e6c);return;}await this[_0xd21344(0x27d)](_0x5e0ea5);const _0x15616b=this[_0xd21344(0x28b)][_0xd21344(0x2f4)](_0x5e0ea5[_0xd21344(0x1e3)]);this[_0xd21344(0x25a)][_0xd21344(0x2f3)](_0x5e0ea5[_0xd21344(0x1e3)]),_0x5e0ea5[_0xd21344(0x1e3)]=void 0x0,_0x15616b&&await this[_0xd21344(0x299)]({'type':'logout','worker':this[_0xd21344(0x22b)](_0x15616b['snapshot'])}),this['sendAck'](_0x5e0ea5[_0xd21344(0x211)],_0x5b3e6c);}async[_0x98b479(0x25e)](_0x14dc5c,_0x4b36df){const _0x188a2e=_0x98b479;if(!_0x14dc5c[_0x188a2e(0x1e3)]){this[_0x188a2e(0x286)](_0x14dc5c[_0x188a2e(0x211)],_0x188a2e(0x1bb),_0x4b36df['requestId']);return;}const _0x343882=this[_0x188a2e(0x28b)][_0x188a2e(0x203)](_0x14dc5c['identityKey']);if(!_0x343882){this[_0x188a2e(0x286)](_0x14dc5c[_0x188a2e(0x211)],_0x188a2e(0x1c2),_0x4b36df[_0x188a2e(0x242)]);return;}const _0x2a7549=this[_0x188a2e(0x28b)][_0x188a2e(0x30d)](_0x14dc5c['identityKey'],_0x4b36df[_0x188a2e(0x1e4)],Date[_0x188a2e(0x29a)]());if(!_0x2a7549){this[_0x188a2e(0x286)](_0x14dc5c[_0x188a2e(0x211)],_0x188a2e(0x1c2),_0x4b36df[_0x188a2e(0x242)]);return;}await this[_0x188a2e(0x299)]({'type':'availability-change','worker':this[_0x188a2e(0x22b)](_0x2a7549['snapshot']),'previousAvailability':_0x343882[_0x188a2e(0x22e)][_0x188a2e(0x1e4)],'previousAbnormalSource':_0x343882['snapshot'][_0x188a2e(0x30c)],'previousAbnormalReason':_0x343882[_0x188a2e(0x22e)][_0x188a2e(0x28d)]}),this[_0x188a2e(0x2ec)](_0x14dc5c[_0x188a2e(0x211)],_0x4b36df[_0x188a2e(0x242)]);}async['handleReportExceptionMessage'](_0x30eb22,_0x13d54d){const _0x2d4eff=_0x98b479;if(!_0x30eb22[_0x2d4eff(0x1e3)]){this[_0x2d4eff(0x286)](_0x30eb22[_0x2d4eff(0x211)],_0x2d4eff(0x1bb),_0x13d54d[_0x2d4eff(0x242)]);return;}if(_0x13d54d['reason'][_0x2d4eff(0x2eb)]()[_0x2d4eff(0x2fa)]===0x0){this[_0x2d4eff(0x286)](_0x30eb22[_0x2d4eff(0x211)],'exception\x20reason\x20is\x20required',_0x13d54d[_0x2d4eff(0x242)]);return;}const _0x561128=this[_0x2d4eff(0x28b)][_0x2d4eff(0x203)](_0x30eb22[_0x2d4eff(0x1e3)]);if(!_0x561128){this[_0x2d4eff(0x286)](_0x30eb22[_0x2d4eff(0x211)],_0x2d4eff(0x1c2),_0x13d54d[_0x2d4eff(0x242)]);return;}const _0x170be0=this['registry'][_0x2d4eff(0x1ff)](_0x30eb22[_0x2d4eff(0x1e3)],_0x13d54d['reason'],Date['now']());if(!_0x170be0){this[_0x2d4eff(0x286)](_0x30eb22[_0x2d4eff(0x211)],_0x2d4eff(0x1c2),_0x13d54d['requestId']);return;}await this['emitWorkerEvent']({'type':_0x2d4eff(0x283),'worker':this[_0x2d4eff(0x22b)](_0x170be0[_0x2d4eff(0x22e)]),'previousAvailability':_0x561128[_0x2d4eff(0x22e)][_0x2d4eff(0x1e4)],'previousAbnormalSource':_0x561128[_0x2d4eff(0x22e)][_0x2d4eff(0x30c)],'previousAbnormalReason':_0x561128[_0x2d4eff(0x22e)][_0x2d4eff(0x28d)]}),this['sendAck'](_0x30eb22[_0x2d4eff(0x211)],_0x13d54d['requestId']);}async['handleTaskStatusUpdateMessage'](_0x598d95,_0x3ee692){const _0x44d6e7=_0x98b479;if(!_0x598d95['identityKey']){this[_0x44d6e7(0x286)](_0x598d95[_0x44d6e7(0x211)],_0x44d6e7(0x1bb),_0x3ee692[_0x44d6e7(0x242)]);return;}const _0x1d26dc=this[_0x44d6e7(0x1c4)][_0x44d6e7(0x203)](_0x3ee692[_0x44d6e7(0x1eb)]);if(!_0x1d26dc){this[_0x44d6e7(0x286)](_0x598d95[_0x44d6e7(0x211)],_0x44d6e7(0x2c8),_0x3ee692[_0x44d6e7(0x242)]);return;}if(_0x1d26dc[_0x44d6e7(0x274)]!==_0x598d95[_0x44d6e7(0x1e3)]){this[_0x44d6e7(0x286)](_0x598d95[_0x44d6e7(0x211)],_0x44d6e7(0x304),_0x3ee692['requestId']);return;}try{validateTaskStatusUpdate(_0x3ee692[_0x44d6e7(0x229)],_0x1d26dc[_0x44d6e7(0x229)]);const _0x401122=this[_0x44d6e7(0x1c4)]['updateAvailability'](_0x3ee692[_0x44d6e7(0x1eb)],clone(_0x3ee692['status']),_0x3ee692[_0x44d6e7(0x2be)]?clone(_0x3ee692[_0x44d6e7(0x2be)]):void 0x0);await this[_0x44d6e7(0x1ee)]({'type':_0x44d6e7(0x210),'task':_0x401122,'status':_0x401122['status'],'message':_0x3ee692[_0x44d6e7(0x2be)]?clone(_0x3ee692['message']):void 0x0}),this[_0x44d6e7(0x2ec)](_0x598d95[_0x44d6e7(0x211)],_0x3ee692['requestId']);}catch(_0x42919d){this[_0x44d6e7(0x286)](_0x598d95[_0x44d6e7(0x211)],_0x42919d instanceof Error?_0x42919d['message']:_0x44d6e7(0x305),_0x3ee692[_0x44d6e7(0x242)]);}}async[_0x98b479(0x30b)](_0x4aa19a,_0x2984b5){const _0x583f6d=_0x98b479;if(!_0x4aa19a[_0x583f6d(0x1e3)]){this[_0x583f6d(0x286)](_0x4aa19a[_0x583f6d(0x211)],_0x583f6d(0x1bb),_0x2984b5[_0x583f6d(0x242)]);return;}const _0x88faf3=this[_0x583f6d(0x1c4)]['get'](_0x2984b5[_0x583f6d(0x1eb)]);if(!_0x88faf3){this['sendError'](_0x4aa19a[_0x583f6d(0x211)],'task\x20not\x20found',_0x2984b5[_0x583f6d(0x242)]);return;}if(_0x88faf3[_0x583f6d(0x274)]!==_0x4aa19a['identityKey']){this['sendError'](_0x4aa19a[_0x583f6d(0x211)],_0x583f6d(0x304),_0x2984b5['requestId']);return;}try{validateArtifact(_0x2984b5[_0x583f6d(0x2e4)]);const _0xcf6560=this[_0x583f6d(0x1c4)]['addArtifact'](_0x2984b5['taskId'],_0x2984b5[_0x583f6d(0x2e4)]);await this[_0x583f6d(0x1ee)]({'type':_0x583f6d(0x289),'task':_0xcf6560,'artifact':clone(_0x2984b5['artifact'])}),this[_0x583f6d(0x2ec)](_0x4aa19a['peer'],_0x2984b5['requestId']);}catch(_0x510e85){this['sendError'](_0x4aa19a['peer'],_0x510e85 instanceof Error?_0x510e85[_0x583f6d(0x2be)]:_0x583f6d(0x208),_0x2984b5[_0x583f6d(0x242)]);}}async[_0x98b479(0x1d7)](_0x3224c9,_0x5180a2){const _0x372c62=_0x98b479,_0x1c3b65=this[_0x372c62(0x28f)](_0x3224c9,_0x5180a2[_0x372c62(0x242)]);if(!_0x1c3b65)return;if(!this[_0x372c62(0x285)]){this['sendError'](_0x3224c9[_0x372c62(0x211)],_0x372c62(0x22f),_0x5180a2[_0x372c62(0x242)]);return;}try{const _0x3370dc=await this[_0x372c62(0x285)][_0x372c62(0x1f2)]({'name':_0x5180a2['name'],'args':cloneIfDefined(_0x5180a2[_0x372c62(0x312)])},_0x1c3b65);this[_0x372c62(0x20e)](_0x3224c9[_0x372c62(0x211)],_0x5180a2[_0x372c62(0x242)],cloneIfDefined(_0x3370dc));}catch(_0x569239){this[_0x372c62(0x286)](_0x3224c9[_0x372c62(0x211)],_0x569239 instanceof Error?_0x569239[_0x372c62(0x2be)]:_0x372c62(0x23d),_0x5180a2[_0x372c62(0x242)]);}}async[_0x98b479(0x23a)](_0x5130f7,_0x526bfa){const _0x395585=_0x98b479,_0x33a9e9=this[_0x395585(0x28f)](_0x5130f7,_0x526bfa[_0x395585(0x242)]);if(!_0x33a9e9)return;if(!this[_0x395585(0x285)]?.[_0x395585(0x1ce)]){this[_0x395585(0x286)](_0x5130f7[_0x395585(0x211)],_0x395585(0x313),_0x526bfa['requestId']);return;}await this[_0x395585(0x2b3)](_0x5130f7,_0x526bfa[_0x395585(0x263)]);const _0x43d2b9=await this['managerControlPlane']['subscribe'](_0x526bfa[_0x395585(0x263)],async _0xcbce52=>{const _0x226346=_0x395585;if(!this[_0x226346(0x2f8)][_0x226346(0x2cc)](_0x5130f7[_0x226346(0x211)]['id'])||!_0x5130f7[_0x226346(0x1e3)])return;this[_0x226346(0x220)](_0x5130f7[_0x226346(0x211)],{'eventName':_0xcbce52[_0x226346(0x263)],'payload':cloneIfDefined(_0xcbce52[_0x226346(0x2fb)])});},_0x33a9e9);_0x5130f7[_0x395585(0x2de)]['set'](_0x526bfa[_0x395585(0x263)],_0x43d2b9),this[_0x395585(0x2ec)](_0x5130f7['peer'],_0x526bfa[_0x395585(0x242)]);}async[_0x98b479(0x1fe)](_0x38b021,_0xe199da){const _0x3f5c82=_0x98b479,_0x2cddef=this[_0x3f5c82(0x28f)](_0x38b021,_0xe199da[_0x3f5c82(0x242)]);if(!_0x2cddef)return;await this['disposeManagerSubscription'](_0x38b021,_0xe199da[_0x3f5c82(0x263)]),this[_0x3f5c82(0x2ec)](_0x38b021[_0x3f5c82(0x211)],_0xe199da[_0x3f5c82(0x242)]);}async[_0x98b479(0x2e5)](_0x3f9ae9,_0x49270c){const _0x3401f4=_0x98b479,_0x5d2805=this[_0x3401f4(0x2f8)][_0x3401f4(0x203)](_0x3f9ae9['id']);if(!_0x5d2805)return;_0x5d2805[_0x3401f4(0x262)]&&clearTimeout(_0x5d2805[_0x3401f4(0x262)]);await this[_0x3401f4(0x27d)](_0x5d2805),this[_0x3401f4(0x2f8)]['delete'](_0x3f9ae9['id']),await this['cancelPendingAuthorization'](_0x5d2805,_0x49270c);if(!_0x5d2805[_0x3401f4(0x1e3)])return;if(this[_0x3401f4(0x25a)]['get'](_0x5d2805['identityKey'])!==_0x3f9ae9['id'])return;const _0x575365=this[_0x3401f4(0x28b)]['markDisconnected'](_0x5d2805[_0x3401f4(0x1e3)],_0x49270c,Date[_0x3401f4(0x29a)]());this['identityToPeerId'][_0x3401f4(0x2f3)](_0x5d2805[_0x3401f4(0x1e3)]),_0x575365&&await this['emitWorkerEvent']({'type':_0x3401f4(0x2c1),'worker':this[_0x3401f4(0x22b)](_0x575365[_0x3401f4(0x22e)]),'cause':_0x49270c});}async['forceDisconnect'](_0x24db4f,_0x11c838){const _0x588b19=_0x98b479;this[_0x588b19(0x2f8)][_0x588b19(0x2f3)](_0x24db4f[_0x588b19(0x211)]['id']);_0x24db4f['loginTimer']&&clearTimeout(_0x24db4f[_0x588b19(0x262)]);await this[_0x588b19(0x27d)](_0x24db4f),await this['cancelPendingAuthorization'](_0x24db4f,_0x11c838);if(_0x24db4f['identityKey']){const _0x59f886=this[_0x588b19(0x28b)][_0x588b19(0x318)](_0x24db4f[_0x588b19(0x1e3)],_0x11c838,Date['now']());this[_0x588b19(0x25a)][_0x588b19(0x2f3)](_0x24db4f['identityKey']),_0x24db4f[_0x588b19(0x1e3)]=void 0x0,_0x59f886&&await this[_0x588b19(0x299)]({'type':_0x588b19(0x2c1),'worker':this['deriveWorkerSnapshot'](_0x59f886[_0x588b19(0x22e)]),'cause':_0x11c838});}try{_0x24db4f[_0x588b19(0x211)]['close'](0xfa2,_0x588b19(0x288));}catch{_0x24db4f[_0x588b19(0x211)][_0x588b19(0x268)]();}}[_0x98b479(0x25c)](){const _0x1d4ab0=_0x98b479;this[_0x1d4ab0(0x213)]=setInterval(()=>{const _0x199c0e=_0x1d4ab0,_0x2fea4f=Date[_0x199c0e(0x29a)]();void this[_0x199c0e(0x2ad)](_0x2fea4f);},this['config'][_0x1d4ab0(0x240)]);}async['runHeartbeatSweep'](_0x440f24){const _0x509d40=_0x98b479;for(const _0x5834b9 of this['connections'][_0x509d40(0x27a)]()){if(!_0x5834b9[_0x509d40(0x1e3)])continue;const _0x3341b3=this[_0x509d40(0x28b)]['get'](_0x5834b9[_0x509d40(0x1e3)]);if(!_0x3341b3)continue;if(_0x440f24-_0x3341b3[_0x509d40(0x22e)][_0x509d40(0x315)]>this[_0x509d40(0x1dd)][_0x509d40(0x2e7)]){await this['forceDisconnect'](_0x5834b9,_0x509d40(0x20d));continue;}_0x5834b9['peer']['send'](stringifyServerMessage({'type':_0x509d40(0x1bf),'sentAt':_0x440f24}));}}[_0x98b479(0x2bd)](_0x277e5f){const _0x4649de=_0x98b479,_0x168c9c=_0x277e5f['startsWith'](_0x4649de(0x265))?new URL(_0x277e5f)[_0x4649de(0x23b)]:new URL(_0x277e5f,_0x4649de(0x1d1))['pathname'];return _0x168c9c===this[_0x4649de(0x1dd)][_0x4649de(0x1c5)];}[_0x98b479(0x2ec)](_0x18897a,_0x155c0b){const _0x228c05=_0x98b479,_0x4fd383={'type':'ack','requestId':_0x155c0b};_0x18897a[_0x228c05(0x1cc)](stringifyServerMessage(_0x4fd383));}[_0x98b479(0x2dc)](_0x1b93b0,_0x33bf2f,_0x2ab6a4,_0x458c19){const _0x299132=_0x98b479,_0x136ddf={'type':_0x299132(0x256),'requestId':_0x33bf2f,'authorizationId':_0x2ab6a4,'reason':_0x458c19};_0x1b93b0['send'](stringifyServerMessage(_0x136ddf));}[_0x98b479(0x1d4)](_0x5e2b87,_0x7ade2d,_0x3258cc){const _0x34a519=_0x98b479,_0x499631={'type':'login-approved','requestId':_0x7ade2d,'loginToken':_0x3258cc};_0x5e2b87[_0x34a519(0x1cc)](stringifyServerMessage(_0x499631));}[_0x98b479(0x2f7)](_0x369db8,_0x881ae2,_0x47b6f6){const _0x338ba1=_0x98b479,_0x3a3645={'type':'login-rejected','requestId':_0x881ae2,'message':_0x47b6f6};_0x369db8[_0x338ba1(0x1cc)](stringifyServerMessage(_0x3a3645));}['sendError'](_0x10be5d,_0x3741fb,_0x5ec5bf){const _0x475363=_0x98b479,_0x4b6f2c={'type':_0x475363(0x27b),'message':_0x3741fb,'requestId':_0x5ec5bf};_0x10be5d['send'](stringifyServerMessage(_0x4b6f2c));}[_0x98b479(0x2b1)](_0x46f7c4,_0x5f1420,_0x5ba383){const _0x28bc12=_0x98b479,_0x1bcff3=this[_0x28bc12(0x25a)][_0x28bc12(0x203)](_0x46f7c4);if(!_0x1bcff3)return;const _0x3d7a73=this[_0x28bc12(0x2f8)][_0x28bc12(0x203)](_0x1bcff3);if(!_0x3d7a73)return;const _0x238ae9={'type':'SendMessage','task':clone(_0x5f1420),'message':clone(_0x5ba383)};_0x3d7a73[_0x28bc12(0x211)][_0x28bc12(0x1cc)](stringifyServerMessage(_0x238ae9));}['dispatchTaskCancel'](_0x577916,_0x165767){const _0x3a004b=_0x98b479,_0x1109eb=this[_0x3a004b(0x25a)]['get'](_0x577916);if(!_0x1109eb)return;const _0x316f5f=this[_0x3a004b(0x2f8)][_0x3a004b(0x203)](_0x1109eb);if(!_0x316f5f)return;_0x316f5f[_0x3a004b(0x211)][_0x3a004b(0x1cc)](stringifyServerMessage({'type':_0x3a004b(0x1cd),'taskId':_0x165767}));}[_0x98b479(0x2cd)](_0x3c1ab7){const _0x5d94c7=_0x98b479,_0x3122e5=this[_0x5d94c7(0x1c4)][_0x5d94c7(0x2ab)](_0x3c1ab7);for(const _0x4c3957 of _0x3122e5){const _0x56e688=this[_0x5d94c7(0x1c4)][_0x5d94c7(0x26d)](_0x4c3957['id']);if(!_0x56e688)continue;this[_0x5d94c7(0x2b1)](_0x3c1ab7,_0x4c3957,_0x56e688);}}[_0x98b479(0x28f)](_0x694d66,_0x2b17ef){const _0x4bc0a4=_0x98b479;if(!_0x694d66['identityKey'])return this[_0x4bc0a4(0x286)](_0x694d66[_0x4bc0a4(0x211)],_0x4bc0a4(0x1bb),_0x2b17ef),null;const _0x32c7e0=this[_0x4bc0a4(0x28b)][_0x4bc0a4(0x203)](_0x694d66[_0x4bc0a4(0x1e3)])?.['snapshot'];if(!_0x32c7e0)return this[_0x4bc0a4(0x286)](_0x694d66[_0x4bc0a4(0x211)],_0x4bc0a4(0x1c2),_0x2b17ef),null;const _0x3f2f5d=this[_0x4bc0a4(0x22b)](_0x32c7e0);if(_0x3f2f5d[_0x4bc0a4(0x303)]!==_0x4bc0a4(0x29d))return this[_0x4bc0a4(0x286)](_0x694d66[_0x4bc0a4(0x211)],_0x4bc0a4(0x219),_0x2b17ef),null;return{'worker':_0x3f2f5d};}async[_0x98b479(0x27d)](_0x4c1ab8){const _0x3900c3=_0x98b479,_0x4fbf37=[..._0x4c1ab8['managerSubscriptions']['entries']()];_0x4c1ab8[_0x3900c3(0x2de)][_0x3900c3(0x317)]();for(const [,_0xe57945]of _0x4fbf37){typeof _0xe57945===_0x3900c3(0x251)&&await _0xe57945();}}async[_0x98b479(0x2b3)](_0x1be0f5,_0x3e279f){const _0x320c5c=_0x98b479,_0x2c408b=_0x1be0f5[_0x320c5c(0x2de)][_0x320c5c(0x203)](_0x3e279f);_0x1be0f5[_0x320c5c(0x2de)]['delete'](_0x3e279f),typeof _0x2c408b==='function'&&await _0x2c408b();}[_0x98b479(0x20e)](_0x4509d2,_0xdd3966,_0x2f96d3){const _0x556957=_0x98b479,_0x29cecc={'type':_0x556957(0x239),'requestId':_0xdd3966,'result':_0x2f96d3};_0x4509d2['send'](stringifyServerMessage(_0x29cecc));}[_0x98b479(0x220)](_0x10fef5,_0xfc91d2){const _0x1a102d=_0x98b479,_0x5c78c2={'type':_0x1a102d(0x26f),'eventName':_0xfc91d2[_0x1a102d(0x263)],'payload':_0xfc91d2[_0x1a102d(0x2fb)]};_0x10fef5[_0x1a102d(0x1cc)](stringifyServerMessage(_0x5c78c2));}[_0x98b479(0x22b)](_0x29296f){const _0x8f271b=_0x98b479,_0x27f126=createWorkerIdentityKey(_0x29296f['workerId'],_0x29296f[_0x8f271b(0x231)]),_0x16e701=this[_0x8f271b(0x1c4)][_0x8f271b(0x284)](_0x27f126)['length'],_0x33143b=_0x16e701>0x0?_0x8f271b(0x235):_0x8f271b(0x2a3);return{..._0x29296f,'activityState':_0x33143b,'activeTaskCount':_0x16e701};}async[_0x98b479(0x299)](_0x41bf05){const _0x583316=_0x98b479;for(const _0x152f53 of this[_0x583316(0x2a7)]){try{await _0x152f53({..._0x41bf05,'worker':cloneWorkerSnapshot(_0x41bf05['worker'])});}catch{}}}async[_0x98b479(0x1f8)](_0x354229){const _0x16cde1=_0x98b479;for(const _0x5b6c81 of this[_0x16cde1(0x2d5)]){try{_0x354229[_0x16cde1(0x21e)]===_0x16cde1(0x26e)?await _0x5b6c81({'type':'required','authorization':clonePendingAuthorization(_0x354229[_0x16cde1(0x2ba)])}):await _0x5b6c81({'type':_0x16cde1(0x2d3),'authorization':clonePendingAuthorization(_0x354229[_0x16cde1(0x2ba)]),'cause':_0x354229[_0x16cde1(0x228)]});}catch{}}}async[_0x98b479(0x1ee)](_0x31eeea){const _0x4737ff=_0x98b479;for(const _0x37042e of this[_0x4737ff(0x2a6)]){try{_0x31eeea[_0x4737ff(0x21e)]===_0x4737ff(0x210)?await _0x37042e({'type':_0x4737ff(0x210),'task':clone(_0x31eeea[_0x4737ff(0x2f1)]),'status':clone(_0x31eeea[_0x4737ff(0x229)]),'message':_0x31eeea[_0x4737ff(0x2be)]?clone(_0x31eeea[_0x4737ff(0x2be)]):void 0x0}):await _0x37042e({'type':_0x4737ff(0x289),'task':clone(_0x31eeea[_0x4737ff(0x2f1)]),'artifact':clone(_0x31eeea[_0x4737ff(0x2e4)])});}catch{}}}};function cloneWorkerSnapshot(_0x283bee){return{..._0x283bee};}function clonePendingAuthorization(_0x1a1f57){return{..._0x1a1f57};}function cloneIfDefined(_0x53bd0d){return _0x53bd0d===void 0x0?_0x53bd0d:clone(_0x53bd0d);}function resolveLoginAuthorizationConfig(_0x5a9021){const _0x16e26b=_0x98b479;if(_0x5a9021===![])return![];if(!_0x5a9021||typeof _0x5a9021[_0x16e26b(0x254)]!==_0x16e26b(0x260)||_0x5a9021[_0x16e26b(0x254)][_0x16e26b(0x2eb)]()[_0x16e26b(0x2fa)]===0x0)throw new Error('loginAuthorization.signingSecret\x20is\x20required');return{'mode':'manual','signingSecret':_0x5a9021[_0x16e26b(0x254)][_0x16e26b(0x2eb)]()};}function validateLoginPayload(_0x3fc4d8){const _0x4852f9=_0x98b479;if(!_0x3fc4d8||typeof _0x3fc4d8!==_0x4852f9(0x2a8))return _0x4852f9(0x2c9);if(typeof _0x3fc4d8[_0x4852f9(0x269)]!==_0x4852f9(0x260)||_0x3fc4d8[_0x4852f9(0x269)][_0x4852f9(0x2eb)]()[_0x4852f9(0x2fa)]===0x0)return _0x4852f9(0x301);if(typeof _0x3fc4d8[_0x4852f9(0x231)]!==_0x4852f9(0x260)||_0x3fc4d8[_0x4852f9(0x231)][_0x4852f9(0x2eb)]()[_0x4852f9(0x2fa)]===0x0)return _0x4852f9(0x20f);if(_0x3fc4d8[_0x4852f9(0x303)]!=='environment-operator'&&_0x3fc4d8['role']!==_0x4852f9(0x224)&&_0x3fc4d8['role']!=='verifier'&&_0x3fc4d8[_0x4852f9(0x303)]!==_0x4852f9(0x29d))return _0x4852f9(0x215);if(_0x3fc4d8[_0x4852f9(0x307)]!==void 0x0&&_0x3fc4d8[_0x4852f9(0x307)]!==_0x4852f9(0x267)&&_0x3fc4d8['initialAvailability']!==_0x4852f9(0x1cb)&&_0x3fc4d8[_0x4852f9(0x307)]!==_0x4852f9(0x2b9))return _0x4852f9(0x2db);if(typeof _0x3fc4d8['capabilitySummary']!==_0x4852f9(0x260)||_0x3fc4d8[_0x4852f9(0x1d9)][_0x4852f9(0x2eb)]()['length']===0x0)return _0x4852f9(0x1e0);return null;}function validateSendMessageParams(_0x12cf28){const _0x14d4a7=_0x98b479;if(!_0x12cf28[_0x14d4a7(0x2f5)][_0x14d4a7(0x269)][_0x14d4a7(0x2eb)]())throw new Error(_0x14d4a7(0x226));if(!_0x12cf28[_0x14d4a7(0x2f5)][_0x14d4a7(0x231)]['trim']())throw new Error(_0x14d4a7(0x1d2));validateParts(_0x12cf28[_0x14d4a7(0x2b5)]);}function validateTaskStatusUpdate(_0x5c303d,_0x1fa1c4){const _0x3532c5=_0x98b479,_0x170e1a=['submitted',_0x3532c5(0x276),_0x3532c5(0x1ea),_0x3532c5(0x295),'failed',_0x3532c5(0x2d3),_0x3532c5(0x1ca)];if(!_0x170e1a[_0x3532c5(0x29e)](_0x5c303d[_0x3532c5(0x28c)]))throw new Error(_0x3532c5(0x1c7));if(isTerminalTaskState(_0x1fa1c4[_0x3532c5(0x28c)]))throw new Error(_0x3532c5(0x2ac));}function validateArtifact(_0x4eaff7){const _0x50bfdc=_0x98b479;if(!_0x4eaff7['name'][_0x50bfdc(0x2eb)]())throw new Error('artifact\x20name\x20is\x20required');validateParts(_0x4eaff7[_0x50bfdc(0x2b5)]);}function validateParts(_0x950140){const _0x31a754=_0x98b479;if(!Array[_0x31a754(0x1fb)](_0x950140)||_0x950140[_0x31a754(0x2fa)]===0x0)throw new Error(_0x31a754(0x1e8));for(const _0x482707 of _0x950140){if(_0x482707[_0x31a754(0x21e)]===_0x31a754(0x2bc)&&_0x482707[_0x31a754(0x2bc)][_0x31a754(0x2eb)]()['length']===0x0)throw new Error(_0x31a754(0x202));if(_0x482707['type']===_0x31a754(0x2c5)&&_0x482707[_0x31a754(0x247)][_0x31a754(0x2eb)]()[_0x31a754(0x2fa)]===0x0)throw new Error(_0x31a754(0x232));}}export{WorkerClientSDK,WorkerServerSDK,isTerminalTaskState,issueLoginToken,resolveDefaultWorkerCredentialFile,splitWorkerKey,verifyLoginToken};
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@meego-harness/worker-sdk",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"description": "Meego harness worker server and client SDK",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.cjs"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"main": "./dist/index.cjs",
|
|
15
|
+
"module": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"files": [
|
|
18
|
+
"README.md",
|
|
19
|
+
"README_CN.md",
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"crossws": "0.4.5"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^20.19.39",
|
|
27
|
+
"tsup": "^8.5.1",
|
|
28
|
+
"typescript": "^5.9.3",
|
|
29
|
+
"vite": "^7.1.12",
|
|
30
|
+
"vitest": "^4.1.4"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsup",
|
|
37
|
+
"build:release": "pnpm build && node ../../scripts/release-obfuscate.mjs dist",
|
|
38
|
+
"dev": "tsup --watch",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"test:watch": "vitest",
|
|
41
|
+
"typecheck": "tsc --noEmit",
|
|
42
|
+
"clean": "rm -rf dist"
|
|
43
|
+
}
|
|
44
|
+
}
|