@rynx-ai/server 0.1.11-beta.4 → 0.1.11-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control-api.d.ts +17 -4
- package/dist/control-api.js +722 -84
- package/dist/control-web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/control-web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/control-web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/control-web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/control-web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/control-web/assets/abap-CLvhMVsD.js +1 -0
- package/dist/control-web/assets/abnfDiagram-VRR7QNED-D_NL89dn.js +1 -0
- package/dist/control-web/assets/actionscript-3--17pq3dv.js +1 -0
- package/dist/control-web/assets/ada-C5qYipkI.js +1 -0
- package/dist/control-web/assets/andromeeda-vGVdxbeo.js +1 -0
- package/dist/control-web/assets/angular-html-DlZBZkSp.js +1 -0
- package/dist/control-web/assets/angular-ts-BVPGOT0K.js +1 -0
- package/dist/control-web/assets/apache-U0d_L8uA.js +1 -0
- package/dist/control-web/assets/apex-CGTLDQj6.js +1 -0
- package/dist/control-web/assets/apl-cDmXqmZ-.js +1 -0
- package/dist/control-web/assets/applescript-CCn79oCD.js +1 -0
- package/dist/control-web/assets/ara-4CJ0cIlV.js +1 -0
- package/dist/control-web/assets/arc-Pry-7G1_.js +1 -0
- package/dist/control-web/assets/architecture-TIHT7OUA-C9wU1KtW.js +1 -0
- package/dist/control-web/assets/architectureDiagram-ZJ3FMSHR-CV0rxVH6.js +36 -0
- package/dist/control-web/assets/array-BifhSqXX.js +1 -0
- package/dist/control-web/assets/asciidoc-DE70LPWp.js +1 -0
- package/dist/control-web/assets/asm-Cmm7eHzH.js +1 -0
- package/dist/control-web/assets/astro-B1Q6BwBx.js +1 -0
- package/dist/control-web/assets/aurora-x-CDeNXAV0.js +1 -0
- package/dist/control-web/assets/awk-BWXHIvNe.js +1 -0
- package/dist/control-web/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/dist/control-web/assets/ayu-light-C3h-C4tm.js +1 -0
- package/dist/control-web/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/dist/control-web/assets/ballerina-B7ZEbQpA.js +1 -0
- package/dist/control-web/assets/bat-Bo4NYOV-.js +1 -0
- package/dist/control-web/assets/beancount-D-usSTwE.js +1 -0
- package/dist/control-web/assets/berry-DKpUyyne.js +1 -0
- package/dist/control-web/assets/bibtex-Ci_nEsc7.js +1 -0
- package/dist/control-web/assets/bicep-CUHmPFLl.js +1 -0
- package/dist/control-web/assets/bird2-C2hNVINV.js +1 -0
- package/dist/control-web/assets/blade-Xpu-LGTm.js +1 -0
- package/dist/control-web/assets/blockDiagram-677ZJIJ3-Cc7nrkZh.js +132 -0
- package/dist/control-web/assets/bsl-BkkzgIyY.js +1 -0
- package/dist/control-web/assets/c-iCihek07.js +1 -0
- package/dist/control-web/assets/c3-CnJL0r0V.js +1 -0
- package/dist/control-web/assets/c4Diagram-LMCZKHZV-BPRU9m-F.js +10 -0
- package/dist/control-web/assets/cadence-CQ2zXKGN.js +1 -0
- package/dist/control-web/assets/cairo-DLTphjLi.js +1 -0
- package/dist/control-web/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
- package/dist/control-web/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
- package/dist/control-web/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
- package/dist/control-web/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
- package/dist/control-web/assets/channel-BFm2_j8K.js +1 -0
- package/dist/control-web/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/control-web/assets/chunk-32BRIVSS-Bbq3O54m.js +1 -0
- package/dist/control-web/assets/chunk-52WLFC77-sD4al-Ob.js +10 -0
- package/dist/control-web/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/control-web/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
- package/dist/control-web/assets/chunk-C7G6YPKG-DqHaDS1O.js +1 -0
- package/dist/control-web/assets/chunk-EX3LRPZG-36GNQ5wp.js +231 -0
- package/dist/control-web/assets/chunk-HOUHSVGY-DeZ63q1j.js +1 -0
- package/dist/control-web/assets/chunk-ICXQ74PX-D2yF6lD_.js +2 -0
- package/dist/control-web/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/control-web/assets/chunk-KEIR6QF5-BICK3FdT.js +161 -0
- package/dist/control-web/assets/chunk-MOJQB5TN-CdaKyBz5.js +88 -0
- package/dist/control-web/assets/chunk-OGEWGWER-eOXC7kiH.js +1 -0
- package/dist/control-web/assets/chunk-PUDLZKDR-6w0LILL_.js +156 -0
- package/dist/control-web/assets/chunk-Q4XR5HBZ-CXgD5TGL.js +70 -0
- package/dist/control-web/assets/chunk-RYQCIY6F-BsoV8yK2.js +1 -0
- package/dist/control-web/assets/chunk-V7JOEXUC-BfoZ78b6.js +206 -0
- package/dist/control-web/assets/chunk-VR4S4FIN-BW2gCEMQ.js +1 -0
- package/dist/control-web/assets/chunk-WYO6CB5R-CHn7hulw.js +128 -0
- package/dist/control-web/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
- package/dist/control-web/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/control-web/assets/chunk-ZGVPDNZ5-CmFP0-fr.js +62 -0
- package/dist/control-web/assets/clarity-SemFz856.js +1 -0
- package/dist/control-web/assets/classDiagram-OUVF2IWQ-CUe_bETB.js +1 -0
- package/dist/control-web/assets/classDiagram-v2-EOCWNBFH-CUe_bETB.js +1 -0
- package/dist/control-web/assets/clojure-DqKBuwfJ.js +1 -0
- package/dist/control-web/assets/cmake-Bj61d0ZC.js +1 -0
- package/dist/control-web/assets/cobol-BsV-839J.js +1 -0
- package/dist/control-web/assets/codeowners-C8r90Shi.js +1 -0
- package/dist/control-web/assets/codeql-oeQT6MSM.js +1 -0
- package/dist/control-web/assets/coffee-CiiSLhB6.js +1 -0
- package/dist/control-web/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/dist/control-web/assets/coq-BrsZFFmf.js +1 -0
- package/dist/control-web/assets/cose-bilkent-JH36ORCC-lJEhNiw_.js +1 -0
- package/dist/control-web/assets/cpp-DjoE5qBx.js +1 -0
- package/dist/control-web/assets/crystal-DDxHDkHz.js +1 -0
- package/dist/control-web/assets/csharp-Ct8U2NOr.js +1 -0
- package/dist/control-web/assets/css-LjpOdHib.js +1 -0
- package/dist/control-web/assets/csv-Dx-8-gkx.js +1 -0
- package/dist/control-web/assets/cue-CE9AQfxI.js +1 -0
- package/dist/control-web/assets/cynefin-VYW2F7L2-NaLr7Qlq.js +1 -0
- package/dist/control-web/assets/cynefinDiagram-TSTJHNR4-C90wpjAI.js +62 -0
- package/dist/control-web/assets/cypher-ClKdZ_lG.js +1 -0
- package/dist/control-web/assets/cytoscape.esm-B-NFISlW.js +321 -0
- package/dist/control-web/assets/d-qD-0Kul2.js +1 -0
- package/dist/control-web/assets/dagre-Buvkdvvj.js +1 -0
- package/dist/control-web/assets/dagre-VKFMJZFB-BxrPFWTb.js +4 -0
- package/dist/control-web/assets/dark-plus-Cs2F2srj.js +1 -0
- package/dist/control-web/assets/dart-DkHntEIa.js +1 -0
- package/dist/control-web/assets/dax-BkyTk9wS.js +1 -0
- package/dist/control-web/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/control-web/assets/desktop-Dlh5hvp9.js +1 -0
- package/dist/control-web/assets/diagram-FQU43EPY-VIQINsvz.js +3 -0
- package/dist/control-web/assets/diagram-G47NLZAW-DFeAfYXn.js +24 -0
- package/dist/control-web/assets/diagram-NH7WQ7WH-ATzdppDd.js +24 -0
- package/dist/control-web/assets/diagram-OA4YK3LP-DJZpWmbl.js +30 -0
- package/dist/control-web/assets/diagram-WEI45ONY-CqDHcW3g.js +41 -0
- package/dist/control-web/assets/diff-woXpYk--.js +1 -0
- package/dist/control-web/assets/dist-Dx9YWgcW.js +153 -0
- package/dist/control-web/assets/dist-v5Q1xZ2K.js +1 -0
- package/dist/control-web/assets/docker-IyjqRm3v.js +1 -0
- package/dist/control-web/assets/dotenv-_5a1GRtc.js +1 -0
- package/dist/control-web/assets/dracula-BHWKrbxM.js +1 -0
- package/dist/control-web/assets/dracula-soft-5eyTD99u.js +1 -0
- package/dist/control-web/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/dist/control-web/assets/ebnfDiagram-CCIWWBDH-DnP6dHND.js +1 -0
- package/dist/control-web/assets/edge-8z7Jp9dO.js +1 -0
- package/dist/control-web/assets/elixir-CUV54ev5.js +1 -0
- package/dist/control-web/assets/elm-o4NJxfws.js +1 -0
- package/dist/control-web/assets/emacs-lisp-C9PiwqqW.js +1 -0
- package/dist/control-web/assets/erDiagram-Q63AITRT-Bo8bFqrZ.js +85 -0
- package/dist/control-web/assets/erb-CIsHcwm1.js +1 -0
- package/dist/control-web/assets/erlang-Cphh6RMH.js +1 -0
- package/dist/control-web/assets/eventmodeling-45OFAUF4-DTN8wqsu.js +1 -0
- package/dist/control-web/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/dist/control-web/assets/everforest-light-Df2xbC6M.js +1 -0
- package/dist/control-web/assets/fennel-DQxkIbk2.js +1 -0
- package/dist/control-web/assets/fish-BJitypiv.js +1 -0
- package/dist/control-web/assets/flowDiagram-23GEKE2U-BwjqRyvd.js +1 -0
- package/dist/control-web/assets/fluent-C03EYrpw.js +1 -0
- package/dist/control-web/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/dist/control-web/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/dist/control-web/assets/fsharp-D13ZGOAj.js +1 -0
- package/dist/control-web/assets/ganttDiagram-NO4QXBWP-kxQaBTzd.js +292 -0
- package/dist/control-web/assets/gdresource-C0sCabJj.js +1 -0
- package/dist/control-web/assets/gdscript-Cp2uCuqX.js +1 -0
- package/dist/control-web/assets/gdshader-CBce3t8t.js +1 -0
- package/dist/control-web/assets/genie-CV2tkWYe.js +1 -0
- package/dist/control-web/assets/gherkin-DExj1W_8.js +1 -0
- package/dist/control-web/assets/git-commit-BSykSTBG.js +1 -0
- package/dist/control-web/assets/git-rebase-BDPpS8w6.js +1 -0
- package/dist/control-web/assets/gitGraph-TEB2WS4Q-a646NnuJ.js +1 -0
- package/dist/control-web/assets/gitGraphDiagram-IHSO6WYX-BBe0q0At.js +106 -0
- package/dist/control-web/assets/github-dark-C-LZuMrd.js +1 -0
- package/dist/control-web/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/dist/control-web/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/dist/control-web/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/dist/control-web/assets/github-light-EUqPIrTm.js +1 -0
- package/dist/control-web/assets/github-light-default-BXViO-2h.js +1 -0
- package/dist/control-web/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/dist/control-web/assets/gleam-CSRkHgEL.js +1 -0
- package/dist/control-web/assets/glimmer-js-OEO36pDk.js +1 -0
- package/dist/control-web/assets/glimmer-ts-BnAPyISE.js +1 -0
- package/dist/control-web/assets/glsl-D5MA2a_X.js +1 -0
- package/dist/control-web/assets/gn-ilITqXS6.js +1 -0
- package/dist/control-web/assets/gnuplot-7GGW24-e.js +1 -0
- package/dist/control-web/assets/go-BJwz_mda.js +1 -0
- package/dist/control-web/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/control-web/assets/graphql-Ctjuxyvl.js +1 -0
- package/dist/control-web/assets/groovy-CacY0gHj.js +1 -0
- package/dist/control-web/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/dist/control-web/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/dist/control-web/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/dist/control-web/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/dist/control-web/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/dist/control-web/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/dist/control-web/assets/hack-D_mkkoLd.js +1 -0
- package/dist/control-web/assets/haml-mpgecWZ6.js +1 -0
- package/dist/control-web/assets/handlebars-CAx_777f.js +1 -0
- package/dist/control-web/assets/haskell-D8IpX4py.js +1 -0
- package/dist/control-web/assets/haxe-OTjmBuCE.js +1 -0
- package/dist/control-web/assets/hcl-Dh228itO.js +1 -0
- package/dist/control-web/assets/highlighted-body-OFNGDK62-DVCHy9oI.js +1 -0
- package/dist/control-web/assets/hjson-CxZEssPk.js +1 -0
- package/dist/control-web/assets/hlsl-Cvrh5tZx.js +1 -0
- package/dist/control-web/assets/horizon-CE9ld1lL.js +1 -0
- package/dist/control-web/assets/horizon-bright-Br1oVSNq.js +1 -0
- package/dist/control-web/assets/houston-CsvMBhTu.js +1 -0
- package/dist/control-web/assets/html-B2lrdnWr.js +1 -0
- package/dist/control-web/assets/html-derivative-CDfZYcul.js +1 -0
- package/dist/control-web/assets/http-kmH8AyfE.js +1 -0
- package/dist/control-web/assets/hurl-DCZHXKU4.js +1 -0
- package/dist/control-web/assets/hxml-B0Qn7Nwc.js +1 -0
- package/dist/control-web/assets/hy-CZbG8q4J.js +1 -0
- package/dist/control-web/assets/imba-DsUTQ-LC.js +1 -0
- package/dist/control-web/assets/index-D7URT6K_.js +140 -0
- package/dist/control-web/assets/index-uEpvRMX9.css +1 -0
- package/dist/control-web/assets/info-DKCQHKI2-Cp_JrY-b.js +1 -0
- package/dist/control-web/assets/infoDiagram-FWYZ7A6U-CAm-h4F_.js +2 -0
- package/dist/control-web/assets/ini-B5eOa1yu.js +1 -0
- package/dist/control-web/assets/init-C-OQMol4.js +1 -0
- package/dist/control-web/assets/ishikawaDiagram-FXEZZL3T-O17pqcWr.js +70 -0
- package/dist/control-web/assets/java-DdHNQ9hk.js +1 -0
- package/dist/control-web/assets/javascript-obGGvMPs.js +1 -0
- package/dist/control-web/assets/jinja-BMiPVedm.js +1 -0
- package/dist/control-web/assets/jison-CBjhYtSs.js +1 -0
- package/dist/control-web/assets/journeyDiagram-5HDEW3XC-DQ-JuSoR.js +139 -0
- package/dist/control-web/assets/json-DAgxKhMr.js +1 -0
- package/dist/control-web/assets/json5-BR5RXkoi.js +1 -0
- package/dist/control-web/assets/jsonc-CYpm1nAK.js +1 -0
- package/dist/control-web/assets/jsonl-CmCQp5Yx.js +1 -0
- package/dist/control-web/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/dist/control-web/assets/jssm-DXw9l8Rf.js +1 -0
- package/dist/control-web/assets/jsx-gTgmArGx.js +1 -0
- package/dist/control-web/assets/julia-CjHxn3vf.js +1 -0
- package/dist/control-web/assets/just-DMArCiVH.js +1 -0
- package/dist/control-web/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
- package/dist/control-web/assets/kanagawa-lotus-BN08jTvb.js +1 -0
- package/dist/control-web/assets/kanagawa-wave-CTweb8Dz.js +1 -0
- package/dist/control-web/assets/kanban-definition-HUTT4EX6-Cgv3kPbm.js +89 -0
- package/dist/control-web/assets/katex-CyHG4N6b.js +1 -0
- package/dist/control-web/assets/kdl-CsD5j6eV.js +1 -0
- package/dist/control-web/assets/kotlin-DhhofPvG.js +1 -0
- package/dist/control-web/assets/kusto-BUv0MjJC.js +1 -0
- package/dist/control-web/assets/laserwave-C_8bwKvT.js +1 -0
- package/dist/control-web/assets/latex-D9bvcAJr.js +1 -0
- package/dist/control-web/assets/lean-CewbzKMR.js +1 -0
- package/dist/control-web/assets/less-DVTAwKKz.js +1 -0
- package/dist/control-web/assets/lib-BZ_F5vVH.js +1 -0
- package/dist/control-web/assets/light-plus-DVQuIRkW.js +1 -0
- package/dist/control-web/assets/line-DUsXzGJZ.js +1 -0
- package/dist/control-web/assets/linear-DmucvK78.js +1 -0
- package/dist/control-web/assets/liquid-CCX5qouA.js +1 -0
- package/dist/control-web/assets/llvm-Cm23YOpf.js +1 -0
- package/dist/control-web/assets/log-BNLmms1o.js +1 -0
- package/dist/control-web/assets/logo-Cluzi2Zq.js +1 -0
- package/dist/control-web/assets/lua-FONpmTUP.js +1 -0
- package/dist/control-web/assets/luau-CNKltnaQ.js +1 -0
- package/dist/control-web/assets/make-Dixweg8N.js +1 -0
- package/dist/control-web/assets/map-BaFkSB1l.js +1 -0
- package/dist/control-web/assets/markdown-BYOwaDjH.js +1 -0
- package/dist/control-web/assets/markdown-streamdown-4N4AcNp5.js +433 -0
- package/dist/control-web/assets/markdown-streamdown-DEcVZfaU.css +1 -0
- package/dist/control-web/assets/marko-oPGh3KfH.js +1 -0
- package/dist/control-web/assets/material-theme-Bm3Qr25_.js +1 -0
- package/dist/control-web/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/dist/control-web/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/dist/control-web/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/dist/control-web/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/dist/control-web/assets/matlab-D7qyCx1q.js +1 -0
- package/dist/control-web/assets/mdc-B_uQHOlt.js +1 -0
- package/dist/control-web/assets/mdx-DQZ5AkYe.js +1 -0
- package/dist/control-web/assets/mermaid-Bk4SNUv9.js +1 -0
- package/dist/control-web/assets/mermaid-GHXKKRXX-BElZGKGd.js +1 -0
- package/dist/control-web/assets/mermaid-parser.core-VMln12Kd.js +7 -0
- package/dist/control-web/assets/min-dark-BSWPekZh.js +1 -0
- package/dist/control-web/assets/min-light-DDpmG2fV.js +1 -0
- package/dist/control-web/assets/mindmap-definition-LN4V7U3C-Bn0lH-UM.js +96 -0
- package/dist/control-web/assets/mipsasm-BMqwQI7S.js +1 -0
- package/dist/control-web/assets/mojo-BgCJLMeH.js +1 -0
- package/dist/control-web/assets/monokai-CdkpiU2Y.js +1 -0
- package/dist/control-web/assets/moonbit-CaWjb8XO.js +1 -0
- package/dist/control-web/assets/move-B1IS1UjX.js +1 -0
- package/dist/control-web/assets/narrat-_X_XdTYD.js +1 -0
- package/dist/control-web/assets/nextflow-Bbiyy34d.js +1 -0
- package/dist/control-web/assets/nextflow-groovy-Dc_ddanL.js +1 -0
- package/dist/control-web/assets/nginx-BTMw9COX.js +1 -0
- package/dist/control-web/assets/night-owl-DhmEMT88.js +1 -0
- package/dist/control-web/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/dist/control-web/assets/nim-8PQFL6ZB.js +1 -0
- package/dist/control-web/assets/nix-IvuFDN5E.js +1 -0
- package/dist/control-web/assets/nord-Cb4Vim4T.js +1 -0
- package/dist/control-web/assets/nushell-DcLAeLz5.js +1 -0
- package/dist/control-web/assets/objective-c-D1A_Heim.js +1 -0
- package/dist/control-web/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/dist/control-web/assets/ocaml-O90oeIOV.js +1 -0
- package/dist/control-web/assets/odin-B1RWQWA5.js +1 -0
- package/dist/control-web/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/dist/control-web/assets/one-light-D7Lr4KcI.js +1 -0
- package/dist/control-web/assets/openscad-BUDT5pXO.js +1 -0
- package/dist/control-web/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dist/control-web/assets/packet-7NZHBO7P-Zw8iJ8lo.js +1 -0
- package/dist/control-web/assets/pascal-4ZHwLPI5.js +1 -0
- package/dist/control-web/assets/path-fybaL0A-.js +1 -0
- package/dist/control-web/assets/pegDiagram-2B236MQR-CtF7vVs_.js +1 -0
- package/dist/control-web/assets/perl-Vf0i0hAx.js +1 -0
- package/dist/control-web/assets/php-am1OsKhm.js +1 -0
- package/dist/control-web/assets/pie-RZYD4A2V-su_3QGU2.js +1 -0
- package/dist/control-web/assets/pieDiagram-ENE6RG2P-BkMUBLE1.js +39 -0
- package/dist/control-web/assets/pkl-ot-7Btpt.js +1 -0
- package/dist/control-web/assets/plastic-DQwYfKfQ.js +1 -0
- package/dist/control-web/assets/plsql-DGHpHOYJ.js +1 -0
- package/dist/control-web/assets/po-BiJDBrnU.js +1 -0
- package/dist/control-web/assets/poimandres-DRFjx7u4.js +1 -0
- package/dist/control-web/assets/polar-C7UOKdEL.js +1 -0
- package/dist/control-web/assets/postcss-BXeXVLqQ.js +1 -0
- package/dist/control-web/assets/powerquery-DNMTfnFr.js +1 -0
- package/dist/control-web/assets/powershell-DshXNtvi.js +1 -0
- package/dist/control-web/assets/prisma-BsRQq5mF.js +1 -0
- package/dist/control-web/assets/prolog-iXnhIJG7.js +1 -0
- package/dist/control-web/assets/proto-DB4EqR-F.js +1 -0
- package/dist/control-web/assets/pug-DO6yvBr3.js +1 -0
- package/dist/control-web/assets/puppet-CDv2pdJW.js +1 -0
- package/dist/control-web/assets/purescript-9MfHhQsQ.js +1 -0
- package/dist/control-web/assets/python-gzcpVVnB.js +1 -0
- package/dist/control-web/assets/qml-_a-QhfPD.js +1 -0
- package/dist/control-web/assets/qmldir-DCQb3MpD.js +1 -0
- package/dist/control-web/assets/qss-Fe1Jh2GI.js +1 -0
- package/dist/control-web/assets/quadrantDiagram-ABIIQ3AL-ba-VaqMe.js +7 -0
- package/dist/control-web/assets/r-D6UWEOL2.js +1 -0
- package/dist/control-web/assets/racket-DcIDlBhZ.js +1 -0
- package/dist/control-web/assets/radar-I7S5WNFK-Dat0rqem.js +1 -0
- package/dist/control-web/assets/railroad-3IZDKUUU-Dh2-s8r8.js +1 -0
- package/dist/control-web/assets/railroad-abnf-AHOZXSZD-CNUwq0JR.js +1 -0
- package/dist/control-web/assets/railroad-ebnf-EBAXGLYW-RHr0duea.js +1 -0
- package/dist/control-web/assets/railroad-peg-LSFZ7HO6-CVBWS2eU.js +1 -0
- package/dist/control-web/assets/railroadDiagram-RFXS5EU6-BiJX3SY-.js +1 -0
- package/dist/control-web/assets/raku-B3gFvitq.js +1 -0
- package/dist/control-web/assets/razor-CMVBVp3T.js +1 -0
- package/dist/control-web/assets/red-CJ3rzSJv.js +1 -0
- package/dist/control-web/assets/reg-CRGYupPL.js +1 -0
- package/dist/control-web/assets/regexp-DR20uMnK.js +1 -0
- package/dist/control-web/assets/rel-BtDbiS_P.js +1 -0
- package/dist/control-web/assets/requirementDiagram-TGXJPOKE-CFfakCzs.js +84 -0
- package/dist/control-web/assets/riscv-Ckw8ddFX.js +1 -0
- package/dist/control-web/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/control-web/assets/ron-VUp2lXgN.js +1 -0
- package/dist/control-web/assets/rose-pine-BthvhNj6.js +1 -0
- package/dist/control-web/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
- package/dist/control-web/assets/rose-pine-moon-hon4tzzS.js +1 -0
- package/dist/control-web/assets/rosmsg-CAekHB0j.js +1 -0
- package/dist/control-web/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dist/control-web/assets/rst-CgIrbW_q.js +1 -0
- package/dist/control-web/assets/ruby-Dp6Zud9H.js +1 -0
- package/dist/control-web/assets/rust-Cfkwpbl8.js +1 -0
- package/dist/control-web/assets/sankeyDiagram-HTMAVEWB-jgDi0God.js +40 -0
- package/dist/control-web/assets/sas-B6p8-ynO.js +1 -0
- package/dist/control-web/assets/sass-DXrisJhu.js +1 -0
- package/dist/control-web/assets/scala-DKOlJaKm.js +1 -0
- package/dist/control-web/assets/scheme-DQCgrYNe.js +1 -0
- package/dist/control-web/assets/scss-DcoSS-ti.js +1 -0
- package/dist/control-web/assets/sdbl-bTVj8UrX.js +1 -0
- package/dist/control-web/assets/sequenceDiagram-DBY2YBRQ-DBfyyb0N.js +162 -0
- package/dist/control-web/assets/shaderlab-TOUzSsQk.js +1 -0
- package/dist/control-web/assets/shellscript-Da78Ox-3.js +1 -0
- package/dist/control-web/assets/shellsession-CVsQGYfZ.js +1 -0
- package/dist/control-web/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
- package/dist/control-web/assets/slack-dark-DnToyrRv.js +1 -0
- package/dist/control-web/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/dist/control-web/assets/smalltalk-B16xEiuN.js +1 -0
- package/dist/control-web/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/dist/control-web/assets/solarized-dark-DV17i1UV.js +1 -0
- package/dist/control-web/assets/solarized-light-DSh2HLQt.js +1 -0
- package/dist/control-web/assets/solidity-CKzVLygQ.js +1 -0
- package/dist/control-web/assets/soy-B5n_eHSp.js +1 -0
- package/dist/control-web/assets/sparql-D_iOobhT.js +1 -0
- package/dist/control-web/assets/splunk-BC2Px7Mm.js +1 -0
- package/dist/control-web/assets/sql-ClgswhA6.js +1 -0
- package/dist/control-web/assets/src-B6xuSHsQ.js +1 -0
- package/dist/control-web/assets/ssh-config-BgfXC-Er.js +1 -0
- package/dist/control-web/assets/stata-RoaAgbqU.js +1 -0
- package/dist/control-web/assets/stateDiagram-2N3HPSRC-Dwb_ncVi.js +1 -0
- package/dist/control-web/assets/stateDiagram-v2-6OUMAXLB-DI0opaA1.js +1 -0
- package/dist/control-web/assets/stylus-B6D30XZt.js +1 -0
- package/dist/control-web/assets/surrealql-DIn4NJsS.js +1 -0
- package/dist/control-web/assets/svelte-CIt8Fl9I.js +1 -0
- package/dist/control-web/assets/swift-DonLKvLd.js +1 -0
- package/dist/control-web/assets/swimlanes-5IMT3BWC-DW0LuiIV.js +2 -0
- package/dist/control-web/assets/swimlanesDiagram-G3AALYLV-DDTVjcOR.js +8 -0
- package/dist/control-web/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/dist/control-web/assets/system-verilog-DJ5XKQeo.js +1 -0
- package/dist/control-web/assets/systemd-BxMlprV5.js +1 -0
- package/dist/control-web/assets/talonscript-CohzipZa.js +1 -0
- package/dist/control-web/assets/tasl-DMoTqEGO.js +1 -0
- package/dist/control-web/assets/tcl-CZd0xW_V.js +1 -0
- package/dist/control-web/assets/templ-BREsJpNc.js +1 -0
- package/dist/control-web/assets/terraform-DswuEJGm.js +1 -0
- package/dist/control-web/assets/tex-0w6-Dtgt.js +1 -0
- package/dist/control-web/assets/timeline-definition-FHXFAJF6-DeX4B_B8.js +120 -0
- package/dist/control-web/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/dist/control-web/assets/toml-CcmNWLt0.js +1 -0
- package/dist/control-web/assets/treeView-QDETBFTQ-D1UXtICj.js +1 -0
- package/dist/control-web/assets/treemap-6X3UGDF4-CrppzjZH.js +1 -0
- package/dist/control-web/assets/ts-tags-q3pptdMi.js +1 -0
- package/dist/control-web/assets/tsv-sltzmVWM.js +1 -0
- package/dist/control-web/assets/tsx-CUOciP0b.js +1 -0
- package/dist/control-web/assets/turtle-ByJddavk.js +1 -0
- package/dist/control-web/assets/twig-LIeLXgf5.js +1 -0
- package/dist/control-web/assets/typescript-BydbNFcO.js +1 -0
- package/dist/control-web/assets/typespec-B88KGewJ.js +1 -0
- package/dist/control-web/assets/typst-DI99ib-x.js +1 -0
- package/dist/control-web/assets/v-DETTlOr0.js +1 -0
- package/dist/control-web/assets/vala-zf12oZj6.js +1 -0
- package/dist/control-web/assets/vb-Djn5o6TS.js +1 -0
- package/dist/control-web/assets/vennDiagram-L72KCM5P-BYpf-7VR.js +34 -0
- package/dist/control-web/assets/verilog-CiiDBU1e.js +1 -0
- package/dist/control-web/assets/vesper-D5bVUKB1.js +1 -0
- package/dist/control-web/assets/vhdl-BroJfC0k.js +1 -0
- package/dist/control-web/assets/viml-DvXPmvsu.js +1 -0
- package/dist/control-web/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/dist/control-web/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/dist/control-web/assets/vitesse-light-VbXTXTou.js +1 -0
- package/dist/control-web/assets/vue-DVSfBueU.js +1 -0
- package/dist/control-web/assets/vue-html-DkKkQnZL.js +1 -0
- package/dist/control-web/assets/vue-vine-pWqEcBkW.js +1 -0
- package/dist/control-web/assets/vyper-CgoNMtux.js +1 -0
- package/dist/control-web/assets/wardley-OPB4EBWU-B9rA0UsV.js +1 -0
- package/dist/control-web/assets/wardleyDiagram-EHGQE667-BdvAUa5F.js +78 -0
- package/dist/control-web/assets/wasm-BnjxR4X6.js +1 -0
- package/dist/control-web/assets/wasm-ByWQv1Qj.js +1 -0
- package/dist/control-web/assets/wenyan-C8pVoKbM.js +1 -0
- package/dist/control-web/assets/wgsl-BsKzXJz4.js +1 -0
- package/dist/control-web/assets/wikitext-ClFFjSW2.js +1 -0
- package/dist/control-web/assets/wit-DdvCle-K.js +1 -0
- package/dist/control-web/assets/wolfram-DLL8P-h_.js +1 -0
- package/dist/control-web/assets/xml-BlnrEAEy.js +1 -0
- package/dist/control-web/assets/xsl-BOPS8gLt.js +1 -0
- package/dist/control-web/assets/xychartDiagram-FW5EYKEG-BaEV3pGm.js +7 -0
- package/dist/control-web/assets/yaml-Du_6cdrH.js +1 -0
- package/dist/control-web/assets/zenscript-BnlCZFoB.js +1 -0
- package/dist/control-web/assets/zig-CMLA9XwU.js +1 -0
- package/dist/control-web/index.html +3 -2
- package/dist/control-web-dist.d.ts +1 -1
- package/dist/control-web-dist.js +4 -2
- package/dist/desktop-browser-host.d.ts +3 -1
- package/dist/desktop-browser-host.js +39 -4
- package/dist/direct-runtime-server.js +187 -153
- package/dist/machine-session-service.d.ts +105 -15
- package/dist/machine-session-service.js +781 -87
- package/dist/remote-runtime-dispatcher.d.ts +2 -2
- package/dist/remote-runtime-dispatcher.js +42 -2
- package/dist/remote-runtime-session-projection.d.ts +1 -0
- package/dist/remote-runtime-session-projection.js +12 -0
- package/dist/server.d.ts +64 -11
- package/dist/server.js +422 -55
- package/dist/session-browser-service.d.ts +24 -4
- package/dist/session-browser-service.js +127 -1
- package/dist/session-pending-inputs.d.ts +42 -0
- package/dist/session-pending-inputs.js +87 -0
- package/dist/session-portal.d.ts +54 -0
- package/dist/session-portal.js +997 -0
- package/dist/session-runtime-index.d.ts +3 -6
- package/dist/session-runtime-index.js +96 -38
- package/dist/session-terminal-host.d.ts +22 -2
- package/dist/session-terminal-host.js +66 -83
- package/dist/terminal-ws.d.ts +4 -1
- package/dist/terminal-ws.js +93 -27
- package/package.json +7 -7
- package/dist/control-web/assets/highlighted-body-OFNGDK62-DWWsUtHF.js +0 -1
- package/dist/control-web/assets/index-BnX7NWJX.js +0 -689
- package/dist/control-web/assets/index-CUoWRX2i.css +0 -32
- package/dist/control-web/assets/mermaid-GHXKKRXX-C1fxAgiw.js +0 -131
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { AdmissionReservation } from "@rynx-ai/core";
|
|
2
|
-
import { type RuntimeBrowserCloseParams, type RuntimeBrowserCloseResult, type RuntimeBrowserExecutionBackend, type RuntimeBrowserOpenParams, type RuntimeBrowserPageCreateParams, type RuntimeBrowserPageMutationParams, type RuntimeBrowserPageNavigateParams, type RuntimeBrowserState, type RuntimeBrowserStateGetParams } from "@rynx-ai/protocol/runtime-browser";
|
|
2
|
+
import { type RuntimeBrowserCloseParams, type RuntimeBrowserCloseResult, type RuntimeBrowserExecutionBackend, type RuntimeBrowserOpenParams, type RuntimeBrowserPageCreateParams, type RuntimeBrowserPageMutationParams, type RuntimeBrowserPageNavigateParams, type RuntimeBrowserRequestHeadersConfig, type RuntimeBrowserRequestHeadersGetParams, type RuntimeBrowserRequestHeadersPolicy, type RuntimeBrowserRequestHeadersSetParams, type RuntimeBrowserState, type RuntimeBrowserStateGetParams } from "@rynx-ai/protocol/runtime-browser";
|
|
3
3
|
import type { RuntimeBrowserSurfaceFormat, RuntimeBrowserSurfaceInputEvent } from "@rynx-ai/protocol/runtime-browser-surface";
|
|
4
4
|
import { type RuntimeBrowserEndpointDescriptor } from "@rynx-ai/protocol/runtime-browser-bootstrap";
|
|
5
5
|
export interface SessionBrowserHostCreateInput {
|
|
6
6
|
sessionId: string;
|
|
7
7
|
browserGeneration: number;
|
|
8
|
+
/** Required at this internal boundary so every Host installs the policy
|
|
9
|
+
* before it permits the first navigation. Wire-version compatibility stays
|
|
10
|
+
* inside the concrete Host adapter. */
|
|
11
|
+
requestHeaders: RuntimeBrowserRequestHeadersConfig;
|
|
8
12
|
url?: string;
|
|
9
13
|
}
|
|
10
14
|
/** Generation-scoped physical page state. `hostPageId` never leaves the service. */
|
|
@@ -136,6 +140,8 @@ export interface SessionBrowserHostHandle {
|
|
|
136
140
|
goBack(hostPageId: string): Promise<void>;
|
|
137
141
|
goForward(hostPageId: string): Promise<void>;
|
|
138
142
|
reload(hostPageId: string): Promise<void>;
|
|
143
|
+
/** Replaces the Session-wide desired request Header projection for this generation. */
|
|
144
|
+
setRequestHeaders(config: RuntimeBrowserRequestHeadersConfig): Promise<void>;
|
|
139
145
|
close(): Promise<void>;
|
|
140
146
|
}
|
|
141
147
|
/** Physical Browser factory selected by the Runtime composition root. */
|
|
@@ -156,19 +162,26 @@ export interface SessionBrowserServiceOptions {
|
|
|
156
162
|
pageIdFactory?: () => string;
|
|
157
163
|
/** Injectable boot nonce; production randomization fences stale pre-restart mutations. */
|
|
158
164
|
bootGenerationSeed?: number;
|
|
165
|
+
/** Injectable only for deterministic CAS tests; production uses 128 random bits. */
|
|
166
|
+
requestHeaderRevisionSeed?: string;
|
|
159
167
|
/**
|
|
160
168
|
* Synchronous daemon admission fence. A successful reservation is held until
|
|
161
169
|
* Browser open has either failed or registered the physical Host handle.
|
|
162
170
|
*/
|
|
163
171
|
admissionReserve?: () => AdmissionReservation | undefined;
|
|
164
172
|
}
|
|
165
|
-
export type SessionBrowserHostErrorCode = "unavailable" | "page_not_found" | "capacity" | "outcome_unknown";
|
|
173
|
+
export type SessionBrowserHostErrorCode = "unavailable" | "unsupported" | "page_not_found" | "capacity" | "outcome_unknown";
|
|
166
174
|
/** Expected failure reported by a Browser Host implementation. */
|
|
167
175
|
export declare class SessionBrowserHostError extends Error {
|
|
168
176
|
readonly code: SessionBrowserHostErrorCode;
|
|
169
177
|
constructor(code: SessionBrowserHostErrorCode, message: string, options?: ErrorOptions);
|
|
170
178
|
}
|
|
171
|
-
|
|
179
|
+
/** Narrow Session-owned policy port used by transports and Plugin hosting. */
|
|
180
|
+
export interface SessionBrowserRequestHeadersPort {
|
|
181
|
+
getRequestHeaders(input: RuntimeBrowserRequestHeadersGetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
|
|
182
|
+
setRequestHeaders(input: RuntimeBrowserRequestHeadersSetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
|
|
183
|
+
}
|
|
184
|
+
export type SessionBrowserServiceErrorCode = "invalid_request" | "not_found" | "generation_mismatch" | "revision_mismatch" | "unsupported" | "unavailable" | "capacity" | "host_failure" | "outcome_unknown" | "shutting_down";
|
|
172
185
|
/** Stable application error; transports map the code without exposing Host diagnostics. */
|
|
173
186
|
export declare class SessionBrowserServiceError extends Error {
|
|
174
187
|
readonly code: SessionBrowserServiceErrorCode;
|
|
@@ -178,15 +191,18 @@ export declare class SessionBrowserServiceError extends Error {
|
|
|
178
191
|
* Transport-neutral owner of the Runtime -> Session -> Browser -> Page model.
|
|
179
192
|
* Every operation for one Session shares one queue; different Sessions remain independent.
|
|
180
193
|
*/
|
|
181
|
-
export declare class SessionBrowserService {
|
|
194
|
+
export declare class SessionBrowserService implements SessionBrowserRequestHeadersPort {
|
|
182
195
|
private readonly ports;
|
|
183
196
|
private readonly records;
|
|
184
197
|
private readonly generations;
|
|
198
|
+
private readonly requestHeaderPolicies;
|
|
185
199
|
private readonly queues;
|
|
186
200
|
private readonly deletingSessions;
|
|
187
201
|
private readonly observers;
|
|
188
202
|
private readonly pageIdFactory;
|
|
189
203
|
private readonly bootGenerationSeed;
|
|
204
|
+
private readonly requestHeaderRevisionSeed;
|
|
205
|
+
private requestHeaderRevision;
|
|
190
206
|
private readonly admissionReserve?;
|
|
191
207
|
private shuttingDown;
|
|
192
208
|
private closeAllPromise?;
|
|
@@ -205,6 +221,8 @@ export declare class SessionBrowserService {
|
|
|
205
221
|
*/
|
|
206
222
|
getInspectionPageEndpoint(input: RuntimeBrowserPageMutationParams): Promise<SessionBrowserInspectionEndpoint>;
|
|
207
223
|
getState(input: RuntimeBrowserStateGetParams): Promise<RuntimeBrowserState | null>;
|
|
224
|
+
getRequestHeaders(input: RuntimeBrowserRequestHeadersGetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
|
|
225
|
+
setRequestHeaders(input: RuntimeBrowserRequestHeadersSetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
|
|
208
226
|
/**
|
|
209
227
|
* Runtime-local automation handoff. This method is deliberately absent from
|
|
210
228
|
* RemoteRuntimeBrowserHost and Direct RPC so a CDP endpoint cannot cross a
|
|
@@ -233,6 +251,8 @@ export declare class SessionBrowserService {
|
|
|
233
251
|
private closeEveryRecord;
|
|
234
252
|
private createBrowser;
|
|
235
253
|
private reserveOpenAdmission;
|
|
254
|
+
private currentRequestHeaders;
|
|
255
|
+
private nextRequestHeadersRevision;
|
|
236
256
|
private closeUnavailableForRecreate;
|
|
237
257
|
private pageMutation;
|
|
238
258
|
private pageMutationParsed;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
2
|
-
import { RUNTIME_BROWSER_MAX_PAGES, parseRuntimeBrowserCloseParams, parseRuntimeBrowserOpenParams, parseRuntimeBrowserPageCreateParams, parseRuntimeBrowserPageMutationParams, parseRuntimeBrowserPageNavigateParams, parseRuntimeBrowserState, parseRuntimeBrowserStateGetParams, } from "@rynx-ai/protocol/runtime-browser";
|
|
2
|
+
import { RUNTIME_BROWSER_MAX_PAGES, parseRuntimeBrowserRequestHeadersGetParams, parseRuntimeBrowserRequestHeadersSetParams, parseRuntimeBrowserCloseParams, parseRuntimeBrowserOpenParams, parseRuntimeBrowserPageCreateParams, parseRuntimeBrowserPageMutationParams, parseRuntimeBrowserPageNavigateParams, parseRuntimeBrowserState, parseRuntimeBrowserStateGetParams, } from "@rynx-ai/protocol/runtime-browser";
|
|
3
3
|
import { parseRuntimeBrowserEndpointDescriptor, } from "@rynx-ai/protocol/runtime-browser-bootstrap";
|
|
4
4
|
const MAX_HOST_PAGE_ID_CHARS = 2_048;
|
|
5
5
|
const MAX_PAGE_ID_FACTORY_ATTEMPTS = 64;
|
|
@@ -37,11 +37,14 @@ export class SessionBrowserService {
|
|
|
37
37
|
ports;
|
|
38
38
|
records = new Map();
|
|
39
39
|
generations = new Map();
|
|
40
|
+
requestHeaderPolicies = new Map();
|
|
40
41
|
queues = new Map();
|
|
41
42
|
deletingSessions = new Set();
|
|
42
43
|
observers = new Set();
|
|
43
44
|
pageIdFactory;
|
|
44
45
|
bootGenerationSeed;
|
|
46
|
+
requestHeaderRevisionSeed;
|
|
47
|
+
requestHeaderRevision = 0;
|
|
45
48
|
admissionReserve;
|
|
46
49
|
shuttingDown = false;
|
|
47
50
|
closeAllPromise;
|
|
@@ -49,12 +52,17 @@ export class SessionBrowserService {
|
|
|
49
52
|
this.ports = ports;
|
|
50
53
|
this.pageIdFactory = options.pageIdFactory ?? (() => `page_${randomUUID()}`);
|
|
51
54
|
this.bootGenerationSeed = options.bootGenerationSeed ?? randomBootGenerationSeed();
|
|
55
|
+
this.requestHeaderRevisionSeed = options.requestHeaderRevisionSeed ??
|
|
56
|
+
randomBytes(16).toString("base64url");
|
|
52
57
|
this.admissionReserve = options.admissionReserve;
|
|
53
58
|
if (!Number.isSafeInteger(this.bootGenerationSeed) ||
|
|
54
59
|
this.bootGenerationSeed < 0 ||
|
|
55
60
|
this.bootGenerationSeed >= Number.MAX_SAFE_INTEGER) {
|
|
56
61
|
throw new Error("Browser boot generation seed must be a nonnegative safe integer");
|
|
57
62
|
}
|
|
63
|
+
if (!/^[A-Za-z0-9_-]{16,128}$/.test(this.requestHeaderRevisionSeed)) {
|
|
64
|
+
throw new Error("Browser request Header revision seed must be an opaque 16-128 character token");
|
|
65
|
+
}
|
|
58
66
|
}
|
|
59
67
|
/** Number of Session Browsers that still own a physical Host handle. */
|
|
60
68
|
activeBrowserCount() {
|
|
@@ -144,6 +152,70 @@ export class SessionBrowserService {
|
|
|
144
152
|
return this.project(record);
|
|
145
153
|
});
|
|
146
154
|
}
|
|
155
|
+
async getRequestHeaders(input) {
|
|
156
|
+
const params = parseInput(() => parseRuntimeBrowserRequestHeadersGetParams(input), "Browser request headers read is invalid");
|
|
157
|
+
return this.exclusive(params.sessionId, async () => {
|
|
158
|
+
this.ensureRunning();
|
|
159
|
+
await this.ensureSessionExists(params.sessionId);
|
|
160
|
+
return cloneRequestHeadersPolicy(this.currentRequestHeaders(params.sessionId));
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
async setRequestHeaders(input) {
|
|
164
|
+
const params = parseInput(() => parseRuntimeBrowserRequestHeadersSetParams(input), "Browser request headers update is invalid");
|
|
165
|
+
return this.exclusive(params.sessionId, async () => {
|
|
166
|
+
this.ensureRunning();
|
|
167
|
+
await this.ensureSessionExists(params.sessionId);
|
|
168
|
+
const current = this.currentRequestHeaders(params.sessionId);
|
|
169
|
+
if (params.expectedRevision !== current.revision) {
|
|
170
|
+
throw new SessionBrowserServiceError("revision_mismatch", "Browser request headers changed since they were read");
|
|
171
|
+
}
|
|
172
|
+
const nextConfig = {
|
|
173
|
+
enabled: params.enabled,
|
|
174
|
+
headers: params.headers.map((header) => ({ ...header })),
|
|
175
|
+
};
|
|
176
|
+
if (sameRequestHeadersConfig(current, nextConfig)) {
|
|
177
|
+
return cloneRequestHeadersPolicy(current);
|
|
178
|
+
}
|
|
179
|
+
// Reserve the next token before touching a live Host so revision-space
|
|
180
|
+
// exhaustion can never turn a successfully applied policy into an
|
|
181
|
+
// uncommitted outcome. Gaps after Host failure are harmless.
|
|
182
|
+
const nextRevision = this.nextRequestHeadersRevision();
|
|
183
|
+
const record = this.records.get(params.sessionId);
|
|
184
|
+
if (record && record.status !== "ready") {
|
|
185
|
+
await this.closeUnavailableForRecreate(record);
|
|
186
|
+
}
|
|
187
|
+
else if (record && !sameEffectiveRequestHeaders(current, nextConfig)) {
|
|
188
|
+
try {
|
|
189
|
+
await record.handle.setRequestHeaders(nextConfig);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
// A definite compatibility rejection did not touch the live Host.
|
|
193
|
+
// Preserve both the current Browser and committed policy so callers
|
|
194
|
+
// can upgrade the Host or close/reopen explicitly without data loss.
|
|
195
|
+
if (error instanceof SessionBrowserHostError && error.code === "unsupported") {
|
|
196
|
+
throw mapHostError(error, "Browser Host does not support request headers");
|
|
197
|
+
}
|
|
198
|
+
record.status = "unavailable";
|
|
199
|
+
try {
|
|
200
|
+
await record.handle.close();
|
|
201
|
+
if (this.records.get(params.sessionId) === record) {
|
|
202
|
+
this.records.delete(params.sessionId);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (closeError) {
|
|
206
|
+
throw new SessionBrowserServiceError("outcome_unknown", "Browser request headers may have been partially applied", { cause: new AggregateError([error, closeError]) });
|
|
207
|
+
}
|
|
208
|
+
throw mapHostError(error, "Browser Host rejected the request headers update");
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const policy = {
|
|
212
|
+
...nextConfig,
|
|
213
|
+
revision: nextRevision,
|
|
214
|
+
};
|
|
215
|
+
this.requestHeaderPolicies.set(params.sessionId, policy);
|
|
216
|
+
return cloneRequestHeadersPolicy(policy);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
147
219
|
/**
|
|
148
220
|
* Runtime-local automation handoff. This method is deliberately absent from
|
|
149
221
|
* RemoteRuntimeBrowserHost and Direct RPC so a CDP endpoint cannot cross a
|
|
@@ -314,6 +386,9 @@ export class SessionBrowserService {
|
|
|
314
386
|
this.deletingSessions.add(parsed);
|
|
315
387
|
await this.exclusive(parsed, async () => {
|
|
316
388
|
const failures = [];
|
|
389
|
+
// Header values are runtime-only and may be sensitive. Forget them as
|
|
390
|
+
// soon as deletion owns the Session, even if physical cleanup fails.
|
|
391
|
+
this.requestHeaderPolicies.delete(parsed);
|
|
317
392
|
const record = this.records.get(parsed);
|
|
318
393
|
if (record) {
|
|
319
394
|
record.status = "closing";
|
|
@@ -367,6 +442,9 @@ export class SessionBrowserService {
|
|
|
367
442
|
}, true)));
|
|
368
443
|
}
|
|
369
444
|
await Promise.allSettled([...this.observers]);
|
|
445
|
+
// Values may be sensitive. Once the service is fenced they have no valid
|
|
446
|
+
// reader, so do not retain them for the rest of a graceful process exit.
|
|
447
|
+
this.requestHeaderPolicies.clear();
|
|
370
448
|
if (failures.length > 0) {
|
|
371
449
|
throw new SessionBrowserServiceError("host_failure", "One or more Browsers did not close during shutdown", { cause: failures[0] });
|
|
372
450
|
}
|
|
@@ -384,6 +462,7 @@ export class SessionBrowserService {
|
|
|
384
462
|
handle = await this.ports.host.createBrowser({
|
|
385
463
|
sessionId: params.sessionId,
|
|
386
464
|
browserGeneration,
|
|
465
|
+
requestHeaders: cloneRequestHeadersConfig(this.currentRequestHeaders(params.sessionId)),
|
|
387
466
|
...(params.url === undefined ? {} : { url: params.url }),
|
|
388
467
|
});
|
|
389
468
|
}
|
|
@@ -455,6 +534,20 @@ export class SessionBrowserService {
|
|
|
455
534
|
}
|
|
456
535
|
return admission;
|
|
457
536
|
}
|
|
537
|
+
currentRequestHeaders(sessionId) {
|
|
538
|
+
return this.requestHeaderPolicies.get(sessionId) ?? {
|
|
539
|
+
enabled: false,
|
|
540
|
+
headers: [],
|
|
541
|
+
revision: `${this.requestHeaderRevisionSeed}.0`,
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
nextRequestHeadersRevision() {
|
|
545
|
+
if (this.requestHeaderRevision >= Number.MAX_SAFE_INTEGER) {
|
|
546
|
+
throw new SessionBrowserServiceError("capacity", "Browser request headers revision space is exhausted");
|
|
547
|
+
}
|
|
548
|
+
this.requestHeaderRevision += 1;
|
|
549
|
+
return `${this.requestHeaderRevisionSeed}.${this.requestHeaderRevision.toString(36)}`;
|
|
550
|
+
}
|
|
458
551
|
async closeUnavailableForRecreate(record) {
|
|
459
552
|
record.status = "closing";
|
|
460
553
|
try {
|
|
@@ -768,12 +861,45 @@ function mapHostError(error, fallbackMessage) {
|
|
|
768
861
|
if (error.code === "outcome_unknown") {
|
|
769
862
|
return new SessionBrowserServiceError("outcome_unknown", "Browser Host operation outcome is unknown", { cause: error });
|
|
770
863
|
}
|
|
864
|
+
if (error.code === "unsupported") {
|
|
865
|
+
return new SessionBrowserServiceError("unsupported", "Browser Host does not support this operation", { cause: error });
|
|
866
|
+
}
|
|
771
867
|
return new SessionBrowserServiceError("unavailable", "Browser Host is unavailable", {
|
|
772
868
|
cause: error,
|
|
773
869
|
});
|
|
774
870
|
}
|
|
775
871
|
return new SessionBrowserServiceError("host_failure", fallbackMessage, { cause: error });
|
|
776
872
|
}
|
|
873
|
+
function cloneRequestHeadersConfig(config) {
|
|
874
|
+
return {
|
|
875
|
+
enabled: config.enabled,
|
|
876
|
+
headers: config.headers.map((header) => ({ ...header })),
|
|
877
|
+
};
|
|
878
|
+
}
|
|
879
|
+
function cloneRequestHeadersPolicy(policy) {
|
|
880
|
+
return {
|
|
881
|
+
...cloneRequestHeadersConfig(policy),
|
|
882
|
+
revision: policy.revision,
|
|
883
|
+
};
|
|
884
|
+
}
|
|
885
|
+
function sameRequestHeadersConfig(left, right) {
|
|
886
|
+
return left.enabled === right.enabled && sameRequestHeaderRows(left.headers, right.headers, true);
|
|
887
|
+
}
|
|
888
|
+
function sameEffectiveRequestHeaders(left, right) {
|
|
889
|
+
return sameRequestHeaderRows(left.enabled ? left.headers : [], right.enabled ? right.headers : [], false);
|
|
890
|
+
}
|
|
891
|
+
function sameRequestHeaderRows(left, right, preserveNameCase) {
|
|
892
|
+
if (left.length !== right.length)
|
|
893
|
+
return false;
|
|
894
|
+
return left.every((header, index) => {
|
|
895
|
+
const candidate = right[index];
|
|
896
|
+
return candidate !== undefined &&
|
|
897
|
+
(preserveNameCase
|
|
898
|
+
? header.name === candidate.name
|
|
899
|
+
: header.name.toLowerCase() === candidate.name.toLowerCase()) &&
|
|
900
|
+
header.value === candidate.value;
|
|
901
|
+
});
|
|
902
|
+
}
|
|
777
903
|
function validateHostPageId(value) {
|
|
778
904
|
if (typeof value !== "string" ||
|
|
779
905
|
value.length === 0 ||
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { UserContentPart } from "@rynx-ai/protocol";
|
|
2
|
+
export interface MachineSessionPendingInput {
|
|
3
|
+
pendingId: string;
|
|
4
|
+
content: UserContentPart[];
|
|
5
|
+
}
|
|
6
|
+
export interface MachineSessionPendingInputRecord {
|
|
7
|
+
clientMessageId: string;
|
|
8
|
+
content: UserContentPart[];
|
|
9
|
+
}
|
|
10
|
+
export interface MachineSessionDrainedInput extends MachineSessionPendingInput {
|
|
11
|
+
clientMessageId: string;
|
|
12
|
+
}
|
|
13
|
+
export interface MachineSessionPendingInputPort {
|
|
14
|
+
record(sessionId: string, input: MachineSessionPendingInputRecord): string;
|
|
15
|
+
resolve(sessionId: string, pendingId: string): void;
|
|
16
|
+
peekOldest(sessionId: string): MachineSessionDrainedInput | undefined;
|
|
17
|
+
resolveOldest(sessionId: string): MachineSessionDrainedInput | undefined;
|
|
18
|
+
findByClientMessageId(sessionId: string, clientMessageId: string): MachineSessionPendingInput | undefined;
|
|
19
|
+
snapshotFor(sessionId: string): MachineSessionPendingInput[];
|
|
20
|
+
deleteSession(sessionId: string): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Process-live FIFO of web-composer inputs awaiting their native transcript
|
|
24
|
+
* echo. The message is deliberately not persisted when the send POST succeeds:
|
|
25
|
+
* the Provider transcript remains the sole durable writer. This index only
|
|
26
|
+
* keeps the temporary bubble recoverable across page rebinds until that echo
|
|
27
|
+
* arrives.
|
|
28
|
+
*/
|
|
29
|
+
export declare class SessionPendingInputIndex implements MachineSessionPendingInputPort {
|
|
30
|
+
private readonly ttlMs;
|
|
31
|
+
private readonly now;
|
|
32
|
+
private readonly entries;
|
|
33
|
+
constructor(ttlMs?: number, now?: () => number);
|
|
34
|
+
record(sessionId: string, input: MachineSessionPendingInputRecord): string;
|
|
35
|
+
resolve(sessionId: string, pendingId: string): void;
|
|
36
|
+
resolveOldest(sessionId: string): MachineSessionDrainedInput | undefined;
|
|
37
|
+
peekOldest(sessionId: string): MachineSessionDrainedInput | undefined;
|
|
38
|
+
findByClientMessageId(sessionId: string, clientMessageId: string): MachineSessionPendingInput | undefined;
|
|
39
|
+
snapshotFor(sessionId: string): MachineSessionPendingInput[];
|
|
40
|
+
deleteSession(sessionId: string): void;
|
|
41
|
+
private evictStale;
|
|
42
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
const DEFAULT_PENDING_INPUT_TTL_MS = 10 * 60_000;
|
|
3
|
+
/**
|
|
4
|
+
* Process-live FIFO of web-composer inputs awaiting their native transcript
|
|
5
|
+
* echo. The message is deliberately not persisted when the send POST succeeds:
|
|
6
|
+
* the Provider transcript remains the sole durable writer. This index only
|
|
7
|
+
* keeps the temporary bubble recoverable across page rebinds until that echo
|
|
8
|
+
* arrives.
|
|
9
|
+
*/
|
|
10
|
+
export class SessionPendingInputIndex {
|
|
11
|
+
ttlMs;
|
|
12
|
+
now;
|
|
13
|
+
entries = new Map();
|
|
14
|
+
constructor(ttlMs = DEFAULT_PENDING_INPUT_TTL_MS, now = Date.now) {
|
|
15
|
+
this.ttlMs = ttlMs;
|
|
16
|
+
this.now = now;
|
|
17
|
+
}
|
|
18
|
+
record(sessionId, input) {
|
|
19
|
+
this.evictStale(sessionId);
|
|
20
|
+
const pending = this.entries.get(sessionId) ?? new Map();
|
|
21
|
+
const pendingId = `pending_${randomUUID().replaceAll("-", "")}`;
|
|
22
|
+
pending.set(pendingId, {
|
|
23
|
+
pendingId,
|
|
24
|
+
clientMessageId: input.clientMessageId,
|
|
25
|
+
content: input.content.map((part) => ({ ...part })),
|
|
26
|
+
createdAt: this.now(),
|
|
27
|
+
});
|
|
28
|
+
this.entries.set(sessionId, pending);
|
|
29
|
+
return pendingId;
|
|
30
|
+
}
|
|
31
|
+
resolve(sessionId, pendingId) {
|
|
32
|
+
const pending = this.entries.get(sessionId);
|
|
33
|
+
if (!pending)
|
|
34
|
+
return;
|
|
35
|
+
pending.delete(pendingId);
|
|
36
|
+
if (pending.size === 0)
|
|
37
|
+
this.entries.delete(sessionId);
|
|
38
|
+
}
|
|
39
|
+
resolveOldest(sessionId) {
|
|
40
|
+
const input = this.peekOldest(sessionId);
|
|
41
|
+
if (input)
|
|
42
|
+
this.resolve(sessionId, input.pendingId);
|
|
43
|
+
return input;
|
|
44
|
+
}
|
|
45
|
+
peekOldest(sessionId) {
|
|
46
|
+
this.evictStale(sessionId);
|
|
47
|
+
const pending = this.entries.get(sessionId);
|
|
48
|
+
const pendingId = pending?.keys().next().value;
|
|
49
|
+
if (!pending || !pendingId)
|
|
50
|
+
return undefined;
|
|
51
|
+
const input = pending.get(pendingId);
|
|
52
|
+
return input ? cloneDrainedInput(input) : undefined;
|
|
53
|
+
}
|
|
54
|
+
findByClientMessageId(sessionId, clientMessageId) {
|
|
55
|
+
this.evictStale(sessionId);
|
|
56
|
+
const input = [...(this.entries.get(sessionId)?.values() ?? [])].find((entry) => entry.clientMessageId === clientMessageId);
|
|
57
|
+
return input ? clonePendingInput(input) : undefined;
|
|
58
|
+
}
|
|
59
|
+
snapshotFor(sessionId) {
|
|
60
|
+
this.evictStale(sessionId);
|
|
61
|
+
return [...(this.entries.get(sessionId)?.values() ?? [])].map(clonePendingInput);
|
|
62
|
+
}
|
|
63
|
+
deleteSession(sessionId) {
|
|
64
|
+
this.entries.delete(sessionId);
|
|
65
|
+
}
|
|
66
|
+
evictStale(sessionId) {
|
|
67
|
+
const pending = this.entries.get(sessionId);
|
|
68
|
+
if (!pending)
|
|
69
|
+
return;
|
|
70
|
+
const cutoff = this.now() - this.ttlMs;
|
|
71
|
+
for (const [pendingId, input] of pending) {
|
|
72
|
+
if (input.createdAt < cutoff)
|
|
73
|
+
pending.delete(pendingId);
|
|
74
|
+
}
|
|
75
|
+
if (pending.size === 0)
|
|
76
|
+
this.entries.delete(sessionId);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function clonePendingInput(input) {
|
|
80
|
+
return {
|
|
81
|
+
pendingId: input.pendingId,
|
|
82
|
+
content: input.content.map((part) => ({ ...part })),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function cloneDrainedInput(input) {
|
|
86
|
+
return { ...clonePendingInput(input), clientMessageId: input.clientMessageId };
|
|
87
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type IncomingMessage, type Server as HttpServer } from "node:http";
|
|
2
|
+
import type { Duplex } from "node:stream";
|
|
3
|
+
import Koa from "koa";
|
|
4
|
+
export declare const SESSION_PORTAL_HEADER = "x-rynx-session-portal";
|
|
5
|
+
export declare const SESSION_PORTAL_QUERY = "portal";
|
|
6
|
+
export declare const SESSION_PORTAL_SECRET_HEADER = "x-rynx-session-portal-secret";
|
|
7
|
+
export declare const SESSION_PORTAL_SECRET_QUERY = "portal_secret";
|
|
8
|
+
export declare const SESSION_PORTAL_EMBED_ORIGIN_QUERY = "embed_origin";
|
|
9
|
+
export interface SessionPortalAuthorization {
|
|
10
|
+
portalId: string;
|
|
11
|
+
pluginId: string;
|
|
12
|
+
scope: "plugin_sessions" | "single_session";
|
|
13
|
+
access: "read_only" | "read_write";
|
|
14
|
+
embedOrigin?: string;
|
|
15
|
+
sessionId?: string;
|
|
16
|
+
expiresAt: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SessionPortalAuthorizationPorts {
|
|
19
|
+
redeem(ticket: string, embedOrigin?: string): (SessionPortalAuthorization & {
|
|
20
|
+
secret: string;
|
|
21
|
+
}) | undefined;
|
|
22
|
+
authorize(portalId: string, secret: string): SessionPortalAuthorization | undefined;
|
|
23
|
+
inspect(portalId: string): SessionPortalAuthorization | undefined;
|
|
24
|
+
subscribeRevocations?(listener: (portalIds: readonly string[]) => void | Promise<void>): () => void;
|
|
25
|
+
ownsSession(pluginId: string, sessionId: string): boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface SessionPortalOptions {
|
|
28
|
+
host: string;
|
|
29
|
+
port: number;
|
|
30
|
+
scheme: "http" | "https";
|
|
31
|
+
authorization: SessionPortalAuthorizationPorts;
|
|
32
|
+
controlOrigin: string;
|
|
33
|
+
controlWebDist: string;
|
|
34
|
+
shutdownSignal?: AbortSignal;
|
|
35
|
+
}
|
|
36
|
+
export interface SessionPortalServer {
|
|
37
|
+
server: HttpServer;
|
|
38
|
+
stopAccepting(): void;
|
|
39
|
+
shutdown(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
declare class SessionPortalTransportRegistry {
|
|
42
|
+
private readonly transports;
|
|
43
|
+
track(portalId: string, close: () => void): () => void;
|
|
44
|
+
revoke(portalIds: readonly string[]): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
/** Session Portal is a narrow adapter in front of the one Control service. It
|
|
47
|
+
* serves the native SPA, validates Portal grants, and forwards only authorized
|
|
48
|
+
* Session HTTP calls to Control; it owns no Session or Runtime handlers. */
|
|
49
|
+
export declare function createSessionPortalApp(options: SessionPortalOptions, transports?: SessionPortalTransportRegistry): Koa;
|
|
50
|
+
export declare function startSessionPortal(options: SessionPortalOptions): Promise<SessionPortalServer>;
|
|
51
|
+
export declare function authorizeSessionPortalWebSocket(request: IncomingMessage, ports: SessionPortalAuthorizationPorts, runtimeSelector: string, sessionId: string): SessionPortalAuthorization | undefined;
|
|
52
|
+
export declare function rejectSessionPortalUpgrade(socket: Duplex): void;
|
|
53
|
+
export declare function scheduleSessionPortalExpiry(expiresAt: string, onExpire: () => void): () => void;
|
|
54
|
+
export {};
|