mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-04-23 15:04:09 +02:00
Add support for bunker://npub@relay NIP-46 login
This commit is contained in:
parent
a39e6adf8c
commit
33ff50fabb
5
.changeset/nasty-pumpkins-dance.md
Normal file
5
.changeset/nasty-pumpkins-dance.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"nostrudel": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Add support for bunker://npub@relay NIP-46 login
|
@ -3,7 +3,7 @@ import dayjs from "dayjs";
|
|||||||
import { nanoid } from "nanoid";
|
import { nanoid } from "nanoid";
|
||||||
|
|
||||||
import NostrMultiSubscription from "../classes/nostr-multi-subscription";
|
import NostrMultiSubscription from "../classes/nostr-multi-subscription";
|
||||||
import { getPubkeyFromDecodeResult, isHexKey } from "../helpers/nip19";
|
import { getPubkeyFromDecodeResult, isHexKey, normalizeToHexPubkey } from "../helpers/nip19";
|
||||||
import { createSimpleQueryMap } from "../helpers/nostr/filter";
|
import { createSimpleQueryMap } from "../helpers/nostr/filter";
|
||||||
import { logger } from "../helpers/debug";
|
import { logger } from "../helpers/debug";
|
||||||
import { DraftNostrEvent, NostrEvent, isPTag } from "../types/nostr-event";
|
import { DraftNostrEvent, NostrEvent, isPTag } from "../types/nostr-event";
|
||||||
@ -11,6 +11,7 @@ import createDefer, { Deferred } from "../classes/deferred";
|
|||||||
import { truncatedId } from "../helpers/nostr/events";
|
import { truncatedId } from "../helpers/nostr/events";
|
||||||
import { NostrConnectAccount } from "./account";
|
import { NostrConnectAccount } from "./account";
|
||||||
import { bytesToHex, hexToBytes } from "@noble/hashes/utils";
|
import { bytesToHex, hexToBytes } from "@noble/hashes/utils";
|
||||||
|
import { normalizeRelayURL } from "../helpers/relay";
|
||||||
|
|
||||||
export enum NostrConnectMethod {
|
export enum NostrConnectMethod {
|
||||||
Connect = "connect",
|
Connect = "connect",
|
||||||
@ -181,12 +182,24 @@ class NostrConnectService {
|
|||||||
|
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
fromBunkerAddress(address: string) {
|
||||||
|
const parts = address.replace("bunker://", "").split("@");
|
||||||
|
if (parts.length !== 2) throw new Error("Invalid bunker address");
|
||||||
|
const pubkey = normalizeToHexPubkey(parts[0]);
|
||||||
|
const pathRelay = normalizeRelayURL("wss://" + parts[1]);
|
||||||
|
if (!pubkey || !isHexKey(pubkey)) throw new Error("Missing pubkey");
|
||||||
|
|
||||||
|
return this.getClient(pubkey) || this.createClient(pubkey, [pathRelay]);
|
||||||
|
}
|
||||||
fromBunkerURI(uri: string) {
|
fromBunkerURI(uri: string) {
|
||||||
const url = new URL(uri);
|
const url = new URL(uri);
|
||||||
|
|
||||||
const pubkey = url.pathname.replace(/^\/\//, "");
|
const pathParts = url.pathname.replace(/^\/\//, "").split("@");
|
||||||
|
const pubkey = pathParts[0];
|
||||||
|
const pathRelay = pathParts[1] as string | undefined;
|
||||||
if (!isHexKey(pubkey)) throw new Error("Invalid connection URI");
|
if (!isHexKey(pubkey)) throw new Error("Invalid connection URI");
|
||||||
const relays = url.searchParams.getAll("relay");
|
const relays = url.searchParams.getAll("relay");
|
||||||
|
if (pathRelay) relays.push(pathRelay);
|
||||||
if (relays.length === 0) throw new Error("Missing relays");
|
if (relays.length === 0) throw new Error("Missing relays");
|
||||||
|
|
||||||
return this.getClient(pubkey) || this.createClient(pubkey, relays);
|
return this.getClient(pubkey) || this.createClient(pubkey, relays);
|
||||||
|
@ -18,7 +18,9 @@ export default function LoginNostrConnectView() {
|
|||||||
setLoading("Connecting...");
|
setLoading("Connecting...");
|
||||||
let client: NostrConnectClient;
|
let client: NostrConnectClient;
|
||||||
if (uri.startsWith("bunker://")) {
|
if (uri.startsWith("bunker://")) {
|
||||||
client = nostrConnectService.fromBunkerURI(uri);
|
if (uri.includes("@")) client = nostrConnectService.fromBunkerAddress(uri);
|
||||||
|
else client = nostrConnectService.fromBunkerURI(uri);
|
||||||
|
|
||||||
await client.connect();
|
await client.connect();
|
||||||
} else if (uri.startsWith("npub")) {
|
} else if (uri.startsWith("npub")) {
|
||||||
client = nostrConnectService.fromNsecBunkerToken(uri);
|
client = nostrConnectService.fromNsecBunkerToken(uri);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user