@atproto/repo 0.8.13 → 0.9.1
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/CHANGELOG.md +27 -0
- package/dist/block-map.d.ts +15 -16
- package/dist/block-map.d.ts.map +1 -1
- package/dist/block-map.js +9 -43
- package/dist/block-map.js.map +1 -1
- package/dist/car.d.ts +8 -8
- package/dist/car.d.ts.map +1 -1
- package/dist/car.js +18 -15
- package/dist/car.js.map +1 -1
- package/dist/cid-set.d.ts +8 -7
- package/dist/cid-set.d.ts.map +1 -1
- package/dist/cid-set.js +11 -4
- package/dist/cid-set.js.map +1 -1
- package/dist/data-diff.d.ts +10 -10
- package/dist/data-diff.d.ts.map +1 -1
- package/dist/data-diff.js.map +1 -1
- package/dist/error.d.ts +10 -10
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -0
- package/dist/logger.js.map +1 -1
- package/dist/mst/mst.d.ts +29 -29
- package/dist/mst/mst.d.ts.map +1 -1
- package/dist/mst/mst.js +12 -12
- package/dist/mst/mst.js.map +1 -1
- package/dist/mst/util.d.ts +2 -2
- package/dist/mst/util.d.ts.map +1 -1
- package/dist/mst/util.js +19 -39
- package/dist/mst/util.js.map +1 -1
- package/dist/parse.d.ts +6 -7
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +2 -2
- package/dist/parse.js.map +1 -1
- package/dist/readable-repo.d.ts +6 -7
- package/dist/readable-repo.d.ts.map +1 -1
- package/dist/readable-repo.js.map +1 -1
- package/dist/repo.d.ts +4 -4
- package/dist/repo.d.ts.map +1 -1
- package/dist/repo.js +11 -9
- package/dist/repo.js.map +1 -1
- package/dist/storage/memory-blockstore.d.ts +9 -9
- package/dist/storage/memory-blockstore.d.ts.map +1 -1
- package/dist/storage/memory-blockstore.js.map +1 -1
- package/dist/storage/readable-blockstore.d.ts +11 -12
- package/dist/storage/readable-blockstore.d.ts.map +1 -1
- package/dist/storage/readable-blockstore.js +2 -35
- package/dist/storage/readable-blockstore.js.map +1 -1
- package/dist/storage/sync-storage.d.ts +5 -5
- package/dist/storage/sync-storage.d.ts.map +1 -1
- package/dist/storage/sync-storage.js.map +1 -1
- package/dist/storage/types.d.ts +25 -26
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/sync/consumer.d.ts +3 -3
- package/dist/sync/consumer.d.ts.map +1 -1
- package/dist/sync/consumer.js +1 -1
- package/dist/sync/consumer.js.map +1 -1
- package/dist/sync/provider.d.ts +3 -3
- package/dist/sync/provider.d.ts.map +1 -1
- package/dist/sync/provider.js.map +1 -1
- package/dist/types.d.ts +127 -100
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +53 -12
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +8 -3
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +33 -16
- package/dist/util.js.map +1 -1
- package/package.json +6 -7
- package/src/block-map.ts +31 -26
- package/src/car.ts +23 -28
- package/src/cid-set.ts +16 -10
- package/src/data-diff.ts +10 -10
- package/src/error.ts +6 -6
- package/src/logger.ts +1 -0
- package/src/mst/mst.ts +24 -26
- package/src/mst/util.ts +24 -9
- package/src/parse.ts +8 -8
- package/src/readable-repo.ts +6 -7
- package/src/repo.ts +13 -10
- package/src/storage/memory-blockstore.ts +8 -8
- package/src/storage/readable-blockstore.ts +12 -13
- package/src/storage/sync-storage.ts +4 -4
- package/src/storage/types.ts +25 -25
- package/src/sync/consumer.ts +5 -5
- package/src/sync/provider.ts +10 -7
- package/src/types.ts +82 -41
- package/src/util.ts +31 -14
- package/tests/_util.ts +28 -12
- package/tests/car.test.ts +31 -11
- package/tests/commit-proofs.test.ts +3 -3
- package/tests/covering-proofs.test.ts +6 -6
- package/tests/mst.test.ts +18 -19
- package/tests/proofs.test.ts +8 -6
- package/tests/repo.test.ts +1 -1
- package/tests/sync.test.ts +3 -6
- package/bench/mst.bench.ts +0 -165
- package/bench/repo.bench.ts +0 -48
package/dist/mst/util.js
CHANGED
|
@@ -1,43 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.InvalidMstKeyError = exports.ensureValidMstKey = exports.isValidChars = exports.validCharsRegex = exports.isValidMstKey = exports.cidForEntries = exports.countPrefixLen = exports.serializeNodeData = exports.deserializeNodeData = exports.layerForEntries = exports.leadingZerosOnHash = void 0;
|
|
37
|
-
const uint8arrays = __importStar(require("uint8arrays"));
|
|
38
|
-
const common_1 = require("@atproto/common");
|
|
39
4
|
const crypto_1 = require("@atproto/crypto");
|
|
5
|
+
const lex_cbor_1 = require("@atproto/lex-cbor");
|
|
40
6
|
const mst_1 = require("./mst");
|
|
7
|
+
function toAscii(bytes) {
|
|
8
|
+
let string = '';
|
|
9
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
10
|
+
string += String.fromCharCode(bytes[i]);
|
|
11
|
+
}
|
|
12
|
+
return string;
|
|
13
|
+
}
|
|
14
|
+
function fromAscii(str) {
|
|
15
|
+
const bytes = new Uint8Array(str.length);
|
|
16
|
+
for (let i = 0; i < str.length; i++) {
|
|
17
|
+
bytes[i] = str.charCodeAt(i);
|
|
18
|
+
}
|
|
19
|
+
return bytes;
|
|
20
|
+
}
|
|
41
21
|
const leadingZerosOnHash = async (key) => {
|
|
42
22
|
const hash = await (0, crypto_1.sha256)(key);
|
|
43
23
|
let leadingZeros = 0;
|
|
@@ -76,8 +56,8 @@ const deserializeNodeData = async (storage, data, opts) => {
|
|
|
76
56
|
}
|
|
77
57
|
let lastKey = '';
|
|
78
58
|
for (const entry of data.e) {
|
|
79
|
-
const keyStr =
|
|
80
|
-
const key = lastKey.slice(0, entry.p)
|
|
59
|
+
const keyStr = toAscii(entry.k);
|
|
60
|
+
const key = `${lastKey.slice(0, entry.p)}${keyStr}`;
|
|
81
61
|
(0, exports.ensureValidMstKey)(key);
|
|
82
62
|
entries.push(new mst_1.Leaf(key, entry.v));
|
|
83
63
|
lastKey = key;
|
|
@@ -117,7 +97,7 @@ const serializeNodeData = (entries) => {
|
|
|
117
97
|
const prefixLen = (0, exports.countPrefixLen)(lastKey, leaf.key);
|
|
118
98
|
data.e.push({
|
|
119
99
|
p: prefixLen,
|
|
120
|
-
k:
|
|
100
|
+
k: fromAscii(leaf.key.slice(prefixLen)),
|
|
121
101
|
v: leaf.value,
|
|
122
102
|
t: subtree,
|
|
123
103
|
});
|
|
@@ -138,7 +118,7 @@ const countPrefixLen = (a, b) => {
|
|
|
138
118
|
exports.countPrefixLen = countPrefixLen;
|
|
139
119
|
const cidForEntries = async (entries) => {
|
|
140
120
|
const data = (0, exports.serializeNodeData)(entries);
|
|
141
|
-
return (0,
|
|
121
|
+
return (0, lex_cbor_1.cidForLex)(data);
|
|
142
122
|
};
|
|
143
123
|
exports.cidForEntries = cidForEntries;
|
|
144
124
|
const isValidMstKey = (str) => {
|
package/dist/mst/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/mst/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/mst/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { sha256 } from '@atproto/crypto'\nimport { cidForLex } from '@atproto/lex-cbor'\nimport { Cid } from '@atproto/lex-data'\nimport { ReadableBlockstore } from '../storage'\nimport { Leaf, MST, MstOpts, NodeData, NodeEntry } from './mst'\n\nfunction toAscii(bytes: Uint8Array): string {\n let string = ''\n for (let i = 0; i < bytes.length; i++) {\n string += String.fromCharCode(bytes[i])\n }\n return string\n}\n\nfunction fromAscii(str: string): Uint8Array {\n const bytes = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i)\n }\n return bytes\n}\n\nexport const leadingZerosOnHash = async (key: string | Uint8Array) => {\n const hash = await sha256(key)\n let leadingZeros = 0\n for (let i = 0; i < hash.length; i++) {\n const byte = hash[i]\n if (byte < 64) leadingZeros++\n if (byte < 16) leadingZeros++\n if (byte < 4) leadingZeros++\n if (byte === 0) {\n leadingZeros++\n } else {\n break\n }\n }\n return leadingZeros\n}\n\nexport const layerForEntries = async (\n entries: NodeEntry[],\n): Promise<number | null> => {\n const firstLeaf = entries.find((entry) => entry.isLeaf())\n if (!firstLeaf || firstLeaf.isTree()) return null\n return await leadingZerosOnHash(firstLeaf.key)\n}\n\nexport const deserializeNodeData = async (\n storage: ReadableBlockstore,\n data: NodeData,\n opts?: Partial<MstOpts>,\n): Promise<NodeEntry[]> => {\n const { layer } = opts || {}\n const entries: NodeEntry[] = []\n if (data.l !== null) {\n entries.push(\n await MST.load(storage, data.l, {\n layer: layer ? layer - 1 : undefined,\n }),\n )\n }\n let lastKey = ''\n for (const entry of data.e) {\n const keyStr = toAscii(entry.k)\n const key = `${lastKey.slice(0, entry.p)}${keyStr}`\n ensureValidMstKey(key)\n entries.push(new Leaf(key, entry.v))\n lastKey = key\n if (entry.t !== null) {\n entries.push(\n await MST.load(storage, entry.t, {\n layer: layer ? layer - 1 : undefined,\n }),\n )\n }\n }\n return entries\n}\n\nexport const serializeNodeData = (entries: NodeEntry[]): NodeData => {\n const data: NodeData = {\n l: null,\n e: [],\n }\n let i = 0\n if (entries[0]?.isTree()) {\n i++\n data.l = entries[0].pointer\n }\n let lastKey = ''\n while (i < entries.length) {\n const leaf = entries[i]\n const next = entries[i + 1]\n if (!leaf.isLeaf()) {\n throw new Error('Not a valid node: two subtrees next to each other')\n }\n i++\n let subtree: Cid | null = null\n if (next?.isTree()) {\n subtree = next.pointer\n i++\n }\n ensureValidMstKey(leaf.key)\n const prefixLen = countPrefixLen(lastKey, leaf.key)\n data.e.push({\n p: prefixLen,\n k: fromAscii(leaf.key.slice(prefixLen)),\n v: leaf.value,\n t: subtree,\n })\n\n lastKey = leaf.key\n }\n return data\n}\n\nexport const countPrefixLen = (a: string, b: string): number => {\n let i\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n break\n }\n }\n return i\n}\n\nexport const cidForEntries = async (entries: NodeEntry[]): Promise<Cid> => {\n const data = serializeNodeData(entries)\n return cidForLex(data)\n}\n\nexport const isValidMstKey = (str: string): boolean => {\n const split = str.split('/')\n return (\n str.length <= 1024 &&\n split.length === 2 &&\n split[0].length > 0 &&\n split[1].length > 0 &&\n isValidChars(split[0]) &&\n isValidChars(split[1])\n )\n}\n\nexport const validCharsRegex = /^[a-zA-Z0-9_~\\-:.]*$/\n\nexport const isValidChars = (str: string): boolean => {\n return str.match(validCharsRegex) !== null\n}\n\nexport const ensureValidMstKey = (str: string) => {\n if (!isValidMstKey(str)) {\n throw new InvalidMstKeyError(str)\n }\n}\n\nexport class InvalidMstKeyError extends Error {\n constructor(public key: string) {\n super(`Not a valid MST key: ${key}`)\n }\n}\n"]}
|
package/dist/parse.d.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { RepoRecord } from '@atproto/lexicon';
|
|
1
|
+
import { check } from '@atproto/common-web';
|
|
2
|
+
import { Cid, LexMap } from '@atproto/lex-data';
|
|
4
3
|
import { BlockMap } from './block-map';
|
|
5
|
-
export declare const getAndParseRecord: (blocks: BlockMap, cid:
|
|
6
|
-
record:
|
|
4
|
+
export declare const getAndParseRecord: (blocks: BlockMap, cid: Cid) => Promise<{
|
|
5
|
+
record: LexMap;
|
|
7
6
|
bytes: Uint8Array;
|
|
8
7
|
}>;
|
|
9
|
-
export declare const getAndParseByDef: <T>(blocks: BlockMap, cid:
|
|
8
|
+
export declare const getAndParseByDef: <T>(blocks: BlockMap, cid: Cid, def: check.Def<T>) => Promise<{
|
|
10
9
|
obj: T;
|
|
11
10
|
bytes: Uint8Array;
|
|
12
11
|
}>;
|
|
13
|
-
export declare const parseObjByDef: <T>(bytes: Uint8Array, cid:
|
|
12
|
+
export declare const parseObjByDef: <T>(bytes: Uint8Array, cid: Cid, def: check.Def<T>) => {
|
|
14
13
|
obj: T;
|
|
15
14
|
bytes: Uint8Array;
|
|
16
15
|
};
|
package/dist/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAItC,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,QAAQ,EAChB,KAAK,GAAG,KACP,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAO/C,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,EACtC,QAAQ,QAAQ,EAChB,KAAK,GAAG,EACR,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAChB,OAAO,CAAC;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAMvC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,EAC7B,OAAO,UAAU,EACjB,KAAK,GAAG,EACR,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAChB;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAQ7B,CAAA"}
|
package/dist/parse.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseObjByDef = exports.getAndParseByDef = exports.getAndParseRecord = void 0;
|
|
4
|
-
const
|
|
4
|
+
const lex_cbor_1 = require("@atproto/lex-cbor");
|
|
5
5
|
const error_1 = require("./error");
|
|
6
6
|
const util_1 = require("./util");
|
|
7
7
|
const getAndParseRecord = async (blocks, cid) => {
|
|
@@ -22,7 +22,7 @@ const getAndParseByDef = async (blocks, cid, def) => {
|
|
|
22
22
|
};
|
|
23
23
|
exports.getAndParseByDef = getAndParseByDef;
|
|
24
24
|
const parseObjByDef = (bytes, cid, def) => {
|
|
25
|
-
const obj = (0,
|
|
25
|
+
const obj = (0, lex_cbor_1.decode)(bytes);
|
|
26
26
|
const res = def.schema.safeParse(obj);
|
|
27
27
|
if (res.success) {
|
|
28
28
|
return { obj: res.data, bytes };
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";;;AACA,gDAA0C;AAG1C,mCAAkE;AAClE,iCAAwC;AAEjC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAgB,EAChB,GAAQ,EACwC,EAAE;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,yBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,sBAAe,EAAC,KAAK,CAAC,CAAA;IACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC1B,CAAC,CAAA;AAVY,QAAA,iBAAiB,qBAU7B;AAEM,MAAM,gBAAgB,GAAG,KAAK,EACnC,MAAgB,EAChB,GAAQ,EACR,GAAiB,EACuB,EAAE;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,yBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,IAAA,qBAAa,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACvC,CAAC,CAAA;AAVY,QAAA,gBAAgB,oBAU5B;AAEM,MAAM,aAAa,GAAG,CAC3B,KAAiB,EACjB,GAAQ,EACR,GAAiB,EACc,EAAE;IACjC,MAAM,GAAG,GAAG,IAAA,iBAAM,EAAC,KAAK,CAAC,CAAA;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,6BAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;AACH,CAAC,CAAA;AAZY,QAAA,aAAa,iBAYzB","sourcesContent":["import { check } from '@atproto/common-web'\nimport { decode } from '@atproto/lex-cbor'\nimport { Cid, LexMap } from '@atproto/lex-data'\nimport { BlockMap } from './block-map'\nimport { MissingBlockError, UnexpectedObjectError } from './error'\nimport { cborToLexRecord } from './util'\n\nexport const getAndParseRecord = async (\n blocks: BlockMap,\n cid: Cid,\n): Promise<{ record: LexMap; bytes: Uint8Array }> => {\n const bytes = blocks.get(cid)\n if (!bytes) {\n throw new MissingBlockError(cid, 'record')\n }\n const record = cborToLexRecord(bytes)\n return { record, bytes }\n}\n\nexport const getAndParseByDef = async <T>(\n blocks: BlockMap,\n cid: Cid,\n def: check.Def<T>,\n): Promise<{ obj: T; bytes: Uint8Array }> => {\n const bytes = blocks.get(cid)\n if (!bytes) {\n throw new MissingBlockError(cid, def.name)\n }\n return parseObjByDef(bytes, cid, def)\n}\n\nexport const parseObjByDef = <T>(\n bytes: Uint8Array,\n cid: Cid,\n def: check.Def<T>,\n): { obj: T; bytes: Uint8Array } => {\n const obj = decode(bytes)\n const res = def.schema.safeParse(obj)\n if (res.success) {\n return { obj: res.data, bytes }\n } else {\n throw new UnexpectedObjectError(cid, def.name)\n }\n}\n"]}
|
package/dist/readable-repo.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { RepoRecord } from '@atproto/lexicon';
|
|
1
|
+
import { Cid, LexMap } from '@atproto/lex-data';
|
|
3
2
|
import { MST } from './mst';
|
|
4
3
|
import { ReadableBlockstore } from './storage';
|
|
5
4
|
import { Commit, RepoContents } from './types';
|
|
@@ -7,22 +6,22 @@ type Params = {
|
|
|
7
6
|
storage: ReadableBlockstore;
|
|
8
7
|
data: MST;
|
|
9
8
|
commit: Commit;
|
|
10
|
-
cid:
|
|
9
|
+
cid: Cid;
|
|
11
10
|
};
|
|
12
11
|
export declare class ReadableRepo {
|
|
13
12
|
storage: ReadableBlockstore;
|
|
14
13
|
data: MST;
|
|
15
14
|
commit: Commit;
|
|
16
|
-
cid:
|
|
15
|
+
cid: Cid;
|
|
17
16
|
constructor(params: Params);
|
|
18
|
-
static load(storage: ReadableBlockstore, commitCid:
|
|
17
|
+
static load(storage: ReadableBlockstore, commitCid: Cid): Promise<ReadableRepo>;
|
|
19
18
|
get did(): string;
|
|
20
19
|
get version(): number;
|
|
21
20
|
walkRecords(from?: string): AsyncIterable<{
|
|
22
21
|
collection: string;
|
|
23
22
|
rkey: string;
|
|
24
|
-
cid:
|
|
25
|
-
record:
|
|
23
|
+
cid: Cid;
|
|
24
|
+
record: LexMap;
|
|
26
25
|
}>;
|
|
27
26
|
getRecord(collection: string, rkey: string): Promise<unknown | null>;
|
|
28
27
|
getContents(): Promise<RepoContents>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable-repo.d.ts","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"readable-repo.d.ts","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAO,MAAM,SAAS,CAAA;AAGnD,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,qBAAa,YAAY;IACvB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;gBAEI,MAAM,EAAE,MAAM;WAOb,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG;IAY7D,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAEM,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;QAC/C,UAAU,EAAE,MAAM,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,GAAG,CAAA;QACR,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;IAQI,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOpE,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;CAgB3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable-repo.js","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"readable-repo.js","sourceRoot":"","sources":["../src/readable-repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cid, LexMap } from '@atproto/lex-data'\nimport { MissingBlocksError } from './error'\nimport log from './logger'\nimport { MST } from './mst'\nimport * as parse from './parse'\nimport { ReadableBlockstore } from './storage'\nimport { Commit, RepoContents, def } from './types'\nimport * as util from './util'\n\ntype Params = {\n storage: ReadableBlockstore\n data: MST\n commit: Commit\n cid: Cid\n}\n\nexport class ReadableRepo {\n storage: ReadableBlockstore\n data: MST\n commit: Commit\n cid: Cid\n\n constructor(params: Params) {\n this.storage = params.storage\n this.data = params.data\n this.commit = params.commit\n this.cid = params.cid\n }\n\n static async load(storage: ReadableBlockstore, commitCid: Cid) {\n const commit = await storage.readObj(commitCid, def.versionedCommit)\n const data = await MST.load(storage, commit.data)\n log.info({ did: commit.did }, 'loaded repo for')\n return new ReadableRepo({\n storage,\n data,\n commit: util.ensureV3Commit(commit),\n cid: commitCid,\n })\n }\n\n get did(): string {\n return this.commit.did\n }\n\n get version(): number {\n return this.commit.version\n }\n\n async *walkRecords(from?: string): AsyncIterable<{\n collection: string\n rkey: string\n cid: Cid\n record: LexMap\n }> {\n for await (const leaf of this.data.walkLeavesFrom(from ?? '')) {\n const { collection, rkey } = util.parseDataKey(leaf.key)\n const record = await this.storage.readRecord(leaf.value)\n yield { collection, rkey, cid: leaf.value, record }\n }\n }\n\n async getRecord(collection: string, rkey: string): Promise<unknown | null> {\n const dataKey = collection + '/' + rkey\n const cid = await this.data.get(dataKey)\n if (!cid) return null\n return this.storage.readObj(cid, def.unknown)\n }\n\n async getContents(): Promise<RepoContents> {\n const entries = await this.data.list()\n const cids = entries.map((e) => e.value)\n const { blocks, missing } = await this.storage.getBlocks(cids)\n if (missing.length > 0) {\n throw new MissingBlocksError('getContents record', missing)\n }\n const contents: RepoContents = {}\n for (const entry of entries) {\n const { collection, rkey } = util.parseDataKey(entry.key)\n contents[collection] ??= {}\n const parsed = await parse.getAndParseRecord(blocks, entry.value)\n contents[collection][rkey] = parsed.record\n }\n return contents\n }\n}\n"]}
|
package/dist/repo.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CID } from 'multiformats/cid';
|
|
2
1
|
import * as crypto from '@atproto/crypto';
|
|
2
|
+
import { Cid } from '@atproto/lex-data';
|
|
3
3
|
import { BlockMap } from './block-map';
|
|
4
4
|
import { CidSet } from './cid-set';
|
|
5
5
|
import { MST } from './mst';
|
|
@@ -10,7 +10,7 @@ type Params = {
|
|
|
10
10
|
storage: RepoStorage;
|
|
11
11
|
data: MST;
|
|
12
12
|
commit: Commit;
|
|
13
|
-
cid:
|
|
13
|
+
cid: Cid;
|
|
14
14
|
};
|
|
15
15
|
export declare class Repo extends ReadableRepo {
|
|
16
16
|
storage: RepoStorage;
|
|
@@ -18,12 +18,12 @@ export declare class Repo extends ReadableRepo {
|
|
|
18
18
|
static formatInitCommit(storage: RepoStorage, did: string, keypair: crypto.Keypair, initialWrites?: RecordCreateOp[], revOverride?: string): Promise<CommitData>;
|
|
19
19
|
static createFromCommit(storage: RepoStorage, commit: CommitData): Promise<Repo>;
|
|
20
20
|
static create(storage: RepoStorage, did: string, keypair: crypto.Keypair, initialWrites?: RecordCreateOp[]): Promise<Repo>;
|
|
21
|
-
static load(storage: RepoStorage, cid?:
|
|
21
|
+
static load(storage: RepoStorage, cid?: Cid): Promise<Repo>;
|
|
22
22
|
formatCommit(toWrite: RecordWriteOp | RecordWriteOp[], keypair: crypto.Keypair): Promise<CommitData>;
|
|
23
23
|
applyCommit(commitData: CommitData): Promise<Repo>;
|
|
24
24
|
applyWrites(toWrite: RecordWriteOp | RecordWriteOp[], keypair: crypto.Keypair): Promise<Repo>;
|
|
25
25
|
formatResignCommit(rev: string, keypair: crypto.Keypair): Promise<{
|
|
26
|
-
cid:
|
|
26
|
+
cid: Cid<0 | 1, number, number>;
|
|
27
27
|
rev: string;
|
|
28
28
|
since: null;
|
|
29
29
|
prev: null;
|
package/dist/repo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../src/repo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../src/repo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,GAAG,EAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGlC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EACL,MAAM,EACN,UAAU,EACV,cAAc,EACd,aAAa,EAGd,MAAM,SAAS,CAAA;AAGhB,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,qBAAa,IAAK,SAAQ,YAAY;IACpC,OAAO,EAAE,WAAW,CAAA;gBAER,MAAM,EAAE,MAAM;WAKb,gBAAgB,CAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,aAAa,GAAE,cAAc,EAAO,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC;WAoCT,gBAAgB,CAC3B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC;WAKH,MAAM,CACjB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,aAAa,GAAE,cAAc,EAAO,GACnC,OAAO,CAAC,IAAI,CAAC;WAUH,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG;IAgB3C,YAAY,CAChB,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,EACxC,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,UAAU,CAAC;IAwEhB,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,WAAW,CACf,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,EACxC,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,IAAI,CAAC;IAKV,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;;;;;;;;;IAwBvD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;CAIxD;AAED,eAAe,IAAI,CAAA"}
|
package/dist/repo.js
CHANGED
|
@@ -37,8 +37,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.Repo = void 0;
|
|
40
|
-
const
|
|
41
|
-
const
|
|
40
|
+
const common_web_1 = require("@atproto/common-web");
|
|
41
|
+
const lex_cbor_1 = require("@atproto/lex-cbor");
|
|
42
|
+
const lex_data_1 = require("@atproto/lex-data");
|
|
42
43
|
const block_map_1 = require("./block-map");
|
|
43
44
|
const cid_set_1 = require("./cid-set");
|
|
44
45
|
const data_diff_1 = require("./data-diff");
|
|
@@ -69,7 +70,7 @@ class Repo extends readable_repo_1.ReadableRepo {
|
|
|
69
70
|
const dataCid = await data.getPointer();
|
|
70
71
|
const diff = await data_diff_1.DataDiff.of(data, null);
|
|
71
72
|
newBlocks.addMap(diff.newMstBlocks);
|
|
72
|
-
const rev = revOverride ??
|
|
73
|
+
const rev = revOverride ?? common_web_1.TID.nextStr();
|
|
73
74
|
const commit = await util.signCommit({
|
|
74
75
|
did,
|
|
75
76
|
version: 3,
|
|
@@ -145,7 +146,7 @@ class Repo extends readable_repo_1.ReadableRepo {
|
|
|
145
146
|
}
|
|
146
147
|
newBlocks.addMap(addedLeaves.blocks);
|
|
147
148
|
relevantBlocks.addMap(addedLeaves.blocks);
|
|
148
|
-
const rev =
|
|
149
|
+
const rev = common_web_1.TID.nextStr(this.commit.rev);
|
|
149
150
|
const commit = await util.signCommit({
|
|
150
151
|
did: this.did,
|
|
151
152
|
version: 3,
|
|
@@ -153,14 +154,15 @@ class Repo extends readable_repo_1.ReadableRepo {
|
|
|
153
154
|
prev: null, // added for backwards compatibility with v2
|
|
154
155
|
data: dataCid,
|
|
155
156
|
}, keypair);
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
157
|
+
const commitBytes = (0, lex_cbor_1.encode)(commit);
|
|
158
|
+
const commitCid = await (0, lex_data_1.cidForCbor)(commitBytes);
|
|
159
|
+
if (!commitCid.equals(this.cid)) {
|
|
160
|
+
newBlocks.set(commitCid, commitBytes);
|
|
161
|
+
relevantBlocks.set(commitCid, commitBytes);
|
|
160
162
|
removedCids.add(this.cid);
|
|
161
163
|
}
|
|
162
164
|
return {
|
|
163
|
-
cid:
|
|
165
|
+
cid: commitCid,
|
|
164
166
|
rev,
|
|
165
167
|
since: this.commit.rev,
|
|
166
168
|
prev: this.cid,
|
package/dist/repo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../src/repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { CID } from 'multiformats/cid'\nimport { TID, dataToCborBlock } from '@atproto/common'\nimport * as crypto from '@atproto/crypto'\nimport { lexToIpld } from '@atproto/lexicon'\nimport { BlockMap } from './block-map'\nimport { CidSet } from './cid-set'\nimport { DataDiff } from './data-diff'\nimport log from './logger'\nimport { MST } from './mst'\nimport { ReadableRepo } from './readable-repo'\nimport { RepoStorage } from './storage'\nimport {\n Commit,\n CommitData,\n RecordCreateOp,\n RecordWriteOp,\n WriteOpAction,\n def,\n} from './types'\nimport * as util from './util'\n\ntype Params = {\n storage: RepoStorage\n data: MST\n commit: Commit\n cid: CID\n}\n\nexport class Repo extends ReadableRepo {\n storage: RepoStorage\n\n constructor(params: Params) {\n super(params)\n this.storage = params.storage\n }\n\n static async formatInitCommit(\n storage: RepoStorage,\n did: string,\n keypair: crypto.Keypair,\n initialWrites: RecordCreateOp[] = [],\n revOverride?: string,\n ): Promise<CommitData> {\n const newBlocks = new BlockMap()\n\n let data = await MST.create(storage)\n for (const record of initialWrites) {\n const cid = await newBlocks.add(record.record)\n const dataKey = util.formatDataKey(record.collection, record.rkey)\n data = await data.add(dataKey, cid)\n }\n const dataCid = await data.getPointer()\n const diff = await DataDiff.of(data, null)\n newBlocks.addMap(diff.newMstBlocks)\n\n const rev = revOverride ?? TID.nextStr()\n const commit = await util.signCommit(\n {\n did,\n version: 3,\n rev,\n prev: null, // added for backwards compatibility with v2\n data: dataCid,\n },\n keypair,\n )\n const commitCid = await newBlocks.add(commit)\n return {\n cid: commitCid,\n rev,\n since: null,\n prev: null,\n newBlocks,\n relevantBlocks: newBlocks,\n removedCids: diff.removedCids,\n }\n }\n\n static async createFromCommit(\n storage: RepoStorage,\n commit: CommitData,\n ): Promise<Repo> {\n await storage.applyCommit(commit)\n return Repo.load(storage, commit.cid)\n }\n\n static async create(\n storage: RepoStorage,\n did: string,\n keypair: crypto.Keypair,\n initialWrites: RecordCreateOp[] = [],\n ): Promise<Repo> {\n const commit = await Repo.formatInitCommit(\n storage,\n did,\n keypair,\n initialWrites,\n )\n return Repo.createFromCommit(storage, commit)\n }\n\n static async load(storage: RepoStorage, cid?: CID) {\n const commitCid = cid || (await storage.getRoot())\n if (!commitCid) {\n throw new Error('No cid provided and none in storage')\n }\n const commit = await storage.readObj(commitCid, def.versionedCommit)\n const data = await MST.load(storage, commit.data)\n log.info({ did: commit.did }, 'loaded repo for')\n return new Repo({\n storage,\n data,\n commit: util.ensureV3Commit(commit),\n cid: commitCid,\n })\n }\n\n async formatCommit(\n toWrite: RecordWriteOp | RecordWriteOp[],\n keypair: crypto.Keypair,\n ): Promise<CommitData> {\n const writes = Array.isArray(toWrite) ? toWrite : [toWrite]\n const leaves = new BlockMap()\n\n let data = this.data\n for (const write of writes) {\n if (write.action === WriteOpAction.Create) {\n const cid = await leaves.add(write.record)\n const dataKey = write.collection + '/' + write.rkey\n data = await data.add(dataKey, cid)\n } else if (write.action === WriteOpAction.Update) {\n const cid = await leaves.add(write.record)\n const dataKey = write.collection + '/' + write.rkey\n data = await data.update(dataKey, cid)\n } else if (write.action === WriteOpAction.Delete) {\n const dataKey = write.collection + '/' + write.rkey\n data = await data.delete(dataKey)\n }\n }\n\n const dataCid = await data.getPointer()\n const diff = await DataDiff.of(data, this.data)\n const newBlocks = diff.newMstBlocks\n const removedCids = diff.removedCids\n\n const proofs = await Promise.all(\n writes.map((op) =>\n data.getCoveringProof(util.formatDataKey(op.collection, op.rkey)),\n ),\n )\n const relevantBlocks = new BlockMap()\n for (const proof of proofs) relevantBlocks.addMap(proof)\n\n const addedLeaves = leaves.getMany(diff.newLeafCids.toList())\n if (addedLeaves.missing.length > 0) {\n throw new Error(`Missing leaf blocks: ${addedLeaves.missing}`)\n }\n newBlocks.addMap(addedLeaves.blocks)\n relevantBlocks.addMap(addedLeaves.blocks)\n\n const rev = TID.nextStr(this.commit.rev)\n const commit = await util.signCommit(\n {\n did: this.did,\n version: 3,\n rev,\n prev: null, // added for backwards compatibility with v2\n data: dataCid,\n },\n keypair,\n )\n const commitBlock = await dataToCborBlock(lexToIpld(commit))\n if (!commitBlock.cid.equals(this.cid)) {\n newBlocks.set(commitBlock.cid, commitBlock.bytes)\n relevantBlocks.set(commitBlock.cid, commitBlock.bytes)\n removedCids.add(this.cid)\n }\n\n return {\n cid: commitBlock.cid,\n rev,\n since: this.commit.rev,\n prev: this.cid,\n newBlocks,\n relevantBlocks,\n removedCids,\n }\n }\n\n async applyCommit(commitData: CommitData): Promise<Repo> {\n await this.storage.applyCommit(commitData)\n return Repo.load(this.storage, commitData.cid)\n }\n\n async applyWrites(\n toWrite: RecordWriteOp | RecordWriteOp[],\n keypair: crypto.Keypair,\n ): Promise<Repo> {\n const commit = await this.formatCommit(toWrite, keypair)\n return this.applyCommit(commit)\n }\n\n async formatResignCommit(rev: string, keypair: crypto.Keypair) {\n const commit = await util.signCommit(\n {\n did: this.did,\n version: 3,\n rev,\n prev: null, // added for backwards compatibility with v2\n data: this.commit.data,\n },\n keypair,\n )\n const newBlocks = new BlockMap()\n const commitCid = await newBlocks.add(commit)\n return {\n cid: commitCid,\n rev,\n since: null,\n prev: null,\n newBlocks,\n relevantBlocks: newBlocks,\n removedCids: new CidSet([this.cid]),\n }\n }\n\n async resignCommit(rev: string, keypair: crypto.Keypair) {\n const formatted = await this.formatResignCommit(rev, keypair)\n return this.applyCommit(formatted)\n }\n}\n\nexport default Repo\n"]}
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../src/repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { TID } from '@atproto/common-web'\nimport * as crypto from '@atproto/crypto'\nimport { encode } from '@atproto/lex-cbor'\nimport { Cid, cidForCbor } from '@atproto/lex-data'\nimport { BlockMap } from './block-map'\nimport { CidSet } from './cid-set'\nimport { DataDiff } from './data-diff'\nimport log from './logger'\nimport { MST } from './mst'\nimport { ReadableRepo } from './readable-repo'\nimport { RepoStorage } from './storage'\nimport {\n Commit,\n CommitData,\n RecordCreateOp,\n RecordWriteOp,\n WriteOpAction,\n def,\n} from './types'\nimport * as util from './util'\n\ntype Params = {\n storage: RepoStorage\n data: MST\n commit: Commit\n cid: Cid\n}\n\nexport class Repo extends ReadableRepo {\n storage: RepoStorage\n\n constructor(params: Params) {\n super(params)\n this.storage = params.storage\n }\n\n static async formatInitCommit(\n storage: RepoStorage,\n did: string,\n keypair: crypto.Keypair,\n initialWrites: RecordCreateOp[] = [],\n revOverride?: string,\n ): Promise<CommitData> {\n const newBlocks = new BlockMap()\n\n let data = await MST.create(storage)\n for (const record of initialWrites) {\n const cid = await newBlocks.add(record.record)\n const dataKey = util.formatDataKey(record.collection, record.rkey)\n data = await data.add(dataKey, cid)\n }\n const dataCid = await data.getPointer()\n const diff = await DataDiff.of(data, null)\n newBlocks.addMap(diff.newMstBlocks)\n\n const rev = revOverride ?? TID.nextStr()\n const commit = await util.signCommit(\n {\n did,\n version: 3,\n rev,\n prev: null, // added for backwards compatibility with v2\n data: dataCid,\n },\n keypair,\n )\n const commitCid = await newBlocks.add(commit)\n return {\n cid: commitCid,\n rev,\n since: null,\n prev: null,\n newBlocks,\n relevantBlocks: newBlocks,\n removedCids: diff.removedCids,\n }\n }\n\n static async createFromCommit(\n storage: RepoStorage,\n commit: CommitData,\n ): Promise<Repo> {\n await storage.applyCommit(commit)\n return Repo.load(storage, commit.cid)\n }\n\n static async create(\n storage: RepoStorage,\n did: string,\n keypair: crypto.Keypair,\n initialWrites: RecordCreateOp[] = [],\n ): Promise<Repo> {\n const commit = await Repo.formatInitCommit(\n storage,\n did,\n keypair,\n initialWrites,\n )\n return Repo.createFromCommit(storage, commit)\n }\n\n static async load(storage: RepoStorage, cid?: Cid) {\n const commitCid = cid || (await storage.getRoot())\n if (!commitCid) {\n throw new Error('No cid provided and none in storage')\n }\n const commit = await storage.readObj(commitCid, def.versionedCommit)\n const data = await MST.load(storage, commit.data)\n log.info({ did: commit.did }, 'loaded repo for')\n return new Repo({\n storage,\n data,\n commit: util.ensureV3Commit(commit),\n cid: commitCid,\n })\n }\n\n async formatCommit(\n toWrite: RecordWriteOp | RecordWriteOp[],\n keypair: crypto.Keypair,\n ): Promise<CommitData> {\n const writes = Array.isArray(toWrite) ? toWrite : [toWrite]\n const leaves = new BlockMap()\n\n let data = this.data\n for (const write of writes) {\n if (write.action === WriteOpAction.Create) {\n const cid = await leaves.add(write.record)\n const dataKey = write.collection + '/' + write.rkey\n data = await data.add(dataKey, cid)\n } else if (write.action === WriteOpAction.Update) {\n const cid = await leaves.add(write.record)\n const dataKey = write.collection + '/' + write.rkey\n data = await data.update(dataKey, cid)\n } else if (write.action === WriteOpAction.Delete) {\n const dataKey = write.collection + '/' + write.rkey\n data = await data.delete(dataKey)\n }\n }\n\n const dataCid = await data.getPointer()\n const diff = await DataDiff.of(data, this.data)\n const newBlocks = diff.newMstBlocks\n const removedCids = diff.removedCids\n\n const proofs = await Promise.all(\n writes.map((op) =>\n data.getCoveringProof(util.formatDataKey(op.collection, op.rkey)),\n ),\n )\n const relevantBlocks = new BlockMap()\n for (const proof of proofs) relevantBlocks.addMap(proof)\n\n const addedLeaves = leaves.getMany(diff.newLeafCids.toList())\n if (addedLeaves.missing.length > 0) {\n throw new Error(`Missing leaf blocks: ${addedLeaves.missing}`)\n }\n newBlocks.addMap(addedLeaves.blocks)\n relevantBlocks.addMap(addedLeaves.blocks)\n\n const rev = TID.nextStr(this.commit.rev)\n const commit = await util.signCommit(\n {\n did: this.did,\n version: 3,\n rev,\n prev: null, // added for backwards compatibility with v2\n data: dataCid,\n },\n keypair,\n )\n\n const commitBytes = encode(commit)\n const commitCid = await cidForCbor(commitBytes)\n\n if (!commitCid.equals(this.cid)) {\n newBlocks.set(commitCid, commitBytes)\n relevantBlocks.set(commitCid, commitBytes)\n removedCids.add(this.cid)\n }\n\n return {\n cid: commitCid,\n rev,\n since: this.commit.rev,\n prev: this.cid,\n newBlocks,\n relevantBlocks,\n removedCids,\n }\n }\n\n async applyCommit(commitData: CommitData): Promise<Repo> {\n await this.storage.applyCommit(commitData)\n return Repo.load(this.storage, commitData.cid)\n }\n\n async applyWrites(\n toWrite: RecordWriteOp | RecordWriteOp[],\n keypair: crypto.Keypair,\n ): Promise<Repo> {\n const commit = await this.formatCommit(toWrite, keypair)\n return this.applyCommit(commit)\n }\n\n async formatResignCommit(rev: string, keypair: crypto.Keypair) {\n const commit = await util.signCommit(\n {\n did: this.did,\n version: 3,\n rev,\n prev: null, // added for backwards compatibility with v2\n data: this.commit.data,\n },\n keypair,\n )\n const newBlocks = new BlockMap()\n const commitCid = await newBlocks.add(commit)\n return {\n cid: commitCid,\n rev,\n since: null,\n prev: null,\n newBlocks,\n relevantBlocks: newBlocks,\n removedCids: new CidSet([this.cid]),\n }\n }\n\n async resignCommit(rev: string, keypair: crypto.Keypair) {\n const formatted = await this.formatResignCommit(rev, keypair)\n return this.applyCommit(formatted)\n }\n}\n\nexport default Repo\n"]}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Cid } from '@atproto/lex-data';
|
|
2
2
|
import { BlockMap } from '../block-map';
|
|
3
3
|
import { CommitData } from '../types';
|
|
4
4
|
import { ReadableBlockstore } from './readable-blockstore';
|
|
5
5
|
import { RepoStorage } from './types';
|
|
6
6
|
export declare class MemoryBlockstore extends ReadableBlockstore implements RepoStorage {
|
|
7
7
|
blocks: BlockMap;
|
|
8
|
-
root:
|
|
8
|
+
root: Cid | null;
|
|
9
9
|
rev: string | null;
|
|
10
10
|
constructor(blocks?: BlockMap);
|
|
11
|
-
getRoot(): Promise<
|
|
12
|
-
getBytes(cid:
|
|
13
|
-
has(cid:
|
|
14
|
-
getBlocks(cids:
|
|
11
|
+
getRoot(): Promise<Cid | null>;
|
|
12
|
+
getBytes(cid: Cid): Promise<Uint8Array | null>;
|
|
13
|
+
has(cid: Cid): Promise<boolean>;
|
|
14
|
+
getBlocks(cids: Cid[]): Promise<{
|
|
15
15
|
blocks: BlockMap;
|
|
16
|
-
missing:
|
|
16
|
+
missing: Cid[];
|
|
17
17
|
}>;
|
|
18
|
-
putBlock(cid:
|
|
18
|
+
putBlock(cid: Cid, block: Uint8Array): Promise<void>;
|
|
19
19
|
putMany(blocks: BlockMap): Promise<void>;
|
|
20
|
-
updateRoot(cid:
|
|
20
|
+
updateRoot(cid: Cid, rev: string): Promise<void>;
|
|
21
21
|
applyCommit(commit: CommitData): Promise<void>;
|
|
22
22
|
sizeInBytes(): Promise<number>;
|
|
23
23
|
destroy(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-blockstore.d.ts","sourceRoot":"","sources":["../../src/storage/memory-blockstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"memory-blockstore.d.ts","sourceRoot":"","sources":["../../src/storage/memory-blockstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,qBAAa,gBACX,SAAQ,kBACR,YAAW,WAAW;IAEtB,MAAM,EAAE,QAAQ,CAAA;IAChB,IAAI,EAAE,GAAG,GAAG,IAAI,CAAO;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAO;gBAEb,MAAM,CAAC,EAAE,QAAQ;IAQvB,OAAO,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAI9B,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI9C,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/B,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAIrE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-blockstore.js","sourceRoot":"","sources":["../../src/storage/memory-blockstore.ts"],"names":[],"mappings":";;;AACA,4CAAuC;AAEvC,+DAA0D;AAG1D,MAAa,gBACX,SAAQ,wCAAkB;IAO1B,YAAY,MAAiB;QAC3B,KAAK,EAAE,CAAA;QALT;;;;;WAAgB;QAChB;;;;mBAAmB,IAAI;WAAA;QACvB;;;;mBAAqB,IAAI;WAAA;QAIvB,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAQ,EAAE,CAAA;QAC5B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAQ;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ,EAAE,KAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAgB;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ,EAAE,GAAW;QACpC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAkB;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA;QAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,KAAK,IAAI,KAAK,CAAC,UAAU,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;CACF;AAnED,4CAmEC;AAED,kBAAe,gBAAgB,CAAA","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"memory-blockstore.js","sourceRoot":"","sources":["../../src/storage/memory-blockstore.ts"],"names":[],"mappings":";;;AACA,4CAAuC;AAEvC,+DAA0D;AAG1D,MAAa,gBACX,SAAQ,wCAAkB;IAO1B,YAAY,MAAiB;QAC3B,KAAK,EAAE,CAAA;QALT;;;;;WAAgB;QAChB;;;;mBAAmB,IAAI;WAAA;QACvB;;;;mBAAqB,IAAI;WAAA;QAIvB,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAQ,EAAE,CAAA;QAC5B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAQ;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ,EAAE,KAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAgB;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ,EAAE,GAAW;QACpC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAkB;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA;QAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,KAAK,IAAI,KAAK,CAAC,UAAU,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;CACF;AAnED,4CAmEC;AAED,kBAAe,gBAAgB,CAAA","sourcesContent":["import { Cid } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map'\nimport { CommitData } from '../types'\nimport { ReadableBlockstore } from './readable-blockstore'\nimport { RepoStorage } from './types'\n\nexport class MemoryBlockstore\n extends ReadableBlockstore\n implements RepoStorage\n{\n blocks: BlockMap\n root: Cid | null = null\n rev: string | null = null\n\n constructor(blocks?: BlockMap) {\n super()\n this.blocks = new BlockMap()\n if (blocks) {\n this.blocks.addMap(blocks)\n }\n }\n\n async getRoot(): Promise<Cid | null> {\n return this.root\n }\n\n async getBytes(cid: Cid): Promise<Uint8Array | null> {\n return this.blocks.get(cid) || null\n }\n\n async has(cid: Cid): Promise<boolean> {\n return this.blocks.has(cid)\n }\n\n async getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }> {\n return this.blocks.getMany(cids)\n }\n\n async putBlock(cid: Cid, block: Uint8Array): Promise<void> {\n this.blocks.set(cid, block)\n }\n\n async putMany(blocks: BlockMap): Promise<void> {\n this.blocks.addMap(blocks)\n }\n\n async updateRoot(cid: Cid, rev: string): Promise<void> {\n this.root = cid\n this.rev = rev\n }\n\n async applyCommit(commit: CommitData): Promise<void> {\n this.root = commit.cid\n const rmCids = commit.removedCids.toList()\n for (const cid of rmCids) {\n this.blocks.delete(cid)\n }\n commit.newBlocks.forEach((bytes, cid) => {\n this.blocks.set(cid, bytes)\n })\n }\n\n async sizeInBytes(): Promise<number> {\n let total = 0\n this.blocks.forEach((bytes) => {\n total += bytes.byteLength\n })\n return total\n }\n\n async destroy(): Promise<void> {\n this.blocks.clear()\n }\n}\n\nexport default MemoryBlockstore\n"]}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { RepoRecord } from '@atproto/lexicon';
|
|
1
|
+
import { check } from '@atproto/common-web';
|
|
2
|
+
import { Cid, LexMap } from '@atproto/lex-data';
|
|
4
3
|
import { BlockMap } from '../block-map';
|
|
5
4
|
export declare abstract class ReadableBlockstore {
|
|
6
|
-
abstract getBytes(cid:
|
|
7
|
-
abstract has(cid:
|
|
8
|
-
abstract getBlocks(cids:
|
|
5
|
+
abstract getBytes(cid: Cid): Promise<Uint8Array | null>;
|
|
6
|
+
abstract has(cid: Cid): Promise<boolean>;
|
|
7
|
+
abstract getBlocks(cids: Cid[]): Promise<{
|
|
9
8
|
blocks: BlockMap;
|
|
10
|
-
missing:
|
|
9
|
+
missing: Cid[];
|
|
11
10
|
}>;
|
|
12
|
-
attemptRead<T>(cid:
|
|
11
|
+
attemptRead<T>(cid: Cid, def: check.Def<T>): Promise<{
|
|
13
12
|
obj: T;
|
|
14
13
|
bytes: Uint8Array;
|
|
15
14
|
} | null>;
|
|
16
|
-
readObjAndBytes<T>(cid:
|
|
15
|
+
readObjAndBytes<T>(cid: Cid, def: check.Def<T>): Promise<{
|
|
17
16
|
obj: T;
|
|
18
17
|
bytes: Uint8Array;
|
|
19
18
|
}>;
|
|
20
|
-
readObj<T>(cid:
|
|
21
|
-
attemptReadRecord(cid:
|
|
22
|
-
readRecord(cid:
|
|
19
|
+
readObj<T>(cid: Cid, def: check.Def<T>): Promise<T>;
|
|
20
|
+
attemptReadRecord(cid: Cid): Promise<LexMap | null>;
|
|
21
|
+
readRecord(cid: Cid): Promise<LexMap>;
|
|
23
22
|
}
|
|
24
23
|
export default ReadableBlockstore;
|
|
25
24
|
//# sourceMappingURL=readable-blockstore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable-blockstore.d.ts","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"readable-blockstore.d.ts","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAKvC,8BAAsB,kBAAkB;IACtC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAExE,WAAW,CAAC,CAAC,EACjB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IAM1C,eAAe,CAAC,CAAC,EACrB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;IAQnC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKnD,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQnD,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;CAO5C;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -1,48 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.ReadableBlockstore = void 0;
|
|
37
4
|
const error_1 = require("../error");
|
|
38
|
-
const
|
|
5
|
+
const parse_1 = require("../parse");
|
|
39
6
|
const util_1 = require("../util");
|
|
40
7
|
class ReadableBlockstore {
|
|
41
8
|
async attemptRead(cid, def) {
|
|
42
9
|
const bytes = await this.getBytes(cid);
|
|
43
10
|
if (!bytes)
|
|
44
11
|
return null;
|
|
45
|
-
return
|
|
12
|
+
return (0, parse_1.parseObjByDef)(bytes, cid, def);
|
|
46
13
|
}
|
|
47
14
|
async readObjAndBytes(cid, def) {
|
|
48
15
|
const read = await this.attemptRead(cid, def);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable-blockstore.js","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"readable-blockstore.js","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":";;;AAGA,oCAA4C;AAC5C,oCAAwC;AACxC,kCAAyC;AAEzC,MAAsB,kBAAkB;IAKtC,KAAK,CAAC,WAAW,CACf,GAAQ,EACR,GAAiB;QAEjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACvB,OAAO,IAAA,qBAAa,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAQ,EACR,GAAiB;QAEjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,yBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,GAAQ,EAAE,GAAiB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAChD,OAAO,GAAG,CAAC,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAQ;QAC9B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,yBAAiB,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,IAAA,sBAAe,EAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;CACF;AA7CD,gDA6CC;AAED,kBAAe,kBAAkB,CAAA","sourcesContent":["import { check } from '@atproto/common-web'\nimport { Cid, LexMap } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map'\nimport { MissingBlockError } from '../error'\nimport { parseObjByDef } from '../parse'\nimport { cborToLexRecord } from '../util'\n\nexport abstract class ReadableBlockstore {\n abstract getBytes(cid: Cid): Promise<Uint8Array | null>\n abstract has(cid: Cid): Promise<boolean>\n abstract getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }>\n\n async attemptRead<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array } | null> {\n const bytes = await this.getBytes(cid)\n if (!bytes) return null\n return parseObjByDef(bytes, cid, def)\n }\n\n async readObjAndBytes<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array }> {\n const read = await this.attemptRead(cid, def)\n if (!read) {\n throw new MissingBlockError(cid, def.name)\n }\n return read\n }\n\n async readObj<T>(cid: Cid, def: check.Def<T>): Promise<T> {\n const obj = await this.readObjAndBytes(cid, def)\n return obj.obj\n }\n\n async attemptReadRecord(cid: Cid): Promise<LexMap | null> {\n try {\n return await this.readRecord(cid)\n } catch {\n return null\n }\n }\n\n async readRecord(cid: Cid): Promise<LexMap> {\n const bytes = await this.getBytes(cid)\n if (!bytes) {\n throw new MissingBlockError(cid)\n }\n return cborToLexRecord(bytes)\n }\n}\n\nexport default ReadableBlockstore\n"]}
|