@dxos/react-client 0.6.11-staging.e6894a4 → 0.6.12-main.5cc132e

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 (131) hide show
  1. package/dist/lib/browser/{chunk-NLQLAARM.mjs → chunk-ESSNDYBJ.mjs} +116 -79
  2. package/dist/lib/browser/chunk-ESSNDYBJ.mjs.map +7 -0
  3. package/dist/lib/browser/devtools/index.mjs +6 -18
  4. package/dist/lib/browser/devtools/index.mjs.map +3 -3
  5. package/dist/lib/browser/echo/index.mjs +4 -4
  6. package/dist/lib/browser/echo/index.mjs.map +1 -1
  7. package/dist/lib/browser/halo/index.mjs +5 -5
  8. package/dist/lib/browser/halo/index.mjs.map +1 -1
  9. package/dist/lib/browser/index.mjs +4 -4
  10. package/dist/lib/browser/index.mjs.map +1 -1
  11. package/dist/lib/browser/mesh/index.mjs +2 -2
  12. package/dist/lib/browser/mesh/index.mjs.map +1 -1
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/testing/index.mjs +108 -12
  15. package/dist/lib/browser/testing/index.mjs.map +4 -4
  16. package/dist/lib/node/{chunk-E3S6YHNJ.cjs → chunk-N474KOAU.cjs} +102 -69
  17. package/dist/lib/node/chunk-N474KOAU.cjs.map +7 -0
  18. package/dist/lib/node/devtools/index.cjs +8 -20
  19. package/dist/lib/node/devtools/index.cjs.map +3 -3
  20. package/dist/lib/node/echo/index.cjs +10 -10
  21. package/dist/lib/node/echo/index.cjs.map +2 -2
  22. package/dist/lib/node/halo/index.cjs +13 -13
  23. package/dist/lib/node/halo/index.cjs.map +2 -2
  24. package/dist/lib/node/index.cjs +15 -15
  25. package/dist/lib/node/index.cjs.map +1 -1
  26. package/dist/lib/node/mesh/index.cjs +4 -4
  27. package/dist/lib/node/mesh/index.cjs.map +1 -1
  28. package/dist/lib/node/meta.json +1 -1
  29. package/dist/lib/node/testing/index.cjs +106 -10
  30. package/dist/lib/node/testing/index.cjs.map +4 -4
  31. package/dist/lib/node-esm/chunk-AL2CUQ46.mjs +163 -0
  32. package/dist/lib/node-esm/chunk-AL2CUQ46.mjs.map +7 -0
  33. package/dist/lib/node-esm/chunk-ESSNDYBJ.mjs +300 -0
  34. package/dist/lib/node-esm/chunk-ESSNDYBJ.mjs.map +7 -0
  35. package/dist/lib/node-esm/devtools/index.mjs +43 -0
  36. package/dist/lib/node-esm/devtools/index.mjs.map +7 -0
  37. package/dist/lib/node-esm/echo/index.mjs +131 -0
  38. package/dist/lib/node-esm/echo/index.mjs.map +7 -0
  39. package/dist/lib/node-esm/halo/index.mjs +99 -0
  40. package/dist/lib/node-esm/halo/index.mjs.map +7 -0
  41. package/dist/lib/node-esm/index.mjs +32 -0
  42. package/dist/lib/node-esm/index.mjs.map +7 -0
  43. package/dist/lib/node-esm/invitations/index.mjs +17 -0
  44. package/dist/lib/node-esm/invitations/index.mjs.map +7 -0
  45. package/dist/lib/node-esm/mesh/index.mjs +17 -0
  46. package/dist/lib/node-esm/mesh/index.mjs.map +7 -0
  47. package/dist/lib/node-esm/meta.json +1 -0
  48. package/dist/lib/node-esm/testing/index.mjs +165 -0
  49. package/dist/lib/node-esm/testing/index.mjs.map +7 -0
  50. package/dist/lib/node-esm/worker.mjs +3 -0
  51. package/dist/lib/node-esm/worker.mjs.map +7 -0
  52. package/dist/types/src/client/AgentHostingProvider.d.ts +6 -0
  53. package/dist/types/src/client/AgentHostingProvider.d.ts.map +1 -1
  54. package/dist/types/src/client/ClientProvider.d.ts +108 -0
  55. package/dist/types/src/client/ClientProvider.d.ts.map +1 -0
  56. package/dist/types/src/client/ClientProvider.test.d.ts +2 -0
  57. package/dist/types/src/client/ClientProvider.test.d.ts.map +1 -0
  58. package/dist/types/src/client/context.d.ts +6 -0
  59. package/dist/types/src/client/context.d.ts.map +1 -0
  60. package/dist/types/src/client/index.d.ts +4 -2
  61. package/dist/types/src/client/index.d.ts.map +1 -1
  62. package/dist/types/src/client/useClient.d.ts +6 -0
  63. package/dist/types/src/client/useClient.d.ts.map +1 -0
  64. package/dist/types/src/client/useClientStatus.d.ts +3 -0
  65. package/dist/types/src/client/useClientStatus.d.ts.map +1 -0
  66. package/dist/types/src/devtools/useDevtools.d.ts.map +1 -1
  67. package/dist/types/src/index.d.ts +1 -1
  68. package/dist/types/src/playwright/playwright.config.d.ts +2 -2
  69. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -1
  70. package/dist/types/src/testing/ClientRepeater.d.ts +6 -5
  71. package/dist/types/src/testing/ClientRepeater.d.ts.map +1 -1
  72. package/dist/types/src/testing/{decorators.stories.d.ts → ClientRepeater.stories.d.ts} +3 -3
  73. package/dist/types/src/testing/ClientRepeater.stories.d.ts.map +1 -0
  74. package/dist/types/src/testing/index.d.ts +1 -0
  75. package/dist/types/src/testing/index.d.ts.map +1 -1
  76. package/dist/types/src/testing/util.d.ts +14 -0
  77. package/dist/types/src/testing/util.d.ts.map +1 -0
  78. package/dist/types/src/testing/withClientProvider.d.ts +26 -0
  79. package/dist/types/src/testing/withClientProvider.d.ts.map +1 -0
  80. package/dist/types/src/testing/withClientProvider.stories.d.ts +13 -0
  81. package/dist/types/src/testing/withClientProvider.stories.d.ts.map +1 -0
  82. package/package.json +46 -34
  83. package/project.json +3 -23
  84. package/src/client/AgentHostingProvider.tsx +7 -6
  85. package/src/client/{ClientContext.test.tsx → ClientProvider.test.tsx} +9 -5
  86. package/src/client/ClientProvider.tsx +196 -0
  87. package/src/client/context.ts +20 -0
  88. package/src/client/index.ts +5 -2
  89. package/src/client/useClient.ts +18 -0
  90. package/src/client/useClientStatus.ts +21 -0
  91. package/src/client/useConfig.test.tsx +7 -11
  92. package/src/client/useConfig.ts +1 -1
  93. package/src/client/useShell.ts +1 -1
  94. package/src/client/useStatus.ts +1 -1
  95. package/src/devtools/useDevtools.ts +3 -7
  96. package/src/echo/useMembers.ts +1 -1
  97. package/src/echo/useSpaceInvitations.ts +1 -1
  98. package/src/echo/useSpaces.test.tsx +11 -37
  99. package/src/echo/useSpaces.ts +1 -1
  100. package/src/halo/useContacts.ts +1 -1
  101. package/src/halo/useDevices.test.tsx +4 -13
  102. package/src/halo/useDevices.ts +1 -1
  103. package/src/halo/useHaloInvitations.ts +1 -1
  104. package/src/halo/useIdentity.ts +1 -1
  105. package/src/index.ts +1 -1
  106. package/src/mesh/useNetworkStatus.ts +1 -1
  107. package/src/playwright/playwright.config.ts +13 -2
  108. package/src/playwright/smoke.spec.ts +5 -10
  109. package/src/testing/ClientRepeater.stories.tsx +58 -0
  110. package/src/testing/ClientRepeater.tsx +14 -13
  111. package/src/testing/index.ts +1 -0
  112. package/src/testing/util.tsx +39 -0
  113. package/src/testing/withClientProvider.stories.tsx +56 -0
  114. package/src/testing/withClientProvider.tsx +143 -0
  115. package/tsconfig.json +11 -3
  116. package/vitest.config.ts +22 -0
  117. package/dist/lib/browser/chunk-NLQLAARM.mjs.map +0 -7
  118. package/dist/lib/node/chunk-E3S6YHNJ.cjs.map +0 -7
  119. package/dist/types/src/client/ClientContext.d.ts +0 -57
  120. package/dist/types/src/client/ClientContext.d.ts.map +0 -1
  121. package/dist/types/src/client/ClientContext.stories.d.ts +0 -15
  122. package/dist/types/src/client/ClientContext.stories.d.ts.map +0 -1
  123. package/dist/types/src/client/ClientContext.test.d.ts +0 -2
  124. package/dist/types/src/client/ClientContext.test.d.ts.map +0 -1
  125. package/dist/types/src/client/useClientServices.d.ts +0 -3
  126. package/dist/types/src/client/useClientServices.d.ts.map +0 -1
  127. package/dist/types/src/testing/decorators.stories.d.ts.map +0 -1
  128. package/src/client/ClientContext.stories.tsx +0 -94
  129. package/src/client/ClientContext.tsx +0 -182
  130. package/src/client/useClientServices.ts +0 -15
  131. package/src/testing/decorators.stories.tsx +0 -63
@@ -0,0 +1,131 @@
1
+ import {
2
+ useInvitationStatus
3
+ } from "../chunk-AL2CUQ46.mjs";
4
+ import {
5
+ useClient
6
+ } from "../chunk-ESSNDYBJ.mjs";
7
+
8
+ // packages/sdk/react-client/src/echo/index.ts
9
+ export * from "@dxos/client/echo";
10
+
11
+ // packages/sdk/react-client/src/echo/useMembers.ts
12
+ import { MulticastObservable } from "@dxos/async";
13
+ import { HaloSpaceMember } from "@dxos/client/echo";
14
+ import { useMulticastObservable as useMulticastObservable2 } from "@dxos/react-hooks";
15
+
16
+ // packages/sdk/react-client/src/echo/useSpaces.ts
17
+ import { useEffect, useState } from "react";
18
+ import { SpaceState } from "@dxos/client/echo";
19
+ import { useMulticastObservable } from "@dxos/react-hooks";
20
+ var useSpace = (spaceKeyLike) => {
21
+ const client = useClient();
22
+ const spaces = useMulticastObservable(client.spaces);
23
+ const [ready, setReady] = useState(false);
24
+ useEffect(() => {
25
+ if (spaceKeyLike) {
26
+ return;
27
+ }
28
+ const timeout = setTimeout(async () => {
29
+ await client.spaces.isReady.wait();
30
+ setReady(true);
31
+ });
32
+ return () => clearTimeout(timeout);
33
+ }, [
34
+ client,
35
+ spaceKeyLike
36
+ ]);
37
+ if (spaceKeyLike) {
38
+ return spaces.find((space) => space.key.equals(spaceKeyLike) || space.id === spaceKeyLike);
39
+ }
40
+ if (ready && client.halo.identity.get()) {
41
+ return client.spaces.default;
42
+ }
43
+ };
44
+ var useSpaces = ({ all = false } = {}) => {
45
+ const client = useClient();
46
+ const spaces = useMulticastObservable(client.spaces);
47
+ return spaces.filter((space) => all || space.state.get() === SpaceState.SPACE_READY);
48
+ };
49
+
50
+ // packages/sdk/react-client/src/echo/useMembers.ts
51
+ var useMembers = (spaceKey) => {
52
+ const spaces = useSpaces({
53
+ all: true
54
+ });
55
+ const space = spaceKey ? spaces.find((space2) => space2.key.equals(spaceKey)) : void 0;
56
+ const members = useMulticastObservable2(space?.members ?? MulticastObservable.empty()) ?? [];
57
+ return members.filter((member) => member.role !== HaloSpaceMember.Role.REMOVED);
58
+ };
59
+
60
+ // packages/sdk/react-client/src/echo/useQuery.ts
61
+ import { useMemo, useSyncExternalStore } from "react";
62
+ import { isSpace } from "@dxos/client/echo";
63
+ var useQuery = (spaceOrEcho, filter, options, deps) => {
64
+ const { subscribe, getObjects } = useMemo(() => {
65
+ const query = isSpace(spaceOrEcho) ? spaceOrEcho.db.query(filter, options) : spaceOrEcho?.query(filter, options);
66
+ let subscribed = false;
67
+ return {
68
+ subscribe: (cb) => {
69
+ subscribed = true;
70
+ const unsubscribe = query?.subscribe(cb) ?? noop;
71
+ return () => {
72
+ unsubscribe?.();
73
+ subscribed = false;
74
+ };
75
+ },
76
+ getObjects: () => subscribed && query ? query.objects : EMPTY_ARRAY
77
+ };
78
+ }, [
79
+ spaceOrEcho,
80
+ ...typeof filter === "function" ? [] : filterToDepsArray(filter),
81
+ ...deps ?? []
82
+ ]);
83
+ return useSyncExternalStore(subscribe, getObjects) ?? [];
84
+ };
85
+ var filterToDepsArray = (filter) => Object.entries(filter ?? {}).flat(10).map((x) => typeof x === "function" || typeof x === "object" ? null : x);
86
+ var noop = () => {
87
+ };
88
+ var EMPTY_ARRAY = [];
89
+
90
+ // packages/sdk/react-client/src/echo/useSpaceInvitations.ts
91
+ import { useMemo as useMemo2 } from "react";
92
+ import { MulticastObservable as MulticastObservable2 } from "@dxos/async";
93
+ import { useMulticastObservable as useMulticastObservable3 } from "@dxos/react-hooks";
94
+ var useSpaceInvitations = (spaceKey) => {
95
+ const space = useSpace(spaceKey);
96
+ return useMulticastObservable3(space?.invitations ?? MulticastObservable2.empty()) ?? [];
97
+ };
98
+ var useSpaceInvitation = (spaceKey, invitationId) => {
99
+ const invitations = useSpaceInvitations(spaceKey);
100
+ const invitation = useMemo2(() => invitations.find((invitation2) => invitation2.get().invitationId === invitationId), [
101
+ invitations
102
+ ]);
103
+ return useInvitationStatus(invitation);
104
+ };
105
+
106
+ // packages/sdk/react-client/src/echo/useSubscription.ts
107
+ import { useEffect as useEffect2, useRef } from "react";
108
+ import { createSubscription } from "@dxos/client/echo";
109
+ var useSubscription = (cb, selection) => {
110
+ const callbackRef = useRef(cb);
111
+ callbackRef.current = cb;
112
+ const subscriptionRef = useRef();
113
+ useEffect2(() => {
114
+ subscriptionRef.current = createSubscription(() => {
115
+ callbackRef.current();
116
+ });
117
+ return () => subscriptionRef.current?.unsubscribe();
118
+ }, []);
119
+ subscriptionRef.current?.update(selection);
120
+ return subscriptionRef.current;
121
+ };
122
+ export {
123
+ useMembers,
124
+ useQuery,
125
+ useSpace,
126
+ useSpaceInvitation,
127
+ useSpaceInvitations,
128
+ useSpaces,
129
+ useSubscription
130
+ };
131
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/echo/index.ts", "../../../../src/echo/useMembers.ts", "../../../../src/echo/useSpaces.ts", "../../../../src/echo/useQuery.ts", "../../../../src/echo/useSpaceInvitations.ts", "../../../../src/echo/useSubscription.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from '@dxos/client/echo';\n\nexport * from './useMembers';\nexport * from './useQuery';\nexport * from './useSpaces';\nexport * from './useSpaceInvitations';\nexport * from './useSubscription';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { MulticastObservable } from '@dxos/async';\nimport { type PublicKey } from '@dxos/client';\nimport { HaloSpaceMember, type SpaceMember } from '@dxos/client/echo';\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useSpaces } from './useSpaces';\n\nexport const useMembers = (spaceKey: PublicKey | undefined): SpaceMember[] => {\n // TODO(dmaretskyi): useSpace hook for spaces that are not ready.\n const spaces = useSpaces({ all: true });\n const space = spaceKey ? spaces.find((space) => space.key.equals(spaceKey)) : undefined;\n\n // EMPTY_OBSERVABLE needs to be a stable reference to avoid re-subscribing on every render.\n const members = useMulticastObservable(space?.members ?? MulticastObservable.empty()) ?? [];\n return members.filter((member) => member.role !== HaloSpaceMember.Role.REMOVED);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type PublicKeyLike } from '@dxos/client';\nimport { type Space, SpaceState } from '@dxos/client/echo';\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useClient } from '../client';\n\n/**\n * Get a specific Space using its key.\n * The space is not guaranteed to be in the ready state.\n * Returns the default space if no key is provided.\n * Requires a ClientProvider somewhere in the parent tree.\n *\n * @param spaceKeyLike the key of the space to look for\n */\nexport const useSpace = (spaceKeyLike?: PublicKeyLike): Space | undefined => {\n const client = useClient();\n const spaces = useMulticastObservable<Space[]>(client.spaces);\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n // Only wait for ready if looking for the default space.\n if (spaceKeyLike) {\n return;\n }\n\n const timeout = setTimeout(async () => {\n await client.spaces.isReady.wait();\n setReady(true);\n });\n\n return () => clearTimeout(timeout);\n }, [client, spaceKeyLike]);\n\n if (spaceKeyLike) {\n return spaces.find((space) => space.key.equals(spaceKeyLike) || space.id === spaceKeyLike);\n }\n\n if (ready && client.halo.identity.get()) {\n return client.spaces.default;\n }\n};\n\nexport type UseSpacesParams = {\n /**\n * Return uninitialized spaces as well.\n */\n all?: boolean;\n};\n\n/**\n * Get all Spaces available to current user.\n * Requires a ClientProvider somewhere in the parent tree.\n * By default, only ready spaces are returned.\n * @returns an array of Spaces\n */\nexport const useSpaces = ({ all = false }: UseSpacesParams = {}): Space[] => {\n const client = useClient();\n const spaces = useMulticastObservable<Space[]>(client.spaces);\n\n // TODO(dmaretskyi): Array reference equality.\n return spaces.filter((space) => all || space.state.get() === SpaceState.SPACE_READY);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useMemo, useSyncExternalStore } from 'react';\n\nimport {\n isSpace,\n type Echo,\n type EchoReactiveObject,\n type FilterSource,\n type Query,\n type QueryOptions,\n type Space,\n} from '@dxos/client/echo';\n\n/**\n * Create subscription.\n */\n// TODO(burdon): Support typed operator filters (e.g., Note.filter(note => ...)).\nexport const useQuery = <T extends EchoReactiveObject<any>>(\n spaceOrEcho?: Space | Echo,\n filter?: FilterSource<T>,\n options?: QueryOptions,\n deps?: any[],\n): T[] => {\n const { subscribe, getObjects } = useMemo(() => {\n const query = isSpace(spaceOrEcho)\n ? spaceOrEcho.db.query(filter, options)\n : (spaceOrEcho?.query(filter, options) as Query<T> | undefined);\n let subscribed = false;\n\n return {\n subscribe: (cb: () => void) => {\n subscribed = true;\n const unsubscribe = query?.subscribe(cb) ?? noop;\n return () => {\n unsubscribe?.();\n subscribed = false;\n };\n },\n getObjects: () => (subscribed && query ? query.objects : EMPTY_ARRAY),\n };\n }, [spaceOrEcho, ...(typeof filter === 'function' ? [] : filterToDepsArray(filter)), ...(deps ?? [])]);\n\n // https://beta.reactjs.org/reference/react/useSyncExternalStore\n // NOTE: This hook will resubscribe whenever the callback passed to the first argument changes -- make sure it is stable.\n return useSyncExternalStore<T[] | undefined>(subscribe, getObjects) ?? [];\n};\n\n// TODO(dmaretskyi): Serialize the filter here instead.\nconst filterToDepsArray = (filter?: FilterSource<any>) =>\n Object.entries(filter ?? {})\n .flat(10)\n .map((x) => (typeof x === 'function' || typeof x === 'object' ? null : x));\n\nconst noop = () => {};\n\nconst EMPTY_ARRAY: never[] = [];\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { MulticastObservable } from '@dxos/async';\nimport { type PublicKey } from '@dxos/client';\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useSpace } from './useSpaces';\nimport { type CancellableInvitationObservable, useInvitationStatus } from '../invitations';\n\nexport const useSpaceInvitations = (spaceKey?: PublicKey): CancellableInvitationObservable[] => {\n const space = useSpace(spaceKey);\n return useMulticastObservable(space?.invitations ?? MulticastObservable.empty()) ?? [];\n};\n\nexport const useSpaceInvitation = (spaceKey?: PublicKey, invitationId?: string) => {\n const invitations = useSpaceInvitations(spaceKey);\n const invitation = useMemo(\n () => invitations.find((invitation) => invitation.get().invitationId === invitationId),\n [invitations],\n );\n return useInvitationStatus(invitation);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useEffect, useRef } from 'react';\n\nimport { type Selection, type SubscriptionHandle, createSubscription } from '@dxos/client/echo';\n\n/**\n * Create reactive selection.\n * Calls the callback when the selection changes and during the first render.\n */\n// TODO(wittjosiah): Is this still needed with signals reactivity? If not, remove or update jsdoc with usage info.\nexport const useSubscription = (cb: () => void, selection: Selection) => {\n // Make sure that the callback is always the one from the latest render.\n // Without this, we would always call the callback from the initial render,\n // which might contain stale data.\n const callbackRef = useRef(cb);\n callbackRef.current = cb;\n\n const subscriptionRef = useRef<SubscriptionHandle>();\n\n useEffect(() => {\n subscriptionRef.current = createSubscription(() => {\n callbackRef.current();\n });\n\n return () => subscriptionRef.current?.unsubscribe();\n }, []);\n\n subscriptionRef.current?.update(selection);\n return subscriptionRef.current;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["MulticastObservable", "HaloSpaceMember", "useMulticastObservable", "useEffect", "useState", "SpaceState", "useMulticastObservable", "useSpace", "spaceKeyLike", "client", "useClient", "spaces", "useMulticastObservable", "ready", "setReady", "useState", "useEffect", "timeout", "setTimeout", "isReady", "wait", "clearTimeout", "find", "space", "key", "equals", "id", "halo", "identity", "get", "default", "useSpaces", "all", "filter", "state", "SpaceState", "SPACE_READY", "useMembers", "spaceKey", "spaces", "useSpaces", "all", "space", "find", "key", "equals", "undefined", "members", "useMulticastObservable", "MulticastObservable", "empty", "filter", "member", "role", "HaloSpaceMember", "Role", "REMOVED", "useMemo", "useSyncExternalStore", "isSpace", "useQuery", "spaceOrEcho", "filter", "options", "deps", "subscribe", "getObjects", "useMemo", "query", "isSpace", "db", "subscribed", "cb", "unsubscribe", "noop", "objects", "EMPTY_ARRAY", "filterToDepsArray", "useSyncExternalStore", "Object", "entries", "flat", "map", "x", "useMemo", "MulticastObservable", "useMulticastObservable", "useSpaceInvitations", "spaceKey", "space", "useSpace", "useMulticastObservable", "invitations", "MulticastObservable", "empty", "useSpaceInvitation", "invitationId", "invitation", "useMemo", "find", "get", "useInvitationStatus", "useEffect", "useRef", "createSubscription", "useSubscription", "cb", "selection", "callbackRef", "useRef", "current", "subscriptionRef", "useEffect", "createSubscription", "unsubscribe", "update"]
7
+ }
@@ -0,0 +1,99 @@
1
+ import {
2
+ useInvitationStatus
3
+ } from "../chunk-AL2CUQ46.mjs";
4
+ import {
5
+ useClient
6
+ } from "../chunk-ESSNDYBJ.mjs";
7
+
8
+ // packages/sdk/react-client/src/halo/index.ts
9
+ import { Device, DeviceKind, DeviceType } from "@dxos/client/halo";
10
+
11
+ // packages/sdk/react-client/src/halo/useContacts.ts
12
+ import { useMulticastObservable } from "@dxos/react-hooks";
13
+ var useContacts = () => {
14
+ const client = useClient();
15
+ return useMulticastObservable(client.halo.contacts);
16
+ };
17
+
18
+ // packages/sdk/react-client/src/halo/useDevices.ts
19
+ import { useMulticastObservable as useMulticastObservable2 } from "@dxos/react-hooks";
20
+ var useDevices = () => {
21
+ const client = useClient();
22
+ return useMulticastObservable2(client.halo.devices);
23
+ };
24
+
25
+ // packages/sdk/react-client/src/halo/useHaloInvitations.ts
26
+ import { useMemo } from "react";
27
+ import { useMulticastObservable as useMulticastObservable3 } from "@dxos/react-hooks";
28
+ var useHaloInvitations = () => {
29
+ const client = useClient();
30
+ return useMulticastObservable3(client.halo.invitations);
31
+ };
32
+ var useHaloInvitation = (invitationId) => {
33
+ const invitations = useHaloInvitations();
34
+ const invitation = useMemo(() => invitations.find((invitation2) => invitation2.get().invitationId === invitationId), [
35
+ invitations
36
+ ]);
37
+ return useInvitationStatus(invitation);
38
+ };
39
+
40
+ // packages/sdk/react-client/src/halo/useIdentity.ts
41
+ import { useMulticastObservable as useMulticastObservable4 } from "@dxos/react-hooks";
42
+ var useIdentity = () => {
43
+ const client = useClient();
44
+ return useMulticastObservable4(client.halo.identity);
45
+ };
46
+
47
+ // packages/sdk/react-client/src/halo/useKeyStore.ts
48
+ import { useMemo as useMemo2, useReducer } from "react";
49
+ var KeyStore = class {
50
+ constructor(_defaultKeys = []) {
51
+ this._defaultKeys = _defaultKeys;
52
+ this._keyMap = /* @__PURE__ */ new Map();
53
+ }
54
+ get map() {
55
+ return this._keyMap;
56
+ }
57
+ // TODO(burdon): Create subkeys.
58
+ initialize() {
59
+ this._defaultKeys.forEach((key) => {
60
+ const value = localStorage.getItem(key);
61
+ this.setKey(key, value ?? "");
62
+ });
63
+ return this;
64
+ }
65
+ getKey(key) {
66
+ localStorage.getItem(key);
67
+ }
68
+ setKey(key, value) {
69
+ localStorage.setItem(key, "");
70
+ this._keyMap.set(key, value);
71
+ }
72
+ };
73
+ var useKeyStore = (defaultKeys = []) => {
74
+ const [, forceUpdate] = useReducer((x) => x + 1, 0);
75
+ const store = useMemo2(() => new KeyStore(defaultKeys).initialize(), [
76
+ defaultKeys
77
+ ]);
78
+ const setKey = (key, value) => {
79
+ store.setKey(key, value);
80
+ forceUpdate();
81
+ };
82
+ return [
83
+ store.map,
84
+ setKey
85
+ ];
86
+ };
87
+ export {
88
+ Device,
89
+ DeviceKind,
90
+ DeviceType,
91
+ KeyStore,
92
+ useContacts,
93
+ useDevices,
94
+ useHaloInvitation,
95
+ useHaloInvitations,
96
+ useIdentity,
97
+ useKeyStore
98
+ };
99
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/halo/index.ts", "../../../../src/halo/useContacts.ts", "../../../../src/halo/useDevices.ts", "../../../../src/halo/useHaloInvitations.ts", "../../../../src/halo/useIdentity.ts", "../../../../src/halo/useKeyStore.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\n// NOTE: Export * fails here.\nexport { type Contact, type Identity, type Halo, Device, DeviceKind, DeviceType } from '@dxos/client/halo';\n\nexport * from './useContacts';\nexport * from './useDevices';\nexport * from './useHaloInvitations';\nexport * from './useIdentity';\nexport * from './useKeyStore';\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport type { Contact } from '@dxos/client/halo';\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useClient } from '../client';\n\n/**\n * Returns all known Contacts across all Spaces.\n * Contacts are known members of a common Space.\n * Requires ClientContext to be set via ClientProvider.\n */\nexport const useContacts = (): Contact[] => {\n const client = useClient();\n return useMulticastObservable(client.halo.contacts);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport type { Device } from '@dxos/client/halo';\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useClient } from '../client';\n\nexport const useDevices = (): Device[] => {\n const client = useClient();\n return useMulticastObservable(client.halo.devices);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useClient } from '../client';\nimport { useInvitationStatus, type CancellableInvitationObservable } from '../invitations';\n\nexport const useHaloInvitations = (): CancellableInvitationObservable[] => {\n const client = useClient();\n return useMulticastObservable(client.halo.invitations);\n};\n\nexport const useHaloInvitation = (invitationId?: string) => {\n const invitations = useHaloInvitations();\n const invitation = useMemo(\n () => invitations.find((invitation) => invitation.get().invitationId === invitationId),\n [invitations],\n );\n return useInvitationStatus(invitation);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { type Identity } from '@dxos/client/halo';\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useClient } from '../client';\n\n/**\n * Hook returning DXOS identity object.\n * Requires ClientContext to be set via ClientProvider.\n */\nexport const useIdentity = (): Identity | null => {\n const client = useClient();\n return useMulticastObservable(client.halo.identity);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMemo, useReducer } from 'react';\n\n// TODO(burdon): Move to settings plugin.\nexport class KeyStore {\n private _keyMap = new Map<string, string>();\n\n constructor(private readonly _defaultKeys: string[] = []) {}\n\n get map() {\n return this._keyMap;\n }\n\n // TODO(burdon): Create subkeys.\n initialize() {\n this._defaultKeys.forEach((key) => {\n const value = localStorage.getItem(key);\n this.setKey(key, value ?? '');\n });\n\n return this;\n }\n\n getKey(key: string) {\n localStorage.getItem(key);\n }\n\n setKey(key: string, value: string) {\n localStorage.setItem(key, '');\n this._keyMap.set(key, value);\n }\n}\n\n/**\n * Settings store.\n * @deprecated Replace with HALO key store when available.\n */\nexport const useKeyStore = (\n defaultKeys: string[] = [],\n): [Map<string, string>, (key: string, value: string) => void] => {\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n const store = useMemo(() => new KeyStore(defaultKeys).initialize(), [defaultKeys]);\n const setKey = (key: string, value: string) => {\n store.setKey(key, value);\n forceUpdate();\n };\n\n return [store.map, setKey];\n};\n"],
5
+ "mappings": ";;;;;;;;AAKA,SAAiDA,QAAQC,YAAYC,kBAAkB;;;ACAvF,SAASC,8BAA8B;AAShC,IAAMC,cAAc,MAAA;AACzB,QAAMC,SAASC,UAAAA;AACf,SAAOC,uBAAuBF,OAAOG,KAAKC,QAAQ;AACpD;;;ACZA,SAASC,0BAAAA,+BAA8B;AAIhC,IAAMC,aAAa,MAAA;AACxB,QAAMC,SAASC,UAAAA;AACf,SAAOC,wBAAuBF,OAAOG,KAAKC,OAAO;AACnD;;;ACRA,SAASC,eAAe;AAExB,SAASC,0BAAAA,+BAA8B;AAKhC,IAAMC,qBAAqB,MAAA;AAChC,QAAMC,SAASC,UAAAA;AACf,SAAOC,wBAAuBF,OAAOG,KAAKC,WAAW;AACvD;AAEO,IAAMC,oBAAoB,CAACC,iBAAAA;AAChC,QAAMF,cAAcL,mBAAAA;AACpB,QAAMQ,aAAaC,QACjB,MAAMJ,YAAYK,KAAK,CAACF,gBAAeA,YAAWG,IAAG,EAAGJ,iBAAiBA,YAAAA,GACzE;IAACF;GAAY;AAEf,SAAOO,oBAAoBJ,UAAAA;AAC7B;;;AClBA,SAASK,0BAAAA,+BAA8B;AAQhC,IAAMC,cAAc,MAAA;AACzB,QAAMC,SAASC,UAAAA;AACf,SAAOC,wBAAuBF,OAAOG,KAAKC,QAAQ;AACpD;;;ACZA,SAASC,WAAAA,UAASC,kBAAkB;AAG7B,IAAMC,WAAN,MAAMA;EAGXC,YAA6BC,eAAyB,CAAA,GAAI;SAA7BA,eAAAA;SAFrBC,UAAU,oBAAIC,IAAAA;EAEqC;EAE3D,IAAIC,MAAM;AACR,WAAO,KAAKF;EACd;;EAGAG,aAAa;AACX,SAAKJ,aAAaK,QAAQ,CAACC,QAAAA;AACzB,YAAMC,QAAQC,aAAaC,QAAQH,GAAAA;AACnC,WAAKI,OAAOJ,KAAKC,SAAS,EAAA;IAC5B,CAAA;AAEA,WAAO;EACT;EAEAI,OAAOL,KAAa;AAClBE,iBAAaC,QAAQH,GAAAA;EACvB;EAEAI,OAAOJ,KAAaC,OAAe;AACjCC,iBAAaI,QAAQN,KAAK,EAAA;AAC1B,SAAKL,QAAQY,IAAIP,KAAKC,KAAAA;EACxB;AACF;AAMO,IAAMO,cAAc,CACzBC,cAAwB,CAAA,MAAE;AAE1B,QAAM,CAAA,EAAGC,WAAAA,IAAeC,WAAW,CAACC,MAAMA,IAAI,GAAG,CAAA;AACjD,QAAMC,QAAQC,SAAQ,MAAM,IAAItB,SAASiB,WAAAA,EAAaX,WAAU,GAAI;IAACW;GAAY;AACjF,QAAML,SAAS,CAACJ,KAAaC,UAAAA;AAC3BY,UAAMT,OAAOJ,KAAKC,KAAAA;AAClBS,gBAAAA;EACF;AAEA,SAAO;IAACG,MAAMhB;IAAKO;;AACrB;",
6
+ "names": ["Device", "DeviceKind", "DeviceType", "useMulticastObservable", "useContacts", "client", "useClient", "useMulticastObservable", "halo", "contacts", "useMulticastObservable", "useDevices", "client", "useClient", "useMulticastObservable", "halo", "devices", "useMemo", "useMulticastObservable", "useHaloInvitations", "client", "useClient", "useMulticastObservable", "halo", "invitations", "useHaloInvitation", "invitationId", "invitation", "useMemo", "find", "get", "useInvitationStatus", "useMulticastObservable", "useIdentity", "client", "useClient", "useMulticastObservable", "halo", "identity", "useMemo", "useReducer", "KeyStore", "constructor", "_defaultKeys", "_keyMap", "Map", "map", "initialize", "forEach", "key", "value", "localStorage", "getItem", "setKey", "getKey", "setItem", "set", "useKeyStore", "defaultKeys", "forceUpdate", "useReducer", "x", "store", "useMemo"]
7
+ }
@@ -0,0 +1,32 @@
1
+ import {
2
+ AgentHostingContext,
3
+ AgentHostingProvider,
4
+ ClientContext,
5
+ ClientProvider,
6
+ useAgentHostingClient,
7
+ useClient,
8
+ useClientStatus,
9
+ useConfig,
10
+ useShell,
11
+ useShellDisplay,
12
+ useStatus
13
+ } from "./chunk-ESSNDYBJ.mjs";
14
+
15
+ // packages/sdk/react-client/src/index.ts
16
+ export * from "@dxos/client";
17
+ import { useMulticastObservable } from "@dxos/react-hooks";
18
+ export {
19
+ AgentHostingContext,
20
+ AgentHostingProvider,
21
+ ClientContext,
22
+ ClientProvider,
23
+ useAgentHostingClient,
24
+ useClient,
25
+ useClientStatus,
26
+ useConfig,
27
+ useMulticastObservable,
28
+ useShell,
29
+ useShellDisplay,
30
+ useStatus
31
+ };
32
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from '@dxos/client';\nexport { useMulticastObservable } from '@dxos/react-hooks';\n\nexport * from './client';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAIA,cAAc;AACd,SAASA,8BAA8B;",
6
+ "names": ["useMulticastObservable"]
7
+ }
@@ -0,0 +1,17 @@
1
+ import {
2
+ AuthenticatingInvitationObservable,
3
+ CancellableInvitationObservable,
4
+ Invitation,
5
+ InvitationEncoder,
6
+ InvitationsProxy,
7
+ useInvitationStatus
8
+ } from "../chunk-AL2CUQ46.mjs";
9
+ export {
10
+ AuthenticatingInvitationObservable,
11
+ CancellableInvitationObservable,
12
+ Invitation,
13
+ InvitationEncoder,
14
+ InvitationsProxy,
15
+ useInvitationStatus
16
+ };
17
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ import {
2
+ useClient
3
+ } from "../chunk-ESSNDYBJ.mjs";
4
+
5
+ // packages/sdk/react-client/src/mesh/index.ts
6
+ export * from "@dxos/client/mesh";
7
+
8
+ // packages/sdk/react-client/src/mesh/useNetworkStatus.ts
9
+ import { useMulticastObservable } from "@dxos/react-hooks";
10
+ var useNetworkStatus = () => {
11
+ const client = useClient();
12
+ return useMulticastObservable(client.mesh.networkStatus);
13
+ };
14
+ export {
15
+ useNetworkStatus
16
+ };
17
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/mesh/index.ts", "../../../../src/mesh/useNetworkStatus.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from '@dxos/client/mesh';\n\nexport * from './useNetworkStatus';\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { type NetworkStatus } from '@dxos/client/mesh';\nimport { useMulticastObservable } from '@dxos/react-hooks';\n\nimport { useClient } from '../client';\n\n/**\n * Creates a network status subscription.\n */\nexport const useNetworkStatus = (): NetworkStatus => {\n const client = useClient();\n return useMulticastObservable(client.mesh.networkStatus);\n};\n"],
5
+ "mappings": ";;;;;AAIA,cAAc;;;ACCd,SAASA,8BAA8B;AAOhC,IAAMC,mBAAmB,MAAA;AAC9B,QAAMC,SAASC,UAAAA;AACf,SAAOC,uBAAuBF,OAAOG,KAAKC,aAAa;AACzD;",
6
+ "names": ["useMulticastObservable", "useNetworkStatus", "client", "useClient", "useMulticastObservable", "mesh", "networkStatus"]
7
+ }
@@ -0,0 +1 @@
1
+ {"inputs":{"packages/sdk/react-client/src/client/AgentHostingProvider.tsx":{"bytes":7244,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/client/context.ts":{"bytes":1332,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/react-client/src/banner.ts":{"bytes":3710,"imports":[],"format":"esm"},"packages/sdk/react-client/src/client/ClientProvider.tsx":{"bytes":18455,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client","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/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/sdk/react-client/src/banner.ts","kind":"import-statement","original":"../banner"}],"format":"esm"},"packages/sdk/react-client/src/client/useClient.ts":{"bytes":1700,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/context.ts","kind":"import-statement","original":"../client/context"}],"format":"esm"},"packages/sdk/react-client/src/client/useClientStatus.ts":{"bytes":2030,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/react-client/src/client/useConfig.ts":{"bytes":1801,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"},"packages/sdk/react-client/src/client/useShell.ts":{"bytes":2397,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/useClient.ts","kind":"import-statement","original":"./useClient"}],"format":"esm"},"packages/sdk/react-client/src/client/useStatus.ts":{"bytes":1517,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"},"packages/sdk/react-client/src/client/index.ts":{"bytes":1203,"imports":[{"path":"packages/sdk/react-client/src/client/AgentHostingProvider.tsx","kind":"import-statement","original":"./AgentHostingProvider"},{"path":"packages/sdk/react-client/src/client/ClientProvider.tsx","kind":"import-statement","original":"./ClientProvider"},{"path":"packages/sdk/react-client/src/client/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/sdk/react-client/src/client/useClient.ts","kind":"import-statement","original":"./useClient"},{"path":"packages/sdk/react-client/src/client/useClientStatus.ts","kind":"import-statement","original":"./useClientStatus"},{"path":"packages/sdk/react-client/src/client/useConfig.ts","kind":"import-statement","original":"./useConfig"},{"path":"packages/sdk/react-client/src/client/useShell.ts","kind":"import-statement","original":"./useShell"},{"path":"packages/sdk/react-client/src/client/useStatus.ts","kind":"import-statement","original":"./useStatus"}],"format":"esm"},"packages/sdk/react-client/src/devtools/useDevtools.ts":{"bytes":1449,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/devtools/useStream.ts":{"bytes":2860,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/react-client/src/devtools/index.ts":{"bytes":729,"imports":[{"path":"@dxos/client/devtools","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/devtools/useDevtools.ts","kind":"import-statement","original":"./useDevtools"},{"path":"packages/sdk/react-client/src/devtools/useStream.ts","kind":"import-statement","original":"./useStream"}],"format":"esm"},"packages/sdk/react-client/src/echo/useSpaces.ts":{"bytes":6436,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/echo/useMembers.ts":{"bytes":3205,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/echo/useSpaces.ts","kind":"import-statement","original":"./useSpaces"}],"format":"esm"},"packages/sdk/react-client/src/echo/useQuery.ts":{"bytes":5775,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/react-client/src/invitations/useInvitationStatus.ts":{"bytes":20659,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/invitations","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/react-client/src/invitations/index.ts":{"bytes":1335,"imports":[{"path":"@dxos/client/invitations","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/invitations/useInvitationStatus.ts","kind":"import-statement","original":"./useInvitationStatus"}],"format":"esm"},"packages/sdk/react-client/src/echo/useSpaceInvitations.ts":{"bytes":3301,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/echo/useSpaces.ts","kind":"import-statement","original":"./useSpaces"},{"path":"packages/sdk/react-client/src/invitations/index.ts","kind":"import-statement","original":"../invitations"}],"format":"esm"},"packages/sdk/react-client/src/echo/useSubscription.ts":{"bytes":3588,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/react-client/src/echo/index.ts":{"bytes":1026,"imports":[{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/echo/useMembers.ts","kind":"import-statement","original":"./useMembers"},{"path":"packages/sdk/react-client/src/echo/useQuery.ts","kind":"import-statement","original":"./useQuery"},{"path":"packages/sdk/react-client/src/echo/useSpaces.ts","kind":"import-statement","original":"./useSpaces"},{"path":"packages/sdk/react-client/src/echo/useSpaceInvitations.ts","kind":"import-statement","original":"./useSpaceInvitations"},{"path":"packages/sdk/react-client/src/echo/useSubscription.ts","kind":"import-statement","original":"./useSubscription"}],"format":"esm"},"packages/sdk/react-client/src/halo/useContacts.ts":{"bytes":1762,"imports":[{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/halo/useDevices.ts":{"bytes":1341,"imports":[{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/halo/useHaloInvitations.ts":{"bytes":2785,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"},{"path":"packages/sdk/react-client/src/invitations/index.ts","kind":"import-statement","original":"../invitations"}],"format":"esm"},"packages/sdk/react-client/src/halo/useIdentity.ts":{"bytes":1632,"imports":[{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/halo/useKeyStore.ts":{"bytes":4664,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/react-client/src/halo/index.ts":{"bytes":1341,"imports":[{"path":"@dxos/client/halo","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/halo/useContacts.ts","kind":"import-statement","original":"./useContacts"},{"path":"packages/sdk/react-client/src/halo/useDevices.ts","kind":"import-statement","original":"./useDevices"},{"path":"packages/sdk/react-client/src/halo/useHaloInvitations.ts","kind":"import-statement","original":"./useHaloInvitations"},{"path":"packages/sdk/react-client/src/halo/useIdentity.ts","kind":"import-statement","original":"./useIdentity"},{"path":"packages/sdk/react-client/src/halo/useKeyStore.ts","kind":"import-statement","original":"./useKeyStore"}],"format":"esm"},"packages/sdk/react-client/src/index.ts":{"bytes":805,"imports":[{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"./client"}],"format":"esm"},"packages/sdk/react-client/src/mesh/useNetworkStatus.ts":{"bytes":1557,"imports":[{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/mesh/index.ts":{"bytes":633,"imports":[{"path":"@dxos/client/mesh","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/mesh/useNetworkStatus.ts","kind":"import-statement","original":"./useNetworkStatus"}],"format":"esm"},"packages/sdk/react-client/src/testing/ClientRepeater.tsx":{"bytes":11301,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/client/testing","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/testing/withClientProvider.tsx":{"bytes":14269,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react-error-boundary","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/testing","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/client/index.ts","kind":"import-statement","original":"../client"}],"format":"esm"},"packages/sdk/react-client/src/testing/index.ts":{"bytes":755,"imports":[{"path":"@dxos/client/testing","kind":"import-statement","external":true},{"path":"packages/sdk/react-client/src/testing/ClientRepeater.tsx","kind":"import-statement","original":"./ClientRepeater"},{"path":"packages/sdk/react-client/src/testing/withClientProvider.tsx","kind":"import-statement","original":"./withClientProvider"}],"format":"esm"},"packages/sdk/react-client/src/worker.ts":{"bytes":523,"imports":[{"path":"@dxos/client/worker","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/sdk/react-client/dist/lib/node-esm/devtools/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2284},"packages/sdk/react-client/dist/lib/node-esm/devtools/index.mjs":{"imports":[{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs","kind":"import-statement"},{"path":"@dxos/client/devtools","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["useDevtools","useStream"],"entryPoint":"packages/sdk/react-client/src/devtools/index.ts","inputs":{"packages/sdk/react-client/src/devtools/index.ts":{"bytesInOutput":39},"packages/sdk/react-client/src/devtools/useDevtools.ts":{"bytesInOutput":195},"packages/sdk/react-client/src/devtools/useStream.ts":{"bytesInOutput":690}},"bytes":1217},"packages/sdk/react-client/dist/lib/node-esm/echo/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11533},"packages/sdk/react-client/dist/lib/node-esm/echo/index.mjs":{"imports":[{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-AL2CUQ46.mjs","kind":"import-statement"},{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs","kind":"import-statement"},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true}],"exports":["useMembers","useQuery","useSpace","useSpaceInvitation","useSpaceInvitations","useSpaces","useSubscription"],"entryPoint":"packages/sdk/react-client/src/echo/index.ts","inputs":{"packages/sdk/react-client/src/echo/index.ts":{"bytesInOutput":35},"packages/sdk/react-client/src/echo/useMembers.ts":{"bytesInOutput":545},"packages/sdk/react-client/src/echo/useSpaces.ts":{"bytesInOutput":1011},"packages/sdk/react-client/src/echo/useQuery.ts":{"bytesInOutput":1033},"packages/sdk/react-client/src/echo/useSpaceInvitations.ts":{"bytesInOutput":677},"packages/sdk/react-client/src/echo/useSubscription.ts":{"bytesInOutput":519}},"bytes":4474},"packages/sdk/react-client/dist/lib/node-esm/halo/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6286},"packages/sdk/react-client/dist/lib/node-esm/halo/index.mjs":{"imports":[{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-AL2CUQ46.mjs","kind":"import-statement"},{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs","kind":"import-statement"},{"path":"@dxos/client/halo","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["Device","DeviceKind","DeviceType","KeyStore","useContacts","useDevices","useHaloInvitation","useHaloInvitations","useIdentity","useKeyStore"],"entryPoint":"packages/sdk/react-client/src/halo/index.ts","inputs":{"packages/sdk/react-client/src/halo/index.ts":{"bytesInOutput":68},"packages/sdk/react-client/src/halo/useContacts.ts":{"bytesInOutput":174},"packages/sdk/react-client/src/halo/useDevices.ts":{"bytesInOutput":200},"packages/sdk/react-client/src/halo/useHaloInvitations.ts":{"bytesInOutput":521},"packages/sdk/react-client/src/halo/useIdentity.ts":{"bytesInOutput":202},"packages/sdk/react-client/src/halo/useKeyStore.ts":{"bytesInOutput":928}},"bytes":2731},"packages/sdk/react-client/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":344},"packages/sdk/react-client/dist/lib/node-esm/index.mjs":{"imports":[{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs","kind":"import-statement"},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true}],"exports":["AgentHostingContext","AgentHostingProvider","ClientContext","ClientProvider","useAgentHostingClient","useClient","useClientStatus","useConfig","useMulticastObservable","useShell","useShellDisplay","useStatus"],"entryPoint":"packages/sdk/react-client/src/index.ts","inputs":{"packages/sdk/react-client/src/index.ts":{"bytesInOutput":90}},"bytes":636},"packages/sdk/react-client/dist/lib/node-esm/invitations/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/sdk/react-client/dist/lib/node-esm/invitations/index.mjs":{"imports":[{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-AL2CUQ46.mjs","kind":"import-statement"}],"exports":["AuthenticatingInvitationObservable","CancellableInvitationObservable","Invitation","InvitationEncoder","InvitationsProxy","useInvitationStatus"],"entryPoint":"packages/sdk/react-client/src/invitations/index.ts","inputs":{},"bytes":388},"packages/sdk/react-client/dist/lib/node-esm/chunk-AL2CUQ46.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11017},"packages/sdk/react-client/dist/lib/node-esm/chunk-AL2CUQ46.mjs":{"imports":[{"path":"@dxos/client/invitations","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client/invitations","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["AuthenticatingInvitationObservable","CancellableInvitationObservable","Invitation","InvitationEncoder","InvitationsProxy","useInvitationStatus"],"inputs":{"packages/sdk/react-client/src/invitations/index.ts":{"bytesInOutput":198},"packages/sdk/react-client/src/invitations/useInvitationStatus.ts":{"bytesInOutput":4678}},"bytes":5243},"packages/sdk/react-client/dist/lib/node-esm/mesh/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":935},"packages/sdk/react-client/dist/lib/node-esm/mesh/index.mjs":{"imports":[{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs","kind":"import-statement"},{"path":"@dxos/client/mesh","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true}],"exports":["useNetworkStatus"],"entryPoint":"packages/sdk/react-client/src/mesh/index.ts","inputs":{"packages/sdk/react-client/src/mesh/index.ts":{"bytesInOutput":35},"packages/sdk/react-client/src/mesh/useNetworkStatus.ts":{"bytesInOutput":184}},"bytes":445},"packages/sdk/react-client/dist/lib/node-esm/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":13638},"packages/sdk/react-client/dist/lib/node-esm/testing/index.mjs":{"imports":[{"path":"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs","kind":"import-statement"},{"path":"@dxos/client/testing","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/client/testing","kind":"import-statement","external":true},{"path":"@dxos/echo-signals/react","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-error-boundary","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/testing","kind":"import-statement","external":true}],"exports":["ClientRepeater","withClientProvider","withMultiClientProvider"],"entryPoint":"packages/sdk/react-client/src/testing/index.ts","inputs":{"packages/sdk/react-client/src/testing/index.ts":{"bytesInOutput":38},"packages/sdk/react-client/src/testing/ClientRepeater.tsx":{"bytesInOutput":2064},"packages/sdk/react-client/src/testing/withClientProvider.tsx":{"bytesInOutput":3311}},"bytes":5761},"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":19513},"packages/sdk/react-client/dist/lib/node-esm/chunk-ESSNDYBJ.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/client","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/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["AgentHostingContext","AgentHostingProvider","ClientContext","ClientProvider","useAgentHostingClient","useClient","useClientStatus","useConfig","useShell","useShellDisplay","useStatus"],"inputs":{"packages/sdk/react-client/src/client/AgentHostingProvider.tsx":{"bytesInOutput":1877},"packages/sdk/react-client/src/client/index.ts":{"bytesInOutput":0},"packages/sdk/react-client/src/client/ClientProvider.tsx":{"bytesInOutput":4039},"packages/sdk/react-client/src/client/context.ts":{"bytesInOutput":82},"packages/sdk/react-client/src/banner.ts":{"bytesInOutput":773},"packages/sdk/react-client/src/client/useClient.ts":{"bytesInOutput":211},"packages/sdk/react-client/src/client/useClientStatus.ts":{"bytesInOutput":398},"packages/sdk/react-client/src/client/useConfig.ts":{"bytesInOutput":245},"packages/sdk/react-client/src/client/useShell.ts":{"bytesInOutput":377},"packages/sdk/react-client/src/client/useStatus.ts":{"bytesInOutput":238}},"bytes":9114},"packages/sdk/react-client/dist/lib/node-esm/worker.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":206},"packages/sdk/react-client/dist/lib/node-esm/worker.mjs":{"imports":[{"path":"@dxos/client/worker","kind":"import-statement","external":true}],"exports":[],"entryPoint":"packages/sdk/react-client/src/worker.ts","inputs":{"packages/sdk/react-client/src/worker.ts":{"bytesInOutput":37}},"bytes":116}}}
@@ -0,0 +1,165 @@
1
+ import {
2
+ ClientProvider
3
+ } from "../chunk-ESSNDYBJ.mjs";
4
+
5
+ // packages/sdk/react-client/src/testing/index.ts
6
+ export * from "@dxos/client/testing";
7
+
8
+ // packages/sdk/react-client/src/testing/ClientRepeater.tsx
9
+ import React, { useState, useEffect, useRef } from "react";
10
+ import { Client } from "@dxos/client";
11
+ import { TestBuilder, performInvitation } from "@dxos/client/testing";
12
+ import { registerSignalFactory } from "@dxos/echo-signals/react";
13
+ import { faker } from "@dxos/random";
14
+ var ClientRepeater = (props) => {
15
+ const { component: Component, controls: Controls, count = 1, types, createIdentity, createSpace, onCreateSpace } = props;
16
+ if (props.registerSignalFactory ?? true) {
17
+ registerSignalFactory();
18
+ }
19
+ const [clients, setClients] = useState(props.clients ?? []);
20
+ const [spaceKey, setSpaceKey] = useState();
21
+ const testBuilder = useRef(new TestBuilder());
22
+ useEffect(() => {
23
+ const timeout = setTimeout(async () => {
24
+ const clients2 = [
25
+ ...Array(count)
26
+ ].map((_) => new Client({
27
+ services: testBuilder.current.createLocalClientServices()
28
+ }));
29
+ await Promise.all(clients2.map((client) => client.initialize()));
30
+ types && clients2.map((client) => client.addTypes(types));
31
+ if (createIdentity || createSpace) {
32
+ await Promise.all(clients2.map((client) => client.halo.createIdentity()));
33
+ }
34
+ if (createSpace) {
35
+ const space = await clients2[0].spaces.create({
36
+ name: faker.commerce.productName()
37
+ });
38
+ setSpaceKey(space.key);
39
+ await onCreateSpace?.(space);
40
+ await Promise.all(clients2.slice(1).flatMap((client) => performInvitation({
41
+ host: space,
42
+ guest: client.spaces
43
+ })));
44
+ }
45
+ setClients(clients2);
46
+ });
47
+ return () => clearTimeout(timeout);
48
+ }, []);
49
+ if (clients.length === 0) {
50
+ return null;
51
+ }
52
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, Controls && /* @__PURE__ */ React.createElement(Controls, {
53
+ clients
54
+ }), clients.map((client, index) => /* @__PURE__ */ React.createElement(ClientProvider, {
55
+ key: index,
56
+ client
57
+ }, /* @__PURE__ */ React.createElement(Component, {
58
+ id: index,
59
+ count: clients.length,
60
+ spaceKey,
61
+ ...props.args
62
+ }))));
63
+ };
64
+
65
+ // packages/sdk/react-client/src/testing/withClientProvider.tsx
66
+ import React2, { useRef as useRef2 } from "react";
67
+ import { ErrorBoundary } from "react-error-boundary";
68
+ import { Trigger } from "@dxos/async";
69
+ import { performInvitation as performInvitation2, TestBuilder as TestBuilder2 } from "@dxos/client/testing";
70
+ var initializeClient = async (client, { createIdentity, createSpace, onSpaceCreated, onInitialized }) => {
71
+ if (createIdentity) {
72
+ await client.halo.createIdentity();
73
+ }
74
+ let space;
75
+ if (createSpace) {
76
+ space = await client.spaces.create({
77
+ name: "Test Space"
78
+ });
79
+ await onSpaceCreated?.(client, space);
80
+ }
81
+ await onInitialized?.(client);
82
+ return space;
83
+ };
84
+ var withClientProvider = ({ createIdentity, createSpace, onSpaceCreated, onInitialized, ...props } = {}) => {
85
+ const handleInitialized = async (client) => {
86
+ await initializeClient(client, {
87
+ createIdentity,
88
+ createSpace,
89
+ onSpaceCreated,
90
+ onInitialized
91
+ });
92
+ };
93
+ return (Story) => /* @__PURE__ */ React2.createElement(ErrorBoundary, {
94
+ FallbackComponent: ErrorFallback
95
+ }, /* @__PURE__ */ React2.createElement(ClientProvider, {
96
+ onInitialized: handleInitialized,
97
+ ...props
98
+ }, /* @__PURE__ */ React2.createElement(Story, null)));
99
+ };
100
+ var withMultiClientProvider = ({ numClients = 2, createIdentity, createSpace, onSpaceCreated, onInitialized, ...props }) => {
101
+ return (Story) => {
102
+ const builder = useRef2(new TestBuilder2());
103
+ const hostRef = useRef2();
104
+ const spaceReady = useRef2(new Trigger());
105
+ const handleClientInitialized = async (client) => {
106
+ if (createSpace) {
107
+ if (!hostRef.current) {
108
+ hostRef.current = client;
109
+ const space = await initializeClient(client, {
110
+ createIdentity,
111
+ createSpace,
112
+ onSpaceCreated,
113
+ onInitialized
114
+ });
115
+ spaceReady.current.wake(space);
116
+ } else {
117
+ await initializeClient(client, {
118
+ createIdentity,
119
+ onInitialized
120
+ });
121
+ const space = await spaceReady.current.wait();
122
+ if (space) {
123
+ await Promise.all(performInvitation2({
124
+ host: space,
125
+ guest: client.spaces
126
+ }));
127
+ }
128
+ }
129
+ }
130
+ };
131
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, Array.from({
132
+ length: numClients
133
+ }).map((_, index) => /* @__PURE__ */ React2.createElement(ErrorBoundary, {
134
+ key: index,
135
+ FallbackComponent: ErrorFallback
136
+ }, /* @__PURE__ */ React2.createElement(ClientProvider, {
137
+ services: builder.current.createLocalClientServices(),
138
+ onInitialized: handleClientInitialized,
139
+ ...props
140
+ }, /* @__PURE__ */ React2.createElement(Story, null)))));
141
+ };
142
+ };
143
+ var ErrorFallback = ({ error }) => {
144
+ const { name, message, stack } = error instanceof Error ? error : {
145
+ name: "Error",
146
+ message: String(error),
147
+ stack: void 0
148
+ };
149
+ return /* @__PURE__ */ React2.createElement("div", {
150
+ role: "alert",
151
+ className: "flex flex-col gap-4"
152
+ }, /* @__PURE__ */ React2.createElement("h1", {
153
+ className: "text-xl text-red-500"
154
+ }, name), /* @__PURE__ */ React2.createElement("div", {
155
+ className: "text-lg"
156
+ }, message), stack && /* @__PURE__ */ React2.createElement("pre", {
157
+ className: "text-sm text-subdued"
158
+ }, stack));
159
+ };
160
+ export {
161
+ ClientRepeater,
162
+ withClientProvider,
163
+ withMultiClientProvider
164
+ };
165
+ //# sourceMappingURL=index.mjs.map