@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
JavaScript
;
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