feat: (nip96) nostrcheck.me

This commit is contained in:
Kieran 2023-11-20 19:09:49 +00:00
parent c9baf487ae
commit e8bcba129e
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
4 changed files with 18 additions and 3 deletions

View File

@ -45,7 +45,7 @@ export interface UserPreferences {
/** /**
* File uploading service to upload attachments to * File uploading service to upload attachments to
*/ */
fileUploader: "void.cat" | "nostr.build" | "nostrimg.com" | "void.cat-NIP96"; fileUploader: "void.cat" | "nostr.build" | "nostrimg.com" | "void.cat-NIP96" | "nostrcheck.me";
/** /**
* Use imgproxy to optimize images * Use imgproxy to optimize images

View File

@ -474,6 +474,7 @@ const PreferencesPage = () => {
<option value="void.cat-NIP96">void.cat (NIP-96)</option> <option value="void.cat-NIP96">void.cat (NIP-96)</option>
<option value="nostr.build">nostr.build</option> <option value="nostr.build">nostr.build</option>
<option value="nostrimg.com">nostrimg.com</option> <option value="nostrimg.com">nostrimg.com</option>
<option value="nostrcheck.me">nostrcheck.me (NIP-96)</option>
</select> </select>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">

View File

@ -13,6 +13,11 @@ export class Nip96Uploader implements Uploader {
return []; return [];
} }
async loadInfo() {
const rsp = await fetch(this.url);
return (await rsp.json()) as Nip96Info;
}
async upload(file: File | Blob, filename: string): Promise<UploadResult> { async upload(file: File | Blob, filename: string): Promise<UploadResult> {
throwIfOffline(); throwIfOffline();
const auth = async (url: string, method: string) => { const auth = async (url: string, method: string) => {
@ -22,18 +27,19 @@ export class Nip96Uploader implements Uploader {
return `Nostr ${base64.encode(new TextEncoder().encode(JSON.stringify(auth)))}`; return `Nostr ${base64.encode(new TextEncoder().encode(JSON.stringify(auth)))}`;
}; };
const info = await this.loadInfo();
const fd = new FormData(); const fd = new FormData();
fd.append("size", file.size.toString()); fd.append("size", file.size.toString());
fd.append("alt", filename); fd.append("alt", filename);
fd.append("media_type", file.type); fd.append("media_type", file.type);
fd.append("file", file); fd.append("file", file);
const rsp = await fetch(this.url, { const rsp = await fetch(info.api_url, {
body: fd, body: fd,
method: "POST", method: "POST",
headers: { headers: {
accept: "application/json", accept: "application/json",
authorization: await auth(this.url, "POST"), authorization: await auth(info.api_url, "POST"),
}, },
}); });
if (rsp.ok) { if (rsp.ok) {
@ -62,6 +68,11 @@ export class Nip96Uploader implements Uploader {
} }
} }
export interface Nip96Info {
api_url: string;
download_url?: string;
}
export interface Nip96Result { export interface Nip96Result {
status: string; status: string;
message: string; message: string;

View File

@ -78,6 +78,9 @@ export default function useFileUpload(): Uploader {
case "void.cat-NIP96": { case "void.cat-NIP96": {
return new Nip96Uploader("https://void.cat/nostr", unwrap(publisher)); return new Nip96Uploader("https://void.cat/nostr", unwrap(publisher));
} }
case "nostrcheck.me": {
return new Nip96Uploader("https://nostrcheck.me/api/v2/nip96", unwrap(publisher));
}
case "nostrimg.com": { case "nostrimg.com": {
return { return {
upload: NostrImg, upload: NostrImg,