@lens-protocol/react
Version:
Interacting with the Lens Protocol API using React.
1,408 lines (1,364 loc) • 808 kB
JavaScript
'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