@teachfloor/extension-kit
Version:
Teachfloor Extension Kit
48 lines (47 loc) • 1.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.unpackKey = exports.packKey = void 0;
const PREFIX = 'ek:'; // encoded key
const VERSION = 1;
const toB64Url = str => {
// encode UTF-8 to base64
const base64 = btoa(unescape(encodeURIComponent(str)));
// make URL-safe
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
};
const fromB64Url = str => {
// restore to normal base64
const base64 = str.replace(/-/g, '+').replace(/_/g, '/');
// decode base64 back to UTF-8
return decodeURIComponent(escape(atob(base64)));
};
const packKey = function (key) {
let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
const payload = {
v: VERSION,
k: key,
p: params
};
return PREFIX + toB64Url(JSON.stringify(payload));
};
exports.packKey = packKey;
const unpackKey = enveloped => {
if (!enveloped.startsWith(PREFIX)) {
return {
key: enveloped,
params: {}
};
}
const json = fromB64Url(enveloped.slice(PREFIX.length));
const obj = JSON.parse(json);
if (obj?.v !== VERSION || typeof obj.k !== 'string') {
throw new Error('Invalid key envelope');
}
return {
key: obj.k,
params: obj.p ?? {}
};
};
exports.unpackKey = unpackKey;