Skip to content

Commit

Permalink
Remove legacy npub1 bunker URI format
Browse files Browse the repository at this point in the history
  • Loading branch information
hzrd149 committed Nov 14, 2024
1 parent 8c7dac8 commit 0438f3e
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 151 deletions.
5 changes: 5 additions & 0 deletions .changeset/brave-boats-dance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"nostrudel": minor
---

Remove legacy npub1 bunker URI format
72 changes: 36 additions & 36 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 13 additions & 7 deletions src/classes/accounts/nostr-connect-account.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import { NostrConnectSigner } from "applesauce-signer/signers";
import { NostrConnectSigner, SimpleSigner } from "applesauce-signer/signers";

import { DEFAULT_NOSTR_CONNECT_RELAYS } from "../../const";
import nostrConnectService from "../../services/nostr-connect";
import { Account } from "./account";
import { hexToBytes } from "@noble/hashes/utils";
import relayPoolService from "../../services/relay-pool";

function createSigner(pubkey: string, relays: string[], secretKey?: string, provider?: string) {
const signer = secretKey ? new SimpleSigner(hexToBytes(secretKey)) : undefined;

const client = new NostrConnectSigner({ pool: relayPoolService, pubkey, relays, signer, remote: provider });

return client;
}

export default class NostrConnectAccount extends Account {
readonly type = "nostr-connect";
Expand All @@ -17,7 +26,7 @@ export default class NostrConnectAccount extends Account {

constructor(pubkey: string, signer?: NostrConnectSigner) {
super(pubkey);
this.signer = signer || nostrConnectService.createSigner(pubkey, DEFAULT_NOSTR_CONNECT_RELAYS);
this.signer = signer || createSigner(pubkey, DEFAULT_NOSTR_CONNECT_RELAYS);
}

toJSON() {
Expand All @@ -30,10 +39,7 @@ export default class NostrConnectAccount extends Account {
}
fromJSON(data: any): this {
super.fromJSON(data);
this.signer = nostrConnectService.createSigner(data.pubkey, data.signerRelays, data.clientSecretKey);

// presume the client has already connected
nostrConnectService.saveSigner(data.pubKey);
this.signer = createSigner(data.pubkey, data.signerRelays, data.clientSecretKey);

return this;
}
Expand Down
80 changes: 0 additions & 80 deletions src/services/nostr-connect.ts

This file was deleted.

16 changes: 8 additions & 8 deletions src/views/signin/address/create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,25 @@ import {
} from "@chakra-ui/react";
import { useNavigate } from "react-router-dom";
import { NostrEvent } from "nostr-tools";
import { NostrConnectSigner } from "applesauce-signer/signers/nostr-connect-signer";
import { ProfileContent } from "applesauce-core/helpers";

import useNip05Providers from "../../../hooks/use-nip05-providers";
import { Kind0ParsedContent } from "../../../helpers/nostr/user-metadata";
import HoverLinkOverlay from "../../../components/hover-link-overlay";
import { getEventCoordinate } from "../../../helpers/nostr/event";
import { MetadataAvatar } from "../../../components/user/user-avatar";
import { ErrorBoundary } from "../../../components/error-boundary";
import dnsIdentityService from "../../../services/dns-identity";
import useUserProfile from "../../../hooks/use-user-profile";
import nostrConnectService from "../../../services/nostr-connect";
import accountService from "../../../services/account";
import { safeRelayUrls } from "../../../helpers/relay";
import { safeJson } from "../../../helpers/parse";
import { NOSTR_CONNECT_PERMISSIONS } from "../../../const";
import NostrConnectAccount from "../../../classes/accounts/nostr-connect-account";
import relayPoolService from "../../../services/relay-pool";

function ProviderCard({ onClick, provider }: { onClick: () => void; provider: NostrEvent }) {
const metadata = JSON.parse(provider.content) as Kind0ParsedContent;
const metadata = JSON.parse(provider.content) as ProfileContent;
const features = provider.tags.filter((t) => t[0] === "f").map((t) => t[1]);

if (!metadata.nip05) return null;
Expand Down Expand Up @@ -72,7 +73,7 @@ export default function LoginNostrAddressCreate() {
const providers = useNip05Providers();
const [selected, setSelected] = useState<NostrEvent>();
const userMetadata = useUserProfile(selected?.pubkey);
const providerMetadata = useMemo<Kind0ParsedContent | undefined>(
const providerMetadata = useMemo<ProfileContent | undefined>(
() => selected && safeJson(selected.content, undefined),
[selected],
);
Expand All @@ -83,7 +84,7 @@ export default function LoginNostrAddressCreate() {

try {
setLoading("Creating...");
const metadata: Kind0ParsedContent = { ...userMetadata, ...providerMetadata };
const metadata: ProfileContent = { ...userMetadata, ...providerMetadata };
if (!metadata.nip05) throw new Error("Provider missing nip05 address");
const nip05 = await dnsIdentityService.fetchIdentity(metadata.nip05);
if (!nip05 || nip05.pubkey !== selected.pubkey) throw new Error("Invalid provider");
Expand All @@ -92,15 +93,14 @@ export default function LoginNostrAddressCreate() {
const relays = safeRelayUrls(nip05.nip46Relays || nip05.relays || []);
if (relays.length === 0) throw new Error("Cant find providers relays");

const signer = nostrConnectService.createSigner("", relays, undefined, nip05.pubkey);
const signer = new NostrConnectSigner({ pool: relayPoolService, relays, remote: nip05.pubkey });

const createPromise = signer.createAccount(name, nip05.domain, undefined, NOSTR_CONNECT_PERMISSIONS);
await createPromise;
await signer.connect(undefined, NOSTR_CONNECT_PERMISSIONS);

const account = new NostrConnectAccount(signer.pubkey!, signer);

nostrConnectService.saveSigner(signer);
accountService.addAccount(account);
accountService.switchAccount(account.pubkey);
} catch (e) {
Expand All @@ -113,7 +113,7 @@ export default function LoginNostrAddressCreate() {
if (loading) return <Text fontSize="lg">{loading}</Text>;

if (selected) {
const metadata = JSON.parse(selected.content) as Kind0ParsedContent;
const metadata = JSON.parse(selected.content) as ProfileContent;
const [_, domain] = metadata.nip05!.split("@");

return (
Expand Down
Loading

0 comments on commit 0438f3e

Please sign in to comment.