frely-cli 0.23.8 → 0.23.10

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.
Files changed (116) hide show
  1. package/README.md +50 -20
  2. package/README.zh-CN.md +47 -19
  3. package/dist/agent/local/approvals.d.ts +24 -0
  4. package/dist/agent/local/approvals.js +79 -0
  5. package/dist/agent/local/approvals.js.map +1 -0
  6. package/dist/agent/local/command.d.ts +10 -0
  7. package/dist/agent/local/command.js +292 -0
  8. package/dist/agent/local/command.js.map +1 -0
  9. package/dist/agent/local/confine.d.ts +20 -0
  10. package/dist/agent/local/confine.js +52 -0
  11. package/dist/agent/local/confine.js.map +1 -0
  12. package/dist/agent/local/manifest.d.ts +17 -0
  13. package/dist/agent/local/manifest.js +55 -0
  14. package/dist/agent/local/manifest.js.map +1 -0
  15. package/dist/agent/local/model-proxy.d.ts +18 -0
  16. package/dist/agent/local/model-proxy.js +111 -0
  17. package/dist/agent/local/model-proxy.js.map +1 -0
  18. package/dist/agent/local/source.d.ts +28 -0
  19. package/dist/agent/local/source.js +64 -0
  20. package/dist/agent/local/source.js.map +1 -0
  21. package/dist/agent/local/store.d.ts +45 -0
  22. package/dist/agent/local/store.js +78 -0
  23. package/dist/agent/local/store.js.map +1 -0
  24. package/dist/agent/local/supervisor.d.ts +9 -0
  25. package/dist/agent/local/supervisor.js +62 -0
  26. package/dist/agent/local/supervisor.js.map +1 -0
  27. package/dist/agent-help.d.ts +294 -18
  28. package/dist/agent-help.js +56 -7
  29. package/dist/agent-help.js.map +1 -1
  30. package/dist/auth.d.ts +5 -0
  31. package/dist/auth.js +36 -0
  32. package/dist/auth.js.map +1 -1
  33. package/dist/cloud.d.ts +2 -0
  34. package/dist/cloud.js +38 -0
  35. package/dist/cloud.js.map +1 -1
  36. package/dist/controller/args.d.ts +25 -0
  37. package/dist/controller/args.js +61 -0
  38. package/dist/controller/args.js.map +1 -0
  39. package/dist/controller/client.d.ts +52 -0
  40. package/dist/controller/client.js +124 -0
  41. package/dist/controller/client.js.map +1 -0
  42. package/dist/controller/commands.d.ts +16 -0
  43. package/dist/controller/commands.js +411 -0
  44. package/dist/controller/commands.js.map +1 -0
  45. package/dist/controller/dpop.d.ts +24 -0
  46. package/dist/controller/dpop.js +26 -0
  47. package/dist/controller/dpop.js.map +1 -0
  48. package/dist/controller/session.d.ts +53 -0
  49. package/dist/controller/session.js +211 -0
  50. package/dist/controller/session.js.map +1 -0
  51. package/dist/device/protocol.d.ts +1 -1
  52. package/dist/device/protocol.js +1 -1
  53. package/dist/device/protocol.js.map +1 -1
  54. package/dist/device/relay-client.d.ts +14 -0
  55. package/dist/device/relay-client.js +34 -14
  56. package/dist/device/relay-client.js.map +1 -1
  57. package/dist/index.js +79 -8
  58. package/dist/index.js.map +1 -1
  59. package/dist/provider/control.d.ts +10 -0
  60. package/dist/provider/control.js +19 -0
  61. package/dist/provider/control.js.map +1 -1
  62. package/dist/provider/share.js +4 -1
  63. package/dist/provider/share.js.map +1 -1
  64. package/dist/runtime/sandbox.d.ts +20 -0
  65. package/dist/runtime/sandbox.js +39 -1
  66. package/dist/runtime/sandbox.js.map +1 -1
  67. package/dist/share/allowance.d.ts +8 -0
  68. package/dist/share/allowance.js +22 -0
  69. package/dist/share/allowance.js.map +1 -0
  70. package/dist/share/control.d.ts +18 -0
  71. package/dist/share/control.js +53 -0
  72. package/dist/share/control.js.map +1 -0
  73. package/dist/share/frpc-config.d.ts +24 -0
  74. package/dist/share/frpc-config.js +63 -0
  75. package/dist/share/frpc-config.js.map +1 -0
  76. package/dist/share/frpc.d.ts +30 -0
  77. package/dist/share/frpc.js +108 -0
  78. package/dist/share/frpc.js.map +1 -0
  79. package/dist/share/gateway.d.ts +26 -0
  80. package/dist/share/gateway.js +100 -0
  81. package/dist/share/gateway.js.map +1 -0
  82. package/dist/share/run.d.ts +43 -0
  83. package/dist/share/run.js +163 -0
  84. package/dist/share/run.js.map +1 -0
  85. package/dist/share/service-config.d.ts +39 -0
  86. package/dist/share/service-config.js +85 -0
  87. package/dist/share/service-config.js.map +1 -0
  88. package/dist/share/service-control.d.ts +15 -0
  89. package/dist/share/service-control.js +31 -0
  90. package/dist/share/service-control.js.map +1 -0
  91. package/dist/share/service-run.d.ts +55 -0
  92. package/dist/share/service-run.js +285 -0
  93. package/dist/share/service-run.js.map +1 -0
  94. package/dist/share/service-state.d.ts +16 -0
  95. package/dist/share/service-state.js +66 -0
  96. package/dist/share/service-state.js.map +1 -0
  97. package/dist/skill/access.d.ts +2 -2
  98. package/dist/skill/access.js +4 -2
  99. package/dist/skill/access.js.map +1 -1
  100. package/dist/skill/cloud-item.d.ts +2 -2
  101. package/dist/skill/cloud-item.js.map +1 -1
  102. package/dist/skill/entry.d.ts +1 -1
  103. package/dist/skill/entry.js +1 -1
  104. package/dist/skill/remote-mcp.d.ts +3 -0
  105. package/dist/skill/remote-mcp.js +7 -1
  106. package/dist/skill/remote-mcp.js.map +1 -1
  107. package/dist/skill/router.d.ts +6 -2
  108. package/dist/skill/router.js +4 -4
  109. package/dist/skill/router.js.map +1 -1
  110. package/dist/skill/sealed-run.js +5 -3
  111. package/dist/skill/sealed-run.js.map +1 -1
  112. package/dist/uninstall.d.ts +4 -0
  113. package/dist/uninstall.js +14 -0
  114. package/dist/uninstall.js.map +1 -1
  115. package/package.json +3 -2
  116. package/skills/frely-cli/SKILL.md +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/controller/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAmB,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAkD,MAAM,aAAa,CAAC;AAChI,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAErG,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAIrL,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB/B,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AAC1F,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAKhF,KAAK,UAAU,IAAI,CAAC,KAAY,EAAE,OAAgB,EAAE,MAAkB,EAAE,EAAU;IAChF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAChE,EAAE,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IAChE,CAAC;;QAAM,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1D,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAAC,EAAE,CAAC,GAAG,CAAC,oCAAoC,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,IAAI,CAAC;IAAC,CAAC;IACtJ,OAAO,IAAI,CAAC,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAElF,8FAA8F;AAC9F,SAAS,OAAO,CAAC,MAAkB;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/J,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IACnH,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7F,CAAC;AAED,IAAI,MAAM,GAA0B,cAAc,CAAC;AACnD,kGAAkG;AAClG,MAAM,UAAU,mBAAmB,CAAC,WAAkC;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC;IACxB,MAAM,GAAG,WAAW,CAAC;IACrB,OAAO,GAAG,EAAE,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,cAAc,CAAI,EAAU,EAAE,IAA4C;IACvF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC;QAAC,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;YAAS,CAAC;QAAC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;AACrG,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAU,CAAC;AACzC,MAAM,aAAa,GAAG,CAAC,OAAO,CAAU,CAAC;AAEzC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY;IACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,IAAI,IAAI,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,IAAI,IAAI,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1F,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc;QAAE,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,IAAI,IAAI,wBAAwB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7G,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAuB,EAAE,EAAU;IAC5E,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC;QAC1H,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,YAAY,CAAC,CAAC,OAAO,MAAM,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5D,KAAK,YAAY,CAAC,CAAC,OAAO,MAAM,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5D,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/C,KAAK,KAAK,CAAC,CAAC,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChD,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,KAAK,OAAO,CAAC,CAAC,OAAO,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClD,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,mBAAmB,OAAO,MAAM,gBAAgB,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YAAC,OAAO,KAAK,CAAC,QAAQ,CAAC;QAAC,CAAC;QAC9F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAc,EAAE,EAAU;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,EAAE,CAAC,GAAG,CAAC,8DAA8D,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,EAAE,CAAC,GAAG,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;QACpJ,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QACpC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sDAAsD,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,uEAAuE,CAAC,CAAC;QACrK,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,EAAU;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7F,OAAO,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAyC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClG,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,UAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACnP,IAAI,GAAG,CAAC,8BAA8B,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7H,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,EAAU,EAAE,MAAkB,EAAE,IAAY,EAAE,KAA8B;IAClG,OAAO,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAAc,EAAE,EAAU;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/H,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IACpC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,qFAAqF,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACvM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;QACrC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxJ,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/E,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,EAAE,CAAC,IAAc,EAAE,EAAU;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,0BAA0B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACrG,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc,EAAE,EAAU;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5G,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9H,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc,EAAE,EAAU;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAChG,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,4CAA4C,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACvH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,WAA+B,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QAC7C,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;QACvC,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;YACnH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACxG,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,GAAG;gBAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,GAAG;gBAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,YAAY,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;YACxF,YAAY,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;YACxF,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;gBAAE,OAAO,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAClH,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAc,EAAE,EAAU;IACnD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,iDAAiD,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5H,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,GAA2B,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,iEAAiE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3I,KAAK,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,EAAE,CAAC,IAAc,EAAE,EAAU;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5G,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5H,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc,EAAE,EAAU;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACpI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,yFAAyF,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACpK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjG,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAClC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3I,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/G,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc,EAAE,EAAU;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7H,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,6FAA6F,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACxK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,iEAAiE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3J,IAAI,KAA8B,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,IAAI,CAAC;YAAC,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;QAC5G,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;IAC5J,CAAC;SAAM,CAAC;QACN,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,SAAS,CAAC,KAAM,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,KAAK,YAAY,eAAe;gBAAE,MAAM,KAAK,CAAC;YAAC,MAAM,IAAI,eAAe,CAAC,aAAa,KAAK,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QACvO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,wEAAwE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/J,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,EAAU;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/E,OAAO,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QACrD,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;QACvF,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpN,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8GAA8G;AAC9G,SAAS,QAAQ,CAAC,IAAc;IAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAwB,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC;YAAC,CAAC,EAAE,CAAC;QAAC,CAAC;;YAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;IAC3H,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,oDAAoD,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAClJ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAChH,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,kCAAkC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACzI,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAc,EAAE,EAAU;IACnD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,+DAA+D,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9L,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3H,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAc,EAAE,EAAU;IACzD,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChK,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,eAAe,CAAC,8IAA8I,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACxQ,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,+CAA+C,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpK,OAAO,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACzM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,iIAAiI;YACjI,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;YAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACzM,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YAClC,EAAE,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC7C,OAAO,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/E,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,gDAAgD,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACxL,OAAO,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,2FAA2F,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/M,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/H,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAC5D,0FAA0F;QAC1F,OAAO,IAAI,OAAO,CAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,eAAe,CAAC,4EAA4E,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACpH,CAAC;AAED,gLAAgL;AAChL,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAoC,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAU,EAAE,UAA8F,EAAE;IACzN,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC3E,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,oCAAoC,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC,IAAI,CAAC;QAAC,CAAC;QACxI,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,UAAU;gBAAE,EAAE,CAAC,GAAG,CAAC,WAAW,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,sCAAsC,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC,EAAE,CAAC;YACxN,KAAK,QAAQ;gBAAE,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC,IAAI,CAAC;YAC5E,KAAK,SAAS,CAAC;YAAC,KAAK,SAAS;gBAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC,QAAQ,CAAC;YAC3H,OAAO,CAAC,CAAC,MAAM;QACjB,CAAC;QACD,IAAI,GAAG,EAAE,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;YAAC,EAAE,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC,QAAQ,CAAC;QAAC,CAAC;QACxJ,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Sender-constrained tokens (RFC 9449). The controller's access and refresh tokens only work together with a short proof signed by
3
+ * this key, so a copied token file does nothing on another computer. Ed25519, kept in the same record as the tokens.
4
+ */
5
+ export interface DpopKey {
6
+ privateKeyPem: string;
7
+ jwk: {
8
+ kty: "OKP";
9
+ crv: "Ed25519";
10
+ x: string;
11
+ };
12
+ /** RFC 7638 thumbprint of the public key; the server binds the tokens to it. */
13
+ jkt: string;
14
+ }
15
+ export declare function dpopKeyFromPem(privateKeyPem: string): DpopKey;
16
+ export declare function generateDpopKey(): DpopKey;
17
+ /** A one-use proof for one request. `url` loses its query and fragment; `accessToken` adds the hash the resource checks it against. */
18
+ export declare function createDpopProof(key: DpopKey, input: {
19
+ method: string;
20
+ url: string;
21
+ accessToken?: string;
22
+ nonce?: string;
23
+ now?: number;
24
+ }): string;
@@ -0,0 +1,26 @@
1
+ import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, randomUUID, sign } from "node:crypto";
2
+ export function dpopKeyFromPem(privateKeyPem) {
3
+ const jwk = createPublicKey(createPrivateKey(privateKeyPem)).export({ format: "jwk" });
4
+ if (jwk.kty !== "OKP" || jwk.crv !== "Ed25519" || typeof jwk.x !== "string")
5
+ throw new Error("The controller key is not an Ed25519 key.");
6
+ const pub = { kty: "OKP", crv: "Ed25519", x: jwk.x };
7
+ const jkt = createHash("sha256").update(JSON.stringify({ crv: pub.crv, kty: pub.kty, x: pub.x })).digest("base64url");
8
+ return { privateKeyPem, jwk: pub, jkt };
9
+ }
10
+ export function generateDpopKey() {
11
+ return dpopKeyFromPem(generateKeyPairSync("ed25519").privateKey.export({ type: "pkcs8", format: "pem" }).toString());
12
+ }
13
+ const b64 = (value) => Buffer.from(JSON.stringify(value)).toString("base64url");
14
+ /** A one-use proof for one request. `url` loses its query and fragment; `accessToken` adds the hash the resource checks it against. */
15
+ export function createDpopProof(key, input) {
16
+ const url = new URL(input.url);
17
+ const header = { typ: "dpop+jwt", alg: "EdDSA", jwk: key.jwk };
18
+ const payload = {
19
+ jti: randomUUID(), htm: input.method.toUpperCase(), htu: `${url.protocol}//${url.host}${url.pathname}`, iat: Math.floor((input.now ?? Date.now()) / 1000),
20
+ ...(input.accessToken ? { ath: createHash("sha256").update(input.accessToken, "utf8").digest("base64url") } : {}),
21
+ ...(input.nonce ? { nonce: input.nonce } : {}),
22
+ };
23
+ const signingInput = `${b64(header)}.${b64(payload)}`;
24
+ return `${signingInput}.${sign(null, Buffer.from(signingInput), createPrivateKey(key.privateKeyPem)).toString("base64url")}`;
25
+ }
26
+ //# sourceMappingURL=dpop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dpop.js","sourceRoot":"","sources":["../../src/controller/dpop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { type CredentialStore } from "../credential-store.js";
2
+ export declare const CONTROLLER_CLIENT_ID = "frely-cli-controller";
3
+ /** The exit codes of the controller commands. */
4
+ export declare const EXIT: {
5
+ readonly ok: 0;
6
+ readonly cli: 1;
7
+ readonly tool: 2;
8
+ readonly approval: 3;
9
+ readonly auth: 4;
10
+ readonly offline: 5;
11
+ readonly limit: 6;
12
+ };
13
+ /** A failure with the exit code the command ends with. */
14
+ export declare class ControllerError extends Error {
15
+ readonly exitCode: number;
16
+ constructor(message: string, exitCode: number);
17
+ }
18
+ export interface ControllerSession {
19
+ version: 1;
20
+ relayUrl: string;
21
+ mcpUrl: string;
22
+ /** The relay device id of this computer: the connection is this computer's. */
23
+ deviceId: string;
24
+ privateKeyPem: string;
25
+ accessToken: string;
26
+ refreshToken: string;
27
+ /** Epoch milliseconds the access token stops working. */
28
+ expiresAt: number;
29
+ }
30
+ /** The address of FrelyMCP, the resource the controller token is for (mirrors the server: the dedicated MCP host for Frely's own sites). */
31
+ export declare function controllerMcpUrl(relayUrl: string, env?: NodeJS.ProcessEnv): string;
32
+ /**
33
+ * Where the session lives: the OS credential store, or on a headless Linux (no Secret Service) an encrypted file whose key sits in a
34
+ * separate state file. The file only keeps a copied vault unreadable; the same user's processes can still read both, which is why the
35
+ * tokens are also bound to the DPoP key and why Claude Code is told not to read this folder.
36
+ */
37
+ export declare function sessionStore(env?: NodeJS.ProcessEnv): CredentialStore;
38
+ export declare function readSession(store?: CredentialStore): Promise<ControllerSession | null>;
39
+ export declare function deleteSession(store?: CredentialStore): Promise<boolean>;
40
+ export interface LoginOptions {
41
+ notify?: (text: string) => void;
42
+ openBrowser?: boolean;
43
+ }
44
+ /**
45
+ * Signs this computer in as a controller: a device-code authorization the owner approves in a browser (with a passkey or authenticator code),
46
+ * which issues tokens bound to a new key kept here. Before the code is shown the CLI tells the server which computer is asking, and the
47
+ * approval page repeats that beside the address the request came from.
48
+ */
49
+ export declare function controllerLogin(options?: LoginOptions): Promise<ControllerSession>;
50
+ /** Exchanges the refresh token; a session that another process already renewed is taken from the store instead of spent twice. */
51
+ export declare function refreshSession(session: ControllerSession): Promise<ControllerSession>;
52
+ /** Signs the controller session out: revokes the refresh token on the server (the connection stays listed until disconnected on the web) and forgets it here. */
53
+ export declare function controllerLogout(): Promise<boolean>;
@@ -0,0 +1,211 @@
1
+ import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { randomBytes } from "node:crypto";
3
+ import { homedir, hostname, platform } from "node:os";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { credentialStore } from "../credential-store.js";
6
+ import { createEncryptedCredentialStore } from "../credential-file.js";
7
+ import { openVerificationUrl, requireLogin } from "../auth.js";
8
+ import { ensureDevice } from "../device/control.js";
9
+ import { VERSION } from "../version.js";
10
+ import { createDpopProof, dpopKeyFromPem, generateDpopKey } from "./dpop.js";
11
+ export const CONTROLLER_CLIENT_ID = "frely-cli-controller";
12
+ const SCOPE = "mcp:invoke offline_access";
13
+ const SERVICE = "frely-cli-controller-v1";
14
+ const TIMEOUT_MS = 15_000;
15
+ /** The exit codes of the controller commands. */
16
+ export const EXIT = { ok: 0, cli: 1, tool: 2, approval: 3, auth: 4, offline: 5, limit: 6 };
17
+ /** A failure with the exit code the command ends with. */
18
+ export class ControllerError extends Error {
19
+ exitCode;
20
+ constructor(message, exitCode) {
21
+ super(message);
22
+ this.exitCode = exitCode;
23
+ this.name = "ControllerError";
24
+ }
25
+ }
26
+ /** The address of FrelyMCP, the resource the controller token is for (mirrors the server: the dedicated MCP host for Frely's own sites). */
27
+ export function controllerMcpUrl(relayUrl, env = process.env) {
28
+ if (env.FRELY_MCP_URL)
29
+ return new URL(env.FRELY_MCP_URL).toString();
30
+ const url = new URL(relayUrl);
31
+ if (url.hostname === "frely.cloud" || url.hostname === "app.frely.cloud")
32
+ return "https://mcp.frely.cloud/mcp";
33
+ return `${url.origin}/mcp/devices`;
34
+ }
35
+ /**
36
+ * Where the session lives: the OS credential store, or on a headless Linux (no Secret Service) an encrypted file whose key sits in a
37
+ * separate state file. The file only keeps a copied vault unreadable; the same user's processes can still read both, which is why the
38
+ * tokens are also bound to the DPoP key and why Claude Code is told not to read this folder.
39
+ */
40
+ export function sessionStore(env = process.env) {
41
+ const config = env.XDG_CONFIG_HOME || join(homedir(), ".config");
42
+ const fallback = () => {
43
+ const keyFile = resolve(env.XDG_STATE_HOME || join(homedir(), ".local", "state"), "frely", "controller.key");
44
+ const key = async () => {
45
+ try {
46
+ return (await readFile(keyFile, "utf8")).trim();
47
+ }
48
+ catch { /* Created below. */ }
49
+ const fresh = randomBytes(32).toString("hex");
50
+ await mkdir(dirname(keyFile), { recursive: true, mode: 0o700 });
51
+ await writeFile(keyFile, fresh + "\n", { mode: 0o600, flag: "wx" }).catch(async () => undefined);
52
+ await chmod(keyFile, 0o600).catch(() => undefined);
53
+ return (await readFile(keyFile, "utf8")).trim();
54
+ };
55
+ const vault = async () => createEncryptedCredentialStore(resolve(config, "frely", "controller-vault-v1"), await key());
56
+ return { getPassword: async (s, a) => (await vault()).getPassword(s, a), setPassword: async (s, a, v) => (await vault()).setPassword(s, a, v), deletePassword: async (s, a) => (await vault()).deletePassword(s, a) };
57
+ };
58
+ const headless = process.platform === "linux" && env.FRELY_CREDENTIAL_KEY === undefined && (env.FRELY_CREDENTIAL_STORE ?? "auto") === "auto";
59
+ if (!headless)
60
+ return credentialStore;
61
+ const file = fallback();
62
+ // The OS store first; only a machine without one keeps the session in the encrypted file.
63
+ return {
64
+ async getPassword(service, account) { return (await file.getPassword(service, account)) ?? await credentialStore.getPassword(service, account).catch(() => null); },
65
+ async setPassword(service, account, password) {
66
+ if (await file.getPassword(service, account) === null) {
67
+ try {
68
+ await credentialStore.setPassword(service, account, password);
69
+ return;
70
+ }
71
+ catch { /* No Secret Service. */ }
72
+ }
73
+ await file.setPassword(service, account, password);
74
+ },
75
+ async deletePassword(service, account) { const removed = await file.deletePassword(service, account); return await credentialStore.deletePassword(service, account).catch(() => false) || removed; },
76
+ };
77
+ }
78
+ const accountOf = (relayUrl, userId) => `${new URL(relayUrl).origin}|${userId}`;
79
+ async function ownerOf() {
80
+ const account = await requireLogin().catch(() => { throw new ControllerError("Not signed in. Run frely login first.", EXIT.auth); });
81
+ return { relayUrl: account.config.relayUrl, userId: account.user.id };
82
+ }
83
+ export async function readSession(store = sessionStore()) {
84
+ const { relayUrl, userId } = await ownerOf();
85
+ const raw = await store.getPassword(SERVICE, accountOf(relayUrl, userId));
86
+ if (!raw)
87
+ return null;
88
+ const value = JSON.parse(raw);
89
+ if (value.version !== 1 || value.relayUrl !== relayUrl)
90
+ return null;
91
+ return value;
92
+ }
93
+ async function writeSession(session, store = sessionStore()) {
94
+ const { userId } = await ownerOf();
95
+ await store.setPassword(SERVICE, accountOf(session.relayUrl, userId), JSON.stringify(session));
96
+ }
97
+ export async function deleteSession(store = sessionStore()) {
98
+ const { relayUrl, userId } = await ownerOf();
99
+ return store.deletePassword(SERVICE, accountOf(relayUrl, userId));
100
+ }
101
+ const formHeaders = (relayUrl, dpop) => ({ "content-type": "application/x-www-form-urlencoded", origin: relayUrl, accept: "application/json", dpop });
102
+ async function tokenRequest(relayUrl, key, body) {
103
+ const url = `${relayUrl}/api/auth/oauth2/token`;
104
+ return fetch(url, { method: "POST", headers: formHeaders(relayUrl, createDpopProof(key, { method: "POST", url })), body: body.toString(), redirect: "error", signal: AbortSignal.timeout(TIMEOUT_MS) });
105
+ }
106
+ function parseTokens(payload) {
107
+ if (typeof payload.access_token !== "string" || !payload.access_token.startsWith("fmcp_at_") || typeof payload.refresh_token !== "string" || typeof payload.expires_in !== "number") {
108
+ throw new ControllerError("Frely returned an invalid controller token.", EXIT.auth);
109
+ }
110
+ return { accessToken: payload.access_token, refreshToken: payload.refresh_token, expiresAt: Date.now() + payload.expires_in * 1000 };
111
+ }
112
+ /** Maps a refused token request to the exit code a script can act on. */
113
+ function tokenFailure(response, payload) {
114
+ const detail = typeof payload.error_description === "string" ? payload.error_description : typeof payload.error === "string" ? payload.error : `HTTP ${response.status}`;
115
+ if (response.status === 403 && payload.error === "access_denied")
116
+ return new ControllerError(detail, EXIT.limit);
117
+ return new ControllerError(detail, EXIT.auth);
118
+ }
119
+ const delay = (ms) => new Promise((done) => setTimeout(done, ms));
120
+ /**
121
+ * Signs this computer in as a controller: a device-code authorization the owner approves in a browser (with a passkey or authenticator code),
122
+ * which issues tokens bound to a new key kept here. Before the code is shown the CLI tells the server which computer is asking, and the
123
+ * approval page repeats that beside the address the request came from.
124
+ */
125
+ export async function controllerLogin(options = {}) {
126
+ const notify = options.notify ?? ((text) => { process.stderr.write(text); });
127
+ const { relayUrl } = await ownerOf();
128
+ const device = await ensureDevice();
129
+ const mcpUrl = controllerMcpUrl(relayUrl);
130
+ const key = generateDpopKey();
131
+ const codeResponse = await fetch(`${relayUrl}/api/auth/device/code`, {
132
+ method: "POST", headers: { "content-type": "application/x-www-form-urlencoded", origin: relayUrl, accept: "application/json" }, redirect: "error", signal: AbortSignal.timeout(TIMEOUT_MS),
133
+ body: new URLSearchParams({ client_id: CONTROLLER_CLIENT_ID, scope: SCOPE, resource: mcpUrl }).toString(),
134
+ });
135
+ const code = await codeResponse.json().catch(() => ({}));
136
+ if (!codeResponse.ok || typeof code.device_code !== "string" || typeof code.user_code !== "string" || typeof code.verification_uri_complete !== "string") {
137
+ throw new ControllerError(typeof code.error_description === "string" ? code.error_description : `Frely refused the controller request (HTTP ${codeResponse.status}).`, EXIT.auth);
138
+ }
139
+ const claim = await fetch(`${relayUrl}/api/auth/device/controller`, {
140
+ method: "POST", headers: { "content-type": "application/json", origin: relayUrl, accept: "application/json" }, redirect: "error", signal: AbortSignal.timeout(TIMEOUT_MS),
141
+ body: JSON.stringify({ action: "put", userCode: code.user_code, controller: { deviceId: device.deviceId, hostname: hostname(), platform: platform(), cliVersion: VERSION } }),
142
+ });
143
+ if (!claim.ok)
144
+ throw new ControllerError(`Frely would not take this computer's details (HTTP ${claim.status}). Update Frely CLI and try again.`, EXIT.auth);
145
+ const link = new URL(code.verification_uri_complete);
146
+ if (link.origin !== relayUrl)
147
+ throw new ControllerError("Frely returned an unexpected approval link.", EXIT.auth);
148
+ notify(`Approve this computer to control your Frely devices.\nCode: ${code.user_code}\nOpen: ${link.toString()}\n(You will be asked to type the code and confirm with a passkey or authenticator code.)\n`);
149
+ if (options.openBrowser !== false && process.env.FRELY_NO_BROWSER !== "1")
150
+ openVerificationUrl(link.toString());
151
+ const deadline = Date.now() + (typeof code.expires_in === "number" ? code.expires_in : 900) * 1000;
152
+ let interval = (typeof code.interval === "number" ? code.interval : 5) * 1000;
153
+ while (Date.now() < deadline) {
154
+ await delay(interval);
155
+ const response = await tokenRequest(relayUrl, key, new URLSearchParams({
156
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code", device_code: code.device_code, client_id: CONTROLLER_CLIENT_ID, resource: mcpUrl, controller_device_id: device.deviceId,
157
+ }));
158
+ const payload = await response.json().catch(() => ({}));
159
+ if (response.ok) {
160
+ const session = { version: 1, relayUrl, mcpUrl, deviceId: device.deviceId, privateKeyPem: key.privateKeyPem, ...parseTokens(payload) };
161
+ await writeSession(session);
162
+ return session;
163
+ }
164
+ if (payload.error === "authorization_pending")
165
+ continue;
166
+ if (payload.error === "slow_down") {
167
+ interval += 5000;
168
+ continue;
169
+ }
170
+ if (payload.error === "expired_token")
171
+ throw new ControllerError("The approval request expired. Run the command again.", EXIT.auth);
172
+ if (payload.error === "access_denied" && response.status !== 403)
173
+ throw new ControllerError("The request was denied.", EXIT.auth);
174
+ throw tokenFailure(response, payload);
175
+ }
176
+ throw new ControllerError("The approval request expired. Run the command again.", EXIT.auth);
177
+ }
178
+ /** Exchanges the refresh token; a session that another process already renewed is taken from the store instead of spent twice. */
179
+ export async function refreshSession(session) {
180
+ const key = dpopKeyFromPem(session.privateKeyPem);
181
+ const response = await tokenRequest(session.relayUrl, key, new URLSearchParams({ grant_type: "refresh_token", refresh_token: session.refreshToken, client_id: CONTROLLER_CLIENT_ID, resource: session.mcpUrl }));
182
+ const payload = await response.json().catch(() => ({}));
183
+ if (!response.ok) {
184
+ const stored = await readSession().catch(() => null);
185
+ if (stored && stored.refreshToken !== session.refreshToken)
186
+ return stored;
187
+ if (payload.error === "invalid_grant")
188
+ await deleteSession().catch(() => false);
189
+ throw new ControllerError("This computer's controller authorization has ended. Run the command again to approve it in your browser.", EXIT.auth);
190
+ }
191
+ const next = { ...session, ...parseTokens(payload) };
192
+ await writeSession(next);
193
+ return next;
194
+ }
195
+ /** Signs the controller session out: revokes the refresh token on the server (the connection stays listed until disconnected on the web) and forgets it here. */
196
+ export async function controllerLogout() {
197
+ const session = await readSession();
198
+ if (!session)
199
+ return false;
200
+ const key = dpopKeyFromPem(session.privateKeyPem);
201
+ const url = `${session.relayUrl}/api/auth/oauth2/revoke`;
202
+ const response = await fetch(url, {
203
+ method: "POST", headers: { "content-type": "application/x-www-form-urlencoded", origin: session.relayUrl, dpop: createDpopProof(key, { method: "POST", url }) }, redirect: "error", signal: AbortSignal.timeout(TIMEOUT_MS),
204
+ body: new URLSearchParams({ client_id: CONTROLLER_CLIENT_ID, token: session.refreshToken, token_type_hint: "refresh_token" }).toString(),
205
+ }).catch(() => null);
206
+ if (!response?.ok)
207
+ throw new ControllerError("The controller authorization could not be revoked. Try again, or disconnect this computer in My Devices on the web.", EXIT.auth);
208
+ await deleteSession();
209
+ return true;
210
+ }
211
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/controller/session.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export type DeviceRelayRequest = {
5
5
  protocol: typeof DEVICE_RELAY_PROTOCOL;
6
6
  type: "request";
7
7
  id: string;
8
- method: "mcp" | "provider" | "node";
8
+ method: "mcp" | "provider";
9
9
  authorizationId?: string;
10
10
  /** Enabled MCP toolsets on the authorization (relay server -> device). Absent means ["workspace"] (older relays). */
11
11
  toolsets?: string[];
@@ -46,7 +46,7 @@ export function validateDeviceRelayEnvelope(value) {
46
46
  throw new DeviceRelayProtocolError("frame_invalid");
47
47
  if (record.autoUpdate !== undefined && (record.method !== "mcp" || record.autoUpdate !== true))
48
48
  throw new DeviceRelayProtocolError("frame_invalid");
49
- if (record.method !== "mcp" && record.method !== "provider" && record.method !== "node")
49
+ if (record.method !== "mcp" && record.method !== "provider")
50
50
  throw new DeviceRelayProtocolError("frame_invalid");
51
51
  return;
52
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/device/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/device/protocol.ts"],"names":[],"mappings":"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"}
@@ -27,4 +27,18 @@ export interface RelayServeOptions {
27
27
  }
28
28
  export declare function serveDeviceRelay(options: RelayServeOptions): Promise<void>;
29
29
  export declare function isTransportFallbackEligible(error: unknown): boolean;
30
+ export declare function isRelayRestartClose(error: unknown): boolean;
31
+ export declare const RELAY_RESTART_RETRY_WINDOW_MS = 60000;
32
+ /**
33
+ * After the relay announced a restart, retry about once a second for a minute (also when attempts fail
34
+ * while the container is still starting), then fall back to the exponential backoff.
35
+ */
36
+ export declare function nextReconnectDelay(state: {
37
+ backoffMs: number;
38
+ restartSince?: number | undefined;
39
+ }, error: unknown, now: number, random?: () => number): {
40
+ delayMs: number;
41
+ backoffMs: number;
42
+ restartSince?: number | undefined;
43
+ };
30
44
  export declare function serveConnection(websocketUrl: string, accessToken: string, deviceId: string, session: RelaySession | null, lease: McpLease | null, signal: AbortSignal, log: (message: string) => void, report?: (event: ConnectionEvent) => void, maintenance?: MaintenanceGate, capabilities?: () => Record<string, unknown> | Promise<Record<string, unknown>> | undefined): Promise<void>;
@@ -29,6 +29,7 @@ export async function serveDeviceRelay(options) {
29
29
  // Off unless the owner switched it on; the swap happens while idle and the watcher above restarts the service.
30
30
  const closeAutoUpdate = maintenance && options.restartForUpdate ? watchAutoUpdate({ gate: maintenance, signal: options.signal, enabled: () => readEffectiveAutoUpdate(), log }) : () => { };
31
31
  let delayMs = 1000;
32
+ let restartSince;
32
33
  let preferredTransport;
33
34
  try {
34
35
  while (!options.signal.aborted) {
@@ -84,8 +85,10 @@ export async function serveDeviceRelay(options) {
84
85
  reporter.report({ type: "connecting", mcpEnabled: Boolean(authorization), authorizationId: authorization?.grant.id, transport: selectedTransport.kind });
85
86
  diagnostic(log, isFallback ? `relay.transport_selected_fallback.${selectedTransport.kind}` : `relay.transport_selected.${selectedTransport.kind}`);
86
87
  await serveConnection(selectedTransport.websocketUrl, selectedTransport.accessToken, device.deviceId, session, lease, options.signal, log, (event) => {
87
- if (event.type === "connected")
88
+ if (event.type === "connected") {
88
89
  delayMs = 1000;
90
+ restartSince = undefined;
91
+ }
89
92
  reporter.report(event);
90
93
  }, maintenance, options.capabilities);
91
94
  preferredTransport = undefined;
@@ -111,8 +114,10 @@ export async function serveDeviceRelay(options) {
111
114
  diagnostic(log, selectedTransport ? `relay.disconnected.${selectedTransport.kind}` : "relay.disconnected", {}, error);
112
115
  reporter.report({ type: "disconnected", error });
113
116
  if (!retryWithoutDelay) {
114
- await wait(delayMs, options.signal);
115
- delayMs = Math.min(delayMs * 2, 15_000);
117
+ const next = nextReconnectDelay({ backoffMs: delayMs, restartSince }, error, Date.now());
118
+ restartSince = next.restartSince;
119
+ delayMs = next.backoffMs;
120
+ await wait(next.delayMs, options.signal);
116
121
  }
117
122
  }
118
123
  finally {
@@ -131,9 +136,11 @@ export async function serveDeviceRelay(options) {
131
136
  }
132
137
  class DeviceTransportConnectionError extends Error {
133
138
  fallbackEligible;
134
- constructor(message, fallbackEligible) {
139
+ closeCode;
140
+ constructor(message, fallbackEligible, closeCode) {
135
141
  super(message);
136
142
  this.fallbackEligible = fallbackEligible;
143
+ this.closeCode = closeCode;
137
144
  this.name = "Error";
138
145
  }
139
146
  }
@@ -143,7 +150,27 @@ export function isTransportFallbackEligible(error) {
143
150
  function closedTransportError(code, reason) {
144
151
  const text = reason.toString();
145
152
  const noFallback = new Set(["hard_lifetime", "connection_replaced", "device_revoked", "revocation_check_failed", "frame_invalid"]);
146
- return new DeviceTransportConnectionError(`WebSocket closed (${code}${text ? `: ${text}` : ""})`, !noFallback.has(text));
153
+ return new DeviceTransportConnectionError(`WebSocket closed (${code}${text ? `: ${text}` : ""})`, !noFallback.has(text) && !isRelayRestartCode(code), code);
154
+ }
155
+ /** 1012 (Service Restart) and 1001 (Going Away): the relay is restarting and will be back within seconds. */
156
+ function isRelayRestartCode(code) {
157
+ return code === 1012 || code === 1001;
158
+ }
159
+ export function isRelayRestartClose(error) {
160
+ return error instanceof DeviceTransportConnectionError && error.closeCode !== undefined && isRelayRestartCode(error.closeCode);
161
+ }
162
+ export const RELAY_RESTART_RETRY_WINDOW_MS = 60_000;
163
+ const MAX_BACKOFF_MS = 15_000;
164
+ /**
165
+ * After the relay announced a restart, retry about once a second for a minute (also when attempts fail
166
+ * while the container is still starting), then fall back to the exponential backoff.
167
+ */
168
+ export function nextReconnectDelay(state, error, now, random = Math.random) {
169
+ const restartSince = state.restartSince ?? (isRelayRestartClose(error) ? now : undefined);
170
+ if (restartSince !== undefined && now - restartSince < RELAY_RESTART_RETRY_WINDOW_MS) {
171
+ return { delayMs: Math.round(800 + random() * 400), backoffMs: state.backoffMs, restartSince };
172
+ }
173
+ return { delayMs: state.backoffMs, backoffMs: Math.min(state.backoffMs * 2, MAX_BACKOFF_MS) };
147
174
  }
148
175
  export async function serveConnection(websocketUrl, accessToken, deviceId, session, lease, signal, log, report = () => undefined, maintenance, capabilities) {
149
176
  if (signal.aborted)
@@ -183,7 +210,7 @@ export async function serveConnection(websocketUrl, accessToken, deviceId, sessi
183
210
  for (const [id, item] of inflight) {
184
211
  cancelled.add(id);
185
212
  item.controller.abort();
186
- if (item.request.method === "mcp" || item.request.method === "node")
213
+ if (item.request.method === "mcp")
187
214
  session?.cancel(id);
188
215
  }
189
216
  signal.removeEventListener("abort", onAbort);
@@ -272,7 +299,7 @@ async function handleFrame(data, socket, inflight, cancelled, session, lease, lo
272
299
  inflight.set(envelope.id, { request: envelope, controller });
273
300
  const operation = envelope.method === "provider"
274
301
  ? executeProviderRequest(envelope, socket, controller.signal, cancelled, log)
275
- : (envelope.method === "node" ? executeNodeRequest(envelope, session) : executeMcpRequest(envelope, session, lease)).then((payload) => {
302
+ : executeMcpRequest(envelope, session, lease).then((payload) => {
276
303
  if (!cancelled.has(envelope.id))
277
304
  send(socket, { protocol: DEVICE_RELAY_PROTOCOL, type: "response", id: envelope.id, ok: true, payload }, log);
278
305
  });
@@ -294,16 +321,9 @@ async function executeMcpRequest(request, session, lease) {
294
321
  await setRemoteAutoUpdate(request.autoUpdate === true);
295
322
  return session.execute(request.payload, request.id, request.toolsets, request.localMcps);
296
323
  }
297
- async function executeNodeRequest(request, session) {
298
- if (!session)
299
- throw new Error("No node session available.");
300
- return session.execute(request.payload, request.id);
301
- }
302
324
  function relayErrorCode(method) {
303
325
  if (method === "mcp")
304
326
  return "mcp_execution_failed";
305
- if (method === "node")
306
- return "node_execution_failed";
307
327
  return "provider_execution_failed";
308
328
  }
309
329
  async function executeProviderRequest(request, socket, signal, cancelled, log) {