@dxos/shell 0.5.1-main.c37e119 → 0.5.1-main.c4f37e4

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 (68) hide show
  1. package/dist/bundle/shell.mjs +82536 -9
  2. package/dist/bundle/shell.mjs.map +1 -1
  3. package/dist/bundle/shell.umd.js +91 -146
  4. package/dist/bundle/shell.umd.js.map +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/react.mjs +148 -80
  7. package/dist/lib/browser/react.mjs.map +3 -3
  8. package/dist/lib/browser/testing/index.mjs +3 -2
  9. package/dist/lib/browser/testing/index.mjs.map +3 -3
  10. package/dist/types/src/components/DeviceList/DeviceListItem.js +1 -1
  11. package/dist/types/src/components/DeviceList/DeviceListItem.js.map +1 -1
  12. package/dist/types/src/composites/Shell/Shell.d.ts +1 -2
  13. package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
  14. package/dist/types/src/composites/Shell/Shell.js +24 -4
  15. package/dist/types/src/composites/Shell/Shell.js.map +1 -1
  16. package/dist/types/src/composites/Shell/ShellContext.js +1 -1
  17. package/dist/types/src/composites/Shell/ShellContext.js.map +1 -1
  18. package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts +10 -2
  19. package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts.map +1 -1
  20. package/dist/types/src/composites/Shell/memory-shell-runtime.js +20 -1
  21. package/dist/types/src/composites/Shell/memory-shell-runtime.js.map +1 -1
  22. package/dist/types/src/composites/Shell/run-shell.d.ts.map +1 -1
  23. package/dist/types/src/composites/Shell/run-shell.js +29 -9
  24. package/dist/types/src/composites/Shell/run-shell.js.map +1 -1
  25. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +1 -1
  26. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
  27. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +1 -1
  28. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
  29. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts +1 -3
  30. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -1
  31. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +3 -2
  32. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -1
  33. package/dist/types/src/panels/JoinPanel/JoinPanel.js +2 -2
  34. package/dist/types/src/panels/JoinPanel/JoinPanel.js.map +1 -1
  35. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
  36. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +2 -18
  37. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
  38. package/dist/types/src/steps/ConfirmReset.js +1 -1
  39. package/dist/types/src/steps/ConfirmReset.js.map +1 -1
  40. package/dist/types/src/steps/InvitationManager.d.ts.map +1 -1
  41. package/dist/types/src/steps/InvitationManager.js +3 -0
  42. package/dist/types/src/steps/InvitationManager.js.map +1 -1
  43. package/dist/types/src/testing/shell-manager.d.ts.map +1 -1
  44. package/dist/types/src/testing/shell-manager.js +3 -2
  45. package/dist/types/src/testing/shell-manager.js.map +1 -1
  46. package/dist/types/src/translations/locales/en-US.d.ts +2 -0
  47. package/dist/types/src/translations/locales/en-US.d.ts.map +1 -1
  48. package/dist/types/src/translations/locales/en-US.js +11 -9
  49. package/dist/types/src/translations/locales/en-US.js.map +1 -1
  50. package/package.json +22 -21
  51. package/src/components/DeviceList/DeviceListItem.tsx +1 -1
  52. package/src/composites/Shell/Shell.tsx +36 -5
  53. package/src/composites/Shell/ShellContext.tsx +1 -1
  54. package/src/composites/Shell/memory-shell-runtime.ts +36 -2
  55. package/src/composites/Shell/run-shell.tsx +59 -18
  56. package/src/panels/IdentityPanel/IdentityPanel.tsx +1 -1
  57. package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +2 -2
  58. package/src/panels/IdentityPanel/useAgentHandlers.ts +3 -4
  59. package/src/panels/JoinPanel/JoinPanel.tsx +2 -2
  60. package/src/panels/SpacePanel/steps/SpaceManager.tsx +2 -18
  61. package/src/steps/ConfirmReset.tsx +1 -1
  62. package/src/steps/InvitationManager.tsx +3 -0
  63. package/src/testing/shell-manager.ts +4 -2
  64. package/src/translations/locales/en-US.ts +11 -9
  65. package/dist/bundle/index-DDZP6tbF.mjs +0 -96625
  66. package/dist/bundle/index-DDZP6tbF.mjs.map +0 -1
  67. package/dist/bundle/index-V2p4ZwgG.mjs +0 -110
  68. package/dist/bundle/index-V2p4ZwgG.mjs.map +0 -1
@@ -1,110 +0,0 @@
1
- import { T as d, E as p, c as u, e as l, W as _, l as a, a as f } from "./index-DDZP6tbF.mjs";
2
- var m = "/home/runner/work/dxos/dxos/packages/core/mesh/websocket-rpc/src/token-auth.ts", k = class extends _ {
3
- constructor(t, e) {
4
- const r = l.from(e).toString("base64").replace(/=*$/, ""), s = [
5
- `base64url.bearer.authorization.dxos.org.${r}`
6
- ];
7
- super(t, s), a("encodedToken", {
8
- encodedToken: r
9
- }, {
10
- F: m,
11
- L: 55,
12
- S: this,
13
- C: (c, o) => c(...o)
14
- });
15
- }
16
- };
17
- function w(t, e, r, s) {
18
- var c = arguments.length, o = c < 3 ? e : s === null ? s = Object.getOwnPropertyDescriptor(e, r) : s, i;
19
- if (typeof Reflect == "object" && typeof Reflect.decorate == "function")
20
- o = Reflect.decorate(t, e, r, s);
21
- else
22
- for (var h = t.length - 1; h >= 0; h--)
23
- (i = t[h]) && (o = (c < 3 ? i(o) : c > 3 ? i(e, r, o) : i(e, r)) || o);
24
- return c > 3 && o && Object.defineProperty(e, r, o), o;
25
- }
26
- var n = "/home/runner/work/dxos/dxos/packages/core/mesh/websocket-rpc/src/client.ts", g = class {
27
- constructor(t) {
28
- this._params = t, this._connectTrigger = new d(), this.connected = new p(), this.disconnected = new p(), this.error = new p(), this._rpc = u({
29
- requested: this._params.requested,
30
- exposed: this._params.exposed,
31
- handlers: this._params.handlers,
32
- port: {
33
- send: (e) => {
34
- this._socket.send(e);
35
- },
36
- subscribe: (e) => {
37
- this._socket.onmessage = async (r) => {
38
- typeof Blob < "u" && r.data instanceof Blob ? e(l.from(await r.data.arrayBuffer())) : e(r.data);
39
- };
40
- }
41
- }
42
- });
43
- }
44
- get url() {
45
- return this._params.url;
46
- }
47
- async open() {
48
- this._params.authenticationToken ? this._socket = new k(this._params.url, this._params.authenticationToken) : this._socket = new _(this._params.url), this._socket.onopen = async () => {
49
- a("Socket open", void 0, {
50
- F: n,
51
- L: 61,
52
- S: this,
53
- C: (t, e) => t(...e)
54
- });
55
- try {
56
- await this._rpc.open(), a(`RPC open ${this._params.url}`, void 0, {
57
- F: n,
58
- L: 64,
59
- S: this,
60
- C: (t, e) => t(...e)
61
- }), this.connected.emit(), this._connectTrigger.wake();
62
- } catch (t) {
63
- this.error.emit(t);
64
- }
65
- }, this._socket.onclose = async () => {
66
- a(`Disconnected ${this._params.url}`, void 0, {
67
- F: n,
68
- L: 73,
69
- S: this,
70
- C: (t, e) => t(...e)
71
- }), this.disconnected.emit(), await this.close();
72
- }, this._socket.onerror = (t) => {
73
- a.error(t.message ?? "Socket error", {
74
- url: this._params.url
75
- }, {
76
- F: n,
77
- L: 80,
78
- S: this,
79
- C: (r, s) => r(...s)
80
- });
81
- const e = t.error ?? new Error(t.message);
82
- this.error.emit(e), this._connectTrigger.throw(e);
83
- }, await this._connectTrigger.wait();
84
- }
85
- async close() {
86
- var t, e;
87
- try {
88
- await ((t = this._rpc) == null ? void 0 : t.close());
89
- } catch (r) {
90
- a.catch(r, void 0, {
91
- F: n,
92
- L: 93,
93
- S: this,
94
- C: (s, c) => s(...c)
95
- });
96
- }
97
- (e = this._socket) == null || e.close();
98
- }
99
- get rpc() {
100
- return this._rpc.rpc;
101
- }
102
- };
103
- w([
104
- f
105
- ], g.prototype, "url", null);
106
- export {
107
- k as WebSocketWithTokenAuth,
108
- g as WebsocketRpcClient
109
- };
110
- //# sourceMappingURL=index-V2p4ZwgG.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-V2p4ZwgG.mjs","sources":["../../../../core/mesh/websocket-rpc/dist/lib/browser/index.mjs"],"sourcesContent":["import \"@dxos/node-std/globals\";\n\n// inject-globals:@inject-globals\nimport {\n global,\n Buffer,\n process\n} from \"@dxos/node-std/inject-globals\";\n\n// packages/core/mesh/websocket-rpc/src/client.ts\nimport WebSocket2 from \"isomorphic-ws\";\nimport { Event, Trigger } from \"@dxos/async\";\nimport { log as log2, logInfo } from \"@dxos/log\";\nimport { createProtoRpcPeer } from \"@dxos/rpc\";\n\n// packages/core/mesh/websocket-rpc/src/token-auth.ts\nimport WebSocket from \"isomorphic-ws\";\nimport { log } from \"@dxos/log\";\nvar __dxlog_file = \"/home/runner/work/dxos/dxos/packages/core/mesh/websocket-rpc/src/token-auth.ts\";\nvar PROTOCOL_TOKEN_PREFIX = \"base64url.bearer.authorization.dxos.org\";\nvar authenticateRequestWithTokenAuth = (request, socket, upgradeHead, token, cb) => {\n const protocolHeader = request.headers[\"sec-websocket-protocol\"];\n if (!protocolHeader) {\n log(\"upgrade unauthorized, header missing\", {\n header: request.headers[\"sec-websocket-protocol\"]\n }, {\n F: __dxlog_file,\n L: 28,\n S: void 0,\n C: (f, a) => f(...a)\n });\n socket.write(\"HTTP/1.1 401 Unauthorized\\r\\n\\r\\n\");\n socket.destroy();\n return;\n }\n const tokenHeader = protocolHeader.replace(new RegExp(`^${PROTOCOL_TOKEN_PREFIX}.`), \"\");\n const encodedToken = Buffer.from(token).toString(\"base64\").replace(/=*$/, \"\");\n if (tokenHeader !== encodedToken) {\n log(\"upgrade unauthorized\", {\n token,\n foo: encodedToken\n }, {\n F: __dxlog_file,\n L: 40,\n S: void 0,\n C: (f, a) => f(...a)\n });\n socket.write(\"HTTP/1.1 401 Unauthorized\\r\\n\\r\\n\");\n socket.destroy();\n return;\n }\n cb(request, socket, upgradeHead);\n};\nvar WebSocketWithTokenAuth = class extends WebSocket {\n constructor(url, token) {\n const encodedToken = Buffer.from(token).toString(\"base64\").replace(/=*$/, \"\");\n const wsProtocols = [\n `base64url.bearer.authorization.dxos.org.${encodedToken}`\n ];\n super(url, wsProtocols);\n log(\"encodedToken\", {\n encodedToken\n }, {\n F: __dxlog_file,\n L: 55,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n};\n\n// packages/core/mesh/websocket-rpc/src/client.ts\nfunction _ts_decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nvar __dxlog_file2 = \"/home/runner/work/dxos/dxos/packages/core/mesh/websocket-rpc/src/client.ts\";\nvar WebsocketRpcClient = class {\n constructor(_params) {\n this._params = _params;\n this._connectTrigger = new Trigger();\n this.connected = new Event();\n this.disconnected = new Event();\n this.error = new Event();\n this._rpc = createProtoRpcPeer({\n requested: this._params.requested,\n exposed: this._params.exposed,\n handlers: this._params.handlers,\n port: {\n send: (msg) => {\n this._socket.send(msg);\n },\n subscribe: (cb) => {\n this._socket.onmessage = async (msg) => {\n if (typeof Blob !== \"undefined\" && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data);\n }\n };\n }\n }\n });\n }\n get url() {\n return this._params.url;\n }\n async open() {\n if (this._params.authenticationToken) {\n this._socket = new WebSocketWithTokenAuth(this._params.url, this._params.authenticationToken);\n } else {\n this._socket = new WebSocket2(this._params.url);\n }\n this._socket.onopen = async () => {\n log2(\"Socket open\", void 0, {\n F: __dxlog_file2,\n L: 61,\n S: this,\n C: (f, a) => f(...a)\n });\n try {\n await this._rpc.open();\n log2(`RPC open ${this._params.url}`, void 0, {\n F: __dxlog_file2,\n L: 64,\n S: this,\n C: (f, a) => f(...a)\n });\n this.connected.emit();\n this._connectTrigger.wake();\n } catch (err) {\n this.error.emit(err);\n }\n };\n this._socket.onclose = async () => {\n log2(`Disconnected ${this._params.url}`, void 0, {\n F: __dxlog_file2,\n L: 73,\n S: this,\n C: (f, a) => f(...a)\n });\n this.disconnected.emit();\n await this.close();\n };\n this._socket.onerror = (event) => {\n log2.error(event.message ?? \"Socket error\", {\n url: this._params.url\n }, {\n F: __dxlog_file2,\n L: 80,\n S: this,\n C: (f, a) => f(...a)\n });\n const error = event.error ?? new Error(event.message);\n this.error.emit(error);\n this._connectTrigger.throw(error);\n };\n await this._connectTrigger.wait();\n }\n async close() {\n try {\n await this._rpc?.close();\n } catch (err) {\n log2.catch(err, void 0, {\n F: __dxlog_file2,\n L: 93,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n this._socket?.close();\n }\n get rpc() {\n return this._rpc.rpc;\n }\n};\n_ts_decorate([\n logInfo\n], WebsocketRpcClient.prototype, \"url\", null);\n\n// packages/core/mesh/websocket-rpc/src/server.ts\nimport WebSocket3 from \"isomorphic-ws\";\nimport { log as log3 } from \"@dxos/log\";\nimport { createProtoRpcPeer as createProtoRpcPeer2 } from \"@dxos/rpc\";\nvar __dxlog_file3 = \"/home/runner/work/dxos/dxos/packages/core/mesh/websocket-rpc/src/server.ts\";\nvar WebsocketRpcServer = class {\n constructor(_params) {\n this._params = _params;\n }\n handleUpgrade(request, socket, head) {\n this._server?.handleUpgrade(request, socket, head, (ws) => {\n this._server?.emit(\"connection\", ws, request);\n });\n }\n async open() {\n this._server = new WebSocket3.Server({\n ...this._params\n });\n this._server.on(\"connection\", async (socket, request) => {\n log3(\"connection\", {\n request\n }, {\n F: __dxlog_file3,\n L: 40,\n S: this,\n C: (f, a) => f(...a)\n });\n const info = {\n request\n };\n const { onOpen, onClose, ...options } = await this._params.onConnection(info);\n const rpc = createProtoRpcPeer2({\n ...options,\n port: {\n send: (msg) => {\n socket.send(msg);\n },\n subscribe: (cb) => {\n socket.onmessage = async (msg) => {\n if (typeof Blob !== \"undefined\" && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data);\n }\n };\n }\n }\n });\n await rpc.open();\n await onOpen?.(rpc);\n socket.onclose = async () => {\n await onClose?.(rpc);\n await rpc.close();\n };\n });\n }\n async close() {\n this._server?.close();\n }\n};\nexport {\n WebSocketWithTokenAuth,\n WebsocketRpcClient,\n WebsocketRpcServer,\n authenticateRequestWithTokenAuth\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["__dxlog_file","WebSocketWithTokenAuth","WebSocket","url","token","encodedToken","Buffer","wsProtocols","log","f","a","_ts_decorate","decorators","target","key","desc","r","d","i","__dxlog_file2","WebsocketRpcClient","_params","Trigger","Event","createProtoRpcPeer","msg","cb","WebSocket2","log2","err","event","error","_a","_b","logInfo"],"mappings":"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"}