UNPKG

@gw2me/client

Version:
53 lines (51 loc) 1.48 kB
import { t as base64urlEncode } from "./base64-B0vm543A.mjs"; //#region src/dpop.ts function generateDPoPKeyPair() { return crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, false, ["sign"]); } async function createDPoPJwt({ htm, htu, nonce, accessToken }, keyPair) { const header = JSON.stringify({ alg: "ES256", typ: "dpop+jwt", jwk: await jwk(keyPair.publicKey) }); const body = JSON.stringify({ iat: Math.floor(Date.now() / 1e3), jti: base64urlEncode(crypto.getRandomValues(new Uint8Array(32))), htm, htu, nonce, ath: accessToken ? base64urlEncode(await crypto.subtle.digest("SHA-256", stringToBuffer(accessToken))) : void 0 }); const input = `${base64urlEncode(stringToBuffer(header))}.${base64urlEncode(stringToBuffer(body))}`; return `${input}.${base64urlEncode(await crypto.subtle.sign({ name: "ECDSA", hash: "SHA-256" }, keyPair.privateKey, stringToBuffer(input)))}`; } const encoder = new TextEncoder(); function stringToBuffer(value) { return encoder.encode(value); } async function jwk(key) { const { kty, e, k, n, x, y, crv } = await crypto.subtle.exportKey("jwk", key); return { e, k, crv, kty, n, x, y }; } async function jwkThumbprint(key) { const jwkJson = JSON.stringify(await jwk(key)); return base64urlEncode(await crypto.subtle.digest("SHA-256", stringToBuffer(jwkJson))); } //#endregion export { createDPoPJwt, generateDPoPKeyPair, jwkThumbprint }; //# sourceMappingURL=dpop.mjs.map