@dxos/plugin-client 0.6.12-staging.e11e696 → 0.6.12
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/lib/browser/index.mjs +16 -8
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +16 -8
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/ClientPlugin.d.ts +1 -1
- package/dist/types/src/ClientPlugin.d.ts.map +1 -1
- package/package.json +17 -20
- package/src/ClientPlugin.tsx +13 -6
- package/dist/lib/node-esm/chunk-4KK5TTC6.mjs +0 -23
- package/dist/lib/node-esm/chunk-4KK5TTC6.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -207
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/meta.mjs +0 -12
- package/dist/lib/node-esm/meta.mjs.map +0 -7
|
@@ -5,13 +5,14 @@ import {
|
|
|
5
5
|
} from "./chunk-3GFJ7SEI.mjs";
|
|
6
6
|
|
|
7
7
|
// packages/plugins/plugin-client/src/ClientPlugin.tsx
|
|
8
|
+
import { AddressBook } from "@phosphor-icons/react";
|
|
8
9
|
import React from "react";
|
|
9
10
|
import { filterPlugins, parseIntentPlugin, resolvePlugin } from "@dxos/app-framework";
|
|
10
11
|
import { Config, Defaults, Envs, Local, Storage } from "@dxos/config";
|
|
11
|
-
import {
|
|
12
|
+
import { registerSignalRuntime } from "@dxos/echo-signals/react";
|
|
12
13
|
import { log } from "@dxos/log";
|
|
13
14
|
import { createExtension } from "@dxos/plugin-graph";
|
|
14
|
-
import { Client,
|
|
15
|
+
import { Client, ClientContext, useClientStatus } from "@dxos/react-client";
|
|
15
16
|
|
|
16
17
|
// packages/plugins/plugin-client/src/translations.ts
|
|
17
18
|
var translations_default = [
|
|
@@ -29,7 +30,7 @@ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-client/s
|
|
|
29
30
|
var parseClientPlugin = (plugin) => (plugin?.provides).client instanceof Client ? plugin : void 0;
|
|
30
31
|
var parseSchemaPlugin = (plugin) => Array.isArray(plugin?.provides.echo?.schema) ? plugin : void 0;
|
|
31
32
|
var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
32
|
-
|
|
33
|
+
registerSignalRuntime();
|
|
33
34
|
let client;
|
|
34
35
|
let error = null;
|
|
35
36
|
return {
|
|
@@ -55,9 +56,15 @@ var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
|
55
56
|
}
|
|
56
57
|
return {
|
|
57
58
|
client,
|
|
58
|
-
context: ({ children }) =>
|
|
59
|
-
client
|
|
60
|
-
|
|
59
|
+
context: ({ children }) => {
|
|
60
|
+
const status = useClientStatus(client);
|
|
61
|
+
return /* @__PURE__ */ React.createElement(ClientContext.Provider, {
|
|
62
|
+
value: {
|
|
63
|
+
client,
|
|
64
|
+
status
|
|
65
|
+
}
|
|
66
|
+
}, children);
|
|
67
|
+
}
|
|
61
68
|
};
|
|
62
69
|
},
|
|
63
70
|
ready: async (plugins) => {
|
|
@@ -70,7 +77,7 @@ var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
|
70
77
|
id: plugin.meta.id
|
|
71
78
|
}, {
|
|
72
79
|
F: __dxlog_file,
|
|
73
|
-
L:
|
|
80
|
+
L: 118,
|
|
74
81
|
S: void 0,
|
|
75
82
|
C: (f, a) => f(...a)
|
|
76
83
|
});
|
|
@@ -107,7 +114,8 @@ var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
|
107
114
|
ns: CLIENT_PLUGIN
|
|
108
115
|
}
|
|
109
116
|
],
|
|
110
|
-
icon:
|
|
117
|
+
icon: (props) => /* @__PURE__ */ React.createElement(AddressBook, props),
|
|
118
|
+
iconSymbol: "ph--address-book--regular",
|
|
111
119
|
keyBinding: {
|
|
112
120
|
macos: "meta+shift+.",
|
|
113
121
|
// TODO(wittjosiah): Test on windows to see if it behaves the same as linux.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ClientPlugin.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type
|
|
5
|
-
"mappings": ";;;;;;;
|
|
6
|
-
"names": ["React", "filterPlugins", "parseIntentPlugin", "resolvePlugin", "Config", "Defaults", "Envs", "Local", "Storage", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { AddressBook, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n filterPlugins,\n parseIntentPlugin,\n resolvePlugin,\n type GraphBuilderProvides,\n type IntentResolverProvides,\n type Plugin,\n type PluginDefinition,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { Config, Defaults, Envs, Local, Storage } from '@dxos/config';\nimport { type S } from '@dxos/echo-schema';\nimport { registerSignalRuntime } from '@dxos/echo-signals/react';\nimport { log } from '@dxos/log';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\nimport { Client, type ClientOptions, ClientContext, useClientStatus } from '@dxos/react-client';\n\nimport meta, { CLIENT_PLUGIN, ClientAction } from './meta';\nimport translations from './translations';\n\nexport type ClientPluginOptions = ClientOptions & {\n /**\n * Used to track app-specific state in spaces.\n */\n appKey: string;\n\n /**\n * Run after the client has been initialized.\n */\n onClientInitialized?: (client: Client) => Promise<void>;\n\n /**\n * Run after the identity has been successfully initialized.\n * Run with client during plugin ready phase.\n */\n onReady?: (client: Client, plugins: Plugin[]) => Promise<void>;\n};\n\nexport type ClientPluginProvides = IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides & {\n client: Client;\n };\n\nexport const parseClientPlugin = (plugin?: Plugin) =>\n (plugin?.provides as any).client instanceof Client ? (plugin as Plugin<ClientPluginProvides>) : undefined;\n\nexport type SchemaProvides = {\n echo: {\n schema: S.Schema<any>[];\n };\n};\n\nexport const parseSchemaPlugin = (plugin?: Plugin) =>\n Array.isArray((plugin?.provides as any).echo?.schema) ? (plugin as Plugin<SchemaProvides>) : undefined;\n\nexport const ClientPlugin = ({\n appKey,\n onClientInitialized,\n onReady,\n ...options\n}: ClientPluginOptions): PluginDefinition<\n Omit<ClientPluginProvides, 'client'>,\n Pick<ClientPluginProvides, 'client'>\n> => {\n registerSignalRuntime();\n\n let client: Client;\n let error: unknown = null;\n\n return {\n meta,\n initialize: async () => {\n const config = new Config(await Storage(), Envs(), Local(), Defaults());\n client = new Client({ config, ...options });\n\n try {\n await client.initialize();\n await onClientInitialized?.(client);\n\n // TODO(wittjosiah): Remove. This is a hack to get the app to boot with the new identity after a reset.\n client.reloaded.on(() => {\n client.halo.identity.subscribe(async (identity) => {\n if (identity) {\n window.location.href = window.location.origin;\n }\n });\n });\n } catch (err) {\n error = err;\n }\n\n return {\n client,\n context: ({ children }) => {\n // TODO(burdon): Use ClientProvider?\n const status = useClientStatus(client);\n return <ClientContext.Provider value={{ client, status }}>{children}</ClientContext.Provider>;\n // return <ClientProvider client={client}>{children}</ClientProvider>;\n },\n };\n },\n ready: async (plugins) => {\n if (error) {\n throw error;\n }\n\n await onReady?.(client, plugins);\n\n filterPlugins(plugins, parseSchemaPlugin).forEach((plugin) => {\n log('ready', { id: plugin.meta.id });\n client.addTypes(plugin.provides.echo.schema);\n });\n },\n unload: async () => {\n await client.destroy();\n },\n provides: {\n translations,\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n const id = `${CLIENT_PLUGIN}/open-shell`;\n\n return createExtension({\n id: CLIENT_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch([\n { plugin: CLIENT_PLUGIN, action: ClientAction.OPEN_SHELL },\n ]);\n },\n properties: {\n label: ['open shell label', { ns: CLIENT_PLUGIN }],\n icon: (props: IconProps) => <AddressBook {...props} />,\n iconSymbol: 'ph--address-book--regular',\n keyBinding: {\n macos: 'meta+shift+.',\n // TODO(wittjosiah): Test on windows to see if it behaves the same as linux.\n windows: 'alt+shift+.',\n linux: 'alt+shift+>',\n },\n testId: 'clientPlugin.openShell',\n },\n },\n ],\n });\n },\n },\n intent: {\n resolver: async (intent) => {\n switch (intent.action) {\n case ClientAction.OPEN_SHELL:\n await client.shell.open(intent.data?.layout);\n return { data: true };\n\n case ClientAction.CREATE_IDENTITY: {\n const data = await client.halo.createIdentity();\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.created',\n },\n },\n ],\n ],\n };\n }\n\n case ClientAction.JOIN_IDENTITY: {\n const data = await client.shell.joinIdentity({ invitationCode: intent.data?.invitationCode });\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.joined',\n },\n },\n ],\n ],\n };\n }\n\n case ClientAction.SHARE_IDENTITY: {\n const data = await client.shell.shareIdentity();\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.shared',\n properties: {\n deviceKey: data.device?.deviceKey.truncate(),\n deviceKind: data.device?.kind,\n error: data.error?.message,\n canceled: data.cancelled,\n },\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CLIENT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [CLIENT_PLUGIN]: {\n 'open shell label': 'Open HALO',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ClientPlugin } from './ClientPlugin';\n\nexport default ClientPlugin;\n\nexport * from './ClientPlugin';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["AddressBook", "React", "filterPlugins", "parseIntentPlugin", "resolvePlugin", "Config", "Defaults", "Envs", "Local", "Storage", "registerSignalRuntime", "log", "createExtension", "Client", "ClientContext", "useClientStatus", "CLIENT_PLUGIN", "parseClientPlugin", "plugin", "provides", "client", "Client", "undefined", "parseSchemaPlugin", "Array", "isArray", "echo", "schema", "ClientPlugin", "appKey", "onClientInitialized", "onReady", "options", "registerSignalRuntime", "error", "meta", "initialize", "config", "Config", "Storage", "Envs", "Local", "Defaults", "reloaded", "on", "halo", "identity", "subscribe", "window", "location", "href", "origin", "err", "context", "children", "status", "useClientStatus", "ClientContext", "Provider", "value", "ready", "plugins", "filterPlugins", "forEach", "log", "id", "addTypes", "unload", "destroy", "translations", "graph", "builder", "intentPlugin", "resolvePlugin", "parseIntentPlugin", "CLIENT_PLUGIN", "createExtension", "filter", "node", "actions", "data", "intent", "dispatch", "action", "ClientAction", "OPEN_SHELL", "properties", "label", "ns", "icon", "props", "AddressBook", "iconSymbol", "keyBinding", "macos", "windows", "linux", "testId", "resolver", "shell", "open", "layout", "CREATE_IDENTITY", "createIdentity", "intents", "name", "JOIN_IDENTITY", "joinIdentity", "invitationCode", "SHARE_IDENTITY", "shareIdentity", "deviceKey", "device", "truncate", "deviceKind", "kind", "message", "canceled", "cancelled", "ClientPlugin"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytes":2078,"imports":[],"format":"esm"},"packages/plugins/plugin-client/src/translations.ts":{"bytes":1043,"imports":[{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytes":
|
|
1
|
+
{"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytes":2078,"imports":[],"format":"esm"},"packages/plugins/plugin-client/src/translations.ts":{"bytes":1043,"imports":[{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytes":25699,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-client/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-client/src/index.ts":{"bytes":782,"imports":[{"path":"packages/plugins/plugin-client/src/ClientPlugin.tsx","kind":"import-statement","original":"./ClientPlugin"},{"path":"packages/plugins/plugin-client/src/ClientPlugin.tsx","kind":"import-statement","original":"./ClientPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-client/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12468},"packages/plugins/plugin-client/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-client/dist/lib/browser/chunk-3GFJ7SEI.mjs","kind":"import-statement"},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true}],"exports":["ClientPlugin","default","parseClientPlugin","parseSchemaPlugin"],"entryPoint":"packages/plugins/plugin-client/src/index.ts","inputs":{"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytesInOutput":6269},"packages/plugins/plugin-client/src/translations.ts":{"bytesInOutput":134},"packages/plugins/plugin-client/src/index.ts":{"bytesInOutput":32}},"bytes":6868},"packages/plugins/plugin-client/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-client/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-client/dist/lib/browser/chunk-3GFJ7SEI.mjs","kind":"import-statement"}],"exports":["CLIENT_PLUGIN","ClientAction","default"],"entryPoint":"packages/plugins/plugin-client/src/meta.ts","inputs":{},"bytes":193},"packages/plugins/plugin-client/dist/lib/browser/chunk-3GFJ7SEI.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":888},"packages/plugins/plugin-client/dist/lib/browser/chunk-3GFJ7SEI.mjs":{"imports":[],"exports":["CLIENT_PLUGIN","ClientAction","meta_default"],"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytesInOutput":644}},"bytes":795}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -35,10 +35,11 @@ __export(node_exports, {
|
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(node_exports);
|
|
37
37
|
var import_chunk_2E5ZNH3H = require("./chunk-2E5ZNH3H.cjs");
|
|
38
|
-
var import_react =
|
|
38
|
+
var import_react = require("@phosphor-icons/react");
|
|
39
|
+
var import_react2 = __toESM(require("react"));
|
|
39
40
|
var import_app_framework = require("@dxos/app-framework");
|
|
40
41
|
var import_config = require("@dxos/config");
|
|
41
|
-
var
|
|
42
|
+
var import_react3 = require("@dxos/echo-signals/react");
|
|
42
43
|
var import_log = require("@dxos/log");
|
|
43
44
|
var import_plugin_graph = require("@dxos/plugin-graph");
|
|
44
45
|
var import_react_client = require("@dxos/react-client");
|
|
@@ -55,7 +56,7 @@ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-client/s
|
|
|
55
56
|
var parseClientPlugin = (plugin) => (plugin?.provides).client instanceof import_react_client.Client ? plugin : void 0;
|
|
56
57
|
var parseSchemaPlugin = (plugin) => Array.isArray(plugin?.provides.echo?.schema) ? plugin : void 0;
|
|
57
58
|
var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
58
|
-
(0,
|
|
59
|
+
(0, import_react3.registerSignalRuntime)();
|
|
59
60
|
let client;
|
|
60
61
|
let error = null;
|
|
61
62
|
return {
|
|
@@ -81,9 +82,15 @@ var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
|
81
82
|
}
|
|
82
83
|
return {
|
|
83
84
|
client,
|
|
84
|
-
context: ({ children }) =>
|
|
85
|
-
client
|
|
86
|
-
|
|
85
|
+
context: ({ children }) => {
|
|
86
|
+
const status = (0, import_react_client.useClientStatus)(client);
|
|
87
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react_client.ClientContext.Provider, {
|
|
88
|
+
value: {
|
|
89
|
+
client,
|
|
90
|
+
status
|
|
91
|
+
}
|
|
92
|
+
}, children);
|
|
93
|
+
}
|
|
87
94
|
};
|
|
88
95
|
},
|
|
89
96
|
ready: async (plugins) => {
|
|
@@ -96,7 +103,7 @@ var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
|
96
103
|
id: plugin.meta.id
|
|
97
104
|
}, {
|
|
98
105
|
F: __dxlog_file,
|
|
99
|
-
L:
|
|
106
|
+
L: 118,
|
|
100
107
|
S: void 0,
|
|
101
108
|
C: (f, a) => f(...a)
|
|
102
109
|
});
|
|
@@ -133,7 +140,8 @@ var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
|
133
140
|
ns: import_chunk_2E5ZNH3H.CLIENT_PLUGIN
|
|
134
141
|
}
|
|
135
142
|
],
|
|
136
|
-
icon:
|
|
143
|
+
icon: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.AddressBook, props),
|
|
144
|
+
iconSymbol: "ph--address-book--regular",
|
|
137
145
|
keyBinding: {
|
|
138
146
|
macos: "meta+shift+.",
|
|
139
147
|
// TODO(wittjosiah): Test on windows to see if it behaves the same as linux.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ClientPlugin.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
6
|
-
"names": ["import_react", "CLIENT_PLUGIN", "parseClientPlugin", "plugin", "provides", "client", "Client", "undefined", "parseSchemaPlugin", "Array", "isArray", "echo", "schema", "ClientPlugin", "appKey", "onClientInitialized", "onReady", "options", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { AddressBook, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n filterPlugins,\n parseIntentPlugin,\n resolvePlugin,\n type GraphBuilderProvides,\n type IntentResolverProvides,\n type Plugin,\n type PluginDefinition,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { Config, Defaults, Envs, Local, Storage } from '@dxos/config';\nimport { type S } from '@dxos/echo-schema';\nimport { registerSignalRuntime } from '@dxos/echo-signals/react';\nimport { log } from '@dxos/log';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\nimport { Client, type ClientOptions, ClientContext, useClientStatus } from '@dxos/react-client';\n\nimport meta, { CLIENT_PLUGIN, ClientAction } from './meta';\nimport translations from './translations';\n\nexport type ClientPluginOptions = ClientOptions & {\n /**\n * Used to track app-specific state in spaces.\n */\n appKey: string;\n\n /**\n * Run after the client has been initialized.\n */\n onClientInitialized?: (client: Client) => Promise<void>;\n\n /**\n * Run after the identity has been successfully initialized.\n * Run with client during plugin ready phase.\n */\n onReady?: (client: Client, plugins: Plugin[]) => Promise<void>;\n};\n\nexport type ClientPluginProvides = IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides & {\n client: Client;\n };\n\nexport const parseClientPlugin = (plugin?: Plugin) =>\n (plugin?.provides as any).client instanceof Client ? (plugin as Plugin<ClientPluginProvides>) : undefined;\n\nexport type SchemaProvides = {\n echo: {\n schema: S.Schema<any>[];\n };\n};\n\nexport const parseSchemaPlugin = (plugin?: Plugin) =>\n Array.isArray((plugin?.provides as any).echo?.schema) ? (plugin as Plugin<SchemaProvides>) : undefined;\n\nexport const ClientPlugin = ({\n appKey,\n onClientInitialized,\n onReady,\n ...options\n}: ClientPluginOptions): PluginDefinition<\n Omit<ClientPluginProvides, 'client'>,\n Pick<ClientPluginProvides, 'client'>\n> => {\n registerSignalRuntime();\n\n let client: Client;\n let error: unknown = null;\n\n return {\n meta,\n initialize: async () => {\n const config = new Config(await Storage(), Envs(), Local(), Defaults());\n client = new Client({ config, ...options });\n\n try {\n await client.initialize();\n await onClientInitialized?.(client);\n\n // TODO(wittjosiah): Remove. This is a hack to get the app to boot with the new identity after a reset.\n client.reloaded.on(() => {\n client.halo.identity.subscribe(async (identity) => {\n if (identity) {\n window.location.href = window.location.origin;\n }\n });\n });\n } catch (err) {\n error = err;\n }\n\n return {\n client,\n context: ({ children }) => {\n // TODO(burdon): Use ClientProvider?\n const status = useClientStatus(client);\n return <ClientContext.Provider value={{ client, status }}>{children}</ClientContext.Provider>;\n // return <ClientProvider client={client}>{children}</ClientProvider>;\n },\n };\n },\n ready: async (plugins) => {\n if (error) {\n throw error;\n }\n\n await onReady?.(client, plugins);\n\n filterPlugins(plugins, parseSchemaPlugin).forEach((plugin) => {\n log('ready', { id: plugin.meta.id });\n client.addTypes(plugin.provides.echo.schema);\n });\n },\n unload: async () => {\n await client.destroy();\n },\n provides: {\n translations,\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n const id = `${CLIENT_PLUGIN}/open-shell`;\n\n return createExtension({\n id: CLIENT_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch([\n { plugin: CLIENT_PLUGIN, action: ClientAction.OPEN_SHELL },\n ]);\n },\n properties: {\n label: ['open shell label', { ns: CLIENT_PLUGIN }],\n icon: (props: IconProps) => <AddressBook {...props} />,\n iconSymbol: 'ph--address-book--regular',\n keyBinding: {\n macos: 'meta+shift+.',\n // TODO(wittjosiah): Test on windows to see if it behaves the same as linux.\n windows: 'alt+shift+.',\n linux: 'alt+shift+>',\n },\n testId: 'clientPlugin.openShell',\n },\n },\n ],\n });\n },\n },\n intent: {\n resolver: async (intent) => {\n switch (intent.action) {\n case ClientAction.OPEN_SHELL:\n await client.shell.open(intent.data?.layout);\n return { data: true };\n\n case ClientAction.CREATE_IDENTITY: {\n const data = await client.halo.createIdentity();\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.created',\n },\n },\n ],\n ],\n };\n }\n\n case ClientAction.JOIN_IDENTITY: {\n const data = await client.shell.joinIdentity({ invitationCode: intent.data?.invitationCode });\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.joined',\n },\n },\n ],\n ],\n };\n }\n\n case ClientAction.SHARE_IDENTITY: {\n const data = await client.shell.shareIdentity();\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.shared',\n properties: {\n deviceKey: data.device?.deviceKey.truncate(),\n deviceKind: data.device?.kind,\n error: data.error?.message,\n canceled: data.cancelled,\n },\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CLIENT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [CLIENT_PLUGIN]: {\n 'open shell label': 'Open HALO',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ClientPlugin } from './ClientPlugin';\n\nexport default ClientPlugin;\n\nexport * from './ClientPlugin';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "CLIENT_PLUGIN", "parseClientPlugin", "plugin", "provides", "client", "Client", "undefined", "parseSchemaPlugin", "Array", "isArray", "echo", "schema", "ClientPlugin", "appKey", "onClientInitialized", "onReady", "options", "registerSignalRuntime", "error", "meta", "initialize", "config", "Config", "Storage", "Envs", "Local", "Defaults", "reloaded", "on", "halo", "identity", "subscribe", "window", "location", "href", "origin", "err", "context", "children", "status", "useClientStatus", "React", "ClientContext", "Provider", "value", "ready", "plugins", "filterPlugins", "forEach", "log", "id", "addTypes", "unload", "destroy", "translations", "graph", "builder", "intentPlugin", "resolvePlugin", "parseIntentPlugin", "createExtension", "filter", "node", "actions", "data", "intent", "dispatch", "action", "ClientAction", "OPEN_SHELL", "properties", "label", "ns", "icon", "props", "AddressBook", "iconSymbol", "keyBinding", "macos", "windows", "linux", "testId", "resolver", "shell", "open", "layout", "CREATE_IDENTITY", "createIdentity", "intents", "name", "JOIN_IDENTITY", "joinIdentity", "invitationCode", "SHARE_IDENTITY", "shareIdentity", "deviceKey", "device", "truncate", "deviceKind", "kind", "message", "canceled", "cancelled"]
|
|
7
7
|
}
|
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytes":2078,"imports":[],"format":"esm"},"packages/plugins/plugin-client/src/translations.ts":{"bytes":1043,"imports":[{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytes":
|
|
1
|
+
{"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytes":2078,"imports":[],"format":"esm"},"packages/plugins/plugin-client/src/translations.ts":{"bytes":1043,"imports":[{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytes":25699,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-client/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-client/src/index.ts":{"bytes":782,"imports":[{"path":"packages/plugins/plugin-client/src/ClientPlugin.tsx","kind":"import-statement","original":"./ClientPlugin"},{"path":"packages/plugins/plugin-client/src/ClientPlugin.tsx","kind":"import-statement","original":"./ClientPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-client/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12468},"packages/plugins/plugin-client/dist/lib/node/index.cjs":{"imports":[{"path":"packages/plugins/plugin-client/dist/lib/node/chunk-2E5ZNH3H.cjs","kind":"import-statement"},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true}],"exports":["ClientPlugin","default","parseClientPlugin","parseSchemaPlugin"],"entryPoint":"packages/plugins/plugin-client/src/index.ts","inputs":{"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytesInOutput":6269},"packages/plugins/plugin-client/src/translations.ts":{"bytesInOutput":134},"packages/plugins/plugin-client/src/index.ts":{"bytesInOutput":32}},"bytes":6868},"packages/plugins/plugin-client/dist/lib/node/meta.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-client/dist/lib/node/meta.cjs":{"imports":[{"path":"packages/plugins/plugin-client/dist/lib/node/chunk-2E5ZNH3H.cjs","kind":"import-statement"}],"exports":["CLIENT_PLUGIN","ClientAction","default"],"entryPoint":"packages/plugins/plugin-client/src/meta.ts","inputs":{},"bytes":193},"packages/plugins/plugin-client/dist/lib/node/chunk-2E5ZNH3H.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":888},"packages/plugins/plugin-client/dist/lib/node/chunk-2E5ZNH3H.cjs":{"imports":[],"exports":["CLIENT_PLUGIN","ClientAction","meta_default"],"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytesInOutput":644}},"bytes":795}}}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Schema as S } from '@effect/schema';
|
|
2
1
|
import { type GraphBuilderProvides, type IntentResolverProvides, type Plugin, type PluginDefinition, type TranslationsProvides } from '@dxos/app-framework';
|
|
2
|
+
import { type S } from '@dxos/echo-schema';
|
|
3
3
|
import { Client, type ClientOptions } from '@dxos/react-client';
|
|
4
4
|
export type ClientPluginOptions = ClientOptions & {
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientPlugin.d.ts","sourceRoot":"","sources":["../../../src/ClientPlugin.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClientPlugin.d.ts","sourceRoot":"","sources":["../../../src/ClientPlugin.tsx"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAI3C,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAkC,MAAM,oBAAoB,CAAC;AAKhG,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG;IAChD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,GACvD,oBAAoB,GACpB,oBAAoB,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,YAAa,MAAM,6CAC0D,CAAC;AAE5G,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;KACzB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,iBAAiB,YAAa,MAAM,uCACuD,CAAC;AAEzG,eAAO,MAAM,YAAY,yDAKtB,mBAAmB,KAAG,gBAAgB,CACvC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EACpC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAgKrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-client",
|
|
3
|
-
"version": "0.6.12
|
|
3
|
+
"version": "0.6.12",
|
|
4
4
|
"description": "DXOS Surface plugin for DXOS Client",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -10,16 +10,14 @@
|
|
|
10
10
|
".": {
|
|
11
11
|
"browser": "./dist/lib/browser/index.mjs",
|
|
12
12
|
"node": {
|
|
13
|
-
"
|
|
14
|
-
"default": "./dist/lib/node-esm/index.mjs"
|
|
13
|
+
"default": "./dist/lib/node/index.cjs"
|
|
15
14
|
},
|
|
16
15
|
"types": "./dist/types/src/index.d.ts"
|
|
17
16
|
},
|
|
18
17
|
"./meta": {
|
|
19
18
|
"browser": "./dist/lib/browser/meta.mjs",
|
|
20
19
|
"node": {
|
|
21
|
-
"
|
|
22
|
-
"default": "./dist/lib/node-esm/meta.mjs"
|
|
20
|
+
"default": "./dist/lib/node/meta.cjs"
|
|
23
21
|
},
|
|
24
22
|
"types": "./dist/types/src/meta.d.ts"
|
|
25
23
|
}
|
|
@@ -38,29 +36,28 @@
|
|
|
38
36
|
],
|
|
39
37
|
"dependencies": {
|
|
40
38
|
"@phosphor-icons/react": "^2.1.5",
|
|
41
|
-
"@dxos/app-framework": "0.6.12
|
|
42
|
-
"@dxos/config": "0.6.12
|
|
43
|
-
"@dxos/echo-
|
|
44
|
-
"@dxos/echo-
|
|
45
|
-
"@dxos/invariant": "0.6.12
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/react-
|
|
50
|
-
"@dxos/
|
|
39
|
+
"@dxos/app-framework": "0.6.12",
|
|
40
|
+
"@dxos/config": "0.6.12",
|
|
41
|
+
"@dxos/echo-schema": "0.6.12",
|
|
42
|
+
"@dxos/echo-signals": "0.6.12",
|
|
43
|
+
"@dxos/invariant": "0.6.12",
|
|
44
|
+
"@dxos/local-storage": "0.6.12",
|
|
45
|
+
"@dxos/react-client": "0.6.12",
|
|
46
|
+
"@dxos/log": "0.6.12",
|
|
47
|
+
"@dxos/react-ui": "0.6.12",
|
|
48
|
+
"@dxos/plugin-graph": "0.6.12"
|
|
51
49
|
},
|
|
52
50
|
"devDependencies": {
|
|
53
51
|
"@types/react": "~18.2.0",
|
|
54
52
|
"@types/react-dom": "~18.2.0",
|
|
55
53
|
"react": "~18.2.0",
|
|
56
54
|
"react-dom": "~18.2.0",
|
|
57
|
-
"vite": "5.4
|
|
58
|
-
"@dxos/storybook-utils": "0.6.12
|
|
55
|
+
"vite": "^5.3.4",
|
|
56
|
+
"@dxos/storybook-utils": "0.6.12"
|
|
59
57
|
},
|
|
60
58
|
"peerDependencies": {
|
|
61
|
-
"
|
|
62
|
-
"react": "
|
|
63
|
-
"react-dom": "~18.2.0"
|
|
59
|
+
"react": "^18.0.0",
|
|
60
|
+
"react-dom": "^18.0.0"
|
|
64
61
|
},
|
|
65
62
|
"publishConfig": {
|
|
66
63
|
"access": "public"
|
package/src/ClientPlugin.tsx
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type
|
|
5
|
+
import { AddressBook, type IconProps } from '@phosphor-icons/react';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
8
|
import {
|
|
@@ -16,10 +16,11 @@ import {
|
|
|
16
16
|
type TranslationsProvides,
|
|
17
17
|
} from '@dxos/app-framework';
|
|
18
18
|
import { Config, Defaults, Envs, Local, Storage } from '@dxos/config';
|
|
19
|
-
import {
|
|
19
|
+
import { type S } from '@dxos/echo-schema';
|
|
20
|
+
import { registerSignalRuntime } from '@dxos/echo-signals/react';
|
|
20
21
|
import { log } from '@dxos/log';
|
|
21
22
|
import { createExtension, type Node } from '@dxos/plugin-graph';
|
|
22
|
-
import { Client, type ClientOptions,
|
|
23
|
+
import { Client, type ClientOptions, ClientContext, useClientStatus } from '@dxos/react-client';
|
|
23
24
|
|
|
24
25
|
import meta, { CLIENT_PLUGIN, ClientAction } from './meta';
|
|
25
26
|
import translations from './translations';
|
|
@@ -69,7 +70,7 @@ export const ClientPlugin = ({
|
|
|
69
70
|
Omit<ClientPluginProvides, 'client'>,
|
|
70
71
|
Pick<ClientPluginProvides, 'client'>
|
|
71
72
|
> => {
|
|
72
|
-
|
|
73
|
+
registerSignalRuntime();
|
|
73
74
|
|
|
74
75
|
let client: Client;
|
|
75
76
|
let error: unknown = null;
|
|
@@ -98,7 +99,12 @@ export const ClientPlugin = ({
|
|
|
98
99
|
|
|
99
100
|
return {
|
|
100
101
|
client,
|
|
101
|
-
context: ({ children }) =>
|
|
102
|
+
context: ({ children }) => {
|
|
103
|
+
// TODO(burdon): Use ClientProvider?
|
|
104
|
+
const status = useClientStatus(client);
|
|
105
|
+
return <ClientContext.Provider value={{ client, status }}>{children}</ClientContext.Provider>;
|
|
106
|
+
// return <ClientProvider client={client}>{children}</ClientProvider>;
|
|
107
|
+
},
|
|
102
108
|
};
|
|
103
109
|
},
|
|
104
110
|
ready: async (plugins) => {
|
|
@@ -136,7 +142,8 @@ export const ClientPlugin = ({
|
|
|
136
142
|
},
|
|
137
143
|
properties: {
|
|
138
144
|
label: ['open shell label', { ns: CLIENT_PLUGIN }],
|
|
139
|
-
icon:
|
|
145
|
+
icon: (props: IconProps) => <AddressBook {...props} />,
|
|
146
|
+
iconSymbol: 'ph--address-book--regular',
|
|
140
147
|
keyBinding: {
|
|
141
148
|
macos: 'meta+shift+.',
|
|
142
149
|
// TODO(wittjosiah): Test on windows to see if it behaves the same as linux.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
|
|
3
|
-
// packages/plugins/plugin-client/src/meta.ts
|
|
4
|
-
var CLIENT_PLUGIN = "dxos.org/plugin/client";
|
|
5
|
-
var meta_default = {
|
|
6
|
-
id: CLIENT_PLUGIN,
|
|
7
|
-
name: "Client"
|
|
8
|
-
};
|
|
9
|
-
var CLIENT_ACTION = `${CLIENT_PLUGIN}/action`;
|
|
10
|
-
var ClientAction;
|
|
11
|
-
(function(ClientAction2) {
|
|
12
|
-
ClientAction2[ClientAction2["OPEN_SHELL"] = `${CLIENT_ACTION}/SHELL`] = "OPEN_SHELL";
|
|
13
|
-
ClientAction2[ClientAction2["CREATE_IDENTITY"] = `${CLIENT_ACTION}/CREATE_IDENTITY`] = "CREATE_IDENTITY";
|
|
14
|
-
ClientAction2[ClientAction2["JOIN_IDENTITY"] = `${CLIENT_ACTION}/JOIN_IDENTITY`] = "JOIN_IDENTITY";
|
|
15
|
-
ClientAction2[ClientAction2["SHARE_IDENTITY"] = `${CLIENT_ACTION}/SHARE_IDENTITY`] = "SHARE_IDENTITY";
|
|
16
|
-
})(ClientAction || (ClientAction = {}));
|
|
17
|
-
|
|
18
|
-
export {
|
|
19
|
-
CLIENT_PLUGIN,
|
|
20
|
-
meta_default,
|
|
21
|
-
ClientAction
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=chunk-4KK5TTC6.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport const CLIENT_PLUGIN = 'dxos.org/plugin/client';\n\nexport default {\n id: CLIENT_PLUGIN,\n name: 'Client',\n};\n\nconst CLIENT_ACTION = `${CLIENT_PLUGIN}/action`;\nexport enum ClientAction {\n OPEN_SHELL = `${CLIENT_ACTION}/SHELL`,\n CREATE_IDENTITY = `${CLIENT_ACTION}/CREATE_IDENTITY`,\n JOIN_IDENTITY = `${CLIENT_ACTION}/JOIN_IDENTITY`,\n SHARE_IDENTITY = `${CLIENT_ACTION}/SHARE_IDENTITY`,\n}\n"],
|
|
5
|
-
"mappings": ";;;AAIO,IAAMA,gBAAgB;AAE7B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;AACR;AAEA,IAAMC,gBAAgB,GAAGH,aAAAA;;UACbI,eAAAA;8CACG,GAAGD,aAAAA,QAAqB,IAAA;mDACnB,GAAGA,aAAAA,kBAA+B,IAAA;iDACpC,GAAGA,aAAAA,gBAA6B,IAAA;kDAC/B,GAAGA,aAAAA,iBAA8B,IAAA;GAJxCC,iBAAAA,eAAAA,CAAAA,EAAAA;",
|
|
6
|
-
"names": ["CLIENT_PLUGIN", "id", "name", "CLIENT_ACTION", "ClientAction"]
|
|
7
|
-
}
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
CLIENT_PLUGIN,
|
|
4
|
-
ClientAction,
|
|
5
|
-
meta_default
|
|
6
|
-
} from "./chunk-4KK5TTC6.mjs";
|
|
7
|
-
|
|
8
|
-
// packages/plugins/plugin-client/src/ClientPlugin.tsx
|
|
9
|
-
import React from "react";
|
|
10
|
-
import { filterPlugins, parseIntentPlugin, resolvePlugin } from "@dxos/app-framework";
|
|
11
|
-
import { Config, Defaults, Envs, Local, Storage } from "@dxos/config";
|
|
12
|
-
import { registerSignalsRuntime } from "@dxos/echo-signals/react";
|
|
13
|
-
import { log } from "@dxos/log";
|
|
14
|
-
import { createExtension } from "@dxos/plugin-graph";
|
|
15
|
-
import { Client, ClientProvider } from "@dxos/react-client";
|
|
16
|
-
|
|
17
|
-
// packages/plugins/plugin-client/src/translations.ts
|
|
18
|
-
var translations_default = [
|
|
19
|
-
{
|
|
20
|
-
"en-US": {
|
|
21
|
-
[CLIENT_PLUGIN]: {
|
|
22
|
-
"open shell label": "Open HALO"
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
// packages/plugins/plugin-client/src/ClientPlugin.tsx
|
|
29
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-client/src/ClientPlugin.tsx";
|
|
30
|
-
var parseClientPlugin = (plugin) => (plugin?.provides).client instanceof Client ? plugin : void 0;
|
|
31
|
-
var parseSchemaPlugin = (plugin) => Array.isArray(plugin?.provides.echo?.schema) ? plugin : void 0;
|
|
32
|
-
var ClientPlugin = ({ appKey, onClientInitialized, onReady, ...options }) => {
|
|
33
|
-
registerSignalsRuntime();
|
|
34
|
-
let client;
|
|
35
|
-
let error = null;
|
|
36
|
-
return {
|
|
37
|
-
meta: meta_default,
|
|
38
|
-
initialize: async () => {
|
|
39
|
-
const config = new Config(await Storage(), Envs(), Local(), Defaults());
|
|
40
|
-
client = new Client({
|
|
41
|
-
config,
|
|
42
|
-
...options
|
|
43
|
-
});
|
|
44
|
-
try {
|
|
45
|
-
await client.initialize();
|
|
46
|
-
await onClientInitialized?.(client);
|
|
47
|
-
client.reloaded.on(() => {
|
|
48
|
-
client.halo.identity.subscribe(async (identity) => {
|
|
49
|
-
if (identity) {
|
|
50
|
-
window.location.href = window.location.origin;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
} catch (err) {
|
|
55
|
-
error = err;
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
client,
|
|
59
|
-
context: ({ children }) => /* @__PURE__ */ React.createElement(ClientProvider, {
|
|
60
|
-
client
|
|
61
|
-
}, children)
|
|
62
|
-
};
|
|
63
|
-
},
|
|
64
|
-
ready: async (plugins) => {
|
|
65
|
-
if (error) {
|
|
66
|
-
throw error;
|
|
67
|
-
}
|
|
68
|
-
await onReady?.(client, plugins);
|
|
69
|
-
filterPlugins(plugins, parseSchemaPlugin).forEach((plugin) => {
|
|
70
|
-
log("ready", {
|
|
71
|
-
id: plugin.meta.id
|
|
72
|
-
}, {
|
|
73
|
-
F: __dxlog_file,
|
|
74
|
-
L: 112,
|
|
75
|
-
S: void 0,
|
|
76
|
-
C: (f, a) => f(...a)
|
|
77
|
-
});
|
|
78
|
-
client.addTypes(plugin.provides.echo.schema);
|
|
79
|
-
});
|
|
80
|
-
},
|
|
81
|
-
unload: async () => {
|
|
82
|
-
await client.destroy();
|
|
83
|
-
},
|
|
84
|
-
provides: {
|
|
85
|
-
translations: translations_default,
|
|
86
|
-
graph: {
|
|
87
|
-
builder: (plugins) => {
|
|
88
|
-
const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);
|
|
89
|
-
const id = `${CLIENT_PLUGIN}/open-shell`;
|
|
90
|
-
return createExtension({
|
|
91
|
-
id: CLIENT_PLUGIN,
|
|
92
|
-
filter: (node) => node.id === "root",
|
|
93
|
-
actions: () => [
|
|
94
|
-
{
|
|
95
|
-
id,
|
|
96
|
-
data: async () => {
|
|
97
|
-
await intentPlugin?.provides.intent.dispatch([
|
|
98
|
-
{
|
|
99
|
-
plugin: CLIENT_PLUGIN,
|
|
100
|
-
action: ClientAction.OPEN_SHELL
|
|
101
|
-
}
|
|
102
|
-
]);
|
|
103
|
-
},
|
|
104
|
-
properties: {
|
|
105
|
-
label: [
|
|
106
|
-
"open shell label",
|
|
107
|
-
{
|
|
108
|
-
ns: CLIENT_PLUGIN
|
|
109
|
-
}
|
|
110
|
-
],
|
|
111
|
-
icon: "ph--address-book--regular",
|
|
112
|
-
keyBinding: {
|
|
113
|
-
macos: "meta+shift+.",
|
|
114
|
-
// TODO(wittjosiah): Test on windows to see if it behaves the same as linux.
|
|
115
|
-
windows: "alt+shift+.",
|
|
116
|
-
linux: "alt+shift+>"
|
|
117
|
-
},
|
|
118
|
-
testId: "clientPlugin.openShell"
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
]
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
|
-
intent: {
|
|
126
|
-
resolver: async (intent) => {
|
|
127
|
-
switch (intent.action) {
|
|
128
|
-
case ClientAction.OPEN_SHELL:
|
|
129
|
-
await client.shell.open(intent.data?.layout);
|
|
130
|
-
return {
|
|
131
|
-
data: true
|
|
132
|
-
};
|
|
133
|
-
case ClientAction.CREATE_IDENTITY: {
|
|
134
|
-
const data = await client.halo.createIdentity();
|
|
135
|
-
return {
|
|
136
|
-
data,
|
|
137
|
-
intents: [
|
|
138
|
-
[
|
|
139
|
-
{
|
|
140
|
-
// NOTE: This action is hardcoded to avoid circular dependency with observability plugin.
|
|
141
|
-
action: "dxos.org/plugin/observability/send-event",
|
|
142
|
-
data: {
|
|
143
|
-
name: "identity.created"
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
]
|
|
147
|
-
]
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
case ClientAction.JOIN_IDENTITY: {
|
|
151
|
-
const data = await client.shell.joinIdentity({
|
|
152
|
-
invitationCode: intent.data?.invitationCode
|
|
153
|
-
});
|
|
154
|
-
return {
|
|
155
|
-
data,
|
|
156
|
-
intents: [
|
|
157
|
-
[
|
|
158
|
-
{
|
|
159
|
-
// NOTE: This action is hardcoded to avoid circular dependency with observability plugin.
|
|
160
|
-
action: "dxos.org/plugin/observability/send-event",
|
|
161
|
-
data: {
|
|
162
|
-
name: "identity.joined"
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
]
|
|
166
|
-
]
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
case ClientAction.SHARE_IDENTITY: {
|
|
170
|
-
const data = await client.shell.shareIdentity();
|
|
171
|
-
return {
|
|
172
|
-
data,
|
|
173
|
-
intents: [
|
|
174
|
-
[
|
|
175
|
-
{
|
|
176
|
-
// NOTE: This action is hardcoded to avoid circular dependency with observability plugin.
|
|
177
|
-
action: "dxos.org/plugin/observability/send-event",
|
|
178
|
-
data: {
|
|
179
|
-
name: "identity.shared",
|
|
180
|
-
properties: {
|
|
181
|
-
deviceKey: data.device?.deviceKey.truncate(),
|
|
182
|
-
deviceKind: data.device?.kind,
|
|
183
|
-
error: data.error?.message,
|
|
184
|
-
canceled: data.cancelled
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
]
|
|
189
|
-
]
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
// packages/plugins/plugin-client/src/index.ts
|
|
200
|
-
var src_default = ClientPlugin;
|
|
201
|
-
export {
|
|
202
|
-
ClientPlugin,
|
|
203
|
-
src_default as default,
|
|
204
|
-
parseClientPlugin,
|
|
205
|
-
parseSchemaPlugin
|
|
206
|
-
};
|
|
207
|
-
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ClientPlugin.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Schema as S } from '@effect/schema';\nimport React from 'react';\n\nimport {\n filterPlugins,\n parseIntentPlugin,\n resolvePlugin,\n type GraphBuilderProvides,\n type IntentResolverProvides,\n type Plugin,\n type PluginDefinition,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { Config, Defaults, Envs, Local, Storage } from '@dxos/config';\nimport { registerSignalsRuntime } from '@dxos/echo-signals/react';\nimport { log } from '@dxos/log';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\nimport { Client, type ClientOptions, ClientProvider } from '@dxos/react-client';\n\nimport meta, { CLIENT_PLUGIN, ClientAction } from './meta';\nimport translations from './translations';\n\nexport type ClientPluginOptions = ClientOptions & {\n /**\n * Used to track app-specific state in spaces.\n */\n appKey: string;\n\n /**\n * Run after the client has been initialized.\n */\n onClientInitialized?: (client: Client) => Promise<void>;\n\n /**\n * Run after the identity has been successfully initialized.\n * Run with client during plugin ready phase.\n */\n onReady?: (client: Client, plugins: Plugin[]) => Promise<void>;\n};\n\nexport type ClientPluginProvides = IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides & {\n client: Client;\n };\n\nexport const parseClientPlugin = (plugin?: Plugin) =>\n (plugin?.provides as any).client instanceof Client ? (plugin as Plugin<ClientPluginProvides>) : undefined;\n\nexport type SchemaProvides = {\n echo: {\n schema: S.Schema<any>[];\n };\n};\n\nexport const parseSchemaPlugin = (plugin?: Plugin) =>\n Array.isArray((plugin?.provides as any).echo?.schema) ? (plugin as Plugin<SchemaProvides>) : undefined;\n\nexport const ClientPlugin = ({\n appKey,\n onClientInitialized,\n onReady,\n ...options\n}: ClientPluginOptions): PluginDefinition<\n Omit<ClientPluginProvides, 'client'>,\n Pick<ClientPluginProvides, 'client'>\n> => {\n registerSignalsRuntime();\n\n let client: Client;\n let error: unknown = null;\n\n return {\n meta,\n initialize: async () => {\n const config = new Config(await Storage(), Envs(), Local(), Defaults());\n client = new Client({ config, ...options });\n\n try {\n await client.initialize();\n await onClientInitialized?.(client);\n\n // TODO(wittjosiah): Remove. This is a hack to get the app to boot with the new identity after a reset.\n client.reloaded.on(() => {\n client.halo.identity.subscribe(async (identity) => {\n if (identity) {\n window.location.href = window.location.origin;\n }\n });\n });\n } catch (err) {\n error = err;\n }\n\n return {\n client,\n context: ({ children }) => <ClientProvider client={client}>{children}</ClientProvider>,\n };\n },\n ready: async (plugins) => {\n if (error) {\n throw error;\n }\n\n await onReady?.(client, plugins);\n\n filterPlugins(plugins, parseSchemaPlugin).forEach((plugin) => {\n log('ready', { id: plugin.meta.id });\n client.addTypes(plugin.provides.echo.schema);\n });\n },\n unload: async () => {\n await client.destroy();\n },\n provides: {\n translations,\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n const id = `${CLIENT_PLUGIN}/open-shell`;\n\n return createExtension({\n id: CLIENT_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch([\n { plugin: CLIENT_PLUGIN, action: ClientAction.OPEN_SHELL },\n ]);\n },\n properties: {\n label: ['open shell label', { ns: CLIENT_PLUGIN }],\n icon: 'ph--address-book--regular',\n keyBinding: {\n macos: 'meta+shift+.',\n // TODO(wittjosiah): Test on windows to see if it behaves the same as linux.\n windows: 'alt+shift+.',\n linux: 'alt+shift+>',\n },\n testId: 'clientPlugin.openShell',\n },\n },\n ],\n });\n },\n },\n intent: {\n resolver: async (intent) => {\n switch (intent.action) {\n case ClientAction.OPEN_SHELL:\n await client.shell.open(intent.data?.layout);\n return { data: true };\n\n case ClientAction.CREATE_IDENTITY: {\n const data = await client.halo.createIdentity();\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.created',\n },\n },\n ],\n ],\n };\n }\n\n case ClientAction.JOIN_IDENTITY: {\n const data = await client.shell.joinIdentity({ invitationCode: intent.data?.invitationCode });\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.joined',\n },\n },\n ],\n ],\n };\n }\n\n case ClientAction.SHARE_IDENTITY: {\n const data = await client.shell.shareIdentity();\n return {\n data,\n intents: [\n [\n {\n // NOTE: This action is hardcoded to avoid circular dependency with observability plugin.\n action: 'dxos.org/plugin/observability/send-event',\n data: {\n name: 'identity.shared',\n properties: {\n deviceKey: data.device?.deviceKey.truncate(),\n deviceKind: data.device?.kind,\n error: data.error?.message,\n canceled: data.cancelled,\n },\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CLIENT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [CLIENT_PLUGIN]: {\n 'open shell label': 'Open HALO',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ClientPlugin } from './ClientPlugin';\n\nexport default ClientPlugin;\n\nexport * from './ClientPlugin';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "filterPlugins", "parseIntentPlugin", "resolvePlugin", "Config", "Defaults", "Envs", "Local", "Storage", "registerSignalsRuntime", "log", "createExtension", "Client", "ClientProvider", "CLIENT_PLUGIN", "parseClientPlugin", "plugin", "provides", "client", "Client", "undefined", "parseSchemaPlugin", "Array", "isArray", "echo", "schema", "ClientPlugin", "appKey", "onClientInitialized", "onReady", "options", "registerSignalsRuntime", "error", "meta", "initialize", "config", "Config", "Storage", "Envs", "Local", "Defaults", "reloaded", "on", "halo", "identity", "subscribe", "window", "location", "href", "origin", "err", "context", "children", "ClientProvider", "ready", "plugins", "filterPlugins", "forEach", "log", "id", "addTypes", "unload", "destroy", "translations", "graph", "builder", "intentPlugin", "resolvePlugin", "parseIntentPlugin", "CLIENT_PLUGIN", "createExtension", "filter", "node", "actions", "data", "intent", "dispatch", "action", "ClientAction", "OPEN_SHELL", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows", "linux", "testId", "resolver", "shell", "open", "layout", "CREATE_IDENTITY", "createIdentity", "intents", "name", "JOIN_IDENTITY", "joinIdentity", "invitationCode", "SHARE_IDENTITY", "shareIdentity", "deviceKey", "device", "truncate", "deviceKind", "kind", "message", "canceled", "cancelled", "ClientPlugin"]
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytes":2078,"imports":[],"format":"esm"},"packages/plugins/plugin-client/src/translations.ts":{"bytes":1043,"imports":[{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytes":24269,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-client/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-client/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-client/src/index.ts":{"bytes":782,"imports":[{"path":"packages/plugins/plugin-client/src/ClientPlugin.tsx","kind":"import-statement","original":"./ClientPlugin"},{"path":"packages/plugins/plugin-client/src/ClientPlugin.tsx","kind":"import-statement","original":"./ClientPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-client/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11796},"packages/plugins/plugin-client/dist/lib/node-esm/index.mjs":{"imports":[{"path":"packages/plugins/plugin-client/dist/lib/node-esm/chunk-4KK5TTC6.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true}],"exports":["ClientPlugin","default","parseClientPlugin","parseSchemaPlugin"],"entryPoint":"packages/plugins/plugin-client/src/index.ts","inputs":{"packages/plugins/plugin-client/src/ClientPlugin.tsx":{"bytesInOutput":5953},"packages/plugins/plugin-client/src/translations.ts":{"bytesInOutput":134},"packages/plugins/plugin-client/src/index.ts":{"bytesInOutput":32}},"bytes":6644},"packages/plugins/plugin-client/dist/lib/node-esm/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-client/dist/lib/node-esm/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-client/dist/lib/node-esm/chunk-4KK5TTC6.mjs","kind":"import-statement"}],"exports":["CLIENT_PLUGIN","ClientAction","default"],"entryPoint":"packages/plugins/plugin-client/src/meta.ts","inputs":{},"bytes":285},"packages/plugins/plugin-client/dist/lib/node-esm/chunk-4KK5TTC6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":890},"packages/plugins/plugin-client/dist/lib/node-esm/chunk-4KK5TTC6.mjs":{"imports":[],"exports":["CLIENT_PLUGIN","ClientAction","meta_default"],"inputs":{"packages/plugins/plugin-client/src/meta.ts":{"bytesInOutput":644}},"bytes":888}}}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
CLIENT_PLUGIN,
|
|
4
|
-
ClientAction,
|
|
5
|
-
meta_default
|
|
6
|
-
} from "./chunk-4KK5TTC6.mjs";
|
|
7
|
-
export {
|
|
8
|
-
CLIENT_PLUGIN,
|
|
9
|
-
ClientAction,
|
|
10
|
-
meta_default as default
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=meta.mjs.map
|