simplify nip-42.
This commit is contained in:
parent
bf31f2eba3
commit
2ac69278ce
|
@ -1,26 +1,14 @@
|
||||||
import 'websocket-polyfill'
|
import 'websocket-polyfill'
|
||||||
|
|
||||||
import { finishEvent } from './event.ts'
|
import { makeAuthEvent } from './nip42.ts'
|
||||||
import { generatePrivateKey } from './keys.ts'
|
|
||||||
import { authenticate } from './nip42.ts'
|
|
||||||
import { relayInit } from './relay.ts'
|
import { relayInit } from './relay.ts'
|
||||||
|
|
||||||
test('auth flow', () => {
|
test('auth flow', () => {
|
||||||
const relay = relayInit('wss://nostr.kollider.xyz')
|
const relay = relayInit('wss://nostr.wine')
|
||||||
relay.connect()
|
|
||||||
const sk = generatePrivateKey()
|
|
||||||
|
|
||||||
return new Promise<void>(resolve => {
|
const auth = makeAuthEvent(relay.url, 'chachacha')
|
||||||
relay.on('auth', async challenge => {
|
expect(auth.tags).toHaveLength(2)
|
||||||
await expect(
|
expect(auth.tags[0]).toEqual(['relay', 'wss://nostr.wine'])
|
||||||
authenticate({
|
expect(auth.tags[1]).toEqual(['challenge', 'chachacha'])
|
||||||
challenge,
|
expect(auth.kind).toEqual(22242)
|
||||||
relay,
|
|
||||||
sign: e => finishEvent(e, sk),
|
|
||||||
}),
|
|
||||||
).rejects.toBeTruthy()
|
|
||||||
relay.close()
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
26
nip42.ts
26
nip42.ts
|
@ -1,33 +1,17 @@
|
||||||
import { type EventTemplate, type Event } from './event.ts'
|
import { EventTemplate } from './event.ts'
|
||||||
import { ClientAuth } from './kinds.ts'
|
import { ClientAuth } from './kinds.ts'
|
||||||
import { Relay } from './relay.ts'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authenticate via NIP-42 flow.
|
* creates an EventTemplate for an AUTH event to be signed.
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* const sign = window.nostr.signEvent
|
|
||||||
* relay.on('auth', challenge =>
|
|
||||||
* authenticate({ relay, sign, challenge })
|
|
||||||
* )
|
|
||||||
*/
|
*/
|
||||||
export const authenticate = async ({
|
export function makeAuthEvent(relayURL: string, challenge: string): EventTemplate {
|
||||||
challenge,
|
return {
|
||||||
relay,
|
|
||||||
sign,
|
|
||||||
}: {
|
|
||||||
challenge: string
|
|
||||||
relay: Relay
|
|
||||||
sign: (e: EventTemplate) => Promise<Event> | Event
|
|
||||||
}): Promise<void> => {
|
|
||||||
const evt: EventTemplate = {
|
|
||||||
kind: ClientAuth,
|
kind: ClientAuth,
|
||||||
created_at: Math.floor(Date.now() / 1000),
|
created_at: Math.floor(Date.now() / 1000),
|
||||||
tags: [
|
tags: [
|
||||||
['relay', relay.url],
|
['relay', relayURL],
|
||||||
['challenge', challenge],
|
['challenge', challenge],
|
||||||
],
|
],
|
||||||
content: '',
|
content: '',
|
||||||
}
|
}
|
||||||
return relay.auth(await sign(evt))
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue