aboutsummaryrefslogtreecommitdiffstats
path: root/src/nip98.js
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));
}