@artenx/dshb 0.0.5 → 0.1.1

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 (167) hide show
  1. package/README.md +18 -0
  2. package/cordis.patch.yml +9 -9
  3. package/lib/auth/credentials.d.ts +30 -0
  4. package/lib/auth/credentials.js +121 -0
  5. package/lib/auth/credentials.js.map +1 -0
  6. package/lib/auth/decorate-webserver.d.ts +7 -0
  7. package/lib/auth/decorate-webserver.js +75 -0
  8. package/lib/auth/decorate-webserver.js.map +1 -0
  9. package/lib/auth/gate.d.ts +14 -0
  10. package/lib/auth/gate.js +45 -0
  11. package/lib/auth/gate.js.map +1 -0
  12. package/lib/auth/index.d.ts +8 -0
  13. package/lib/auth/index.js +51 -0
  14. package/lib/auth/index.js.map +1 -0
  15. package/lib/auth/login-page.d.ts +5 -0
  16. package/lib/auth/login-page.js +87 -0
  17. package/lib/auth/login-page.js.map +1 -0
  18. package/lib/auth/loopback-compat.d.ts +6 -0
  19. package/lib/auth/loopback-compat.js +94 -0
  20. package/lib/auth/loopback-compat.js.map +1 -0
  21. package/lib/auth/loopback.d.ts +7 -0
  22. package/lib/auth/loopback.js +24 -0
  23. package/lib/auth/loopback.js.map +1 -0
  24. package/lib/auth/ratelimit.d.ts +11 -0
  25. package/lib/auth/ratelimit.js +37 -0
  26. package/lib/auth/ratelimit.js.map +1 -0
  27. package/lib/auth/routes.d.ts +8 -0
  28. package/lib/auth/routes.js +224 -0
  29. package/lib/auth/routes.js.map +1 -0
  30. package/lib/auth/session.d.ts +11 -0
  31. package/lib/auth/session.js +52 -0
  32. package/lib/auth/session.js.map +1 -0
  33. package/lib/auth/startup.d.ts +15 -0
  34. package/lib/auth/startup.js +68 -0
  35. package/lib/auth/startup.js.map +1 -0
  36. package/lib/auth/webserver.d.ts +18 -0
  37. package/lib/auth/webserver.js +60 -0
  38. package/lib/auth/webserver.js.map +1 -0
  39. package/lib/client.js +2770 -0
  40. package/lib/client.js.map +1 -0
  41. package/lib/connection-sIX25pkS.d.ts +46 -0
  42. package/lib/core/audit.d.ts +16 -0
  43. package/lib/core/audit.js +38 -0
  44. package/lib/core/audit.js.map +1 -0
  45. package/lib/core/index.d.ts +8 -0
  46. package/lib/core/index.js +77 -0
  47. package/lib/core/index.js.map +1 -0
  48. package/lib/core/known-hosts.d.ts +23 -0
  49. package/lib/core/known-hosts.js +76 -0
  50. package/lib/core/known-hosts.js.map +1 -0
  51. package/lib/core/node-registry.d.ts +108 -0
  52. package/lib/core/node-registry.js +191 -0
  53. package/lib/core/node-registry.js.map +1 -0
  54. package/lib/core/routes.d.ts +9 -0
  55. package/lib/core/routes.js +404 -0
  56. package/lib/core/routes.js.map +1 -0
  57. package/lib/core/ssh-config.d.ts +23 -0
  58. package/lib/core/ssh-config.js +70 -0
  59. package/lib/core/ssh-config.js.map +1 -0
  60. package/lib/core/test.d.ts +43 -0
  61. package/lib/core/test.js +116 -0
  62. package/lib/core/test.js.map +1 -0
  63. package/lib/core/workspace-bindings.d.ts +28 -0
  64. package/lib/core/workspace-bindings.js +86 -0
  65. package/lib/core/workspace-bindings.js.map +1 -0
  66. package/lib/core/workspaces.d.ts +9 -0
  67. package/lib/core/workspaces.js +283 -0
  68. package/lib/core/workspaces.js.map +1 -0
  69. package/lib/exec-docker/daemon-runner.d.ts +21 -0
  70. package/lib/exec-docker/daemon-runner.js +326 -0
  71. package/lib/exec-docker/daemon-runner.js.map +1 -0
  72. package/lib/exec-docker/docker-backend.d.ts +48 -0
  73. package/lib/exec-docker/docker-backend.js +1 -0
  74. package/lib/exec-docker/docker-client.d.ts +46 -0
  75. package/lib/exec-docker/docker-client.js +302 -0
  76. package/lib/exec-docker/docker-client.js.map +1 -0
  77. package/lib/exec-docker/docker-routes.d.ts +6 -0
  78. package/lib/exec-docker/docker-routes.js +215 -0
  79. package/lib/exec-docker/docker-routes.js.map +1 -0
  80. package/lib/exec-docker/fs-provider.d.ts +50 -0
  81. package/lib/exec-docker/fs-provider.js +92 -0
  82. package/lib/exec-docker/fs-provider.js.map +1 -0
  83. package/lib/exec-docker/host-runner.d.ts +29 -0
  84. package/lib/exec-docker/host-runner.js +17 -0
  85. package/lib/exec-docker/host-runner.js.map +1 -0
  86. package/lib/exec-docker/index.d.ts +21 -0
  87. package/lib/exec-docker/index.js +137 -0
  88. package/lib/exec-docker/index.js.map +1 -0
  89. package/lib/exec-docker/process-provider.d.ts +20 -0
  90. package/lib/exec-docker/process-provider.js +75 -0
  91. package/lib/exec-docker/process-provider.js.map +1 -0
  92. package/lib/exec-docker/provision.d.ts +24 -0
  93. package/lib/exec-docker/provision.js +103 -0
  94. package/lib/exec-docker/provision.js.map +1 -0
  95. package/lib/exec-docker/remote-docker-cli.d.ts +52 -0
  96. package/lib/exec-docker/remote-docker-cli.js +155 -0
  97. package/lib/exec-docker/remote-docker-cli.js.map +1 -0
  98. package/lib/exec-docker/world.d.ts +37 -0
  99. package/lib/exec-docker/world.js +62 -0
  100. package/lib/exec-docker/world.js.map +1 -0
  101. package/lib/exec-ssh/connection-pool.d.ts +25 -0
  102. package/lib/exec-ssh/connection-pool.js +54 -0
  103. package/lib/exec-ssh/connection-pool.js.map +1 -0
  104. package/lib/exec-ssh/connection.d.ts +2 -0
  105. package/lib/exec-ssh/connection.js +125 -0
  106. package/lib/exec-ssh/connection.js.map +1 -0
  107. package/lib/exec-ssh/env-scrub.d.ts +7 -0
  108. package/lib/exec-ssh/env-scrub.js +40 -0
  109. package/lib/exec-ssh/env-scrub.js.map +1 -0
  110. package/lib/exec-ssh/executor.d.ts +46 -0
  111. package/lib/exec-ssh/executor.js +212 -0
  112. package/lib/exec-ssh/executor.js.map +1 -0
  113. package/lib/exec-ssh/fs-provider.d.ts +50 -0
  114. package/lib/exec-ssh/fs-provider.js +92 -0
  115. package/lib/exec-ssh/fs-provider.js.map +1 -0
  116. package/lib/exec-ssh/index.d.ts +16 -0
  117. package/lib/exec-ssh/index.js +30 -0
  118. package/lib/exec-ssh/index.js.map +1 -0
  119. package/lib/exec-ssh/process-provider.d.ts +20 -0
  120. package/lib/exec-ssh/process-provider.js +75 -0
  121. package/lib/exec-ssh/process-provider.js.map +1 -0
  122. package/lib/exec-ssh/runner.d.ts +13 -0
  123. package/lib/exec-ssh/runner.js +62 -0
  124. package/lib/exec-ssh/runner.js.map +1 -0
  125. package/lib/exec-ssh/world.d.ts +79 -0
  126. package/lib/exec-ssh/world.js +95 -0
  127. package/lib/exec-ssh/world.js.map +1 -0
  128. package/lib/index.d.ts +2 -0
  129. package/lib/index.js +2 -0
  130. package/lib/router/decorate-fs.d.ts +6 -0
  131. package/lib/router/decorate-fs.js +78 -0
  132. package/lib/router/decorate-fs.js.map +1 -0
  133. package/lib/router/decorate-shell.d.ts +6 -0
  134. package/lib/router/decorate-shell.js +35 -0
  135. package/lib/router/decorate-shell.js.map +1 -0
  136. package/lib/router/decorate-subprocess.d.ts +6 -0
  137. package/lib/router/decorate-subprocess.js +35 -0
  138. package/lib/router/decorate-subprocess.js.map +1 -0
  139. package/lib/router/index.d.ts +10 -0
  140. package/lib/router/index.js +21 -0
  141. package/lib/router/index.js.map +1 -0
  142. package/lib/router/resolve.d.ts +22 -0
  143. package/lib/router/resolve.js +45 -0
  144. package/lib/router/resolve.js.map +1 -0
  145. package/lib/router/router-fs.d.ts +25 -0
  146. package/lib/router/router-fs.js +64 -0
  147. package/lib/router/router-fs.js.map +1 -0
  148. package/lib/router/router-shell.d.ts +14 -0
  149. package/lib/router/router-shell.js +36 -0
  150. package/lib/router/router-shell.js.map +1 -0
  151. package/lib/router/router-subprocess.d.ts +13 -0
  152. package/lib/router/router-subprocess.js +33 -0
  153. package/lib/router/router-subprocess.js.map +1 -0
  154. package/lib/router/types.d.ts +2 -0
  155. package/lib/router/types.js +1 -0
  156. package/lib/types-C0TtEO7z.d.ts +67 -0
  157. package/lib/ui/decorate-picker.d.ts +6 -0
  158. package/lib/ui/decorate-picker.js +58 -0
  159. package/lib/ui/decorate-picker.js.map +1 -0
  160. package/lib/ui/index.d.ts +8 -0
  161. package/lib/ui/index.js +11 -0
  162. package/lib/ui/index.js.map +1 -0
  163. package/lib/ui/picker.d.ts +10 -0
  164. package/lib/ui/picker.js +58 -0
  165. package/lib/ui/picker.js.map +1 -0
  166. package/package.json +146 -13
  167. package/LICENSE +0 -21
@@ -0,0 +1,18 @@
1
+ import WebServer, { WebRoute, WebUpgradeRoute } from "@deepseek-ai/dsh-host-webserver";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ //#region src/auth/webserver.d.ts
4
+ declare class AuthedWebServer extends WebServer {
5
+ private readonly gate;
6
+ constructor(ctx: Context, config: {
7
+ host: '127.0.0.1' | '0.0.0.0';
8
+ port: number;
9
+ });
10
+ register(route: WebRoute): () => void;
11
+ registerFallback(handler: WebRoute['handler']): () => void;
12
+ registerUpgrade(route: WebUpgradeRoute): () => void;
13
+ private guarded;
14
+ private guardedUpgrade;
15
+ }
16
+ //#endregion
17
+ export { AuthedWebServer as default };
18
+ //# sourceMappingURL=webserver.d.ts.map
@@ -0,0 +1,60 @@
1
+ import { sharedCredentialStore } from "./credentials.js";
2
+ import { AuthGate, rewriteToLoopback } from "./gate.js";
3
+ import WebServer from "@deepseek-ai/dsh-host-webserver";
4
+ //#region src/auth/webserver.ts
5
+ var AuthedWebServer = class extends WebServer {
6
+ gate = new AuthGate(sharedCredentialStore());
7
+ constructor(ctx, config) {
8
+ super(ctx, config);
9
+ }
10
+ register(route) {
11
+ return super.register({
12
+ ...route,
13
+ handler: (req, res) => this.guarded(route, req, res)
14
+ });
15
+ }
16
+ registerFallback(handler) {
17
+ return super.registerFallback((req, res) => this.guarded({
18
+ kind: "exact",
19
+ path: "/",
20
+ handler
21
+ }, req, res));
22
+ }
23
+ registerUpgrade(route) {
24
+ return super.registerUpgrade({
25
+ ...route,
26
+ handler: (req, socket, head) => this.guardedUpgrade(route, req, socket, head)
27
+ });
28
+ }
29
+ guarded(route, req, res) {
30
+ const decision = this.gate.decide(req);
31
+ if (decision === "allow") {
32
+ rewriteToLoopback(req, this.port);
33
+ return route.handler(req, res);
34
+ }
35
+ if (decision === "exempt") return route.handler(req, res);
36
+ if (decision === "redirect-login") {
37
+ res.writeHead(302, { location: "/login" });
38
+ res.end();
39
+ return;
40
+ }
41
+ res.writeHead(401, { "content-type": "application/json" });
42
+ res.end(JSON.stringify({
43
+ ok: false,
44
+ error: "unauthorized"
45
+ }));
46
+ }
47
+ guardedUpgrade(route, req, socket, head) {
48
+ const decision = this.gate.decide(req);
49
+ if (decision === "allow" || decision === "exempt") {
50
+ if (decision === "allow") rewriteToLoopback(req, this.port);
51
+ return route.handler(req, socket, head);
52
+ }
53
+ socket.write("HTTP/1.1 401 Unauthorized\r\nConnection: close\r\n\r\n");
54
+ socket.destroy();
55
+ }
56
+ };
57
+ //#endregion
58
+ export { AuthedWebServer as default };
59
+
60
+ //# sourceMappingURL=webserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webserver.js","names":[],"sources":["../../src/auth/webserver.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from 'node:http'\nimport type { Duplex } from 'node:stream'\nimport WebServer from '@deepseek-ai/dsh-host-webserver'\nimport type { WebRoute, WebUpgradeRoute } from '@deepseek-ai/dsh-host-webserver'\nimport type { Context } from '@deepseek-ai/cordis'\nimport { sharedCredentialStore } from './credentials.js'\nimport { AuthGate, rewriteToLoopback } from './gate.js'\n\nexport default class AuthedWebServer extends WebServer {\n private readonly gate = new AuthGate(sharedCredentialStore())\n\n constructor(ctx: Context, config: { host: '127.0.0.1' | '0.0.0.0'; port: number }) {\n super(ctx, config)\n }\n\n override register(route: WebRoute): () => void {\n return super.register({ ...route, handler: (req, res) => this.guarded(route, req, res) })\n }\n\n override registerFallback(handler: WebRoute['handler']): () => void {\n return super.registerFallback((req, res) =>\n this.guarded({ kind: 'exact', path: '/', handler }, req, res),\n )\n }\n\n override registerUpgrade(route: WebUpgradeRoute): () => void {\n return super.registerUpgrade({\n ...route,\n handler: (req, socket, head) => this.guardedUpgrade(route, req, socket, head),\n })\n }\n\n private guarded(route: WebRoute, req: IncomingMessage, res: ServerResponse): void | Promise<void> {\n const decision = this.gate.decide(req)\n if (decision === 'allow') {\n rewriteToLoopback(req, this.port)\n return route.handler(req, res)\n }\n if (decision === 'exempt') {\n return route.handler(req, res)\n }\n if (decision === 'redirect-login') {\n res.writeHead(302, { location: '/login' })\n res.end()\n return\n }\n res.writeHead(401, { 'content-type': 'application/json' })\n res.end(JSON.stringify({ ok: false, error: 'unauthorized' }))\n }\n\n private guardedUpgrade(\n route: WebUpgradeRoute,\n req: IncomingMessage,\n socket: Duplex,\n head: Buffer,\n ): void | Promise<void> {\n const decision = this.gate.decide(req)\n if (decision === 'allow' || decision === 'exempt') {\n if (decision === 'allow') rewriteToLoopback(req, this.port)\n return route.handler(req, socket, head)\n }\n socket.write('HTTP/1.1 401 Unauthorized\\r\\nConnection: close\\r\\n\\r\\n')\n socket.destroy()\n }\n}\n"],"mappings":";;;;AAQA,IAAqB,kBAArB,cAA6C,UAAU;CACrD,OAAwB,IAAI,SAAS,sBAAsB,CAAC;CAE5D,YAAY,KAAc,QAAyD;EACjF,MAAM,KAAK,MAAM;CACnB;CAEA,SAAkB,OAA6B;EAC7C,OAAO,MAAM,SAAS;GAAE,GAAG;GAAO,UAAU,KAAK,QAAQ,KAAK,QAAQ,OAAO,KAAK,GAAG;EAAE,CAAC;CAC1F;CAEA,iBAA0B,SAA0C;EAClE,OAAO,MAAM,kBAAkB,KAAK,QAClC,KAAK,QAAQ;GAAE,MAAM;GAAS,MAAM;GAAK;EAAQ,GAAG,KAAK,GAAG,CAC9D;CACF;CAEA,gBAAyB,OAAoC;EAC3D,OAAO,MAAM,gBAAgB;GAC3B,GAAG;GACH,UAAU,KAAK,QAAQ,SAAS,KAAK,eAAe,OAAO,KAAK,QAAQ,IAAI;EAC9E,CAAC;CACH;CAEA,QAAgB,OAAiB,KAAsB,KAA2C;EAChG,MAAM,WAAW,KAAK,KAAK,OAAO,GAAG;EACrC,IAAI,aAAa,SAAS;GACxB,kBAAkB,KAAK,KAAK,IAAI;GAChC,OAAO,MAAM,QAAQ,KAAK,GAAG;EAC/B;EACA,IAAI,aAAa,UACf,OAAO,MAAM,QAAQ,KAAK,GAAG;EAE/B,IAAI,aAAa,kBAAkB;GACjC,IAAI,UAAU,KAAK,EAAE,UAAU,SAAS,CAAC;GACzC,IAAI,IAAI;GACR;EACF;EACA,IAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;EACzD,IAAI,IAAI,KAAK,UAAU;GAAE,IAAI;GAAO,OAAO;EAAe,CAAC,CAAC;CAC9D;CAEA,eACE,OACA,KACA,QACA,MACsB;EACtB,MAAM,WAAW,KAAK,KAAK,OAAO,GAAG;EACrC,IAAI,aAAa,WAAW,aAAa,UAAU;GACjD,IAAI,aAAa,SAAS,kBAAkB,KAAK,KAAK,IAAI;GAC1D,OAAO,MAAM,QAAQ,KAAK,QAAQ,IAAI;EACxC;EACA,OAAO,MAAM,wDAAwD;EACrE,OAAO,QAAQ;CACjB;AACF"}