UNPKG

@pedwise/next-firebase-auth-edge

Version:

Next.js 13 Firebase Authentication for Edge and server runtimes. Dedicated for Next 13 server components. Compatible with Next.js middleware.

45 lines 1.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RotatingCredential = void 0; const utils_1 = require("./jwt/utils"); class RotatingCredential { constructor(keys) { this.keys = keys; this.digestAlgorithm = "SHA-1"; } getSignAlgorithm(length) { return { name: "HMAC", hash: { name: "SHA-1", }, length, }; } async signKey(data, keyValue) { const keyBuffer = (0, utils_1.stringToArrayBuffer)(keyValue); const dataBuffer = (0, utils_1.stringToArrayBuffer)(data); const keyBitLength = keyBuffer.byteLength * 8; const digest = await crypto.subtle.digest(this.digestAlgorithm, dataBuffer); const key = await crypto.subtle.importKey("raw", keyBuffer, this.getSignAlgorithm(keyBitLength), false, ["sign"]); const signed = await crypto.subtle.sign(this.getSignAlgorithm(keyBitLength), key, digest); return (0, utils_1.arrayBufferToBase64)(signed); } async sign(data) { return this.signKey(data, this.keys[0]); } async verify(data, digest) { return (await this.index(data, digest)) > -1; } async index(data, digest) { for (const key of this.keys) { const signedKey = await this.signKey(data, key); if (signedKey === digest) { return this.keys.findIndex((it) => it === key); } } return -1; } } exports.RotatingCredential = RotatingCredential; //# sourceMappingURL=rotating-credential.js.map