UNPKG

@lens-protocol/react

Version:

Interacting with the Lens Protocol API using React.

1,408 lines (1,364 loc) 808 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var authentication = require('@lens-protocol/domain/use-cases/authentication'); var gql = require('@lens-protocol/api-bindings'); var entities = require('@lens-protocol/domain/entities'); var transactions = require('@lens-protocol/domain/use-cases/transactions'); var wallets = require('@lens-protocol/domain/use-cases/wallets'); var sharedKernel = require('@lens-protocol/shared-kernel'); var jwtDecode = require('jwt-decode'); var isObject = require('lodash/isObject'); var storage = require('@lens-protocol/storage'); var zod = require('zod'); var profile = require('@lens-protocol/domain/use-cases/profile'); var publications = require('@lens-protocol/domain/use-cases/publications'); var blockchainBindings = require('@lens-protocol/blockchain-bindings'); var logger = require('@ethersproject/logger'); var ethRpcErrors = require('eth-rpc-errors'); var bytes = require('@ethersproject/bytes'); var providers = require('@ethersproject/providers'); var jsxRuntime = require('react/jsx-runtime'); var differenceBy = require('lodash/differenceBy.js'); var merge = require('lodash/merge'); var client = require('@apollo/client'); var uuid = require('uuid'); var constants = require('@ethersproject/constants'); var metadata = require('@lens-protocol/metadata'); function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var React__default = /*#__PURE__*/_interopDefault(React); var gql__namespace = /*#__PURE__*/_interopNamespace(gql); var jwtDecode__default = /*#__PURE__*/_interopDefault(jwtDecode); var isObject__default = /*#__PURE__*/_interopDefault(isObject); var differenceBy__default = /*#__PURE__*/_interopDefault(differenceBy); var merge__default = /*#__PURE__*/_interopDefault(merge); var metadata__namespace = /*#__PURE__*/_interopNamespace(metadata); function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function toPropertyKey(t) { var i = toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var BootstrapPresenter = /*#__PURE__*/function () { function BootstrapPresenter() { _classCallCheck(this, BootstrapPresenter); } _createClass(BootstrapPresenter, [{ key: "present", value: function present(session) { gql.updateSessionData(session); } }]); return BootstrapPresenter; }(); function useBootstrapController(_ref) { var credentialsGateway = _ref.credentialsGateway, credentialsFactory = _ref.credentialsFactory, logout = _ref.logout, transactionQueue = _ref.transactionQueue; var isStartedRef = React.useRef(false); React.useEffect(function () { // Protects again multiple calls to start (quite likely from `useEffect` hook in concurrent mode or in development strict mode) if (isStartedRef.current) { return; } isStartedRef.current = true; var bootstrap = new authentication.Bootstrap(credentialsGateway, credentialsFactory, transactionQueue, logout, new BootstrapPresenter()); void bootstrap.execute(); }, [credentialsFactory, credentialsGateway, logout, transactionQueue]); } function _defineProperty(obj, key, value) { key = toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _regeneratorRuntime() { _regeneratorRuntime = function () { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function (t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function (t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(typeof e + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function (e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function () { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function (e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function (t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function (t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function (t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function (t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function (e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function isWalletJwtContent(decodedJwt) { return isObject__default["default"](decodedJwt) && 'role' in decodedJwt && decodedJwt.role === 'wallet_refresh'; } function isProfileJwtContent(decodedJwt) { return isObject__default["default"](decodedJwt) && 'role' in decodedJwt && decodedJwt.role === 'profile_refresh'; } function getTokenExpDate(token) { var decodedToken = jwtDecode__default["default"](token); sharedKernel.invariant(decodedToken.exp, 'Exp date should be provided by JWT token'); return sharedKernel.DateUtils.secondsToMs(decodedToken.exp); } // Threshold in seconds that will mark token as expired even it's still valid // Adds some time for all communications that's required to refresh tokens var TOKEN_EXP_THRESHOLD = sharedKernel.DateUtils.secondsToMs(3); var JwtCredentials = /*#__PURE__*/function () { function JwtCredentials(accessToken, identityToken, refreshToken) { _classCallCheck(this, JwtCredentials); this.accessToken = accessToken; this.identityToken = identityToken; this.refreshToken = refreshToken; var decodedRefreshToken = jwtDecode__default["default"](refreshToken); if (isWalletJwtContent(decodedRefreshToken)) { this.address = decodedRefreshToken.id; this.authorizationId = decodedRefreshToken.authorizationId; return; } if (isProfileJwtContent(decodedRefreshToken)) { this.address = decodedRefreshToken.evmAddress; this.profileId = decodedRefreshToken.id; this.authorizationId = decodedRefreshToken.authorizationId; return; } sharedKernel.never('Invalid JWT format'); } _createClass(JwtCredentials, [{ key: "canRefresh", value: function canRefresh() { var now = Date.now(); var tokenExpDate = getTokenExpDate(this.refreshToken); return now < tokenExpDate - TOKEN_EXP_THRESHOLD; } }, { key: "getTokenRefreshTime", value: function getTokenRefreshTime() { if (!this.accessToken) { return 0; } var now = Date.now(); var tokenExpDate = getTokenExpDate(this.accessToken); return Math.max(tokenExpDate - now - TOKEN_EXP_THRESHOLD, 0); } }]); return JwtCredentials; }(); var AuthApi = /*#__PURE__*/function () { function AuthApi(apolloClient) { _classCallCheck(this, AuthApi); this.apolloClient = apolloClient; } _createClass(AuthApi, [{ key: "generateChallenge", value: function () { var _generateChallenge = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(request) { var result; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.apolloClient.query({ query: gql.AuthChallengeDocument, variables: { request: request }, // challenge to sign should be always a new one fetchPolicy: 'network-only' }); case 2: result = _context.sent; return _context.abrupt("return", { id: result.data.result.id, text: result.data.result.text }); case 4: case "end": return _context.stop(); } }, _callee, this); })); function generateChallenge(_x) { return _generateChallenge.apply(this, arguments); } return generateChallenge; }() }, { key: "generateCredentials", value: function () { var _generateCredentials = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(request) { var result, _result$data$result, accessToken, identityToken, refreshToken; return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.apolloClient.mutate({ mutation: gql.AuthAuthenticateDocument, variables: { request: request } }); case 2: result = _context2.sent; _result$data$result = result.data.result, accessToken = _result$data$result.accessToken, identityToken = _result$data$result.identityToken, refreshToken = _result$data$result.refreshToken; return _context2.abrupt("return", new JwtCredentials(accessToken, identityToken, refreshToken)); case 5: case "end": return _context2.stop(); } }, _callee2, this); })); function generateCredentials(_x2) { return _generateCredentials.apply(this, arguments); } return generateCredentials; }() }, { key: "refreshCredentials", value: function () { var _refreshCredentials = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(refreshToken) { var result, _result$data$result2, newAccessToken, newIdentityToken, newRefreshToken; return _regeneratorRuntime().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this.apolloClient.mutate({ mutation: gql.AuthRefreshDocument, variables: { request: { refreshToken: refreshToken } } }); case 2: result = _context3.sent; _result$data$result2 = result.data.result, newAccessToken = _result$data$result2.accessToken, newIdentityToken = _result$data$result2.identityToken, newRefreshToken = _result$data$result2.refreshToken; return _context3.abrupt("return", new JwtCredentials(newAccessToken, newIdentityToken, newRefreshToken)); case 5: case "end": return _context3.stop(); } }, _callee3, this); })); function refreshCredentials(_x3) { return _refreshCredentials.apply(this, arguments); } return refreshCredentials; }() }]); return AuthApi; }(); var CredentialsFactory = /*#__PURE__*/function () { function CredentialsFactory(auth) { _classCallCheck(this, CredentialsFactory); this.auth = auth; } _createClass(CredentialsFactory, [{ key: "renewCredentials", value: function () { var _renewCredentials = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(credentials) { var newCredentials; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: if (credentials.canRefresh()) { _context.next = 2; break; } return _context.abrupt("return", sharedKernel.failure(new authentication.CredentialsExpiredError())); case 2: _context.prev = 2; _context.next = 5; return this.auth.refreshCredentials(credentials.refreshToken); case 5: newCredentials = _context.sent; return _context.abrupt("return", sharedKernel.success(newCredentials)); case 9: _context.prev = 9; _context.t0 = _context["catch"](2); return _context.abrupt("return", sharedKernel.failure(new authentication.CredentialsExpiredError())); case 12: case "end": return _context.stop(); } }, _callee, this, [[2, 9]]); })); function renewCredentials(_x) { return _renewCredentials.apply(this, arguments); } return renewCredentials; }() }, { key: "issueCredentials", value: function () { var _issueCredentials = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(signer, using) { var challenge, result, credentials; return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.auth.generateChallenge({ "for": using, signedBy: signer.address }); case 2: challenge = _context2.sent; _context2.next = 5; return signer.signMessage(challenge.text); case 5: result = _context2.sent; if (!result.isFailure()) { _context2.next = 8; break; } return _context2.abrupt("return", result); case 8: _context2.next = 10; return this.auth.generateCredentials({ id: challenge.id, signature: result.value }); case 10: credentials = _context2.sent; return _context2.abrupt("return", sharedKernel.success(credentials)); case 12: case "end": return _context2.stop(); } }, _callee2, this); })); function issueCredentials(_x2, _x3) { return _issueCredentials.apply(this, arguments); } return issueCredentials; }() }]); return CredentialsFactory; }(); var CredentialsGateway = /*#__PURE__*/function () { function CredentialsGateway(credentialsStorage, apolloClient) { _classCallCheck(this, CredentialsGateway); this.credentialsStorage = credentialsStorage; this.apolloClient = apolloClient; } _createClass(CredentialsGateway, [{ key: "getCredentials", value: function () { var _getCredentials = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", this.credentialsStorage.get()); case 1: case "end": return _context.stop(); } }, _callee, this); })); function getCredentials() { return _getCredentials.apply(this, arguments); } return getCredentials; }() }, { key: "save", value: function () { var _save = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(credentials) { return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.credentialsStorage.set(credentials); case 2: case "end": return _context2.stop(); } }, _callee2, this); })); function save(_x) { return _save.apply(this, arguments); } return save; }() }, { key: "invalidate", value: function () { var _invalidate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(reason) { var credentials; return _regeneratorRuntime().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this.getCredentials(); case 2: credentials = _context3.sent; if (!credentials) { sharedKernel.never('User is not authenticated'); } if (!(reason === authentication.LogoutReason.USER_INITIATED)) { _context3.next = 7; break; } _context3.next = 7; return this.revoke({ authorizationId: credentials.authorizationId }); case 7: _context3.next = 9; return this.credentialsStorage.reset(); case 9: case "end": return _context3.stop(); } }, _callee3, this); })); function invalidate(_x2) { return _invalidate.apply(this, arguments); } return invalidate; }() }, { key: "revoke", value: function () { var _revoke = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(request) { return _regeneratorRuntime().wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return this.apolloClient.mutate({ mutation: gql.RevokeAuthenticationDocument, variables: { request: request } }); case 2: case "end": return _context4.stop(); } }, _callee4, this); })); function revoke(_x3) { return _revoke.apply(this, arguments); } return revoke; }() }]); return CredentialsGateway; }(); var POLLING_TIME = 1000; var lastActiveTimerId = 0; var activeTimers = new Set(); function safeSetTimeoutRec(fn, endTime, timerId, options) { var msToEnd = endTime - Date.now(); setTimeout(function () { if (!activeTimers.has(timerId)) { return; } var now = Date.now(); if (now >= endTime) { activeTimers["delete"](timerId); fn(); } else { safeSetTimeoutRec(fn, endTime, timerId, options); } }, msToEnd <= options.poolingTimeout ? msToEnd : options.poolingTimeout); } /** * Safe version of `setTimeout` that should support * 1. Large milliseconds delays (larger than 2147483647) * 2. Hibernation/Sleep * * @param fn - callback to be invoked after * @param ms - milliseconds to wait * @param options - timer options * * Note: `safeSetTimeout` should be only used when really needed * as processor overhead is bigger than with normal `setTimeout` * @returns timerId Use `clearSafeTimeout(timerId)` to cancel timeout */ function setSafeTimeout(fn, ms) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { poolingTimeout: POLLING_TIME }; var timerId = ++lastActiveTimerId; activeTimers.add(timerId); safeSetTimeoutRec(fn, Date.now() + ms, timerId, options); return timerId; } /** * Cancel timeout created with `safeSetTimeout`. */ function clearSafeTimeout(timerId) { activeTimers["delete"](timerId); } /** * Stores auth credentials. * Access token is kept in memory. * Identity token is kept in memory. * Refresh token is persisted permanently. */ var CredentialsStorage = /*#__PURE__*/function () { function CredentialsStorage(refreshTokenStorage, authApi) { _classCallCheck(this, CredentialsStorage); _defineProperty(this, "refreshTimer", null); _defineProperty(this, "refreshPromise", null); _defineProperty(this, "subscribers", new Set()); _defineProperty(this, "accessToken", null); _defineProperty(this, "identityToken", null); _defineProperty(this, "logout", null); this.refreshTokenStorage = refreshTokenStorage; this.authApi = authApi; } _createClass(CredentialsStorage, [{ key: "onExpiry", value: function onExpiry(logout) { this.logout = logout; } }, { key: "set", value: function () { var _set = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(newCredentials) { var oldCredentials; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: this.accessToken = newCredentials.accessToken; this.identityToken = newCredentials.identityToken; _context.next = 4; return this.get(); case 4: oldCredentials = _context.sent; _context.next = 7; return this.refreshTokenStorage.set({ refreshToken: newCredentials.refreshToken }); case 7: this.refreshTimer = setSafeTimeout(this.refreshToken.bind(this), newCredentials.getTokenRefreshTime()); this.notifySubscribers(newCredentials, oldCredentials); case 9: case "end": return _context.stop(); } }, _callee, this); })); function set(_x) { return _set.apply(this, arguments); } return set; }() }, { key: "get", value: function () { var _get = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { var refreshToken; return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.getRefreshToken(); case 2: refreshToken = _context2.sent; if (refreshToken) { _context2.next = 5; break; } return _context2.abrupt("return", null); case 5: return _context2.abrupt("return", new JwtCredentials(this.accessToken, this.identityToken, refreshToken)); case 6: case "end": return _context2.stop(); } }, _callee2, this); })); function get() { return _get.apply(this, arguments); } return get; }() }, { key: "reset", value: function () { var _reset = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() { return _regeneratorRuntime().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: this.accessToken = null; this.cancelScheduledRefresh(); _context3.next = 4; return this.refreshTokenStorage.reset(); case 4: case "end": return _context3.stop(); } }, _callee3, this); })); function reset() { return _reset.apply(this, arguments); } return reset; }() }, { key: "subscribe", value: function subscribe(subscriber) { var _this = this; this.subscribers.add(subscriber); return { unsubscribe: function unsubscribe() { return _this.subscribers["delete"](subscriber); } }; } }, { key: "getAccessToken", value: function getAccessToken() { return this.accessToken; } }, { key: "refreshToken", value: function () { var _refreshToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { var result; return _regeneratorRuntime().wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: if (!this.refreshPromise) { _context4.next = 2; break; } return _context4.abrupt("return", this.refreshPromise); case 2: this.refreshPromise = this.refreshCredentials(); _context4.next = 5; return this.refreshPromise; case 5: result = _context4.sent; this.refreshPromise = null; return _context4.abrupt("return", result); case 8: case "end": return _context4.stop(); } }, _callee4, this); })); function refreshToken() { return _refreshToken.apply(this, arguments); } return refreshToken; }() }, { key: "cancelScheduledRefresh", value: function cancelScheduledRefresh() { if (this.refreshTimer) { clearSafeTimeout(this.refreshTimer); } this.refreshTimer = null; } }, { key: "refreshCredentials", value: function () { var _refreshCredentials = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() { var credentials, newCredentials, _this$logout; return _regeneratorRuntime().wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return this.get(); case 2: credentials = _context5.sent; if (!(!credentials || !credentials.canRefresh())) { _context5.next = 5; break; } return _context5.abrupt("return", sharedKernel.failure(new authentication.CredentialsExpiredError())); case 5: _context5.prev = 5; _context5.next = 8; return this.authApi.refreshCredentials(credentials.refreshToken); case 8: newCredentials = _context5.sent; _context5.next = 11; return this.set(newCredentials); case 11: return _context5.abrupt("return", sharedKernel.success()); case 14: _context5.prev = 14; _context5.t0 = _context5["catch"](5); _context5.next = 18; return (_this$logout = this.logout) === null || _this$logout === void 0 ? void 0 : _this$logout.execute(authentication.LogoutReason.CREDENTIALS_EXPIRED); case 18: return _context5.abrupt("return", sharedKernel.failure(new authentication.CredentialsExpiredError())); case 19: case "end": return _context5.stop(); } }, _callee5, this, [[5, 14]]); })); function refreshCredentials() { return _refreshCredentials.apply(this, arguments); } return refreshCredentials; }() }, { key: "notifySubscribers", value: function notifySubscribers(newCredentials, oldCredentials) { this.subscribers.forEach(function (callback) { return callback(newCredentials, oldCredentials); }); } }, { key: "getRefreshToken", value: function () { var _getRefreshToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() { var _result$refreshToken; var result; return _regeneratorRuntime().wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return this.refreshTokenStorage.get(); case 2: result = _context6.sent; return _context6.abrupt("return", (_result$refreshToken = result === null || result === void 0 ? void 0 : result.refreshToken) !== null && _result$refreshToken !== void 0 ? _result$refreshToken : null); case 4: case "end": return _context6.stop(); } }, _callee6, this); })); function getRefreshToken() { return _getRefreshToken.apply(this, arguments); } return getRefreshToken; }() }]); return CredentialsStorage; }(); var LogoutPresenter = /*#__PURE__*/function () { function LogoutPresenter() { _classCallCheck(this, LogoutPresenter); } _createClass(LogoutPresenter, [{ key: "logout", value: function logout(reason) { gql.updateSessionData(authentication.anonymousSessionData(reason)); } }]); return LogoutPresenter; }(); function createRefreshTokenStorage(storageProvider, namespace) { var schema = new storage.CredentialsStorageSchema("lens.".concat(namespace, ".credentials")); return storage.Storage.createForSchema(schema, storageProvider); } /* eslint-disable no-console */ var ConsoleLoggerLevel = /*#__PURE__*/function (ConsoleLoggerLevel) { ConsoleLoggerLevel[ConsoleLoggerLevel["Info"] = 1] = "Info"; ConsoleLoggerLevel[ConsoleLoggerLevel["Warn"] = 2] = "Warn"; ConsoleLoggerLevel[ConsoleLoggerLevel["Error"] = 3] = "Error"; ConsoleLoggerLevel[ConsoleLoggerLevel["Fatal"] = 4] = "Fatal"; return ConsoleLoggerLevel; }({}); var ConsoleLogger = /*#__PURE__*/function () { function ConsoleLogger() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, level = _ref.level; _classCallCheck(this, ConsoleLogger); this.level = level !== null && level !== void 0 ? level : ConsoleLoggerLevel.Warn; } _createClass(ConsoleLogger, [{ key: "info", value: function info(message, data) { if (this.level > ConsoleLoggerLevel.Info) return; console.info(message, data); } }, { key: "warn", value: function warn(message, data) { if (this.level > ConsoleLoggerLevel.Warn) return; console.error(message, data); } }, { key: "error", value: function error(_error, message, data) { if (this.level > ConsoleLoggerLevel.Error) return; console.error(message, _error, data); } }, { key: "fatal", value: function fatal(error, message, data) { if (this.level > ConsoleLoggerLevel.Fatal) return; console.error(message, error, data); } }]); return ConsoleLogger; }(); /** * The interface used to access the `Signer` and `Provider` instances. */ /** * `<BaseProvider>` configuration * * @internal */ /** * Internal configuration * * @internal */ function buildImageTransform(width) { var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto'; return { width: width, height: height, keepAspectRatio: true }; } var defaultQueryParams = { image: { small: buildImageTransform('400px'), medium: buildImageTransform('700px') }, profile: { thumbnail: buildImageTransform('256px'), cover: buildImageTransform('1100px') }, fxRateFor: gql.SupportedFiatType.Usd, statsFor: [] }; function resolveFragmentVariables(params) { var _params$fxRateFor, _params$image$medium, _params$image, _params$image$small, _params$image2, _params$profile$cover, _params$profile, _params$profile$metad, _params$profile2, _params$profile$thumb, _params$profile3, _params$statsFor; return { fxRateFor: (_params$fxRateFor = params.fxRateFor) !== null && _params$fxRateFor !== void 0 ? _params$fxRateFor : defaultQueryParams.fxRateFor, imageMediumSize: (_params$image$medium = (_params$image = params.image) === null || _params$image === void 0 ? void 0 : _params$image.medium) !== null && _params$image$medium !== void 0 ? _params$image$medium : defaultQueryParams.image.medium, imageSmallSize: (_params$image$small = (_params$image2 = params.image) === null || _params$image2 === void 0 ? void 0 : _params$image2.small) !== null && _params$image$small !== void 0 ? _params$image$small : defaultQueryParams.image.small, profileCoverSize: (_params$profile$cover = (_params$profile = params.profile) === null || _params$profile === void 0 ? void 0 : _params$profile.cover) !== null && _params$profile$cover !== void 0 ? _params$profile$cover : defaultQueryParams.profile.cover, profileMetadataSource: (_params$profile$metad = (_params$profile2 = params.profile) === null || _params$profile2 === void 0 ? void 0 : _params$profile2.metadataSource) !== null && _params$profile$metad !== void 0 ? _params$profile$metad : null, profilePictureSize: (_params$profile$thumb = (_params$profile3 = params.profile) === null || _params$profile3 === void 0 ? void 0 : _params$profile3.thumbnail) !== null && _params$profile$thumb !== void 0 ? _params$profile$thumb : defaultQueryParams.profile.thumbnail, statsFor: (_params$statsFor = params.statsFor) !== null && _params$statsFor !== void 0 ? _params$statsFor : defaultQueryParams.statsFor }; } /** * @internal */ function resolveConfig(config) { var _config$debug, _config$logger, _config$sponsored, _config$params; return { debug: (_config$debug = config.debug) !== null && _config$debug !== void 0 ? _config$debug : false, logger: (_config$logger = config.logger) !== null && _config$logger !== void 0 ? _config$logger : new ConsoleLogger(), storage: config.storage, environment: config.environment, bindings: config.bindings, origin: config.origin, sponsored: (_config$sponsored = config.sponsored) !== null && _config$sponsored !== void 0 ? _config$sponsored : true, fragmentVariables: resolveFragmentVariables((_config$params = config.params) !== null && _config$params !== void 0 ? _config$params : defaultQueryParams) }; } var DisableConversationsGateway = /*#__PURE__*/function () { function DisableConversationsGateway(storage) { _classCallCheck(this, DisableConversationsGateway); this.storage = storage; } _createClass(DisableConversationsGateway, [{ key: "reset", value: function () { var _reset = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", this.storage.reset()); case 1: case "end": return _context.stop(); } }, _callee, this); })); function reset() { return _reset.apply(this, arguments); } return reset; }() }]); return DisableConversationsGateway; }(); var KeyBundleData = zod.z.string(); function createInboxKeyStorage(storageProvider, namespace) { var notificationStorageDataSchema = new storage.BaseStorageSchema("lens.".concat(namespace, ".inbox.keyBundle"), KeyBundleData); return storage.Storage.createForSchema(notificationStorageDataSchema, storageProvider); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var ProfileCacheManager = /*#__PURE__*/function () { function ProfileCacheManager(client, variables) { _classCallCheck(this, ProfileCacheManager); this.client = client; this.variables = variables; } _createClass(ProfileCacheManager, [{ key: "fetchProfileById", value: function () { var _fetchProfileById = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(id) { return _regenerato