[WIP] A (somewhat barebones) atproto app for creating custom sites without hosting!

upload: upload new site state

note: this code is still broke bc uploading blobs still does not work

errors different tho

vielle.dev f42eef1b 2da885ba

verified
Changed files
+59
upload
src
+59
upload/src/main.rs
··· 150 150 } 151 151 152 152 // batch delete/upload records 153 + let mut writes = Vec::new(); 154 + let mut delete_records = remote_records 155 + .into_iter() 156 + .map(|x| { 157 + let rkey = RecordKey(Rkey::new_owned(x)?); 158 + Ok(ApplyWritesWritesItem::Delete(Box::new( 159 + apply_writes::Delete::builder() 160 + .collection(Nsid::raw("dev.atcities.route")) 161 + .rkey(rkey) 162 + .build(), 163 + ))) 164 + }) 165 + .collect::<Result<Vec<ApplyWritesWritesItem<'_>>, AtStrError>>() 166 + .into_diagnostic()?; 167 + 168 + let mut create_records = new_sitemap 169 + .into_iter() 170 + .map(|(k, v)| { 171 + let rkey = RecordKey(Rkey::new_owned(k).into_diagnostic()?); 172 + let blob = match v.blob { 173 + BlobRef::Local(_) => panic!("Illegal local blob"), 174 + BlobRef::Remote(cid) => cid, 175 + }; 176 + let data = atproto!({ 177 + "page": { 178 + "$type": "dev.atcities.route#blob", 179 + "blob": { 180 + "$type": "blob", 181 + "ref": blob.r#ref.as_str(), 182 + "mimeType": blob.mime_type.0.as_str(), 183 + "size": blob.size 184 + } 185 + } 186 + }); 187 + Ok(ApplyWritesWritesItem::Create(Box::new( 188 + apply_writes::Create::builder() 189 + .collection(Nsid::raw("dev.atcities.route")) 190 + .rkey(rkey) 191 + .value(data) 192 + .build(), 193 + ))) 194 + }) 195 + .collect::<Result<Vec<ApplyWritesWritesItem<'_>>, miette::Error>>()?; 196 + 197 + writes.append(&mut delete_records); 198 + writes.append(&mut create_records); 199 + 200 + let req = com_atproto::repo::apply_writes::ApplyWrites::new() 201 + .repo(AtIdentifier::Did(auth.did.clone())) 202 + .writes(writes) 203 + .build(); 204 + 205 + let res = agent 206 + .xrpc(agent.endpoint().await) 207 + .send::<ApplyWrites>(&req) 208 + .await? 209 + .into_output()?; 210 + 211 + println!("res: {res:#?}"); 153 212 154 213 Ok(()) 155 214 }