@tai-kun/surrealdb
Version:
The SurrealDB SDK for JavaScript
141 lines (139 loc) • 13.4 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __typeError = (msg) => {
throw TypeError(msg);
};
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
// src/clients/standard/jwt.ts
var jwt_exports = {};
__export(jwt_exports, {
default: () => Jwt
});
module.exports = __toCommonJS(jwt_exports);
var import_errors = require("../../errors/index.cjs");
var import_utils = require("../../utils/index.cjs");
var JWT_REGEX = /^((?:[0-9a-zA-Z_-]{4})*(?:[0-9a-zA-Z_-]{2,3})?)\.((?:[0-9a-zA-Z_-]{4})*(?:[0-9a-zA-Z_-]{2,3})?)\.((?:[0-9a-zA-Z_-]{4})*(?:[0-9a-zA-Z_-]{2,3})?)$/;
var _parts, _cache, _Jwt_instances, payload_get;
var _Jwt = class _Jwt {
constructor(jwt, options = {}) {
__privateAdd(this, _Jwt_instances);
__privateAdd(this, _parts);
__privateAdd(this, _cache);
const {
redactedText = "[REDACTED]"
} = options;
if (typeof jwt !== "string" || !JWT_REGEX.test(jwt)) {
throw new import_errors.SurrealValueError("well formed JWT", jwt);
}
__privateSet(this, _parts, jwt.split(".", 2));
__privateSet(this, _cache, {});
this.redactedText = redactedText;
Object.defineProperty(this, "raw", {
configurable: false,
// 既定値通り再設定を不可にする。
enumerable: false,
// 既定値通り列挙しない。
value: jwt
});
}
static isWellFormed(jwt) {
return typeof jwt === "string" && JWT_REGEX.test(jwt);
}
get header() {
if (__privateGet(this, _cache).headerJson === void 0) {
__privateGet(this, _cache).headerJson = import_utils.base64url.decode(__privateGet(this, _parts)[0]);
__privateGet(this, _parts)[0] = null;
}
return JSON.parse(__privateGet(this, _cache).headerJson);
}
get payload() {
if (__privateGet(this, _cache).payloadJson === void 0) {
__privateGet(this, _cache).payloadJson = import_utils.base64url.decode(__privateGet(this, _parts)[1]);
__privateGet(this, _parts)[1] = null;
}
return JSON.parse(__privateGet(this, _cache).payloadJson);
}
get issuer() {
return __privateGet(this, _Jwt_instances, payload_get).iss;
}
get issuedAt() {
return __privateGet(this, _Jwt_instances, payload_get).iat;
}
get notBefore() {
return __privateGet(this, _Jwt_instances, payload_get).nbf;
}
get expiresAt() {
return __privateGet(this, _Jwt_instances, payload_get).exp;
}
get namespace() {
return __privateGet(this, _Jwt_instances, payload_get).NS;
}
get database() {
return __privateGet(this, _Jwt_instances, payload_get).DB;
}
get access() {
return __privateGet(this, _Jwt_instances, payload_get).AC;
}
get user() {
return __privateGet(this, _Jwt_instances, payload_get).ID;
}
get id() {
return __privateGet(this, _Jwt_instances, payload_get).jti;
}
getMillisecondsUntilExpiration() {
return this.expiresAt * 1e3 - Date.now();
}
getSecondsUntilExpiration() {
return this.expiresAt - Math.floor(Date.now() / 1e3);
}
getExpirationDate() {
return new Date(this.expiresAt * 1e3);
}
toString() {
return this.redactedText;
}
toCBOR() {
return [this.redactedText];
}
toJSON() {
return this.redactedText;
}
toSurql() {
return (0, import_utils.quoteStr)(this.redactedText);
}
toPlainObject() {
return {
header: this.header,
payload: this.payload
};
}
};
_parts = new WeakMap();
_cache = new WeakMap();
_Jwt_instances = new WeakSet();
payload_get = /* @__PURE__ */ __name(function() {
return __privateGet(this, _cache).payload ||= this.payload;
}, "#payload");
__name(_Jwt, "Jwt");
var Jwt = _Jwt;
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NsaWVudHMvc3RhbmRhcmQvand0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IEVuY29kYWJsZSB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZW5jb2RhYmxlLWRhdGF0eXBlc1wiO1xuaW1wb3J0IHsgU3VycmVhbFZhbHVlRXJyb3IgfSBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL2Vycm9yc1wiO1xuaW1wb3J0IHsgYmFzZTY0dXJsLCBxdW90ZVN0ciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvdXRpbHNcIjtcblxuY29uc3QgSldUX1JFR0VYID1cbiAgL14oKD86WzAtOWEtekEtWl8tXXs0fSkqKD86WzAtOWEtekEtWl8tXXsyLDN9KT8pXFwuKCg/OlswLTlhLXpBLVpfLV17NH0pKig/OlswLTlhLXpBLVpfLV17MiwzfSk/KVxcLigoPzpbMC05YS16QS1aXy1dezR9KSooPzpbMC05YS16QS1aXy1dezIsM30pPykkLztcblxuZXhwb3J0IGludGVyZmFjZSBKd3RIZWFkZXIge1xuICB0eXA6IFwiSldUXCI7XG4gIGFsZzogc3RyaW5nO1xuICBbcDogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKd3RQYXlsb2FkIHtcbiAgaXNzOiBcIlN1cnJlYWxEQlwiO1xuICBpYXQ6IG51bWJlcjtcbiAgbmJmOiBudW1iZXI7XG4gIGV4cDogbnVtYmVyO1xuICBqdGk6IHN0cmluZztcbiAgTlM/OiBzdHJpbmc7XG4gIERCPzogc3RyaW5nO1xuICBBQz86IHN0cmluZztcbiAgSUQ6IHN0cmluZztcbiAgW3A6IHN0cmluZ106IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnd0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHJlZGFjdGVkVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSnd0IGltcGxlbWVudHMgRW5jb2RhYmxlIHtcbiAgc3RhdGljIGlzV2VsbEZvcm1lZChqd3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2Ygand0ID09PSBcInN0cmluZ1wiICYmIEpXVF9SRUdFWC50ZXN0KGp3dCk7XG4gIH1cblxuICByZWFkb25seSAjcGFydHM6IFtoZWFkZXI6IHN0cmluZywgcGF5bG9hZDogc3RyaW5nXTtcbiAgcmVhZG9ubHkgI2NhY2hlOiB7XG4gICAgaGVhZGVyPzogSnd0SGVhZGVyO1xuICAgIHBheWxvYWQ/OiBKd3RQYXlsb2FkO1xuICAgIGhlYWRlckpzb24/OiBzdHJpbmc7XG4gICAgcGF5bG9hZEpzb24/OiBzdHJpbmc7XG4gIH07XG5cbiAgcmVkYWN0ZWRUZXh0OiBzdHJpbmc7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgT2JqZWN0LmRlZmluZVByb3BlcnR5IFx1MzA2N1x1OEEyRFx1NUI5QVx1MzA1OVx1MzA4Qlx1MzAwMlxuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihqd3Q6IHN0cmluZywgb3B0aW9uczogSnd0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgcmVkYWN0ZWRUZXh0ID0gXCJbUkVEQUNURURdXCIsXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAodHlwZW9mIGp3dCAhPT0gXCJzdHJpbmdcIiB8fCAhSldUX1JFR0VYLnRlc3Qoand0KSkge1xuICAgICAgdGhyb3cgbmV3IFN1cnJlYWxWYWx1ZUVycm9yKFwid2VsbCBmb3JtZWQgSldUXCIsIGp3dCk7XG4gICAgfVxuXG4gICAgdGhpcy4jcGFydHMgPSBqd3Quc3BsaXQoXCIuXCIsIDIpIGFzIFtzdHJpbmcsIHN0cmluZ107XG4gICAgdGhpcy4jY2FjaGUgPSB7fTtcbiAgICB0aGlzLnJlZGFjdGVkVGV4dCA9IHJlZGFjdGVkVGV4dDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJyYXdcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwgLy8gXHU2NUUyXHU1QjlBXHU1MDI0XHU5MDFBXHUzMDhBXHU1MThEXHU4QTJEXHU1QjlBXHUzMDkyXHU0RTBEXHU1M0VGXHUzMDZCXHUzMDU5XHUzMDhCXHUzMDAyXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSwgLy8gXHU2NUUyXHU1QjlBXHU1MDI0XHU5MDFBXHUzMDhBXHU1MjE3XHU2MzE5XHUzMDU3XHUzMDZBXHUzMDQ0XHUzMDAyXG4gICAgICB2YWx1ZTogand0LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhlYWRlcigpOiBKd3RIZWFkZXIge1xuICAgIGlmICh0aGlzLiNjYWNoZS5oZWFkZXJKc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuI2NhY2hlLmhlYWRlckpzb24gPSBiYXNlNjR1cmwuZGVjb2RlKHRoaXMuI3BhcnRzWzBdKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgXHU2RDg4XHUzMDU5XG4gICAgICB0aGlzLiNwYXJ0c1swXSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy4jY2FjaGUuaGVhZGVySnNvbik7XG4gIH1cblxuICBnZXQgcGF5bG9hZCgpOiBKd3RQYXlsb2FkIHtcbiAgICBpZiAodGhpcy4jY2FjaGUucGF5bG9hZEpzb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jY2FjaGUucGF5bG9hZEpzb24gPSBiYXNlNjR1cmwuZGVjb2RlKHRoaXMuI3BhcnRzWzFdKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgXHU2RDg4XHUzMDU5XG4gICAgICB0aGlzLiNwYXJ0c1sxXSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy4jY2FjaGUucGF5bG9hZEpzb24pO1xuICB9XG5cbiAgLy8gZ2V0ICNoZWFkZXIoKTogUmVhZG9ubHk8Snd0SGVhZGVyPiB7XG4gIC8vICAgcmV0dXJuICh0aGlzLiNjYWNoZS5oZWFkZXIgfHw9IHRoaXMuaGVhZGVyKTtcbiAgLy8gfVxuXG4gIGdldCAjcGF5bG9hZCgpOiBSZWFkb25seTxKd3RQYXlsb2FkPiB7XG4gICAgcmV0dXJuICh0aGlzLiNjYWNoZS5wYXlsb2FkIHx8PSB0aGlzLnBheWxvYWQpO1xuICB9XG5cbiAgZ2V0IGlzc3VlcigpOiBcIlN1cnJlYWxEQlwiIHtcbiAgICByZXR1cm4gdGhpcy4jcGF5bG9hZC5pc3M7XG4gIH1cblxuICBnZXQgaXNzdWVkQXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jcGF5bG9hZC5pYXQ7XG4gIH1cblxuICBnZXQgbm90QmVmb3JlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI3BheWxvYWQubmJmO1xuICB9XG5cbiAgZ2V0IGV4cGlyZXNBdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNwYXlsb2FkLmV4cDtcbiAgfVxuXG4gIGdldCBuYW1lc3BhY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jcGF5bG9hZC5OUztcbiAgfVxuXG4gIGdldCBkYXRhYmFzZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNwYXlsb2FkLkRCO1xuICB9XG5cbiAgZ2V0IGFjY2VzcygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNwYXlsb2FkLkFDO1xuICB9XG5cbiAgZ2V0IHVzZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jcGF5bG9hZC5JRDtcbiAgfVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNwYXlsb2FkLmp0aTtcbiAgfVxuXG4gIGdldE1pbGxpc2Vjb25kc1VudGlsRXhwaXJhdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV4cGlyZXNBdCAqIDEwMDAgLSBEYXRlLm5vdygpO1xuICB9XG5cbiAgZ2V0U2Vjb25kc1VudGlsRXhwaXJhdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV4cGlyZXNBdCAtIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICB9XG5cbiAgZ2V0RXhwaXJhdGlvbkRhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZXhwaXJlc0F0ICogMTAwMCk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlZGFjdGVkVGV4dDtcbiAgfVxuXG4gIHRvQ0JPUigpOiBbcmVkYWN0ZWRUZXh0OiBzdHJpbmddIHtcbiAgICByZXR1cm4gW3RoaXMucmVkYWN0ZWRUZXh0XTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlZGFjdGVkVGV4dDtcbiAgfVxuXG4gIHRvU3VycWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXVvdGVTdHIodGhpcy5yZWRhY3RlZFRleHQpO1xuICB9XG5cbiAgdG9QbGFpbk9iamVjdCgpOiB7XG4gICAgaGVhZGVyOiBKd3RIZWFkZXI7XG4gICAgcGF5bG9hZDogSnd0UGF5bG9hZDtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcjogdGhpcy5oZWFkZXIsXG4gICAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQsXG4gICAgfTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxvQkFBa0M7QUFDbEMsbUJBQW9DO0FBRXBDLElBQU0sWUFDSjtBQUxGO0FBOEJBLElBQXFCLE9BQXJCLE1BQXFCLEtBQXlCO0FBQUEsRUFpQjVDLFlBQVksS0FBYSxVQUFrQyxDQUFDLEdBQUc7QUFqQmpFO0FBS0UsdUJBQVM7QUFDVCx1QkFBUztBQVlQLFVBQU07QUFBQSxNQUNKLGVBQWU7QUFBQSxJQUNqQixJQUFJO0FBRUosUUFBSSxPQUFPLFFBQVEsWUFBWSxDQUFDLFVBQVUsS0FBSyxHQUFHLEdBQUc7QUFDbkQsWUFBTSxJQUFJLGdDQUFrQixtQkFBbUIsR0FBRztBQUFBLElBQ3BEO0FBRUEsdUJBQUssUUFBUyxJQUFJLE1BQU0sS0FBSyxDQUFDO0FBQzlCLHVCQUFLLFFBQVMsQ0FBQztBQUNmLFNBQUssZUFBZTtBQUNwQixXQUFPLGVBQWUsTUFBTSxPQUFPO0FBQUEsTUFDakMsY0FBYztBQUFBO0FBQUEsTUFDZCxZQUFZO0FBQUE7QUFBQSxNQUNaLE9BQU87QUFBQSxJQUNULENBQUM7QUFBQSxFQUNIO0FBQUEsRUFqQ0EsT0FBTyxhQUFhLEtBQXNCO0FBQ3hDLFdBQU8sT0FBTyxRQUFRLFlBQVksVUFBVSxLQUFLLEdBQUc7QUFBQSxFQUN0RDtBQUFBLEVBaUNBLElBQUksU0FBb0I7QUFDdEIsUUFBSSxtQkFBSyxRQUFPLGVBQWUsUUFBVztBQUN4Qyx5QkFBSyxRQUFPLGFBQWEsdUJBQVUsT0FBTyxtQkFBSyxRQUFPLENBQUMsQ0FBQztBQUV4RCx5QkFBSyxRQUFPLENBQUMsSUFBSTtBQUFBLElBQ25CO0FBRUEsV0FBTyxLQUFLLE1BQU0sbUJBQUssUUFBTyxVQUFVO0FBQUEsRUFDMUM7QUFBQSxFQUVBLElBQUksVUFBc0I7QUFDeEIsUUFBSSxtQkFBSyxRQUFPLGdCQUFnQixRQUFXO0FBQ3pDLHlCQUFLLFFBQU8sY0FBYyx1QkFBVSxPQUFPLG1CQUFLLFFBQU8sQ0FBQyxDQUFDO0FBRXpELHlCQUFLLFFBQU8sQ0FBQyxJQUFJO0FBQUEsSUFDbkI7QUFFQSxXQUFPLEtBQUssTUFBTSxtQkFBSyxRQUFPLFdBQVc7QUFBQSxFQUMzQztBQUFBLEVBVUEsSUFBSSxTQUFzQjtBQUN4QixXQUFPLG1CQUFLLDZCQUFTO0FBQUEsRUFDdkI7QUFBQSxFQUVBLElBQUksV0FBbUI7QUFDckIsV0FBTyxtQkFBSyw2QkFBUztBQUFBLEVBQ3ZCO0FBQUEsRUFFQSxJQUFJLFlBQW9CO0FBQ3RCLFdBQU8sbUJBQUssNkJBQVM7QUFBQSxFQUN2QjtBQUFBLEVBRUEsSUFBSSxZQUFvQjtBQUN0QixXQUFPLG1CQUFLLDZCQUFTO0FBQUEsRUFDdkI7QUFBQSxFQUVBLElBQUksWUFBZ0M7QUFDbEMsV0FBTyxtQkFBSyw2QkFBUztBQUFBLEVBQ3ZCO0FBQUEsRUFFQSxJQUFJLFdBQStCO0FBQ2pDLFdBQU8sbUJBQUssNkJBQVM7QUFBQSxFQUN2QjtBQUFBLEVBRUEsSUFBSSxTQUE2QjtBQUMvQixXQUFPLG1CQUFLLDZCQUFTO0FBQUEsRUFDdkI7QUFBQSxFQUVBLElBQUksT0FBZTtBQUNqQixXQUFPLG1CQUFLLDZCQUFTO0FBQUEsRUFDdkI7QUFBQSxFQUVBLElBQUksS0FBYTtBQUNmLFdBQU8sbUJBQUssNkJBQVM7QUFBQSxFQUN2QjtBQUFBLEVBRUEsaUNBQXlDO0FBQ3ZDLFdBQU8sS0FBSyxZQUFZLE1BQU8sS0FBSyxJQUFJO0FBQUEsRUFDMUM7QUFBQSxFQUVBLDRCQUFvQztBQUNsQyxXQUFPLEtBQUssWUFBWSxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksR0FBSTtBQUFBLEVBQ3REO0FBQUEsRUFFQSxvQkFBMEI7QUFDeEIsV0FBTyxJQUFJLEtBQUssS0FBSyxZQUFZLEdBQUk7QUFBQSxFQUN2QztBQUFBLEVBRUEsV0FBbUI7QUFDakIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsU0FBaUM7QUFDL0IsV0FBTyxDQUFDLEtBQUssWUFBWTtBQUFBLEVBQzNCO0FBQUEsRUFFQSxTQUFpQjtBQUNmLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVBLFVBQWtCO0FBQ2hCLGVBQU8sdUJBQVMsS0FBSyxZQUFZO0FBQUEsRUFDbkM7QUFBQSxFQUVBLGdCQUdFO0FBQ0EsV0FBTztBQUFBLE1BQ0wsUUFBUSxLQUFLO0FBQUEsTUFDYixTQUFTLEtBQUs7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFDRjtBQXBJVztBQUNBO0FBTlg7QUE0RE0sY0FBUSxrQ0FBeUI7QUFDbkMsU0FBUSxtQkFBSyxRQUFPLFlBQVksS0FBSztBQUN2QyxHQUZZO0FBNURnQztBQUE5QyxJQUFxQixNQUFyQjsiLAogICJuYW1lcyI6IFtdCn0K