@dxos/shell 0.6.3-staging.9c1c979 → 0.6.3-staging.f9246a6
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/dist/bundle/shell.mjs +87927 -10
- package/dist/bundle/shell.mjs.map +1 -1
- package/dist/bundle/shell.umd.js +101 -133
- package/dist/bundle/shell.umd.js.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react.mjs +8 -11
- package/dist/lib/browser/react.mjs.map +3 -3
- package/dist/types/src/composites/Shell/Shell.d.ts +1 -1
- package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/Shell.js +28 -28
- package/dist/types/src/composites/Shell/Shell.js.map +1 -1
- package/dist/types/src/composites/Shell/ShellContext.d.ts +1 -2
- package/dist/types/src/composites/Shell/ShellContext.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/ShellContext.js +12 -13
- package/dist/types/src/composites/Shell/ShellContext.js.map +1 -1
- package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts +1 -2
- package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/memory-shell-runtime.js +2 -2
- package/dist/types/src/composites/Shell/memory-shell-runtime.js.map +1 -1
- package/dist/types/src/composites/Shell/run-shell.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/run-shell.js +3 -4
- package/dist/types/src/composites/Shell/run-shell.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +1 -2
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -1
- package/package.json +23 -23
- package/src/composites/Shell/Shell.tsx +4 -4
- package/src/composites/Shell/ShellContext.tsx +1 -2
- package/src/composites/Shell/memory-shell-runtime.ts +2 -2
- package/src/composites/Shell/run-shell.tsx +9 -2
- package/src/panels/IdentityPanel/useAgentHandlers.ts +1 -2
- package/dist/bundle/browser-C2u-GX_T.mjs +0 -7
- package/dist/bundle/browser-C2u-GX_T.mjs.map +0 -1
- package/dist/bundle/index-2qvjtbyT.mjs +0 -112
- package/dist/bundle/index-2qvjtbyT.mjs.map +0 -1
- package/dist/bundle/index-Bxrp8rGc.mjs +0 -4593
- package/dist/bundle/index-Bxrp8rGc.mjs.map +0 -1
- package/dist/bundle/index-CLKnEc1H.mjs +0 -92930
- package/dist/bundle/index-CLKnEc1H.mjs.map +0 -1
- package/dist/bundle/index-ZweceImk.mjs +0 -1322
- package/dist/bundle/index-ZweceImk.mjs.map +0 -1
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { T as _, E as p, c as u, e as l, l as c, a as m } from "./index-CLKnEc1H.mjs";
|
|
2
|
-
import { W as d } from "./browser-C2u-GX_T.mjs";
|
|
3
|
-
var f = "/home/runner/work/dxos/dxos/packages/core/mesh/websocket-rpc/src/token-auth.ts", k = class extends d {
|
|
4
|
-
constructor(t, e) {
|
|
5
|
-
const r = l.from(e).toString("base64").replace(/=*$/, ""), s = [
|
|
6
|
-
`base64url.bearer.authorization.dxos.org.${r}`
|
|
7
|
-
];
|
|
8
|
-
super(t, s), c("encodedToken", {
|
|
9
|
-
encodedToken: r
|
|
10
|
-
}, {
|
|
11
|
-
F: f,
|
|
12
|
-
L: 55,
|
|
13
|
-
S: this,
|
|
14
|
-
C: (a, o) => a(...o)
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
function w(t, e, r, s) {
|
|
19
|
-
var a = arguments.length, o = a < 3 ? e : s === null ? s = Object.getOwnPropertyDescriptor(e, r) : s, i;
|
|
20
|
-
if (typeof Reflect == "object" && typeof Reflect.decorate == "function")
|
|
21
|
-
o = Reflect.decorate(t, e, r, s);
|
|
22
|
-
else
|
|
23
|
-
for (var h = t.length - 1; h >= 0; h--)
|
|
24
|
-
(i = t[h]) && (o = (a < 3 ? i(o) : a > 3 ? i(e, r, o) : i(e, r)) || o);
|
|
25
|
-
return a > 3 && o && Object.defineProperty(e, r, o), o;
|
|
26
|
-
}
|
|
27
|
-
var n = "/home/runner/work/dxos/dxos/packages/core/mesh/websocket-rpc/src/client.ts", g = class {
|
|
28
|
-
constructor(t) {
|
|
29
|
-
this._params = t, this._connectTrigger = new _(), this.connected = new p(), this.disconnected = new p(), this.error = new p(), this._rpc = u({
|
|
30
|
-
requested: this._params.requested,
|
|
31
|
-
exposed: this._params.exposed,
|
|
32
|
-
handlers: this._params.handlers,
|
|
33
|
-
noHandshake: this._params.noHandshake,
|
|
34
|
-
port: {
|
|
35
|
-
send: (e) => {
|
|
36
|
-
this._socket.send(e);
|
|
37
|
-
},
|
|
38
|
-
subscribe: (e) => {
|
|
39
|
-
this._socket.onmessage = async (r) => {
|
|
40
|
-
typeof Blob < "u" && r.data instanceof Blob ? e(l.from(await r.data.arrayBuffer())) : e(r.data);
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
get url() {
|
|
47
|
-
return this._params.url;
|
|
48
|
-
}
|
|
49
|
-
async open() {
|
|
50
|
-
this._params.authenticationToken ? this._socket = new k(this._params.url, this._params.authenticationToken) : this._socket = new d(this._params.url), this._socket.onopen = async () => {
|
|
51
|
-
c("Socket open", void 0, {
|
|
52
|
-
F: n,
|
|
53
|
-
L: 62,
|
|
54
|
-
S: this,
|
|
55
|
-
C: (t, e) => t(...e)
|
|
56
|
-
});
|
|
57
|
-
try {
|
|
58
|
-
await this._rpc.open(), c(`RPC open ${this._params.url}`, void 0, {
|
|
59
|
-
F: n,
|
|
60
|
-
L: 65,
|
|
61
|
-
S: this,
|
|
62
|
-
C: (t, e) => t(...e)
|
|
63
|
-
}), this.connected.emit(), this._connectTrigger.wake();
|
|
64
|
-
} catch (t) {
|
|
65
|
-
this.error.emit(t);
|
|
66
|
-
}
|
|
67
|
-
}, this._socket.onclose = async () => {
|
|
68
|
-
c(`Disconnected ${this._params.url}`, void 0, {
|
|
69
|
-
F: n,
|
|
70
|
-
L: 74,
|
|
71
|
-
S: this,
|
|
72
|
-
C: (t, e) => t(...e)
|
|
73
|
-
}), this.disconnected.emit(), await this.close();
|
|
74
|
-
}, this._socket.onerror = (t) => {
|
|
75
|
-
c.error(t.message ?? "Socket error", {
|
|
76
|
-
url: this._params.url
|
|
77
|
-
}, {
|
|
78
|
-
F: n,
|
|
79
|
-
L: 81,
|
|
80
|
-
S: this,
|
|
81
|
-
C: (r, s) => r(...s)
|
|
82
|
-
});
|
|
83
|
-
const e = t.error ?? new Error(t.message);
|
|
84
|
-
this.error.emit(e), this._connectTrigger.throw(e);
|
|
85
|
-
}, await this._connectTrigger.wait();
|
|
86
|
-
}
|
|
87
|
-
async close() {
|
|
88
|
-
var t, e;
|
|
89
|
-
try {
|
|
90
|
-
await ((t = this._rpc) == null ? void 0 : t.close());
|
|
91
|
-
} catch (r) {
|
|
92
|
-
c.catch(r, void 0, {
|
|
93
|
-
F: n,
|
|
94
|
-
L: 94,
|
|
95
|
-
S: this,
|
|
96
|
-
C: (s, a) => s(...a)
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
(e = this._socket) == null || e.close();
|
|
100
|
-
}
|
|
101
|
-
get rpc() {
|
|
102
|
-
return this._rpc.rpc;
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
w([
|
|
106
|
-
m
|
|
107
|
-
], g.prototype, "url", null);
|
|
108
|
-
export {
|
|
109
|
-
k as WebSocketWithTokenAuth,
|
|
110
|
-
g as WebsocketRpcClient
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=index-2qvjtbyT.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-2qvjtbyT.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 noHandshake: this._params.noHandshake,\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: 62,\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: 65,\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: 74,\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: 81,\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: 94,\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","c","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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"}
|