web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

parse.ts (1845B)


      1 import { KIND_FARM, KIND_PLOT, type RadrootsPlot } from "@radroots/events-bindings";
      2 import type { NostrEvent } from "../../types/nostr.js";
      3 import { get_event_tag, parse_nostr_event_basis } from "../lib.js";
      4 import type { NostrEventBasis } from "../subscription.js";
      5 
      6 export type RadrootsPlotNostrEvent = NostrEventBasis<typeof KIND_PLOT> & { plot: RadrootsPlot };
      7 
      8 type PlotFarmRef = {
      9     pubkey: string;
     10     d_tag: string;
     11 };
     12 
     13 const parse_farm_addr = (value: string): PlotFarmRef | undefined => {
     14     const parts = value.split(":");
     15     if (parts.length < 3) return undefined;
     16     const kind = Number(parts[0]);
     17     if (!Number.isFinite(kind) || kind !== KIND_FARM) return undefined;
     18     const pubkey = parts[1]?.trim() || "";
     19     const d_tag = parts.slice(2).join(":").trim();
     20     if (!pubkey || !d_tag) return undefined;
     21     return { pubkey, d_tag };
     22 };
     23 
     24 export const parse_nostr_plot_event = (
     25     event: NostrEvent,
     26 ): RadrootsPlotNostrEvent | undefined => {
     27     const ev = parse_nostr_event_basis(event, KIND_PLOT);
     28     if (!ev) return undefined;
     29     const d_tag = get_event_tag(event.tags, "d");
     30     if (!d_tag) return undefined;
     31     const farm_addr = get_event_tag(event.tags, "a");
     32     if (!farm_addr) return undefined;
     33     const farm_pubkey = get_event_tag(event.tags, "p");
     34     if (!farm_pubkey) return undefined;
     35     const farm_ref = parse_farm_addr(farm_addr);
     36     if (!farm_ref) return undefined;
     37     if (farm_pubkey !== farm_ref.pubkey) return undefined;
     38     try {
     39         const parsed = JSON.parse(event.content);
     40         const plot = parsed as RadrootsPlot;
     41         if (plot.d_tag !== d_tag) return undefined;
     42         if (plot.farm.pubkey !== farm_ref.pubkey) return undefined;
     43         if (plot.farm.d_tag !== farm_ref.d_tag) return undefined;
     44         return { ...ev, plot };
     45     } catch {
     46         return undefined;
     47     }
     48 };