From 23e66ef8d46521e9e8887984864b9c1d6cfb3c46 Mon Sep 17 00:00:00 2001 From: koalasat Date: Sat, 15 Mar 2025 16:28:35 +0100 Subject: [PATCH 1/4] 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" + } } } From cc2b599747445484a9fd76f88ffb75a816bee9d5 Mon Sep 17 00:00:00 2001 From: koalasat Date: Sat, 15 Mar 2025 19:18:14 +0100 Subject: [PATCH 2/4] PGP access --- frontend/static/thirdparties.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/static/thirdparties.json b/frontend/static/thirdparties.json index 3246431e..989fe914 100644 --- a/frontend/static/thirdparties.json +++ b/frontend/static/thirdparties.json @@ -10,7 +10,9 @@ "telegram": "https://t.me/p2plightning", "simplex": null, "nostr": "https://njump.me/nprofile1qqs0es4q4yl3t7txceldxjrwkjfk6gdm88q5m6f68qff7683s8udrmqs874xa", - "website": "https://lnp2pbot.com" + "website": "https://lnp2pbot.com", + "pgp": null, + "fingerprint": null } }, "peach": { @@ -24,7 +26,9 @@ "telegram": "https://t.me/peachtopeach", "simplex": null, "nostr": "https://njump.me/nprofile1qqs2gazhwghppw36yu0muuzqykdrcndzeafml50pnqfcy9xjx5rylsss0wkz7", - "website": "https://peachbitcoin.com" + "website": "https://peachbitcoin.com", + "pgp": "/static/federation/pgp/48339A19645E2E53488E0E5479E1B270FACD1BD2.asc", + "fingerprint": "48339A19645E2E53488E0E5479E1B270FACD1BD2" } } } From d2fe16a9ad7630e83a491a1956062f31b6492fc5 Mon Sep 17 00:00:00 2001 From: koalasat Date: Thu, 8 May 2025 14:35:11 +0200 Subject: [PATCH 3/4] Include mostro --- frontend/src/services/RoboPool/index.ts | 8 +++----- .../static/federation/avatars/mostro.small.webp | Bin 0 -> 2882 bytes frontend/static/federation/avatars/mostro.webp | Bin 0 -> 8456 bytes frontend/static/thirdparties.json | 16 ++++++++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 frontend/static/federation/avatars/mostro.small.webp create mode 100644 frontend/static/federation/avatars/mostro.webp diff --git a/frontend/src/services/RoboPool/index.ts b/frontend/src/services/RoboPool/index.ts index ec605cb4..9c5c487f 100644 --- a/frontend/src/services/RoboPool/index.ts +++ b/frontend/src/services/RoboPool/index.ts @@ -136,11 +136,9 @@ class RoboPool { }; subscribeRatings = (events: RoboPoolEvents, coordinators?: string[]): void => { - const pubkeys = - coordinators ?? - [...Object.values(defaultFederation), ...Object.values(thirdParties)] - .map((f) => f.nostrHexPubkey) - .filter((item) => item !== undefined); + const pubkeys = Object.values(defaultFederation) + .map((f) => f.nostrHexPubkey) + .filter((item) => item !== undefined); const requestRatings = [ 'REQ', diff --git a/frontend/static/federation/avatars/mostro.small.webp b/frontend/static/federation/avatars/mostro.small.webp new file mode 100644 index 0000000000000000000000000000000000000000..2af353226973b4dfb76f3e081d0c5cf619ef6c18 GIT binary patch literal 2882 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 literal 0 HcmV?d00001 diff --git a/frontend/static/federation/avatars/mostro.webp b/frontend/static/federation/avatars/mostro.webp new file mode 100644 index 0000000000000000000000000000000000000000..f260ca8a2c02974885c2736b74284d28ffe42663 GIT binary patch literal 8456 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%0DZB}V-{M)#>zFNTAl zIl zTC%VDp`45xxn0e{C-Ca1(Kq{nXE!Nu$*@R0@u2_%lP0=skv^pTqFV)CoPgFqGo|As zL_s?b1O_;c1FzFZ(XYQ`apQ>a`RU{7c7Sr% Date: Fri, 9 May 2025 10:42:25 +0200 Subject: [PATCH 4/4] Add new relay --- api/nostr.py | 1 + docker/strfry/strfry.conf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/api/nostr.py b/api/nostr.py index ada3513b..54c9ceb4 100644 --- a/api/nostr.py +++ b/api/nostr.py @@ -27,6 +27,7 @@ class Nostr: # Add relays and connect await client.add_relay("ws://localhost:7777") + await client.add_relay("ws://localhost:7778") await client.connect() robot_name = await self.get_robot_name(order) diff --git a/docker/strfry/strfry.conf b/docker/strfry/strfry.conf index 01fb191a..05061fc6 100644 --- a/docker/strfry/strfry.conf +++ b/docker/strfry/strfry.conf @@ -44,7 +44,7 @@ relay { bind = "0.0.0.0" # Port to open for the nostr websocket protocol (restart required) - port = 7777 + port = 7778 # Set OS-limit on maximum number of open files/sockets (if 0, don't attempt to set) (restart required) nofiles = 1000000