@atproto/repo 0.10.2 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/package.json +22 -17
  3. package/jest.config.cjs +0 -24
  4. package/src/block-map.ts +0 -131
  5. package/src/car.ts +0 -357
  6. package/src/cid-set.ts +0 -55
  7. package/src/data-diff.ts +0 -117
  8. package/src/error.ts +0 -43
  9. package/src/index.ts +0 -11
  10. package/src/logger.ts +0 -7
  11. package/src/mst/diff.ts +0 -114
  12. package/src/mst/index.ts +0 -4
  13. package/src/mst/mst.ts +0 -892
  14. package/src/mst/util.ts +0 -160
  15. package/src/mst/walker.ts +0 -118
  16. package/src/parse.ts +0 -44
  17. package/src/readable-repo.ts +0 -86
  18. package/src/repo.ts +0 -236
  19. package/src/storage/index.ts +0 -4
  20. package/src/storage/memory-blockstore.ts +0 -76
  21. package/src/storage/readable-blockstore.ts +0 -55
  22. package/src/storage/sync-storage.ts +0 -35
  23. package/src/storage/types.ts +0 -47
  24. package/src/sync/consumer.ts +0 -207
  25. package/src/sync/index.ts +0 -2
  26. package/src/sync/provider.ts +0 -67
  27. package/src/types.ts +0 -227
  28. package/src/util.ts +0 -146
  29. package/tests/_keys.ts +0 -156
  30. package/tests/_util.ts +0 -265
  31. package/tests/car-file-fixtures.json +0 -28
  32. package/tests/car.test.ts +0 -125
  33. package/tests/commit-data.test.ts +0 -94
  34. package/tests/commit-proof-fixtures.json +0 -118
  35. package/tests/commit-proofs.test.ts +0 -63
  36. package/tests/covering-proofs.test.ts +0 -256
  37. package/tests/mst.test.ts +0 -450
  38. package/tests/proofs.test.ts +0 -155
  39. package/tests/repo.test.ts +0 -106
  40. package/tests/sync.test.ts +0 -95
  41. package/tsconfig.build.json +0 -8
  42. package/tsconfig.build.tsbuildinfo +0 -1
  43. package/tsconfig.json +0 -7
  44. package/tsconfig.tests.json +0 -7
package/src/types.ts DELETED
@@ -1,227 +0,0 @@
1
- import { z } from 'zod'
2
- import { Cid, LexMap, ifCid } from '@atproto/lex-data'
3
- import { NsidString, RecordKeyString } from '@atproto/syntax'
4
- import { BlockMap } from './block-map.js'
5
- import { CidSet } from './cid-set.js'
6
-
7
- // Repo nodes
8
- // ---------------
9
-
10
- const cidSchema = z.unknown().transform((input, ctx): Cid => {
11
- const cid = ifCid(input)
12
- if (cid) return cid
13
-
14
- ctx.addIssue({
15
- code: z.ZodIssueCode.custom,
16
- message: 'Not a valid CID',
17
- })
18
- return z.NEVER
19
- })
20
-
21
- const _unsignedCommit = z.object({
22
- did: z.string(),
23
- version: z.literal(3),
24
- data: cidSchema,
25
- rev: z.string(),
26
- // `prev` added for backwards compatibility with v2, no requirement of keeping around history
27
- prev: cidSchema.nullable(),
28
- })
29
- export type UnsignedCommit = z.infer<typeof _unsignedCommit> & { sig?: never }
30
-
31
- const commit = z.object({
32
- did: z.string(),
33
- version: z.literal(3),
34
- data: cidSchema,
35
- rev: z.string(),
36
- prev: cidSchema.nullable(),
37
- sig: z.instanceof(Uint8Array<ArrayBufferLike>),
38
- })
39
- export type Commit = z.infer<typeof commit>
40
-
41
- const legacyV2Commit = z.object({
42
- did: z.string(),
43
- version: z.literal(2),
44
- data: cidSchema,
45
- rev: z.string().optional(),
46
- prev: cidSchema.nullable(),
47
- sig: z.instanceof(Uint8Array<ArrayBufferLike>),
48
- })
49
- export type LegacyV2Commit = z.infer<typeof legacyV2Commit>
50
-
51
- const versionedCommit = z.discriminatedUnion('version', [
52
- commit,
53
- legacyV2Commit,
54
- ])
55
- export type VersionedCommit = z.infer<typeof versionedCommit>
56
-
57
- export const schema = {
58
- cid: cidSchema,
59
- carHeader: z.object({
60
- version: z.literal(1),
61
- roots: z.array(cidSchema),
62
- }),
63
- bytes: z.instanceof(Uint8Array<ArrayBufferLike>),
64
- string: z.string(),
65
- array: z.array(z.unknown()),
66
- map: z.record(z.string(), z.unknown()),
67
- unknown: z.unknown(),
68
- commit,
69
- legacyV2Commit,
70
- versionedCommit,
71
- }
72
-
73
- export const def = {
74
- cid: {
75
- name: 'cid',
76
- schema: schema.cid,
77
- },
78
- carHeader: {
79
- name: 'CAR header',
80
- schema: schema.carHeader,
81
- },
82
- bytes: {
83
- name: 'bytes',
84
- schema: schema.bytes,
85
- },
86
- string: {
87
- name: 'string',
88
- schema: schema.string,
89
- },
90
- map: {
91
- name: 'map',
92
- schema: schema.map,
93
- },
94
- unknown: {
95
- name: 'unknown',
96
- schema: schema.unknown,
97
- },
98
- commit: {
99
- name: 'commit',
100
- schema: schema.commit,
101
- },
102
- versionedCommit: {
103
- name: 'versioned_commit',
104
- schema: schema.versionedCommit,
105
- },
106
- }
107
-
108
- // Repo Operations
109
- // ---------------
110
-
111
- export enum WriteOpAction {
112
- Create = 'create',
113
- Update = 'update',
114
- Delete = 'delete',
115
- }
116
-
117
- export type RecordCreateOp = {
118
- action: WriteOpAction.Create
119
- collection: NsidString
120
- rkey: RecordKeyString
121
- record: LexMap
122
- }
123
-
124
- export type RecordUpdateOp = {
125
- action: WriteOpAction.Update
126
- collection: NsidString
127
- rkey: RecordKeyString
128
- record: LexMap
129
- }
130
-
131
- export type RecordDeleteOp = {
132
- action: WriteOpAction.Delete
133
- collection: NsidString
134
- rkey: RecordKeyString
135
- }
136
-
137
- export type RecordWriteOp = RecordCreateOp | RecordUpdateOp | RecordDeleteOp
138
-
139
- export type RecordCreateDescript = {
140
- action: WriteOpAction.Create
141
- collection: NsidString
142
- rkey: RecordKeyString
143
- cid: Cid
144
- }
145
-
146
- export type RecordUpdateDescript = {
147
- action: WriteOpAction.Update
148
- collection: NsidString
149
- rkey: RecordKeyString
150
- prev: Cid
151
- cid: Cid
152
- }
153
-
154
- export type RecordDeleteDescript = {
155
- action: WriteOpAction.Delete
156
- collection: NsidString
157
- rkey: RecordKeyString
158
- cid: Cid
159
- }
160
-
161
- export type RecordWriteDescript =
162
- | RecordCreateDescript
163
- | RecordUpdateDescript
164
- | RecordDeleteDescript
165
-
166
- export type WriteLog = RecordWriteDescript[][]
167
-
168
- // Updates/Commits
169
- // ---------------
170
-
171
- export type CommitData = {
172
- cid: Cid
173
- rev: string
174
- since: string | null
175
- prev: Cid | null
176
- newBlocks: BlockMap
177
- relevantBlocks: BlockMap
178
- removedCids: CidSet
179
- }
180
-
181
- export type RepoUpdate = CommitData & {
182
- ops: RecordWriteOp[]
183
- }
184
-
185
- export type CollectionContents = Record<string, LexMap>
186
- export type RepoContents = Record<NsidString, CollectionContents>
187
-
188
- export type RepoRecordWithCid = { cid: Cid; value: LexMap }
189
- export type CollectionContentsWithCids = Record<string, RepoRecordWithCid>
190
- export type RepoContentsWithCids = Record<string, CollectionContentsWithCids>
191
-
192
- export type DatastoreContents = Record<string, Cid>
193
-
194
- export type RecordPath = {
195
- collection: string
196
- rkey: string
197
- }
198
-
199
- export type RecordCidClaim = {
200
- collection: string
201
- rkey: string
202
- cid: Cid | null
203
- }
204
-
205
- export type RecordClaim = {
206
- collection: string
207
- rkey: string
208
- record: LexMap | null
209
- }
210
-
211
- // Sync
212
- // ---------------
213
-
214
- export type VerifiedDiff = {
215
- writes: RecordWriteDescript[]
216
- commit: CommitData
217
- }
218
-
219
- export type VerifiedRepo = {
220
- creates: RecordCreateDescript[]
221
- commit: CommitData
222
- }
223
-
224
- export type CarBlock = {
225
- cid: Cid
226
- bytes: Uint8Array
227
- }
package/src/util.ts DELETED
@@ -1,146 +0,0 @@
1
- import { TID } from '@atproto/common-web'
2
- import * as crypto from '@atproto/crypto'
3
- import { Keypair } from '@atproto/crypto'
4
- import * as cbor from '@atproto/lex-cbor'
5
- import { Cid, LexMap, LexValue, isPlainObject } from '@atproto/lex-data'
6
- import { DataDiff } from './data-diff.js'
7
- import {
8
- Commit,
9
- LegacyV2Commit,
10
- RecordCreateDescript,
11
- RecordDeleteDescript,
12
- RecordPath,
13
- RecordUpdateDescript,
14
- RecordWriteDescript,
15
- UnsignedCommit,
16
- WriteOpAction,
17
- } from './types.js'
18
-
19
- export const diffToWriteDescripts = (
20
- diff: DataDiff,
21
- ): Promise<RecordWriteDescript[]> => {
22
- return Promise.all([
23
- ...diff.addList().map(async (add) => {
24
- const { collection, rkey } = parseDataKey(add.key)
25
- return {
26
- action: WriteOpAction.Create,
27
- collection,
28
- rkey,
29
- cid: add.cid,
30
- } as RecordCreateDescript
31
- }),
32
- ...diff.updateList().map(async (upd) => {
33
- const { collection, rkey } = parseDataKey(upd.key)
34
- return {
35
- action: WriteOpAction.Update,
36
- collection,
37
- rkey,
38
- cid: upd.cid,
39
- prev: upd.prev,
40
- } as RecordUpdateDescript
41
- }),
42
- ...diff.deleteList().map((del) => {
43
- const { collection, rkey } = parseDataKey(del.key)
44
- return {
45
- action: WriteOpAction.Delete,
46
- collection,
47
- rkey,
48
- cid: del.cid,
49
- } as RecordDeleteDescript
50
- }),
51
- ])
52
- }
53
-
54
- export const ensureCreates = (
55
- descripts: RecordWriteDescript[],
56
- ): RecordCreateDescript[] => {
57
- const creates: RecordCreateDescript[] = []
58
- for (const descript of descripts) {
59
- if (descript.action !== WriteOpAction.Create) {
60
- throw new Error(`Unexpected action: ${descript.action}`)
61
- } else {
62
- creates.push(descript)
63
- }
64
- }
65
- return creates
66
- }
67
-
68
- export const parseDataKey = (key: string): RecordPath => {
69
- const { length, 0: collection, 1: rkey } = key.split('/')
70
- if (length !== 2) throw new Error(`Invalid record key: ${key}`)
71
- return { collection, rkey }
72
- }
73
-
74
- export const formatDataKey = (collection: string, rkey: string): string => {
75
- return collection + '/' + rkey
76
- }
77
-
78
- export const metaEqual = (a: Commit, b: Commit): boolean => {
79
- return a.did === b.did && a.version === b.version
80
- }
81
-
82
- export const signCommit = async (
83
- unsigned: UnsignedCommit,
84
- keypair: Keypair,
85
- ): Promise<Commit> => {
86
- const encoded = cbor.encode(unsigned)
87
- const sig = await keypair.sign(encoded)
88
- return {
89
- ...unsigned,
90
- sig,
91
- }
92
- }
93
-
94
- export const verifyCommitSig = async (
95
- commit: Commit,
96
- didKey: string,
97
- ): Promise<boolean> => {
98
- const { sig, ...rest } = commit
99
- const encoded = cbor.encode(rest)
100
- return crypto.verifySignature(didKey, encoded, sig)
101
- }
102
-
103
- export const cborToLex: (val: Uint8Array) => LexValue = cbor.decode
104
-
105
- export const cborToLexRecord = (val: Uint8Array): LexMap => {
106
- const parsed = cborToLex(val)
107
- if (!isPlainObject(parsed)) {
108
- throw new Error('lexicon records be a json object')
109
- }
110
- return parsed
111
- }
112
-
113
- export const cidForRecord: (val: LexValue) => Promise<Cid> = cbor.cidForLex
114
-
115
- export const ensureV3Commit = (commit: LegacyV2Commit | Commit): Commit => {
116
- if (commit.version === 3) {
117
- return commit
118
- } else {
119
- return {
120
- ...commit,
121
- version: 3,
122
- rev: commit.rev ?? TID.nextStr(),
123
- }
124
- }
125
- }
126
-
127
- export async function concatBytesAsync(iterable: AsyncIterable<Uint8Array>) {
128
- const chunks: Uint8Array[] = []
129
- for await (const chunk of iterable) chunks.push(chunk)
130
- return concatBytes(chunks)
131
- }
132
-
133
- /**
134
- * This is the same as {@link Buffer.concat}, without the `totalLength` argument.
135
- */
136
- export function concatBytes(chunks: readonly Uint8Array[]): Uint8Array {
137
- let totalLength = 0
138
- for (const chunk of chunks) totalLength += chunk.byteLength
139
- const result = new Uint8Array(totalLength)
140
- let offset = 0
141
- for (const chunk of chunks) {
142
- result.set(chunk, offset)
143
- offset += chunk.byteLength
144
- }
145
- return result
146
- }
package/tests/_keys.ts DELETED
@@ -1,156 +0,0 @@
1
- export const A0 = 'A0/374913'
2
- export const A1 = 'A1/076595'
3
- export const A2 = 'A2/827942'
4
- export const A3 = 'A3/578971'
5
- export const A4 = 'A4/055903'
6
- export const A5 = 'A5/518415'
7
- export const B0 = 'B0/601692'
8
- export const B1 = 'B1/986427'
9
- export const B2 = 'B2/827649'
10
- export const B3 = 'B3/095483'
11
- export const B4 = 'B4/774183'
12
- export const B5 = 'B5/116729'
13
- export const C0 = 'C0/451630'
14
- export const C1 = 'C1/438573'
15
- export const C2 = 'C2/014073'
16
- export const C3 = 'C3/564755'
17
- export const C4 = 'C4/134079'
18
- export const C5 = 'C5/141153'
19
- export const D0 = 'D0/952776'
20
- export const D1 = 'D1/834852'
21
- export const D2 = 'D2/269196'
22
- export const D3 = 'D3/038750'
23
- export const D4 = 'D4/052059'
24
- export const D5 = 'D5/563177'
25
- export const E0 = 'E0/670489'
26
- export const E1 = 'E1/091396'
27
- export const E2 = 'E2/819540'
28
- export const E3 = 'E3/391311'
29
- export const E4 = 'E4/820614'
30
- export const E5 = 'E5/512478'
31
- export const F0 = 'F0/697858'
32
- export const F1 = 'F1/085263'
33
- export const F2 = 'F2/483591'
34
- export const F3 = 'F3/409933'
35
- export const F4 = 'F4/789697'
36
- export const F5 = 'F5/271416'
37
- export const G0 = 'G0/765327'
38
- export const G1 = 'G1/209912'
39
- export const G2 = 'G2/611528'
40
- export const G3 = 'G3/649394'
41
- export const G4 = 'G4/585887'
42
- export const G5 = 'G5/298495'
43
- export const H0 = 'H0/131238'
44
- export const H1 = 'H1/566929'
45
- export const H2 = 'H2/618272'
46
- export const H3 = 'H3/500151'
47
- export const H4 = 'H4/841548'
48
- export const H5 = 'H5/642354'
49
- export const I0 = 'I0/536928'
50
- export const I1 = 'I1/525517'
51
- export const I2 = 'I2/800680'
52
- export const I3 = 'I3/818503'
53
- export const I4 = 'I4/561177'
54
- export const I5 = 'I5/010047'
55
- export const J0 = 'J0/453243'
56
- export const J1 = 'J1/217783'
57
- export const J2 = 'J2/960389'
58
- export const J3 = 'J3/501274'
59
- export const J4 = 'J4/042054'
60
- export const J5 = 'J5/743154'
61
- export const K0 = 'K0/125271'
62
- export const K1 = 'K1/317361'
63
- export const K2 = 'K2/453868'
64
- export const K3 = 'K3/214010'
65
- export const K4 = 'K4/164720'
66
- export const K5 = 'K5/177856'
67
- export const L0 = 'L0/502889'
68
- export const L1 = 'L1/574576'
69
- export const L2 = 'L2/596333'
70
- export const L3 = 'L3/683657'
71
- export const L4 = 'L4/724989'
72
- export const L5 = 'L5/093883'
73
- export const M0 = 'M0/141744'
74
- export const M1 = 'M1/643368'
75
- export const M2 = 'M2/919782'
76
- export const M3 = 'M3/836327'
77
- export const M4 = 'M4/177463'
78
- export const M5 = 'M5/563354'
79
- export const N0 = 'N0/370604'
80
- export const N1 = 'N1/563732'
81
- export const N2 = 'N2/177587'
82
- export const N3 = 'N3/678428'
83
- export const N4 = 'N4/599183'
84
- export const N5 = 'N5/567564'
85
- export const O0 = 'O0/523870'
86
- export const O1 = 'O1/052141'
87
- export const O2 = 'O2/037651'
88
- export const O3 = 'O3/773808'
89
- export const O4 = 'O4/140952'
90
- export const O5 = 'O5/318605'
91
- export const P0 = 'P0/133157'
92
- export const P1 = 'P1/394633'
93
- export const P2 = 'P2/521462'
94
- export const P3 = 'P3/493488'
95
- export const P4 = 'P4/908754'
96
- export const P5 = 'P5/109455'
97
- export const Q0 = 'Q0/835234'
98
- export const Q1 = 'Q1/131542'
99
- export const Q2 = 'Q2/680035'
100
- export const Q3 = 'Q3/253381'
101
- export const Q4 = 'Q4/019053'
102
- export const Q5 = 'Q5/658167'
103
- export const R0 = 'R0/129386'
104
- export const R1 = 'R1/363149'
105
- export const R2 = 'R2/742766'
106
- export const R3 = 'R3/039235'
107
- export const R4 = 'R4/482275'
108
- export const R5 = 'R5/817312'
109
- export const S0 = 'S0/340283'
110
- export const S1 = 'S1/561525'
111
- export const S2 = 'S2/914574'
112
- export const S3 = 'S3/909434'
113
- export const S4 = 'S4/789708'
114
- export const S5 = 'S5/803866'
115
- export const T0 = 'T0/255204'
116
- export const T1 = 'T1/716687'
117
- export const T2 = 'T2/256231'
118
- export const T3 = 'T3/054247'
119
- export const T4 = 'T4/419247'
120
- export const T5 = 'T5/509584'
121
- export const U0 = 'U0/298296'
122
- export const U1 = 'U1/851680'
123
- export const U2 = 'U2/342856'
124
- export const U3 = 'U3/597327'
125
- export const U4 = 'U4/311686'
126
- export const U5 = 'U5/030156'
127
- export const V0 = 'V0/221100'
128
- export const V1 = 'V1/741554'
129
- export const V2 = 'V2/267990'
130
- export const V3 = 'V3/674163'
131
- export const V4 = 'V4/739931'
132
- export const V5 = 'V5/573718'
133
- export const W0 = 'W0/034202'
134
- export const W1 = 'W1/697411'
135
- export const W2 = 'W2/460313'
136
- export const W3 = 'W3/189647'
137
- export const W4 = 'W4/847299'
138
- export const W5 = 'W5/648086'
139
- export const X0 = 'X0/287498'
140
- export const X1 = 'X1/044093'
141
- export const X2 = 'X2/613770'
142
- export const X3 = 'X3/577587'
143
- export const X4 = 'X4/779391'
144
- export const X5 = 'X5/339246'
145
- export const Y0 = 'Y0/986350'
146
- export const Y1 = 'Y1/044567'
147
- export const Y2 = 'Y2/478044'
148
- export const Y3 = 'Y3/757097'
149
- export const Y4 = 'Y4/396913'
150
- export const Y5 = 'Y5/802264'
151
- export const Z0 = 'Z0/425878'
152
- export const Z1 = 'Z1/127557'
153
- export const Z2 = 'Z2/441927'
154
- export const Z3 = 'Z3/064474'
155
- export const Z4 = 'Z4/888344'
156
- export const Z5 = 'Z5/977983'