@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.
- package/README.md +244 -39
- package/dist/identity/contact-key.d.ts +42 -0
- package/dist/identity/contact-key.d.ts.map +1 -0
- package/dist/identity/contact-key.js +133 -0
- package/dist/identity/contact-key.js.map +1 -0
- package/dist/index.d.ts +16 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -5
- package/dist/index.js.map +1 -1
- package/dist/network/mesh.d.ts +6 -0
- package/dist/network/mesh.d.ts.map +1 -1
- package/dist/network/mesh.js +11 -1
- package/dist/network/mesh.js.map +1 -1
- package/dist/network/multi-signaling.d.ts +12 -2
- package/dist/network/multi-signaling.d.ts.map +1 -1
- package/dist/network/multi-signaling.js +86 -14
- package/dist/network/multi-signaling.js.map +1 -1
- package/dist/network/peer-auth.d.ts +50 -16
- package/dist/network/peer-auth.d.ts.map +1 -1
- package/dist/network/peer-auth.js +52 -15
- package/dist/network/peer-auth.js.map +1 -1
- package/dist/node/carrier.d.ts +87 -0
- package/dist/node/carrier.d.ts.map +1 -1
- package/dist/node/carrier.js +180 -59
- package/dist/node/carrier.js.map +1 -1
- package/dist/node/copy.d.ts.map +1 -1
- package/dist/node/copy.js +6 -3
- package/dist/node/copy.js.map +1 -1
- package/dist/node/host.d.ts +117 -0
- package/dist/node/host.d.ts.map +1 -0
- package/dist/node/host.js +192 -0
- package/dist/node/host.js.map +1 -0
- package/dist/node/index.d.ts +6 -2
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +1 -0
- package/dist/node/index.js.map +1 -1
- package/dist/node/node.d.ts.map +1 -1
- package/dist/node/node.js +640 -25
- package/dist/node/node.js.map +1 -1
- package/dist/node/space-runtime.d.ts +42 -25
- package/dist/node/space-runtime.d.ts.map +1 -1
- package/dist/node/space-runtime.js +734 -35
- package/dist/node/space-runtime.js.map +1 -1
- package/dist/node/types.d.ts +269 -3
- package/dist/node/types.d.ts.map +1 -1
- package/dist/privacy/space-encryption.d.ts +16 -0
- package/dist/privacy/space-encryption.d.ts.map +1 -1
- package/dist/privacy/space-encryption.js +40 -0
- package/dist/privacy/space-encryption.js.map +1 -1
- package/dist/query/engine.js +1 -1
- package/dist/query/engine.js.map +1 -1
- package/dist/query/types.d.ts +7 -0
- package/dist/query/types.d.ts.map +1 -1
- package/dist/query/types.js.map +1 -1
- package/dist/react/use-query.d.ts +1 -1
- package/dist/react/use-query.d.ts.map +1 -1
- package/dist/records/topics.d.ts +21 -0
- package/dist/records/topics.d.ts.map +1 -0
- package/dist/records/topics.js +86 -0
- package/dist/records/topics.js.map +1 -0
- package/dist/schema/collection-def.d.ts +7 -0
- package/dist/schema/collection-def.d.ts.map +1 -1
- package/dist/schema/collection-def.js +4 -0
- package/dist/schema/collection-def.js.map +1 -1
- package/dist/schema/expression.d.ts +2 -0
- package/dist/schema/expression.d.ts.map +1 -1
- package/dist/schema/expression.js +1 -0
- package/dist/schema/expression.js.map +1 -1
- package/dist/schemas/contacts.d.ts +77 -0
- package/dist/schemas/contacts.d.ts.map +1 -0
- package/dist/schemas/contacts.js +35 -0
- package/dist/schemas/contacts.js.map +1 -0
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/session/auth.d.ts.map +1 -1
- package/dist/session/auth.js +14 -3
- package/dist/session/auth.js.map +1 -1
- package/dist/session/connect.d.ts +25 -1
- package/dist/session/connect.d.ts.map +1 -1
- package/dist/session/connect.js +9 -2
- package/dist/session/connect.js.map +1 -1
- package/dist/session/hosting.d.ts +155 -0
- package/dist/session/hosting.d.ts.map +1 -0
- package/dist/session/hosting.js +160 -0
- package/dist/session/hosting.js.map +1 -0
- package/dist/space/account-registry.d.ts +6 -0
- package/dist/space/account-registry.d.ts.map +1 -1
- package/dist/space/account-registry.js +16 -4
- package/dist/space/account-registry.js.map +1 -1
- package/dist/space/notify.d.ts +88 -0
- package/dist/space/notify.d.ts.map +1 -0
- package/dist/space/notify.js +127 -0
- package/dist/space/notify.js.map +1 -0
- package/dist/space/pass.d.ts +6 -0
- package/dist/space/pass.d.ts.map +1 -1
- package/dist/space/pass.js +5 -2
- package/dist/space/pass.js.map +1 -1
- package/dist/space/roles.d.ts +71 -0
- package/dist/space/roles.d.ts.map +1 -1
- package/dist/space/roles.js +114 -0
- package/dist/space/roles.js.map +1 -1
- package/dist/space/space-access.d.ts +24 -0
- package/dist/space/space-access.d.ts.map +1 -1
- package/dist/space/space-access.js +24 -0
- package/dist/space/space-access.js.map +1 -1
- package/dist/space/space-manager.d.ts +35 -1
- package/dist/space/space-manager.d.ts.map +1 -1
- package/dist/space/space-manager.js +72 -25
- package/dist/space/space-manager.js.map +1 -1
- package/dist/storage/blob/memory.d.ts +9 -0
- package/dist/storage/blob/memory.d.ts.map +1 -0
- package/dist/storage/blob/memory.js +20 -0
- package/dist/storage/blob/memory.js.map +1 -0
- package/dist/storage/blob/s3.d.ts +16 -0
- package/dist/storage/blob/s3.d.ts.map +1 -0
- package/dist/storage/blob/s3.js +86 -0
- package/dist/storage/blob/s3.js.map +1 -0
- package/dist/storage/blob-store.d.ts +26 -0
- package/dist/storage/blob-store.d.ts.map +1 -0
- package/dist/storage/blob-store.js +2 -0
- package/dist/storage/blob-store.js.map +1 -0
- package/dist/storage/encrypted-adapter.d.ts +3 -3
- package/dist/storage/encrypted-adapter.js +3 -3
- package/dist/storage/folder-adapter.d.ts +8 -8
- package/dist/storage/folder-adapter.d.ts.map +1 -1
- package/dist/storage/folder-adapter.js +7 -7
- package/dist/storage/folder-reconcile.d.ts +12 -14
- package/dist/storage/folder-reconcile.d.ts.map +1 -1
- package/dist/storage/folder-reconcile.js +20 -14
- package/dist/storage/folder-reconcile.js.map +1 -1
- package/dist/storage/index.d.ts +0 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +0 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/indexeddb-adapter.d.ts.map +1 -1
- package/dist/storage/indexeddb-adapter.js +8 -9
- package/dist/storage/indexeddb-adapter.js.map +1 -1
- package/dist/storage/mirror.d.ts +68 -0
- package/dist/storage/mirror.d.ts.map +1 -0
- package/dist/storage/mirror.js +174 -0
- package/dist/storage/mirror.js.map +1 -0
- package/dist/storage/segment.d.ts +20 -0
- package/dist/storage/segment.d.ts.map +1 -0
- package/dist/storage/segment.js +27 -0
- package/dist/storage/segment.js.map +1 -0
- package/dist/storage/storage-provider.d.ts +36 -40
- package/dist/storage/storage-provider.d.ts.map +1 -1
- package/dist/storage/storage-provider.js +208 -117
- package/dist/storage/storage-provider.js.map +1 -1
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/negentropy.d.ts +68 -0
- package/dist/sync/negentropy.d.ts.map +1 -0
- package/dist/sync/negentropy.js +379 -0
- package/dist/sync/negentropy.js.map +1 -0
- package/dist/sync/sync-engine.d.ts +45 -13
- package/dist/sync/sync-engine.d.ts.map +1 -1
- package/dist/sync/sync-engine.js +290 -207
- package/dist/sync/sync-engine.js.map +1 -1
- package/dist/sync/sync-messages.d.ts +42 -32
- package/dist/sync/sync-messages.d.ts.map +1 -1
- package/dist/sync/sync-messages.js +1 -1
- package/dist/sync/sync-messages.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/hash.d.ts +9 -0
- package/dist/utils/hash.d.ts.map +1 -1
- package/dist/utils/hash.js +33 -0
- package/dist/utils/hash.js.map +1 -1
- package/package.json +3 -2
- package/dist/storage/mst.d.ts +0 -121
- package/dist/storage/mst.d.ts.map +0 -1
- package/dist/storage/mst.js +0 -402
- package/dist/storage/mst.js.map +0 -1
- package/dist/sync/anti-entropy.d.ts +0 -49
- package/dist/sync/anti-entropy.d.ts.map +0 -1
- package/dist/sync/anti-entropy.js +0 -62
- package/dist/sync/anti-entropy.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-provider.d.ts","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"storage-provider.d.ts","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAW,MAAM,aAAa,CAAC;AAIvE,OAAO,EAAmD,OAAO,EAA4B,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAErI,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,mEAAmE;IACnE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACtD,2DAA2D;IAC3D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpD,kFAAkF;IAClF,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpD,8FAA8F;IAC9F,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,mGAAmG;IACnG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC9D,0DAA0D;IAC1D,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,yGAAyG;IACzG,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,qFAAqF;IACrF,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,qFAAqF;IACrF,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1C;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,sFAAsF;IACtF,UAAU,IAAI,IAAI,CAAC;IACnB,0CAA0C;IAC1C,UAAU,IAAI,cAAc,CAAC;IAC7B,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,WAAW,OAAO,CAAC;AAOhC;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,MAAM,CAGvE;AA8BD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CA8P9E"}
|
|
@@ -1,191 +1,273 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module storage-provider
|
|
3
|
-
* A space's store: record versions, and
|
|
4
|
-
*
|
|
5
|
-
* The tree maps **record keys to version ids**:
|
|
3
|
+
* A space's store: record versions, and plain entries saying which is which.
|
|
6
4
|
*
|
|
7
5
|
* ```
|
|
8
|
-
* r/<key>
|
|
9
|
-
* g/<key>
|
|
10
|
-
* h/<key>/<seq>/<id>
|
|
6
|
+
* r/<key> → the current version (every record)
|
|
7
|
+
* g/<key> → the record's first version (once it has been edited)
|
|
8
|
+
* h/<key>/<seq>/<id> → a superseded version (only if marked `retain`)
|
|
9
|
+
* i/<collection>/<time>/<id> → every version kept, by collection — what sync compares
|
|
11
10
|
* ```
|
|
12
11
|
*
|
|
13
12
|
* A version that arrives is compared with the one at `r/<key>` by the ordering
|
|
14
13
|
* rule (`records/version.ts`). The winner takes `r/<key>`; the loser's body is
|
|
15
14
|
* dropped — unless it is the record's first version, kept as proof of who
|
|
16
15
|
* created it, or its writer marked it `retain`. The same set of versions gives
|
|
17
|
-
* the same
|
|
18
|
-
* converge.
|
|
16
|
+
* the same entries whatever order they arrive in, which is what lets two
|
|
17
|
+
* peers converge.
|
|
18
|
+
*
|
|
19
|
+
* Sync compares the `i/` entries: the set of versions kept, one collection at
|
|
20
|
+
* a time (`sync/negentropy.ts`). Nothing else is stored for it. The sets are
|
|
21
|
+
* read once and kept in memory, updated by every change made here; a change
|
|
22
|
+
* made by another writer of the same store (a tab, a folder's other device)
|
|
23
|
+
* reaches them through {@link StorageProvider.invalidate}.
|
|
19
24
|
*/
|
|
20
|
-
import { insertIntoMST, deleteFromMST, lookupInMST, listMSTEntries, collectReachableCids } from './mst.js';
|
|
21
25
|
import { byVersion, supersedes } from '../records/version.js';
|
|
22
|
-
import { utf8Encode, utf8Decode } from '../utils/encoding.js';
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const CONDEMNED_KEY = '__condemned';
|
|
26
|
-
/** A tree node's key in the store: its CID, `b` and 52 base32 characters */
|
|
27
|
-
const NODE_KEY = /^b[a-z2-7]{52}$/;
|
|
26
|
+
import { utf8Encode, utf8Decode, bytesToHex } from '../utils/encoding.js';
|
|
27
|
+
import { cidDigest } from '../utils/hash.js';
|
|
28
|
+
import { addToSum, combineSums, EMPTY_SUM, fingerprintOf, ItemSet, removeFromSum } from '../sync/negentropy.js';
|
|
28
29
|
export const CURRENT_PREFIX = 'r/';
|
|
29
30
|
export const GENESIS_PREFIX = 'g/';
|
|
30
31
|
export const HISTORY_PREFIX = 'h/';
|
|
32
|
+
export const ITEM_PREFIX = 'i/';
|
|
31
33
|
const currentKey = (key) => `${CURRENT_PREFIX}${key}`;
|
|
32
34
|
const genesisKey = (key) => `${GENESIS_PREFIX}${key}`;
|
|
33
35
|
/** `seq` padded so a key's history lists in order */
|
|
34
36
|
const historyKey = (e) => `${HISTORY_PREFIX}${e.key}/${String(e.seq).padStart(15, '0')}/${e.id}`;
|
|
37
|
+
/**
|
|
38
|
+
* Where a version sorts for sync: its own time, in whole seconds. Only an
|
|
39
|
+
* order — a wrong clock makes a version slower to find, never lost.
|
|
40
|
+
*/
|
|
41
|
+
export function syncTime(version) {
|
|
42
|
+
const ms = Date.parse(version.createdAt);
|
|
43
|
+
return Number.isFinite(ms) && ms > 0 ? Math.floor(ms / 1000) : 0;
|
|
44
|
+
}
|
|
45
|
+
/** Collection names may hold anything; the entry needs them free of `/`. */
|
|
46
|
+
const itemKey = (e) => `${ITEM_PREFIX}${encodeURIComponent(e.collection)}/${syncTime(e)}/${e.id}`;
|
|
47
|
+
/** Reads an `i/` entry back: null for anything malformed, or an id that is not a content id */
|
|
48
|
+
function parseItemKey(key) {
|
|
49
|
+
const [, collection, time, id, extra] = key.split('/');
|
|
50
|
+
if (collection === undefined || time === undefined || id === undefined || extra !== undefined)
|
|
51
|
+
return null;
|
|
52
|
+
const digest = cidDigest(id);
|
|
53
|
+
const timestamp = Number(time);
|
|
54
|
+
if (!digest || !Number.isSafeInteger(timestamp) || timestamp < 0)
|
|
55
|
+
return null;
|
|
56
|
+
try {
|
|
57
|
+
return { collection: decodeURIComponent(collection), id, item: { timestamp, id: digest } };
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
35
63
|
/**
|
|
36
64
|
* Creates a StorageProvider wrapping an adapter.
|
|
37
65
|
* @param adapter The initialized storage adapter.
|
|
38
|
-
* @returns The StorageProvider orchestrator.
|
|
39
66
|
*/
|
|
40
|
-
export function createStorageProvider(adapter
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
// Every change reads the root, rewrites the path to one entry, and writes a
|
|
46
|
-
// new root. Two of those interleaved would each start from the same root and
|
|
47
|
-
// the second would silently drop the first's entry. So changes take turns.
|
|
67
|
+
export function createStorageProvider(adapter) {
|
|
68
|
+
// Every change reads the current version, then writes. Two of those
|
|
69
|
+
// interleaved would each decide against the same current version, and one
|
|
70
|
+
// would lose its place. So changes take turns.
|
|
48
71
|
let tail = Promise.resolve();
|
|
49
72
|
const exclusively = (change) => {
|
|
50
73
|
const run = tail.then(change, change);
|
|
51
74
|
tail = run.catch(() => { });
|
|
52
75
|
return run;
|
|
53
76
|
};
|
|
77
|
+
// ─── What sync compares, in memory ─────────────────────────────────
|
|
78
|
+
/** Versions kept, by collection, then by id. Null until first needed. */
|
|
79
|
+
let kept = null;
|
|
80
|
+
/** Sorted sets, built when a reconciliation asks for one and dropped when their collection changes */
|
|
81
|
+
const sets = new Map();
|
|
82
|
+
/** The sum of each collection's ids, kept up to date on every change: a hello needs no sorting */
|
|
83
|
+
let totals = null;
|
|
84
|
+
/** Read in turn with changes, so none lands between the listing and the sets being kept up to date */
|
|
85
|
+
const loadKept = async () => kept ??
|
|
86
|
+
exclusively(async () => {
|
|
87
|
+
if (kept)
|
|
88
|
+
return kept;
|
|
89
|
+
const loaded = new Map();
|
|
90
|
+
for (const key of await adapter.list(ITEM_PREFIX)) {
|
|
91
|
+
const parsed = parseItemKey(key);
|
|
92
|
+
if (!parsed)
|
|
93
|
+
continue;
|
|
94
|
+
(loaded.get(parsed.collection) ?? loaded.set(parsed.collection, new Map()).get(parsed.collection)).set(parsed.id, parsed.item);
|
|
95
|
+
}
|
|
96
|
+
kept = loaded;
|
|
97
|
+
totals = new Map();
|
|
98
|
+
for (const [collection, byId] of loaded) {
|
|
99
|
+
let sum = EMPTY_SUM;
|
|
100
|
+
for (const item of byId.values())
|
|
101
|
+
sum = addToSum(sum, item.id);
|
|
102
|
+
totals.set(collection, sum);
|
|
103
|
+
}
|
|
104
|
+
return loaded;
|
|
105
|
+
});
|
|
106
|
+
/** Keeps the in-memory sets in step with a change just written */
|
|
107
|
+
const track = (added, removed) => {
|
|
108
|
+
for (const e of [...added, ...removed])
|
|
109
|
+
sets.delete(e.collection);
|
|
110
|
+
if (!kept || !totals)
|
|
111
|
+
return;
|
|
112
|
+
for (const e of removed) {
|
|
113
|
+
const item = kept.get(e.collection)?.get(e.id);
|
|
114
|
+
if (!item)
|
|
115
|
+
continue;
|
|
116
|
+
kept.get(e.collection).delete(e.id);
|
|
117
|
+
totals.set(e.collection, removeFromSum(totals.get(e.collection) ?? EMPTY_SUM, item.id));
|
|
118
|
+
}
|
|
119
|
+
for (const e of added) {
|
|
120
|
+
const digest = cidDigest(e.id);
|
|
121
|
+
const byId = kept.get(e.collection) ?? kept.set(e.collection, new Map()).get(e.collection);
|
|
122
|
+
if (!digest || byId.has(e.id))
|
|
123
|
+
continue;
|
|
124
|
+
byId.set(e.id, { timestamp: syncTime(e), id: digest });
|
|
125
|
+
totals.set(e.collection, addToSum(totals.get(e.collection) ?? EMPTY_SUM, digest));
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
// ─── Changes ───────────────────────────────────────────────────────
|
|
54
129
|
/**
|
|
55
|
-
* Runs one change
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* after, so the tree never names a record that is gone.
|
|
130
|
+
* Runs one change. Its entry writes are held and made in one batch, so a
|
|
131
|
+
* change lands whole or not at all. Versions it drops are deleted only
|
|
132
|
+
* after, so no entry ever names a record that is gone.
|
|
59
133
|
*/
|
|
60
134
|
const change = (run) => exclusively(async () => {
|
|
61
135
|
const writes = new Map();
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
136
|
+
const added = new Map();
|
|
137
|
+
const dropped = new Map();
|
|
138
|
+
const entries = {
|
|
139
|
+
get: async (key) => {
|
|
140
|
+
const bytes = writes.has(key) ? writes.get(key) : await adapter.get(key);
|
|
141
|
+
return bytes ? utf8Decode(bytes) : null;
|
|
142
|
+
},
|
|
143
|
+
set: (key, id) => void writes.set(key, utf8Encode(id)),
|
|
144
|
+
unset: (key) => void writes.set(key, null),
|
|
145
|
+
keep: async (version) => {
|
|
146
|
+
await adapter.putExpression(version);
|
|
147
|
+
writes.set(itemKey(version), utf8Encode(version.id));
|
|
148
|
+
added.set(version.id, version);
|
|
149
|
+
dropped.delete(version.id);
|
|
150
|
+
},
|
|
151
|
+
drop: (version) => {
|
|
152
|
+
writes.set(itemKey(version), null);
|
|
153
|
+
dropped.set(version.id, version);
|
|
154
|
+
added.delete(version.id);
|
|
155
|
+
},
|
|
68
156
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (root === before && writes.size === 0 && dropped.length === 0)
|
|
73
|
-
return root;
|
|
74
|
-
writes.set(ROOT_KEY, root ? utf8Encode(root) : null);
|
|
157
|
+
await run(entries);
|
|
158
|
+
if (writes.size === 0 && dropped.size === 0)
|
|
159
|
+
return;
|
|
75
160
|
await adapter.batch([...writes].map(([key, value]) => (value ? { type: 'put', key, value } : { type: 'delete', key })));
|
|
76
|
-
for (const id of dropped)
|
|
161
|
+
for (const id of dropped.keys())
|
|
77
162
|
await adapter.deleteExpression(id);
|
|
78
|
-
|
|
79
|
-
return root;
|
|
80
|
-
});
|
|
81
|
-
const graceMs = options.graceMs ?? 60_000;
|
|
82
|
-
const compact = () => exclusively(async () => {
|
|
83
|
-
const reachable = await collectReachableCids(adapter, await getRootCid());
|
|
84
|
-
const dead = (await adapter.list('b')).filter((key) => NODE_KEY.test(key) && !reachable.has(key));
|
|
85
|
-
const saved = await adapter.get(CONDEMNED_KEY);
|
|
86
|
-
const earlier = saved ? JSON.parse(utf8Decode(saved)) : null;
|
|
87
|
-
const ripe = graceMs === 0 ? dead : earlier && Date.now() - earlier.at >= graceMs ? earlier.cids : null;
|
|
88
|
-
const condemn = (cids) => ({ type: 'put', key: CONDEMNED_KEY, value: utf8Encode(JSON.stringify({ at: Date.now(), cids })) });
|
|
89
|
-
// Too soon to delete anything: remember what is dead now, unless an earlier list is already waiting.
|
|
90
|
-
if (ripe === null) {
|
|
91
|
-
if (!earlier)
|
|
92
|
-
await adapter.batch([condemn(dead)]);
|
|
93
|
-
return 0;
|
|
94
|
-
}
|
|
95
|
-
const doomed = new Set(ripe);
|
|
96
|
-
const deleting = dead.filter((key) => doomed.has(key));
|
|
97
|
-
await adapter.batch([...deleting.map((key) => ({ type: 'delete', key })), condemn(dead.filter((key) => !doomed.has(key)))]);
|
|
98
|
-
return deleting.length;
|
|
163
|
+
track([...added.values()], [...dropped.values()]);
|
|
99
164
|
});
|
|
100
|
-
let changes = 0;
|
|
101
|
-
/** Counts a change, and compacts once enough have piled up */
|
|
102
|
-
const changed = () => {
|
|
103
|
-
if (options.compactEvery && ++changes >= options.compactEvery) {
|
|
104
|
-
changes = 0;
|
|
105
|
-
void compact().catch(() => { });
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
165
|
/**
|
|
109
166
|
* Places a version that is not current: the record's first version if it is
|
|
110
167
|
* the lowest-id one seen, history if retained, otherwise gone.
|
|
111
168
|
*/
|
|
112
|
-
async function demote(
|
|
169
|
+
async function demote(entries, version, current) {
|
|
113
170
|
// A first version is kept as proof of who created the record — the one
|
|
114
171
|
// with the lowest id, if several devices each created the same chosen key.
|
|
115
172
|
// Not while the record is still at seq 0: then the current version is it.
|
|
116
173
|
if (version.seq === 0 && current.seq > 0) {
|
|
117
|
-
const heldId = await
|
|
174
|
+
const heldId = await entries.get(genesisKey(version.key));
|
|
118
175
|
if (heldId === version.id)
|
|
119
|
-
return
|
|
176
|
+
return;
|
|
120
177
|
if (heldId === null || version.id < heldId) {
|
|
121
|
-
await
|
|
122
|
-
|
|
178
|
+
await entries.keep(version);
|
|
179
|
+
entries.set(genesisKey(version.key), version.id);
|
|
123
180
|
const displaced = heldId ? await adapter.getExpression(heldId) : null;
|
|
124
|
-
|
|
181
|
+
if (displaced)
|
|
182
|
+
await keepOrDrop(entries, displaced);
|
|
183
|
+
return;
|
|
125
184
|
}
|
|
126
185
|
}
|
|
127
|
-
|
|
186
|
+
await keepOrDrop(entries, version);
|
|
128
187
|
}
|
|
129
|
-
async function keepOrDrop(
|
|
188
|
+
async function keepOrDrop(entries, version) {
|
|
130
189
|
if (version.retain) {
|
|
131
|
-
await
|
|
132
|
-
|
|
190
|
+
await entries.keep(version);
|
|
191
|
+
entries.set(historyKey(version), version.id);
|
|
192
|
+
return;
|
|
133
193
|
}
|
|
134
|
-
drop(version
|
|
135
|
-
return root;
|
|
194
|
+
entries.drop(version);
|
|
136
195
|
}
|
|
137
196
|
const load = async (ids) => (await Promise.all([...ids].map((id) => adapter.getExpression(id)))).filter((v) => v !== null);
|
|
197
|
+
const readId = async (key) => {
|
|
198
|
+
const bytes = await adapter.get(key);
|
|
199
|
+
return bytes ? utf8Decode(bytes) : null;
|
|
200
|
+
};
|
|
138
201
|
async function histories(prefix) {
|
|
139
|
-
const root = await getRootCid();
|
|
140
202
|
const ids = new Map();
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
|
|
203
|
+
const add = (key, id) => (ids.get(key) ?? ids.set(key, new Set()).get(key)).add(id);
|
|
204
|
+
for (const entry of [CURRENT_PREFIX, GENESIS_PREFIX]) {
|
|
205
|
+
for (const name of await adapter.list(`${entry}${prefix}`)) {
|
|
206
|
+
const id = await readId(name);
|
|
207
|
+
if (id)
|
|
208
|
+
add(name.slice(entry.length), id);
|
|
146
209
|
}
|
|
147
210
|
}
|
|
211
|
+
// `h/<key>/<seq>/<id>` — a record key holds no `/`, and the id is in the entry's name.
|
|
212
|
+
for (const name of await adapter.list(`${HISTORY_PREFIX}${prefix}`)) {
|
|
213
|
+
const [, key, , id] = name.split('/');
|
|
214
|
+
if (key && id)
|
|
215
|
+
add(key, id);
|
|
216
|
+
}
|
|
148
217
|
const result = new Map();
|
|
149
218
|
for (const [key, held] of ids)
|
|
150
219
|
result.set(key, (await load(held)).sort(byVersion));
|
|
151
220
|
return result;
|
|
152
221
|
}
|
|
153
|
-
async function
|
|
154
|
-
const
|
|
155
|
-
|
|
222
|
+
async function items(collection) {
|
|
223
|
+
const cached = sets.get(collection);
|
|
224
|
+
if (cached)
|
|
225
|
+
return cached;
|
|
226
|
+
const set = new ItemSet((await loadKept()).get(collection)?.values() ?? []);
|
|
227
|
+
sets.set(collection, set);
|
|
228
|
+
return set;
|
|
229
|
+
}
|
|
230
|
+
async function sums() {
|
|
231
|
+
await loadKept();
|
|
232
|
+
return new Map([...(totals ?? [])].filter(([, sum]) => sum.count > 0));
|
|
156
233
|
}
|
|
157
234
|
return Object.freeze({
|
|
158
235
|
addExpression(incoming) {
|
|
159
|
-
return change(async (
|
|
160
|
-
const
|
|
161
|
-
if (
|
|
162
|
-
return
|
|
236
|
+
return change(async (entries) => {
|
|
237
|
+
const currentId = await entries.get(currentKey(incoming.key));
|
|
238
|
+
if (currentId === incoming.id)
|
|
239
|
+
return;
|
|
240
|
+
const current = currentId ? await adapter.getExpression(currentId) : null;
|
|
163
241
|
if (current && !supersedes(incoming, current))
|
|
164
|
-
return demote(
|
|
165
|
-
await
|
|
166
|
-
|
|
167
|
-
|
|
242
|
+
return demote(entries, incoming, current);
|
|
243
|
+
await entries.keep(incoming);
|
|
244
|
+
entries.set(currentKey(incoming.key), incoming.id);
|
|
245
|
+
if (current)
|
|
246
|
+
await demote(entries, current, incoming);
|
|
168
247
|
});
|
|
169
248
|
},
|
|
170
249
|
removeExpression(id) {
|
|
171
|
-
return change(async (
|
|
250
|
+
return change(async (entries) => {
|
|
172
251
|
const version = await adapter.getExpression(id);
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
252
|
+
if (!version)
|
|
253
|
+
return;
|
|
254
|
+
for (const key of [currentKey(version.key), genesisKey(version.key)]) {
|
|
255
|
+
if ((await entries.get(key)) === id)
|
|
256
|
+
entries.unset(key);
|
|
176
257
|
}
|
|
177
|
-
|
|
178
|
-
|
|
258
|
+
entries.unset(historyKey(version));
|
|
259
|
+
entries.drop(version);
|
|
179
260
|
});
|
|
180
261
|
},
|
|
181
262
|
async getExpression(id) {
|
|
182
263
|
return adapter.getExpression(id);
|
|
183
264
|
},
|
|
184
265
|
async getCurrent(key) {
|
|
185
|
-
|
|
266
|
+
const id = await readId(currentKey(key));
|
|
267
|
+
return id ? adapter.getExpression(id) : null;
|
|
186
268
|
},
|
|
187
269
|
async getGenesis(key) {
|
|
188
|
-
const id = await
|
|
270
|
+
const id = await readId(genesisKey(key));
|
|
189
271
|
return id ? adapter.getExpression(id) : null;
|
|
190
272
|
},
|
|
191
273
|
async history(key) {
|
|
@@ -193,28 +275,37 @@ export function createStorageProvider(adapter, options = {}) {
|
|
|
193
275
|
},
|
|
194
276
|
histories,
|
|
195
277
|
async listCurrent() {
|
|
196
|
-
|
|
278
|
+
const ids = await Promise.all((await adapter.list(CURRENT_PREFIX)).map(readId));
|
|
279
|
+
return load(ids.filter((id) => id !== null));
|
|
197
280
|
},
|
|
198
281
|
async queryExpressions(collection) {
|
|
199
|
-
// The index holds every version kept, not only current ones; the
|
|
200
|
-
const root = await getRootCid();
|
|
282
|
+
// The index holds every version kept, not only current ones; the entries say which is current.
|
|
201
283
|
const held = await adapter.queryExpressions(collection, Infinity);
|
|
202
|
-
const current = await Promise.all(held.map(async (v) => (await
|
|
284
|
+
const current = await Promise.all(held.map(async (v) => (await readId(currentKey(v.key))) === v.id));
|
|
203
285
|
return held.filter((_, i) => current[i]);
|
|
204
286
|
},
|
|
205
|
-
async
|
|
206
|
-
return
|
|
287
|
+
async versionIds() {
|
|
288
|
+
return [...(await loadKept()).values()].flatMap((byId) => [...byId.keys()]);
|
|
207
289
|
},
|
|
208
|
-
|
|
209
|
-
|
|
290
|
+
items,
|
|
291
|
+
sums,
|
|
292
|
+
async fingerprint() {
|
|
293
|
+
let total = EMPTY_SUM;
|
|
294
|
+
for (const sum of (await sums()).values())
|
|
295
|
+
total = combineSums(total, sum);
|
|
296
|
+
return bytesToHex(await fingerprintOf(total));
|
|
297
|
+
},
|
|
298
|
+
invalidate() {
|
|
299
|
+
kept = null;
|
|
300
|
+
totals = null;
|
|
301
|
+
sets.clear();
|
|
210
302
|
},
|
|
211
|
-
compact,
|
|
212
303
|
getAdapter() {
|
|
213
304
|
return adapter;
|
|
214
305
|
},
|
|
215
306
|
async close() {
|
|
216
307
|
await adapter.close();
|
|
217
|
-
}
|
|
308
|
+
},
|
|
218
309
|
});
|
|
219
310
|
}
|
|
220
311
|
//# sourceMappingURL=storage-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-provider.js","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAiD9D,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B,+DAA+D;AAC/D,MAAM,aAAa,GAAG,aAAa,CAAC;AACpC,4EAA4E;AAC5E,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AASnC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;AAC9D,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;AAC9D,qDAAqD;AACrD,MAAM,UAAU,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AAE7G;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAuB,EAAE,UAAkC,EAAE;IACjG,KAAK,UAAU,UAAU,CAAC,QAAwB,OAAO;QACvD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,IAAI,IAAI,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAG,CAAI,MAAwB,EAAc,EAAE;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,MAAM,GAAG,CAAC,GAAsG,EAAE,EAAE,CACxH,WAAW,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;QACpD,MAAM,IAAI,GAAmB;YAC3B,GAAG,OAAO;YACV,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3E,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnF,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;YACtD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;SAClD,CAAC;QACF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9E,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjI,KAAK,MAAM,EAAE,IAAI,OAAO;YAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAoB,EAAE,CACpC,WAAW,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,MAAM,UAAU,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAoC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjG,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACxG,MAAM,OAAO,GAAG,CAAC,IAAc,EAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAChJ,qGAAqG;QACrG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrI,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,8DAA8D;IAC9D,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC9D,OAAO,GAAG,CAAC,CAAC;YACZ,KAAK,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF;;;OAGG;IACH,KAAK,UAAU,MAAM,CAAC,IAAoB,EAAE,IAAmB,EAAE,OAAmB,EAAE,OAAmB,EAAE,IAA0B;QACnI,uEAAuE;QACvE,2EAA2E;QAC3E,0EAA0E;QAC1E,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACtE,IAAI,MAAM,KAAK,OAAO,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YACvC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC3C,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtE,OAAO,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpE,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,IAAoB,EAAE,IAAmB,EAAE,OAAmB,EAAE,IAA0B;QAClH,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,EAAE,GAAqB,EAAyB,EAAE,CAClE,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAElH,KAAK,UAAU,SAAS,CAAC,MAAc;QACrC,MAAM,IAAI,GAAG,MAAM,UAAU,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;YACpE,KAAK,MAAM,KAAK,IAAI,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;gBAC5E,0EAA0E;gBAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;gBACrC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,UAAU,SAAS,CAAC,IAAoB,EAAE,IAAmB,EAAE,GAAW;QAC7E,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa,CAAC,QAAoB;YAChC,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBACvC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1D,IAAI,OAAO,EAAE,EAAE,KAAK,QAAQ,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAC;gBAC7C,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;oBAAE,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAElG,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC9E,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB,CAAC,EAAU;YACzB,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBACvC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAChD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACzG,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;wBAAE,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC/F,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,EAAU;YAC5B,OAAO,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,GAAW;YAC1B,OAAO,SAAS,CAAC,OAAO,EAAE,MAAM,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,GAAW;YAC1B,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,UAAU,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3E,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAW;YACvB,OAAO,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC;QAED,SAAS;QAET,KAAK,CAAC,WAAW;YACf,OAAO,IAAI,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,UAAU,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACvG,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB;YACvC,6FAA6F;YAC7F,MAAM,IAAI,GAAG,MAAM,UAAU,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,OAAO;YACX,OAAO,cAAc,CAAC,OAAO,EAAE,MAAM,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,KAAK,CAAC,UAAU;YACd,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;QAED,OAAO;QAEP,UAAU;YACR,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"storage-provider.js","sourceRoot":"","sources":["../../src/storage/storage-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/index.d.ts
CHANGED
package/dist/sync/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
package/dist/sync/index.js
CHANGED
package/dist/sync/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export declare const NEGENTROPY_VERSION = 97;
|
|
2
|
+
export declare const ID_SIZE = 32;
|
|
3
|
+
export declare const FINGERPRINT_SIZE = 16;
|
|
4
|
+
/** One thing in a set: when (for ordering only) and its 32-byte id */
|
|
5
|
+
export interface Item {
|
|
6
|
+
readonly timestamp: number;
|
|
7
|
+
readonly id: Uint8Array;
|
|
8
|
+
}
|
|
9
|
+
interface Bound {
|
|
10
|
+
readonly timestamp: number;
|
|
11
|
+
/** A prefix of an id, just long enough to fall between two neighbours */
|
|
12
|
+
readonly id: Uint8Array;
|
|
13
|
+
}
|
|
14
|
+
export declare function compareItems(a: Bound, b: Bound): number;
|
|
15
|
+
/** An id as the little-endian 256-bit number the sum is taken over */
|
|
16
|
+
export declare function idToNumber(id: Uint8Array): bigint;
|
|
17
|
+
/** The sum of some ids, and how many — a range's fingerprint before hashing */
|
|
18
|
+
export interface Sum {
|
|
19
|
+
readonly sum: bigint;
|
|
20
|
+
readonly count: number;
|
|
21
|
+
}
|
|
22
|
+
export declare const EMPTY_SUM: Sum;
|
|
23
|
+
export declare const addToSum: (s: Sum, id: Uint8Array) => Sum;
|
|
24
|
+
export declare const removeFromSum: (s: Sum, id: Uint8Array) => Sum;
|
|
25
|
+
export declare const combineSums: (a: Sum, b: Sum) => Sum;
|
|
26
|
+
/** Hashes a sum the one way both sides do: 32 little-endian bytes, then the count as a varint */
|
|
27
|
+
export declare function fingerprintOf(s: Sum): Promise<Uint8Array>;
|
|
28
|
+
/**
|
|
29
|
+
* Items sorted by (timestamp, id), with running sums so any range's
|
|
30
|
+
* fingerprint costs two lookups rather than a pass over it.
|
|
31
|
+
*/
|
|
32
|
+
export declare class ItemSet {
|
|
33
|
+
readonly items: ReadonlyArray<Item>;
|
|
34
|
+
/** prefix[i] is the sum of the first i ids */
|
|
35
|
+
private readonly prefix;
|
|
36
|
+
constructor(items: Iterable<Item>);
|
|
37
|
+
get size(): number;
|
|
38
|
+
sum(begin: number, end: number): Sum;
|
|
39
|
+
fingerprint(begin: number, end: number): Promise<Uint8Array>;
|
|
40
|
+
/** The first index in [begin, end) whose item is not below `bound` */
|
|
41
|
+
lowerBound(begin: number, end: number, bound: Bound): number;
|
|
42
|
+
}
|
|
43
|
+
export interface Round {
|
|
44
|
+
/** What to send next; null when the initiator is done */
|
|
45
|
+
readonly message: Uint8Array | null;
|
|
46
|
+
/** Ids this side holds and the other lacks (initiator only) */
|
|
47
|
+
readonly have: ReadonlyArray<Uint8Array>;
|
|
48
|
+
/** Ids the other side holds and this one lacks (initiator only) */
|
|
49
|
+
readonly need: ReadonlyArray<Uint8Array>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* One side of one reconciliation.
|
|
53
|
+
*
|
|
54
|
+
* @param set This side's items
|
|
55
|
+
* @param frameSizeLimit Largest message to produce, in bytes; 0 for no limit.
|
|
56
|
+
* What doesn't fit is left for the next round.
|
|
57
|
+
*/
|
|
58
|
+
export declare function createReconciler(set: ItemSet, options: {
|
|
59
|
+
readonly initiator: boolean;
|
|
60
|
+
readonly frameSizeLimit?: number;
|
|
61
|
+
}): {
|
|
62
|
+
/** The first message: the whole set, split into ranges. Initiator only. */
|
|
63
|
+
initiate(): Promise<Uint8Array>;
|
|
64
|
+
/** Takes the other side's message and works out the answer. */
|
|
65
|
+
reconcile(message: Uint8Array): Promise<Round>;
|
|
66
|
+
};
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=negentropy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negentropy.d.ts","sourceRoot":"","sources":["../../src/sync/negentropy.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,kBAAkB,KAAO,CAAC;AACvC,eAAO,MAAM,OAAO,KAAK,CAAC;AAC1B,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAYnC,sEAAsE;AACtE,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;CACzB;AAED,UAAU,KAAK;IACb,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;CACzB;AAUD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAEvD;AAgED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAQjD;AAED,+EAA+E;AAC/E,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,EAAE,GAA2B,CAAC;AAEpD,eAAO,MAAM,QAAQ,GAAI,GAAG,GAAG,EAAE,IAAI,UAAU,KAAG,GAAoE,CAAC;AACvH,eAAO,MAAM,aAAa,GAAI,GAAG,GAAG,EAAE,IAAI,UAAU,KAAG,GAA0E,CAAC;AAClI,eAAO,MAAM,WAAW,GAAI,GAAG,GAAG,EAAE,GAAG,GAAG,KAAG,GAAiE,CAAC;AAE/G,iGAAiG;AACjG,wBAAsB,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAU/D;AAID;;;GAGG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;gBAEtB,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;IAajC,IAAI,IAAI,WAEP;IAED,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG;IAIpC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI5D,sEAAsE;IACtE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;CAU7D;AAID,MAAM,WAAW,KAAK;IACpB,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE;IAqErH,2EAA2E;gBACzD,OAAO,CAAC,UAAU,CAAC;IASrC,+DAA+D;uBACtC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;EAmGvD"}
|