@dxos/client-services 0.1.41 → 0.1.45-next.45667d4

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 (164) hide show
  1. package/dist/lib/browser/{chunk-T73F4MV4.mjs → chunk-IHSMRQ3L.mjs} +985 -867
  2. package/dist/lib/browser/chunk-IHSMRQ3L.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +7 -3
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/packlets/testing/index.mjs +121 -297
  6. package/dist/lib/browser/packlets/testing/index.mjs.map +4 -4
  7. package/dist/lib/node/index.cjs +589 -469
  8. package/dist/lib/node/index.cjs.map +4 -4
  9. package/dist/lib/node/meta.json +1 -1
  10. package/dist/lib/node/packlets/testing/index.cjs +688 -740
  11. package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
  12. package/dist/types/src/index.d.ts +1 -0
  13. package/dist/types/src/index.d.ts.map +1 -1
  14. package/dist/types/src/packlets/devices/devices-service.d.ts +1 -1
  15. package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
  16. package/dist/types/src/packlets/devtools/devtools.d.ts +4 -2
  17. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  18. package/dist/types/src/packlets/devtools/keys.d.ts.map +1 -1
  19. package/dist/types/src/packlets/devtools/network.d.ts +5 -4
  20. package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
  21. package/dist/types/src/packlets/identity/authenticator.d.ts +1 -1
  22. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  23. package/dist/types/src/packlets/identity/identity-manager.d.ts +2 -4
  24. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  25. package/dist/types/src/packlets/identity/identity.d.ts +1 -1
  26. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  27. package/dist/types/src/packlets/invitations/invitation-extension.d.ts +2 -3
  28. package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
  29. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +1 -3
  30. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  31. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +1 -2
  32. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  33. package/dist/types/src/packlets/network/network-service.d.ts +6 -4
  34. package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
  35. package/dist/types/src/packlets/services/client-rpc-server.d.ts +2 -2
  36. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -1
  37. package/dist/types/src/packlets/services/index.d.ts +0 -1
  38. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  39. package/dist/types/src/packlets/services/local-client-services.d.ts +1 -1
  40. package/dist/types/src/packlets/services/local-client-services.d.ts.map +1 -1
  41. package/dist/types/src/packlets/services/service-context.d.ts +4 -2
  42. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  43. package/dist/types/src/packlets/services/service-host.d.ts +16 -9
  44. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  45. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +12 -7
  46. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  47. package/dist/types/src/packlets/spaces/data-space.d.ts +15 -10
  48. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  49. package/dist/types/src/packlets/spaces/genesis.d.ts +5 -0
  50. package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -0
  51. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +4 -4
  52. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  53. package/dist/types/src/packlets/spaces/spaces-service.d.ts +2 -1
  54. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  55. package/dist/types/src/packlets/system/system-service.d.ts +1 -1
  56. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  57. package/dist/types/src/packlets/testing/credential-utils.d.ts +1 -1
  58. package/dist/types/src/packlets/testing/index.d.ts +0 -1
  59. package/dist/types/src/packlets/testing/index.d.ts.map +1 -1
  60. package/dist/types/src/packlets/testing/invitation-utils.d.ts +13 -7
  61. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  62. package/dist/types/src/packlets/testing/test-builder.d.ts +35 -32
  63. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  64. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +1 -1
  65. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  66. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts +5 -2
  67. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
  68. package/dist/types/src/packlets/vault/vault-resource-lock.d.ts +1 -1
  69. package/dist/types/src/packlets/vault/vault-resource-lock.d.ts.map +1 -1
  70. package/dist/types/src/packlets/vault/worker-runtime.d.ts +1 -1
  71. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  72. package/dist/types/src/packlets/vault/worker-session.d.ts +4 -7
  73. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  74. package/package.json +30 -31
  75. package/src/index.ts +1 -0
  76. package/src/packlets/devices/devices-service.ts +5 -5
  77. package/src/packlets/devtools/devtools.ts +25 -4
  78. package/src/packlets/devtools/feeds.ts +10 -10
  79. package/src/packlets/devtools/keys.ts +6 -6
  80. package/src/packlets/devtools/network.ts +14 -13
  81. package/src/packlets/devtools/spaces.ts +4 -4
  82. package/src/packlets/identity/authenticator.test.ts +1 -1
  83. package/src/packlets/identity/authenticator.ts +2 -2
  84. package/src/packlets/identity/identity-manager.test.ts +17 -13
  85. package/src/packlets/identity/identity-manager.ts +21 -22
  86. package/src/packlets/identity/identity-service.ts +3 -3
  87. package/src/packlets/identity/identity.test.ts +65 -36
  88. package/src/packlets/identity/identity.ts +17 -17
  89. package/src/packlets/invitations/device-invitation-protocol.test.ts +1 -1
  90. package/src/packlets/invitations/device-invitation-protocol.ts +7 -7
  91. package/src/packlets/invitations/invitation-extension.ts +16 -27
  92. package/src/packlets/invitations/invitations-handler.ts +17 -25
  93. package/src/packlets/invitations/invitations-service.ts +11 -11
  94. package/src/packlets/invitations/space-invitation-protocol.test.ts +9 -9
  95. package/src/packlets/invitations/space-invitation-protocol.ts +11 -12
  96. package/src/packlets/logging/logging-service.ts +8 -3
  97. package/src/packlets/network/network-service.test.ts +8 -8
  98. package/src/packlets/network/network-service.ts +20 -8
  99. package/src/packlets/services/client-rpc-server.ts +5 -5
  100. package/src/packlets/services/index.ts +0 -1
  101. package/src/packlets/services/local-client-services.ts +1 -1
  102. package/src/packlets/services/service-context.test.ts +3 -3
  103. package/src/packlets/services/service-context.ts +26 -24
  104. package/src/packlets/services/service-host.test.ts +6 -6
  105. package/src/packlets/services/service-host.ts +57 -31
  106. package/src/packlets/services/service-registry.test.ts +20 -38
  107. package/src/packlets/spaces/data-space-manager.test.ts +17 -29
  108. package/src/packlets/spaces/data-space-manager.ts +29 -35
  109. package/src/packlets/spaces/data-space.ts +73 -47
  110. package/src/packlets/spaces/genesis.ts +81 -0
  111. package/src/packlets/spaces/notarization-plugin.test.ts +2 -2
  112. package/src/packlets/spaces/notarization-plugin.ts +12 -12
  113. package/src/packlets/spaces/spaces-service.test.ts +2 -2
  114. package/src/packlets/spaces/spaces-service.ts +21 -10
  115. package/src/packlets/storage/storage.ts +3 -3
  116. package/src/packlets/system/system-service.test.ts +1 -1
  117. package/src/packlets/system/system-service.ts +1 -1
  118. package/src/packlets/testing/credential-utils.ts +4 -4
  119. package/src/packlets/testing/index.ts +0 -1
  120. package/src/packlets/testing/invitation-utils.ts +28 -33
  121. package/src/packlets/testing/test-builder.ts +132 -168
  122. package/src/packlets/vault/iframe-host-runtime.ts +8 -11
  123. package/src/packlets/vault/iframe-proxy-runtime.ts +25 -9
  124. package/src/packlets/vault/shell-runtime.ts +4 -4
  125. package/src/packlets/vault/vault-resource-lock.ts +2 -2
  126. package/src/packlets/vault/worker-runtime.ts +7 -9
  127. package/src/packlets/vault/worker-session.ts +24 -45
  128. package/dist/lib/browser/chunk-T73F4MV4.mjs.map +0 -7
  129. package/dist/types/src/packlets/services/utils.d.ts +0 -7
  130. package/dist/types/src/packlets/services/utils.d.ts.map +0 -1
  131. package/dist/types/src/packlets/testing/host-test-builder.d.ts +0 -43
  132. package/dist/types/src/packlets/testing/host-test-builder.d.ts.map +0 -1
  133. package/dist/types/src/packlets/tests/client-services.test.d.ts +0 -2
  134. package/dist/types/src/packlets/tests/client-services.test.d.ts.map +0 -1
  135. package/dist/types/src/packlets/tests/client.test.d.ts +0 -2
  136. package/dist/types/src/packlets/tests/client.test.d.ts.map +0 -1
  137. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts +0 -2
  138. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts.map +0 -1
  139. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts +0 -2
  140. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts.map +0 -1
  141. package/dist/types/src/packlets/tests/halo-profile.test.d.ts +0 -2
  142. package/dist/types/src/packlets/tests/halo-profile.test.d.ts.map +0 -1
  143. package/dist/types/src/packlets/tests/invitations.test.d.ts +0 -2
  144. package/dist/types/src/packlets/tests/invitations.test.d.ts.map +0 -1
  145. package/dist/types/src/packlets/tests/shared-worker.test.d.ts +0 -2
  146. package/dist/types/src/packlets/tests/shared-worker.test.d.ts.map +0 -1
  147. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts +0 -2
  148. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts.map +0 -1
  149. package/dist/types/src/packlets/tests/spaces.test.d.ts +0 -2
  150. package/dist/types/src/packlets/tests/spaces.test.d.ts.map +0 -1
  151. package/dist/types/src/packlets/tests/text.test.d.ts +0 -2
  152. package/dist/types/src/packlets/tests/text.test.d.ts.map +0 -1
  153. package/src/packlets/services/utils.ts +0 -53
  154. package/src/packlets/testing/host-test-builder.ts +0 -163
  155. package/src/packlets/tests/client-services.test.ts +0 -222
  156. package/src/packlets/tests/client.test.ts +0 -140
  157. package/src/packlets/tests/halo-credentials.test.ts +0 -94
  158. package/src/packlets/tests/halo-persistent.test.ts +0 -53
  159. package/src/packlets/tests/halo-profile.test.ts +0 -48
  160. package/src/packlets/tests/invitations.test.ts +0 -389
  161. package/src/packlets/tests/shared-worker.test.ts +0 -92
  162. package/src/packlets/tests/spaces-invitations.test.ts +0 -46
  163. package/src/packlets/tests/spaces.test.ts +0 -147
  164. package/src/packlets/tests/text.test.ts +0 -206
@@ -1,206 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import * as fc from 'fast-check';
6
- import { ModelRunSetup } from 'fast-check';
7
- import waitForExpect from 'wait-for-expect';
8
-
9
- import { Client, Expando, Text } from '@dxos/client';
10
- import { PublicKey } from '@dxos/keys';
11
- import { log } from '@dxos/log';
12
- import { describe, test } from '@dxos/test';
13
- import { Doc } from '@dxos/text-model';
14
- import { ComplexMap, ComplexSet, range } from '@dxos/util';
15
-
16
- import { joinCommonSpace, TestBuilder } from '../testing';
17
-
18
- // log.config({ filter: 'text.test:debug,error' });
19
-
20
- const testBuilder = new TestBuilder();
21
- const initialContent = 'Hello, world!';
22
-
23
- type Model = {
24
- text: string;
25
- peers: ComplexSet<PublicKey>;
26
- };
27
-
28
- type Real = {
29
- spaceKey: PublicKey;
30
- peers: ComplexMap<PublicKey, Client>;
31
- };
32
-
33
- const assertState = async (model: Model, real: Real) => {
34
- // Wait for replication.
35
- await waitForExpect(() => {
36
- for (const [peerId, peer] of real.peers.entries()) {
37
- const space = peer.getSpace(real.spaceKey);
38
- if (space) {
39
- if (!model.peers.has(peerId)) {
40
- throw new Error(`Expected peer to not be in space: ${peerId.truncate()}`);
41
- }
42
-
43
- const [document] = space.db.query((obj) => !!obj.content).objects;
44
- const text = (document.content.doc as Doc).getText('utf8');
45
- if (text.toString() !== model.text) {
46
- throw new Error(
47
- `Text mismatch for peer ${peerId.truncate()}: ${JSON.stringify({ expected: model.text, actual: text })}`
48
- );
49
- }
50
- } else if (model.peers.has(peerId)) {
51
- throw new Error(`Expected peer to be in space: ${peerId.truncate()}`);
52
- }
53
- }
54
- }, 1000);
55
- };
56
-
57
- class CreatePeerCommand implements fc.AsyncCommand<Model, Real> {
58
- constructor(readonly peerId: PublicKey) {}
59
-
60
- check(model: Model) {
61
- return model.peers.size === 0 || !model.peers.has(this.peerId);
62
- }
63
-
64
- async run(model: Model, real: Real) {
65
- log.debug('run', { command: this.toString() });
66
- model.peers.add(this.peerId);
67
-
68
- // TODO(wittjosiah): Too many steps to creat client.
69
- const services = testBuilder.createClientServicesHost();
70
- await services.open();
71
- const [client, server] = testBuilder.createClientServer(services);
72
- void server.open();
73
- await client.initialize();
74
- await client.halo.createIdentity();
75
- if (real.peers.size === 0) {
76
- const space = await client.createSpace();
77
- const content = new Text();
78
- content.doc?.getText('utf8').insert(0, initialContent);
79
- await space.db.add(new Expando({ content }));
80
- real.spaceKey = space.key;
81
- } else {
82
- const host = Array.from(real.peers.values())[0];
83
- await joinCommonSpace([host!, client], real.spaceKey);
84
- }
85
- real.peers.set(this.peerId, client);
86
-
87
- await assertState(model, real);
88
- }
89
-
90
- toString() {
91
- return `CreatePeer(peer=${this.peerId.truncate()})`;
92
- }
93
- }
94
-
95
- // TODO(wittjosiah)
96
- // class OfflineMemberCommand implements fc.AsyncCommand<Model, Real> {
97
- // constructor(readonly peer: Client) {}
98
- // }
99
-
100
- // TODO(wittjosiah)
101
- // class OnlineMemberCommand implements fc.AsyncCommand<Model, Real> {
102
- // constructor(readonly peer: Client) {}
103
- // }
104
-
105
- class InsertTextCommand implements fc.AsyncCommand<Model, Real> {
106
- constructor(readonly peerId: PublicKey, readonly index: number, readonly text: string) {}
107
-
108
- check(model: Model) {
109
- return model.peers.has(this.peerId) && model.text.length >= this.index;
110
- }
111
-
112
- async run(model: Model, real: Real) {
113
- log.debug('run', { command: this.toString() });
114
- model.text = model.text.slice(0, this.index) + this.text + model.text.slice(this.index);
115
-
116
- const peer = real.peers.get(this.peerId);
117
- const space = peer!.getSpace(real.spaceKey)!;
118
- const [document] = space.db.query((obj) => !!obj.content).objects;
119
- const text = (document.content.doc as Doc).getText('utf8');
120
- text.insert(this.index, this.text);
121
-
122
- await assertState(model, real);
123
- }
124
-
125
- toString() {
126
- const text = this.text.length > 10 ? `${this.text.slice(0, 10)}...` : this.text;
127
- return `InsertText(peer=${this.peerId.truncate()}, index=${this.index}, text=${text})`;
128
- }
129
- }
130
-
131
- class RemoveTextCommand implements fc.AsyncCommand<Model, Real> {
132
- constructor(readonly peerId: PublicKey, readonly index: number, readonly length: number) {}
133
-
134
- check(model: Model) {
135
- return model.peers.has(this.peerId) && model.text.length > this.index + this.length;
136
- }
137
-
138
- async run(model: Model, real: Real) {
139
- log.debug('run', { command: this.toString() });
140
- model.text = model.text.slice(0, this.index) + model.text.slice(this.index + this.length);
141
-
142
- const peer = real.peers.get(this.peerId);
143
- const space = peer!.getSpace(real.spaceKey)!;
144
- const [document] = space.db.query((obj) => !!obj.content).objects;
145
- const text = (document.content.doc as Doc).getText('utf8');
146
- text.delete(this.index, this.length);
147
-
148
- await assertState(model, real);
149
- }
150
-
151
- toString() {
152
- return `RemoveText(peer=${this.peerId.truncate()}, index=${this.index}, length=${this.length})`;
153
- }
154
- }
155
-
156
- describe('Client text replication', () => {
157
- test('property-based tests', async () => {
158
- // TODO(wittjosiah): Increasing to 5 causes failures.
159
- const peerIds = range(3).map(() => PublicKey.random());
160
- const peerId = fc.constantFrom(...peerIds);
161
-
162
- const allCommands = [
163
- peerId.map((peerId) => new CreatePeerCommand(peerId)),
164
- fc
165
- .tuple(peerId, fc.integer({ min: 0, max: 100 }), fc.unicodeString())
166
- .map(([peerId, index, text]) => new InsertTextCommand(peerId, index, text)),
167
- fc
168
- .tuple(peerId, fc.integer({ min: 0, max: 100 }), fc.integer({ min: 1, max: 10 }))
169
- .map(([peerId, index, length]) => new RemoveTextCommand(peerId, index, length))
170
- ];
171
- const commands = fc.commands(allCommands, { size: 'medium' });
172
-
173
- const model = fc.asyncProperty(commands, async (commands) => {
174
- const peers = new ComplexMap<PublicKey, Client>(PublicKey.hash);
175
- const setup: ModelRunSetup<Model, Real> = () => ({
176
- model: {
177
- text: initialContent,
178
- peers: new ComplexSet<PublicKey>(PublicKey.hash)
179
- },
180
- real: {
181
- spaceKey: PublicKey.random(),
182
- peers
183
- }
184
- });
185
-
186
- await fc.asyncModelRun(setup, commands);
187
-
188
- await Promise.all(Array.from(peers.values()).map((peer) => peer.destroy()));
189
- });
190
-
191
- const examples: [commands: Iterable<fc.AsyncCommand<Model, Real, boolean>>][] = [
192
- [
193
- [
194
- new CreatePeerCommand(peerIds[0]),
195
- new CreatePeerCommand(peerIds[1]),
196
- new RemoveTextCommand(peerIds[0], 7, 5),
197
- new InsertTextCommand(peerIds[1], 7, 'DXOS')
198
- ]
199
- ]
200
- ];
201
-
202
- await fc.assert(model, { examples });
203
- })
204
- .onlyEnvironments('node')
205
- .timeout(300_000);
206
- });