From aea81b798e3332f23408f4ac84345256c519c2e3 Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Sun, 19 Jan 2025 13:48:32 +0300 Subject: [PATCH] Added waves like posts renderer --- package.json | 6 +- src/App.tsx | 8 + src/lib/api/hive.api.ts | 18 ++ src/lib/api/index.ts | 1 + src/lib/components/ecency-renderer.tsx | 4 + .../extensions/hive-post-link-extension.tsx | 21 +- src/lib/components/extensions/index.ts | 1 + .../extensions/twitter-extension.tsx | 40 ++++ .../extensions/wave-like-post-extension.scss | 82 ++++++++ .../extensions/wave-like-post-extension.tsx | 106 ++++++++++ src/lib/components/functions/index.ts | 1 + .../components/functions/is-wave-like-post.ts | 9 + src/lib/components/icons.ts | 1 + src/main.tsx | 22 +++ vite.config.ts | 1 + yarn.lock | 187 +++++++++++++++++- 16 files changed, 493 insertions(+), 15 deletions(-) create mode 100644 src/lib/api/hive.api.ts create mode 100644 src/lib/api/index.ts create mode 100644 src/lib/components/extensions/twitter-extension.tsx create mode 100644 src/lib/components/extensions/wave-like-post-extension.scss create mode 100644 src/lib/components/extensions/wave-like-post-extension.tsx create mode 100644 src/lib/components/functions/index.ts create mode 100644 src/lib/components/functions/is-wave-like-post.ts create mode 100644 src/lib/components/icons.ts diff --git a/package.json b/package.json index ba90e08..1a9aa0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ecency/renderer", - "version": "1.0.0", + "version": "1.1.0", "description": "React components for rendering Hive posts using Ecency extensions", "keywords": [], "files": [ @@ -28,6 +28,7 @@ "coverage": "vitest run --coverage" }, "devDependencies": { + "@hiveio/dhive": "^1.3.2", "@testing-library/dom": "^8.11.3", "@testing-library/react": "^12.1.3", "@types/node": "^22.10.5", @@ -77,6 +78,7 @@ "dependencies": { "@ecency/render-helper": "^2.2.36", "clsx": "^2.1.1", - "medium-zoom": "^1.1.0" + "medium-zoom": "^1.1.0", + "react-twitter-embed": "^4.0.4" } } diff --git a/src/App.tsx b/src/App.tsx index c7b0611..a7dbab6 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -43,6 +43,14 @@ export function App() { "\n" + "▶️ [3Speak](https://3speak.tv/watch?v=theycallmedan/swqpoete)", ], + [ + "Wave, Threads, LikeTu, testhreads posts", + "Hello world!\n\nhttps://ecency.com/@demo.com/re-ecencywaves-2024127t153020761z\n\nhttps://inleo.io/threads/view/vimukthi/re-leothreads-2tbpqwfov?referral=vimukthi\n\nhttps://ecency.com/waves/@shamis/wave-2025116t2377298z\n", + ], + [ + "Twitter widget", + "Hello world\n\nhttps://x.com/it_vicev/status/1798031021692055724", + ], ]; return (
diff --git a/src/lib/api/hive.api.ts b/src/lib/api/hive.api.ts new file mode 100644 index 0000000..4df9621 --- /dev/null +++ b/src/lib/api/hive.api.ts @@ -0,0 +1,18 @@ +import { Entry } from "@ecency/render-helper/lib/types"; + +const cache = new Map(); + +export async function getCachedPost(username: string, permlink: string) { + if (cache.has(`${username}/${permlink}`)) { + return cache.get(`${username}/${permlink}`); + } + + const response = (await (window as any).dHiveClient.call( + "condenser_api", + "get_content", + [username, permlink], + )) as Entry; + + cache.set(`${username}/${permlink}`, response); + return response; +} diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts new file mode 100644 index 0000000..9f951a6 --- /dev/null +++ b/src/lib/api/index.ts @@ -0,0 +1 @@ +export * from "./hive.api"; diff --git a/src/lib/components/ecency-renderer.tsx b/src/lib/components/ecency-renderer.tsx index 0df13e2..e02997d 100644 --- a/src/lib/components/ecency-renderer.tsx +++ b/src/lib/components/ecency-renderer.tsx @@ -6,9 +6,11 @@ import { HivePostLinkExtension, ImageZoomExtension, TagLinkExtension, + WaveLikePostExtension, YoutubeVideoExtension, } from "./extensions"; import { ThreeSpeakVideoExtension } from "./extensions/three-speak-video-extension"; +import { TwitterExtension } from "./extensions/twitter-extension"; interface Props { value: string; @@ -43,6 +45,8 @@ export function EcencyRenderer({ + + )} diff --git a/src/lib/components/extensions/hive-post-link-extension.tsx b/src/lib/components/extensions/hive-post-link-extension.tsx index 5930d84..58ac0e2 100644 --- a/src/lib/components/extensions/hive-post-link-extension.tsx +++ b/src/lib/components/extensions/hive-post-link-extension.tsx @@ -3,6 +3,7 @@ import React, { RefObject, useCallback, useEffect, useState } from "react"; import { hydrateRoot } from "react-dom/client"; import "./hive-post-link-extension.scss"; +import { isWaveLikePost } from "../functions"; const simpleCache = new Map< string, @@ -105,15 +106,17 @@ export function HivePostLinkExtension({ ".markdown-view:not(.markdown-view-pure) .markdown-post-link", ) ?? [], ); - elements.forEach((element) => { - const container = document.createElement("div"); - container.classList.add("ecency-renderer-hive-post-extension"); - hydrateRoot( - container, - , - ); - element.parentElement?.replaceChild(container, element); - }); + elements + .filter((el) => !isWaveLikePost(el.getAttribute("href") ?? "")) + .forEach((element) => { + const container = document.createElement("div"); + container.classList.add("ecency-renderer-hive-post-extension"); + hydrateRoot( + container, + , + ); + element.parentElement?.replaceChild(container, element); + }); }, []); return <>; diff --git a/src/lib/components/extensions/index.ts b/src/lib/components/extensions/index.ts index fbfe04f..4879521 100644 --- a/src/lib/components/extensions/index.ts +++ b/src/lib/components/extensions/index.ts @@ -3,3 +3,4 @@ export * from "./hive-post-link-extension"; export * from "./author-link-extension"; export * from "./tag-link-extension"; export * from "./youtube-video-extension"; +export * from "./wave-like-post-extension"; diff --git a/src/lib/components/extensions/twitter-extension.tsx b/src/lib/components/extensions/twitter-extension.tsx new file mode 100644 index 0000000..5938619 --- /dev/null +++ b/src/lib/components/extensions/twitter-extension.tsx @@ -0,0 +1,40 @@ +"use client"; + +import React, { RefObject, useEffect } from "react"; +import { hydrateRoot } from "react-dom/client"; +import { TwitterTweetEmbed } from "react-twitter-embed"; + +export function TwitterExtension({ + containerRef, +}: { + containerRef: RefObject; +}) { + useEffect(() => { + const elements = Array.from( + containerRef.current?.querySelectorAll( + ".markdown-view:not(.markdown-view-pure) .markdown-external-link", + ) ?? [], + ); + elements + .filter( + (el) => + el.getAttribute("href")?.startsWith("https://x.com") || + el.getAttribute("href")?.startsWith("https://twitter.com"), + ) + .forEach((element) => { + const container = document.createElement("div"); + const [_, __, ___, tweetId] = URL.parse( + element.getAttribute("href")!, + )!.pathname.split("/"); + + container.classList.add("ecency-renderer-twitter-extension-frame"); + element.classList.add("ecency-renderer-twitter-extension"); + + hydrateRoot(container, ); + element.innerHTML = ""; + element.appendChild(container); + }); + }, []); + + return <>; +} diff --git a/src/lib/components/extensions/wave-like-post-extension.scss b/src/lib/components/extensions/wave-like-post-extension.scss new file mode 100644 index 0000000..0eff82d --- /dev/null +++ b/src/lib/components/extensions/wave-like-post-extension.scss @@ -0,0 +1,82 @@ +.ecency-renderer-wave-like-post-extension { + &-renderer { + border-radius: 1rem; + padding: 1rem; + border: 1px solid var(--border-color, #dee2e6); + display: flex; + flex-direction: column; + gap: 1rem; + position: relative; + text-decoration: none; + color: inherit; + margin: 1rem auto; + max-width: 600px; + + &::after { + content: none !important; + } + + &:hover { + background-color: rgba(#357ce6, 0.03); + } + + &--logo { + position: absolute; + top: 1rem; + right: 1rem; + width: 2rem; + height: 2rem; + + &::after { + content: none !important; + } + + .ecency-logo-circle { + fill: rgba(#8d8d8d, 0.5); + } + + .ecency-logo-sign { + fill: #fff; + } + } + + &--author { + display: flex; + align-items: center; + gap: 0.5rem; + + &-avatar { + width: 48px; + height: 48px; + border-radius: 24px; + } + + &-content { + display: flex; + flex-direction: column; + + &-host { + opacity: 0.5; + font-size: 0.875rem; + } + + &-link { + color: #357ce6; + font-size: 1rem; + text-decoration: none; + font-weight: 500; + + &:hover { + text-decoration: underline; + } + } + + a { + &::after { + content: none !important; + } + } + } + } + } +} \ No newline at end of file diff --git a/src/lib/components/extensions/wave-like-post-extension.tsx b/src/lib/components/extensions/wave-like-post-extension.tsx new file mode 100644 index 0000000..e1ae6c4 --- /dev/null +++ b/src/lib/components/extensions/wave-like-post-extension.tsx @@ -0,0 +1,106 @@ +"use client"; + +import React, { RefObject, useEffect, useMemo, useState } from "react"; +import { hydrateRoot } from "react-dom/client"; +import { isWaveLikePost } from "../functions"; +import { getCachedPost } from "../../api"; +import { Entry } from "@ecency/render-helper/lib/types"; +import "./wave-like-post-extension.scss"; +import { EcencyRenderer } from "../ecency-renderer"; +import { Logo } from "../icons"; + +export function WaveLikePostRenderer({ link }: { link: string }) { + const [post, setPost] = useState(); + + const host = useMemo(() => { + if ( + post?.permlink?.startsWith("re-ecencywaves") || + post?.permlink?.startsWith("wave-") + ) { + return "ecency.waves"; + } + + if (post?.permlink?.startsWith("re-leothreads")) { + return "threads"; + } + + return ""; + }, [post]); + + useEffect(() => { + const [_, __, ___, username, permlink] = new URL( + `https://ecency.com/${link}`, + ).pathname.split("/"); + getCachedPost(username.replace("@", ""), permlink) + .then((resp) => { + setPost(resp as any); + }) + .catch((e) => console.error(e)); + }, []); + + return post ? ( + + +
+ +
+
+ ) : ( + <> + ); +} + +export function WaveLikePostExtension({ + containerRef, +}: { + containerRef: RefObject; +}) { + useEffect(() => { + const elements = Array.from( + containerRef.current?.querySelectorAll( + ".markdown-view:not(.markdown-view-pure) .markdown-post-link", + ) ?? [], + ); + elements + .filter((el) => isWaveLikePost(el.getAttribute("href") ?? "")) + .forEach((element) => { + const container = document.createElement("div"); + container.classList.add("ecency-renderer-wave-like-extension"); + hydrateRoot( + container, + , + ); + element.parentElement?.replaceChild(container, element); + }); + }, []); + + return <>; +} diff --git a/src/lib/components/functions/index.ts b/src/lib/components/functions/index.ts new file mode 100644 index 0000000..f6ed631 --- /dev/null +++ b/src/lib/components/functions/index.ts @@ -0,0 +1 @@ +export * from "./is-wave-like-post"; diff --git a/src/lib/components/functions/is-wave-like-post.ts b/src/lib/components/functions/is-wave-like-post.ts new file mode 100644 index 0000000..e324eb0 --- /dev/null +++ b/src/lib/components/functions/is-wave-like-post.ts @@ -0,0 +1,9 @@ +export function isWaveLikePost(link: string) { + const [_, __, ___, permlink] = link.split("/"); + return ( + permlink.includes("re-ecencywaves") || + permlink.includes("re-leothreads") || + permlink.startsWith("wave-") || + permlink.startsWith("re-liketu-moments") + ); +} diff --git a/src/lib/components/icons.ts b/src/lib/components/icons.ts new file mode 100644 index 0000000..497ceec --- /dev/null +++ b/src/lib/components/icons.ts @@ -0,0 +1 @@ +export const Logo = ``; diff --git a/src/main.tsx b/src/main.tsx index 5b91bb9..15b54bb 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -2,6 +2,28 @@ import React from "react"; import { createRoot } from "react-dom/client"; import "./index.css"; import { App } from "./App"; +import { Client } from "@hiveio/dhive"; + +const SERVERS = [ + "https://api.hive.blog", + "https://api.openhive.network", + "https://hapi.ecency.com", + "https://rpc.mahdiyari.info", + "https://api.deathwing.me", + "https://api.syncad.com", + "https://anyx.io", + "https://api.c0ff33a.uk", + "https://hive-api.3speak.tv", + "https://techcoderx.com", + "https://hived.emre.sh", + "https://api.hive.blue", +]; + +(window as any).dHiveClient = new Client(SERVERS, { + timeout: 2000, + failoverThreshold: 2, + consoleOnFailover: true, +}); const container = document.getElementById("root"); if (container) { diff --git a/vite.config.ts b/vite.config.ts index 3c535be..d04f66c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -24,6 +24,7 @@ export default defineConfig({ "@ecency/render-helper", "medium-zoom", "react/jsx-runtime", + "@hiveio/dhive", ], }, }, diff --git a/yarn.lock b/yarn.lock index 90ef194..3317d0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -207,6 +207,13 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@ecency/bytebuffer@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@ecency/bytebuffer/-/bytebuffer-6.0.0.tgz#8d4f98bf5777f18e056c85899a9bdb37119cc62a" + integrity sha512-rGPjzD7a7cPtMHjpJEtLMt/RmqX8XK25tN5qjuu9iaDMK/Ril86CecU5DN/TXEMUQMY1p6b2cVvKBLTdFMr2DA== + dependencies: + long "~3" + "@ecency/render-helper@^2.2.36": version "2.2.36" resolved "https://registry.yarnpkg.com/@ecency/render-helper/-/render-helper-2.2.36.tgz#4c59579f596fd36f23abb20fa51e548b37422a62" @@ -339,6 +346,25 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== +"@hiveio/dhive@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hiveio/dhive/-/dhive-1.3.2.tgz#23733a8f0d537b1cad89e9bdd6e6a8a6d8b339d8" + integrity sha512-kJjp3TbpIlODxjJX4BWwvOf+cMxT8CFH/mNQ40RRjR2LP0a4baSWae1G+U/q/NtgjsIQz6Ja40tvnw6KF12I+g== + dependencies: + "@ecency/bytebuffer" "^6.0.0" + bigi "^1.4.2" + bs58 "^4.0.1" + core-js "^3.6.4" + cross-fetch "^3.0.4" + ecurve "^1.0.6" + https "^1.0.0" + jsbi "^3.1.4" + node-fetch "^2.6.0" + ripemd160 "^2.0.2" + secp256k1 "^3.8.0" + verror "^1.10.0" + whatwg-fetch "^3.0.0" + "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" @@ -986,6 +1012,11 @@ asn1.js@^4.10.1: inherits "^2.0.1" minimalistic-assert "^1.0.0" +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assert@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" @@ -1033,7 +1064,26 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: +bigi@^1.1.0, bigi@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/bigi/-/bigi-1.4.2.tgz#9c665a95f88b8b08fc05cfd731f561859d725825" + integrity sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bip66@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" + integrity sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw== + dependencies: + safe-buffer "^5.0.1" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== @@ -1077,7 +1127,7 @@ browser-resolve@^2.0.0: dependencies: resolve "^1.17.0" -browserify-aes@^1.0.4, browserify-aes@^1.2.0: +browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -1329,6 +1379,16 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +core-js@^3.6.4: + version "3.40.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.40.0.tgz#2773f6b06877d8eda102fc42f828176437062476" + integrity sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -1370,6 +1430,13 @@ create-require@^1.1.1: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-fetch@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + dependencies: + node-fetch "^2.7.0" + cross-spawn@^7.0.0: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -1498,6 +1565,15 @@ domain-browser@4.22.0: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== +drbg.js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" + integrity sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g== + dependencies: + browserify-aes "^1.0.6" + create-hash "^1.1.2" + create-hmac "^1.1.4" + dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -1507,12 +1583,20 @@ dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" +ecurve@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/ecurve/-/ecurve-1.0.6.tgz#dfdabbb7149f8d8b78816be5a7d5b83fcf6de797" + integrity sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w== + dependencies: + bigi "^1.1.0" + safe-buffer "^5.0.1" + electron-to-chromium@^1.5.73: version "1.5.80" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.80.tgz#ca7a8361d7305f0ec9e203ce4e633cbb8a8ef1b1" integrity sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw== -elliptic@^6.5.3, elliptic@^6.5.5: +elliptic@^6.5.3, elliptic@^6.5.5, elliptic@^6.5.7: version "6.6.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== @@ -1636,6 +1720,11 @@ expect-type@^1.1.0: resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1646,6 +1735,11 @@ fast-uri@^3.0.1: resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.5.tgz#19f5f9691d0dab9b85861a7bb5d98fca961da9cd" integrity sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q== +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -1851,6 +1945,11 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== +https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" + integrity sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg== + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -2109,6 +2208,11 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +jsbi@^3.1.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" + integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== + jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -2161,6 +2265,11 @@ lolight@^1.4.0: resolved "https://registry.yarnpkg.com/lolight/-/lolight-1.4.1.tgz#9fedc7ec40959e501407bc7a3e5f7ae936d2a25b" integrity sha512-AALiVBZpkryshtHbhE3KnRMGSnNtj7yfC2JgnMvXZ2sQQues4omu3pp04S+7X4P2QQhcXanPEXOGQgd77qMvJg== +long@~3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg== + loupe@^3.1.0, loupe@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" @@ -2293,6 +2402,11 @@ multihashes@0.4.13: bs58 "^4.0.1" varint "^5.0.0" +nan@^2.14.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3" + integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw== + nanoid@^3.3.7: version "3.3.8" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" @@ -2303,6 +2417,13 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== +node-fetch@^2.6.0, node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-releases@^2.0.19: version "2.0.19" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" @@ -2626,6 +2747,13 @@ react-test-renderer@^19.0.0: react-is "^19.0.0" scheduler "^0.25.0" +react-twitter-embed@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/react-twitter-embed/-/react-twitter-embed-4.0.4.tgz#4a6b8354acc266876ff1110b9f648518ea20db6d" + integrity sha512-2JIL7qF+U62zRzpsh6SZDXNI3hRNVYf5vOZ1WRcMvwKouw+xC00PuFaD0aEp2wlyGaZ+f4x2VvX+uDadFQ3HVA== + dependencies: + scriptjs "^2.5.9" + react@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" @@ -2709,7 +2837,7 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -2780,6 +2908,25 @@ scheduler@^0.25.0: resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== +scriptjs@^2.5.9: + version "2.5.9" + resolved "https://registry.yarnpkg.com/scriptjs/-/scriptjs-2.5.9.tgz#343915cd2ec2ed9bfdde2b9875cd28f59394b35f" + integrity sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg== + +secp256k1@^3.8.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.1.tgz#b62a62a882d6b16f9b51fe599c6b3a861e36c59f" + integrity sha512-tArjQw2P0RTdY7QmkNehgp6TVvQXq6ulIhxv8gaH6YubKG/wxxAoNKcbuXjDhybbc+b2Ihc7e0xxiGN744UIiQ== + dependencies: + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" + drbg.js "^1.0.1" + elliptic "^6.5.7" + nan "^2.14.0" + safe-buffer "^5.1.2" + semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -3052,6 +3199,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + tslib@^2.3.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" @@ -3147,6 +3299,15 @@ varint@^5.0.0: resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +verror@^1.10.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" + integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vite-node@2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.1.8.tgz#9495ca17652f6f7f95ca7c4b568a235e0c8dbac5" @@ -3239,6 +3400,24 @@ vscode-uri@^3.0.8: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-fetch@^3.0.0: + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e"