@hashtree/core 0.1.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/LICENSE +21 -0
- package/dist/bep52.d.ts +179 -0
- package/dist/bep52.d.ts.map +1 -0
- package/dist/bep52.js +384 -0
- package/dist/bep52.js.map +1 -0
- package/dist/builder.d.ts +137 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +281 -0
- package/dist/builder.js.map +1 -0
- package/dist/codec.d.ts +37 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +109 -0
- package/dist/codec.js.map +1 -0
- package/dist/crypto.d.ts +92 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +212 -0
- package/dist/crypto.js.map +1 -0
- package/dist/encrypted.d.ts +114 -0
- package/dist/encrypted.d.ts.map +1 -0
- package/dist/encrypted.js +446 -0
- package/dist/encrypted.js.map +1 -0
- package/dist/hash.d.ts +14 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +27 -0
- package/dist/hash.js.map +1 -0
- package/dist/hashtree.d.ts +237 -0
- package/dist/hashtree.d.ts.map +1 -0
- package/dist/hashtree.js +557 -0
- package/dist/hashtree.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/nhash.d.ts +94 -0
- package/dist/nhash.d.ts.map +1 -0
- package/dist/nhash.js +293 -0
- package/dist/nhash.js.map +1 -0
- package/dist/resolver/index.d.ts +5 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +5 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/nostr.d.ts +82 -0
- package/dist/resolver/nostr.d.ts.map +1 -0
- package/dist/resolver/nostr.js +868 -0
- package/dist/resolver/nostr.js.map +1 -0
- package/dist/store/blossom.d.ts +100 -0
- package/dist/store/blossom.d.ts.map +1 -0
- package/dist/store/blossom.js +355 -0
- package/dist/store/blossom.js.map +1 -0
- package/dist/store/dexie.d.ts +44 -0
- package/dist/store/dexie.d.ts.map +1 -0
- package/dist/store/dexie.js +196 -0
- package/dist/store/dexie.js.map +1 -0
- package/dist/store/fallback.d.ts +40 -0
- package/dist/store/fallback.d.ts.map +1 -0
- package/dist/store/fallback.js +71 -0
- package/dist/store/fallback.js.map +1 -0
- package/dist/store/index.d.ts +6 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +6 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/memory.d.ts +29 -0
- package/dist/store/memory.d.ts.map +1 -0
- package/dist/store/memory.js +66 -0
- package/dist/store/memory.js.map +1 -0
- package/dist/store/opfs.d.ts +56 -0
- package/dist/store/opfs.d.ts.map +1 -0
- package/dist/store/opfs.js +200 -0
- package/dist/store/opfs.js.map +1 -0
- package/dist/streaming.d.ts +74 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +199 -0
- package/dist/streaming.js.map +1 -0
- package/dist/tree/create.d.ts +35 -0
- package/dist/tree/create.d.ts.map +1 -0
- package/dist/tree/create.js +90 -0
- package/dist/tree/create.js.map +1 -0
- package/dist/tree/edit.d.ts +28 -0
- package/dist/tree/edit.d.ts.map +1 -0
- package/dist/tree/edit.js +115 -0
- package/dist/tree/edit.js.map +1 -0
- package/dist/tree/editEncrypted.d.ts +46 -0
- package/dist/tree/editEncrypted.d.ts.map +1 -0
- package/dist/tree/editEncrypted.js +225 -0
- package/dist/tree/editEncrypted.js.map +1 -0
- package/dist/tree/index.d.ts +7 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/index.js +7 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree/read.d.ts +75 -0
- package/dist/tree/read.d.ts.map +1 -0
- package/dist/tree/read.js +389 -0
- package/dist/tree/read.js.map +1 -0
- package/dist/tree/writeAt.d.ts +44 -0
- package/dist/tree/writeAt.d.ts.map +1 -0
- package/dist/tree/writeAt.js +282 -0
- package/dist/tree/writeAt.js.map +1 -0
- package/dist/types.d.ts +274 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +47 -0
- package/dist/types.js.map +1 -0
- package/dist/verify.d.ts +12 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +32 -0
- package/dist/verify.js.map +1 -0
- package/dist/visibility.d.ts +50 -0
- package/dist/visibility.d.ts.map +1 -0
- package/dist/visibility.js +111 -0
- package/dist/visibility.js.map +1 -0
- package/dist/webrtc/index.d.ts +4 -0
- package/dist/webrtc/index.d.ts.map +1 -0
- package/dist/webrtc/index.js +4 -0
- package/dist/webrtc/index.js.map +1 -0
- package/dist/webrtc/lruCache.d.ts +20 -0
- package/dist/webrtc/lruCache.d.ts.map +1 -0
- package/dist/webrtc/lruCache.js +59 -0
- package/dist/webrtc/lruCache.js.map +1 -0
- package/dist/webrtc/peer.d.ts +122 -0
- package/dist/webrtc/peer.d.ts.map +1 -0
- package/dist/webrtc/peer.js +583 -0
- package/dist/webrtc/peer.js.map +1 -0
- package/dist/webrtc/protocol.d.ts +76 -0
- package/dist/webrtc/protocol.d.ts.map +1 -0
- package/dist/webrtc/protocol.js +167 -0
- package/dist/webrtc/protocol.js.map +1 -0
- package/dist/webrtc/store.d.ts +190 -0
- package/dist/webrtc/store.d.ts.map +1 -0
- package/dist/webrtc/store.js +1043 -0
- package/dist/webrtc/store.js.map +1 -0
- package/dist/webrtc/types.d.ts +196 -0
- package/dist/webrtc/types.d.ts.map +1 -0
- package/dist/webrtc/types.js +46 -0
- package/dist/webrtc/types.js.map +1 -0
- package/dist/worker/protocol.d.ts +493 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +15 -0
- package/dist/worker/protocol.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HashTree - Unified merkle tree operations
|
|
3
|
+
*
|
|
4
|
+
* Single class for creating, reading, and editing content-addressed merkle trees.
|
|
5
|
+
*
|
|
6
|
+
* All files are encrypted by default using CHK (Content Hash Key) encryption.
|
|
7
|
+
* Use the "Public" variants (putFilePublic, readFilePublic) for unencrypted storage.
|
|
8
|
+
*/
|
|
9
|
+
import { Store, Hash, CID, TreeNode, LinkType } from './types.js';
|
|
10
|
+
import { StreamWriter } from './streaming.js';
|
|
11
|
+
import * as streaming from './streaming.js';
|
|
12
|
+
export { StreamWriter } from './streaming.js';
|
|
13
|
+
export { verifyTree } from './verify.js';
|
|
14
|
+
/** Default chunk size: 2MB (optimized for blossom uploads) */
|
|
15
|
+
export declare const DEFAULT_CHUNK_SIZE: number;
|
|
16
|
+
export interface HashTreeConfig {
|
|
17
|
+
store: Store;
|
|
18
|
+
chunkSize?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface TreeEntry {
|
|
21
|
+
name: string;
|
|
22
|
+
cid: CID;
|
|
23
|
+
size: number;
|
|
24
|
+
type: LinkType;
|
|
25
|
+
meta?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export interface DirEntry {
|
|
28
|
+
name: string;
|
|
29
|
+
cid: CID;
|
|
30
|
+
size: number;
|
|
31
|
+
type: LinkType;
|
|
32
|
+
meta?: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* HashTree - create, read, and edit merkle trees
|
|
36
|
+
*/
|
|
37
|
+
export declare class HashTree {
|
|
38
|
+
private store;
|
|
39
|
+
private chunkSize;
|
|
40
|
+
constructor(config: HashTreeConfig);
|
|
41
|
+
private get config();
|
|
42
|
+
putBlob(data: Uint8Array): Promise<Hash>;
|
|
43
|
+
/**
|
|
44
|
+
* Store a file
|
|
45
|
+
* @param data - File data to store
|
|
46
|
+
* @param options - { unencrypted?: boolean } - if true, store without encryption
|
|
47
|
+
* @returns { cid, size }
|
|
48
|
+
*/
|
|
49
|
+
putFile(data: Uint8Array, options?: {
|
|
50
|
+
unencrypted?: boolean;
|
|
51
|
+
}): Promise<{
|
|
52
|
+
cid: CID;
|
|
53
|
+
size: number;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Store a directory
|
|
57
|
+
* @param entries - Directory entries
|
|
58
|
+
* @param options - { unencrypted?: boolean } - if true, store without encryption
|
|
59
|
+
* @returns { cid, size }
|
|
60
|
+
*/
|
|
61
|
+
putDirectory(entries: DirEntry[], options?: {
|
|
62
|
+
unencrypted?: boolean;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
cid: CID;
|
|
65
|
+
size: number;
|
|
66
|
+
}>;
|
|
67
|
+
getBlob(hash: Hash): Promise<Uint8Array | null>;
|
|
68
|
+
/**
|
|
69
|
+
* Get a tree node
|
|
70
|
+
*/
|
|
71
|
+
getTreeNode(id: CID): Promise<TreeNode | null>;
|
|
72
|
+
getType(id: CID): Promise<LinkType>;
|
|
73
|
+
isDirectory(id: CID): Promise<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
* Read a file
|
|
76
|
+
*/
|
|
77
|
+
readFile(id: CID): Promise<Uint8Array | null>;
|
|
78
|
+
/**
|
|
79
|
+
* Stream a file
|
|
80
|
+
* @param id - CID of the file
|
|
81
|
+
* @param options - { offset?: number, prefetch?: number }
|
|
82
|
+
*/
|
|
83
|
+
readFileStream(id: CID, options?: {
|
|
84
|
+
offset?: number;
|
|
85
|
+
prefetch?: number;
|
|
86
|
+
}): AsyncGenerator<Uint8Array>;
|
|
87
|
+
/**
|
|
88
|
+
* Read a range of bytes from a file
|
|
89
|
+
*/
|
|
90
|
+
readFileRange(id: CID, start: number, end?: number): Promise<Uint8Array | null>;
|
|
91
|
+
/**
|
|
92
|
+
* List directory entries
|
|
93
|
+
*/
|
|
94
|
+
listDirectory(id: CID): Promise<TreeEntry[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Resolve a path to get the entry's CID
|
|
97
|
+
*
|
|
98
|
+
* @param root - Root CID of the tree
|
|
99
|
+
* @param path - Path to resolve (string like 'a/b/file.txt' or array like ['a', 'b', 'file.txt'])
|
|
100
|
+
* @returns { cid, type } or null if not found
|
|
101
|
+
*/
|
|
102
|
+
resolvePath(root: CID, path: string | string[]): Promise<{
|
|
103
|
+
cid: CID;
|
|
104
|
+
type: LinkType;
|
|
105
|
+
} | null>;
|
|
106
|
+
getSize(hash: Hash): Promise<number>;
|
|
107
|
+
walk(hash: Hash, path?: string): AsyncGenerator<{
|
|
108
|
+
path: string;
|
|
109
|
+
hash: Hash;
|
|
110
|
+
type: LinkType;
|
|
111
|
+
size?: number;
|
|
112
|
+
}>;
|
|
113
|
+
/**
|
|
114
|
+
* Walk entire tree and return all entries as an array
|
|
115
|
+
* More convenient than the async generator for most use cases
|
|
116
|
+
* @param id - Root CID of the tree
|
|
117
|
+
* @param options.includeData - If true, include file data in results
|
|
118
|
+
* @param options.filesOnly - If true, only return files (not directories)
|
|
119
|
+
*/
|
|
120
|
+
walkTree(id: CID, options?: {
|
|
121
|
+
includeData?: boolean;
|
|
122
|
+
filesOnly?: boolean;
|
|
123
|
+
}): Promise<Array<{
|
|
124
|
+
path: string;
|
|
125
|
+
cid: CID;
|
|
126
|
+
type: LinkType;
|
|
127
|
+
size: number;
|
|
128
|
+
data?: Uint8Array;
|
|
129
|
+
}>>;
|
|
130
|
+
/**
|
|
131
|
+
* Iterate over all raw blocks in a merkle tree
|
|
132
|
+
* Yields each block's hash and data, traversing encrypted nodes correctly
|
|
133
|
+
* Useful for syncing to remote stores (e.g., Blossom push)
|
|
134
|
+
*/
|
|
135
|
+
walkBlocks(id: CID): AsyncGenerator<{
|
|
136
|
+
hash: Hash;
|
|
137
|
+
data: Uint8Array;
|
|
138
|
+
}>;
|
|
139
|
+
/**
|
|
140
|
+
* Pull (fetch) all chunks for a tree recursively
|
|
141
|
+
* Triggers WebRTC fetches for any missing chunks
|
|
142
|
+
* Uses parallel fetching within each tree level for better performance
|
|
143
|
+
* @returns { cid, chunks, bytes } - The CID and stats about what was pulled
|
|
144
|
+
*/
|
|
145
|
+
pull(id: CID): Promise<{
|
|
146
|
+
cid: CID;
|
|
147
|
+
chunks: number;
|
|
148
|
+
bytes: number;
|
|
149
|
+
}>;
|
|
150
|
+
/**
|
|
151
|
+
* Push all chunks for a tree to a target store
|
|
152
|
+
* Useful for syncing to remote stores (e.g., Blossom servers)
|
|
153
|
+
* @param id - CID of the tree to push
|
|
154
|
+
* @param targetStore - Store to push blocks to (must support put())
|
|
155
|
+
* @param options - callbacks for progress and per-block status
|
|
156
|
+
* @returns { cid, pushed, skipped, failed, bytes, errors } - The CID and detailed stats
|
|
157
|
+
*/
|
|
158
|
+
push(id: CID, targetStore: Store, options?: {
|
|
159
|
+
onProgress?: (current: number, total: number) => void;
|
|
160
|
+
onBlock?: (hash: Hash, status: 'success' | 'skipped' | 'error', error?: Error) => void;
|
|
161
|
+
/** Number of parallel uploads (default: 4) */
|
|
162
|
+
concurrency?: number;
|
|
163
|
+
/** AbortSignal to cancel the push */
|
|
164
|
+
signal?: AbortSignal;
|
|
165
|
+
}): Promise<{
|
|
166
|
+
cid: CID;
|
|
167
|
+
pushed: number;
|
|
168
|
+
skipped: number;
|
|
169
|
+
failed: number;
|
|
170
|
+
bytes: number;
|
|
171
|
+
errors: Array<{
|
|
172
|
+
hash: Hash;
|
|
173
|
+
error: Error;
|
|
174
|
+
}>;
|
|
175
|
+
cancelled: boolean;
|
|
176
|
+
}>;
|
|
177
|
+
/**
|
|
178
|
+
* Add or update an entry in a directory
|
|
179
|
+
* @param root - Root CID of the tree
|
|
180
|
+
* @param path - Path to the directory containing the entry
|
|
181
|
+
* @param name - Name of the entry
|
|
182
|
+
* @param entry - CID of the entry content
|
|
183
|
+
* @param size - Size of the content
|
|
184
|
+
* @param type - Type of the entry (LinkType.Blob, LinkType.File, or LinkType.Dir)
|
|
185
|
+
* @returns New root CID
|
|
186
|
+
*/
|
|
187
|
+
setEntry(root: CID, path: string[], name: string, entry: CID, size: number, type?: LinkType, meta?: Record<string, unknown>): Promise<CID>;
|
|
188
|
+
/**
|
|
189
|
+
* Remove an entry from a directory
|
|
190
|
+
* @param root - Root CID of the tree
|
|
191
|
+
* @param path - Path to the directory containing the entry
|
|
192
|
+
* @param name - Name of the entry to remove
|
|
193
|
+
* @returns New root CID
|
|
194
|
+
*/
|
|
195
|
+
removeEntry(root: CID, path: string[], name: string): Promise<CID>;
|
|
196
|
+
/**
|
|
197
|
+
* Rename an entry in a directory
|
|
198
|
+
* @param root - Root CID of the tree
|
|
199
|
+
* @param path - Path to the directory containing the entry
|
|
200
|
+
* @param oldName - Current name
|
|
201
|
+
* @param newName - New name
|
|
202
|
+
* @returns New root CID
|
|
203
|
+
*/
|
|
204
|
+
renameEntry(root: CID, path: string[], oldName: string, newName: string): Promise<CID>;
|
|
205
|
+
/**
|
|
206
|
+
* Move an entry to a different directory
|
|
207
|
+
* @param root - Root CID of the tree
|
|
208
|
+
* @param sourcePath - Path to the source directory
|
|
209
|
+
* @param name - Name of the entry to move
|
|
210
|
+
* @param targetPath - Path to the target directory
|
|
211
|
+
* @returns New root CID
|
|
212
|
+
*/
|
|
213
|
+
moveEntry(root: CID, sourcePath: string[], name: string, targetPath: string[]): Promise<CID>;
|
|
214
|
+
/**
|
|
215
|
+
* Write data at a specific offset in a file
|
|
216
|
+
* Only affected chunks are rewritten - efficient for small patches to large files.
|
|
217
|
+
* Useful for updating file headers (e.g., WebM duration) without rewriting entire file.
|
|
218
|
+
*
|
|
219
|
+
* @param fileCid - CID of the file to modify
|
|
220
|
+
* @param offset - Byte offset to write at
|
|
221
|
+
* @param data - Data to write
|
|
222
|
+
* @returns New file CID
|
|
223
|
+
*/
|
|
224
|
+
writeAt(fileCid: CID, offset: number, data: Uint8Array): Promise<CID>;
|
|
225
|
+
getStore(): Store;
|
|
226
|
+
/**
|
|
227
|
+
* Create a streaming file writer for incremental appends
|
|
228
|
+
* Useful for writing large files chunk by chunk (e.g., video recording)
|
|
229
|
+
* @param options.unencrypted - if true, create without encryption
|
|
230
|
+
* @param options.chunker - custom chunker for variable chunk sizes (e.g., videoChunker for faster start)
|
|
231
|
+
*/
|
|
232
|
+
createStream(options?: {
|
|
233
|
+
unencrypted?: boolean;
|
|
234
|
+
chunker?: streaming.Chunker;
|
|
235
|
+
}): StreamWriter;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=hashtree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashtree.d.ts","sourceRoot":"","sources":["../src/hashtree.ts"],"names":[],"mappings":"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"}
|