zap request validator.

This commit is contained in:
fiatjaf
2023-02-17 14:23:11 -03:00
parent d46794c681
commit 336948b1d1

View File

@@ -1,6 +1,6 @@
import {bech32} from '@scure/base' import {bech32} from '@scure/base'
import {Event, EventTemplate} from './event' import {Event, EventTemplate, validateEvent, verifySignature} from './event'
import {utf8Decoder} from './utils' import {utf8Decoder} from './utils'
var _fetch: any var _fetch: any
@@ -75,6 +75,34 @@ export function makeZapRequest({
return zr return zr
} }
export function validateZapRequest(zapRequestString: string): string | null {
let zapRequest: Event
try {
zapRequest = JSON.parse(zapRequestString)
} catch (err) {
return 'Invalid zap request JSON.'
}
if (!validateEvent(zapRequest))
return 'Zap request is not a valid Nostr event.'
if (!verifySignature(zapRequest)) return 'Invalid signature on zap request.'
let p = zapRequest.tags.find(([t, v]) => t === 'p' && v)
if (!p) return "Zap request doesn't have a 'p' tag."
if (!p[1].match(/^[a-f0-9]{64}$/))
return "Zap request 'p' tag is not valid hex."
let e = zapRequest.tags.find(([t, v]) => t === 'e' && v)
if (e && !e[1].match(/^[a-f0-9]{64}$/))
return "Zap request 'e' tag is not valid hex."
let relays = zapRequest.tags.find(([t, v]) => t === 'relays' && v)
if (!relays) return "Zap request doesn't have a 'relays' tag."
return null
}
export function makeZapReceipt({ export function makeZapReceipt({
zapRequest, zapRequest,
preimage, preimage,