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) {
|
if (!$ndk.signer) {
|
||||||
throw new Error('no ndk signer found');
|
throw new Error('no ndk signer found');
|
||||||
}
|
}
|
||||||
rocket.ndk = $ndk;
|
|
||||||
let author = $currentUser;
|
let author = $currentUser;
|
||||||
if (!author) {
|
if (!author) {
|
||||||
throw new Error('no current user');
|
throw new Error('no current user');
|
||||||
@@ -35,10 +34,11 @@
|
|||||||
throw new Error('you are not the creator of this rocket');
|
throw new Error('you are not the creator of this rocket');
|
||||||
}
|
}
|
||||||
let event = parsedRocket.UpsertProduct(product.id, price, max);
|
let event = parsedRocket.UpsertProduct(product.id, price, max);
|
||||||
|
event.ndk = $ndk
|
||||||
event.publish().then((x) => {
|
event.publish().then((x) => {
|
||||||
console.log(x);
|
console.log(x);
|
||||||
goto(`${base}/products`);
|
goto(`${base}/products`);
|
||||||
});
|
}).catch(()=>{ console.log("failed to publish", event.rawEvent())});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import * as Breadcrumb from '$lib/components/ui/breadcrumb/index.js';
|
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 * as Card from '@/components/ui/card';
|
||||||
import type { NDKEvent } from '@nostr-dev-kit/ndk';
|
import type { NDKEvent } from '@nostr-dev-kit/ndk';
|
||||||
import CreateMeritRequest from './CreateMeritRequest.svelte';
|
import CreateMeritRequest from './CreateMeritRequest.svelte';
|
||||||
import CreateNewProduct from './CreateNewProduct.svelte';
|
import CreateNewProduct from './CreateNewProduct.svelte';
|
||||||
|
import MeritRequests from './MeritRequests.svelte';
|
||||||
import MeritsAndSatflow from './MeritsAndSatflow.svelte';
|
import MeritsAndSatflow from './MeritsAndSatflow.svelte';
|
||||||
import ProductFomo from './ProductFomo.svelte';
|
import ProductFomo from './ProductFomo.svelte';
|
||||||
import ProposedProducts from './ProposedProducts.svelte';
|
import ProposedProducts from './ProposedProducts.svelte';
|
||||||
import Todo from './Todo.svelte';
|
import Todo from './Todo.svelte';
|
||||||
import MeritRequests from './MeritRequests.svelte';
|
|
||||||
import Button from '@/components/ui/button/button.svelte';
|
|
||||||
|
|
||||||
export let rocket: NDKEvent;
|
export let rocket: NDKEvent;
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ export class Rocket {
|
|||||||
let hasInvalidSig = false;
|
let hasInvalidSig = false;
|
||||||
if (request && request.Event && request.Event.sig && votes.Votes.length > 0) {
|
if (request && request.Event && request.Event.sig && votes.Votes.length > 0) {
|
||||||
if (!request.Event.verifySignature(true)) {
|
if (!request.Event.verifySignature(true)) {
|
||||||
hasInvalidSig = true
|
hasInvalidSig = true;
|
||||||
}
|
}
|
||||||
for (let v of votes.Votes) {
|
for (let v of votes.Votes) {
|
||||||
if (!(v.Event.sig && v.Event.verifySignature(true))) {
|
if (!(v.Event.sig && v.Event.verifySignature(true))) {
|
||||||
@@ -90,11 +90,11 @@ export class Rocket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return proof;
|
return proof;
|
||||||
//add the AMR to the rocket event, and also add a proof
|
|
||||||
}
|
}
|
||||||
UpsertAMR(request: MeritRequest, signedProof: NDKEvent): NDKEvent | undefined {
|
UpsertAMR(request: MeritRequest, signedProof: NDKEvent): NDKEvent | undefined {
|
||||||
let event: NDKEvent | undefined = undefined;
|
let event: NDKEvent | undefined = undefined;
|
||||||
if (this.ValidateAMRProof(signedProof)) {
|
if (this.ValidateAMRProof(signedProof)) {
|
||||||
|
this.PrepareForUpdate();
|
||||||
event = new NDKEvent(this.Event.ndk, this.Event.rawEvent());
|
event = new NDKEvent(this.Event.ndk, this.Event.rawEvent());
|
||||||
event.created_at = Math.floor(new Date().getTime() / 1000);
|
event.created_at = Math.floor(new Date().getTime() / 1000);
|
||||||
event.tags.push(['merit', `${request.Pubkey}:${request.ID}:0:0:${request.Merits}`]);
|
event.tags.push(['merit', `${request.Pubkey}:${request.ID}:0:0:${request.Merits}`]);
|
||||||
@@ -103,12 +103,8 @@ export class Rocket {
|
|||||||
}
|
}
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
// ApprovedMeritRequests():Map<string, MeritRequest> {
|
|
||||||
// let amr = new Map<string, MeritRequest>()
|
|
||||||
|
|
||||||
// return amr
|
|
||||||
// }
|
|
||||||
UpsertProduct(id: string, price: number, maxSales?: number): NDKEvent {
|
UpsertProduct(id: string, price: number, maxSales?: number): NDKEvent {
|
||||||
|
this.PrepareForUpdate();
|
||||||
let event = new NDKEvent(this.Event.ndk, this.Event.rawEvent());
|
let event = new NDKEvent(this.Event.ndk, this.Event.rawEvent());
|
||||||
event.created_at = Math.floor(new Date().getTime() / 1000);
|
event.created_at = Math.floor(new Date().getTime() / 1000);
|
||||||
let existingProducts = this.CurrentProducts();
|
let existingProducts = this.CurrentProducts();
|
||||||
@@ -129,7 +125,52 @@ export class Rocket {
|
|||||||
CurrentProducts(): Map<string, RocketProduct> {
|
CurrentProducts(): Map<string, RocketProduct> {
|
||||||
return getMapOfProductsFromRocket(this.Event);
|
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) {
|
constructor(event: NDKEvent) {
|
||||||
this.Event = event;
|
this.Event = event;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user