UNPKG

@toruslabs/session-manager

Version:
295 lines (266 loc) 10.8 kB
/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 926: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { X: () => (/* binding */ BaseSessionManager) }); // EXTERNAL MODULE: external "@babel/runtime/helpers/defineProperty" var defineProperty_ = __webpack_require__(990); var defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty_); ;// CONCATENATED MODULE: external "@toruslabs/http-helpers" const http_helpers_namespaceObject = require("@toruslabs/http-helpers"); ;// CONCATENATED MODULE: ./src/base.ts class BaseSessionManager { constructor() { defineProperty_default()(this, "sessionId", void 0); } checkSessionParams() { if (!this.sessionId) throw new Error("Session id is required"); this.sessionId = this.sessionId.padStart(64, "0"); } /** * Common handler method for making an http request. * * Note: Embed all the query parameters in the path itself. */ request({ method = "GET", url, data = {}, headers = {} }) { const options = { headers }; switch (method) { case "GET": return (0,http_helpers_namespaceObject.get)(url, options); case "POST": return (0,http_helpers_namespaceObject.post)(url, data, options); case "PUT": return (0,http_helpers_namespaceObject.put)(url, data, options); case "PATCH": return (0,http_helpers_namespaceObject.patch)(url, data, options); } throw new Error("Invalid method type"); } } /***/ }), /***/ 278: /***/ (() => { /***/ }), /***/ 655: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { C: () => (/* binding */ SessionManager) }); // EXTERNAL MODULE: external "@babel/runtime/helpers/defineProperty" var defineProperty_ = __webpack_require__(990); var defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty_); ;// CONCATENATED MODULE: external "@toruslabs/eccrypto" const eccrypto_namespaceObject = require("@toruslabs/eccrypto"); ;// CONCATENATED MODULE: external "@toruslabs/metadata-helpers" const metadata_helpers_namespaceObject = require("@toruslabs/metadata-helpers"); // EXTERNAL MODULE: ./src/base.ts + 1 modules var base = __webpack_require__(926); ;// CONCATENATED MODULE: ./src/sessionManager.ts const DEFAULT_SESSION_TIMEOUT = 86400; class SessionManager extends base/* BaseSessionManager */.X { constructor({ sessionServerBaseUrl, sessionNamespace, sessionTime, sessionId } = {}) { super(); defineProperty_default()(this, "sessionServerBaseUrl", "https://session.web3auth.io"); defineProperty_default()(this, "sessionNamespace", void 0); defineProperty_default()(this, "sessionTime", DEFAULT_SESSION_TIMEOUT); defineProperty_default()(this, "sessionId", ""); if (sessionServerBaseUrl) { this.sessionServerBaseUrl = sessionServerBaseUrl; } if (sessionNamespace) this.sessionNamespace = sessionNamespace; if (sessionTime) this.sessionTime = sessionTime; if (sessionId) this.sessionId = sessionId.padStart(64, "0"); } static generateRandomSessionKey() { return (0,eccrypto_namespaceObject.generatePrivate)().toString("hex").padStart(64, "0"); } async createSession(data) { super.checkSessionParams(); const privKey = Buffer.from(this.sessionId, "hex"); const pubKey = (0,eccrypto_namespaceObject.getPublic)(privKey).toString("hex"); const encData = await (0,metadata_helpers_namespaceObject.encryptData)(this.sessionId, data); const signature = (await (0,eccrypto_namespaceObject.sign)(privKey, (0,metadata_helpers_namespaceObject.keccak256)(Buffer.from(encData, "utf8")))).toString("hex"); const body = { key: pubKey, data: encData, signature, namespace: this.sessionNamespace, timeout: this.sessionTime }; await super.request({ method: "POST", url: `${this.sessionServerBaseUrl}/store/set`, data: body }); return this.sessionId; } async authorizeSession() { super.checkSessionParams(); const pubkey = (0,eccrypto_namespaceObject.getPublic)(Buffer.from(this.sessionId, "hex")).toString("hex"); const url = new URL(`${this.sessionServerBaseUrl}/store/get`); url.searchParams.append("key", pubkey); if (this.sessionNamespace) url.searchParams.append("namespace", this.sessionNamespace); const result = await super.request({ url: url.toString() }); if (!result.message) { throw new Error("Session Expired or Invalid public key"); } const response = await (0,metadata_helpers_namespaceObject.decryptData)(this.sessionId, result.message); if (response.error) { throw new Error("There was an error decrypting data."); } return response; } async updateSession(data) { super.checkSessionParams(); const privKey = Buffer.from(this.sessionId, "hex"); const pubKey = (0,eccrypto_namespaceObject.getPublic)(privKey).toString("hex"); const encData = await (0,metadata_helpers_namespaceObject.encryptData)(this.sessionId, data); const signature = (await (0,eccrypto_namespaceObject.sign)(privKey, (0,metadata_helpers_namespaceObject.keccak256)(Buffer.from(encData, "utf8")))).toString("hex"); const body = { key: pubKey, data: encData, signature, namespace: this.sessionNamespace }; await super.request({ method: "PUT", url: `${this.sessionServerBaseUrl}/store/update`, data: body }); } async invalidateSession() { super.checkSessionParams(); const privKey = Buffer.from(this.sessionId, "hex"); const pubKey = (0,eccrypto_namespaceObject.getPublic)(privKey).toString("hex"); const encData = await (0,metadata_helpers_namespaceObject.encryptData)(this.sessionId, {}); const signature = (await (0,eccrypto_namespaceObject.sign)(privKey, (0,metadata_helpers_namespaceObject.keccak256)(Buffer.from(encData, "utf8")))).toString("hex"); const data = { key: pubKey, data: encData, signature, namespace: this.sessionNamespace, timeout: 1 }; await super.request({ method: "POST", url: `${this.sessionServerBaseUrl}/store/set`, data }); this.sessionId = ""; return true; } } /***/ }), /***/ 990: /***/ ((module) => { "use strict"; module.exports = require("@babel/runtime/helpers/defineProperty"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BaseSessionManager: () => (/* reexport safe */ _base__WEBPACK_IMPORTED_MODULE_0__.X), /* harmony export */ SessionManager: () => (/* reexport safe */ _sessionManager__WEBPACK_IMPORTED_MODULE_2__.C) /* harmony export */ }); /* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(926); /* harmony import */ var _interfaces__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(278); /* harmony import */ var _interfaces__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_interfaces__WEBPACK_IMPORTED_MODULE_1__); /* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {}; /* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _interfaces__WEBPACK_IMPORTED_MODULE_1__) if(["default","BaseSessionManager"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _interfaces__WEBPACK_IMPORTED_MODULE_1__[__WEBPACK_IMPORT_KEY__] /* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); /* harmony import */ var _sessionManager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(655); })(); module.exports = __webpack_exports__; /******/ })() ;