@stanleysun233/oneproxy-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/bin/onep.js +2 -0
  2. package/dist/commands.d.ts +15 -0
  3. package/dist/commands.js +216 -0
  4. package/dist/commands.js.map +1 -0
  5. package/dist/control-plane.d.ts +41 -0
  6. package/dist/control-plane.js +284 -0
  7. package/dist/control-plane.js.map +1 -0
  8. package/dist/daemon/http-proxy.d.ts +11 -0
  9. package/dist/daemon/http-proxy.js +148 -0
  10. package/dist/daemon/http-proxy.js.map +1 -0
  11. package/dist/daemon/lifecycle.d.ts +129 -0
  12. package/dist/daemon/lifecycle.js +350 -0
  13. package/dist/daemon/lifecycle.js.map +1 -0
  14. package/dist/daemon/port-selection.d.ts +9 -0
  15. package/dist/daemon/port-selection.js +61 -0
  16. package/dist/daemon/port-selection.js.map +1 -0
  17. package/dist/daemon/router.d.ts +35 -0
  18. package/dist/daemon/router.js +105 -0
  19. package/dist/daemon/router.js.map +1 -0
  20. package/dist/doctor.d.ts +29 -0
  21. package/dist/doctor.js +178 -0
  22. package/dist/doctor.js.map +1 -0
  23. package/dist/init.d.ts +2 -0
  24. package/dist/init.js +199 -0
  25. package/dist/init.js.map +1 -0
  26. package/dist/main.d.ts +5 -0
  27. package/dist/main.js +130 -0
  28. package/dist/main.js.map +1 -0
  29. package/dist/profile.d.ts +2 -0
  30. package/dist/profile.js +53 -0
  31. package/dist/profile.js.map +1 -0
  32. package/dist/session-env.d.ts +8 -0
  33. package/dist/session-env.js +219 -0
  34. package/dist/session-env.js.map +1 -0
  35. package/dist/shell.d.ts +3 -0
  36. package/dist/shell.js +50 -0
  37. package/dist/shell.js.map +1 -0
  38. package/dist/ssh.d.ts +19 -0
  39. package/dist/ssh.js +83 -0
  40. package/dist/ssh.js.map +1 -0
  41. package/dist/storage.d.ts +115 -0
  42. package/dist/storage.js +224 -0
  43. package/dist/storage.js.map +1 -0
  44. package/package.json +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EAIZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AA2B7D,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAY;IAC7C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;IACjF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,OAAO,CAAI,eAAuB,EAAE,IAAY,EAAE,UAAwF,EAAE;IACzJ,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE;QAC5D,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,OAAO;QACP,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;KAC5E,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,0CAA0C,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAChH,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,2BAA2B;SAC9E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,eAAuB;IAChD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAC/E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACnI,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,KAAa;IACjC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,MAAmB;IACzC,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW;QAC7D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,YAAY;QAChE,UAAU,EAAE,SAAS;QACrB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,SAAS;QAClE,qBAAqB,EAAE,SAAS;QAChC,mBAAmB,EAAE,SAAS;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AACzG,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAiB;IAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kEAAkE,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5I,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,CAAC,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,QAAQ,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACrG,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,EAAE,CAAC;IACT,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,IAAI,OAAwD,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrD,OAAO,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACxB,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACtB,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACrD,MAAM,EAAE,CAAC;YACX,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,KAAK,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACrD,MAAM,EAAE,CAAC;YACX,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAe,EAAE,QAAoB;IACrE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,WAAW,CAAC;IAC3C,MAAM,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAc,QAAQ,EAAE,aAAa,EAAE;QAChE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;KAC5B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAwB,QAAQ,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjJ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,WAAW,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,WAAW;QACX,eAAe,EAAE,QAAQ;QACzB,cAAc;QACd,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAM,QAAQ,EAAE,4BAA4B,EAAE;QAC3E,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,cAAc;KACzB,CAAC,CAAC;IACH,MAAM,WAAW,GAAiB,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;QAC9E,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC,CAAC;IACJ,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,WAAW,EAAE,EAAE,CAAC,CAAC;IAC/F,MAAM,UAAU,CAAC;QACf,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE;YACT,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,WAAW,EAAE,EAAE;YACxB,UAAU,EAAE,UAAU,EAAE,SAAS;gBAC/B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,IAAI,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC;gBACjK,CAAC,CAAC,EAAE;SACP;QACD,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC1D,WAAW;KACZ,CAAC,CAAC;IACH,MAAM,WAAW,CAAC;QAChB,GAAG,MAAM;QACT,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QACrD,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,MAAM,CAAC,mBAAmB;KACjF,CAAC,CAAC;IACH,IAAI,WAAW,EAAE,EAAE,EAAE,CAAC;QACpB,MAAM,WAAW,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,WAAW;YACX,eAAe,EAAE,QAAQ;YACzB,cAAc;YACd,aAAa,EAAE,WAAW,CAAC,EAAE;YAC7B,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,WAAW,gBAAgB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClG,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAChG,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC3C,OAAO,mBAAmB,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ export type CliContext = {
3
+ json: boolean;
4
+ };
5
+ export declare function main(argv?: string[]): Promise<number>;
package/dist/main.js ADDED
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env node
2
+ import { login, logout, sync, tenantList, tenantUse, groupList, groupUse } from "./control-plane.js";
3
+ import { envOff, envOn, runCommand } from "./session-env.js";
4
+ import { doctor, overrideCommand, routeCommand, statusCommand, testCommand, writeError } from "./commands.js";
5
+ import { serveDaemon } from "./daemon/lifecycle.js";
6
+ import { runSsh } from "./ssh.js";
7
+ import { profileCommand } from "./profile.js";
8
+ import { initCommand } from "./init.js";
9
+ import { shellCommand } from "./shell.js";
10
+ function stripGlobalFlags(args) {
11
+ const remaining = [];
12
+ let json = false;
13
+ for (const arg of args) {
14
+ if (arg === '--json') {
15
+ json = true;
16
+ }
17
+ else {
18
+ remaining.push(arg);
19
+ }
20
+ }
21
+ return { args: remaining, context: { json } };
22
+ }
23
+ function usage() {
24
+ return [
25
+ 'Usage: onep <command> [options]',
26
+ '',
27
+ 'Commands:',
28
+ ' init',
29
+ ' login',
30
+ ' logout',
31
+ ' profile add <name> --control-plane <url>|use <name>|list|current',
32
+ ' tenant list|use <name-or-id>',
33
+ ' group list|use <name-or-id>',
34
+ ' sync',
35
+ ' status [--json]',
36
+ ' env [on|off]',
37
+ ' shell',
38
+ ' run <command...>',
39
+ ' override list|direct add <host>|proxy add <host>|remove <host>|clear',
40
+ ' route <url-or-host> [--json]',
41
+ ' test <url-or-host> [--json]',
42
+ ' ssh <host|user@host> [-p <port>]',
43
+ ' doctor [--json]'
44
+ ].join('\n');
45
+ }
46
+ function requireArg(value, message) {
47
+ if (!value) {
48
+ throw Object.assign(new Error(message), { code: 'SYNTAX_ERROR', exitCode: 2 });
49
+ }
50
+ return value;
51
+ }
52
+ const handlers = {
53
+ login,
54
+ init: initCommand,
55
+ logout,
56
+ sync,
57
+ status: statusCommand,
58
+ route: routeCommand,
59
+ test: testCommand,
60
+ doctor,
61
+ profile: profileCommand,
62
+ ssh: runSsh,
63
+ override: overrideCommand,
64
+ shell: shellCommand,
65
+ run: runCommand,
66
+ daemon: async (args) => {
67
+ if (args[0] === 'serve') {
68
+ await serveDaemon();
69
+ return 0;
70
+ }
71
+ throw Object.assign(new Error('daemon requires serve'), { code: 'SYNTAX_ERROR', exitCode: 2 });
72
+ },
73
+ env: async (args) => {
74
+ const mode = args[0] ?? 'on';
75
+ if (mode === 'on') {
76
+ return envOn();
77
+ }
78
+ if (mode === 'off') {
79
+ return envOff();
80
+ }
81
+ throw Object.assign(new Error(`Unknown env mode: ${mode}`), { code: 'SYNTAX_ERROR', exitCode: 2 });
82
+ },
83
+ tenant: async (args, context) => {
84
+ const action = args[0];
85
+ if (action === 'list') {
86
+ return tenantList(args.slice(1), context);
87
+ }
88
+ if (action === 'use') {
89
+ return tenantUse([requireArg(args[1], 'tenant use requires a tenant name or id')], context);
90
+ }
91
+ throw Object.assign(new Error('tenant requires list or use'), { code: 'SYNTAX_ERROR', exitCode: 2 });
92
+ },
93
+ group: async (args, context) => {
94
+ const action = args[0];
95
+ if (action === 'list') {
96
+ return groupList(args.slice(1), context);
97
+ }
98
+ if (action === 'use') {
99
+ return groupUse([requireArg(args[1], 'group use requires a group name or id')], context);
100
+ }
101
+ throw Object.assign(new Error('group requires list or use'), { code: 'SYNTAX_ERROR', exitCode: 2 });
102
+ }
103
+ };
104
+ export async function main(argv = process.argv.slice(2)) {
105
+ const parsed = stripGlobalFlags(argv);
106
+ const command = parsed.args[0];
107
+ if (!command || command === 'help' || command === '--help' || command === '-h') {
108
+ process.stdout.write(`${usage()}\n`);
109
+ return command ? 0 : 2;
110
+ }
111
+ const handler = handlers[command];
112
+ if (!handler) {
113
+ writeError({ code: 'COMMAND_NOT_FOUND', message: `Unknown command: ${command}` }, parsed.context);
114
+ return 2;
115
+ }
116
+ const code = await handler(parsed.args.slice(1), parsed.context);
117
+ return typeof code === 'number' ? code : 0;
118
+ }
119
+ main()
120
+ .then((code) => {
121
+ process.exitCode = code;
122
+ })
123
+ .catch((error) => {
124
+ writeError({
125
+ code: error.code || 'INTERNAL_ERROR',
126
+ message: error.message || String(error)
127
+ }, { json: process.argv.includes('--json') });
128
+ process.exitCode = error.exitCode || 1;
129
+ });
130
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CliContext } from './main.ts';
2
+ export declare function profileCommand(args: string[], context: CliContext): Promise<void>;
@@ -0,0 +1,53 @@
1
+ import { activeProfileName, addProfile, readProfilesIndex, useProfile } from "./storage.js";
2
+ function optionValue(args, name) {
3
+ const index = args.indexOf(name);
4
+ return index >= 0 ? args[index + 1] : undefined;
5
+ }
6
+ function print(value, context) {
7
+ if (context.json) {
8
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
9
+ return;
10
+ }
11
+ process.stdout.write(`${String(value)}\n`);
12
+ }
13
+ export async function profileCommand(args, context) {
14
+ const action = args[0];
15
+ if (action === 'add') {
16
+ const name = args[1];
17
+ const controlPlaneUrl = optionValue(args, '--control-plane') || args[2];
18
+ if (!name || !controlPlaneUrl) {
19
+ throw Object.assign(new Error('profile add requires <name> and --control-plane <url>.'), { code: 'SYNTAX_ERROR', exitCode: 2 });
20
+ }
21
+ const profile = await addProfile(name, controlPlaneUrl);
22
+ print(context.json ? { profile } : `Active profile: ${profile.name}`, context);
23
+ return;
24
+ }
25
+ if (action === 'use') {
26
+ const name = args[1];
27
+ if (!name) {
28
+ throw Object.assign(new Error('profile use requires <name>.'), { code: 'SYNTAX_ERROR', exitCode: 2 });
29
+ }
30
+ const profile = await useProfile(name);
31
+ print(context.json ? { profile } : `Active profile: ${profile.name}`, context);
32
+ return;
33
+ }
34
+ if (action === 'list') {
35
+ const index = await readProfilesIndex();
36
+ const profiles = Object.values(index.profiles).sort((left, right) => left.name.localeCompare(right.name));
37
+ if (context.json) {
38
+ print({ activeProfile: index.activeProfile ?? activeProfileName(), profiles }, context);
39
+ return;
40
+ }
41
+ print(profiles.map((profile) => `${profile.name === (index.activeProfile ?? activeProfileName()) ? '*' : ' '}\t${profile.name}\t${profile.controlPlaneUrl}`).join('\n'), context);
42
+ return;
43
+ }
44
+ if (action === 'current') {
45
+ const index = await readProfilesIndex();
46
+ const name = index.activeProfile ?? activeProfileName();
47
+ const profile = index.profiles[name] ?? null;
48
+ print(context.json ? { activeProfile: name, profile } : `${name}${profile ? `\t${profile.controlPlaneUrl}` : ''}`, context);
49
+ return;
50
+ }
51
+ throw Object.assign(new Error('profile requires add, use, list, or current'), { code: 'SYNTAX_ERROR', exitCode: 2 });
52
+ }
53
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CliContext } from './main.ts';
2
+ import { type DaemonBindings } from './storage.ts';
3
+ export declare function ensureSessionProxyBindings(): Promise<DaemonBindings>;
4
+ export declare function proxyEnv(bindings: DaemonBindings): Record<string, string>;
5
+ export declare function sessionProxyEnv(): Promise<Record<string, string>>;
6
+ export declare function envOn(): Promise<void>;
7
+ export declare function envOff(): Promise<void>;
8
+ export declare function runCommand(args: string[], _context: CliContext): Promise<number>;
@@ -0,0 +1,219 @@
1
+ import { spawn } from 'node:child_process';
2
+ const preservedProxyVariables = [
3
+ 'HTTP_PROXY',
4
+ 'HTTPS_PROXY',
5
+ 'ALL_PROXY',
6
+ 'NO_PROXY',
7
+ 'http_proxy',
8
+ 'https_proxy',
9
+ 'all_proxy',
10
+ 'no_proxy'
11
+ ];
12
+ const unsetMarker = '__ONEPROXY_UNSET__';
13
+ async function lifecycleBindings() {
14
+ const lifecycle = (await import("./daemon/lifecycle.js"));
15
+ const result = await lifecycle.ensureDaemon?.();
16
+ if (!result) {
17
+ throw Object.assign(new Error('Daemon lifecycle is unavailable'), { code: 'DAEMON_UNAVAILABLE' });
18
+ }
19
+ return result.metadata.bindings;
20
+ }
21
+ export async function ensureSessionProxyBindings() {
22
+ const lifecycle = await lifecycleBindings();
23
+ if (!lifecycle?.httpPort || !lifecycle.httpsPort) {
24
+ throw Object.assign(new Error('Daemon did not return proxy bindings'), { code: 'DAEMON_UNAVAILABLE' });
25
+ }
26
+ return lifecycle;
27
+ }
28
+ export function proxyEnv(bindings) {
29
+ const httpProxy = `http://${bindings.host}:${bindings.httpPort}`;
30
+ const httpsProxy = `http://${bindings.host}:${bindings.httpsPort}`;
31
+ return {
32
+ HTTP_PROXY: httpProxy,
33
+ HTTPS_PROXY: httpsProxy,
34
+ ALL_PROXY: httpProxy,
35
+ NO_PROXY: 'localhost,127.0.0.1,::1',
36
+ ONEPROXY_ACTIVE: '1',
37
+ ONEPROXY_HTTP_PORT: String(bindings.httpPort),
38
+ ONEPROXY_HTTPS_PORT: String(bindings.httpsPort)
39
+ };
40
+ }
41
+ export async function sessionProxyEnv() {
42
+ return proxyEnv(await ensureSessionProxyBindings());
43
+ }
44
+ function shellFamily() {
45
+ const shell = `${process.env.ONEPROXY_SHELL || process.env.SHELL || process.env.ComSpec || ''}`.toLowerCase();
46
+ if (shell.includes('fish')) {
47
+ return 'fish';
48
+ }
49
+ if (shell.includes('powershell') || shell.includes('pwsh')) {
50
+ return 'powershell';
51
+ }
52
+ if (process.platform === 'win32' && shell.includes('cmd')) {
53
+ return 'cmd';
54
+ }
55
+ return 'posix';
56
+ }
57
+ function quotePosix(value) {
58
+ return `'${value.replace(/'/g, "'\\''")}'`;
59
+ }
60
+ function quoteFish(value) {
61
+ return `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`;
62
+ }
63
+ function posixOn(env) {
64
+ const lines = [];
65
+ for (const key of preservedProxyVariables) {
66
+ lines.push(`if [ -z "\${${key}+x}" ]; then export ONEPROXY_PREV_${key}=${quotePosix(unsetMarker)}; else export ONEPROXY_PREV_${key}="\$${key}"; fi`);
67
+ }
68
+ for (const [key, value] of Object.entries(env)) {
69
+ lines.push(`export ${key}=${quotePosix(value)}`);
70
+ }
71
+ return `${lines.join('\n')}\n`;
72
+ }
73
+ function posixOff() {
74
+ const lines = [];
75
+ for (const key of preservedProxyVariables) {
76
+ lines.push(`if [ "\${ONEPROXY_PREV_${key}-}" = ${quotePosix(unsetMarker)} ]; then unset ${key}; elif [ -n "\${ONEPROXY_PREV_${key}+x}" ]; then export ${key}="\$ONEPROXY_PREV_${key}"; fi`);
77
+ }
78
+ lines.push('unset ONEPROXY_ACTIVE ONEPROXY_HTTP_PORT ONEPROXY_HTTPS_PORT');
79
+ for (const key of preservedProxyVariables) {
80
+ lines.push(`unset ONEPROXY_PREV_${key}`);
81
+ }
82
+ return `${lines.join('\n')}\n`;
83
+ }
84
+ function fishOn(env) {
85
+ const lines = [];
86
+ for (const key of preservedProxyVariables) {
87
+ lines.push(`if set -q ${key}; set -gx ONEPROXY_PREV_${key} $${key}; else; set -gx ONEPROXY_PREV_${key} ${quoteFish(unsetMarker)}; end`);
88
+ }
89
+ for (const [key, value] of Object.entries(env)) {
90
+ lines.push(`set -gx ${key} ${quoteFish(value)}`);
91
+ }
92
+ return `${lines.join('\n')}\n`;
93
+ }
94
+ function fishOff() {
95
+ const lines = [];
96
+ for (const key of preservedProxyVariables) {
97
+ lines.push(`if test "$ONEPROXY_PREV_${key}" = ${quoteFish(unsetMarker)}; set -e ${key}; else if set -q ONEPROXY_PREV_${key}; set -gx ${key} "$ONEPROXY_PREV_${key}"; end`);
98
+ }
99
+ lines.push('set -e ONEPROXY_ACTIVE ONEPROXY_HTTP_PORT ONEPROXY_HTTPS_PORT');
100
+ for (const key of preservedProxyVariables) {
101
+ lines.push(`set -e ONEPROXY_PREV_${key}`);
102
+ }
103
+ return `${lines.join('\n')}\n`;
104
+ }
105
+ function powershellOn(env) {
106
+ const lines = [];
107
+ for (const key of preservedProxyVariables) {
108
+ lines.push(`if (Test-Path Env:${key}) { Set-Item Env:ONEPROXY_PREV_${key} (Get-Item Env:${key}).Value } else { Set-Item Env:ONEPROXY_PREV_${key} ${JSON.stringify(unsetMarker)} }`);
109
+ }
110
+ for (const [key, value] of Object.entries(env)) {
111
+ lines.push(`Set-Item Env:${key} ${JSON.stringify(value)}`);
112
+ }
113
+ return `${lines.join('\n')}\n`;
114
+ }
115
+ function powershellOff() {
116
+ const lines = [];
117
+ for (const key of preservedProxyVariables) {
118
+ lines.push(`if ((Get-Item Env:ONEPROXY_PREV_${key} -ErrorAction SilentlyContinue).Value -eq ${JSON.stringify(unsetMarker)}) { Remove-Item Env:${key} -ErrorAction SilentlyContinue } elseif (Test-Path Env:ONEPROXY_PREV_${key}) { Set-Item Env:${key} (Get-Item Env:ONEPROXY_PREV_${key}).Value }`);
119
+ }
120
+ lines.push('Remove-Item Env:ONEPROXY_ACTIVE,Env:ONEPROXY_HTTP_PORT,Env:ONEPROXY_HTTPS_PORT -ErrorAction SilentlyContinue');
121
+ for (const key of preservedProxyVariables) {
122
+ lines.push(`Remove-Item Env:ONEPROXY_PREV_${key} -ErrorAction SilentlyContinue`);
123
+ }
124
+ return `${lines.join('\n')}\n`;
125
+ }
126
+ function cmdOn(env) {
127
+ const lines = [];
128
+ for (const key of preservedProxyVariables) {
129
+ lines.push(`if defined ${key} (set "ONEPROXY_PREV_${key}=%${key}%") else (set "ONEPROXY_PREV_${key}=${unsetMarker}")`);
130
+ }
131
+ for (const [key, value] of Object.entries(env)) {
132
+ lines.push(`set "${key}=${value}"`);
133
+ }
134
+ return `${lines.join('\r\n')}\r\n`;
135
+ }
136
+ function cmdOff() {
137
+ const lines = [];
138
+ for (const key of preservedProxyVariables) {
139
+ lines.push(`if "%ONEPROXY_PREV_${key}%"=="${unsetMarker}" (set "${key}=") else (set "${key}=%ONEPROXY_PREV_${key}%")`);
140
+ }
141
+ lines.push('set "ONEPROXY_ACTIVE="');
142
+ lines.push('set "ONEPROXY_HTTP_PORT="');
143
+ lines.push('set "ONEPROXY_HTTPS_PORT="');
144
+ for (const key of preservedProxyVariables) {
145
+ lines.push(`set "ONEPROXY_PREV_${key}="`);
146
+ }
147
+ return `${lines.join('\r\n')}\r\n`;
148
+ }
149
+ function activationScript(bindings) {
150
+ const env = proxyEnv(bindings);
151
+ switch (shellFamily()) {
152
+ case 'fish':
153
+ return fishOn(env);
154
+ case 'powershell':
155
+ return powershellOn(env);
156
+ case 'cmd':
157
+ return cmdOn(env);
158
+ default:
159
+ return posixOn(env);
160
+ }
161
+ }
162
+ function deactivationScript() {
163
+ switch (shellFamily()) {
164
+ case 'fish':
165
+ return fishOff();
166
+ case 'powershell':
167
+ return powershellOff();
168
+ case 'cmd':
169
+ return cmdOff();
170
+ default:
171
+ return posixOff();
172
+ }
173
+ }
174
+ export async function envOn() {
175
+ process.stdout.write(activationScript(await ensureSessionProxyBindings()));
176
+ }
177
+ export async function envOff() {
178
+ process.stdout.write(deactivationScript());
179
+ }
180
+ export async function runCommand(args, _context) {
181
+ const executable = args[0];
182
+ if (!executable) {
183
+ throw Object.assign(new Error('run requires a command.'), { code: 'COMMAND_NOT_FOUND', exitCode: 2 });
184
+ }
185
+ const lifecycle = (await import("./daemon/lifecycle.js"));
186
+ const session = await lifecycle.startDaemonSession?.();
187
+ if (!session) {
188
+ throw Object.assign(new Error('Daemon lifecycle is unavailable'), { code: 'DAEMON_UNAVAILABLE' });
189
+ }
190
+ const bindings = session.metadata.bindings;
191
+ const child = spawn(executable, args.slice(1), {
192
+ stdio: 'inherit',
193
+ env: {
194
+ ...process.env,
195
+ ...proxyEnv(bindings)
196
+ }
197
+ });
198
+ return new Promise((resolve, reject) => {
199
+ child.once('error', (error) => {
200
+ session.end().then(() => {
201
+ if (error.code === 'ENOENT') {
202
+ reject(Object.assign(new Error(`Command not found: ${executable}`), { code: 'COMMAND_NOT_FOUND' }));
203
+ return;
204
+ }
205
+ reject(error);
206
+ }, reject);
207
+ });
208
+ child.once('exit', (code, signal) => {
209
+ session.end().then(() => {
210
+ if (signal) {
211
+ resolve(1);
212
+ return;
213
+ }
214
+ resolve(code ?? 0);
215
+ }, reject);
216
+ });
217
+ });
218
+ }
219
+ //# sourceMappingURL=session-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-env.js","sourceRoot":"","sources":["../src/session-env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliContext } from './main.ts';
2
+ export declare function startActivatedShell(): Promise<number>;
3
+ export declare function shellCommand(_args: string[], _context: CliContext): Promise<number>;
package/dist/shell.js ADDED
@@ -0,0 +1,50 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { proxyEnv } from "./session-env.js";
3
+ import { startDaemonSession } from "./daemon/lifecycle.js";
4
+ function defaultShell() {
5
+ if (process.env.ONEPROXY_SHELL) {
6
+ return process.env.ONEPROXY_SHELL;
7
+ }
8
+ if (process.platform === 'win32') {
9
+ return process.env.ComSpec || 'cmd.exe';
10
+ }
11
+ return process.env.SHELL || '/bin/sh';
12
+ }
13
+ function shellArgs(shell) {
14
+ const normalized = shell.toLowerCase();
15
+ if (process.platform === 'win32' || normalized.includes('cmd.exe') || normalized.includes('powershell') || normalized.includes('pwsh')) {
16
+ return [];
17
+ }
18
+ return ['-i'];
19
+ }
20
+ export async function startActivatedShell() {
21
+ const shell = defaultShell();
22
+ const session = await startDaemonSession();
23
+ process.stdout.write(`OneProxy shell active: ${shell}\n`);
24
+ process.stdout.write('Exit this shell to turn it off.\n');
25
+ const child = spawn(shell, shellArgs(shell), {
26
+ stdio: 'inherit',
27
+ env: {
28
+ ...process.env,
29
+ ...proxyEnv(session.metadata.bindings)
30
+ }
31
+ });
32
+ return new Promise((resolve, reject) => {
33
+ child.once('error', (error) => {
34
+ session.end().then(() => reject(error), reject);
35
+ });
36
+ child.once('exit', (code, signal) => {
37
+ session.end().then(() => {
38
+ if (signal) {
39
+ resolve(1);
40
+ return;
41
+ }
42
+ resolve(code ?? 0);
43
+ }, reject);
44
+ });
45
+ });
46
+ }
47
+ export async function shellCommand(_args, _context) {
48
+ return startActivatedShell();
49
+ }
50
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACpC,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC;AACxC,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvI,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE;QAC3C,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACvC;KACF,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAClC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtB,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,CAAC,CAAC,CAAC;oBACX,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACrB,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAe,EAAE,QAAoB;IACtE,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC"}
package/dist/ssh.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import type { RouteResult } from './daemon/router.ts';
2
+ export type SshTarget = {
3
+ user?: string;
4
+ host: string;
5
+ port: number;
6
+ original: string;
7
+ };
8
+ export type SshCommandPlan = {
9
+ executable: string;
10
+ args: string[];
11
+ route: RouteResult;
12
+ };
13
+ export declare class SshCommandError extends Error {
14
+ code: string;
15
+ constructor(code: string, message: string);
16
+ }
17
+ export declare function runSsh(argv: string[]): Promise<number>;
18
+ export declare function buildSshCommandPlan(argv: string[]): Promise<SshCommandPlan>;
19
+ export declare function parseSshTarget(argv: string[]): SshTarget;
package/dist/ssh.js ADDED
@@ -0,0 +1,83 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { ensureDaemon, readConfig, readState } from "./daemon/lifecycle.js";
3
+ import { resolveRoute } from "./daemon/router.js";
4
+ export class SshCommandError extends Error {
5
+ code;
6
+ constructor(code, message) {
7
+ super(message);
8
+ this.code = code;
9
+ }
10
+ }
11
+ export async function runSsh(argv) {
12
+ const plan = await buildSshCommandPlan(argv);
13
+ return await spawnSsh(plan.executable, plan.args);
14
+ }
15
+ export async function buildSshCommandPlan(argv) {
16
+ const target = parseSshTarget(argv);
17
+ const { metadata } = await ensureDaemon();
18
+ const [config, state] = await Promise.all([readConfig(), readState()]);
19
+ const route = resolveRoute({ config, state, target: `ssh://${target.host}:${target.port}`, protocol: 'ssh' });
20
+ const args = ['-p', String(target.port)];
21
+ if (route.mode === 'proxy') {
22
+ args.push('-o', `ProxyCommand=${proxyCommand(metadata.bindings.host, metadata.bindings.httpPort)}`);
23
+ }
24
+ args.push(target.original);
25
+ return {
26
+ executable: 'ssh',
27
+ args,
28
+ route
29
+ };
30
+ }
31
+ export function parseSshTarget(argv) {
32
+ let port = 22;
33
+ let target = '';
34
+ for (let index = 0; index < argv.length; index += 1) {
35
+ const value = argv[index];
36
+ if (value === '-p') {
37
+ port = Number(argv[index + 1]);
38
+ index += 1;
39
+ }
40
+ else if (!target) {
41
+ target = value;
42
+ }
43
+ else {
44
+ throw new SshCommandError('INVALID_TARGET', 'onep ssh accepts one SSH target');
45
+ }
46
+ }
47
+ if (!target || !Number.isInteger(port) || port < 1 || port > 65535) {
48
+ throw new SshCommandError('INVALID_TARGET', 'Invalid SSH target or port');
49
+ }
50
+ const at = target.lastIndexOf('@');
51
+ const user = at > 0 ? target.slice(0, at) : undefined;
52
+ const host = (at > 0 ? target.slice(at + 1) : target).toLowerCase();
53
+ if (!host) {
54
+ throw new SshCommandError('INVALID_TARGET', 'Invalid SSH host');
55
+ }
56
+ return { user, host, port, original: target };
57
+ }
58
+ function proxyCommand(proxyHost, proxyPort) {
59
+ const helper = [
60
+ "const net=require('node:net')",
61
+ 'const [host,port,proxyHost,proxyPort]=process.argv.slice(1)',
62
+ 'const socket=net.connect(Number(proxyPort),proxyHost,()=>socket.write(`CONNECT ${host}:${port} HTTP/1.1\\r\\nHost: ${host}:${port}\\r\\n\\r\\n`))',
63
+ "let buffer=''",
64
+ "socket.on('data',(chunk)=>{if(buffer!==null){buffer+=chunk.toString('latin1');const index=buffer.indexOf('\\r\\n\\r\\n');if(index>=0){if(!/^HTTP\\/1\\.[01] 2\\d\\d/.test(buffer))process.exit(1);const rest=Buffer.from(buffer.slice(index+4),'latin1');if(rest.length)process.stdout.write(rest);buffer=null;socket.pipe(process.stdout);process.stdin.pipe(socket)}}else process.stdout.write(chunk)})",
65
+ "socket.on('error',()=>process.exit(1))"
66
+ ].join(';');
67
+ return `${shellQuote(process.execPath)} -e ${JSON.stringify(helper)} %h %p ${proxyHost} ${proxyPort}`;
68
+ }
69
+ function shellQuote(value) {
70
+ return `'${value.replace(/'/g, "'\\''")}'`;
71
+ }
72
+ async function spawnSsh(executable, args) {
73
+ const child = spawn(executable, args, { stdio: 'inherit' });
74
+ return await new Promise((resolve, reject) => {
75
+ child.once('error', (error) => {
76
+ reject(new SshCommandError(error.code === 'ENOENT' ? 'COMMAND_NOT_FOUND' : 'SSH_FAILED', error.message));
77
+ });
78
+ child.once('exit', (code, signal) => {
79
+ resolve(signal ? 1 : code ?? 1);
80
+ });
81
+ });
82
+ }
83
+ //# sourceMappingURL=ssh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}