This repository has no description
1mod admission;
2mod batch;
3mod error;
4mod gc;
5mod pointer;
6mod scan;
7mod store;
8mod transfer;
9mod types;
10
11pub use admission::{StoreAdmission, UploadAdmission, UploadPermit};
12pub use batch::{
13 BASIC_TRANSFER, BATCH_MEDIA_TYPE, BatchAction, BatchActions, BatchObject, BatchObjectError,
14 BatchOperation, BatchRef, BatchRequest, BatchResponse, BatchResponseObject, HASH_ALGO,
15 HashAlgo, MAX_BATCH_OBJECTS, TransferAdapter,
16};
17pub use error::LfsError;
18pub use gc::{GcError, GcReport, collect_repo};
19pub use pointer::{LfsPointer, POINTER_MAX_BYTES, parse_pointer};
20pub use scan::scan_pointers;
21pub use store::{
22 DiskStore, LfsHandle, LfsStore, MemoryStore, OrphanSweep, Reclaimed, StoredObject,
23};
24pub use transfer::{TransferOp, serve_transfer};
25pub use types::{ClaimedSize, FreeSpaceFloor, LfsOid, LfsSize, LfsStorePath, ObjectRelPath};
26
27#[doc(hidden)]
28pub mod fuzz {
29 use knot_types::RepoDid;
30
31 use crate::{
32 BatchRequest, FreeSpaceFloor, LfsSize, LfsStore, LfsStorePath, MAX_BATCH_OBJECTS,
33 MemoryStore, StoreAdmission, TransferOp, parse_pointer, serve_transfer,
34 };
35
36 pub fn transfer(data: &[u8]) {
37 let admission = StoreAdmission::new(
38 LfsStorePath::new("/"),
39 LfsSize::new(u64::MAX),
40 FreeSpaceFloor::new(0),
41 );
42 let repo = RepoDid::new("did:plc:squid").expect("static DID is valid");
43 let messages = &knot_messages::default_catalog().lfs;
44 [TransferOp::Upload, TransferOp::Download]
45 .iter()
46 .for_each(|op| {
47 let store = MemoryStore::new();
48 let _ = serve_transfer(
49 &store,
50 &admission,
51 &repo,
52 *op,
53 messages,
54 data,
55 std::io::sink(),
56 );
57 });
58 }
59
60 pub fn batch(data: &[u8]) {
61 let Ok(request) = serde_json::from_slice::<BatchRequest>(data) else {
62 return;
63 };
64 if request.objects.len() > MAX_BATCH_OBJECTS {
65 return;
66 }
67 let repo = RepoDid::new("did:plc:squid").expect("static DID is valid");
68 let store = MemoryStore::new();
69 request.objects.iter().for_each(|object| {
70 let _ = store.probe(&repo, &object.oid);
71 });
72 }
73
74 pub fn pointer(data: &[u8]) {
75 let _ = parse_pointer(data);
76 }
77}