导航栏

Home

  • wss://relay.damus.io
  • wss://nostr-pub.wellorder.net
  • wss://nostr.mom
  • wss://nostr.slothy.win
  • wss://relay.stoner.com
  • wss://nostr.einundzwanzig.space
  • wss://nos.lol
  • wss://relay.nostr.band
  • wss://no.str.cr
  • wss://nostr-relay.schnitzel.world
  • wss://relay.nostr.com.au
  • wss://knostr.neutrine.com
  • wss://nostr.nodeofsven.com
  • wss://nostr.vulpem.com
  • wss://nostr-verif.slothy.win
  • wss://relay.lexingtonbitcoin.org
  • wss://nostr-1.nbo.angani.co
  • wss://relay.wellorder.net
  • wss://nostr.easydns.ca
  • wss://relay.dwadziesciajeden.pl
  • wss://relay.orangepill.dev
  • wss://e.nos.lol
  • wss://ragnar-relay.com
  • wss://nostr.data.haus
  • wss://nostr.wine
  • wss://nostr.koning-degraaf.nl
  • wss://nostr.thank.eu
  • wss://relay.hamnet.io
  • wss://nostr.sidnlabs.nl
  • wss://nostr.inosta.cc
  • wss://nostr21.com
  • wss://nostr.ch3n2k.com
  • wss://relay.nostrview.com
  • wss://relay.nostromo.social
  • wss://offchain.pub
  • wss://relay.nostr.wirednet.jp
  • wss://nostr.l00p.org
  • wss://lightningrelay.com
  • wss://bitcoinmaximalists.online
  • wss://private.red.gb.net
  • wss://relay.nostrid.com
  • wss://relay.nostrcheck.me
  • wss://nostrelay.yeghro.site
  • wss://nostrue.com
  • wss://nostr.topeth.info
  • wss://nostr.bitcoiner.social
  • wss://nostr.spaceshell.xyz
  • wss://nostr.roundrockbitcoiners.com
  • wss://relay.nostrology.org
  • wss://nostr-dev.wellorder.net
  • wss://relay.snort.social
  • wss://nr.yay.so
  • wss://nostr.lu.ke
  • wss://atlas.nostr.land
  • wss://nostr.pjv.me
  • wss://brb.io
  • wss://eden.nostr.land
  • wss://nostr-verified.wellorder.net
  • wss://nostr.noones.com
  • wss://relay.nostr.nu
  • wss://nostr-relay.bitcoin.ninja
  • wss://paid.no.str.cr
  • wss://freespeech.casa
  • wss://bitcoiner.social
  • wss://nostr.1f52b.xyz
  • wss://nostr.sebastix.dev
  • wss://nostr.cizmar.net
  • wss://n.wingu.se
  • wss://nostr.bitcoinplebs.de
  • wss://nostr.corebreach.com
  • wss://nostr.tools.global.id
  • wss://xmr.usenostr.org
  • wss://at.nostrworks.com
  • wss://nostr.sovbit.host
  • wss://nostr.1sat.org
  • wss://mastodon.cloud/api/v1/streaming
  • wss://nostr.256k1.dev
  • wss://relay.beta.fogtype.com
  • wss://rsslay.ch3n2k.com
  • wss://relay.nostr.bg
  • wss://nostr.primz.org
  • wss://relay.johnnyasantos.com
  • wss://btc.klendazu.com
  • wss://slick.mjex.me
  • wss://nostr.yael.at
  • wss://nostr.lorentz.is
  • wss://relay.nostrified.org
  • wss://nostr.orangepill.dev
  • wss://relay.primal.net
  • wss://nostr.cercatrova.me
  • wss://nostr.swiss-enigma.ch
  • wss://nostr-relay.derekross.me
  • wss://puravida.nostr.land
  • wss://nostr.sectiontwo.org
  • wss://nostr.oxtr.dev
  • wss://relay.s3x.social
  • wss://relay.ryzizub.com
  • wss://nostr.liberty.fans
  • wss://nostr.frostr.xyz
  • wss://nostr.ginuerzh.xyz
  • wss://nostr.d11n.net
  • wss://nostr.semisol.dev
  • wss://misskey.io
  • wss://nostr.namek.link
  • wss://nostr.gruntwerk.org
  • wss://relay.nostr.wf
  • wss://nostr.land
  • wss://relay.mostr.pub
  • wss://relay.nostrplebs.com
  • wss://purplepag.es
  • wss://yestr.me
  • wss://relay.nostr.ai
  • wss://paid.nostrified.org
  • wss://nostr-02.dorafactory.org
  • wss://nostr.zbd.gg
  • wss://relay.hodl.ar
  • wss://relay.nostr.sc
  • wss://feeds.nostr.band/nostrhispano
  • wss://nostr.middling.mydns.jp
  • wss://nostr.portemonero.com
  • wss://search.nos.today
  • wss://relay.minds.com/nostr/v1/ws
  • wss://welcome.nostr.wine
  • wss://yabu.me
  • wss://nrelay.c-stellar.net
  • wss://nostrja-kari.heguro.com
  • wss://nostr-relay.app
  • wss://rly.nostrkid.com
  • wss://nostr.filmweb.pl
  • wss://relay.utxo.one
  • wss://nostr.strits.dk
  • wss://relay.poster.place
  • wss://nostr.mining.sc
  • wss://nostr.xmr.rocks
  • wss://ithurtswhenip.ee
  • wss://powrelay.xyz
  • wss://relay.vanderwarker.family
  • wss://wc1.current.ninja
  • wss://nostr.ingwie.me
  • wss://nostr.gleeze.com
  • wss://relay.nostrify.io
  • wss://relay2.nostrchat.io
  • wss://relay1.nostrchat.io
  • wss://relay.devstr.org
  • wss://relay.nostr.hu
  • wss://nostr.hifish.org
  • wss://nostr2.sanhauf.com
  • wss://nostrja-kari-nip50.heguro.com
  • wss://nostr.rikmeijer.nl
  • wss://nostrua.com
  • wss://relay.nsecbunker.com
  • wss://nostr.hekster.org
  • wss://nostr.schorsch.fans
  • wss://nostr.reelnetwork.eu
  • wss://nostr.hexhex.online
  • wss://relay.wavlake.com
  • wss://relay.nostr.lighting
  • wss://nostr.sagaciousd.com
  • wss://nostr.fbxl.net
  • wss://multiplextr.coracle.social
  • wss://nostril.cam
  • wss://nostr.btc-library.com
  • wss://relay.getalby.com/v1
  • wss://rss.nos.social
  • wss://nostr.overmind.lol
  • wss://relay.nostrcn.com
  • wss://nostr-01.yakihonne.com
  • wss://nostr.fort-btc.club
  • wss://relay.bitcoinpark.com
  • wss://nostr01.counterclockwise.io
  • wss://relap.orzv.workers.dev
  • wss://christpill.nostr1.com
  • wss://relay.verified-nostr.com
  • wss://nostr.sathoarder.com
  • wss://wbc.nostr1.com
  • wss://nostr.is-defs.fun
  • wss://nostr.heliodex.cf
  • wss://nostr.4liberty.one
  • wss://f7z.io
  • wss://relay.casualcrypto.date
  • wss://relay.notmandatory.org
  • wss://fiatjaf.com
  • wss://relay.despera.space
  • wss://bitstack.app
  • wss://nostr-relay.psfoundation.info
  • wss://purplerelay.com
  • wss://relay.orangepill.ovh
  • wss://nostr.rubberdoll.cc
  • wss://relay.ingwie.me
  • wss://soloco.nl
  • wss://nostr.dlsouza.lol
  • wss://relay.kamp.site
  • wss://nostr.heavyrubberslave.com
  • wss://relay.keychat.io
  • wss://relay.froth.zone
  • wss://nostr.bitcoinist.org
  • wss://nostr.cloud.vinney.xyz
  • wss://relay.momostr.pink
  • wss://nosdrive.app/relay
  • wss://nostrrelay.win
  • wss://nostr.8777.ch
  • wss://unhostedwallet.com
  • wss://21ideas.nostr1.com
  • wss://nostr.stakey.net
  • wss://nostr.sats.li
  • wss://relay.guggero.org
  • wss://relay.noswhere.com
  • wss://unostr.site
  • wss://pyramid.fiatjaf.com
  • wss://frens.nostr1.com
  • wss://creatr.nostr.wine
  • wss://140.f7z.io
  • wss://a.nos.lol
  • wss://directory.yabu.me
  • wss://hist.nostr.land
  • wss://nostr.dodge.me.uk
  • wss://privateisland.club
  • wss://relay.weloveit.info
  • wss://relay.magiccity.live
  • wss://nostr.notribe.net
  • wss://relay.westernbtc.com
  • wss://relay.siamstr.com
  • wss://groups.0xchat.com
  • wss://theforest.nostr1.com
  • wss://problematic.network
  • wss://us.purplerelay.com
  • wss://nostr1.daedaluslabs.io
  • wss://relay.noderunners.network
  • wss://relay.azzamo.net
  • wss://bevo.nostr1.com
  • wss://freelay.sovbit.host
  • wss://relay.sebdev.io
  • wss://inbox.nostr.wine
  • wss://ditto.puhcho.me/relay
  • wss://nostr.t-rg.ws
  • wss://multiplexer.huszonegy.world
  • wss://nostr.huszonegy.world
  • wss://nostr.jcloud.es
  • wss://nostr.thurk.org
  • wss://dev-relay.kube.b-n.space
  • wss://relay.nos.social
  • wss://ditto.slothy.win/relay
  • wss://nostr.hashi.sbs
  • wss://paid.relay.vanderwarker.family
  • wss://nostr.javi.space
  • wss://gleasonator.dev/relay
  • wss://bucket.coracle.social
  • wss://relay.nsec.app
  • wss://relay.sepiropht.me
  • wss://nostr.kungfu-g.rip
  • wss://hotrightnow.nostr1.com
  • wss://relay.artx.market
  • wss://nfrelay.app
  • wss://relay.notoshi.win
  • wss://relay.highlighter.com
  • wss://relay.geyser.fund
  • wss://relay.minibits.cash
  • wss://nostr.petrkr.net/strfry
  • wss://n.ok0.org
  • wss://greensoul.space
  • wss://nostr-02.yakihonne.com
  • wss://nostr-03.dorafactory.org
  • wss://vitor.nostr1.com
  • wss://relay.lax1dude.net
  • wss://relay.zhoushen929.com
  • wss://relay.oke.minds.io/nostr/v1/ws
  • wss://strfry.corebreach.com
  • wss://relay.bitdevs.tw
  • wss://nostr.btczh.tw
  • wss://nostrich.adagio.tw
  • wss://nostr.zoel.network
  • wss://nostr.lifeonbtc.xyz
  • wss://nostr.se7enz.com
  • wss://thecitadel.nostr1.com
  • wss://mleku.nostr1.com
  • wss://nostr2.daedaluslabs.io
  • wss://fiatjaf.nostr1.com
  • wss://nostr.daedaluslabs.io
  • wss://xmr.ithurtswhenip.ee
  • wss://cellar.nostr.wine
  • wss://rkgk.moe
  • wss://nostr.self-determined.de
  • wss://nostr.gerbils.online
  • wss://jingle.carlos-cdb.top
  • wss://carlos-cdb.top
  • wss://bostr.online
  • wss://relays.diggoo.com
  • wss://jp.purplerelay.com
  • wss://ir.purplerelay.com
  • wss://me.purplerelay.com
  • wss://nostr.0x7e.xyz
  • wss://nostr.reckless.dev
  • wss://relay.nostr.net
  • wss://relay.fountain.fm
  • wss://v1250.planz.io/nostr
  • wss://relay.13room.space
  • wss://relay.usefusion.ai
  • wss://ae.purplerelay.com
  • wss://njump.me
  • wss://au.purplerelay.com
  • wss://in.purplerelay.com
  • wss://nosflare.plebes.fans
  • wss://nostr.at
  • wss://bostr.bitcointxoko.com
  • wss://nostria.space
  • wss://nostr.searx.is
  • wss://test.nfrelay.app
  • wss://relay.fanfares.io
  • wss://relay.varke.eu
  • wss://relay.nostr.jabber.ch
  • wss://relay.nostpy.lol
  • wss://relay.camelus.app
  • wss://nostr.myshosholoza.co.za
  • wss://nostr.ussenterprise.xyz
  • wss://nostr.dbtc.link
  • wss://ftp.halifax.rwth-aachen.de/nostr
  • wss://tw.purplerelay.com
  • wss://eu.purplerelay.com
  • wss://relay.benthecarman.com
  • wss://fabian.nostr1.com
  • wss://staging.yabu.me
  • wss://nostr.dmgd.monster
  • wss://testnet.plebnet.dev/nostrrelay/1
  • wss://hivetalk.nostr1.com
  • wss://relay.lawallet.ar
  • wss://relay.piazza.today
  • wss://relay.pleb.to
  • wss://orangepiller.org
  • wss://nostr.lopp.social
  • wss://ch.purplerelay.com
  • wss://loli.church
  • wss://adre.su
  • wss://misskey.04.si
  • wss://cache2.primal.net/v1
  • wss://relay.sincensura.org
  • wss://relay.moinsen.com
  • wss://relay.freeplace.nl
  • wss://cache1.primal.net/v1
  • wss://nostr.openordex.org
  • wss://rly.bopln.com
  • wss://relay.0v0.social
  • wss://nostr.psychoet.nexus
  • wss://relay.nostrr.de
  • wss://us.nostr.land
  • wss://srtrelay.c-stellar.net
  • wss://lnbits.papersats.io/nostrclient/api/v1/relay
  • wss://strfry.chatbett.de
  • wss://relay.nquiz.io
  • wss://nostr.plantroon.com
  • wss://nostr.jfischer.org
  • wss://relay.corpum.com
  • wss://relay.bostr.online
  • wss://lunchbox.sandwich.farm
  • wss://nr.rosano.ca
  • wss://nostr.happytavern.co
  • wss://novoa.nagoya
  • wss://misskey.takehi.to
  • wss://relay.satoshidnc.com
  • wss://nostr.novacisko.cz
  • wss://nsrelay.assilvestrar.club
  • wss://nostr.atitlan.io
  • wss://relay.livefreebtc.dev
  • wss://nostr.tavux.tech
  • wss://nostr.girino.org
  • wss://merrcurrup.railway.app
  • wss://nostr-dev.zbd.gg
  • wss://submarin.online
  • wss://social.camph.net
  • wss://relay.nostrich.cc
  • wss://relay.lumina.rocks
  • wss://profiles.nostr1.com
  • wss://rebelbase.social/relay
  • wss://support.nostr1.com
  • wss://relay.dev.bdw.to
  • wss://ca.purplerelay.com
  • wss://nostr.bitcoinvn.io
  • wss://auth.nostr1.com
  • wss://custom.fiatjaf.com
  • wss://hub.nostr-relay.app
  • wss://nostr.babyshark.win
  • wss://echo.websocket.org
  • wss://nostr.kosmos.org
  • wss://polnostr.xyz
  • wss://relay.refinery.coracle.tools
  • wss://user.kindpag.es
  • wss://nostr.hashbang.nl
  • wss://czas.live
  • wss://chorus.pjv.me
  • wss://relay.agorist.space
  • wss://bostr.cx.ms
  • wss://relay.nostrhub.fr
  • wss://groups.fiatjaf.com
  • wss://hodlbod.coracle.tools
  • wss://hk.purplerelay.com
  • wss://lnbits.satoshibox.io/nostrclient/api/v1/relay
  • wss://relay.cosmicbolt.net
  • wss://nostr.drafted.pro
  • wss://nostr.a2x.pub
  • wss://bostr.lightningspore.com
  • wss://nostr.intrepid18.com
  • wss://de.purplerelay.com
  • wss://obiurgator.thewhall.com
  • wss://nostr.madco.me
  • wss://relay.braydon.com
  • wss://nostr-relay.algotech.io
  • wss://relay.unknown.cloud
  • wss://relay.gems.xyz
  • wss://longhorn.bgp.rodeo
  • wss://notes.miguelalmodo.com
  • wss://onlynotes.lol
  • wss://relay.tagayasu.xyz
  • wss://relay.zone667.com
  • wss://nostr-relay.sn-media.com
  • wss://relay.mostro.network
  • wss://nostr.polyserv.xyz
  • wss://n3r.xyz
  • wss://relay5.bitransfer.org
  • wss://brisceaux.com
  • wss://nostr.faust.duckdns.org
  • wss://satellite.hzrd149.com
  • wss://gnost.faust.duckdns.org
  • wss://relay.jerseyplebs.com
  • wss://nostr.cxplay.org
  • wss://nostr.polonkai.eu
  • wss://libretechsystems.nostr1.com
  • wss://nostr.pailakapo.com
  • wss://relay.alex71btc.com
  • wss://cfrelay.puhcho.workers.dev
  • wss://kiwibuilders.nostr21.net
  • wss://nostr3.daedaluslabs.io
  • wss://relay1.xfire.to:
  • wss://nostr.brackrat.com
  • wss://relay.satlantis.io
  • wss://relay.test.nquiz.io
  • wss://relay.illuminodes.com
  • wss://relay.arrakis.lat
  • wss://cfrelay.haorendashu.workers.dev
  • wss://core.btcmap.org/nostrrelay/relay
  • wss://junxingwang.org
  • wss://relay2.angor.io
  • wss://relaypag.es
  • wss://nostr.skitso.business
  • wss://history.nostr.watch
  • wss://relay.oh-happy-day.xyz
  • wss://invillage-outvillage.com
  • wss://nostr-relay.cbrx.io
  • wss://tigs.nostr1.com
  • wss://misskey.design
  • wss://relay.nostrainsley.coracle.tools
  • wss://relay.cxplay.org
  • wss://relay.angor.io
  • wss://nostr.tbai.me:592
  • wss://strfry.iris.to
  • wss://orangesync.tech
  • wss://nostr.chaima.info
  • wss://relay.minibolt.info
  • wss://jingle.nostrver.se
  • wss://kr.purplerelay.com
  • wss://fl.purplerelay.com
  • wss://relay.chontit.win
  • wss://nostr.bilthon.dev
  • wss://relay.vengeful.eu
  • wss://dtonon.nostr1.com
  • wss://relay.gasteazi.net
  • wss://us.nostr.wine
  • wss://frjosh.nostr1.com
  • wss://relay.staging.geyser.fund
  • wss://nostr.yuhr.org
  • wss://relay.mattybs.lol
  • wss://sushi.ski
  • wss://relay.unsupervised.online
  • wss://nostr.bit4use.com
  • wss://prl.plus
  • wss://news.nos.social
  • wss://airchat.nostr1.com
  • wss://nortis.nostr1.com
  • wss://adeptus.cwharton.com
  • wss://relay.mycelium.social
  • wss://node.coincreek.com/nostrclient/api/v1/relay
  • wss://nostr2.girino.org
  • wss://relay.s-w.art
  • wss://nerostr.girino.org
  • wss://uk.purplerelay.com
  • wss://bostr.erechorse.com
  • wss://eostagram.com
  • wss://relay.coinos.io
  • wss://sendit.nosflare.com
  • wss://relay.nostraddress.com
  • wss://nostrelites.org
  • wss://wot.nostr.party
  • wss://wot.utxo.one
  • wss://haven.cyberhornet.net
  • wss://relay.customkeys.de
  • wss://relay.groups.nip29.com
  • wss://relay29.notoshi.win
  • wss://nostr.2h2o.io
  • wss://relay.nostriot.com
  • wss://relay.lem0n.cc
  • wss://relay.b1t.beer
  • wss://rocky.nostr1.com
  • wss://wot.sovbit.host
  • wss://relay.sovereign.app
  • wss://zap.watch
  • wss://zorrelay.libretechsystems.xyz
  • wss://sorrelay.libretechsystems.xyz
  • wss://mailbox.mw.leastauthority.com/v1
  • wss://memrelay.girino.org
  • wss://relay.lnfi.network
  • wss://wot.girino.org
  • wss://labour.fiatjaf.com
  • wss://wot.codingarena.top
  • wss://relay.nostrdice.com
  • wss://nostr.azzamo.net
  • wss://wot.azzamo.net
  • wss://wot.nostr.sats4.life
  • wss://wot.nostr.net
  • wss://api.freefrom.space/v1/ws
  • wss://wheat.happytavern.co
  • wss://chorus.bonsai.com
  • wss://strfry.bonsai.com
  • wss://wot.sebastix.social
  • wss://inner.sebastix.social
  • wss://haven.accioly.social
  • wss://relay.notestack.com
  • wss://relay.sigit.io
  • wss://satsage.xyz
  • wss://nostr.noderunners.network
  • wss://chronicle.puhcho.me
  • wss://haven.puhcho.me
  • wss://haven.calva.dev/inbox
  • wss://dergigi.nostr1.com
  • wss://wons.calva.dev
  • wss://thebarn.nostr1.com
  • wss://nostr.grooveix.com
  • wss://relay.rodbishop.nz/inbox
  • wss://travis-shears-nostr-relay-v2.fly.dev
  • wss://nostr.sprovoost.nl
  • wss://nostr.x0f.org
  • wss://bostr.syobon.net
  • wss://art.nostrfreaks.com
  • wss://cobrafuma.com/relay
  • wss://alru07.nostr1.com
  • wss://relay.nostrfreedom.net/outbox
  • wss://aplaceinthesun.nostr1.com
  • wss://relay.flirtingwithbitcoin.com
  • wss://plebone.nostr1.com
  • wss://cfrelay.snowcait.workers.dev
  • wss://thewritingdesk.nostr1.com
  • wss://relay.botev.sv
  • wss://relay.degmods.com
  • wss://seth.nostr1.com
  • wss://untreu.me
  • wss://agentorange.nostr1.com
  • wss://reimagine.nostr1.com
  • wss://nostr.takasaki.dev
  • wss://nostr.coincrowd.fund
  • wss://bnc.netsec.vip
  • wss://nostr.community.ath.cx
  • wss://nostr.cltrrd.us
  • wss://relay.xeble.me
  • wss://no.netsec.vip
  • wss://strfry.shock.network
  • wss://relay.8333.space
  • wss://relay02.lnfi.network
  • wss://relay.lightning.gdn
  • wss://nostr.cypherpunk.today
  • wss://relay.nostrfreaks.com
  • wss://relay.shuymn.me
  • wss://haven.eternal.gdn
  • wss://cyberspace.nostr1.com
  • wss://nostr-rs-relay.dev.fedibtc.com
  • wss://relay.das.casa
  • wss://ursin.nostr1.com
  • wss://monitorlizard.nostr1.com
  • wss://wot.shaving.kiwi
  • wss://relay.cyphernomad.com
  • wss://nostr.extrabits.io
  • wss://relay.jellyfish.land
  • wss://wot.tealeaf.dev
  • wss://chorus.tealeaf.dev
  • wss://haven.tealeaf.dev/inbox
  • wss://h.codingarena.top/inbox
  • wss://relay.goodmorningbitcoin.com
  • wss://wot.zacoos.com
  • wss://relay.shawnyeager.com/chat
  • wss://proxy0.siamstr.com
  • wss://articles.layer3.news
  • wss://relay.hs.vc
  • wss://chronicle.dtonon.com
  • wss://wot.dtonon.com
  • wss://relay.stens.dev
  • wss://social.protest.net/relay
  • wss://relay.patrickulrich.com/inbox
  • wss://relay.davidebtc.me
  • wss://relay.dev.ntech.it
  • wss://chronicle.dev.ntech.it
  • wss://nostr.bitpunk.fm
  • wss://lnvoltz.com/nostrrelay/n49jzjytb
  • wss://ghost.dolu.dev
  • wss://thebarn.nostrfreaks.com
  • wss://niel.nostr1.com
  • wss://adoringcardinal1.lnbits.com/nostrrelay/test-relay
  • wss://nostr.thebiglake.org
  • wss://wot.relay.vanderwarker.family
  • wss://haven.girino.org
  • wss://pow.hzrd149.com
  • wss://nostr-news.nostr1.com
  • wss://thewildhustle.nostr1.com
  • wss://nostr.sats.coffee
  • wss://dikaios1517.nostr1.com
  • wss://nostr4.daedaluslabs.io
  • wss://relay.calders.us
  • wss://nostr.mikoshi.de
  • wss://relay.nuts.cash
  • wss://brightlights.nostr1.com
  • wss://darknights.nostr1.com
  • wss://relay.chrisatmachine.com
  • wss://nostr.agentcampfire.com
  • wss://nostr.me/relay
  • wss://relay.nostr.watch
  • wss://dwebcamp.nos.social
  • wss://nostr.1312.media
  • wss://nostr.phauna.org
  • wss://henhouse.social/relay
  • wss://nostr.neilalexander.dev
  • wss://nip13.girino.org
  • wss://tijl.xyz
  • wss://relay.rengel.org
  • wss://relay.stewlab.win
  • wss://relay.badgr.digital
  • wss://relay.crbl.io
  • wss://rl.baud.one
  • wss://relay.axeldolce.xyz
  • wss://nip85.nostr.band
  • wss://antisocial.nostr1.com
  • wss://relay.isphere.lol
  • wss://cl4.tnix.dev
  • wss://nostr.dl3.dedyn.io
  • wss://nostr.camalolo.com
  • wss://hayloo.nostr1.com
  • wss://nostr.schneimi.de
  • wss://wostr.hexhex.online
  • wss://pareto.nostr1.com
  • wss://nostr.pareto.space
  • wss://relay.utih.net
  • wss://relay.lifpay.me
  • wss://david.nostr1.com
  • wss://haven.ciori.net
  • wss://bonifatius.nostr1.com
  • wss://pay.thefockinfury.wtf/nostrrelay/1
  • wss://relay.xplbzx.uk
  • wss://nostr.tac.lol
  • wss://btcpay2.nisaba.solutions/nostr
  • wss://relay.bitcoinschool.nl
  • wss://dev-relay.lnfi.network
  • wss://relay.netstr.io
  • wss://freespeech.social/relay
  • wss://straylight.cafe/relay
  • wss://nostr-relay01.redscrypt.org:48443
  • wss://relay.devvul.com
  • wss://relay.bitcoinveneto.org
  • wss://relay.shop21.dk
  • wss://nostr.mtrj.cz
  • wss://relay.jthecodemonkey.xyz
  • wss://devapi.freefrom.space/v1/ws
  • wss://aaa-api.freefrom.space/v1/ws
  • wss://nostr.rosenbaum.se
  • wss://fido-news.z7.ai
  • wss://stratum.libretechsystems.xyz
  • wss://tamby.mjex.me
  • wss://nostr.cottongin.xyz
  • wss://wot.eminence.gdn
  • wss://hi.myvoiceourstory.org
  • wss://nostr.red5d.dev
  • wss://relay-testnet.k8s.layer3.news
  • wss://nostr.pistaum.com
  • wss://relay-nwc.rizful.com/v1
  • wss://nostrum.satoshinakamoto.win
  • wss://eupo43gj24.execute-api.us-east-1.amazonaws.com/test
  • wss://backup.keychat.io
  • wss://relay.openbalance.app
  • wss://nostr.jonmartins.com
  • wss://social.proxymana.net
  • wss://nostr-pr02.redscrypt.org
  • wss://nostr-pr03.redscrypt.org
  • wss://nostrelay.memory-art.xyz
  • wss://promenade.fiatjaf.com
  • wss://inbox.azzamo.net
  • wss://premium.primal.net
  • wss://nostr.timegate.co
  • wss://team-relay.pareto.space
  • wss://relay.dariccoin.me
  • wss://relay.dannymorabito.com/inbox
  • wss://nostr.lojong.info
  • wss://relay.transtoad.com
  • wss://cfrelay.royalgarter.workers.dev
  • wss://nostr-rs-relay-ishosta.phamthanh.me
  • wss://nostr.rblb.it:7777
  • wss://fiatrevelation.nostr1.com
  • wss://sources.nostr1.com
  • wss://nostr-pr04.redscrypt.org
  • wss://relay.nostronautti.fi
  • wss://moonboi.nostrfreaks.com
  • wss://mats-techno-gnome-ca.trycloudflare.com
  • wss://nostr.d3id.xyz/relay
  • wss://nostr.holbrook.no
  • wss://logen.btcforplebs.com
  • wss://relay.nostrtalk.org
  • wss://community.proxymana.net
  • wss://misskey.gothloli.club
  • wss://mleku.realy.lol
  • wss://relay.maiqr.app
  • wss://relay.tv-base.com
  • wss://relay.rkus.se
  • wss://relay.snotr.nl:49999
  • wss://relay.brightbolt.net/inbox
  • wss://magic.nostr1.com
  • wss://null.spdns.eu
  • wss://nostr.itdestro.cc
  • wss://nostrrelay.taylorperron.com
  • wss://nostr.tegila.com.br
  • wss://stage.mosavi.xyz/v1/ws
  • wss://eclipse.pub/relay
  • wss://relay.asthroughfire.com
  • wss://relay.nostrarabia.com
  • wss://news.utxo.one
  • wss://relay.stream.labs.h3.se
  • wss://mls.akdeniz.edu.tr/nostr
  • wss://asia.azzamo.net
  • wss://tollbooth.stens.dev
  • wss://nostrelay.yeghro.com
  • wss://nostrich.zonemix.tech
  • wss://relay.chakany.systems
  • wss://45.135.180.104
  • wss://relay.mwaters.net
  • wss://kitchen.zap.cooking
  • wss://basedpotato.nostr1.com
  • wss://nostr1.jpegslangah.com
  • wss://primus.nostr1.com
  • wss://wot.mwaters.net
  • wss://prod.mosavi.io/v1/ws
  • wss://bots.utxo.one
  • wss://nostr.caramboo.com
  • wss://9yo.punipoka.pink
  • wss://nostr.trepechov.com
  • wss://stg.nostpy.lol
  • wss://nostr.ovia.to
  • wss://riley.timegate.co
  • wss://willow.timegate.co
  • wss://relay.olas.app
  • wss://social.olsentribe.fyi
  • wss://relay.arx-ccn.com
  • wss://zaplab.nostr1.com
  • wss://hax.reliefcloud.com
  • wss://nostrrelay.blocktree.cc
  • wss://hole.v0l.io
  • wss://nostr.phuture.sk
  • wss://cc3d.nostr1.com
  • wss://coop.nostr1.com
  • wss://synalysis.nostr1.com
  • wss://nostr.luisschwab.net
  • wss://relay.fr13nd5.com
  • wss://relay.nostrfy.io
  • wss://relay.vaporware.network
  • wss://relay.mzm.app
  • wss://nostr.felixzieger.de
  • wss://nostr.spicyz.io
  • wss://relay.pre-alfa.iz-collaborator.com
  • wss://bunker.vanderwarker.family
  • wss://ltgnetwork.nostr1.com
  • wss://relay.bullishbounty.com
  • wss://dev.coracle.tools
  • wss://relay04.lnfi.network
  • wss://jellyfish.land
  • wss://relay03.lnfi.network
  • wss://rtson.onrender.com
  • wss://nostr.1sat.store
  • wss://v2.fly.dev
  • wss://communities.nos.social
  • wss://vidono.apps.slidestr.net
  • wss://nostrboss.com
  • wss://aegis.utxo.one
  • wss://data.relay.vanderwarker.family
  • wss://relay.marc26z.com
  • wss://relay-dev.netstr.io
  • wss://relay.danieldaquino.me
  • wss://aegis.relayted.de
  • wss://relay.nostrverified.fyi
  • wss://n.posto.us.kg
  • wss://relay.hook.cafe
  • wss://aegis.relaynostr.xyz
  • wss://nostrapps.com
  • wss://nostr.douglascruz.com.br
  • wss://wot.relayted.de
  • wss://inbox.mycelium.social
  • wss://relay.d11n.net
  • wss://haven.relayted.de
  • wss://free.relayted.de
  • wss://relay.zapstore.dev
  • wss://chat.mihhdu.org
  • wss://bridge.duozhutuan.com
  • wss://relay.evanverma.com
  • wss://relay.nostrdvm.com
  • wss://nostr.joomaen.top
  • wss://nostr.235421.xyz
  • wss://nostr.bitcoinsult.de
  • wss://nostrelay.circum.space
  • wss://relay1.plor.dev
  • wss://relayrs.notoshi.win
  • wss://fenrir-s.notoshi.win
  • wss://bostr.azzamo.net
  • wss://nos.zct-mrl.com
  • wss://skeme.vanderwarker.family
  • @ Doop
    2024-07-22 22:13:19

    ```js import React, { useState, useEffect } from "react"; import axios from "axios"; import { InputText } from "primereact/inputtext"; import { InputNumber } from "primereact/inputnumber"; import { InputSwitch } from "primereact/inputswitch"; import { Button } from "primereact/button"; import { Dropdown } from "primereact/dropdown"; import { v4 as uuidv4, v4 } from 'uuid'; import { useLocalStorageWithEffect } from "@/hooks/useLocalStorage"; import { useNostr } from "@/hooks/useNostr"; import { useRouter } from "next/router"; import { useToast } from "@/hooks/useToast"; import { nip19 } from "nostr-tools" import { parseEvent } from "@/utils/nostr"; import ContentDropdownItem from "@/components/content/dropdowns/ContentDropdownItem"; import 'primeicons/primeicons.css';

    const CourseForm = () => { const [title, setTitle] = useState(''); const [summary, setSummary] = useState(''); const [checked, setChecked] = useState(false); const [price, setPrice] = useState(0); const [coverImage, setCoverImage] = useState(''); const [lessons, setLessons] = useState([{ id: uuidv4(), title: 'Select a lesson' }]); const [selectedLessons, setSelectedLessons] = useState([]); const [topics, setTopics] = useState(['']); const [user, setUser] = useLocalStorageWithEffect('user', {}); const [drafts, setDrafts] = useState([]); const [resources, setResources] = useState([]); const [workshops, setWorkshops] = useState([]); const { fetchResources, fetchWorkshops, publish, fetchSingleEvent } = useNostr(); const [pubkey, setPubkey] = useState('');

    const router = useRouter();
    const { showToast } = useToast();
    
    const fetchAllContent = async () => {
        try {
            // Fetch drafts from the database
            const draftsResponse = await axios.get(`/api/drafts/all/${user.id}`);
            const drafts = draftsResponse.data;
    
            // Fetch resources and workshops from Nostr
            const resources = await fetchResources();
            const workshops = await fetchWorkshops();
    
            if (drafts.length > 0) {
                setDrafts(drafts);
            }
            if (resources.length > 0) {
                console.log('resources:', resources);
                setResources(resources);
            }
            if (workshops.length > 0) {
                setWorkshops(workshops);
            }
        } catch (err) {
            console.error(err);
            // Handle error
        }
    };
    
    useEffect(() => {
        if (user && user.id) {
            fetchAllContent();
        }
    }, [user]);
    
    /**
    
    • Course Creation Flow:
      1. Generate a new course ID
      1. Process each lesson:
      • If unpublished: create event, publish to Nostr, save to DB, delete draft
      • If published: use existing data
      1. Create and publish course event to Nostr
      1. Save course to database
      1. Show success message and redirect to course page */

      const handleSubmit = async (e) => { e.preventDefault();

      const newCourseId = uuidv4();
      const processedLessons = [];
      
      try {
          // Step 1: Process lessons
          console.log('selectedLessons:', selectedLessons);
          for (const lesson of selectedLessons) {
              let noteId = lesson.noteId;
      
              if (!lesson.published_at) {
                  // Publish unpublished lesson
                  const event = createLessonEvent(lesson);
                  const signedEvent = await window.nostr.signEvent(event);
                  const published = await publish(signedEvent);
      
                  if (!published) {
                      throw new Error(`Failed to publish lesson: ${lesson.title}`);
                  }
      
                  noteId = signedEvent.id;
      
                  // Save to db and delete draft
                  await Promise.all([
                      axios.post('/api/resources', {
                          id: lesson.id,
                          noteId: noteId,
                          userId: user.id,
                          price: lesson.price || 0,
                      }),
                      axios.delete(`/api/drafts/${lesson.id}`)
                  ]);
      
              }
      
              processedLessons.push({ id: lesson?.d || lesson.id });
          }
      
          // Step 2: Create and publish course
          const courseEvent = createCourseEvent(newCourseId, title, summary, coverImage, selectedLessons);
          const signedCourseEvent = await window.nostr.signEvent(courseEvent);
          const published = await publish(signedCourseEvent);
      
          if (!published) {
              throw new Error('Failed to publish course');
          }
      
          // Step 3: Save course to db
          console.log('processedLessons:', processedLessons);
          await axios.post('/api/courses', {
              id: newCourseId,
              resources: {
                  connect: processedLessons.map(lesson => ({ id: lesson?.id }))
              },
              noteId: signedCourseEvent.id,
              user: {
                  connect: { id: user.id }
              },
              price: price || 0
          });
      
          // Step 4: Show success message and redirect
          showToast('success', 'Course created successfully');
          router.push(`/course/${signedCourseEvent.id}`);
      
      } catch (error) {
          console.error('Error creating course:', error);
          showToast('error', error.message || 'Failed to create course. Please try again.');
      }
      

      };

      const createLessonEvent = (lesson) => ({ kind: lesson.price ? 30402 : 30023, content: lesson.content, created_at: Math.floor(Date.now() / 1000), tags: [ ['d', lesson.id], ['title', lesson.title], ['summary', lesson.summary], ['image', lesson.image], ...lesson.topics.map(topic => ['t', topic]), ['published_at', Math.floor(Date.now() / 1000).toString()], ...(lesson.price ? [ ['price', lesson.price], ['location', https://plebdevs.com/${lesson.topics[1]}/${lesson.id}] ] : []) ] });

      const createCourseEvent = (courseId, title, summary, coverImage, lessons) => ({ kind: 30004, created_at: Math.floor(Date.now() / 1000), content: "", tags: [ ['d', courseId], ['name', title], ['picture', coverImage], ['image', coverImage], ['description', summary], ['l', "Education"], ...lessons.map((lesson) => ['a', ${lesson.kind}:${lesson.pubkey}:${lesson.d}]), ], });

      const handleLessonChange = (e, index) => { const selectedLessonId = e.value; const selectedLesson = getContentOptions(index).flatMap(group => group.items).find(lesson => lesson.value === selectedLessonId);

      const updatedLessons = lessons.map((lesson, i) =>
          i === index ? { ...lesson, id: selectedLessonId, title: selectedLesson.label.props.content.title } : lesson
      );
      setLessons(updatedLessons);
      

      };

      const handleLessonSelect = (content) => { setSelectedLessons([...selectedLessons, content]); addLesson(); };

      const addLesson = () => { setLessons([...lessons, { id: uuidv4(), title: 'Select a lesson' }]); };

      const removeLesson = (index) => { const updatedLessons = lessons.filter((, i) => i !== index); const updatedSelectedLessons = selectedLessons.filter((, i) => i !== index);

      if (updatedLessons.length === 0) {
          updatedLessons.push({ id: uuidv4(), title: 'Select a lesson' });
      }
      
      setLessons(updatedLessons);
      setSelectedLessons(updatedSelectedLessons);
      

      };

      const addTopic = () => { setTopics([...topics, '']); };

      const removeTopic = (index) => { const updatedTopics = topics.filter((_, i) => i !== index); setTopics(updatedTopics); };

      const handleTopicChange = (index, value) => { const updatedTopics = topics.map((topic, i) => i === index ? value : topic); setTopics(updatedTopics); };

      const getContentOptions = (index) => { const draftOptions = drafts.map(draft => ({ label: handleLessonSelect(content, index)} selected={lessons[index] && lessons[index].id === draft.id} />, value: draft.id }));

      const resourceOptions = resources.map(resource => {
          const { id, kind, pubkey, content, title, summary, image, published_at, d, topics } = parseEvent(resource);
          return {
              label: <ContentDropdownItem content={{ id, kind, pubkey, content, title, summary, image, published_at, d, topics }} onSelect={(content) => handleLessonSelect(content, index)} selected={lessons[index] && lessons[index].id === id} />,
              value: id
          };
      });
      
      const workshopOptions = workshops.map(workshop => {
          const { id, kind, pubkey, content, title, summary, image, published_at, d, topics } = parseEvent(workshop);
          return {
              label: <ContentDropdownItem content={{ id, kind, pubkey, content, title, summary, image, published_at, d, topics }} onSelect={(content) => handleLessonSelect(content, index)} selected={lessons[index] && lessons[index].id === id} />,
              value: id
          };
      });
      
      return [
          {
              label: 'Drafts',
              items: draftOptions
          },
          {
              label: 'Resources',
              items: resourceOptions
          },
          {
              label: 'Workshops',
              items: workshopOptions
          }
      ];
      

      };

      const lessonOptions = getContentOptions();

      return (

      setTitle(e.target.value)} placeholder="Title" />
      setSummary(e.target.value)} placeholder="Summary" />
      setCoverImage(e.target.value)} placeholder="Cover Image URL" />

      Paid Course

      setChecked(e.value)} /> {checked && (
      setPrice(e.value)} placeholder="Price (sats)" />
      )}
      {selectedLessons.map((lesson, index) => (
      ))} {lessons.map((lesson, index) => (
      handleLessonChange(e, index)} placeholder="Select a Lesson" itemTemplate={(option) => option.label} optionLabel="label" optionGroupLabel="label" optionGroupChildren="items" />
      ))}
      {topics.map((topic, index) => (
      handleTopicChange(index, e.target.value)} placeholder={Topic #${index + 1}} className="w-full" /> {index > 0 && (
      ))}
      ); }

    export default CourseForm; ```

    yakihonne.com iris.to jumble.social