blob: aa0343e98502151eb59ad8449456ab5d58ac16d0 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// NIP-98 HTTP Auth header (kind 27235): the signature covers the exact URL,
// method and body hash, so a captured header is useless anywhere else. Its
// own module — every build needs it (registrar calls), but only some builds
// need the login/backup machinery around it in nostr-login.js.
import { hex } from '@scure/base';
import { sha256 } from '@noble/hashes/sha256';
export async function nip98Header(signer, url, method, bodyText) {
const tags = [['u', url], ['method', method.toUpperCase()]];
if (bodyText) tags.push(['payload', hex.encode(sha256(new TextEncoder().encode(bodyText)))]);
const evt = await signer.signEvent({
kind: 27235, created_at: Math.floor(Date.now() / 1000), tags, content: '',
});
return 'Nostr ' + btoa(JSON.stringify(evt));
}
|