nip46: NostrConnectAdmin kind and handle "auth_url".

This commit is contained in:
fiatjaf
2024-02-11 21:52:06 -03:00
parent d14830a8ff
commit 72f9b482ef
2 changed files with 10 additions and 13 deletions

View File

@@ -78,6 +78,7 @@ export const ClientAuth = 22242
export const NWCWalletRequest = 23194 export const NWCWalletRequest = 23194
export const NWCWalletResponse = 23195 export const NWCWalletResponse = 23195
export const NostrConnect = 24133 export const NostrConnect = 24133
export const NostrConnectAdmin = 24134
export const HTTPAuth = 27235 export const HTTPAuth = 27235
export const Followsets = 30000 export const Followsets = 30000
export const Genericlists = 30001 export const Genericlists = 30001

View File

@@ -4,7 +4,7 @@ import { AbstractSimplePool, SubCloser } from './abstract-pool.ts'
import { decrypt, encrypt } from './nip04.ts' import { decrypt, encrypt } from './nip04.ts'
import { NIP05_REGEX } from './nip05.ts' import { NIP05_REGEX } from './nip05.ts'
import { SimplePool } from './pool.ts' import { SimplePool } from './pool.ts'
import { Handlerinformation, NostrConnect } from './kinds.ts' import { Handlerinformation, NostrConnect, NostrConnectAdmin } from './kinds.ts'
var _fetch: any var _fetch: any
@@ -87,7 +87,7 @@ export class BunkerSigner {
* @param remotePubkey - An optional remote public key. This is the key you want to sign as. * @param remotePubkey - An optional remote public key. This is the key you want to sign as.
* @param secretKey - An optional key pair. * @param secretKey - An optional key pair.
*/ */
public constructor(clientSecretKey: Uint8Array, bp: BunkerPointer) { public constructor(clientSecretKey: Uint8Array, bp: BunkerPointer, params: { onauth?: (url: string) => void } = {}) {
this.pool = new SimplePool() this.pool = new SimplePool()
this.secretKey = clientSecretKey this.secretKey = clientSecretKey
this.relays = bp.relays this.relays = bp.relays
@@ -102,13 +102,18 @@ export class BunkerSigner {
this.subCloser = this.pool.subscribeMany( this.subCloser = this.pool.subscribeMany(
this.relays, this.relays,
[{ kinds: [NostrConnect, 24134], '#p': [getPublicKey(this.secretKey)] }], [{ kinds: [NostrConnect, NostrConnectAdmin], '#p': [getPublicKey(this.secretKey)] }],
{ {
async onevent(event: NostrEvent) { async onevent(event: NostrEvent) {
const decryptedContent = await decrypt(clientSecretKey, event.pubkey, event.content) const decryptedContent = await decrypt(clientSecretKey, event.pubkey, event.content)
const parsedContent = JSON.parse(decryptedContent) const parsedContent = JSON.parse(decryptedContent)
const { id, result, error } = parsedContent const { id, result, error } = parsedContent
if (result === 'auth_url') {
params.onauth?.(error)
return
}
let handler = listeners[id] let handler = listeners[id]
if (handler) { if (handler) {
if (error) handler.reject(error) if (error) handler.reject(error)
@@ -143,7 +148,7 @@ export class BunkerSigner {
// the request event // the request event
const verifiedEvent: VerifiedEvent = finalizeEvent( const verifiedEvent: VerifiedEvent = finalizeEvent(
{ {
kind: method === 'create_account' ? 24134 : NostrConnect, kind: method === 'create_account' ? NostrConnectAdmin : NostrConnect,
tags: [['p', this.remotePubkey]], tags: [['p', this.remotePubkey]],
content: encryptedContent, content: encryptedContent,
created_at: Math.floor(Date.now() / 1000), created_at: Math.floor(Date.now() / 1000),
@@ -154,15 +159,6 @@ export class BunkerSigner {
// setup callback listener // setup callback listener
this.listeners[id] = { resolve, reject } this.listeners[id] = { resolve, reject }
// Build auth_url handler
// const authHandler = (response: Response) => {
// if (response.result) {
// this.emit('authChallengeSuccess', response)
// } else {
// this.emit('authChallengeError', response.error)
// }
// }
// publish the event // publish the event
await Promise.any(this.pool.publish(this.relays, verifiedEvent)) await Promise.any(this.pool.publish(this.relays, verifiedEvent))
} catch (err) { } catch (err) {