@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.
30 lines • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sign = void 0;
const utils_1 = require("./utils");
const consts_1 = require("./consts");
function getKeyData(options) {
if (options.secret) {
return (0, utils_1.base64StringToArrayBuffer)(options.secret);
}
if (options.privateKey) {
return (0, utils_1.pemToArrayBuffer)(options.privateKey);
}
return (0, utils_1.base64StringToArrayBuffer)("");
}
async function sign({ payload, privateKey, secret, keyId, format = "pkcs8", algorithm = "RS256", extractable = false, keyUsages = ["sign"], }) {
const keyData = getKeyData({ privateKey, secret });
const key = await crypto.subtle.importKey(format, keyData, consts_1.ALGORITHMS[algorithm], extractable, keyUsages);
const header = {
typ: "JWT",
alg: algorithm,
};
const encodedHeader = (0, utils_1.objectToBase64)(keyId ? Object.assign(Object.assign({}, header), { kid: keyId }) : header);
const encodedPayload = (0, utils_1.objectToBase64)(payload);
const data = (0, utils_1.stringToArrayBuffer)(`${encodedHeader}.${encodedPayload}`);
const signature = await crypto.subtle.sign(consts_1.ALGORITHMS[algorithm], key, data);
const encodedSignature = (0, utils_1.arrayBufferToBase64)(signature);
return `${encodedHeader}.${encodedPayload}.${encodedSignature}`;
}
exports.sign = sign;
//# sourceMappingURL=sign.js.map