@weaveprotocol/core 0.1.2 → 0.2.0

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 (183) hide show
  1. package/README.md +244 -39
  2. package/dist/identity/contact-key.d.ts +42 -0
  3. package/dist/identity/contact-key.d.ts.map +1 -0
  4. package/dist/identity/contact-key.js +133 -0
  5. package/dist/identity/contact-key.js.map +1 -0
  6. package/dist/index.d.ts +16 -7
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +10 -5
  9. package/dist/index.js.map +1 -1
  10. package/dist/network/mesh.d.ts +6 -0
  11. package/dist/network/mesh.d.ts.map +1 -1
  12. package/dist/network/mesh.js +11 -1
  13. package/dist/network/mesh.js.map +1 -1
  14. package/dist/network/multi-signaling.d.ts +12 -2
  15. package/dist/network/multi-signaling.d.ts.map +1 -1
  16. package/dist/network/multi-signaling.js +86 -14
  17. package/dist/network/multi-signaling.js.map +1 -1
  18. package/dist/network/peer-auth.d.ts +50 -16
  19. package/dist/network/peer-auth.d.ts.map +1 -1
  20. package/dist/network/peer-auth.js +52 -15
  21. package/dist/network/peer-auth.js.map +1 -1
  22. package/dist/node/carrier.d.ts +87 -0
  23. package/dist/node/carrier.d.ts.map +1 -1
  24. package/dist/node/carrier.js +180 -59
  25. package/dist/node/carrier.js.map +1 -1
  26. package/dist/node/copy.d.ts.map +1 -1
  27. package/dist/node/copy.js +6 -3
  28. package/dist/node/copy.js.map +1 -1
  29. package/dist/node/host.d.ts +117 -0
  30. package/dist/node/host.d.ts.map +1 -0
  31. package/dist/node/host.js +192 -0
  32. package/dist/node/host.js.map +1 -0
  33. package/dist/node/index.d.ts +6 -2
  34. package/dist/node/index.d.ts.map +1 -1
  35. package/dist/node/index.js +1 -0
  36. package/dist/node/index.js.map +1 -1
  37. package/dist/node/node.d.ts.map +1 -1
  38. package/dist/node/node.js +640 -25
  39. package/dist/node/node.js.map +1 -1
  40. package/dist/node/space-runtime.d.ts +42 -25
  41. package/dist/node/space-runtime.d.ts.map +1 -1
  42. package/dist/node/space-runtime.js +734 -35
  43. package/dist/node/space-runtime.js.map +1 -1
  44. package/dist/node/types.d.ts +269 -3
  45. package/dist/node/types.d.ts.map +1 -1
  46. package/dist/privacy/space-encryption.d.ts +16 -0
  47. package/dist/privacy/space-encryption.d.ts.map +1 -1
  48. package/dist/privacy/space-encryption.js +40 -0
  49. package/dist/privacy/space-encryption.js.map +1 -1
  50. package/dist/query/engine.js +1 -1
  51. package/dist/query/engine.js.map +1 -1
  52. package/dist/query/types.d.ts +7 -0
  53. package/dist/query/types.d.ts.map +1 -1
  54. package/dist/query/types.js.map +1 -1
  55. package/dist/react/use-query.d.ts +1 -1
  56. package/dist/react/use-query.d.ts.map +1 -1
  57. package/dist/records/topics.d.ts +21 -0
  58. package/dist/records/topics.d.ts.map +1 -0
  59. package/dist/records/topics.js +86 -0
  60. package/dist/records/topics.js.map +1 -0
  61. package/dist/schema/collection-def.d.ts +7 -0
  62. package/dist/schema/collection-def.d.ts.map +1 -1
  63. package/dist/schema/collection-def.js +4 -0
  64. package/dist/schema/collection-def.js.map +1 -1
  65. package/dist/schema/expression.d.ts +2 -0
  66. package/dist/schema/expression.d.ts.map +1 -1
  67. package/dist/schema/expression.js +1 -0
  68. package/dist/schema/expression.js.map +1 -1
  69. package/dist/schemas/contacts.d.ts +77 -0
  70. package/dist/schemas/contacts.d.ts.map +1 -0
  71. package/dist/schemas/contacts.js +35 -0
  72. package/dist/schemas/contacts.js.map +1 -0
  73. package/dist/schemas/index.d.ts +2 -0
  74. package/dist/schemas/index.d.ts.map +1 -1
  75. package/dist/schemas/index.js +1 -0
  76. package/dist/schemas/index.js.map +1 -1
  77. package/dist/session/auth.d.ts.map +1 -1
  78. package/dist/session/auth.js +14 -3
  79. package/dist/session/auth.js.map +1 -1
  80. package/dist/session/connect.d.ts +25 -1
  81. package/dist/session/connect.d.ts.map +1 -1
  82. package/dist/session/connect.js +9 -2
  83. package/dist/session/connect.js.map +1 -1
  84. package/dist/session/hosting.d.ts +155 -0
  85. package/dist/session/hosting.d.ts.map +1 -0
  86. package/dist/session/hosting.js +160 -0
  87. package/dist/session/hosting.js.map +1 -0
  88. package/dist/space/account-registry.d.ts +6 -0
  89. package/dist/space/account-registry.d.ts.map +1 -1
  90. package/dist/space/account-registry.js +16 -4
  91. package/dist/space/account-registry.js.map +1 -1
  92. package/dist/space/notify.d.ts +88 -0
  93. package/dist/space/notify.d.ts.map +1 -0
  94. package/dist/space/notify.js +127 -0
  95. package/dist/space/notify.js.map +1 -0
  96. package/dist/space/pass.d.ts +6 -0
  97. package/dist/space/pass.d.ts.map +1 -1
  98. package/dist/space/pass.js +5 -2
  99. package/dist/space/pass.js.map +1 -1
  100. package/dist/space/roles.d.ts +71 -0
  101. package/dist/space/roles.d.ts.map +1 -1
  102. package/dist/space/roles.js +114 -0
  103. package/dist/space/roles.js.map +1 -1
  104. package/dist/space/space-access.d.ts +24 -0
  105. package/dist/space/space-access.d.ts.map +1 -1
  106. package/dist/space/space-access.js +24 -0
  107. package/dist/space/space-access.js.map +1 -1
  108. package/dist/space/space-manager.d.ts +35 -1
  109. package/dist/space/space-manager.d.ts.map +1 -1
  110. package/dist/space/space-manager.js +72 -25
  111. package/dist/space/space-manager.js.map +1 -1
  112. package/dist/storage/blob/memory.d.ts +9 -0
  113. package/dist/storage/blob/memory.d.ts.map +1 -0
  114. package/dist/storage/blob/memory.js +20 -0
  115. package/dist/storage/blob/memory.js.map +1 -0
  116. package/dist/storage/blob/s3.d.ts +16 -0
  117. package/dist/storage/blob/s3.d.ts.map +1 -0
  118. package/dist/storage/blob/s3.js +86 -0
  119. package/dist/storage/blob/s3.js.map +1 -0
  120. package/dist/storage/blob-store.d.ts +26 -0
  121. package/dist/storage/blob-store.d.ts.map +1 -0
  122. package/dist/storage/blob-store.js +2 -0
  123. package/dist/storage/blob-store.js.map +1 -0
  124. package/dist/storage/encrypted-adapter.d.ts +3 -3
  125. package/dist/storage/encrypted-adapter.js +3 -3
  126. package/dist/storage/folder-adapter.d.ts +8 -8
  127. package/dist/storage/folder-adapter.d.ts.map +1 -1
  128. package/dist/storage/folder-adapter.js +7 -7
  129. package/dist/storage/folder-reconcile.d.ts +12 -14
  130. package/dist/storage/folder-reconcile.d.ts.map +1 -1
  131. package/dist/storage/folder-reconcile.js +20 -14
  132. package/dist/storage/folder-reconcile.js.map +1 -1
  133. package/dist/storage/index.d.ts +0 -1
  134. package/dist/storage/index.d.ts.map +1 -1
  135. package/dist/storage/index.js +0 -1
  136. package/dist/storage/index.js.map +1 -1
  137. package/dist/storage/indexeddb-adapter.d.ts.map +1 -1
  138. package/dist/storage/indexeddb-adapter.js +8 -9
  139. package/dist/storage/indexeddb-adapter.js.map +1 -1
  140. package/dist/storage/mirror.d.ts +68 -0
  141. package/dist/storage/mirror.d.ts.map +1 -0
  142. package/dist/storage/mirror.js +174 -0
  143. package/dist/storage/mirror.js.map +1 -0
  144. package/dist/storage/segment.d.ts +20 -0
  145. package/dist/storage/segment.d.ts.map +1 -0
  146. package/dist/storage/segment.js +27 -0
  147. package/dist/storage/segment.js.map +1 -0
  148. package/dist/storage/storage-provider.d.ts +36 -40
  149. package/dist/storage/storage-provider.d.ts.map +1 -1
  150. package/dist/storage/storage-provider.js +208 -117
  151. package/dist/storage/storage-provider.js.map +1 -1
  152. package/dist/sync/index.d.ts +1 -1
  153. package/dist/sync/index.d.ts.map +1 -1
  154. package/dist/sync/index.js +1 -1
  155. package/dist/sync/index.js.map +1 -1
  156. package/dist/sync/negentropy.d.ts +68 -0
  157. package/dist/sync/negentropy.d.ts.map +1 -0
  158. package/dist/sync/negentropy.js +379 -0
  159. package/dist/sync/negentropy.js.map +1 -0
  160. package/dist/sync/sync-engine.d.ts +45 -13
  161. package/dist/sync/sync-engine.d.ts.map +1 -1
  162. package/dist/sync/sync-engine.js +290 -207
  163. package/dist/sync/sync-engine.js.map +1 -1
  164. package/dist/sync/sync-messages.d.ts +42 -32
  165. package/dist/sync/sync-messages.d.ts.map +1 -1
  166. package/dist/sync/sync-messages.js +1 -1
  167. package/dist/sync/sync-messages.js.map +1 -1
  168. package/dist/types.d.ts +9 -0
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/types.js.map +1 -1
  171. package/dist/utils/hash.d.ts +9 -0
  172. package/dist/utils/hash.d.ts.map +1 -1
  173. package/dist/utils/hash.js +33 -0
  174. package/dist/utils/hash.js.map +1 -1
  175. package/package.json +3 -2
  176. package/dist/storage/mst.d.ts +0 -121
  177. package/dist/storage/mst.d.ts.map +0 -1
  178. package/dist/storage/mst.js +0 -402
  179. package/dist/storage/mst.js.map +0 -1
  180. package/dist/sync/anti-entropy.d.ts +0 -49
  181. package/dist/sync/anti-entropy.d.ts.map +0 -1
  182. package/dist/sync/anti-entropy.js +0 -62
  183. package/dist/sync/anti-entropy.js.map +0 -1
@@ -4,16 +4,19 @@ import { createSigner } from '../schema/signer.js';
4
4
  import { createSchemaEngine } from '../schema/schema-engine.js';
5
5
  import { createSpaceManager, parseSpaceInvite } from '../space/space-manager.js';
6
6
  import { carriedRecord, CARRY_CLOSED_KEY, openPass, PASS_COLLECTION } from '../space/pass.js';
7
+ import { matchesSubscription, readCarried, SUBSCRIPTION_COLLECTION } from '../space/notify.js';
7
8
  import { createLocalHub } from '../network/local-transport.js';
8
9
  import { meshFor, openSpaceRuntime } from './space-runtime.js';
9
10
  /**
10
- * Starts a carrier.
11
- * @throws When the carry invite is not a readable invite to a private space
11
+ * What a carrier and a host share: carry spaces — one per account it carries
12
+ * for — and every space their passes name, each held once however many
13
+ * accounts ask for it.
12
14
  */
13
- export async function createCarrierNode(config) {
15
+ export async function createCarryCore(config) {
14
16
  const provider = config.provider ?? createP256Provider();
15
17
  const signer = createSigner(provider);
16
18
  const schemas = createSchemaEngine();
19
+ const { emit } = config;
17
20
  const did = publicKeyToDid(await provider.exportPublicKey(config.key.publicKey), P256_MULTICODEC);
18
21
  // It never writes, so it never needs a note; the session only names it on the wire.
19
22
  const session = { did, key: config.key.privateKey, proof: () => '' };
@@ -21,31 +24,19 @@ export async function createCarrierNode(config) {
21
24
  const podKeys = await provider.generateKeyPair();
22
25
  const podDid = publicKeyToDid(await provider.exportPublicKey(podKeys.publicKey), P256_MULTICODEC);
23
26
  const podSession = { did: podDid, key: podKeys.privateKey, proof: () => '' };
24
- const listeners = new Set();
25
- const emit = (event) => {
26
- for (const listener of listeners) {
27
- try {
28
- listener(event);
29
- }
30
- catch (error) {
31
- console.error('Error in carrier listener:', error);
32
- }
33
- }
34
- };
35
- // The carry space is joined like any space: it is the one key the carrier holds.
27
+ // Carry spaces are joined like any space: their keys are the only ones a carrier holds.
36
28
  const registryStore = await config.stores('registry');
37
29
  const registry = createSpaceManager(registryStore, provider);
38
- const carrySpace = parseSpaceInvite(config.carry).space.id;
39
- const carryRecord = (await registry.get(carrySpace)) ?? (await registry.join(config.carry));
40
- if (carryRecord.space.visibility !== 'private' || !carryRecord.key)
41
- throw new Error('That is not an invite to a carry space.');
42
30
  let closed = false;
43
31
  let podStores = null;
32
+ const carries = new Map();
44
33
  const carried = new Map();
45
34
  const mesh = meshFor(config.network, did);
46
- const open = (record, stores, as, network, onEvent) => openSpaceRuntime({
47
- // The carrier's own spaces meet through relays; its copy in the pod only over the local link.
35
+ const open = (record, stores, as, network, onEvent, onArrived) => openSpaceRuntime({
36
+ ...(onArrived ? { onArrived } : {}),
37
+ // Carried spaces meet through relays; the copy in the pod only over the local link.
48
38
  ...(as === session && mesh ? { mesh } : {}),
39
+ ...(as === session && config.mirror ? { mirrors: [config.mirror] } : {}),
49
40
  record,
50
41
  stores,
51
42
  provider,
@@ -80,9 +71,9 @@ export async function createCarrierNode(config) {
80
71
  const runtime = await open(record, config.stores, session, network, (event) => {
81
72
  if (event.type === 'records' || event.type === 'status')
82
73
  emit({ type: 'status', space: spaceId });
83
- if (event.type === 'records' && spaceId === carrySpace)
74
+ if (event.type === 'records' && carries.has(spaceId))
84
75
  void refresh();
85
- });
76
+ }, (version) => arrived(record, version));
86
77
  if (closed)
87
78
  return void (await runtime.close());
88
79
  const entry = { record, hub, runtime, pod: null };
@@ -90,6 +81,39 @@ export async function createCarrierNode(config) {
90
81
  if (podStores)
91
82
  entry.pod = openPod(record, hub, podStores);
92
83
  }
84
+ /** Records already said something about — one can arrive twice, from a peer and from the pod */
85
+ const noticed = new Set();
86
+ /** A record arrived in a space: does any subscription of an account carrying it ask about it? */
87
+ function arrived(record, version) {
88
+ const spaceId = record.space.id;
89
+ if (noticed.has(version.id) || carries.has(spaceId))
90
+ return;
91
+ for (const entry of carries.values()) {
92
+ if (!entry.wants.has(spaceId))
93
+ continue;
94
+ for (const [id, sub] of entry.subscriptions) {
95
+ if (!matchesSubscription(sub, spaceId, version, entry.account))
96
+ continue;
97
+ noticed.add(version.id);
98
+ if (noticed.size > 1000)
99
+ noticed.delete(noticed.values().next().value);
100
+ emit({
101
+ type: 'notify',
102
+ subscription: view(id, sub),
103
+ space: { id: spaceId, name: record.space.name },
104
+ record: { key: version.key, collection: version.collection, createdAt: version.createdAt },
105
+ });
106
+ }
107
+ }
108
+ }
109
+ const view = (id, sub) => ({
110
+ id,
111
+ label: sub.label,
112
+ collection: sub.collection,
113
+ spaces: sub.spaces === 'all' ? [] : sub.spaces.map((space) => carried.get(space)?.record.space.name ?? 'a space'),
114
+ ...(sub.open ? { open: sub.open } : {}),
115
+ paused: sub.paused,
116
+ });
93
117
  async function drop(spaceId) {
94
118
  const entry = carried.get(spaceId);
95
119
  if (!entry)
@@ -103,48 +127,119 @@ export async function createCarrierNode(config) {
103
127
  function refresh() {
104
128
  refreshing = refreshing.then(refreshOnce).catch((error) => {
105
129
  if (!closed)
106
- console.error('Could not read the carry space:', error);
130
+ console.error('Could not read a carry space:', error);
107
131
  });
108
132
  return refreshing;
109
133
  }
110
134
  async function refreshOnce() {
111
- const carryRuntime = carried.get(carrySpace)?.runtime;
112
- if (!carryRuntime || closed)
113
- return;
114
- const records = (await carryRuntime.list({ collection: PASS_COLLECTION })).filter((record) => record.verified && record.root === config.account);
115
- if (records.some((record) => record.key === CARRY_CLOSED_KEY)) {
116
- emit({ type: 'closed' });
135
+ if (closed)
117
136
  return;
118
- }
119
137
  const wanted = new Map();
120
- for (const record of records) {
121
- if (!record.key.startsWith('pass:'))
138
+ for (const [carrySpace, entry] of carries) {
139
+ const carryRuntime = carried.get(carrySpace)?.runtime;
140
+ if (!carryRuntime)
122
141
  continue;
123
- const pass = await openPass(record.body, provider);
124
- if (pass && pass.space.id !== carrySpace)
125
- wanted.set(pass.space.id, carriedRecord(pass));
142
+ const records = (await carryRuntime.list({ collection: PASS_COLLECTION })).filter((record) => record.verified && record.root === entry.account);
143
+ if (records.some((record) => record.key === CARRY_CLOSED_KEY)) {
144
+ entry.wants = new Set();
145
+ config.onClosed(carrySpace);
146
+ continue;
147
+ }
148
+ const subscriptions = new Map();
149
+ for (const record of await carryRuntime.list({ collection: SUBSCRIPTION_COLLECTION })) {
150
+ if (!record.verified || record.root !== entry.account)
151
+ continue;
152
+ const sub = readCarried(record.body);
153
+ if (sub)
154
+ subscriptions.set(record.key, sub);
155
+ }
156
+ entry.subscriptions = subscriptions;
157
+ const wants = new Set();
158
+ for (const record of records) {
159
+ if (!record.key.startsWith('pass:'))
160
+ continue;
161
+ const pass = await openPass(record.body, provider);
162
+ if (!pass || carries.has(pass.space.id))
163
+ continue;
164
+ wants.add(pass.space.id);
165
+ // Two accounts naming one space: a pass for a later key beats one for the space's first,
166
+ // since an account whose pass is behind just hasn't caught up yet.
167
+ const known = wanted.get(pass.space.id);
168
+ const later = (read) => !!read && read.did !== pass.space.readKey;
169
+ if (!known || (!later(known.read) && later(pass.read)))
170
+ wanted.set(pass.space.id, carriedRecord(pass));
171
+ }
172
+ entry.wants = wants;
126
173
  }
127
174
  let changed = false;
128
175
  for (const [spaceId, record] of wanted) {
129
- if (carried.has(spaceId))
176
+ const held = carried.get(spaceId);
177
+ if (held && held.record.read?.did === record.read?.did)
130
178
  continue;
179
+ // The space's key changed: carried again, proving the new read key.
180
+ if (held)
181
+ await drop(spaceId);
131
182
  await carry(record);
132
183
  changed = true;
133
184
  }
134
185
  for (const spaceId of [...carried.keys()]) {
135
- if (spaceId === carrySpace || wanted.has(spaceId))
186
+ if (carries.has(spaceId) || wanted.has(spaceId))
136
187
  continue;
137
188
  await drop(spaceId);
189
+ await config.onRelease?.(spaceId).catch(() => { });
138
190
  changed = true;
139
191
  }
140
192
  if (changed)
141
193
  emit({ type: 'spaces' });
142
194
  }
143
- await carry(carryRecord);
144
- await refresh();
145
- return Object.freeze({
195
+ return {
146
196
  did,
147
- carrySpace,
197
+ podDid,
198
+ carried: carried,
199
+ carries: carries,
200
+ /**
201
+ * Starts carrying for an account: joins its carry space and every space
202
+ * its passes name.
203
+ * @returns The carry space's id
204
+ * @throws When the invite is not a readable invite to a private space
205
+ */
206
+ async addCarry(account, invite) {
207
+ const carrySpace = parseSpaceInvite(invite).space.id;
208
+ const record = (await registry.get(carrySpace)) ?? (await registry.join(invite));
209
+ if (record.space.visibility !== 'private' || !record.key) {
210
+ await registry.remove(carrySpace);
211
+ throw new Error('That is not an invite to a carry space.');
212
+ }
213
+ if (!carries.has(carrySpace))
214
+ carries.set(carrySpace, { account, wants: new Set(), subscriptions: new Map() });
215
+ await carry(record);
216
+ await refresh();
217
+ return carrySpace;
218
+ },
219
+ /** Stops carrying for an account: its carry space, and every space nobody else still asks for */
220
+ async removeCarry(carrySpace) {
221
+ if (!carries.delete(carrySpace))
222
+ return;
223
+ await drop(carrySpace);
224
+ await registry.remove(carrySpace);
225
+ await config.onRelease?.(carrySpace).catch(() => { });
226
+ await refresh();
227
+ },
228
+ async setPod(stores) {
229
+ podStores = stores;
230
+ for (const entry of carried.values()) {
231
+ const was = entry.pod;
232
+ entry.pod = null;
233
+ await (await was?.catch(() => null))?.close();
234
+ if (stores)
235
+ entry.pod = openPod(entry.record, entry.hub, stores);
236
+ }
237
+ emit({ type: 'spaces' });
238
+ },
239
+ async subscriptions() {
240
+ await refreshing;
241
+ return [...carries.values()].flatMap((entry) => [...entry.subscriptions].map(([id, sub]) => view(id, sub)));
242
+ },
148
243
  async spaces() {
149
244
  const found = [];
150
245
  for (const [spaceId, entry] of carried) {
@@ -153,7 +248,7 @@ export async function createCarrierNode(config) {
153
248
  id: spaceId,
154
249
  name: entry.record.space.name,
155
250
  visibility: entry.record.space.visibility,
156
- carry: spaceId === carrySpace,
251
+ carry: carries.has(spaceId),
157
252
  connection: status.connection,
158
253
  peers: status.peers.filter((peer) => peer !== podDid).length,
159
254
  inPod: entry.pod !== null,
@@ -161,17 +256,48 @@ export async function createCarrierNode(config) {
161
256
  }
162
257
  return found;
163
258
  },
164
- async usePod(stores) {
165
- podStores = stores;
166
- for (const entry of carried.values()) {
167
- const was = entry.pod;
168
- entry.pod = null;
169
- await (await was?.catch(() => null))?.close();
170
- if (stores)
171
- entry.pod = openPod(entry.record, entry.hub, stores);
172
- }
173
- emit({ type: 'spaces' });
259
+ async close() {
260
+ if (closed)
261
+ return;
262
+ closed = true;
263
+ await refreshing;
264
+ await Promise.all([...carried.keys()].map((spaceId) => drop(spaceId)));
265
+ await registryStore.close();
174
266
  },
267
+ };
268
+ }
269
+ /**
270
+ * Starts a carrier.
271
+ * @throws When the carry invite is not a readable invite to a private space
272
+ */
273
+ export async function createCarrierNode(config) {
274
+ const listeners = new Set();
275
+ const emit = (event) => {
276
+ for (const listener of listeners) {
277
+ try {
278
+ listener(event);
279
+ }
280
+ catch (error) {
281
+ console.error('Error in carrier listener:', error);
282
+ }
283
+ }
284
+ };
285
+ const core = await createCarryCore({
286
+ key: config.key,
287
+ stores: config.stores,
288
+ ...(config.network ? { network: config.network } : {}),
289
+ ...(config.provider ? { provider: config.provider } : {}),
290
+ ...(config.watchIntervalMs !== undefined ? { watchIntervalMs: config.watchIntervalMs } : {}),
291
+ emit,
292
+ onClosed: () => emit({ type: 'closed' }),
293
+ });
294
+ const carrySpace = await core.addCarry(config.account, config.carry);
295
+ return Object.freeze({
296
+ did: core.did,
297
+ carrySpace,
298
+ spaces: core.spaces,
299
+ usePod: core.setPod,
300
+ subscriptions: core.subscriptions,
175
301
  subscribe(listener) {
176
302
  listeners.add(listener);
177
303
  return () => {
@@ -179,12 +305,7 @@ export async function createCarrierNode(config) {
179
305
  };
180
306
  },
181
307
  async close() {
182
- if (closed)
183
- return;
184
- closed = true;
185
- await refreshing;
186
- await Promise.all([...carried.keys()].map((spaceId) => drop(spaceId)));
187
- await registryStore.close();
308
+ await core.close();
188
309
  listeners.clear();
189
310
  },
190
311
  });
@@ -1 +1 @@
1
- {"version":3,"file":"carrier.js","sourceRoot":"","sources":["../../src/node/carrier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"carrier.js","sourceRoot":"","sources":["../../src/node/carrier.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/node/copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0CpF"}
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/node/copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4CpF"}
package/dist/node/copy.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createSpaceManager } from '../space/space-manager.js';
2
- import { deriveAccountRegistry } from '../space/account-registry.js';
2
+ import { deriveAccountRegistry, deriveContactsSpace } from '../space/account-registry.js';
3
3
  import { createStorageProvider } from '../storage/storage-provider.js';
4
4
  /**
5
5
  * Copies every space an account holds, with its key and its records, into
@@ -10,6 +10,8 @@ export async function copyAccountData(params) {
10
10
  const toRegistryStore = await params.to('registry', { seal: true });
11
11
  const fromRegistry = createSpaceManager(fromRegistryStore);
12
12
  const toRegistry = createSpaceManager(toRegistryStore);
13
+ // The contacts space is copied like any other, but it is not one the person counts as theirs.
14
+ const contacts = params.accountKey ? (await deriveContactsSpace(params.accountKey, params.did)).space.id : null;
13
15
  let spacesAdded = 0;
14
16
  const spaceIds = [];
15
17
  for (const { space } of await fromRegistry.list()) {
@@ -18,7 +20,8 @@ export async function copyAccountData(params) {
18
20
  continue;
19
21
  // An invite carries exactly what a registry needs: the space, and its key.
20
22
  await toRegistry.join(await fromRegistry.createInvite(space.id, params.did));
21
- spacesAdded++;
23
+ if (space.id !== contacts)
24
+ spacesAdded++;
22
25
  }
23
26
  if (params.accountKey)
24
27
  spaceIds.push((await deriveAccountRegistry(params.accountKey, params.did)).space.id);
@@ -30,7 +33,7 @@ export async function copyAccountData(params) {
30
33
  // Every version the source keeps — current, first, retained — goes
31
34
  // through the ordering rule on arrival, so the target ends up with what
32
35
  // it would have reached by syncing with the source.
33
- const ids = new Set((await source.entries()).map((entry) => entry.value));
36
+ const ids = new Set(await source.versionIds());
34
37
  for (const id of ids) {
35
38
  const held = await target.getExpression(id);
36
39
  const expression = await source.getExpression(id);
@@ -1 +1 @@
1
- {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/node/copy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/node/copy.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAsBvE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAyB;IAC7D,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAEvD,8FAA8F;IAC9F,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAChH,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,SAAS;QAC7C,2EAA2E;QAC3E,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ;YAAE,WAAW,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,CAAC,UAAU;QAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE5G,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC;YACH,mEAAmE;YACnE,wEAAwE;YACxE,oDAAoD;YACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAC/C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAClD,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAC1B,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBACvC,yFAAyF;gBACzF,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;oBAAE,YAAY,EAAE,CAAC;YAChE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @module node/host
3
+ * A carrier that never sleeps, for many accounts: what a hosting service runs.
4
+ *
5
+ * It is the extension's carrier (`node/carrier.ts`) with more than one carry
6
+ * space. Each **subscription** — someone paying for hosting — is a key the
7
+ * account made, a date it is paid until, and once a device hands it over,
8
+ * the account's carry space. The spaces every carry space's passes name are
9
+ * held once, whoever asks for them, so a space shared by two paying members
10
+ * is one space here, online for all its members.
11
+ *
12
+ * Blind, like any carrier: it holds no seed, no space key and no note, signs
13
+ * nothing, and takes in only what passes the same gates as at any member's
14
+ * node. What it learns: which spaces exist, their size, when they change, and
15
+ * — through the carry spaces — which account asked for which.
16
+ *
17
+ * Subscriptions live in the host's own store, next to the carried spaces. The
18
+ * payment side (`cli/src/host/…`) only ever moves a subscription's date.
19
+ */
20
+ import type { CryptoProvider } from '../types.js';
21
+ import { type ServerAuth } from '../network/peer-auth.js';
22
+ import { type CarriedSpace, type CarrierEvent } from './carrier.js';
23
+ import type { StoreFactory } from './stores.js';
24
+ import type { NodeNetworkConfig } from './types.js';
25
+ import type { BlobStore } from '../storage/blob-store.js';
26
+ /** Someone paying for hosting, as the host knows them */
27
+ export interface Subscription {
28
+ /** The subscription key's DID — what every call about it is signed with */
29
+ readonly id: string;
30
+ /** Unix seconds. Past it, the grace period; past that, it is dropped. */
31
+ readonly paidUntil: number;
32
+ /** When it was made, unix seconds */
33
+ readonly since: number;
34
+ /** The account and its carry space, once a device has handed them over */
35
+ readonly carry?: {
36
+ readonly account: string;
37
+ readonly space: string;
38
+ readonly invite: string;
39
+ };
40
+ /** The payment provider's reference for whoever pays — nothing else about them is kept */
41
+ readonly customer?: string;
42
+ /** A wallet payment asked for and not yet seen (`cli/src/wallet.ts`) */
43
+ readonly invoice?: Invoice;
44
+ }
45
+ /** A payment a host asked a wallet for: an exact amount, so the transfer that arrives says whose it is */
46
+ export interface Invoice {
47
+ readonly plan: string;
48
+ /** In the token's smallest unit, as a decimal string */
49
+ readonly amount: string;
50
+ /** When it was asked for, unix seconds — a transfer made before it pays nothing */
51
+ readonly at: number;
52
+ }
53
+ export type SubscriptionState = 'active' | 'grace' | 'lapsed';
54
+ export interface HostConfig {
55
+ /** The host's own key — who it is to peers */
56
+ readonly key: CryptoKeyPair;
57
+ readonly stores: StoreFactory;
58
+ readonly network?: NodeNetworkConfig;
59
+ readonly provider?: CryptoProvider;
60
+ /** Days a lapsed subscription is kept, carried, before it is dropped. Default 30. */
61
+ readonly graceDays?: number;
62
+ /** Every subscription counts as paid — for someone hosting only themselves, and for trying it out */
63
+ readonly free?: boolean;
64
+ /**
65
+ * The accounts this host carries for, and no others — someone hosting only
66
+ * themselves and their family. Absent: any account whose subscription is paid.
67
+ */
68
+ readonly allow?: ReadonlyArray<string>;
69
+ /** Unix seconds now; for tests */
70
+ readonly now?: () => number;
71
+ /**
72
+ * The host's bucket (`storage/blob/s3.ts`): every carried space is kept
73
+ * there too, in the mirror layout, and so is the list of subscriptions. The
74
+ * host's disk is then only a cache — lose it, and everything comes back.
75
+ * A space nobody pays for any more is deleted from it.
76
+ */
77
+ readonly mirror?: BlobStore;
78
+ readonly watchIntervalMs?: number;
79
+ }
80
+ export interface HostNode {
81
+ readonly did: string;
82
+ /** Makes a subscription if there is none by this id, and returns it */
83
+ subscribe(id: string): Promise<Subscription>;
84
+ get(id: string): Promise<Subscription | null>;
85
+ list(): Promise<ReadonlyArray<Subscription>>;
86
+ /** Whether a subscription is paid, in its grace period, or lapsed */
87
+ state(subscription: Subscription): SubscriptionState;
88
+ /** Moves a subscription's paid-until date — the one thing payments do */
89
+ extend(id: string, until: number, customer?: string): Promise<Subscription>;
90
+ /** Keeps a wallet payment asked for, or drops it (null) once it arrived */
91
+ setInvoice(id: string, invoice: Invoice | null): Promise<Subscription>;
92
+ /**
93
+ * Starts carrying an account's spaces for a subscription: its carry space,
94
+ * and every space its passes name. Replaces what the subscription carried.
95
+ * @throws When the subscription is lapsed, or the invite is not a carry space's
96
+ */
97
+ attach(id: string, account: string, invite: string): Promise<Subscription>;
98
+ /** Stops carrying for a subscription; the subscription stays */
99
+ detach(id: string): Promise<void>;
100
+ /** Drops what lapsed past its grace period. Run now and then. */
101
+ sweep(): Promise<ReadonlyArray<string>>;
102
+ /** Every space carried, for every subscription */
103
+ spaces(): Promise<ReadonlyArray<CarriedSpace>>;
104
+ /** How many spaces a subscription's account asks the host to carry */
105
+ carriedFor(id: string): Promise<number>;
106
+ /** For a server taking sockets: checks a connecting peer against the space's history. Null for a space not carried. */
107
+ authenticator(spaceId: string): Promise<ServerAuth | null>;
108
+ subscribeEvents(listener: (event: CarrierEvent) => void): () => void;
109
+ close(): Promise<void>;
110
+ }
111
+ /** An account this host was not told to carry for */
112
+ export declare class NotAllowedError extends Error {
113
+ constructor();
114
+ }
115
+ /** Starts a host */
116
+ export declare function createHostNode(config: HostConfig): Promise<HostNode>;
117
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/node/host.ts"],"names":[],"mappings":"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"}