|
|
|
|
@ -1,19 +1,30 @@
@@ -1,19 +1,30 @@
|
|
|
|
|
import { ISigner, TDraftEvent, TNip07 } from '@/types' |
|
|
|
|
|
|
|
|
|
export class Nip07Signer implements ISigner { |
|
|
|
|
private signer: TNip07 |
|
|
|
|
private signer: TNip07 | undefined |
|
|
|
|
private pubkey: string | null = null |
|
|
|
|
|
|
|
|
|
constructor() { |
|
|
|
|
if (!window.nostr) { |
|
|
|
|
throw new Error( |
|
|
|
|
'You need to install a nostr signer extension to login. Such as alby, nostr-keyx or nos2x.' |
|
|
|
|
) |
|
|
|
|
async init() { |
|
|
|
|
const checkInterval = 100 |
|
|
|
|
const maxAttempts = 50 |
|
|
|
|
|
|
|
|
|
for (let attempt = 0; attempt < maxAttempts; attempt++) { |
|
|
|
|
if (window.nostr) { |
|
|
|
|
this.signer = window.nostr |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, checkInterval)) |
|
|
|
|
} |
|
|
|
|
this.signer = window.nostr |
|
|
|
|
|
|
|
|
|
throw new Error( |
|
|
|
|
'You need to install a nostr signer extension to login. Such as alby, nostr-keyx or nos2x.' |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async getPublicKey() { |
|
|
|
|
if (!this.signer) { |
|
|
|
|
throw new Error('Should call init() first') |
|
|
|
|
} |
|
|
|
|
if (!this.pubkey) { |
|
|
|
|
this.pubkey = await this.signer.getPublicKey() |
|
|
|
|
} |
|
|
|
|
@ -21,12 +32,15 @@ export class Nip07Signer implements ISigner {
@@ -21,12 +32,15 @@ export class Nip07Signer implements ISigner {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async signEvent(draftEvent: TDraftEvent) { |
|
|
|
|
if (!this.signer) { |
|
|
|
|
throw new Error('Should call init() first') |
|
|
|
|
} |
|
|
|
|
return await this.signer.signEvent(draftEvent) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async nip04Encrypt(pubkey: string, plainText: string) { |
|
|
|
|
if (!this.signer) { |
|
|
|
|
throw new Error('Not logged in') |
|
|
|
|
throw new Error('Should call init() first') |
|
|
|
|
} |
|
|
|
|
if (!this.signer.nip04?.encrypt) { |
|
|
|
|
throw new Error('The extension you are using does not support nip04 encryption') |
|
|
|
|
@ -36,7 +50,7 @@ export class Nip07Signer implements ISigner {
@@ -36,7 +50,7 @@ export class Nip07Signer implements ISigner {
|
|
|
|
|
|
|
|
|
|
async nip04Decrypt(pubkey: string, cipherText: string) { |
|
|
|
|
if (!this.signer) { |
|
|
|
|
throw new Error('Not logged in') |
|
|
|
|
throw new Error('Should call init() first') |
|
|
|
|
} |
|
|
|
|
if (!this.signer.nip04?.decrypt) { |
|
|
|
|
throw new Error('The extension you are using does not support nip04 decryption') |
|
|
|
|
|