@dxos/client-services 0.6.13-main.ed424a1 → 0.6.13

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 (132) hide show
  1. package/dist/lib/browser/{chunk-IPWEAPT2.mjs → chunk-CRXXOI45.mjs} +5186 -6222
  2. package/dist/lib/browser/chunk-CRXXOI45.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3 -7
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +7 -12
  7. package/dist/lib/browser/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-DJIOUOAF.cjs → chunk-PZ3JJJ3K.cjs} +5137 -6167
  9. package/dist/lib/node/chunk-PZ3JJJ3K.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +46 -50
  11. package/dist/lib/node/index.cjs.map +3 -3
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +13 -18
  14. package/dist/lib/node/testing/index.cjs.map +3 -3
  15. package/dist/types/src/index.d.ts +0 -1
  16. package/dist/types/src/index.d.ts.map +1 -1
  17. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -1
  18. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  19. package/dist/types/src/packlets/identity/authenticator.test.d.ts +2 -0
  20. package/dist/types/src/packlets/identity/authenticator.test.d.ts.map +1 -0
  21. package/dist/types/src/packlets/identity/contacts-service.d.ts +1 -1
  22. package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -1
  23. package/dist/types/src/packlets/identity/identity-manager.d.ts +9 -25
  24. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  25. package/dist/types/src/packlets/identity/identity.d.ts +3 -12
  26. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  27. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
  28. package/dist/types/src/packlets/invitations/invitation-guest-extenstion.d.ts +1 -2
  29. package/dist/types/src/packlets/invitations/invitation-guest-extenstion.d.ts.map +1 -1
  30. package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts +1 -2
  31. package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts.map +1 -1
  32. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +8 -8
  33. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  34. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  35. package/dist/types/src/packlets/services/automerge-host.test.d.ts +2 -0
  36. package/dist/types/src/packlets/services/automerge-host.test.d.ts.map +1 -0
  37. package/dist/types/src/packlets/services/service-context.d.ts +9 -12
  38. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  39. package/dist/types/src/packlets/services/service-host.d.ts +0 -1
  40. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  41. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +3 -7
  42. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  43. package/dist/types/src/packlets/spaces/data-space.d.ts +3 -5
  44. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  45. package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts +0 -3
  46. package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts.map +1 -1
  47. package/dist/types/src/packlets/spaces/epoch-migrations.d.ts +1 -1
  48. package/dist/types/src/packlets/spaces/epoch-migrations.d.ts.map +1 -1
  49. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +6 -35
  50. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  51. package/dist/types/src/packlets/spaces/spaces-service.d.ts +1 -1
  52. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  53. package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
  54. package/dist/types/src/packlets/testing/test-builder.d.ts +2 -1
  55. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  56. package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
  57. package/dist/types/src/version.d.ts +1 -1
  58. package/dist/types/src/version.d.ts.map +1 -1
  59. package/package.json +39 -43
  60. package/src/index.ts +0 -1
  61. package/src/packlets/devices/devices-service.test.ts +5 -4
  62. package/src/packlets/diagnostics/diagnostics-broadcast.ts +0 -1
  63. package/src/packlets/identity/{authenticator.node.test.ts → authenticator.test.ts} +3 -2
  64. package/src/packlets/identity/authenticator.ts +2 -5
  65. package/src/packlets/identity/contacts-service.ts +1 -1
  66. package/src/packlets/identity/identity-manager.test.ts +16 -31
  67. package/src/packlets/identity/identity-manager.ts +31 -47
  68. package/src/packlets/identity/identity-service.test.ts +8 -4
  69. package/src/packlets/identity/identity.test.ts +239 -130
  70. package/src/packlets/identity/identity.ts +17 -60
  71. package/src/packlets/invitations/device-invitation-protocol.test.ts +4 -7
  72. package/src/packlets/invitations/device-invitation-protocol.ts +1 -5
  73. package/src/packlets/invitations/invitation-guest-extenstion.ts +4 -8
  74. package/src/packlets/invitations/invitation-host-extension.ts +7 -8
  75. package/src/packlets/invitations/invitations-handler.test.ts +9 -16
  76. package/src/packlets/invitations/invitations-handler.ts +93 -23
  77. package/src/packlets/invitations/space-invitation-protocol.test.ts +3 -4
  78. package/src/packlets/invitations/space-invitation-protocol.ts +0 -4
  79. package/src/packlets/logging/logging.test.ts +2 -1
  80. package/src/packlets/network/network-service.test.ts +3 -2
  81. package/src/packlets/services/automerge-host.test.ts +60 -0
  82. package/src/packlets/services/service-context.test.ts +1 -3
  83. package/src/packlets/services/service-context.ts +37 -104
  84. package/src/packlets/services/service-host.test.ts +12 -8
  85. package/src/packlets/services/service-host.ts +6 -16
  86. package/src/packlets/services/service-registry.test.ts +2 -1
  87. package/src/packlets/spaces/data-space-manager.test.ts +2 -2
  88. package/src/packlets/spaces/data-space-manager.ts +7 -44
  89. package/src/packlets/spaces/data-space.ts +6 -37
  90. package/src/packlets/spaces/edge-feed-replicator.ts +22 -80
  91. package/src/packlets/spaces/epoch-migrations.ts +2 -2
  92. package/src/packlets/spaces/notarization-plugin.test.ts +7 -10
  93. package/src/packlets/spaces/notarization-plugin.ts +29 -196
  94. package/src/packlets/spaces/spaces-service.test.ts +9 -5
  95. package/src/packlets/spaces/spaces-service.ts +1 -6
  96. package/src/packlets/storage/storage.ts +1 -0
  97. package/src/packlets/system/system-service.test.ts +2 -1
  98. package/src/packlets/testing/test-builder.ts +4 -7
  99. package/src/packlets/worker/worker-runtime.ts +2 -2
  100. package/src/version.ts +5 -1
  101. package/dist/lib/browser/chunk-IPWEAPT2.mjs.map +0 -7
  102. package/dist/lib/node/chunk-DJIOUOAF.cjs.map +0 -7
  103. package/dist/lib/node-esm/chunk-MMU5KC57.mjs +0 -8752
  104. package/dist/lib/node-esm/chunk-MMU5KC57.mjs.map +0 -7
  105. package/dist/lib/node-esm/index.mjs +0 -420
  106. package/dist/lib/node-esm/index.mjs.map +0 -7
  107. package/dist/lib/node-esm/meta.json +0 -1
  108. package/dist/lib/node-esm/testing/index.mjs +0 -424
  109. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  110. package/dist/types/src/packlets/agents/edge-agent-manager.d.ts +0 -35
  111. package/dist/types/src/packlets/agents/edge-agent-manager.d.ts.map +0 -1
  112. package/dist/types/src/packlets/agents/edge-agent-service.d.ts +0 -10
  113. package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +0 -1
  114. package/dist/types/src/packlets/agents/index.d.ts +0 -3
  115. package/dist/types/src/packlets/agents/index.d.ts.map +0 -1
  116. package/dist/types/src/packlets/identity/authenticator.node.test.d.ts +0 -2
  117. package/dist/types/src/packlets/identity/authenticator.node.test.d.ts.map +0 -1
  118. package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts +0 -30
  119. package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts.map +0 -1
  120. package/dist/types/src/packlets/invitations/invitation-state.d.ts +0 -19
  121. package/dist/types/src/packlets/invitations/invitation-state.d.ts.map +0 -1
  122. package/dist/types/src/packlets/spaces/edge-feed-replicator.test.d.ts +0 -2
  123. package/dist/types/src/packlets/spaces/edge-feed-replicator.test.d.ts.map +0 -1
  124. package/dist/types/src/testing/setup.d.ts +0 -3
  125. package/dist/types/src/testing/setup.d.ts.map +0 -1
  126. package/src/packlets/agents/edge-agent-manager.ts +0 -163
  127. package/src/packlets/agents/edge-agent-service.ts +0 -42
  128. package/src/packlets/agents/index.ts +0 -6
  129. package/src/packlets/invitations/edge-invitation-handler.ts +0 -185
  130. package/src/packlets/invitations/invitation-state.ts +0 -111
  131. package/src/packlets/spaces/edge-feed-replicator.test.ts +0 -252
  132. package/src/testing/setup.ts +0 -11
@@ -1,252 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { decode as decodeCbor, encode as encodeCbor } from 'cbor-x';
6
- import { getPort } from 'get-port-please';
7
- import { describe, expect, onTestFinished, test, vi } from 'vitest';
8
-
9
- import { sleep, Trigger } from '@dxos/async';
10
- import { Context } from '@dxos/context';
11
- import { valueEncoding } from '@dxos/echo-pipeline';
12
- import { createEphemeralEdgeIdentity, EdgeClient, EdgeIdentityChangedError } from '@dxos/edge-client';
13
- import { createTestEdgeWsServer } from '@dxos/edge-client/testing';
14
- import { FeedFactory, FeedStore, type FeedWrapper } from '@dxos/feed-store';
15
- import { Keyring } from '@dxos/keyring';
16
- import { SpaceId } from '@dxos/keys';
17
- import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
18
- import { createStorage } from '@dxos/random-access-storage';
19
- import { openAndClose } from '@dxos/test-utils';
20
- import { Timeframe } from '@dxos/timeframe';
21
- import { range } from '@dxos/util';
22
-
23
- import { EdgeFeedReplicator } from './edge-feed-replicator';
24
-
25
- describe('EdgeFeedReplicator', () => {
26
- test('requests metadata after connection is open', async () => {
27
- const { endpoint, admitConnection, messageSink } = await createEdge();
28
- const { messenger, sendSpy } = await createClient(endpoint);
29
-
30
- await attachReplicator(messenger);
31
-
32
- await sleep(50);
33
-
34
- expect(sendSpy).not.toHaveBeenCalled();
35
- expect(messageSink.length).toEqual(0);
36
-
37
- admitConnection.wake();
38
- await expect.poll(() => sendSpy.mock.calls.length).toEqual(1);
39
- expect(messageSink.length).toEqual(1);
40
- expect(messageSink[0].type).toEqual('get-metadata');
41
- });
42
-
43
- test('replicates if added to a connected client', async () => {
44
- const { endpoint, admitConnection, messageSink } = await createEdge();
45
- const { messenger } = await createClient(endpoint);
46
- admitConnection.wake();
47
- await expect.poll(() => messenger.isConnected).toBeTruthy();
48
-
49
- await attachReplicator(messenger);
50
- await expect.poll(() => messageSink.length).toEqual(1);
51
- });
52
-
53
- test('sends a block', async () => {
54
- const { endpoint, admitConnection, messageSink } = await createEdge();
55
- const { messenger } = await createClient(endpoint);
56
-
57
- const { feed } = await attachReplicator(messenger);
58
-
59
- admitConnection.wake();
60
- await appendMessage(feed);
61
-
62
- await expect.poll(() => messageSink.length).toEqual(2);
63
- expect(messageSink[1].type).toEqual('data');
64
- });
65
-
66
- test('re-requests metadata on reconnect', async () => {
67
- const { endpoint, admitConnection, messageSink } = await createEdge();
68
- const { messenger } = await createClient(endpoint);
69
-
70
- await attachReplicator(messenger);
71
-
72
- admitConnection.wake();
73
- await expect.poll(() => messageSink.length).toEqual(1);
74
-
75
- await updateIdentity(messenger);
76
- await messenger.reconnect.waitForCount(1);
77
-
78
- await expect.poll(() => messageSink.length).toEqual(2);
79
- expect(messageSink[1].type).toEqual('get-metadata');
80
- });
81
-
82
- test('recovers after query sending failure during identity change', async () => {
83
- const { endpoint, admitConnection, messageSink } = await createEdge();
84
- const { messenger, sendSpy } = await createClient(endpoint);
85
-
86
- await attachReplicator(messenger);
87
-
88
- sendSpy.mockImplementationOnce(() => {
89
- throw new EdgeIdentityChangedError(); // Hard to mock the exact race condition for when this error is thrown
90
- });
91
- admitConnection.wake();
92
-
93
- await expect.poll(() => sendSpy.mock.calls.length).toEqual(1);
94
- expect(messageSink.length).toEqual(0);
95
- await updateIdentity(messenger);
96
-
97
- await expect.poll(() => messageSink.length).toEqual(1);
98
- expect(messageSink[0].type).toEqual('get-metadata');
99
- });
100
-
101
- test('recovers after response sending failure during identity change', async () => {
102
- const { endpoint, admitConnection, messageSink, sendResponseMessage } = await createEdge();
103
- const { messenger, sendSpy } = await createClient(endpoint);
104
-
105
- const { feed } = await attachReplicator(messenger);
106
- await appendMessage(feed);
107
-
108
- sendSpy.mockImplementationOnce(async (request: any) => {
109
- sendResponseMessage(request, encodeCbor({ type: 'metadata', feedKey: feed.key.toHex(), length: 0 }));
110
- return Promise.resolve();
111
- });
112
- sendSpy.mockImplementationOnce(async () => {
113
- throw new EdgeIdentityChangedError();
114
- });
115
- admitConnection.wake();
116
-
117
- await expect.poll(() => sendSpy.mock.calls.length).toEqual(2);
118
- sendSpy.mockRestore();
119
- expect(messageSink.length).toEqual(0);
120
- await updateIdentity(messenger);
121
-
122
- await messenger.reconnect.waitForCount(1);
123
- await expect.poll(() => messageSink.find((msg) => msg.type === 'data')).toBeDefined();
124
- });
125
-
126
- test('propagates errors unrelated to reconnect', async () => {
127
- const { endpoint, admitConnection } = await createEdge();
128
- const { messenger, sendSpy } = await createClient(endpoint);
129
-
130
- const { replicator } = await attachReplicator(messenger, { skipOpen: true });
131
- const raised = new Trigger();
132
- await replicator.open(new Context({ onError: () => raised.wake() }));
133
- onTestFinished(async () => {
134
- await replicator.close();
135
- });
136
-
137
- sendSpy.mockImplementationOnce(() => {
138
- throw new Error();
139
- });
140
- admitConnection.wake();
141
-
142
- await raised.wait();
143
- });
144
-
145
- test('identity update before connected', async () => {
146
- const { endpoint, admitConnection, messageSink } = await createEdge();
147
- const { messenger } = await createClient(endpoint);
148
-
149
- await attachReplicator(messenger);
150
- await updateIdentity(messenger);
151
- await sleep(100);
152
- admitConnection.wake();
153
-
154
- await expect.poll(() => messageSink.length).toEqual(2);
155
- expect(messageSink.map((m) => m.type)).toStrictEqual(range(2, () => 'get-metadata'));
156
- });
157
-
158
- test('block appended during reconnect', async () => {
159
- const { endpoint, admitConnection, feedLength } = await createEdge();
160
- const { messenger } = await createClient(endpoint);
161
-
162
- const { feed } = await attachReplicator(messenger);
163
- admitConnection.wake();
164
- await sleep(10);
165
-
166
- admitConnection.reset();
167
- await updateIdentity(messenger);
168
- await appendMessage(feed);
169
- await sleep(20);
170
- admitConnection.wake();
171
-
172
- await expect.poll(() => feedLength()).toEqual(1);
173
- });
174
-
175
- test('reconnect during block append', async () => {
176
- const { endpoint, admitConnection, feedLength } = await createEdge();
177
- const { messenger } = await createClient(endpoint);
178
-
179
- const { feed } = await attachReplicator(messenger);
180
- admitConnection.wake();
181
- await sleep(10);
182
-
183
- void appendMessage(feed);
184
- await updateIdentity(messenger);
185
-
186
- await expect.poll(() => feedLength()).toEqual(1);
187
- });
188
-
189
- const createEdge = async () => {
190
- const port = await getPort({ host: 'localhost', port: 7200, portRange: [7200, 7299] });
191
- let lastBlockIndex = -1;
192
- const admitConnection = new Trigger();
193
- const { cleanup, endpoint, messageSink, sendResponseMessage } = await createTestEdgeWsServer(port, {
194
- admitConnection,
195
- payloadDecoder: decodeCbor,
196
- messageHandler: async (message: any) => {
197
- if (message.type === 'get-metadata') {
198
- return encodeCbor({ type: 'metadata', feedKey: message.feedKey, length: lastBlockIndex + 1 });
199
- } else {
200
- lastBlockIndex = Math.max(lastBlockIndex, message.blocks[message.blocks.length - 1].index);
201
- }
202
- },
203
- });
204
- onTestFinished(cleanup);
205
-
206
- return {
207
- endpoint,
208
- messageSink,
209
- admitConnection,
210
- sendResponseMessage,
211
- feedLength: () => lastBlockIndex + 1,
212
- };
213
- };
214
-
215
- const createClient = async (endpoint: string) => {
216
- const messenger = new EdgeClient(await createEphemeralEdgeIdentity(), { socketEndpoint: endpoint });
217
- const sendSpy = vi.spyOn(messenger, 'send');
218
- await openAndClose(messenger);
219
- return { messenger, sendSpy };
220
- };
221
-
222
- const attachReplicator = async (messenger: EdgeClient, options?: { skipOpen?: boolean }) => {
223
- const spaceId = SpaceId.random();
224
- const feed = await createNewFeed();
225
- const replicator = new EdgeFeedReplicator({ messenger, spaceId });
226
- await replicator.addFeed(feed);
227
- if (!options?.skipOpen) {
228
- await openAndClose(replicator);
229
- }
230
- return { feed, replicator };
231
- };
232
-
233
- const createNewFeed = async () => {
234
- const storage = createStorage();
235
- const keyring = new Keyring();
236
- const feedStore = new FeedStore<FeedMessage>({
237
- factory: new FeedFactory<FeedMessage>({
238
- root: storage.createDirectory(),
239
- signer: keyring,
240
- hypercore: { valueEncoding },
241
- }),
242
- });
243
- onTestFinished(() => feedStore.close());
244
- return feedStore.openFeed(await keyring.createKey(), { writable: true });
245
- };
246
-
247
- const updateIdentity = async (messenger: EdgeClient) => {
248
- messenger.setIdentity(await createEphemeralEdgeIdentity());
249
- };
250
-
251
- const appendMessage = (feed: FeedWrapper<FeedMessage>) => feed.append({ timeframe: new Timeframe() });
252
- });
@@ -1,11 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { runTestSignalServer } from '@dxos/signal';
6
-
7
- const port = 12004;
8
-
9
- export default async () => {
10
- await runTestSignalServer({ port, killExisting: true });
11
- };