feat: pass nip71 metadata through publish pipeline

This commit is contained in:
thePR0M3TH3AN committed 2025-10-04 18:49:43 -04:00
1 parent 1d8fa2d0c0
commit 9041f9c0b7
5 files changed
+440 -28

No files matched your search

+75
View File
@@ -125,6 +125,73 @@ class R2Service {
this.emit("uploadProgress", { fraction });
}
buildNip71MetadataForUpload(existingMetadata, { publicUrl = "", file = null } = {}) {
const base =
existingMetadata && typeof existingMetadata === "object"
? { ...existingMetadata }
: {};
const cloneImetaVariant = (variant) => {
if (!variant || typeof variant !== "object") {
return {
m: "",
dim: "",
url: "",
x: "",
image: [],
fallback: [],
service: [],
autoGenerated: true,
};
}
return {
...variant,
image: Array.isArray(variant.image) ? [...variant.image] : [],
fallback: Array.isArray(variant.fallback) ? [...variant.fallback] : [],
service: Array.isArray(variant.service) ? [...variant.service] : [],
};
};
const imetaList = Array.isArray(base.imeta)
? base.imeta.map((variant) => cloneImetaVariant(variant))
: [];
if (!imetaList.length) {
imetaList.push({
m: "",
dim: "",
url: "",
x: "",
image: [],
fallback: [],
service: [],
autoGenerated: true,
});
} else {
const primary = imetaList[0];
if (!Array.isArray(primary.image)) primary.image = [];
if (!Array.isArray(primary.fallback)) primary.fallback = [];
if (!Array.isArray(primary.service)) primary.service = [];
}
const primaryVariant = imetaList[0];
const normalizedUrl =
typeof publicUrl === "string" ? publicUrl.trim() : String(publicUrl || "").trim();
if (normalizedUrl && (!primaryVariant.url || !String(primaryVariant.url).trim())) {
primaryVariant.url = normalizedUrl;
}
const mimeType =
file && typeof file.type === "string" ? file.type.trim() : "";
if (mimeType && (!primaryVariant.m || !String(primaryVariant.m).trim())) {
primaryVariant.m = mimeType;
}
base.imeta = imetaList;
return base;
}
populateCloudflareSettingsInputs(settings) {
const data = {
accountId: settings?.accountId || "",
@@ -704,6 +771,14 @@ class R2Service {
enableComments,
};
const mergedNip71 = this.buildNip71MetadataForUpload(metadata?.nip71, {
publicUrl,
file,
});
if (mergedNip71 && Object.keys(mergedNip71).length) {
payload.nip71 = mergedNip71;
}
const published = await publishVideoNote(payload, {
onSuccess: () => {
if (typeof onReset === "function") {