diff --git a/src/components/AddProductToRocket.svelte b/src/components/AddProductToRocket.svelte index 49b9a4b..6937057 100644 --- a/src/components/AddProductToRocket.svelte +++ b/src/components/AddProductToRocket.svelte @@ -25,7 +25,6 @@ if (!$ndk.signer) { throw new Error('no ndk signer found'); } - rocket.ndk = $ndk; let author = $currentUser; if (!author) { throw new Error('no current user'); @@ -35,10 +34,11 @@ throw new Error('you are not the creator of this rocket'); } let event = parsedRocket.UpsertProduct(product.id, price, max); + event.ndk = $ndk event.publish().then((x) => { console.log(x); goto(`${base}/products`); - }); + }).catch(()=>{ console.log("failed to publish", event.rawEvent())}); } diff --git a/src/components/RocketDashboard.svelte b/src/components/RocketDashboard.svelte index f58c245..aa69a82 100644 --- a/src/components/RocketDashboard.svelte +++ b/src/components/RocketDashboard.svelte @@ -1,15 +1,15 @@ diff --git a/src/lib/event_helpers/rockets.ts b/src/lib/event_helpers/rockets.ts index 86ca919..7d1a85c 100644 --- a/src/lib/event_helpers/rockets.ts +++ b/src/lib/event_helpers/rockets.ts @@ -71,7 +71,7 @@ export class Rocket { let hasInvalidSig = false; if (request && request.Event && request.Event.sig && votes.Votes.length > 0) { if (!request.Event.verifySignature(true)) { - hasInvalidSig = true + hasInvalidSig = true; } for (let v of votes.Votes) { if (!(v.Event.sig && v.Event.verifySignature(true))) { @@ -90,11 +90,11 @@ export class Rocket { } } return proof; - //add the AMR to the rocket event, and also add a proof } UpsertAMR(request: MeritRequest, signedProof: NDKEvent): NDKEvent | undefined { let event: NDKEvent | undefined = undefined; if (this.ValidateAMRProof(signedProof)) { + this.PrepareForUpdate(); event = new NDKEvent(this.Event.ndk, this.Event.rawEvent()); event.created_at = Math.floor(new Date().getTime() / 1000); event.tags.push(['merit', `${request.Pubkey}:${request.ID}:0:0:${request.Merits}`]); @@ -103,12 +103,8 @@ export class Rocket { } return event; } - // ApprovedMeritRequests():Map { - // let amr = new Map() - - // return amr - // } UpsertProduct(id: string, price: number, maxSales?: number): NDKEvent { + this.PrepareForUpdate(); let event = new NDKEvent(this.Event.ndk, this.Event.rawEvent()); event.created_at = Math.floor(new Date().getTime() / 1000); let existingProducts = this.CurrentProducts(); @@ -129,7 +125,52 @@ export class Rocket { CurrentProducts(): Map { return getMapOfProductsFromRocket(this.Event); } - + RemoveDuplicateTags() { + function iterate(event: NDKEvent): NDKEvent { + let purged = 0; + for (let i = 0; i < event.tags.length; i++) { + for (let j = i + 1; j < event.tags.length; j++) { + // quick elimination by comparing sub-array lengths + if (event.tags[i].length !== event.tags[j].length) { + continue; + } + // look for dupes + var dupe = true; + for (var k = 0; k < event.tags[i].length; k++) { + if (event.tags[i][k] !== event.tags[j][k]) { + dupe = false; + break; + } + } + // if a dupe then remove it + if (dupe) { + purged++; + event.tags.splice(j, 1); + } + } + } + if (purged > 0) { + return iterate(event); + } else { + return event; + } + } + this.Event = iterate(this.Event); + } + RemoveProofs() { + let newTags: NDKTag[] = []; + for (let t of this.Event.tags) { + if (!t[0].includes('proof') && t[0] != 'client') { + newTags.push(t); + } + } + this.Event.tags = newTags; + } + PrepareForUpdate() { + this.RemoveDuplicateTags(); + this.RemoveProofs(); + this.Event.sig = undefined + } constructor(event: NDKEvent) { this.Event = event; }