mirror of
https://github.com/aljazceru/hypergolic.git
synced 2025-12-21 15:24:25 +01:00
problem: duplicate tags
This commit is contained in:
@@ -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())});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<script lang="ts">
|
||||
import * as Breadcrumb from '$lib/components/ui/breadcrumb/index.js';
|
||||
import Button from '@/components/ui/button/button.svelte';
|
||||
import * as Card from '@/components/ui/card';
|
||||
import type { NDKEvent } from '@nostr-dev-kit/ndk';
|
||||
import CreateMeritRequest from './CreateMeritRequest.svelte';
|
||||
import CreateNewProduct from './CreateNewProduct.svelte';
|
||||
import MeritRequests from './MeritRequests.svelte';
|
||||
import MeritsAndSatflow from './MeritsAndSatflow.svelte';
|
||||
import ProductFomo from './ProductFomo.svelte';
|
||||
import ProposedProducts from './ProposedProducts.svelte';
|
||||
import Todo from './Todo.svelte';
|
||||
import MeritRequests from './MeritRequests.svelte';
|
||||
import Button from '@/components/ui/button/button.svelte';
|
||||
|
||||
export let rocket: NDKEvent;
|
||||
</script>
|
||||
|
||||
@@ -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<string, MeritRequest> {
|
||||
// let amr = new Map<string, MeritRequest>()
|
||||
|
||||
// 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<string, RocketProduct> {
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user