@xrkseek/harness 0.7.4 → 0.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/@xrkseek/checkpoint/dist/store.d.ts +50 -0
- package/node_modules/@xrkseek/checkpoint/dist/store.d.ts.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/store.js +240 -16
- package/node_modules/@xrkseek/checkpoint/dist/store.js.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/types.d.ts +18 -0
- package/node_modules/@xrkseek/checkpoint/dist/types.d.ts.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/types.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/server-face/dist/agent-roster-store.d.ts +18 -3
- package/node_modules/@xrkseek/server-face/dist/agent-roster-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js +128 -7
- package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/context.d.ts +7 -6
- package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/catalog.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js +5 -2
- package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/remotes.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/remotes.js +33 -8
- package/node_modules/@xrkseek/server-face/dist/handlers/remotes.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js +19 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/subagent.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/subagent.js +4 -17
- package/node_modules/@xrkseek/server-face/dist/handlers/subagent.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js +5 -6
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/presence-dressing.d.ts +3 -3
- package/node_modules/@xrkseek/server-face/dist/presence-dressing.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/presence-dressing.js +70 -3
- package/node_modules/@xrkseek/server-face/dist/presence-dressing.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.js +29 -6
- package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/seat-channel.d.ts +9 -0
- package/node_modules/@xrkseek/server-face/dist/seat-channel.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/seat-channel.js +11 -0
- package/node_modules/@xrkseek/server-face/dist/seat-channel.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts +2 -0
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-status.js +4 -2
- package/node_modules/@xrkseek/server-face/dist/session-status.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-document.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-document.js +5 -1
- package/node_modules/@xrkseek/server-face/dist/settings-document.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-checkpoint.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-checkpoint.js +16 -3
- package/node_modules/@xrkseek/server-face/dist/workspace-checkpoint.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +31 -1
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts +14 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-credentials-bridge.d.ts +6 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-credentials-bridge.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-credentials-bridge.js +18 -10
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-credentials-bridge.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.d.ts +6 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.js +16 -9
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts +3 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js +3 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.js +66 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-gate.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-gate.js +11 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-gate.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-lan-share.d.ts +37 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-lan-share.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-lan-share.js +153 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-lan-share.js.map +1 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-local-gateway.d.ts +5 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-local-gateway.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-local-gateway.js +7 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-local-gateway.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.d.ts +19 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.js +167 -43
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/our-free-model-host.d.ts +24 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/our-free-model-host.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/our-free-model-host.js +76 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/our-free-model-host.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/shared-registry.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/shared-registry.js +7 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/shared-registry.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/skin-center.d.ts +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.js +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/mobile-gate-kit.d.ts +28 -5
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/mobile-gate-kit.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/mobile-gate-kit.js +63 -10
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/mobile-gate-kit.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire-normalize.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire-normalize.js +13 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire-normalize.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-access-gate.js","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-gate.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,GAEtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AAEzC,SAAS,iBAAiB,CAAC,OAA4B;IACrD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,OAA4B;IAO5B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE,mBAAmB,CACnC,QAAQ,EACR,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAC1C;QACD,SAAS,EAAE,qBAAqB,CAC9B,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,UAAU,CACpB;QACD,SAAS,EAAE,qBAAqB,CAC9B,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,UAAU,CACpB;KACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CACnC,GAAoB,EACpB,OAA4B;IAE5B,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,sBAAsB,CACvE,GAAG,EACH,OAAO,CACR,CAAC;IACF,OAAO,gBAAgB,IAAI,SAAS,IAAI,SAAS,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAA4B;IAE5B,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;QAC1D,OAAO,qBAAqB,CAC1B,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAqB,EAC1C,OAAO,CACR,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAoB,EACpB,QAAgB,EAChB,OAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1E,OAAO,kBAAkB,CACvB,QAAQ,EACR,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,EACrD;QACE,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,cAAc,EAAE,QAAQ,CAAC,cAAc,KAAK,KAAK;QACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACvD,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC;KACR,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAoB,EACpB,GAAmB,EACnB,QAAgB,EAChB,OAA4B;IAE5B,OAAO,uBAAuB,CAC5B,GAAG,EACH,GAAG,EACH,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,6BAA6B,CAC3C,OAA4B;IAE5B,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxD,OAAO,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,6BAA6B,CAC3C,OAA4B;IAE5B,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxD,OAAO,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"mobile-access-gate.js","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-gate.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,GAEtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AAEzC,SAAS,0BAA0B,CAAC,GAAoB;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA4B;IACrD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,OAA4B;IAO5B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE,mBAAmB,CACnC,QAAQ,EACR,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAC1C;QACD,SAAS,EAAE,qBAAqB,CAC9B,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,UAAU,CACpB;QACD,SAAS,EAAE,qBAAqB,CAC9B,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,UAAU,CACpB;KACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CACnC,GAAoB,EACpB,OAA4B;IAE5B,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,sBAAsB,CACvE,GAAG,EACH,OAAO,CACR,CAAC;IACF,OAAO,gBAAgB,IAAI,SAAS,IAAI,SAAS,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAA4B;IAE5B,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;QAC1D,OAAO,qBAAqB,CAC1B,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAqB,EAC1C,OAAO,CACR,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAoB,EACpB,QAAgB,EAChB,OAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,KAAK,IAAI,CAAC;IACtD,OAAO,kBAAkB,CACvB,QAAQ,EACR,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,EACrD;QACE,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,cAAc,EAAE,QAAQ,CAAC,cAAc,KAAK,KAAK;QACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACvD,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,YAAY,IAAI,0BAA0B,CAAC,GAAG,CAAC;YACjD,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAa,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC;KACR,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAoB,EACpB,GAAmB,EACnB,QAAgB,EAChB,OAA4B;IAE5B,OAAO,uBAAuB,CAC5B,GAAG,EACH,GAAG,EACH,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,6BAA6B,CAC3C,OAA4B;IAE5B,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxD,OAAO,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,6BAA6B,CAC3C,OAA4B;IAE5B,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxD,OAAO,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preferred share listen ports. Host already owns loopback 8787 on Desktop,
|
|
3
|
+
* so 0.0.0.0:8787 often fails — fall through. Env `XRK_DESKTOP_SHARE_PORT`
|
|
4
|
+
* overrides the first candidate when set to a positive int.
|
|
5
|
+
*/
|
|
6
|
+
export declare function desktopSharePortCandidates(): readonly number[];
|
|
7
|
+
/** Non-internal IPv4 addresses suitable for phone URL display. */
|
|
8
|
+
export declare function listLanIPv4Addresses(): readonly string[];
|
|
9
|
+
/** VirtualBox / VMware host-only — phones on real Wi‑Fi cannot reach these. */
|
|
10
|
+
export declare function isHostOnlyLanIPv4(ip: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Prefer private Wi‑Fi / Ethernet; skip host-only NICs when any better IP exists.
|
|
13
|
+
*/
|
|
14
|
+
export declare function pickPreferredLanIPv4(addresses?: readonly string[]): string | undefined;
|
|
15
|
+
export declare function stopLanShareGateway(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Bind LAN share proxy → loopback Host. Returns public origin for phones.
|
|
18
|
+
* Omits `publicOrigin` so the phone `Host` header drives X-Forwarded-Host.
|
|
19
|
+
*/
|
|
20
|
+
export declare function startLanShareGateway(options: {
|
|
21
|
+
readonly upstreamOrigin: string;
|
|
22
|
+
readonly listenPort?: number;
|
|
23
|
+
readonly lanIp?: string;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
readonly origin: string;
|
|
26
|
+
/** Same share listen via loopback — for this PC / tunnel tools. */
|
|
27
|
+
readonly localOrigin: string;
|
|
28
|
+
readonly port: number;
|
|
29
|
+
readonly lanIp: string;
|
|
30
|
+
readonly lanHosts: readonly string[];
|
|
31
|
+
}>;
|
|
32
|
+
export declare function lanShareGatewayAddress(): {
|
|
33
|
+
host: string;
|
|
34
|
+
port: number;
|
|
35
|
+
origin?: string;
|
|
36
|
+
} | undefined;
|
|
37
|
+
//# sourceMappingURL=mobile-access-lan-share.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-access-lan-share.d.ts","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-lan-share.ts"],"names":[],"mappings":"AAiBA;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,SAAS,MAAM,EAAE,CAU9D;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,IAAI,SAAS,MAAM,EAAE,CAaxD;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAWrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,GAAE,SAAS,MAAM,EAA2B,GACpD,MAAM,GAAG,SAAS,CAMpB;AAcD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC,CAuDD;AAED,wBAAgB,sBAAsB,IAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,SAAS,CAEZ"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Desktop temporary share: `0.0.0.0` reverse proxy in front of the loopback
|
|
3
|
+
* Desktop Host — Wi‑Fi phones and (optionally) tunnel tools that target the
|
|
4
|
+
* share listen. Process-scoped; Host dispose / toggle-off closes it.
|
|
5
|
+
*
|
|
6
|
+
* Tunnel tip: point 樱花 / frp / cpolar at `localOrigin` (share listen on
|
|
7
|
+
* 127.0.0.1), not a hard-coded 8787. Share ON arms the PIN gate for
|
|
8
|
+
* non-loopback / X-Forwarded-Host; share OFF closes remote class.
|
|
9
|
+
*/
|
|
10
|
+
import { networkInterfaces } from "node:os";
|
|
11
|
+
import { startLocalProxyGateway, } from "./mobile-access-local-gateway.js";
|
|
12
|
+
let liveGateway;
|
|
13
|
+
/**
|
|
14
|
+
* Preferred share listen ports. Host already owns loopback 8787 on Desktop,
|
|
15
|
+
* so 0.0.0.0:8787 often fails — fall through. Env `XRK_DESKTOP_SHARE_PORT`
|
|
16
|
+
* overrides the first candidate when set to a positive int.
|
|
17
|
+
*/
|
|
18
|
+
export function desktopSharePortCandidates() {
|
|
19
|
+
const fromEnv = Number(String(process.env.XRK_DESKTOP_SHARE_PORT ?? "").trim());
|
|
20
|
+
if (Number.isFinite(fromEnv) && fromEnv > 0 && fromEnv < 65536) {
|
|
21
|
+
return [Math.floor(fromEnv), 8787, 18787];
|
|
22
|
+
}
|
|
23
|
+
// 8787 first for tunnel recipes that expect the familiar product port;
|
|
24
|
+
// 18787 when Host already holds loopback 8787.
|
|
25
|
+
return [8787, 18787];
|
|
26
|
+
}
|
|
27
|
+
/** Non-internal IPv4 addresses suitable for phone URL display. */
|
|
28
|
+
export function listLanIPv4Addresses() {
|
|
29
|
+
const out = [];
|
|
30
|
+
const nets = networkInterfaces();
|
|
31
|
+
for (const entries of Object.values(nets)) {
|
|
32
|
+
if (!entries)
|
|
33
|
+
continue;
|
|
34
|
+
for (const net of entries) {
|
|
35
|
+
if (net.family !== "IPv4" || net.internal)
|
|
36
|
+
continue;
|
|
37
|
+
const ip = net.address.trim();
|
|
38
|
+
if (!ip || out.includes(ip))
|
|
39
|
+
continue;
|
|
40
|
+
out.push(ip);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
/** VirtualBox / VMware host-only — phones on real Wi‑Fi cannot reach these. */
|
|
46
|
+
export function isHostOnlyLanIPv4(ip) {
|
|
47
|
+
const parts = ip.split(".");
|
|
48
|
+
if (parts.length !== 4)
|
|
49
|
+
return false;
|
|
50
|
+
const a = Number(parts[0]);
|
|
51
|
+
const b = Number(parts[1]);
|
|
52
|
+
const c = Number(parts[2]);
|
|
53
|
+
// VirtualBox host-only default, VMware host-only common ranges.
|
|
54
|
+
if (a === 192 && b === 168 && (c === 56 || c === 57 || c === 254)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Prefer private Wi‑Fi / Ethernet; skip host-only NICs when any better IP exists.
|
|
61
|
+
*/
|
|
62
|
+
export function pickPreferredLanIPv4(addresses = listLanIPv4Addresses()) {
|
|
63
|
+
if (addresses.length === 0)
|
|
64
|
+
return undefined;
|
|
65
|
+
const usable = addresses.filter((ip) => !isHostOnlyLanIPv4(ip));
|
|
66
|
+
const pool = usable.length > 0 ? usable : addresses;
|
|
67
|
+
const scored = [...pool].sort((a, b) => scoreLanIp(b) - scoreLanIp(a));
|
|
68
|
+
return scored[0];
|
|
69
|
+
}
|
|
70
|
+
function scoreLanIp(ip) {
|
|
71
|
+
const parts = ip.split(".");
|
|
72
|
+
if (parts.length !== 4)
|
|
73
|
+
return 0;
|
|
74
|
+
const a = Number(parts[0]);
|
|
75
|
+
const b = Number(parts[1]);
|
|
76
|
+
if (a === 10)
|
|
77
|
+
return 40;
|
|
78
|
+
if (a === 192 && b === 168)
|
|
79
|
+
return isHostOnlyLanIPv4(ip) ? 5 : 35;
|
|
80
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
81
|
+
return 30;
|
|
82
|
+
if (a === 169 && b === 254)
|
|
83
|
+
return 5;
|
|
84
|
+
return 10;
|
|
85
|
+
}
|
|
86
|
+
export async function stopLanShareGateway() {
|
|
87
|
+
const gw = liveGateway;
|
|
88
|
+
liveGateway = undefined;
|
|
89
|
+
if (gw)
|
|
90
|
+
await gw.close();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Bind LAN share proxy → loopback Host. Returns public origin for phones.
|
|
94
|
+
* Omits `publicOrigin` so the phone `Host` header drives X-Forwarded-Host.
|
|
95
|
+
*/
|
|
96
|
+
export async function startLanShareGateway(options) {
|
|
97
|
+
const upstream = options.upstreamOrigin.trim().replace(/\/$/, "");
|
|
98
|
+
if (!upstream) {
|
|
99
|
+
throw new Error("lan_share_missing_upstream");
|
|
100
|
+
}
|
|
101
|
+
const lanHosts = listLanIPv4Addresses();
|
|
102
|
+
const preferred = pickPreferredLanIPv4(lanHosts);
|
|
103
|
+
const requested = options.lanIp?.trim() ?? "";
|
|
104
|
+
// Ignore a host-only NIC when a real Wi‑Fi / Ethernet address exists.
|
|
105
|
+
const lanIp = (requested &&
|
|
106
|
+
lanHosts.includes(requested) &&
|
|
107
|
+
(!isHostOnlyLanIPv4(requested) || preferred === undefined)
|
|
108
|
+
? requested
|
|
109
|
+
: undefined) ||
|
|
110
|
+
preferred ||
|
|
111
|
+
lanHosts[0];
|
|
112
|
+
if (!lanIp) {
|
|
113
|
+
throw new Error("lan_share_no_lan_ip");
|
|
114
|
+
}
|
|
115
|
+
await stopLanShareGateway();
|
|
116
|
+
const ports = options.listenPort !== undefined
|
|
117
|
+
? [options.listenPort]
|
|
118
|
+
: [...desktopSharePortCandidates(), 0];
|
|
119
|
+
let lastErr;
|
|
120
|
+
let gateway;
|
|
121
|
+
for (const listenPort of ports) {
|
|
122
|
+
try {
|
|
123
|
+
gateway = await startLocalProxyGateway({
|
|
124
|
+
upstreamUrl: upstream,
|
|
125
|
+
listenHost: "0.0.0.0",
|
|
126
|
+
...(listenPort > 0 ? { listenPort } : {}),
|
|
127
|
+
});
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
lastErr = err;
|
|
132
|
+
const code = err && typeof err === "object" && "code" in err
|
|
133
|
+
? String(err.code)
|
|
134
|
+
: "";
|
|
135
|
+
if (code !== "EADDRINUSE" && code !== "EACCES")
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!gateway) {
|
|
140
|
+
throw lastErr instanceof Error
|
|
141
|
+
? lastErr
|
|
142
|
+
: new Error("lan_share_listen_failed");
|
|
143
|
+
}
|
|
144
|
+
liveGateway = gateway;
|
|
145
|
+
const { port } = gateway.address();
|
|
146
|
+
const origin = `http://${lanIp}:${String(port)}`;
|
|
147
|
+
const localOrigin = `http://127.0.0.1:${String(port)}`;
|
|
148
|
+
return { origin, port, lanIp, lanHosts, localOrigin };
|
|
149
|
+
}
|
|
150
|
+
export function lanShareGatewayAddress() {
|
|
151
|
+
return liveGateway?.address();
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=mobile-access-lan-share.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-access-lan-share.js","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-lan-share.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,sBAAsB,GAEvB,MAAM,kCAAkC,CAAC;AAE1C,IAAI,WAA2C,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,OAAO,GAAG,MAAM,CACpB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CACxD,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,uEAAuE;IACvE,+CAA+C;IAC/C,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ;gBAAE,SAAS;YACpD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,SAAS;YACtC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,gEAAgE;IAChE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAA+B,oBAAoB,EAAE;IAErD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,EAAU;IAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,WAAW,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAI1C;IAQC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9C,sEAAsE;IACtE,MAAM,KAAK,GACT,CAAC,SAAS;QACV,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5B,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC;QACxD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC;QACd,SAAS;QACT,QAAQ,CAAC,CAAC,CAAC,CAAC;IACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,mBAAmB,EAAE,CAAC;IAC5B,MAAM,KAAK,GACT,OAAO,CAAC,UAAU,KAAK,SAAS;QAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACtB,CAAC,CAAC,CAAC,GAAG,0BAA0B,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3C,IAAI,OAAgB,CAAC;IACrB,IAAI,OAAuC,CAAC;IAC5C,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,sBAAsB,CAAC;gBACrC,WAAW,EAAE,QAAQ;gBACrB,UAAU,EAAE,SAAS;gBACrB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,CAAC;YACd,MAAM,IAAI,GACR,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG;gBAC7C,CAAC,CAAC,MAAM,CAAE,GAA0B,CAAC,IAAI,CAAC;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,YAAY,KAAK;YAC5B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;IACD,WAAW,GAAG,OAAO,CAAC;IACtB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG,oBAAoB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACvD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,sBAAsB;IAGpC,OAAO,WAAW,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -13,6 +13,11 @@ export interface LocalMobileGateway {
|
|
|
13
13
|
export declare function startLocalProxyGateway(options: {
|
|
14
14
|
readonly upstreamUrl: string;
|
|
15
15
|
readonly listenPort?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Bind address. Default `127.0.0.1` (tunnel sidecar). Desktop LAN share
|
|
18
|
+
* uses `0.0.0.0` so phones on Wi‑Fi can reach the proxy.
|
|
19
|
+
*/
|
|
20
|
+
readonly listenHost?: string;
|
|
16
21
|
readonly publicOrigin?: string;
|
|
17
22
|
}): Promise<LocalMobileGateway>;
|
|
18
23
|
export declare function reserveLoopbackPort(): Promise<{
|
package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-local-gateway.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-access-local-gateway.d.ts","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-local-gateway.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mobile-access-local-gateway.d.ts","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-local-gateway.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,eAAe,EAAE,MAAM;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAyHD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkE9B;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC,CAuBD"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { createServer, request as httpRequest, } from "node:http";
|
|
6
6
|
import { URL } from "node:url";
|
|
7
|
+
import { DESKTOP_SHARE_PROXY_HEADER, DESKTOP_SHELL_MARK_HEADER, } from "./underlying/mobile-gate-kit.js";
|
|
7
8
|
function upstreamPort(upstream) {
|
|
8
9
|
if (upstream.port)
|
|
9
10
|
return Number(upstream.port);
|
|
@@ -29,6 +30,9 @@ function buildProxyHeaders(req, upstream, publicOrigin) {
|
|
|
29
30
|
...req.headers,
|
|
30
31
|
host: upstream.host,
|
|
31
32
|
};
|
|
33
|
+
// Never let a phone / tunnel forge the Electron shell mark through the share.
|
|
34
|
+
delete headers[DESKTOP_SHELL_MARK_HEADER];
|
|
35
|
+
headers[DESKTOP_SHARE_PROXY_HEADER] = "1";
|
|
32
36
|
const clientHost = publicOrigin !== undefined
|
|
33
37
|
? (() => {
|
|
34
38
|
try {
|
|
@@ -99,6 +103,7 @@ function forwardUpgrade(req, socket, head, upstream, publicOrigin) {
|
|
|
99
103
|
export async function startLocalProxyGateway(options) {
|
|
100
104
|
const upstream = new URL(options.upstreamUrl);
|
|
101
105
|
let listenPort = options.listenPort ?? 0;
|
|
106
|
+
const listenHost = (options.listenHost ?? "127.0.0.1").trim() || "127.0.0.1";
|
|
102
107
|
const publicOrigin = options.publicOrigin;
|
|
103
108
|
const proxy = (clientReq, clientRes) => {
|
|
104
109
|
const targetPath = clientReq.url?.startsWith("/")
|
|
@@ -132,7 +137,7 @@ export async function startLocalProxyGateway(options) {
|
|
|
132
137
|
});
|
|
133
138
|
await new Promise((resolve, reject) => {
|
|
134
139
|
server.once("error", reject);
|
|
135
|
-
server.listen(listenPort,
|
|
140
|
+
server.listen(listenPort, listenHost, () => {
|
|
136
141
|
server.off("error", reject);
|
|
137
142
|
resolve();
|
|
138
143
|
});
|
|
@@ -145,7 +150,7 @@ export async function startLocalProxyGateway(options) {
|
|
|
145
150
|
listenPort = addr.port;
|
|
146
151
|
return {
|
|
147
152
|
address: () => ({
|
|
148
|
-
host:
|
|
153
|
+
host: listenHost,
|
|
149
154
|
port: listenPort,
|
|
150
155
|
...(publicOrigin ? { origin: publicOrigin } : {}),
|
|
151
156
|
}),
|
package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access-local-gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-access-local-gateway.js","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-local-gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,YAAY,EACZ,OAAO,IAAI,WAAW,GAGvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"mobile-access-local-gateway.js","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access-local-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,18 @@ export interface MobileAccessOptions {
|
|
|
22
22
|
* `settings.yaml` under {@link xrkHome}, else `system`.
|
|
23
23
|
*/
|
|
24
24
|
readonly getThemePreference?: () => GateThemePreference;
|
|
25
|
+
/**
|
|
26
|
+
* Desktop-only: Settings「局域网访问」may start a `0.0.0.0` share gateway.
|
|
27
|
+
* CLI / ordinary `xrkh web` leave this unset.
|
|
28
|
+
*/
|
|
29
|
+
readonly lanShareEnabled?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Loopback Face origin for the share gateway upstream
|
|
32
|
+
* (e.g. `http://127.0.0.1:43129`). Required when {@link lanShareEnabled}.
|
|
33
|
+
*/
|
|
34
|
+
readonly resolveLoopbackOrigin?: () => string;
|
|
35
|
+
/** Optional preferred LAN IPv4 for the phone URL (multi-NIC). */
|
|
36
|
+
readonly resolveLanShareIp?: () => string | undefined;
|
|
25
37
|
}
|
|
26
38
|
/**
|
|
27
39
|
* Best-effort parse of `ui-theme.preference` (parity with Desktop splash /
|
|
@@ -70,6 +82,13 @@ export declare function armAccessGateForListen(options: MobileAccessOptions, bin
|
|
|
70
82
|
};
|
|
71
83
|
/** Prefer LAN IPv4 when the Host header is loopback (phone cannot reach 127.0.0.1). */
|
|
72
84
|
export declare function requestLanOrigin(req: IncomingMessage): string;
|
|
85
|
+
/**
|
|
86
|
+
* Desktop boot: clear persisted "running" so LAN share stays process-scoped
|
|
87
|
+
* (toggle off when Desktop quits; do not auto-reopen a dead gateway).
|
|
88
|
+
*/
|
|
89
|
+
export declare function resetDesktopLanShareOnBoot(options: MobileAccessOptions): void;
|
|
90
|
+
/** Host dispose — drop the share listen socket. */
|
|
91
|
+
export declare function disposeDesktopLanShare(): Promise<void>;
|
|
73
92
|
export declare function handleMobileAccessHttp(req: IncomingMessage, res: ServerResponse, pathname: string, options: MobileAccessOptions): Promise<boolean>;
|
|
74
93
|
export declare function isMobileAccessPath(pathname: string): boolean;
|
|
75
94
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-access.d.ts","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAQjE,OAAO,EAoBL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"mobile-access.d.ts","sourceRoot":"","sources":["../../src/dsh-compat/mobile-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,24 +8,25 @@ import { httpMethod, isMutatingMethod, parseJsonBody } from "./underlying/http-k
|
|
|
8
8
|
import { buildPinPageHtml, DEVICE_COOKIE, LAN_PIN_COOKIE, LAN_PIN_PAGE_JS, LOGIN_PAGE_HTML, LOGIN_PAGE_JS, mintPairingWindow, pairDevice, PAIR_PAGE_HTML, PAIR_PAGE_JS, parseCookieHeader, pruneMobileAuth, publicDevice, renewSession, SESSION_COOKIE, setAccessPinCookie, setMobileSessionCookies, WAN_PIN_COOKIE, WAN_PIN_PAGE_JS, } from "./mobile-access-auth.js";
|
|
9
9
|
import { getMobileRemoteRuntime, } from "./mobile-access-remote-runtime.js";
|
|
10
10
|
import { qrSvgForText } from "./pocket-qrcode.js";
|
|
11
|
+
import { isHostOnlyLanIPv4, lanShareGatewayAddress, listLanIPv4Addresses, pickPreferredLanIPv4, startLanShareGateway, stopLanShareGateway, } from "./mobile-access-lan-share.js";
|
|
11
12
|
/**
|
|
12
13
|
* Product-shell mobile seam for `/mobile-access/custom.css`.
|
|
13
14
|
* Clears session header chrome that collides with dsh-mobile / pocket nav.
|
|
14
15
|
*/
|
|
15
|
-
export const XRK_MOBILE_SHELL_CSS = `/* XRK shell mobile seam */
|
|
16
|
-
@media (max-width: 900px) {
|
|
17
|
-
/* Hide header Status twin (AppFrame phoneChrome owns Overview). Keep
|
|
18
|
-
PresenceDock in utilities — do not blank the whole utilities seat. */
|
|
19
|
-
[data-slot="conversation.session.header.actions"] {
|
|
20
|
-
display: none !important;
|
|
21
|
-
}
|
|
22
|
-
[data-slot="conversation.session.header.utilities"] > :not([data-presence-dock]) {
|
|
23
|
-
display: none !important;
|
|
24
|
-
}
|
|
25
|
-
[role="tablist"] {
|
|
26
|
-
padding-inline: 44px;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
16
|
+
export const XRK_MOBILE_SHELL_CSS = `/* XRK shell mobile seam */
|
|
17
|
+
@media (max-width: 900px) {
|
|
18
|
+
/* Hide header Status twin (AppFrame phoneChrome owns Overview). Keep
|
|
19
|
+
PresenceDock in utilities — do not blank the whole utilities seat. */
|
|
20
|
+
[data-slot="conversation.session.header.actions"] {
|
|
21
|
+
display: none !important;
|
|
22
|
+
}
|
|
23
|
+
[data-slot="conversation.session.header.utilities"] > :not([data-presence-dock]) {
|
|
24
|
+
display: none !important;
|
|
25
|
+
}
|
|
26
|
+
[role="tablist"] {
|
|
27
|
+
padding-inline: 44px;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
29
30
|
`;
|
|
30
31
|
/** Inject shell seam stylesheet into product index (works without dsh-mobile fetch). */
|
|
31
32
|
export function injectMobileAccessShellIntoHtml(html) {
|
|
@@ -250,16 +251,8 @@ function mintToken() {
|
|
|
250
251
|
return randomBytes(24).toString("base64url");
|
|
251
252
|
}
|
|
252
253
|
function firstLanIPv4() {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
if (!entries)
|
|
256
|
-
continue;
|
|
257
|
-
for (const net of entries) {
|
|
258
|
-
if (net.family === "IPv4" && !net.internal)
|
|
259
|
-
return net.address;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return undefined;
|
|
254
|
+
// Prefer real Wi‑Fi / Ethernet; skip VirtualBox host-only (192.168.56.x).
|
|
255
|
+
return pickPreferredLanIPv4(listLanIPv4Addresses());
|
|
263
256
|
}
|
|
264
257
|
function requestOrigin(req) {
|
|
265
258
|
const host = req.headers.host?.trim();
|
|
@@ -321,13 +314,75 @@ async function prepareRemoteRuntime(options, state, syncEnabled = false) {
|
|
|
321
314
|
}
|
|
322
315
|
return { runtime, state: withId };
|
|
323
316
|
}
|
|
324
|
-
function lanPayload(state) {
|
|
317
|
+
function lanPayload(state, options) {
|
|
318
|
+
const desktopLanShare = options?.lanShareEnabled === true;
|
|
319
|
+
const shareAddr = desktopLanShare ? lanShareGatewayAddress() : undefined;
|
|
320
|
+
const loopback = options?.resolveLoopbackOrigin?.()?.trim() ?? "";
|
|
321
|
+
const origin = state.running && state.origin ? state.origin : undefined;
|
|
322
|
+
const sharePort = state.running && shareAddr ? shareAddr.port : undefined;
|
|
323
|
+
const localOrigin = sharePort !== undefined
|
|
324
|
+
? `http://127.0.0.1:${String(sharePort)}`
|
|
325
|
+
: undefined;
|
|
326
|
+
const qrSvg = origin !== undefined
|
|
327
|
+
? (() => {
|
|
328
|
+
try {
|
|
329
|
+
return qrSvgForText(origin, "share");
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
return "";
|
|
333
|
+
}
|
|
334
|
+
})()
|
|
335
|
+
: "";
|
|
325
336
|
return {
|
|
326
337
|
running: state.running,
|
|
327
|
-
|
|
338
|
+
desktopLanShare,
|
|
339
|
+
...(origin ? { origin } : {}),
|
|
340
|
+
...(localOrigin ? { localOrigin } : {}),
|
|
341
|
+
// Desktop share uses the WAN PIN plane for both Wi‑Fi and tunnel visitors.
|
|
342
|
+
...(state.running && state.wanToken ? { pin: state.wanToken } : {}),
|
|
343
|
+
...(state.running && state.lanToken ? { lanPin: state.lanToken } : {}),
|
|
344
|
+
...(state.running && state.wanToken ? { wanPin: state.wanToken } : {}),
|
|
345
|
+
...(qrSvg ? { qrSvg } : {}),
|
|
346
|
+
...(desktopLanShare
|
|
347
|
+
? {
|
|
348
|
+
lanHosts: listLanIPv4Addresses(),
|
|
349
|
+
...(state.lanIpOverride ? { lanIp: state.lanIpOverride } : {}),
|
|
350
|
+
...(sharePort !== undefined ? { sharePort } : {}),
|
|
351
|
+
...(loopback ? { hostLoopbackOrigin: loopback } : {}),
|
|
352
|
+
}
|
|
353
|
+
: {}),
|
|
328
354
|
extensions: { loaded: 0, failed: 0 },
|
|
329
355
|
};
|
|
330
356
|
}
|
|
357
|
+
/**
|
|
358
|
+
* Desktop boot: clear persisted "running" so LAN share stays process-scoped
|
|
359
|
+
* (toggle off when Desktop quits; do not auto-reopen a dead gateway).
|
|
360
|
+
*/
|
|
361
|
+
export function resetDesktopLanShareOnBoot(options) {
|
|
362
|
+
if (options.lanShareEnabled !== true)
|
|
363
|
+
return;
|
|
364
|
+
void stopLanShareGateway();
|
|
365
|
+
const state = loadState(options);
|
|
366
|
+
// Drop host-only overrides (VirtualBox 192.168.56.x) so the next share
|
|
367
|
+
// pick can prefer a real Wi‑Fi address.
|
|
368
|
+
const dropHostOnly = state.lanIpOverride.trim() !== "" &&
|
|
369
|
+
isHostOnlyLanIPv4(state.lanIpOverride.trim());
|
|
370
|
+
if (!state.running && !state.origin && !dropHostOnly)
|
|
371
|
+
return;
|
|
372
|
+
saveState(options, {
|
|
373
|
+
...state,
|
|
374
|
+
running: false,
|
|
375
|
+
origin: "",
|
|
376
|
+
pairingToken: "",
|
|
377
|
+
pairingExpiresAt: 0,
|
|
378
|
+
appKey: "",
|
|
379
|
+
...(dropHostOnly ? { lanIpOverride: "" } : {}),
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
/** Host dispose — drop the share listen socket. */
|
|
383
|
+
export async function disposeDesktopLanShare() {
|
|
384
|
+
await stopLanShareGateway();
|
|
385
|
+
}
|
|
331
386
|
function openLanPairing(state, req, ttlMs) {
|
|
332
387
|
const opened = mintPairingWindow(typeof ttlMs === "number" && ttlMs >= 10_000 ? ttlMs : 300_000);
|
|
333
388
|
const withInstance = ensureInstanceId(state);
|
|
@@ -358,27 +413,96 @@ function openLanPairing(state, req, ttlMs) {
|
|
|
358
413
|
next,
|
|
359
414
|
};
|
|
360
415
|
}
|
|
361
|
-
async function setRunning(options, req, res, running) {
|
|
416
|
+
async function setRunning(options, req, res, running, body) {
|
|
362
417
|
let state = ensureInstanceId(loadState(options));
|
|
363
|
-
state = { ...state, running };
|
|
364
418
|
if (!state.csrf)
|
|
365
419
|
state.csrf = mintToken();
|
|
366
|
-
if (running) {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
state
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
state
|
|
377
|
-
state.
|
|
420
|
+
if (!running) {
|
|
421
|
+
await stopLanShareGateway();
|
|
422
|
+
state = {
|
|
423
|
+
...state,
|
|
424
|
+
running: false,
|
|
425
|
+
origin: "",
|
|
426
|
+
pairingToken: "",
|
|
427
|
+
pairingExpiresAt: 0,
|
|
428
|
+
appKey: "",
|
|
429
|
+
};
|
|
430
|
+
saveState(options, state);
|
|
431
|
+
setCsrfCookie(res, state.csrf);
|
|
432
|
+
sendJson(res, 200, lanPayload(state, options));
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
// Desktop LAN share: real 0.0.0.0 gateway in front of loopback Host.
|
|
436
|
+
if (options.lanShareEnabled === true) {
|
|
437
|
+
const upstream = options.resolveLoopbackOrigin?.()?.trim() ?? "";
|
|
438
|
+
if (!upstream) {
|
|
439
|
+
sendJson(res, 503, {
|
|
440
|
+
ok: false,
|
|
441
|
+
error: "lan_share_host_not_ready",
|
|
442
|
+
desktopLanShare: true,
|
|
443
|
+
});
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
try {
|
|
447
|
+
const fromBody = typeof body?.lanIp === "string" ? body.lanIp.trim() : "";
|
|
448
|
+
const fromHook = options.resolveLanShareIp?.()?.trim() ?? "";
|
|
449
|
+
// Do not reuse a stale host-only override (e.g. VirtualBox 192.168.56.x)
|
|
450
|
+
// when a real Wi‑Fi address is available.
|
|
451
|
+
const hosts = listLanIPv4Addresses();
|
|
452
|
+
const preferred = pickPreferredLanIPv4(hosts);
|
|
453
|
+
const fromStateRaw = state.lanIpOverride.trim();
|
|
454
|
+
const fromState = fromStateRaw &&
|
|
455
|
+
hosts.includes(fromStateRaw) &&
|
|
456
|
+
(!isHostOnlyLanIPv4(fromStateRaw) || preferred === undefined)
|
|
457
|
+
? fromStateRaw
|
|
458
|
+
: "";
|
|
459
|
+
const lanIp = fromBody || fromHook || fromState || undefined;
|
|
460
|
+
const started = await startLanShareGateway({
|
|
461
|
+
upstreamOrigin: upstream,
|
|
462
|
+
...(lanIp ? { lanIp } : {}),
|
|
463
|
+
});
|
|
464
|
+
// Fresh PIN every time share turns on (process-scoped temporary share).
|
|
465
|
+
const pin = mint8DigitPin();
|
|
466
|
+
state = {
|
|
467
|
+
...state,
|
|
468
|
+
running: true,
|
|
469
|
+
origin: started.origin,
|
|
470
|
+
lanIpOverride: started.lanIp,
|
|
471
|
+
lanToken: pin,
|
|
472
|
+
wanToken: pin,
|
|
473
|
+
};
|
|
474
|
+
saveState(options, state);
|
|
475
|
+
setCsrfCookie(res, state.csrf);
|
|
476
|
+
sendJson(res, 200, {
|
|
477
|
+
...lanPayload(state, options),
|
|
478
|
+
lanHosts: started.lanHosts,
|
|
479
|
+
lanIp: started.lanIp,
|
|
480
|
+
localOrigin: started.localOrigin,
|
|
481
|
+
sharePort: started.port,
|
|
482
|
+
});
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
catch (err) {
|
|
486
|
+
await stopLanShareGateway();
|
|
487
|
+
sendJson(res, 500, {
|
|
488
|
+
ok: false,
|
|
489
|
+
error: err instanceof Error ? err.message : String(err),
|
|
490
|
+
desktopLanShare: true,
|
|
491
|
+
});
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
378
494
|
}
|
|
495
|
+
// Legacy / CLI / community: flip state only (no extra listen).
|
|
496
|
+
state = {
|
|
497
|
+
...state,
|
|
498
|
+
running: true,
|
|
499
|
+
origin: requestLanOrigin(req),
|
|
500
|
+
lanToken: state.lanToken || mint8DigitPin(),
|
|
501
|
+
wanToken: state.wanToken || mint8DigitPin(),
|
|
502
|
+
};
|
|
379
503
|
saveState(options, state);
|
|
380
504
|
setCsrfCookie(res, state.csrf);
|
|
381
|
-
sendJson(res, 200, lanPayload(state));
|
|
505
|
+
sendJson(res, 200, lanPayload(state, options));
|
|
382
506
|
}
|
|
383
507
|
function sendHtml(res, body, contentType) {
|
|
384
508
|
res.writeHead(200, {
|
|
@@ -591,7 +715,7 @@ export async function handleMobileAccessHttp(req, res, pathname, options) {
|
|
|
591
715
|
if (state.running && state.csrf)
|
|
592
716
|
setCsrfCookie(res, state.csrf);
|
|
593
717
|
sendJson(res, 200, {
|
|
594
|
-
...lanPayload(state),
|
|
718
|
+
...lanPayload(state, options),
|
|
595
719
|
...(state.running && origin ? { origin } : {}),
|
|
596
720
|
});
|
|
597
721
|
return true;
|
|
@@ -599,7 +723,7 @@ export async function handleMobileAccessHttp(req, res, pathname, options) {
|
|
|
599
723
|
if (method === "POST" || method === "PUT") {
|
|
600
724
|
const body = await parseJsonBody(req);
|
|
601
725
|
const running = typeof body.running === "boolean" ? body.running : !state.running;
|
|
602
|
-
await setRunning(options, req, res, running);
|
|
726
|
+
await setRunning(options, req, res, running, body);
|
|
603
727
|
return true;
|
|
604
728
|
}
|
|
605
729
|
}
|