@phpsandbox/sdk 0.0.49 → 0.0.52
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/LICENSE +21 -0
- package/README.md +1 -1
- package/dist/auth.d.ts +0 -1
- package/dist/auth.js +0 -1
- package/dist/beacon/index.d.ts +4 -5
- package/dist/beacon/index.js +11 -12
- package/dist/beacon/navigator.d.ts +1 -2
- package/dist/beacon/navigator.js +0 -1
- package/dist/beacon/types.d.ts +12 -13
- package/dist/beacon/types.js +0 -1
- package/dist/browser/phpsandbox-sdk.esm.js +282 -479
- package/dist/browser/phpsandbox-sdk.esm.min.js +2 -3
- package/dist/browser/phpsandbox-sdk.iife.js +277 -479
- package/dist/browser/phpsandbox-sdk.iife.min.js +2 -3
- package/dist/composer.d.ts +2 -3
- package/dist/composer.js +0 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.js +0 -1
- package/dist/container.d.ts +0 -1
- package/dist/container.js +0 -1
- package/dist/errors/index.d.ts +0 -1
- package/dist/errors/index.js +0 -1
- package/dist/events/index.d.ts +15 -15
- package/dist/events/index.js +16 -9
- package/dist/filesystem.d.ts +6 -7
- package/dist/filesystem.js +36 -14
- package/dist/git.d.ts +0 -1
- package/dist/git.js +0 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +38 -25
- package/dist/laravel.d.ts +1 -2
- package/dist/laravel.js +1 -2
- package/dist/log.d.ts +3 -4
- package/dist/log.js +1 -2
- package/dist/lsp.d.ts +10 -11
- package/dist/lsp.js +9 -10
- package/dist/repl.d.ts +3 -4
- package/dist/repl.js +2 -3
- package/dist/services.d.ts +0 -1
- package/dist/services.js +0 -1
- package/dist/shell.d.ts +1 -2
- package/dist/shell.js +1 -2
- package/dist/socket/index.d.ts +23 -129
- package/dist/socket/index.js +60 -350
- package/dist/terminal.d.ts +2 -3
- package/dist/terminal.js +45 -26
- package/dist/types.d.ts +0 -1
- package/dist/types.js +0 -1
- package/dist/utils/disposable.d.ts +0 -1
- package/dist/utils/disposable.js +0 -1
- package/dist/utils/promise.d.ts +0 -1
- package/dist/utils/promise.js +0 -1
- package/dist/utils/retry.d.ts +0 -1
- package/dist/utils/retry.js +0 -1
- package/dist/utils/websocket.d.ts +0 -1
- package/dist/utils/websocket.js +0 -1
- package/docs/api-summary.md +136 -0
- package/docs/cdn-usage.md +80 -0
- package/docs/getting-started.md +152 -0
- package/examples/README.md +206 -0
- package/examples/basic.ts +24 -0
- package/examples/get.ts +21 -0
- package/examples/git-merge-smoke.ts +415 -0
- package/examples/laravel-load-test.ts +2829 -0
- package/examples/notebook-readonly-smoke.ts +823 -0
- package/package.json +13 -7
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/beacon/index.d.ts.map +0 -1
- package/dist/beacon/index.js.map +0 -1
- package/dist/beacon/navigator.d.ts.map +0 -1
- package/dist/beacon/navigator.js.map +0 -1
- package/dist/beacon/types.d.ts.map +0 -1
- package/dist/beacon/types.js.map +0 -1
- package/dist/browser/phpsandbox-sdk.esm.js.map +0 -7
- package/dist/browser/phpsandbox-sdk.esm.min.js.map +0 -7
- package/dist/browser/phpsandbox-sdk.iife.js.map +0 -7
- package/dist/browser/phpsandbox-sdk.iife.min.js.map +0 -7
- package/dist/composer.d.ts.map +0 -1
- package/dist/composer.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/container.d.ts.map +0 -1
- package/dist/container.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/events/index.d.ts.map +0 -1
- package/dist/events/index.js.map +0 -1
- package/dist/filesystem.d.ts.map +0 -1
- package/dist/filesystem.js.map +0 -1
- package/dist/git.d.ts.map +0 -1
- package/dist/git.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/laravel.d.ts.map +0 -1
- package/dist/laravel.js.map +0 -1
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js.map +0 -1
- package/dist/lsp.d.ts.map +0 -1
- package/dist/lsp.js.map +0 -1
- package/dist/repl.d.ts.map +0 -1
- package/dist/repl.js.map +0 -1
- package/dist/services.d.ts.map +0 -1
- package/dist/services.js.map +0 -1
- package/dist/shell.d.ts.map +0 -1
- package/dist/shell.js.map +0 -1
- package/dist/socket/index.d.ts.map +0 -1
- package/dist/socket/index.js.map +0 -1
- package/dist/terminal.d.ts.map +0 -1
- package/dist/terminal.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/disposable.d.ts.map +0 -1
- package/dist/utils/disposable.js.map +0 -1
- package/dist/utils/promise.d.ts.map +0 -1
- package/dist/utils/promise.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/dist/utils/websocket.d.ts.map +0 -1
- package/dist/utils/websocket.js.map +0 -1
package/dist/socket/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,qBAAqB,MAAM,wBAAwB,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAsBrG,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,6CAA8B,CAAA;IAC9B,oCAAqB,CAAA;IACrB,8BAAe,CAAA;IACf,mDAAoC,CAAA;AACtC,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AAED,qDAAqD;AACrD,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,UAAkB,8BAA8B;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YACE,OAAe,EACC,aAAuB;QAEvC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,kBAAa,GAAb,aAAa,CAAU;QAGvC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YACE,OAAe,EACC,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,SAAI,GAAJ,IAAI,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAgED,MAAM,OAAO,SAAS;IAgDpB,YACE,GAAW,EACM,YAA6B,EAC7B,UAAqB,EAAE;;QADvB,iBAAY,GAAZ,YAAY,CAAiB;QAC7B,YAAO,GAAP,OAAO,CAAgB;QAhDlC,aAAQ,GAAW,EAAE,CAAC;QAEtB,WAAM,GAAG,KAAK,CAAC;QAKf,gBAAW,GAAoB,IAAI,eAAe,EAAE,CAAC;QAErD,mBAAc,GAAyB,IAAI,CAAC;QAE5C,kBAAa,GAAiB,IAAI,CAAC;QAMnC,wBAAmB,GAAG,KAAK,CAAC;QAEpC,+BAA+B;QACvB,oBAAe,GAAG;YACxB,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;YACd,mBAAmB,EAAE,CAAC;SACvB,CAAC;QAEF,2CAA2C;QACnC,iBAAY,GAOf,EAAE,CAAC;QAES,mBAAc,GAAG,GAAG,CAAC;QACrB,kBAAa,GAAG,KAAK,CAAC,CAAC,aAAa;QAC7C,yBAAoB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAO9D,yBAAyB;QACzB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEpC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAExB,iCAAiC;QACjC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QACnD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC;QAEhE,8BAA8B;QAC9B,IAAI,CAAC,eAAe,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEtD,uDAAuD;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC;QAElD,mBAAmB;QACnB,IAAI,CAAC,GAAG,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE;YAC5D,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,IAAI,SAAS;YACjE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,oBAAoB,EAAE,IAAI;YAC1B,oBAAoB,EAAE,GAAG;YACzB,mBAAmB,EAAE,CAAC;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;YACpC,WAAW;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAuB,EAAE;YACzC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACxB,OAAO;SACR,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,OAAkB;QAC9C,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,IAAI,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC;YACzG,MAAM,IAAI,yBAAyB,CAAC,kDAAkD,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,GAAG,IAAI,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,EAAE,CAAC;YACtH,MAAM,IAAI,yBAAyB,CAAC,qDAAqD,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,IAAI,IAAI,OAAO,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC;YAC3H,MAAM,IAAI,yBAAyB,CAAC,wDAAwD,CAAC,CAAC;QAChG,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,yBAAyB,CAAC,sCAAsC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,GAAG,CAAC,KAA0C,EAAE,OAAe,EAAE,IAAU;QACjF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,CAAC,cAAc,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAgGD;;OAEG;IACI,OAAO;QACZ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,uBAAA,IAAI,gDAAS,MAAb,IAAI,CAAW,CAAC;IACzB,CAAC;IA2CM,EAAE;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,SAAS,GAAG,CAAC,EAAgB,EAAE,EAAE;YACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;iBAClD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;iBACtB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;iBAC3C,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,0CAA0C,EAAE;oBAC5D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBAEH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACxC,IAAI,EAAE,sBAAsB;oBAC5B,KAAK;oBACL,UAAU,EAAE,EAAE,CAAC,IAAI;oBACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE;YAC9B,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,EAAgB;QACnD,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,2BAA2B,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;YACtE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,mCAAmC,EAAE;gBACrD,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,WAAW,EAAE,OAAO,EAAE,CAAC,IAAI;aAC5B,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxC,IAAI,EAAE,oBAAoB;gBAC1B,KAAK;gBACL,UAAU,EAAE,EAAE,CAAC,IAAI;gBACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,kCAAkC,EAAE;gBACpD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxC,IAAI,EAAE,sBAAsB;gBAC5B,KAAK;gBACL,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,mCAAmC,EAAE;gBACrD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxC,IAAI,EAAE,sBAAsB;gBAC5B,KAAK;gBACL,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,EAAW;QACxC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,sDAAsD,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iCAAiC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAI3B,CAAC;YAEF,6BAA6B;YAC7B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAEpE,IAAI,KAAK,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,IAAI,KAAK,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,wBAAwB,CACxC,IAAI,EAAE,OAAO,IAAI,iCAAiC,EAClD,IAAI,IAAI,EAAE,CACX,CAAC;gBAEF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,IAAI,KAAK,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACnC,qEAAqE;gBACrE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;gBAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,MAAM,IAAI,mBAAmB,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;gBAC9E,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,2BAA2B,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;gBAClE,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,IAAI,KAAK,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;gBAChC,+GAA+G;gBAC/G,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;gBAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,mBAAmB,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;gBACxE,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE;oBAC1C,UAAU;oBACV,SAAS,EAAE,YAAY;iBACxB,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YAEnC,IAAI,CAAC,YAAY,mBAAmB,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE;oBAC1C,KAAK,EAAE,CAAC,CAAC,OAAO;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW;iBAC9C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,EAAE;oBAC3C,EAAE;oBACF,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACjD,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW;iBAC9C,CAAC,CAAC;YACL,CAAC;YAED,8DAA8D;YAC9D,wDAAwD;YACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxC,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,IAAS,EAAE,EAAW;QAC/D,IAAI,KAAK,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAEvC,OAAO;QACT,CAAC;QAED,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAEM,MAAM,CAAC,KAAa,EAAE,QAA6B,EAAE,QAAc;QACxE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEM,cAAc,CAAC,QAAmD;QACvE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,KAA0C,EAAE,EAAE;YAC9F,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,cAAc,CAAC,KAAa,EAAE,QAA8B;QACjE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEM,UAAU,CAAC,KAAa,EAAE,QAA6B,EAAE,OAAa;QAC3E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,MAAM,EAAE,EAAE,EAAE;YAChD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,IAAI,CAAC,KAAa,EAAE,GAAG,IAAS;QACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;IAChC,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC;IACtC,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;IAClC,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAW,MAAM;QACf,OAAO;YACL,CAAC,EAAE,YAAY;YACf,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,QAAQ;SACZ,CAAC,IAAI,CAAC,GAAG,CAAC,UAA+B,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,OAAwB,EAAE,EAAE,UAAsB,EAAE;QACpF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC;QAC3B,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,MAAM,IAAI,MAAM,EAAE,WAAW,CAAC;QAChF,MAAM,UAAU,GAAG,GAAG,aAAa,QAAQ,CAAC;QAE5C,IAAI,YAAqD,CAAC;QAC1D,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,EAAE,OAA6B,EAAE,MAA8B,EAAiB,EAAE;YACrG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YACrE,IAAI,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;gBACjC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrB,CAAC;YAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACjD,MAAM,CAAC,UAAU,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,sCAAsC;YACtC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,2CAA2C,EAAE;oBAC7D,MAAM;iBACP,CAAC,CAAC;gBAEH,yBAAyB;gBACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;oBAChD,IAAI,aAAa,EAAE,CAAC;wBAClB,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACrB,MAAM;oBACN,IAAI;oBACJ,OAAO;oBACP,OAAO;oBACP,MAAM;oBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC1C,6BAA6B;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAC5C,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBACjG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;gBAErC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,2BAA2B,EAAE;oBAC7C,MAAM;oBACN,YAAY;oBACZ,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe;iBACtD,CAAC,CAAC;gBAEH,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBAClE,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,YAAY,GAAG,CAAC,GAAqE,EAAE,EAAE;gBACvF,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBACnE,MAAM,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,IAAI,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;oBACrE,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,qBAAqB,CAAC,mDAAmD,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5H,CAAC,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAEjD,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;gBACtE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC/D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,uDAAuD;YACvD,MAAM,uBAAA,IAAI,gDAAS,MAAb,IAAI,CAAW,CAAC;YAEtB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBAChE,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;oBACzC,MAAM,gBAAgB,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAEM,IAAI,CAAC,MAAc,EAAE,OAAwB,EAAE;QACpD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,oDAAoD,EAAE;gBACtE,MAAM;aACP,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAE5D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gCAAgC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAEvE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,IAA0C;QACrD,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAa,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEO,aAAa,CAAC,MAA0B,EAAE,OAAO,GAAG,EAAE;QAC5D;;WAEG;QACH,OAAO,KAAK,CACV,KAAK,EAAE,IAA4B,EAAE,OAAe,EAAE,EAAE;YACtD,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,2BAA2B;gBAC3B,IACE,CAAC,YAAY,aAAa;oBAC1B,CAAC,YAAY,cAAc;oBAC3B,CAAC,YAAY,yBAAyB;oBACtC,CAAC,YAAY,mBAAmB;oBAChC,CAAC,YAAY,wBAAwB;oBACrC,CAAC,YAAY,YAAY,EACzB,CAAC;oBACD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,8BAA8B,EAAE;wBAChD,KAAK,EAAE,CAAC,CAAC,OAAO;wBAChB,OAAO;qBACR,CAAC,CAAC;oBACH,IAAI,CAAC,CAAC,CAAC,CAAC;oBACR,OAAO;gBACT,CAAC;gBAED;;mBAEG;gBACH,IAAI,CAAC,YAAY,gBAAgB,EAAE,CAAC;oBAClC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,4CAA4C,EAAE;wBAC7D,OAAO;wBACP,OAAO,EAAE,CAAC,CAAC,IAAI;qBAChB,CAAC,CAAC;gBACL,CAAC;gBAED,oBAAoB;gBACpB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,EAAE;oBAC3C,OAAO;oBACP,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACjD,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC;iBAC7C,CAAC,CAAC;gBAEH,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC,EACD;YACE,OAAO;YACP,OAAO,EAAE,CAAC,CAAU,EAAE,OAAe,EAAE,EAAE;gBACvC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE;oBACvC,OAAO;oBACP,UAAU,EAAE,OAAO;oBACnB,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;iBAClD,CAAC,CAAC;YACL,CAAC;YACD,sCAAsC;YACtC,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,IAAI;SAChB,CACF,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,MAAc,EAAE,OAAwB,EAAE,EAAE,UAAsB,EAAE;QAChF,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,CAAC,aAAa,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,SAAS;QACd,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;QACrG,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAE3C,6DAA6D;QAC7D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,iDAAiD;QACjD,4DAA4D;QAC5D,oCAAoC;QACpC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC;IAEM,UAAU;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEM,SAAS,CAAC,KAAY,EAAE,OAAe,IAAI,EAAE,SAAiB,KAAK,CAAC,OAAO;QAChF,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAC7C,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,IAAa,EAAE,MAAe;QACzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,uCAAuC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,6BAA6B;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACjG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,WAAW,0CAA0C,CAAC,CAAC;QACvF,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE3B,6BAA6B;QAC7B,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,EAAE;gBAC3C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACzC,IAAI;YACJ,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE;YACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B;QACpE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;IAC/D,CAAC;IAEM,YAAY,CAAC,QAAoB;QACtC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE;YAC9B,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,UAAU,CAAC,QAAgD;QAChE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE;YAC5B,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,+BAA+B;QACrC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE;gBACzC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc;gBACnD,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB;aACtE,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE;YACvD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE;gBACpC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC,CAAC;YACH,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAA2B,EAAE,EAAE;YACjE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE;gBACpC,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW;aAC9C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAY;QACxC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,IAAI,EAAE,iBAAiB;gBAC1B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;gBAC9C,OAAO,MAAM,CAAC;YAChB,KAAK,IAAI,EAAE,aAAa;gBACtB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;gBAC1D,OAAO,WAAW,CAAC;YACrB,KAAK,IAAI,EAAE,mBAAmB;gBAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;gBAC5D,OAAO,OAAO,CAAC;YACjB,KAAK,IAAI,EAAE,gCAAgC;gBACzC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,2CAA2C,CAAC,CAAC;gBAC/D,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC;YAChB,KAAK,IAAI;gBACP,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;gBACrE,OAAO,MAAM,CAAC;YAChB;gBACE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,IAAI,kBAAkB,CAAC,CAAC;gBAChE,OAAO,WAAW,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,YAAY,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAE5E,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,aAAa,IAAI,KAAK,EAAE,CAAC;YAClC,oCAAoC;YACpC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC9D,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,oBAAoB;YACpB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC;iBACvE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;iBAC3B,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAEhD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACnD,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;YAC3D,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,CAAC,SAAS,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAI,cAAc,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,mBAAmB,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,UAAkB;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,aAAa;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEtE,wCAAwC;QACxC,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,oBAAoB;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7G,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,eAAe,EAAE;gBACf,GAAG,IAAI,CAAC,eAAe;gBACvB,kBAAkB;gBAClB,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB;gBACtD,iBAAiB,EACf,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;gBAC9G,SAAS,EACP,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,CAAC;oBACpC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;oBAClG,CAAC,CAAC,IAAI;gBACV,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACtG,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aACvG;YACD,YAAY,EAAE;gBACZ,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;gBAChC,OAAO,EAAE,IAAI,CAAC,cAAc;gBAC5B,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAClH;YACD,MAAM,EAAE;gBACN,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;aACzB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,eAAe;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC;QAEtC,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC;YACrH,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,sBAAsB;QACtB,IACE,KAAK,CAAC,eAAe,GAAG,IAAI;YAC5B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;YACvC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,EAClD,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,UAAU;QACf,IAAI,CAAC,eAAe,GAAG;YACrB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;YACvB,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;YACd,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE;SAChC,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QAMzB,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,mBAAmB;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC7C,eAAe,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACnE,eAAe,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;YACrE,eAAe,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC1C,eAAe,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,kCAAkC,EAAE;YACnD,MAAM;YACN,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,mBAAmB,EAAE,eAAe,CAAC,MAAM;SAC5C,CAAC,CAAC;QAEH,OAAO;YACL,MAAM;YACN,OAAO;YACP,MAAM;YACN,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE;YACvC,kCAAkC;YAClC,MAAM,mBAAmB,GAAG,WAAW,CACrC,GAAG,EAAE;gBACH,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAE9B,wCAAwC;gBACxC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;oBACtC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAuB,EAAE;wBACzC,MAAM;wBACN,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,aAAa;wBACnD,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC,WAAW;wBAC/C,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;qBACzC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,EACD,CAAC,GAAG,EAAE,GAAG,IAAI,CACd,CAAC,CAAC,YAAY;YAEf,OAAO;gBACL,OAAO,EAAE,GAAG,EAAE;oBACZ,aAAa,CAAC,mBAAmB,CAAC,CAAC;gBACrC,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;;IAtgCG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,mEAAmE;IACnE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpD,gEAAgE;QAChE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;YACV,uBAAA,IAAI,0DAAmB,MAAvB,IAAI,CAAqB,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,SAAwC,CAAC;QAC7C,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACpD,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,OAAO,EAAE,CAAC;YAEV,sCAAsC;YACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,uBAAA,IAAI,0DAAmB,MAAvB,IAAI,CAAqB,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,KAA2B,EAAE,EAAE;YACnD,UAAU,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,yEAAyE,EAAE;gBAC1F,UAAU;gBACV,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC;aACrC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,KAAgC,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACpE,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,MAAM,CAAC,IAAI,qBAAqB,CAAC,gCAAgC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnF,OAAO;YACT,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,6DAA6D,EAAE;gBAC9E,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEjD,qCAAqC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,yCAAyC;QACzC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,OAAO,EAAE,CAAC;YAEV,2DAA2D;YAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,MAAM,CAAC,IAAI,sBAAsB,CAAC,sCAAsC,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;QAC1G,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,cAAc,CAAC;AAC7B,CAAC;IAcC,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,EAAE;QACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACtC,IAAI,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;gBAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE1B,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;gBAE/D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE;oBAC/B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBAEH,2DAA2D;gBAC3D,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;oBAC5E,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,+CAA+C,CAAC,CAAC;oBAClE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,OAAO;YACL,OAAO,EAAE,GAAG,EAAE;gBACZ,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACnC,CAAC;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { nanoid } from 'nanoid';\nimport { encode, decode } from '@msgpack/msgpack';\nimport { ErrorEvent as SDKErrorEvent, RateLimitError } from '../types.js';\nimport { retry } from '../utils/retry.js';\nimport ReconnectingWebSocket from 'reconnecting-websocket';\nimport type { CloseEvent, ErrorEvent as WsErrorEvent } from 'ws';\nimport { EventDispatcher } from '../events/index.js';\nimport { timeout } from '../utils/promise.js';\nimport { describeWebSocketEvent } from '../utils/websocket.js';\nimport WebSocket from 'isomorphic-ws';\nimport { NamedDisposable } from '../utils/disposable.js';\nimport { NotebookUnavailableError, PromiseTimeoutError, SendTimeoutError } from '../errors/index.js';\n\ninterface WsOptions {\n debug?: boolean;\n startClosed?: boolean;\n pingInterval?: number;\n connectionTimeout?: number;\n connectWaitTimeout?: number;\n maxRetries?: number;\n webSocket?: any;\n}\n\nexport interface CallOption {\n responseEvent?: string;\n timeout?: number;\n retries?: number | false;\n buffer?: boolean;\n abortSignal?: AbortSignal;\n}\n\nexport type WebSocketStatus = 'OPEN' | 'CONNECTING' | 'CLOSED';\n\nexport enum SocketEvent {\n BootError = 'Events.BootError',\n Response = 'response',\n Error = 'error',\n ClientId = 'App.Actions.GetClientId',\n}\n\n// Add specific error types for better error handling\nexport class ConnectionTimeoutError extends Error {\n constructor(message: string = 'WebSocket connection timeout') {\n super(message);\n this.name = 'ConnectionTimeoutError';\n }\n}\n\nexport class ConnectionFailedError extends Error {\n constructor(\n message: string,\n public readonly originalError?: unknown\n ) {\n super(message);\n this.name = 'ConnectionFailedError';\n }\n}\n\nexport class InvalidMessageError extends Error {\n constructor(\n message: string,\n public readonly data?: unknown\n ) {\n super(message);\n this.name = 'InvalidMessageError';\n }\n}\n\n// Add configuration validation\nexport class InvalidConfigurationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidConfigurationError';\n }\n}\n\n// Export types for better TypeScript integration\nexport interface ConnectionStats {\n connectTime: number;\n reconnectCount: number;\n lastPingTime: number;\n lastPongTime: number;\n avgResponseTime: number;\n totalMessages: number;\n totalErrors: number;\n connectionStartTime: number;\n connectionDuration: number;\n uptime: number;\n messagesPerSecond: string;\n errorRate: string;\n timeSinceLastPing: number;\n timeSinceLastPong: number;\n}\n\nexport interface MessageQueueInfo {\n length: number;\n maxSize: number;\n oldestMessageAge: number;\n}\n\nexport interface TransportConfig {\n pingInterval: number;\n queueTimeout: number;\n url: string;\n}\n\nexport interface ConnectionMetrics {\n status: string | undefined;\n clientId: string;\n isConnected: boolean;\n isConnecting: boolean;\n connectionStats: ConnectionStats;\n messageQueue: MessageQueueInfo;\n config: TransportConfig;\n}\n\nexport type HealthStatus = 'healthy' | 'degraded' | 'unhealthy';\n\n// Transport events that applications can listen to\nexport interface TransportEvents {\n 'transport.boot_error': {\n error: NotebookUnavailableError;\n timestamp: number;\n };\n 'transport.error': {\n type: string;\n error: any;\n rawMessage?: unknown;\n timestamp: number;\n };\n 'transport.closed': {\n code?: number;\n reason?: string;\n metrics: ConnectionMetrics;\n timestamp: number;\n };\n}\n\nexport class Transport {\n private readonly PING_INTERVAL: number;\n\n private clientId: string = '';\n\n private closed = false;\n\n // @ts-expect-error\n private readonly rws: ReconnectingWebSocket;\n\n private disposables: NamedDisposable = new NamedDisposable();\n\n private connectPromise: Promise<void> | null = null;\n\n private terminalError: Error | null = null;\n\n private readonly url: URL;\n\n private readonly CONNECT_WAIT_TIMEOUT: number;\n\n private pingIntervalStarted = false;\n\n // Connection health monitoring\n private connectionStats = {\n connectTime: 0,\n reconnectCount: 0,\n lastPingTime: 0,\n lastPongTime: 0,\n avgResponseTime: 0,\n totalMessages: 0,\n totalErrors: 0,\n connectionStartTime: 0,\n };\n\n // Message queue for disconnection handling\n private messageQueue: Array<{\n action: string;\n data: any;\n options: CallOption;\n resolve: (value: any) => void;\n reject: (reason: any) => void;\n timestamp: number;\n }> = [];\n\n private readonly MAX_QUEUE_SIZE = 100;\n private readonly QUEUE_TIMEOUT = 30000; // 30 seconds\n private incomingMessageChain: Promise<void> = Promise.resolve();\n\n public constructor(\n url: string,\n private readonly eventEmitter: EventDispatcher,\n private readonly options: WsOptions = {}\n ) {\n // Validate configuration\n this.validateConfiguration(options);\n\n this.url = new URL(url);\n\n // Use configurable ping interval\n this.PING_INTERVAL = options.pingInterval ?? 30000;\n this.CONNECT_WAIT_TIMEOUT = options.connectWaitTimeout ?? 30000;\n\n // Initialize connection stats\n this.connectionStats.connectionStartTime = Date.now();\n\n // Always start closed by default (lazy initialization)\n const startClosed = options.startClosed !== false;\n\n // @ts-expect-error\n this.rws = new ReconnectingWebSocket(this.url.toString(), [], {\n WebSocket: options.webSocket ?? globalThis.WebSocket ?? WebSocket,\n connectionTimeout: options.connectionTimeout,\n maxReconnectionDelay: 2000,\n minReconnectionDelay: 200,\n maxEnqueuedMessages: 0,\n maxRetries: options.maxRetries ?? 50,\n startClosed,\n });\n\n this.log('debug', 'Transport initialized', {\n url: this.url.toString(),\n options,\n });\n this.registerWatchers();\n this.setupConnectionHealthMonitoring();\n this.startPeriodicMaintenance();\n }\n\n /**\n * Validate configuration options\n */\n private validateConfiguration(options: WsOptions): void {\n if (options.pingInterval !== undefined && (options.pingInterval < 1000 || options.pingInterval > 300000)) {\n throw new InvalidConfigurationError('pingInterval must be between 1000ms and 300000ms');\n }\n\n if (options.connectionTimeout !== undefined && (options.connectionTimeout < 100 || options.connectionTimeout > 30000)) {\n throw new InvalidConfigurationError('connectionTimeout must be between 100ms and 30000ms');\n }\n\n if (options.connectWaitTimeout !== undefined && (options.connectWaitTimeout < 1000 || options.connectWaitTimeout > 300000)) {\n throw new InvalidConfigurationError('connectWaitTimeout must be between 1000ms and 300000ms');\n }\n\n if (options.maxRetries !== undefined && (options.maxRetries < 0 || options.maxRetries > 100)) {\n throw new InvalidConfigurationError('maxRetries must be between 0 and 100');\n }\n }\n\n /**\n * Internal logging utility for debugging\n */\n private log(level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any): void {\n if (this.options.debug) {\n const timestamp = new Date().toISOString();\n const logData = data ? JSON.stringify(data, null, 2) : '';\n console[level](`[Transport ${timestamp}] ${message}${logData ? '\\n' + logData : ''}`);\n }\n }\n\n /**\n * Explicitly connect to the websocket if not already connected\n * Used for lazy initialization\n *\n * This method ensures only one connection attempt happens at a time\n * by caching the connection promise.\n */\n #connect(): Promise<void> {\n if (this.terminalError) {\n return Promise.reject(this.terminalError);\n }\n\n if (this.isConnected) {\n return Promise.resolve();\n }\n\n // Return existing connection promise if one is already in progress\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n // Create and cache the connection promise\n this.connectPromise = new Promise((resolve, reject) => {\n // Check if connection is already open after potential reconnect\n if (this.isConnected) {\n resolve();\n this.#startPeriodicPing();\n return;\n }\n\n let timeoutId: ReturnType<typeof setTimeout>;\n let errorCount = 0;\n\n const cleanup = () => {\n this.rws.removeEventListener('open', openHandler);\n this.rws.removeEventListener('error', errorHandler);\n this.rws.removeEventListener('close', closeHandler);\n clearTimeout(timeoutId);\n };\n\n const openHandler = () => {\n cleanup();\n\n // Clear the cached promise on success\n this.connectPromise = null;\n resolve();\n this.#startPeriodicPing();\n };\n\n const errorHandler = (error: Event | WsErrorEvent) => {\n errorCount += 1;\n this.log('warn', 'WebSocket emitted an error while connecting; waiting for reconnect/open', {\n errorCount,\n error: describeWebSocketEvent(error),\n });\n };\n\n const closeHandler = (event: CloseEvent | WsErrorEvent) => {\n const detail = describeWebSocketEvent(event);\n\n if ('code' in event && (event.code === 1008 || event.code === 4000)) {\n cleanup();\n this.connectPromise = null;\n reject(new ConnectionFailedError(`WebSocket connection failed: ${detail}`, event));\n return;\n }\n\n this.log('warn', 'WebSocket closed before opening; waiting for reconnect/open', {\n error: detail,\n });\n };\n\n this.rws.addEventListener('open', openHandler);\n this.rws.addEventListener('error', errorHandler);\n this.rws.addEventListener('close', closeHandler);\n\n // Open the connection if it's closed\n if (this.rws.readyState === 3) {\n this.rws.reconnect();\n }\n\n // Add timeout to prevent hanging forever\n timeoutId = setTimeout(() => {\n cleanup();\n\n // Clear the cached promise on timeout so retry is possible\n this.connectPromise = null;\n reject(new ConnectionTimeoutError(`WebSocket connection timeout after ${this.CONNECT_WAIT_TIMEOUT}ms`));\n }, this.CONNECT_WAIT_TIMEOUT);\n });\n\n return this.connectPromise;\n }\n\n /**\n * Ensure the websocket is open without requiring an application-level roundtrip.\n */\n public connect(): Promise<void> {\n if (this.terminalError) {\n return Promise.reject(this.terminalError);\n }\n\n return this.#connect();\n }\n\n #startPeriodicPing(): void {\n if (this.pingIntervalStarted || this.closed) {\n return;\n }\n\n this.pingIntervalStarted = true;\n this.disposables.add('pingInterval', () => {\n const interval = setInterval(async () => {\n try {\n this.connectionStats.lastPingTime = Date.now();\n this.log('debug', 'Sending periodic ping');\n\n const startTime = Date.now();\n await this.invoke('ping');\n\n this.connectionStats.lastPongTime = Date.now();\n const pingTime = this.connectionStats.lastPongTime - startTime;\n\n this.log('debug', `Ping successful`, { pingTime });\n } catch (error) {\n this.log('error', 'Ping failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n\n // If ping fails consistently, the connection might be dead\n if (Date.now() - this.connectionStats.lastPongTime > this.PING_INTERVAL * 3) {\n this.log('warn', 'Connection appears dead, forcing reconnection');\n this.rws.reconnect();\n }\n }\n }, this.PING_INTERVAL);\n\n return {\n dispose: () => {\n clearInterval(interval);\n this.pingIntervalStarted = false;\n },\n };\n });\n }\n\n public id(): string {\n return this.clientId;\n }\n\n private async registerWatchers(): Promise<void> {\n const onMessage = (ev: MessageEvent) => {\n this.incomingMessageChain = this.incomingMessageChain\n .catch(() => undefined)\n .then(() => this.processIncomingMessage(ev))\n .catch((error) => {\n this.connectionStats.totalErrors++;\n this.log('error', 'Failed to process queued WebSocket frame', {\n error: error instanceof Error ? error.message : String(error),\n });\n\n this.eventEmitter.emit('transport.error', {\n type: 'message_handle_error',\n error,\n rawMessage: ev.data,\n timestamp: Date.now(),\n });\n });\n };\n this.rws.addEventListener('message', onMessage);\n\n this.disposables.add('message', {\n dispose: () => {\n this.rws.removeEventListener('message', onMessage);\n },\n });\n }\n\n private async processIncomingMessage(ev: MessageEvent): Promise<void> {\n if (!(ev.data instanceof Blob)) {\n const error = new Error('Unexpected message type: ' + typeof ev.data);\n this.connectionStats.totalErrors++;\n this.log('error', 'Unexpected WebSocket message type', {\n error: error.message,\n messageType: typeof ev.data,\n });\n\n this.eventEmitter.emit('transport.error', {\n type: 'message_type_error',\n error,\n rawMessage: ev.data,\n timestamp: Date.now(),\n });\n return;\n }\n\n const buffer = await ev.data.arrayBuffer();\n if (buffer.byteLength === 0) {\n this.log('warn', 'Ignoring empty WebSocket frame');\n return;\n }\n\n let decoded: unknown;\n try {\n decoded = decode(buffer);\n } catch (error) {\n this.connectionStats.totalErrors++;\n this.log('error', 'Failed to decode WebSocket frame', {\n error: error instanceof Error ? error.message : String(error),\n byteLength: buffer.byteLength,\n });\n\n this.eventEmitter.emit('transport.error', {\n type: 'message_decode_error',\n error,\n rawMessage: buffer,\n timestamp: Date.now(),\n });\n return;\n }\n\n try {\n await this.handleRawMessage(decoded);\n } catch (error) {\n this.connectionStats.totalErrors++;\n this.log('error', 'Failed to process WebSocket frame', {\n error: error instanceof Error ? error.message : String(error),\n byteLength: buffer.byteLength,\n });\n\n this.eventEmitter.emit('transport.error', {\n type: 'message_handle_error',\n error,\n rawMessage: buffer,\n timestamp: Date.now(),\n });\n }\n }\n\n private async handleRawMessage(ev: unknown): Promise<void> {\n if (this.closed) {\n this.log('debug', 'Ignoring message received after transport was closed');\n return;\n }\n\n if (typeof ev !== 'object' || ev === null) {\n this.log('debug', 'Received invalid message format', { ev });\n return;\n }\n\n try {\n const { data, event, as } = ev as {\n data: any;\n event: string;\n as: string;\n };\n\n // Validate message structure\n if (!event || typeof event !== 'string') {\n throw new InvalidMessageError('Message missing event field', ev);\n }\n\n this.log('debug', 'Processing message', { event, hasData: !!data });\n\n if (event === SocketEvent.ClientId) {\n this.clientId = data.id;\n this.log('info', 'Client ID received', { clientId: this.clientId });\n return;\n }\n\n if (event === SocketEvent.BootError) {\n const error = new NotebookUnavailableError(\n data?.message || 'Notebook is no longer available',\n data || {}\n );\n\n this.log('error', 'Boot error received', { data });\n this.terminate(error, 4000, error.message);\n return;\n }\n\n if (event === SocketEvent.Response) {\n // {\"event\":\"response\",\"data\":{\"responseEvent\":\"ping\",\"data\":\"pong\"}}\n const { responseEvent, data: responseData } = data;\n\n if (!responseEvent) {\n throw new InvalidMessageError('Response message missing responseEvent', ev);\n }\n\n this.log('debug', 'Response message received', { responseEvent });\n await this.handleMessage(responseEvent, responseData);\n return;\n }\n\n if (event === SocketEvent.Error) {\n // {\"event\":\"error\",\"data\":{\"errorEvent\":\"pingo_error\",\"data\":{\"code\":404,\"message\":\"Action pingo not found\"}}}\n const { errorEvent, data: responseData } = data;\n\n if (!errorEvent) {\n throw new InvalidMessageError('Error message missing errorEvent', ev);\n }\n\n this.log('debug', 'Error message received', {\n errorEvent,\n errorData: responseData,\n });\n await this.handleMessage(errorEvent, responseData);\n return;\n }\n\n await this.handleMessage(event, data, as);\n } catch (e) {\n this.connectionStats.totalErrors++;\n\n if (e instanceof InvalidMessageError) {\n this.log('error', 'Invalid message format', {\n error: e.message,\n data: e.data,\n totalErrors: this.connectionStats.totalErrors,\n });\n } else {\n this.log('error', 'Failed to parse message', {\n ev,\n error: e instanceof Error ? e.message : String(e),\n totalErrors: this.connectionStats.totalErrors,\n });\n }\n\n // Don't throw - we want to continue processing other messages\n // But emit an error event for the application to handle\n this.eventEmitter.emit('transport.error', {\n type: 'message_parse_error',\n error: e,\n rawMessage: ev,\n timestamp: Date.now(),\n });\n }\n }\n\n private async handleMessage(event: string, data: any, as?: string): Promise<any> {\n if (event === SocketEvent.ClientId) {\n this.clientId = data.id;\n this.eventEmitter.emit(event, data.id);\n\n return;\n }\n\n event && this.eventEmitter.emit(as || event, data);\n }\n\n public listen(event: string, listener: (data: any) => void, _context?: any) {\n return this.eventEmitter.listen(event, listener);\n }\n\n public onDidBootError(listener: (error: NotebookUnavailableError) => void): void {\n this.eventEmitter.listen('transport.boot_error', (event: { error: NotebookUnavailableError }) => {\n listener(event.error);\n });\n }\n\n public removeListener(event: string, listener?: (data: any) => void): void {\n this.eventEmitter.removeListener(event, listener);\n }\n\n public listenOnce(event: string, listener: (data: any) => void, context?: any): void {\n this.eventEmitter.once(event, listener, context);\n this.disposables.add(`once_${event}_${nanoid()}`, {\n dispose: () => {\n this.eventEmitter.removeListener(event, listener);\n },\n });\n }\n\n public emit(event: string, ...data: any): void {\n this.eventEmitter.emit(event, ...data);\n }\n\n public get isConnected(): boolean {\n return this.status === 'OPEN';\n }\n\n public get isConnecting(): boolean {\n return this.status === 'CONNECTING';\n }\n\n public get isDisconnected(): boolean {\n return this.status === 'CLOSED';\n }\n\n public get isClosed(): boolean {\n return this.closed;\n }\n\n public getTerminalError(): Error | null {\n return this.terminalError;\n }\n\n public get status(): string | undefined {\n return {\n 0: 'CONNECTING',\n 1: 'OPEN',\n 2: 'CLOSING',\n 3: 'CLOSED',\n }[this.rws.readyState as unknown as number];\n }\n\n public async call(action: string, data: object | string = {}, options: CallOption = {}): Promise<any> {\n if (this.terminalError) {\n throw this.terminalError;\n }\n\n // Clear old queued messages periodically\n this.clearOldQueuedMessages();\n\n const responseEvent = options.responseEvent || `${action}_${nanoid()}_response`;\n const errorEvent = `${responseEvent}_error`;\n\n let closeHandler: (ev: CloseEvent | WsErrorEvent) => void;\n const removeListeners = () => {\n if (closeHandler) {\n this.rws.removeEventListener('close', closeHandler);\n this.rws.removeEventListener('error', closeHandler);\n }\n\n this.eventEmitter.removeListener(responseEvent);\n this.eventEmitter.removeListener(errorEvent);\n };\n\n const handler = async (resolve: (value: any) => void, reject: (reason?: any) => void): Promise<void> => {\n if (this.terminalError) {\n reject(this.terminalError);\n return;\n }\n\n const abortError = new DOMException('Request aborted', 'AbortError');\n if (options.abortSignal?.aborted) {\n reject(abortError);\n }\n\n if (options.abortSignal) {\n options.abortSignal.addEventListener('abort', () => {\n reject(abortError);\n });\n }\n\n // If not connected, queue the message\n if (!this.isConnected && !this.isClosed) {\n this.log('debug', 'Connection not available, queuing message', {\n action,\n });\n\n // Check queue size limit\n if (this.messageQueue.length >= this.MAX_QUEUE_SIZE) {\n const oldestMessage = this.messageQueue.shift();\n if (oldestMessage) {\n oldestMessage.reject(new Error('Message queue full, oldest message dropped'));\n }\n }\n\n this.messageQueue.push({\n action,\n data,\n options,\n resolve,\n reject,\n timestamp: Date.now(),\n });\n return;\n }\n\n const startTime = Date.now();\n\n this.listenOnce(responseEvent, (response) => {\n // Update response time stats\n const responseTime = Date.now() - startTime;\n this.connectionStats.avgResponseTime = (this.connectionStats.avgResponseTime + responseTime) / 2;\n this.connectionStats.totalMessages++;\n\n this.log('debug', 'Message response received', {\n action,\n responseTime,\n avgResponseTime: this.connectionStats.avgResponseTime,\n });\n\n resolve(response);\n });\n\n this.listenOnce(errorEvent, (e) => {\n this.connectionStats.totalErrors++;\n this.log('error', 'Message error received', { action, error: e });\n reject(new SDKErrorEvent(e.code, e.message, e));\n });\n\n closeHandler = (_ev: (CloseEvent | WsErrorEvent) & { reason?: string; code?: number }) => {\n if (_ev.code === 1008 && (_ev.reason || '').includes('rate limit')) {\n reject(new RateLimitError(_ev.reason || 'Rate limit exceeded', _ev));\n return;\n }\n\n const detail = describeWebSocketEvent(_ev);\n reject(this.terminalError || new ConnectionFailedError(`Connection lost to the notebook during request: ${detail}`, _ev));\n };\n\n this.rws.addEventListener('close', closeHandler);\n this.rws.addEventListener('error', closeHandler);\n\n try {\n this.rws.send(this.pack({ action, data, errorEvent, responseEvent }));\n this.log('debug', 'Message sent', { action, data });\n } catch (error) {\n this.log('error', 'Failed to send message', { action, error });\n throw error;\n }\n };\n\n const send = async () => {\n // Ensure connection is established before making calls\n await this.#connect();\n\n const promise = new Promise(handler).finally(removeListeners);\n if (!options.timeout) {\n return promise;\n }\n\n return timeout(promise, options.timeout).catch((error: unknown) => {\n if (error instanceof PromiseTimeoutError) {\n throw SendTimeoutError.fromPromiseTimeoutError(error);\n }\n\n throw error;\n }).finally(removeListeners);\n };\n\n return this.sendWithRetry(async () => await send(), options.retries || 10);\n }\n\n public send(action: string, data: object | string = {}): boolean {\n if (this.terminalError) {\n throw this.terminalError;\n }\n\n if (!this.isConnected || this.isClosed) {\n this.log('debug', 'Connection not available, dropping one-way message', {\n action,\n });\n\n return false;\n }\n\n try {\n this.rws.send(this.pack({ action, data }));\n this.connectionStats.totalMessages++;\n this.log('debug', 'One-way message sent', { action, data });\n\n return true;\n } catch (error) {\n this.connectionStats.totalErrors++;\n this.log('error', 'Failed to send one-way message', { action, error });\n\n return false;\n }\n }\n\n private pack(data: string | ArrayBuffer | Blob | object): string | Blob | ArrayBuffer {\n return new Blob([encode(data) as BlobPart]);\n }\n\n private sendWithRetry(sender: () => Promise<any>, retries = 10): Promise<any> {\n /**\n * Enhanced retry with exponential backoff and intelligent error handling\n */\n return retry(\n async (bail: (error: Error) => void, attempt: number) => {\n try {\n return await sender();\n } catch (e) {\n // Don't retry these errors\n if (\n e instanceof SDKErrorEvent ||\n e instanceof RateLimitError ||\n e instanceof InvalidConfigurationError ||\n e instanceof InvalidMessageError ||\n e instanceof NotebookUnavailableError ||\n e instanceof DOMException\n ) {\n this.log('debug', 'Non-retryable error, bailing', {\n error: e.message,\n attempt,\n });\n bail(e);\n return;\n }\n\n /**\n * If we can't send due to timeout, attempt to reconnect\n */\n if (e instanceof SendTimeoutError) {\n this.reconnect();\n this.log('warn', 'Send operation timed out, connection reset', {\n attempt,\n timeout: e.time,\n });\n }\n\n // Log retry attempt\n this.log('debug', 'Retrying send operation', {\n attempt,\n error: e instanceof Error ? e.message : String(e),\n nextDelay: this.getBackoffDelay(attempt - 1),\n });\n\n throw e;\n }\n },\n {\n retries,\n onRetry: (e: unknown, attempt: number) => {\n this.log('warn', 'Send operation retry', {\n attempt,\n maxRetries: retries,\n error: e instanceof Error ? e.message : String(e),\n });\n },\n // Use exponential backoff with jitter\n minTimeout: 1000,\n factor: 2,\n maxTimeout: 30000,\n randomize: true,\n }\n );\n }\n\n public invoke(action: string, data: object | string = {}, options: CallOption = {}): Promise<any> {\n if (!options.responseEvent) {\n options.responseEvent = `${action}_${nanoid()}`;\n }\n\n return this.call('invoke', { action, data }, options);\n }\n\n /**\n * Reconnect the websocket without disposing listeners.\n * Uses the underlying ReconnectingWebSocket's reconnect mechanism.\n * This preserves all event listeners and state.\n */\n public reconnect(): void {\n if (this.terminalError) {\n throw this.terminalError;\n }\n\n if (this.closed) {\n throw new Error('Cannot reconnect a closed transport. The transport has been permanently closed.');\n }\n\n this.log('info', 'Reconnecting transport');\n\n // Clear pending connection promise to allow fresh connection\n this.connectPromise = null;\n\n // Use ReconnectingWebSocket's built-in reconnect\n // This will close the current connection and open a new one\n // without disposing event listeners\n this.rws.reconnect();\n }\n\n public disconnect(): void {\n if (this.closed) {\n console.trace('Transport is already closed, cannot disconnect again');\n return;\n }\n\n this.close();\n }\n\n public terminate(error: Error, code: number = 4000, reason: string = error.message): void {\n this.terminalError = error;\n\n if (error instanceof NotebookUnavailableError) {\n this.eventEmitter.emit('transport.boot_error', {\n error,\n timestamp: Date.now(),\n });\n }\n\n this.close(code, reason);\n }\n\n public close(code?: number, reason?: string): void {\n if (this.closed) {\n return;\n }\n\n this.log('info', 'Closing transport connection', { code, reason });\n\n // Clear any pending connection promise\n this.connectPromise = null;\n\n // Reject all queued messages\n const queuedCount = this.messageQueue.length;\n const closeError = this.terminalError || new Error('Connection closed while message was queued');\n this.messageQueue.forEach((msg) => {\n msg.reject(closeError);\n });\n this.messageQueue = [];\n\n if (queuedCount > 0) {\n this.log('debug', `Rejected ${queuedCount} queued messages due to connection close`);\n }\n\n // Dispose all event disposables\n this.disposables.dispose();\n\n // Close WebSocket connection\n try {\n this.rws.close(code, reason);\n } catch (error) {\n this.log('error', 'Error closing WebSocket', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Emit final close event\n this.eventEmitter.emit('transport.closed', {\n code,\n reason,\n metrics: this.getConnectionMetrics(),\n timestamp: Date.now(),\n });\n\n this.eventEmitter.removeListener('*'); // Remove all event listeners\n this.closed = true;\n this.log('info', 'Transport connection closed successfully');\n }\n\n public onDidConnect(listener: () => void): void {\n this.rws.addEventListener('open', listener);\n this.disposables.add('connect', {\n dispose: () => {\n this.rws.removeEventListener('open', listener);\n },\n });\n }\n\n public onDidClose(listener: (e: CloseEvent | WsErrorEvent) => void): void {\n this.rws.addEventListener('close', listener);\n this.disposables.add('close', {\n dispose: () => {\n this.rws.removeEventListener('close', listener);\n },\n });\n }\n\n /**\n * Setup connection health monitoring\n */\n private setupConnectionHealthMonitoring(): void {\n this.rws.addEventListener('open', () => {\n this.connectionStats.connectTime = Date.now();\n this.connectionStats.reconnectCount++;\n this.log('info', 'Connection established', {\n reconnectCount: this.connectionStats.reconnectCount,\n timeSinceStart: Date.now() - this.connectionStats.connectionStartTime,\n });\n this.processMessageQueue();\n });\n\n this.rws.addEventListener('close', (event: CloseEvent) => {\n this.log('warn', 'Connection closed', {\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n });\n this.handleConnectionClose(event.code);\n });\n\n this.rws.addEventListener('error', (event: Event | WsErrorEvent) => {\n this.connectionStats.totalErrors++;\n const detail = describeWebSocketEvent(event);\n this.log('error', 'Connection error', {\n error: detail,\n rawError: event,\n totalErrors: this.connectionStats.totalErrors,\n });\n });\n }\n\n /**\n * Handle different WebSocket close codes appropriately\n */\n private handleConnectionClose(code: number): 'reconnect' | 'stop' | 'retry' {\n switch (code) {\n case 1000: // Normal closure\n this.log('info', 'Normal connection closure');\n return 'stop';\n case 1001: // Going away\n this.log('info', 'Connection going away, will reconnect');\n return 'reconnect';\n case 1006: // Abnormal closure\n this.log('warn', 'Abnormal connection closure, will retry');\n return 'retry';\n case 1008: // Policy violation (rate limit)\n this.log('error', 'Connection closed due to policy violation');\n this.clearOldQueuedMessages();\n return 'stop';\n case 4000:\n this.log('info', 'Connection closed due to terminal notebook error');\n return 'stop';\n default:\n this.log('warn', `Unknown close code: ${code}, will reconnect`);\n return 'reconnect';\n }\n }\n\n /**\n * Process queued messages when connection is restored\n */\n private processMessageQueue(): void {\n if (this.messageQueue.length === 0) {\n return;\n }\n\n this.log('debug', `Processing ${this.messageQueue.length} queued messages`);\n\n const queue = [...this.messageQueue];\n this.messageQueue = [];\n\n for (const queuedMessage of queue) {\n // Check if message hasn't timed out\n if (Date.now() - queuedMessage.timestamp > this.QUEUE_TIMEOUT) {\n queuedMessage.reject(new Error('Queued message timed out'));\n continue;\n }\n\n // Retry the message\n this.call(queuedMessage.action, queuedMessage.data, queuedMessage.options)\n .then(queuedMessage.resolve)\n .catch(queuedMessage.reject);\n }\n }\n\n /**\n * Clear old queued messages to prevent memory leaks\n */\n private clearOldQueuedMessages(): void {\n const now = Date.now();\n const originalLength = this.messageQueue.length;\n\n this.messageQueue = this.messageQueue.filter((msg) => {\n const isExpired = now - msg.timestamp > this.QUEUE_TIMEOUT;\n if (isExpired) {\n msg.reject(new Error('Queued message expired'));\n }\n return !isExpired;\n });\n\n if (originalLength !== this.messageQueue.length) {\n this.log('debug', `Cleared ${originalLength - this.messageQueue.length} expired messages`);\n }\n }\n\n /**\n * Calculate exponential backoff delay\n */\n private getBackoffDelay(retryCount: number): number {\n const baseDelay = 1000; // 1 second\n const maxDelay = 30000; // 30 seconds\n const delay = Math.min(baseDelay * Math.pow(2, retryCount), maxDelay);\n\n // Add jitter to prevent thundering herd\n return delay + Math.random() * 1000;\n }\n\n /**\n * Get comprehensive connection metrics\n */\n public getConnectionMetrics() {\n const now = Date.now();\n const connectionDuration = this.connectionStats.connectTime > 0 ? now - this.connectionStats.connectTime : 0;\n\n return {\n status: this.status,\n clientId: this.clientId,\n isConnected: this.isConnected,\n isConnecting: this.isConnecting,\n connectionStats: {\n ...this.connectionStats,\n connectionDuration,\n uptime: now - this.connectionStats.connectionStartTime,\n messagesPerSecond:\n connectionDuration > 0 ? (this.connectionStats.totalMessages / (connectionDuration / 1000)).toFixed(2) : '0',\n errorRate:\n this.connectionStats.totalMessages > 0\n ? ((this.connectionStats.totalErrors / this.connectionStats.totalMessages) * 100).toFixed(2) + '%'\n : '0%',\n timeSinceLastPing: this.connectionStats.lastPingTime > 0 ? now - this.connectionStats.lastPingTime : 0,\n timeSinceLastPong: this.connectionStats.lastPongTime > 0 ? now - this.connectionStats.lastPongTime : 0,\n },\n messageQueue: {\n length: this.messageQueue.length,\n maxSize: this.MAX_QUEUE_SIZE,\n oldestMessageAge: this.messageQueue.length > 0 ? now - Math.min(...this.messageQueue.map((m) => m.timestamp)) : 0,\n },\n config: {\n pingInterval: this.PING_INTERVAL,\n queueTimeout: this.QUEUE_TIMEOUT,\n url: this.url.toString(),\n },\n };\n }\n\n /**\n * Get connection health status\n */\n public getHealthStatus(): 'healthy' | 'degraded' | 'unhealthy' {\n const metrics = this.getConnectionMetrics();\n const stats = metrics.connectionStats;\n\n // Unhealthy conditions\n if (!this.isConnected || stats.timeSinceLastPong > this.PING_INTERVAL * 2 || Number.parseFloat(stats.errorRate) > 50) {\n return 'unhealthy';\n }\n\n // Degraded conditions\n if (\n stats.avgResponseTime > 5000 ||\n Number.parseFloat(stats.errorRate) > 10 ||\n stats.timeSinceLastPong > this.PING_INTERVAL * 1.5\n ) {\n return 'degraded';\n }\n\n return 'healthy';\n }\n\n /**\n * Reset connection statistics\n */\n public resetStats(): void {\n this.connectionStats = {\n connectTime: Date.now(),\n reconnectCount: 0,\n lastPingTime: 0,\n lastPongTime: 0,\n avgResponseTime: 0,\n totalMessages: 0,\n totalErrors: 0,\n connectionStartTime: Date.now(),\n };\n\n this.log('debug', 'Connection statistics reset');\n }\n\n /**\n * Run connection diagnostics\n */\n public async runDiagnostics(): Promise<{\n status: HealthStatus;\n metrics: ConnectionMetrics;\n issues: string[];\n recommendations: string[];\n }> {\n const metrics = this.getConnectionMetrics();\n const status = this.getHealthStatus();\n const issues: string[] = [];\n const recommendations: string[] = [];\n\n // Check for issues\n if (!this.isConnected) {\n issues.push('Connection is not established');\n recommendations.push('Check network connectivity and server availability');\n }\n\n if (metrics.connectionStats.timeSinceLastPong > this.PING_INTERVAL * 2) {\n issues.push('No pong received recently - connection may be stale');\n recommendations.push('Consider forcing a reconnection');\n }\n\n if (Number.parseFloat(metrics.connectionStats.errorRate) > 10) {\n issues.push(`High error rate: ${metrics.connectionStats.errorRate}`);\n recommendations.push('Check server logs and network stability');\n }\n\n if (metrics.messageQueue.length > this.MAX_QUEUE_SIZE * 0.8) {\n issues.push('Message queue is nearly full');\n recommendations.push('Check connection stability and consider reducing message frequency');\n }\n\n if (metrics.connectionStats.avgResponseTime > 5000) {\n issues.push('High average response time');\n recommendations.push('Check network latency and server performance');\n }\n\n this.log('info', 'Connection diagnostics completed', {\n status,\n issueCount: issues.length,\n recommendationCount: recommendations.length,\n });\n\n return {\n status,\n metrics,\n issues,\n recommendations,\n };\n }\n\n /**\n * Periodic maintenance - clean up old data, run health checks\n */\n private startPeriodicMaintenance(): void {\n this.disposables.add('maintenance', () => {\n // Run maintenance every 5 minutes\n const maintenanceInterval = setInterval(\n () => {\n this.clearOldQueuedMessages();\n\n // Log health status if debug is enabled\n if (this.options.debug) {\n const health = this.getHealthStatus();\n const metrics = this.getConnectionMetrics();\n this.log('debug', 'Periodic health check', {\n health,\n messageCount: metrics.connectionStats.totalMessages,\n errorCount: metrics.connectionStats.totalErrors,\n queueLength: metrics.messageQueue.length,\n });\n }\n },\n 5 * 60 * 1000\n ); // 5 minutes\n\n return {\n dispose: () => {\n clearInterval(maintenanceInterval);\n },\n };\n });\n }\n}\n"]}
|
package/dist/terminal.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
|
package/dist/terminal.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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","sourcesContent":["import { Action, Disposable, NotebookInstance } from './index.js';\nimport { nanoid } from 'nanoid';\nimport { once } from './utils/promise.js';\n\nconst TERMINAL_INPUT_FLUSH_DELAY_MS = 8;\nconst terminalInputFlushPattern = /[\\x00-\\x1f\\x7f]/;\n\nexport interface Task {\n id: string;\n command: string | string[];\n kind: string;\n created: boolean;\n cwd?: string;\n tty?: boolean;\n running?: boolean;\n exitCode?: number | null;\n}\n\nexport interface TerminalCreateInput {\n id: string;\n kind: string;\n size: [number, number];\n command?: string | string[];\n env?: Record<string, string>;\n cwd?: string;\n}\n\nexport interface TerminalSpawnInput {\n command: string | string[];\n opts: { id: string } & SpawnOptions;\n}\n\nexport interface TerminalEventData {\n 'terminal.output': {\n output: string;\n id: string;\n };\n 'terminal.started': Task;\n 'terminal.stopped': Task & { exitCode: number };\n 'terminal.close': Task & { exitCode: number };\n}\n\ntype PrefixKey<K extends keyof TerminalEventData> = `${K}.${string}`;\ntype TerminalEventPattern = PrefixKey<keyof TerminalEventData>;\nexport type TerminalEvents = TerminalEventData & {\n [K in TerminalEventPattern]: K extends `terminal.output.${string}`\n ? TerminalEventData['terminal.output']\n : Task & { exitCode: number };\n};\n\nexport interface TerminalActions {\n 'terminal.input': Action<{ id: string; input: string }>;\n 'terminal.list': Action<{}, Task[]>;\n 'terminal.start': Action;\n 'terminal.create': Action<TerminalCreateInput, Task>;\n 'terminal.spawn': Action<TerminalSpawnInput, Task>;\n 'terminal.attach': Action<{ id: string; replayHistory?: boolean }, Task | false>;\n 'terminal.resize': Action<{ id: string; width: number; height: number }, boolean>;\n 'terminal.close': Action<{ id: string }, boolean>;\n}\n\nexport interface SandboxProcess {\n exit: Promise<number>;\n\n input: WritableStream<string>;\n\n output: ReadableStream<string>;\n\n kill(): Promise<boolean>;\n\n resize(dimensions: { cols: number; rows: number }): void;\n}\n\nexport interface SpawnOptions {\n cwd?: string;\n\n env?: Record<string, string | number | boolean>;\n\n output?: boolean;\n\n terminal?: {\n cols: number;\n rows: number;\n };\n\n id?: string;\n osc?: boolean;\n tty?: boolean;\n\n abortSignal?: AbortSignal;\n}\n\nexport default class Terminal {\n constructor(protected okra: NotebookInstance) {}\n\n public list() {\n return this.okra.invoke('terminal.list');\n }\n\n public start() {\n return this.okra.invoke('terminal.start');\n }\n\n public create(input: TerminalCreateInput) {\n return this.okra.invoke('terminal.create', input);\n }\n\n public onStarted(handler: (t: Task) => void): void {\n this.okra.listen('terminal.started', handler);\n }\n\n public resize(id: string, size: [number, number]) {\n return this.okra.invoke('terminal.resize', { id, width: size[0], height: size[1] });\n }\n\n public onOutput(id: string, handler: (data: TerminalEvents['terminal.output']) => void): void {\n this.okra.listen(`terminal.output.${id}`, handler);\n }\n\n public input(id: string, input: string): Promise<boolean> {\n return Promise.resolve(this.okra.send('terminal.input', { id, input }));\n }\n\n public listen<T extends keyof TerminalEvents>(event: T, handler: (data: TerminalEvents[T]) => void): Disposable {\n return this.okra.listen(event, handler);\n }\n\n public async attach(id: string, opts?: { replayHistory?: boolean; abortSignal?: AbortSignal }): Promise<(SandboxProcess & Task) | false> {\n const handle = this.processHandle(id, opts?.abortSignal);\n const task = await this.okra.invoke(\n 'terminal.attach',\n {\n id,\n replayHistory: opts?.replayHistory,\n },\n { abortSignal: opts?.abortSignal }\n );\n\n if (!task) {\n handle.dispose();\n return false;\n }\n\n return {\n ...handle.process,\n ...task,\n };\n }\n\n public async spawn(command: string, args: string[], opts?: SpawnOptions): Promise<SandboxProcess & Task> {\n const id = opts?.id || nanoid();\n const handle = this.processHandle(id, opts?.abortSignal);\n\n const { abortSignal, ...otherOpts } = opts ?? {};\n const result = await this.okra.invoke(\n 'terminal.spawn',\n {\n command: [command, ...args],\n opts: {\n id,\n ...otherOpts,\n },\n },\n { abortSignal }\n );\n\n return {\n ...handle.process,\n ...result,\n };\n }\n\n private processHandle(id: string, abortSignal?: AbortSignal): { process: SandboxProcess; dispose: () => void } {\n const disposables = new Set<Disposable>();\n const dispose = () => {\n for (const disposable of disposables) {\n disposable.dispose();\n }\n disposables.clear();\n };\n\n let pendingInput = '';\n let inputFlushTimer: ReturnType<typeof setTimeout> | undefined;\n\n const flushInput = () => {\n if (inputFlushTimer) {\n clearTimeout(inputFlushTimer);\n inputFlushTimer = undefined;\n }\n\n if (pendingInput === '') {\n return;\n }\n\n const input = pendingInput;\n pendingInput = '';\n void this.input(id, input);\n };\n\n const scheduleInputFlush = () => {\n if (inputFlushTimer) {\n return;\n }\n\n inputFlushTimer = setTimeout(flushInput, TERMINAL_INPUT_FLUSH_DELAY_MS);\n };\n\n const queueInput = (chunk: string) => {\n pendingInput += chunk;\n\n if (terminalInputFlushPattern.test(chunk)) {\n flushInput();\n return;\n }\n\n scheduleInputFlush();\n };\n\n const disposeInput = () => {\n flushInput();\n dispose();\n };\n\n const input = new WritableStream<string>({\n write: queueInput,\n close: disposeInput,\n abort: disposeInput,\n });\n\n let controller: ReadableStreamDefaultController<string> | null = null;\n const output = new ReadableStream<string>({\n start: (_controller) => {\n controller = _controller;\n disposables.add(\n this.listen(`terminal.output.${id}`, (data) => {\n controller?.enqueue(data.output);\n })\n );\n },\n cancel: () => {\n controller = null;\n disposeInput();\n },\n });\n\n const exit = new Promise<number>((resolve) => {\n disposables.add(\n this.listen(`terminal.close.${id}`, (data) => {\n if (controller) {\n try {\n controller.close();\n } catch {\n // Ignore close errors after cancellation.\n }\n }\n\n disposeInput();\n resolve(data.exitCode);\n })\n );\n });\n\n const kill = once(() => {\n disposeInput();\n return this.okra.invoke('terminal.close', { id });\n });\n\n const resize = (dimensions: { cols: number; rows: number }) => {\n this.okra.invoke('terminal.resize', { id, width: dimensions.cols, height: dimensions.rows });\n };\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', kill);\n }\n\n return {\n process: {\n exit,\n input,\n output,\n kill,\n resize,\n },\n dispose: disposeInput,\n };\n }\n}\n"]}
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AAE7E,qBAAa,UAAW,SAAQ,KAAK;aAEjB,IAAI,EAAE,SAAS;aACf,OAAO,EAAE,MAAM;aACf,GAAG,EAAE,MAAM;gBAFX,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAW;CAInC;AAED,qBAAa,cAAe,SAAQ,UAAU;gBACzB,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAW;CAGrD;AAED,qBAAa,eAAgB,SAAQ,UAAU;CAAG;AAElD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YACkB,IAAe,EACf,OAAe,EACf,MAAc,EAAE;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAW;QACf,YAAO,GAAP,OAAO,CAAQ;QACf,QAAG,GAAH,GAAG,CAAa;IAGlC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAmB,OAAe,EAAE,MAAc,EAAE;QAClD,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;CAAG","sourcesContent":["export type ErrorCode = 500 | 400 | 401 | 403 | 404 | 409 | 422 | 429 | 5000;\n\nexport class ErrorEvent extends Error {\n public constructor(\n public readonly code: ErrorCode,\n public readonly message: string,\n public readonly raw: object = {}\n ) {\n super(message);\n }\n}\n\nexport class RateLimitError extends ErrorEvent {\n public constructor(message: string, raw: object = {}) {\n super(429, message, raw);\n }\n}\n\nexport class PHPSandboxError extends ErrorEvent {}\n\nexport interface Disposable {\n dispose: () => void;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"disposable.d.ts","sourceRoot":"","sources":["../../src/utils/disposable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qBAAa,eAAgB,YAAW,UAAU;IAChD,OAAO,CAAC,WAAW,CAAsC;IAElD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,IAAI;IAanE,OAAO,IAAI,IAAI;CAIvB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"disposable.js","sourceRoot":"","sources":["../../src/utils/disposable.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IAA5B;QACU,gBAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;IAmB3D,CAAC;IAjBQ,GAAG,CAAC,GAAW,EAAE,UAA2C;QACjE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,0CAA0C,CAAC,CAAC;YACpF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;QACvC,CAAC;QAED,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,UAAU,GAAG,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { Disposable } from '../types.js';\n\nexport class NamedDisposable implements Disposable {\n private disposables: Map<string, Disposable> = new Map();\n\n public add(key: string, disposable: Disposable | (() => Disposable)): void {\n if (this.disposables.has(key)) {\n console.warn(`Disposable with key \"${key}\" already exists. Disposing the old one.`);\n this.disposables.get(key)?.dispose();\n }\n\n if (typeof disposable === 'function') {\n disposable = disposable();\n }\n\n this.disposables.set(key, disposable);\n }\n\n public dispose(): void {\n this.disposables.forEach((disposable) => disposable.dispose());\n this.disposables.clear();\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../src/utils/promise.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,CAAC,CAQpE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAG/D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/utils/promise.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,IAAgB,EAAE,IAAY,EAAc,EAAE;IACvE,IAAI,KAAoC,CAAC;IACzC,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,IAAI;QACJ,IAAI,OAAO,CACT,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC,CAAC,CAClH;KACF,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,EAAoB,EAAsB,EAAE;IAClE,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,OAAO,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC","sourcesContent":["/**\n * @see https://advancedweb.hu/how-to-add-timeout-to-a-promise-in-javascript\n *\n * @param prom\n * @param time\n * @param exception\n */\n\nimport { PromiseTimeoutError } from \"../errors/index.js\";\n\nexport const timeout = <T>(prom: Promise<T>, time: number): Promise<T> => {\n let timer: ReturnType<typeof setTimeout>;\n return Promise.race([\n prom,\n new Promise<never>(\n (_r, rej) => (timer = setTimeout(rej, time, new PromiseTimeoutError('Timeout before promise can resolve', time)))\n ),\n ]).finally(() => clearTimeout(timer));\n};\n\n/**\n * Wraps an async function to ensure it only executes once. \n * Subsequent calls return the memoized promise result.\n * \n * @param fn The async function to execute once\n * @returns A wrapped function that memoizes the first execution\n */\nexport const once = <T>(fn: () => Promise<T>): (() => Promise<T>) => {\n let result: Promise<T> | null = null;\n return () => result || (result = fn());\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,KAAK,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,KAAK,CAAC;AAmB5C,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxD,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAmCZ"}
|
package/dist/utils/retry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAWA,MAAM,cAAc;IAClB,YAAmC,KAAc;QAAd,UAAK,GAAL,KAAK,CAAS;IAAG,CAAC;CACtD;AAED,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAiB,EAAE;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,OAAgD,EAAU,EAAE;IAClG,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAEjG,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,EAAwD,EACxD,UAAwB,EAAE;IAE1B,MAAM,eAAe,GAA4C;QAC/D,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;QAC9B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,QAAQ;QAC1C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;QAC3B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;KACrC,CAAC;IAEF,MAAM,IAAI,GAAc,CAAC,KAAe,EAAS,EAAE;QACjD,MAAM,IAAI,cAAc,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEF,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,eAAe,CAAC,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QACxE,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;gBACpC,MAAM,KAAK,CAAC,KAAK,CAAC;YACpB,CAAC;YAED,SAAS,GAAG,KAAK,CAAC;YAElB,IAAI,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC","sourcesContent":["export interface RetryOptions {\n retries?: number;\n minTimeout?: number;\n maxTimeout?: number;\n factor?: number;\n randomize?: boolean;\n onRetry?: (error: unknown, attempt: number) => void | Promise<void>;\n}\n\ntype RetryBail = (error?: unknown) => never;\n\nclass RetryBailError {\n public constructor(public readonly error: unknown) {}\n}\n\nconst sleep = (duration: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n};\n\nconst getRetryDelay = (attempt: number, options: Required<Omit<RetryOptions, 'onRetry'>>): number => {\n const randomized = options.randomize ? Math.random() + 1 : 1;\n const exponentialDelay = Math.max(options.minTimeout, 1) * Math.pow(options.factor, attempt - 1);\n\n return Math.round(Math.min(randomized * exponentialDelay, options.maxTimeout));\n};\n\nexport async function retry<T>(\n fn: (bail: RetryBail, attempt: number) => T | Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const resolvedOptions: Required<Omit<RetryOptions, 'onRetry'>> = {\n retries: options.retries ?? 10,\n minTimeout: options.minTimeout ?? 1000,\n maxTimeout: options.maxTimeout ?? Infinity,\n factor: options.factor ?? 2,\n randomize: options.randomize ?? true,\n };\n\n const bail: RetryBail = (error?: unknown): never => {\n throw new RetryBailError(error ?? new Error('Aborted'));\n };\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= resolvedOptions.retries + 1; attempt++) {\n try {\n return await fn(bail, attempt);\n } catch (error) {\n if (error instanceof RetryBailError) {\n throw error.error;\n }\n\n lastError = error;\n\n if (attempt > resolvedOptions.retries) {\n throw error;\n }\n\n await options.onRetry?.(error, attempt);\n await sleep(getRetryDelay(attempt, resolvedOptions));\n }\n }\n\n throw lastError;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/utils/websocket.ts"],"names":[],"mappings":"AAmDA,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,KAAG,MAuDvD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/utils/websocket.ts"],"names":[],"mappings":"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","sourcesContent":["const getReadyStateLabel = (state: unknown): string | undefined => {\n if (typeof state !== 'number') {\n return undefined;\n }\n\n return {\n 0: 'CONNECTING',\n 1: 'OPEN',\n 2: 'CLOSING',\n 3: 'CLOSED',\n }[state] ?? `STATE_${state}`;\n};\n\nconst sanitizeWebSocketUrl = (value: string): string => {\n try {\n const url = new URL(value);\n return `${url.origin}${url.pathname}`;\n } catch {\n return value;\n }\n};\n\nconst extractNestedErrorMessage = (value: unknown): string | undefined => {\n if (value instanceof Error) {\n return value.message ? `${value.name}: ${value.message}` : value.name;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n const message =\n typeof record.message === 'string' && record.message\n ? record.message\n : typeof record.reason === 'string' && record.reason\n ? record.reason\n : undefined;\n\n if (!message) {\n return undefined;\n }\n\n const name = typeof record.name === 'string' && record.name ? record.name : undefined;\n return name ? `${name}: ${message}` : message;\n};\n\nexport const describeWebSocketEvent = (event: unknown): string => {\n if (event instanceof Error) {\n return event.message ? `${event.name}: ${event.message}` : event.name;\n }\n\n if (typeof event === 'string') {\n return event;\n }\n\n if (!event || typeof event !== 'object') {\n return String(event);\n }\n\n const record = event as Record<string, unknown>;\n const parts: string[] = [];\n\n const topLevelMessage = extractNestedErrorMessage(record);\n if (topLevelMessage) {\n parts.push(topLevelMessage);\n }\n\n const nestedErrorMessage = extractNestedErrorMessage(record.error);\n if (nestedErrorMessage && nestedErrorMessage !== topLevelMessage) {\n parts.push(`error=${nestedErrorMessage}`);\n }\n\n if (typeof record.type === 'string' && record.type) {\n parts.push(`type=${record.type}`);\n }\n\n if (typeof record.code === 'number') {\n parts.push(`code=${record.code}`);\n }\n\n if (typeof record.reason === 'string' && record.reason && record.reason !== topLevelMessage) {\n parts.push(`reason=${record.reason}`);\n }\n\n if (typeof record.wasClean === 'boolean') {\n parts.push(`wasClean=${record.wasClean}`);\n }\n\n const target = (record.target ?? record.currentTarget) as Record<string, unknown> | undefined;\n if (target && typeof target === 'object') {\n if (typeof target.url === 'string' && target.url) {\n parts.push(`url=${sanitizeWebSocketUrl(target.url)}`);\n }\n\n const readyState = getReadyStateLabel(target.readyState);\n if (readyState) {\n parts.push(`readyState=${readyState}`);\n }\n }\n\n return parts.length > 0 ? parts.join(' | ') : 'Unknown websocket event';\n};\n"]}
|