From 23e66ef8d46521e9e8887984864b9c1d6cfb3c46 Mon Sep 17 00:00:00 2001 From: koalasat Date: Sat, 15 Mar 2025 16:28:35 +0100 Subject: [PATCH] Include Peach orders --- .../src/components/BookTable/BookControl.tsx | 3 +++ frontend/src/contexts/FederationContext.tsx | 4 ++-- frontend/src/models/Federation.model.ts | 20 +++++++++++------- frontend/src/services/RoboPool/index.ts | 10 +++++---- .../federation/avatars/peach.small.webp | Bin 0 -> 5720 bytes frontend/static/federation/avatars/peach.webp | Bin 0 -> 7490 bytes ...339A19645E2E53488E0E5479E1B270FACD1BD2.asc | 15 +++++++++++++ frontend/static/thirdparties.json | 16 +++++++++++++- 8 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 frontend/static/federation/avatars/peach.small.webp create mode 100644 frontend/static/federation/avatars/peach.webp create mode 100644 frontend/static/federation/pgp/48339A19645E2E53488E0E5479E1B270FACD1BD2.asc diff --git a/frontend/src/components/BookTable/BookControl.tsx b/frontend/src/components/BookTable/BookControl.tsx index 53909023..f07ab883 100644 --- a/frontend/src/components/BookTable/BookControl.tsx +++ b/frontend/src/components/BookTable/BookControl.tsx @@ -56,6 +56,9 @@ const BookControl = ({ const handleHostChange = function (e: React.ChangeEvent): void { const coordinator = String(e.target.value); + if (coordinator === 'any') { + federation.refreshBookHosts(coordinator !== 'any'); + } setFav({ ...fav, coordinator }); }; diff --git a/frontend/src/contexts/FederationContext.tsx b/frontend/src/contexts/FederationContext.tsx index cf336399..04d75896 100644 --- a/frontend/src/contexts/FederationContext.tsx +++ b/frontend/src/contexts/FederationContext.tsx @@ -35,7 +35,7 @@ export const FederationContext = createContext(initialFe export const FederationContextProvider = ({ children, }: FederationContextProviderProps): JSX.Element => { - const { settings, page, origin, hostUrl, open, torStatus, client } = + const { settings, page, origin, hostUrl, open, torStatus, client, fav } = useContext(AppContext); const { setMaker, garage } = useContext(GarageContext); const [federation] = useState(new Federation(origin, settings, hostUrl)); @@ -57,7 +57,7 @@ export const FederationContextProvider = ({ if (client !== 'mobile' || torStatus === 'ON' || !settings.useProxy) { void federation.updateUrl(origin, settings, hostUrl); void federation.loadLimits(); - federation.setConnection(settings); + federation.setConnection(settings, fav.coordinator); } }, [settings.network, settings.useProxy, torStatus, settings.connection]); diff --git a/frontend/src/models/Federation.model.ts b/frontend/src/models/Federation.model.ts index 14e45818..efb597ea 100644 --- a/frontend/src/models/Federation.model.ts +++ b/frontend/src/models/Federation.model.ts @@ -78,24 +78,28 @@ export class Federation { public roboPool: RoboPool; - setConnection = (settings: Settings): void => { + setConnection = (settings: Settings, coordinator: string): void => { this.connection = settings.connection; + this.loading = true; + this.book = {}; + this.exchange.loadingCache = this.roboPool.relays.length; if (this.connection === 'nostr') { this.roboPool.connect(); - this.loadBookNostr(); + this.loadBookNostr(coordinator !== 'any'); } else { this.roboPool.close(); void this.loadBook(); } }; - loadBookNostr = (): void => { - this.loading = true; - this.book = {}; + refreshBookHosts: (robosatsOnly: boolean) => void = (robosatsOnly) => { + if (this.connection === 'nostr') { + this.loadBookNostr(robosatsOnly); + } + }; - this.exchange.loadingCache = this.roboPool.relays.length; - - this.roboPool.subscribeBook({ + loadBookNostr = (robosatsOnly: boolean): void => { + this.roboPool.subscribeBook(robosatsOnly, { onevent: (event) => { const { dTag, publicOrder } = eventToPublicOrder(event); if (publicOrder) { diff --git a/frontend/src/services/RoboPool/index.ts b/frontend/src/services/RoboPool/index.ts index 60321a63..ec605cb4 100644 --- a/frontend/src/services/RoboPool/index.ts +++ b/frontend/src/services/RoboPool/index.ts @@ -98,10 +98,12 @@ class RoboPool { }); }; - subscribeBook = (events: RoboPoolEvents): void => { - const authors = [...Object.values(defaultFederation), ...Object.values(thirdParties)] - .map((f) => f.nostrHexPubkey) - .filter((item) => item !== undefined); + subscribeBook = (robosatsOnly: boolean, events: RoboPoolEvents): void => { + let scope = Object.values(defaultFederation); + if (!robosatsOnly) { + scope = [...scope, ...Object.values(thirdParties)]; + } + const authors = scope.map((f) => f.nostrHexPubkey).filter((item) => item !== undefined); const requestPending = [ 'REQ', diff --git a/frontend/static/federation/avatars/peach.small.webp b/frontend/static/federation/avatars/peach.small.webp new file mode 100644 index 0000000000000000000000000000000000000000..0af26243f3245fe823e1dad0f1830f335813faf8 GIT binary patch literal 5720 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 Krs;-19sdnJ^R{*X literal 0 HcmV?d00001 diff --git a/frontend/static/federation/avatars/peach.webp b/frontend/static/federation/avatars/peach.webp new file mode 100644 index 0000000000000000000000000000000000000000..5bf97c449baedce29bc5c2492e963e27ffd054de GIT binary patch literal 7490 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 T|4)H$hf6pDd}&65qvO8-n6w$) literal 0 HcmV?d00001 diff --git a/frontend/static/federation/pgp/48339A19645E2E53488E0E5479E1B270FACD1BD2.asc b/frontend/static/federation/pgp/48339A19645E2E53488E0E5479E1B270FACD1BD2.asc new file mode 100644 index 00000000..c4085155 --- /dev/null +++ b/frontend/static/federation/pgp/48339A19645E2E53488E0E5479E1B270FACD1BD2.asc @@ -0,0 +1,15 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: 4833 9A19 645E 2E53 488E 0E54 79E1 B270 FACD 1BD2 +Comment: hello@peachbitcoin.com + +xjMEYiOtWhYJKwYBBAHaRw8BAQdAsOKDD90QG9Fsr2TQomq1plxf0QGlQdL8OXCS +TTjE+vjNL2hlbGxvQHBlYWNoYml0Y29pbi5jb20gPGhlbGxvQHBlYWNoYml0Y29p +bi5jb20+wo8EEBYKACAFAmIjrVoGCwkHCAMCBBUICgIEFgIBAAIZAQIbAwIeAQAh +CRB54bJw+s0b0hYhBEgzmhlkXi5TSI4OVHnhsnD6zRvSDwIA/A2Z1td84Fos0L8Y +180evwOWDdbbI+8N0Y7GgkoU6iUqAQCgqMyBknoPYF9pvE2RLsYYjh52tWrV9mSI +zEMoH38JAc44BGIjrVoSCisGAQQBl1UBBQEBB0AMyWxwd2kF+8Kn5A6OuYCt8OQv +YbzwKJN3Jvnr4Z+ARgMBCAfCeAQYFggACQUCYiOtWgIbDAAhCRB54bJw+s0b0hYh +BEgzmhlkXi5TSI4OVHnhsnD6zRvSw7UBAIb3PAWG2iIXEapRxLVDkEuQ+RRVn/FU +rSwNRLsCJBsqAQDI9SNIkJuqT2RcP7qeQMj0tcZk9dBV+M48OL9XqPTEDA== +=HMiR +-----END PGP PUBLIC KEY BLOCK----- diff --git a/frontend/static/thirdparties.json b/frontend/static/thirdparties.json index e5aeaebf..3246431e 100644 --- a/frontend/static/thirdparties.json +++ b/frontend/static/thirdparties.json @@ -9,8 +9,22 @@ "email": null, "telegram": "https://t.me/p2plightning", "simplex": null, - "nostr": null, + "nostr": "https://njump.me/nprofile1qqs0es4q4yl3t7txceldxjrwkjfk6gdm88q5m6f68qff7683s8udrmqs874xa", "website": "https://lnp2pbot.com" } + }, + "peach": { + "longAlias": "Peach", + "federated": false, + "shortAlias": "peach", + "nostrHexPubkey": "a47457722e10ba3a271fbe7040259a3c4da2cf53bfd1e198138214d235064fc2", + "description": "The easiest way to buy & sell Bitcoin peer-to-peer.", + "contact": { + "email": "hello@peachbitcoin.com", + "telegram": "https://t.me/peachtopeach", + "simplex": null, + "nostr": "https://njump.me/nprofile1qqs2gazhwghppw36yu0muuzqykdrcndzeafml50pnqfcy9xjx5rylsss0wkz7", + "website": "https://peachbitcoin.com" + } } }