@atproto/repo 0.3.9 → 0.4.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/CHANGELOG.md +14 -0
- package/dist/block-map.d.ts +1 -0
- package/dist/block-map.d.ts.map +1 -0
- package/dist/block-map.js +119 -0
- package/dist/block-map.js.map +1 -0
- package/dist/cid-set.d.ts +1 -0
- package/dist/cid-set.d.ts.map +1 -0
- package/dist/cid-set.js +48 -0
- package/dist/cid-set.js.map +1 -0
- package/dist/data-diff.d.ts +1 -0
- package/dist/data-diff.d.ts.map +1 -0
- package/dist/data-diff.js +134 -0
- package/dist/data-diff.js.map +1 -0
- package/dist/error.d.ts +1 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +76 -0
- package/dist/error.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -27225
- package/dist/index.js.map +1 -7
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +7 -0
- package/dist/logger.js.map +1 -0
- package/dist/mst/diff.d.ts +1 -0
- package/dist/mst/diff.d.ts.map +1 -0
- package/dist/mst/diff.js +120 -0
- package/dist/mst/diff.js.map +1 -0
- package/dist/mst/index.d.ts +1 -0
- package/dist/mst/index.d.ts.map +1 -0
- package/dist/mst/index.js +34 -0
- package/dist/mst/index.js.map +1 -0
- package/dist/mst/mst.d.ts +6 -5
- package/dist/mst/mst.d.ts.map +1 -0
- package/dist/mst/mst.js +770 -0
- package/dist/mst/mst.js.map +1 -0
- package/dist/mst/util.d.ts +1 -0
- package/dist/mst/util.d.ts.map +1 -0
- package/dist/mst/util.js +167 -0
- package/dist/mst/util.js.map +1 -0
- package/dist/mst/walker.d.ts +1 -0
- package/dist/mst/walker.d.ts.map +1 -0
- package/dist/mst/walker.js +123 -0
- package/dist/mst/walker.js.map +1 -0
- package/dist/parse.d.ts +1 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +35 -0
- package/dist/parse.js.map +1 -0
- package/dist/readable-repo.d.ts +1 -0
- package/dist/readable-repo.d.ts.map +1 -0
- package/dist/readable-repo.js +117 -0
- package/dist/readable-repo.js.map +1 -0
- package/dist/repo.d.ts +1 -0
- package/dist/repo.d.ts.map +1 -0
- package/dist/repo.js +190 -0
- package/dist/repo.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +21 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/memory-blockstore.d.ts +1 -0
- package/dist/storage/memory-blockstore.d.ts.map +1 -0
- package/dist/storage/memory-blockstore.js +80 -0
- package/dist/storage/memory-blockstore.js.map +1 -0
- package/dist/storage/readable-blockstore.d.ts +1 -0
- package/dist/storage/readable-blockstore.d.ts.map +1 -0
- package/dist/storage/readable-blockstore.js +66 -0
- package/dist/storage/readable-blockstore.js.map +1 -0
- package/dist/storage/sync-storage.d.ts +1 -0
- package/dist/storage/sync-storage.d.ts.map +1 -0
- package/dist/storage/sync-storage.js +46 -0
- package/dist/storage/sync-storage.js.map +1 -0
- package/dist/storage/types.d.ts +1 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +7 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/sync/consumer.d.ts +1 -0
- package/dist/sync/consumer.d.ts.map +1 -0
- package/dist/sync/consumer.js +178 -0
- package/dist/sync/consumer.js.map +1 -0
- package/dist/sync/index.d.ts +1 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +19 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/provider.d.ts +1 -0
- package/dist/sync/provider.d.ts.map +1 -0
- package/dist/sync/provider.js +67 -0
- package/dist/sync/provider.js.map +1 -0
- package/dist/types.d.ts +22 -19
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +62 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +2 -1
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +219 -0
- package/dist/util.js.map +1 -0
- package/jest.config.js +3 -3
- package/package.json +11 -14
- package/src/mst/mst.ts +1 -1
- package/src/types.ts +4 -2
- package/src/util.ts +1 -1
- package/tests/_util.ts +4 -0
- package/tsconfig.build.json +6 -2
- package/tsconfig.json +3 -11
- package/tsconfig.tests.json +7 -0
- package/babel.config.js +0 -1
- package/build.js +0 -14
- package/jest.bench.config.js +0 -8
package/dist/util.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
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 (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.ensureV3Commit = exports.cidForRecord = exports.cborToLexRecord = exports.cborToLex = exports.verifyCommitSig = exports.signCommit = exports.metaEqual = exports.formatDataKey = exports.parseDataKey = exports.ensureCreates = exports.diffToWriteDescripts = exports.readCarWithRoot = exports.readCarStream = exports.readCar = exports.carToBlocks = exports.blocksToCarFile = exports.blocksToCarStream = exports.writeCar = exports.writeCarStream = exports.verifyIncomingCarBlocks = void 0;
|
|
30
|
+
const promises_1 = require("node:timers/promises");
|
|
31
|
+
const cbor = __importStar(require("@ipld/dag-cbor"));
|
|
32
|
+
const iterator_1 = require("@ipld/car/iterator");
|
|
33
|
+
const writer_1 = require("@ipld/car/writer");
|
|
34
|
+
const common_1 = require("@atproto/common");
|
|
35
|
+
const lexicon_1 = require("@atproto/lexicon");
|
|
36
|
+
const crypto = __importStar(require("@atproto/crypto"));
|
|
37
|
+
const types_1 = require("./types");
|
|
38
|
+
const block_map_1 = __importDefault(require("./block-map"));
|
|
39
|
+
async function* verifyIncomingCarBlocks(car) {
|
|
40
|
+
for await (const block of car) {
|
|
41
|
+
await (0, common_1.verifyCidForBytes)(block.cid, block.bytes);
|
|
42
|
+
yield block;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.verifyIncomingCarBlocks = verifyIncomingCarBlocks;
|
|
46
|
+
// we have to turn the car writer output into a stream in order to properly handle errors
|
|
47
|
+
function writeCarStream(root, fn) {
|
|
48
|
+
const { writer, out } = root !== null ? writer_1.CarWriter.create(root) : writer_1.CarWriter.create();
|
|
49
|
+
const stream = (0, common_1.byteIterableToStream)(out);
|
|
50
|
+
fn(writer)
|
|
51
|
+
.catch((err) => {
|
|
52
|
+
stream.destroy(err);
|
|
53
|
+
})
|
|
54
|
+
.finally(() => writer.close());
|
|
55
|
+
return stream;
|
|
56
|
+
}
|
|
57
|
+
exports.writeCarStream = writeCarStream;
|
|
58
|
+
async function* writeCar(root, fn) {
|
|
59
|
+
const stream = writeCarStream(root, fn);
|
|
60
|
+
for await (const chunk of stream) {
|
|
61
|
+
yield chunk;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.writeCar = writeCar;
|
|
65
|
+
const blocksToCarStream = (root, blocks) => {
|
|
66
|
+
return writeCar(root, async (writer) => {
|
|
67
|
+
for (const entry of blocks.entries()) {
|
|
68
|
+
await writer.put(entry);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
exports.blocksToCarStream = blocksToCarStream;
|
|
73
|
+
const blocksToCarFile = (root, blocks) => {
|
|
74
|
+
const carStream = (0, exports.blocksToCarStream)(root, blocks);
|
|
75
|
+
return (0, common_1.streamToBuffer)(carStream);
|
|
76
|
+
};
|
|
77
|
+
exports.blocksToCarFile = blocksToCarFile;
|
|
78
|
+
const carToBlocks = async (car) => {
|
|
79
|
+
const roots = await car.getRoots();
|
|
80
|
+
const blocks = new block_map_1.default();
|
|
81
|
+
for await (const block of verifyIncomingCarBlocks(car)) {
|
|
82
|
+
blocks.set(block.cid, block.bytes);
|
|
83
|
+
// break up otherwise "synchronous" work in car parsing
|
|
84
|
+
await (0, promises_1.setImmediate)();
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
roots,
|
|
88
|
+
blocks,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
exports.carToBlocks = carToBlocks;
|
|
92
|
+
const readCar = async (bytes) => {
|
|
93
|
+
const car = await iterator_1.CarBlockIterator.fromBytes(bytes);
|
|
94
|
+
return (0, exports.carToBlocks)(car);
|
|
95
|
+
};
|
|
96
|
+
exports.readCar = readCar;
|
|
97
|
+
const readCarStream = async (stream) => {
|
|
98
|
+
const car = await iterator_1.CarBlockIterator.fromIterable(stream);
|
|
99
|
+
return (0, exports.carToBlocks)(car);
|
|
100
|
+
};
|
|
101
|
+
exports.readCarStream = readCarStream;
|
|
102
|
+
const readCarWithRoot = async (bytes) => {
|
|
103
|
+
const { roots, blocks } = await (0, exports.readCar)(bytes);
|
|
104
|
+
if (roots.length !== 1) {
|
|
105
|
+
throw new Error(`Expected one root, got ${roots.length}`);
|
|
106
|
+
}
|
|
107
|
+
const root = roots[0];
|
|
108
|
+
return {
|
|
109
|
+
root,
|
|
110
|
+
blocks,
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
exports.readCarWithRoot = readCarWithRoot;
|
|
114
|
+
const diffToWriteDescripts = (diff) => {
|
|
115
|
+
return Promise.all([
|
|
116
|
+
...diff.addList().map(async (add) => {
|
|
117
|
+
const { collection, rkey } = (0, exports.parseDataKey)(add.key);
|
|
118
|
+
return {
|
|
119
|
+
action: types_1.WriteOpAction.Create,
|
|
120
|
+
collection,
|
|
121
|
+
rkey,
|
|
122
|
+
cid: add.cid,
|
|
123
|
+
};
|
|
124
|
+
}),
|
|
125
|
+
...diff.updateList().map(async (upd) => {
|
|
126
|
+
const { collection, rkey } = (0, exports.parseDataKey)(upd.key);
|
|
127
|
+
return {
|
|
128
|
+
action: types_1.WriteOpAction.Update,
|
|
129
|
+
collection,
|
|
130
|
+
rkey,
|
|
131
|
+
cid: upd.cid,
|
|
132
|
+
prev: upd.prev,
|
|
133
|
+
};
|
|
134
|
+
}),
|
|
135
|
+
...diff.deleteList().map((del) => {
|
|
136
|
+
const { collection, rkey } = (0, exports.parseDataKey)(del.key);
|
|
137
|
+
return {
|
|
138
|
+
action: types_1.WriteOpAction.Delete,
|
|
139
|
+
collection,
|
|
140
|
+
rkey,
|
|
141
|
+
cid: del.cid,
|
|
142
|
+
};
|
|
143
|
+
}),
|
|
144
|
+
]);
|
|
145
|
+
};
|
|
146
|
+
exports.diffToWriteDescripts = diffToWriteDescripts;
|
|
147
|
+
const ensureCreates = (descripts) => {
|
|
148
|
+
const creates = [];
|
|
149
|
+
for (const descript of descripts) {
|
|
150
|
+
if (descript.action !== types_1.WriteOpAction.Create) {
|
|
151
|
+
throw new Error(`Unexpected action: ${descript.action}`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
creates.push(descript);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return creates;
|
|
158
|
+
};
|
|
159
|
+
exports.ensureCreates = ensureCreates;
|
|
160
|
+
const parseDataKey = (key) => {
|
|
161
|
+
const parts = key.split('/');
|
|
162
|
+
if (parts.length !== 2)
|
|
163
|
+
throw new Error(`Invalid record key: ${key}`);
|
|
164
|
+
return { collection: parts[0], rkey: parts[1] };
|
|
165
|
+
};
|
|
166
|
+
exports.parseDataKey = parseDataKey;
|
|
167
|
+
const formatDataKey = (collection, rkey) => {
|
|
168
|
+
return collection + '/' + rkey;
|
|
169
|
+
};
|
|
170
|
+
exports.formatDataKey = formatDataKey;
|
|
171
|
+
const metaEqual = (a, b) => {
|
|
172
|
+
return a.did === b.did && a.version === b.version;
|
|
173
|
+
};
|
|
174
|
+
exports.metaEqual = metaEqual;
|
|
175
|
+
const signCommit = async (unsigned, keypair) => {
|
|
176
|
+
const encoded = cbor.encode(unsigned);
|
|
177
|
+
const sig = await keypair.sign(encoded);
|
|
178
|
+
return {
|
|
179
|
+
...unsigned,
|
|
180
|
+
sig,
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
exports.signCommit = signCommit;
|
|
184
|
+
const verifyCommitSig = async (commit, didKey) => {
|
|
185
|
+
const { sig, ...rest } = commit;
|
|
186
|
+
const encoded = cbor.encode(rest);
|
|
187
|
+
return crypto.verifySignature(didKey, encoded, sig);
|
|
188
|
+
};
|
|
189
|
+
exports.verifyCommitSig = verifyCommitSig;
|
|
190
|
+
const cborToLex = (val) => {
|
|
191
|
+
return (0, lexicon_1.ipldToLex)((0, common_1.cborDecode)(val));
|
|
192
|
+
};
|
|
193
|
+
exports.cborToLex = cborToLex;
|
|
194
|
+
const cborToLexRecord = (val) => {
|
|
195
|
+
const parsed = (0, exports.cborToLex)(val);
|
|
196
|
+
if (!common_1.check.is(parsed, common_1.schema.map)) {
|
|
197
|
+
throw new Error('lexicon records be a json object');
|
|
198
|
+
}
|
|
199
|
+
return parsed;
|
|
200
|
+
};
|
|
201
|
+
exports.cborToLexRecord = cborToLexRecord;
|
|
202
|
+
const cidForRecord = async (val) => {
|
|
203
|
+
return (0, common_1.cidForCbor)((0, lexicon_1.lexToIpld)(val));
|
|
204
|
+
};
|
|
205
|
+
exports.cidForRecord = cidForRecord;
|
|
206
|
+
const ensureV3Commit = (commit) => {
|
|
207
|
+
if (commit.version === 3) {
|
|
208
|
+
return commit;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
return {
|
|
212
|
+
...commit,
|
|
213
|
+
version: 3,
|
|
214
|
+
rev: commit.rev ?? common_1.TID.nextStr(),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
exports.ensureV3Commit = ensureV3Commit;
|
|
219
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAmD;AAEnD,qDAAsC;AACtC,iDAAqD;AACrD,6CAAyD;AACzD,4CASwB;AACxB,8CAA6E;AAE7E,wDAAyC;AAEzC,mCAWgB;AAChB,4DAAkC;AAI3B,KAAK,SAAS,CAAC,CAAC,uBAAuB,CAC5C,GAA4B;IAE5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,IAAA,0BAAiB,EAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAPD,0DAOC;AAED,yFAAyF;AACzF,SAAgB,cAAc,CAC5B,IAAgB,EAChB,EAAuC;IAEvC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GACnB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAS,CAAC,MAAM,EAAE,CAAA;IAE7D,MAAM,MAAM,GAAG,IAAA,6BAAoB,EAAC,GAAG,CAAC,CAAA;IACxC,EAAE,CAAC,MAAM,CAAC;SACP,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACrB,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;IAChC,OAAO,MAAM,CAAA;AACf,CAAC;AAdD,wCAcC;AAEM,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,IAAgB,EAChB,EAAuC;IAEvC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACvC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AARD,4BAQC;AAEM,MAAM,iBAAiB,GAAG,CAC/B,IAAgB,EAChB,MAAgB,EACW,EAAE;IAC7B,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACrC,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AATY,QAAA,iBAAiB,qBAS7B;AAEM,MAAM,eAAe,GAAG,CAC7B,IAAgB,EAChB,MAAgB,EACK,EAAE;IACvB,MAAM,SAAS,GAAG,IAAA,yBAAiB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACjD,OAAO,IAAA,uBAAc,EAAC,SAAS,CAAC,CAAA;AAClC,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B;AAEM,MAAM,WAAW,GAAG,KAAK,EAC9B,GAAqB,EACwB,EAAE;IAC/C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAA;IAClC,MAAM,MAAM,GAAG,IAAI,mBAAQ,EAAE,CAAA;IAC7B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAClC,uDAAuD;QACvD,MAAM,IAAA,uBAAY,GAAE,CAAA;IACtB,CAAC;IACD,OAAO;QACL,KAAK;QACL,MAAM;KACP,CAAA;AACH,CAAC,CAAA;AAdY,QAAA,WAAW,eAcvB;AAEM,MAAM,OAAO,GAAG,KAAK,EAC1B,KAAiB,EAC4B,EAAE;IAC/C,MAAM,GAAG,GAAG,MAAM,2BAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACnD,OAAO,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAA;AACzB,CAAC,CAAA;AALY,QAAA,OAAO,WAKnB;AAEM,MAAM,aAAa,GAAG,KAAK,EAAE,MAAiC,EAAE,EAAE;IACvE,MAAM,GAAG,GAAG,MAAM,2BAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IACvD,OAAO,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAA;AACzB,CAAC,CAAA;AAHY,QAAA,aAAa,iBAGzB;AAEM,MAAM,eAAe,GAAG,KAAK,EAClC,KAAiB,EACyB,EAAE;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,eAAO,EAAC,KAAK,CAAC,CAAA;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3D,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACrB,OAAO;QACL,IAAI;QACJ,MAAM;KACP,CAAA;AACH,CAAC,CAAA;AAZY,QAAA,eAAe,mBAY3B;AAEM,MAAM,oBAAoB,GAAG,CAClC,IAAc,EACkB,EAAE;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAA,oBAAY,EAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAClD,OAAO;gBACL,MAAM,EAAE,qBAAa,CAAC,MAAM;gBAC5B,UAAU;gBACV,IAAI;gBACJ,GAAG,EAAE,GAAG,CAAC,GAAG;aACW,CAAA;QAC3B,CAAC,CAAC;QACF,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACrC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAA,oBAAY,EAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAClD,OAAO;gBACL,MAAM,EAAE,qBAAa,CAAC,MAAM;gBAC5B,UAAU;gBACV,IAAI;gBACJ,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;aACS,CAAA;QAC3B,CAAC,CAAC;QACF,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAA,oBAAY,EAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAClD,OAAO;gBACL,MAAM,EAAE,qBAAa,CAAC,MAAM;gBAC5B,UAAU;gBACV,IAAI;gBACJ,GAAG,EAAE,GAAG,CAAC,GAAG;aACW,CAAA;QAC3B,CAAC,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA;AAjCY,QAAA,oBAAoB,wBAiChC;AAEM,MAAM,aAAa,GAAG,CAC3B,SAAgC,EACR,EAAE;IAC1B,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,qBAAa,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAZY,QAAA,aAAa,iBAYzB;AAEM,MAAM,YAAY,GAAG,CAAC,GAAW,EAAc,EAAE;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAA;IACrE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACjD,CAAC,CAAA;AAJY,QAAA,YAAY,gBAIxB;AAEM,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAU,EAAE;IACxE,OAAO,UAAU,GAAG,GAAG,GAAG,IAAI,CAAA;AAChC,CAAC,CAAA;AAFY,QAAA,aAAa,iBAEzB;AAEM,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE;IACzD,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAA;AACnD,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB;AAEM,MAAM,UAAU,GAAG,KAAK,EAC7B,QAAwB,EACxB,OAAgB,EACC,EAAE;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvC,OAAO;QACL,GAAG,QAAQ;QACX,GAAG;KACJ,CAAA;AACH,CAAC,CAAA;AAVY,QAAA,UAAU,cAUtB;AAEM,MAAM,eAAe,GAAG,KAAK,EAClC,MAAc,EACd,MAAc,EACI,EAAE;IACpB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACjC,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;AACrD,CAAC,CAAA;AAPY,QAAA,eAAe,mBAO3B;AAEM,MAAM,SAAS,GAAG,CAAC,GAAe,EAAY,EAAE;IACrD,OAAO,IAAA,mBAAS,EAAC,IAAA,mBAAU,EAAC,GAAG,CAAC,CAAC,CAAA;AACnC,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB;AAEM,MAAM,eAAe,GAAG,CAAC,GAAe,EAAc,EAAE;IAC7D,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,cAAK,CAAC,EAAE,CAAC,MAAM,EAAE,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B;AAEM,MAAM,YAAY,GAAG,KAAK,EAAE,GAAa,EAAE,EAAE;IAClD,OAAO,IAAA,mBAAU,EAAC,IAAA,mBAAS,EAAC,GAAG,CAAC,CAAC,CAAA;AACnC,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AAEM,MAAM,cAAc,GAAG,CAAC,MAA+B,EAAU,EAAE;IACxE,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAA;IACf,CAAC;SAAM,CAAC;QACN,OAAO;YACL,GAAG,MAAM;YACT,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,YAAG,CAAC,OAAO,EAAE;SACjC,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAVY,QAAA,cAAc,kBAU1B"}
|
package/jest.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/repo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "atproto repo and MST implementation",
|
|
6
6
|
"keywords": [
|
|
@@ -14,27 +14,24 @@
|
|
|
14
14
|
"directory": "packages/repo"
|
|
15
15
|
},
|
|
16
16
|
"main": "dist/index.js",
|
|
17
|
+
"types": "dist/index.d.ts",
|
|
17
18
|
"dependencies": {
|
|
18
19
|
"@ipld/car": "^3.2.3",
|
|
19
20
|
"@ipld/dag-cbor": "^7.0.0",
|
|
20
21
|
"multiformats": "^9.9.0",
|
|
21
22
|
"uint8arrays": "3.0.0",
|
|
22
23
|
"zod": "^3.21.4",
|
|
23
|
-
"@atproto/common": "^0.
|
|
24
|
-
"@atproto/common-web": "^0.
|
|
25
|
-
"@atproto/crypto": "^0.
|
|
26
|
-
"@atproto/
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
"@atproto/common": "^0.4.0",
|
|
25
|
+
"@atproto/common-web": "^0.3.0",
|
|
26
|
+
"@atproto/crypto": "^0.4.0",
|
|
27
|
+
"@atproto/lexicon": "^0.4.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"jest": "^28.1.2"
|
|
29
31
|
},
|
|
30
32
|
"scripts": {
|
|
31
33
|
"test": "jest",
|
|
32
34
|
"test:profile": "node --inspect ../../node_modules/.bin/jest",
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
"build": "node ./build.js",
|
|
36
|
-
"postbuild": "tsc --build tsconfig.build.json",
|
|
37
|
-
"update-main-to-dist": "node ../../update-main-to-dist.js packages/repo"
|
|
38
|
-
},
|
|
39
|
-
"types": "dist/index.d.ts"
|
|
35
|
+
"build": "tsc --build tsconfig.build.json"
|
|
36
|
+
}
|
|
40
37
|
}
|
package/src/mst/mst.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { CID } from 'multiformats'
|
|
|
3
3
|
|
|
4
4
|
import { ReadableBlockstore } from '../storage'
|
|
5
5
|
import { schema as common, cidForCbor, dataToCborBlock } from '@atproto/common'
|
|
6
|
-
import { BlockWriter } from '@ipld/car/
|
|
6
|
+
import { BlockWriter } from '@ipld/car/writer'
|
|
7
7
|
import * as util from './util'
|
|
8
8
|
import BlockMap from '../block-map'
|
|
9
9
|
import CidSet from '../cid-set'
|
package/src/types.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { z } from 'zod'
|
|
|
2
2
|
import { def as commonDef } from '@atproto/common-web'
|
|
3
3
|
import { schema as common } from '@atproto/common'
|
|
4
4
|
import { CID } from 'multiformats'
|
|
5
|
-
import * as car from '@ipld/car/api'
|
|
6
5
|
import BlockMap from './block-map'
|
|
7
6
|
import { RepoRecord } from '@atproto/lexicon'
|
|
8
7
|
import CidSet from './cid-set'
|
|
@@ -174,4 +173,7 @@ export type VerifiedRepo = {
|
|
|
174
173
|
commit: CommitData
|
|
175
174
|
}
|
|
176
175
|
|
|
177
|
-
export type CarBlock =
|
|
176
|
+
export type CarBlock = {
|
|
177
|
+
cid: CID
|
|
178
|
+
bytes: Uint8Array
|
|
179
|
+
}
|
package/src/util.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { setImmediate } from 'node:timers/promises'
|
|
2
2
|
import { CID } from 'multiformats/cid'
|
|
3
3
|
import * as cbor from '@ipld/dag-cbor'
|
|
4
|
-
import { CarBlockIterator } from '@ipld/car'
|
|
4
|
+
import { CarBlockIterator } from '@ipld/car/iterator'
|
|
5
5
|
import { BlockWriter, CarWriter } from '@ipld/car/writer'
|
|
6
6
|
import {
|
|
7
7
|
streamToBuffer,
|
package/tests/_util.ts
CHANGED
|
@@ -24,6 +24,7 @@ type IdMapping = Record<string, CID>
|
|
|
24
24
|
export const randomCid = async (storage?: RepoStorage): Promise<CID> => {
|
|
25
25
|
const block = await dataToCborBlock({ test: randomStr(50) })
|
|
26
26
|
if (storage) {
|
|
27
|
+
// @ts-expect-error FIXME remove this comment (and fix the TS error)
|
|
27
28
|
await storage.putBlock(block.cid, block.bytes)
|
|
28
29
|
}
|
|
29
30
|
return block.cid
|
|
@@ -189,6 +190,7 @@ export const pathsForOps = (ops: RecordWriteOp[]): RecordPath[] =>
|
|
|
189
190
|
|
|
190
191
|
export const saveMst = async (storage: RepoStorage, mst: MST): Promise<CID> => {
|
|
191
192
|
const diff = await mst.getUnstoredBlocks()
|
|
193
|
+
// @ts-expect-error FIXME remove this comment (and fix the TS error)
|
|
192
194
|
await storage.putMany(diff.blocks)
|
|
193
195
|
return diff.root
|
|
194
196
|
}
|
|
@@ -215,6 +217,8 @@ export const addBadCommit = async (
|
|
|
215
217
|
sig: await keypair.sign(randomBytes(256)),
|
|
216
218
|
}
|
|
217
219
|
const commitCid = await newBlocks.add(commit)
|
|
220
|
+
|
|
221
|
+
// @ts-expect-error FIXME remove this comment (and fix the TS error)
|
|
218
222
|
await repo.storage.applyCommit({
|
|
219
223
|
cid: commitCid,
|
|
220
224
|
rev,
|
package/tsconfig.build.json
CHANGED
package/tsconfig.json
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"rootDir": "./src",
|
|
5
|
-
"outDir": "./dist", // Your outDir,
|
|
6
|
-
"emitDeclarationOnly": true
|
|
7
|
-
},
|
|
8
|
-
"include": ["./src", "__tests__/**/**.ts"],
|
|
2
|
+
"include": [],
|
|
9
3
|
"references": [
|
|
10
|
-
{ "path": "
|
|
11
|
-
{ "path": "
|
|
12
|
-
{ "path": "../identity/tsconfig.build.json" },
|
|
13
|
-
{ "path": "../nsid/tsconfig.build.json" }
|
|
4
|
+
{ "path": "./tsconfig.build.json" },
|
|
5
|
+
{ "path": "./tsconfig.tests.json" }
|
|
14
6
|
]
|
|
15
7
|
}
|
package/babel.config.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('../../babel.config.js')
|
package/build.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
const { nodeExternalsPlugin } = require('esbuild-node-externals')
|
|
2
|
-
|
|
3
|
-
const buildShallow =
|
|
4
|
-
process.argv.includes('--shallow') || process.env.ATP_BUILD_SHALLOW === 'true'
|
|
5
|
-
|
|
6
|
-
require('esbuild').build({
|
|
7
|
-
logLevel: 'info',
|
|
8
|
-
entryPoints: ['src/index.ts'],
|
|
9
|
-
bundle: true,
|
|
10
|
-
sourcemap: true,
|
|
11
|
-
outdir: 'dist',
|
|
12
|
-
platform: 'node',
|
|
13
|
-
plugins: buildShallow ? [nodeExternalsPlugin()] : [],
|
|
14
|
-
})
|