60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { equalProp } from "@snort/shared";
|
|
import { FlatReqFilter } from "./query-optimizer";
|
|
import { IMeta, NostrEvent, ReqFilter } from "./nostr";
|
|
|
|
export function findTag(e: NostrEvent, tag: string) {
|
|
const maybeTag = e.tags.find(evTag => {
|
|
return evTag[0] === tag;
|
|
});
|
|
return maybeTag && maybeTag[1];
|
|
}
|
|
|
|
export function reqFilterEq(a: FlatReqFilter | ReqFilter, b: FlatReqFilter | ReqFilter): boolean {
|
|
return (
|
|
equalProp(a.ids, b.ids) &&
|
|
equalProp(a.kinds, b.kinds) &&
|
|
equalProp(a.authors, b.authors) &&
|
|
equalProp(a.limit, b.limit) &&
|
|
equalProp(a.since, b.since) &&
|
|
equalProp(a.until, b.until) &&
|
|
equalProp(a.search, b.search) &&
|
|
equalProp(a["#e"], b["#e"]) &&
|
|
equalProp(a["#p"], b["#p"]) &&
|
|
equalProp(a["#t"], b["#t"]) &&
|
|
equalProp(a["#d"], b["#d"]) &&
|
|
equalProp(a["#r"], b["#r"])
|
|
);
|
|
}
|
|
|
|
export function flatFilterEq(a: FlatReqFilter, b: FlatReqFilter): boolean {
|
|
return (
|
|
a.keys === b.keys &&
|
|
a.since === b.since &&
|
|
a.until === b.until &&
|
|
a.limit === b.limit &&
|
|
a.search === b.search &&
|
|
a.ids === b.ids &&
|
|
a.kinds === b.kinds &&
|
|
a.authors === b.authors &&
|
|
a["#e"] === b["#e"] &&
|
|
a["#p"] === b["#p"] &&
|
|
a["#t"] === b["#t"] &&
|
|
a["#d"] === b["#d"] &&
|
|
a["#r"] === b["#r"]
|
|
);
|
|
}
|
|
|
|
export function splitByUrl(str: string) {
|
|
const urlRegex =
|
|
/((?:http|ftp|https|nostr|web\+nostr|magnet|lnurl[p|w]?):\/?\/?(?:[\w+?.\w+])+(?:[\p{L}\p{N}~!@#$%^&*()_\-=+\\/?.:;',]*)?(?:[-a-z0-9+&@#/%=~()_|]))/iu;
|
|
|
|
return str.split(urlRegex);
|
|
}
|
|
|
|
export function getHex64(json: string, field: string): string {
|
|
let len = field.length + 3;
|
|
let idx = json.indexOf(`"${field}":`) + len;
|
|
let s = json.slice(idx).indexOf(`"`) + idx + 1;
|
|
return json.slice(s, s + 64);
|
|
}
|