1 |
- {"ast":null,"code":"\"use strict\";\n\nvar _asyncToGenerator = require(\"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/asyncToGenerator.js\").default;\nvar _Object$defineProperty2 = require(\"@babel/runtime-corejs3/core-js-stable/object/define-property\");\nvar _interopRequireDefault = require(\"@babel/runtime-corejs3/helpers/interopRequireDefault\");\n_Object$defineProperty2(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _promise = _interopRequireDefault(require(\"@babel/runtime-corejs3/core-js-stable/promise\"));\nvar _defineProperty = _interopRequireDefault(require(\"@babel/runtime-corejs3/core-js-stable/object/define-property\"));\nvar _stringify = _interopRequireDefault(require(\"@babel/runtime-corejs3/core-js-stable/json/stringify\"));\nvar _CoreManager = _interopRequireDefault(require(\"./CoreManager\"));\nvar _isRevocableSession = _interopRequireDefault(require(\"./isRevocableSession\"));\nvar _ParseError = _interopRequireDefault(require(\"./ParseError\"));\nvar _ParseObject = _interopRequireDefault(require(\"./ParseObject\"));\nvar _Storage = _interopRequireDefault(require(\"./Storage\"));\nconst CURRENT_USER_KEY = 'currentUser';\nlet canUseCurrentUser = !_CoreManager.default.get('IS_NODE');\nlet currentUserCacheMatchesDisk = false;\nlet currentUserCache = null;\nconst authProviders = {};\n\n/**\n * <p>A Parse.User object is a local representation of a user persisted to the\n * Parse cloud. This class is a subclass of a Parse.Object, and retains the\n * same functionality of a Parse.Object, but also extends it with various\n * user specific methods, like authentication, signing up, and validation of\n * uniqueness.</p>\n *\n * @alias Parse.User\n * @augments Parse.Object\n */\nclass ParseUser extends _ParseObject.default {\n /**\n * @param {object} attributes The initial set of data to store in the user.\n */\n constructor(attributes) {\n super('_User');\n if (attributes && typeof attributes === 'object') {\n if (!this.set(attributes || {})) {\n throw new Error(\"Can't create an invalid Parse User\");\n }\n }\n }\n\n /**\n * Request a revocable session token to replace the older style of token.\n *\n * @param {object} options\n * @returns {Promise} A promise that is resolved when the replacement\n * token has been fetched.\n */\n _upgradeToRevocableSession(options) {\n options = options || {};\n const upgradeOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n upgradeOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.upgradeToRevocableSession(this, upgradeOptions);\n }\n\n /**\n * Parse allows you to link your users with {@link https://docs.parseplatform.org/parse-server/guide/#oauth-and-3rd-party-authentication 3rd party authentication}, enabling\n * your users to sign up or log into your application using their existing identities.\n * Since 2.9.0\n *\n * @see {@link https://docs.parseplatform.org/js/guide/#linking-users Linking Users}\n * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider}\n * @param {object} options\n * @param {object} [options.authData] AuthData to link with\n * <ul>\n * <li>If provider is string, options is {@link http://docs.parseplatform.org/parse-server/guide/#supported-3rd-party-authentications authData}\n * <li>If provider is AuthProvider, options is saveOpts\n * </ul>\n * @param {object} saveOpts useMasterKey / sessionToken\n * @returns {Promise} A promise that is fulfilled with the user is linked\n */\n linkWith(provider, options) {\n let saveOpts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n saveOpts.sessionToken = saveOpts.sessionToken || this.getSessionToken() || '';\n let authType;\n if (typeof provider === 'string') {\n authType = provider;\n if (authProviders[provider]) {\n provider = authProviders[provider];\n } else {\n const authProvider = {\n restoreAuthentication() {\n return true;\n },\n getAuthType() {\n return authType;\n }\n };\n authProviders[authProvider.getAuthType()] = authProvider;\n provider = authProvider;\n }\n } else {\n authType = provider.getAuthType();\n }\n if (options && options.hasOwnProperty('authData')) {\n const authData = this.get('authData') || {};\n if (typeof authData !== 'object') {\n throw new Error('Invalid type: authData field should be an object');\n }\n authData[authType] = options.authData;\n const oldAnonymousData = authData.anonymous;\n this.stripAnonymity();\n const controller = _CoreManager.default.getUserController();\n return controller.linkWith(this, authData, saveOpts).catch(e => {\n delete authData[authType];\n this.restoreAnonimity(oldAnonymousData);\n throw e;\n });\n } else {\n return new _promise.default((resolve, reject) => {\n provider.authenticate({\n success: (provider, result) => {\n const opts = {};\n opts.authData = result;\n this.linkWith(provider, opts, saveOpts).then(() => {\n resolve(this);\n }, error => {\n reject(error);\n });\n },\n error: (provider, error) => {\n reject(error);\n }\n });\n });\n }\n }\n\n /**\n * @param provider\n * @param options\n * @param {object} [options.authData]\n * @param saveOpts\n * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith}\n * @returns {Promise}\n */\n _linkWith(provider, options) {\n let saveOpts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.linkWith(provider, options, saveOpts);\n }\n\n /**\n * Synchronizes auth data for a provider (e.g. puts the access token in the\n * right place to be used by the Facebook SDK).\n *\n * @param provider\n */\n _synchronizeAuthData(provider) {\n if (!this.isCurrent() || !provider) {\n return;\n }\n let authType;\n if (typeof provider === 'string') {\n authType = provider;\n provider = authProviders[authType];\n } else {\n authType = provider.getAuthType();\n }\n const authData = this.get('authData');\n if (!provider || !authData || typeof authData !== 'object') {\n return;\n }\n const success = provider.restoreAuthentication(authData[authType]);\n if (!success) {\n this._unlinkFrom(provider);\n }\n }\n\n /**\n * Synchronizes authData for all providers.\n */\n _synchronizeAllAuthData() {\n const authData = this.get('authData');\n if (typeof authData !== 'object') {\n return;\n }\n for (const key in authData) {\n this._synchronizeAuthData(key);\n }\n }\n\n /**\n * Removes null values from authData (which exist temporarily for unlinking)\n */\n _cleanupAuthData() {\n if (!this.isCurrent()) {\n return;\n }\n const authData = this.get('authData');\n if (typeof authData !== 'object') {\n return;\n }\n for (const key in authData) {\n if (!authData[key]) {\n delete authData[key];\n }\n }\n }\n\n /**\n * Unlinks a user from a service.\n *\n * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider}\n * @param {object} options MasterKey / SessionToken\n * @returns {Promise} A promise that is fulfilled when the unlinking\n * finishes.\n */\n _unlinkFrom(provider, options) {\n return this.linkWith(provider, {\n authData: null\n }, options).then(() => {\n this._synchronizeAuthData(provider);\n return _promise.default.resolve(this);\n });\n }\n\n /**\n * Checks whether a user is linked to a service.\n *\n * @param {object} provider service to link to\n * @returns {boolean} true if link was successful\n */\n _isLinked(provider) {\n let authType;\n if (typeof provider === 'string') {\n authType = provider;\n } else {\n authType = provider.getAuthType();\n }\n const authData = this.get('authData') || {};\n if (typeof authData !== 'object') {\n return false;\n }\n return !!authData[authType];\n }\n\n /**\n * Deauthenticates all providers.\n */\n _logOutWithAll() {\n const authData = this.get('authData');\n if (typeof authData !== 'object') {\n return;\n }\n for (const key in authData) {\n this._logOutWith(key);\n }\n }\n\n /**\n * Deauthenticates a single provider (e.g. removing access tokens from the\n * Facebook SDK).\n *\n * @param {object} provider service to logout of\n */\n _logOutWith(provider) {\n if (!this.isCurrent()) {\n return;\n }\n if (typeof provider === 'string') {\n provider = authProviders[provider];\n }\n if (provider && provider.deauthenticate) {\n provider.deauthenticate();\n }\n }\n\n /**\n * Class instance method used to maintain specific keys when a fetch occurs.\n * Used to ensure that the session token is not lost.\n *\n * @returns {object} sessionToken\n */\n _preserveFieldsOnFetch() {\n return {\n sessionToken: this.get('sessionToken')\n };\n }\n\n /**\n * Returns true if <code>current</code> would return this user.\n *\n * @returns {boolean} true if user is cached on disk\n */\n isCurrent() {\n const current = ParseUser.current();\n return !!current && current.id === this.id;\n }\n\n /**\n * Returns true if <code>current</code> would return this user.\n *\n * @returns {Promise<boolean>} true if user is cached on disk\n */\n isCurrentAsync() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const current = yield ParseUser.currentAsync();\n return !!current && current.id === _this.id;\n })();\n }\n stripAnonymity() {\n const authData = this.get('authData');\n if (authData && typeof authData === 'object' && authData.hasOwnProperty('anonymous')) {\n // We need to set anonymous to null instead of deleting it in order to remove it from Parse.\n authData.anonymous = null;\n }\n }\n restoreAnonimity(anonymousData) {\n if (anonymousData) {\n const authData = this.get('authData');\n authData.anonymous = anonymousData;\n }\n }\n\n /**\n * Returns get(\"username\").\n *\n * @returns {string}\n */\n getUsername() {\n const username = this.get('username');\n if (username == null || typeof username === 'string') {\n return username;\n }\n return '';\n }\n\n /**\n * Calls set(\"username\", username, options) and returns the result.\n *\n * @param {string} username\n */\n setUsername(username) {\n this.stripAnonymity();\n this.set('username', username);\n }\n\n /**\n * Calls set(\"password\", password, options) and returns the result.\n *\n * @param {string} password User's Password\n */\n setPassword(password) {\n this.set('password', password);\n }\n\n /**\n * Returns get(\"email\").\n *\n * @returns {string} User's Email\n */\n getEmail() {\n const email = this.get('email');\n if (email == null || typeof email === 'string') {\n return email;\n }\n return '';\n }\n\n /**\n * Calls set(\"email\", email) and returns the result.\n *\n * @param {string} email\n * @returns {boolean}\n */\n setEmail(email) {\n return this.set('email', email);\n }\n\n /**\n * Returns the session token for this user, if the user has been logged in,\n * or if it is the result of a query with the master key. Otherwise, returns\n * undefined.\n *\n * @returns {string} the session token, or undefined\n */\n getSessionToken() {\n const token = this.get('sessionToken');\n if (token == null || typeof token === 'string') {\n return token;\n }\n return '';\n }\n\n /**\n * Checks whether this user is the current user and has been authenticated.\n *\n * @returns {boolean} whether this user is the current user and is logged in.\n */\n authenticated() {\n const current = ParseUser.current();\n return !!this.get('sessionToken') && !!current && current.id === this.id;\n }\n\n /**\n * Signs up a new user. You should call this instead of save for\n * new Parse.Users. This will create a new Parse.User on the server, and\n * also persist the session on disk so that you can access the user using\n * <code>current</code>.\n *\n * <p>A username and password must be set before calling signUp.</p>\n *\n * @param {object} attrs Extra fields to set on the new user, or null.\n * @param {object} options\n * @returns {Promise} A promise that is fulfilled when the signup\n * finishes.\n */\n signUp(attrs, options) {\n options = options || {};\n const signupOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n signupOptions.useMasterKey = options.useMasterKey;\n }\n if (options.hasOwnProperty('installationId')) {\n signupOptions.installationId = options.installationId;\n }\n if (options.hasOwnProperty('context') && Object.prototype.toString.call(options.context) === '[object Object]') {\n signupOptions.context = options.context;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.signUp(this, attrs, signupOptions);\n }\n\n /**\n * Logs in a Parse.User. On success, this saves the session to disk,\n * so you can retrieve the currently logged in user using\n * <code>current</code>.\n *\n * <p>A username and password must be set before calling logIn.</p>\n *\n * @param {object} options\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login is complete.\n */\n logIn() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n options = options || {};\n const loginOptions = {\n usePost: true\n };\n if (options.hasOwnProperty('useMasterKey')) {\n loginOptions.useMasterKey = options.useMasterKey;\n }\n if (options.hasOwnProperty('installationId')) {\n loginOptions.installationId = options.installationId;\n }\n if (options.hasOwnProperty('usePost')) {\n loginOptions.usePost = options.usePost;\n }\n if (options.hasOwnProperty('context') && Object.prototype.toString.call(options.context) === '[object Object]') {\n loginOptions.context = options.context;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.logIn(this, loginOptions);\n }\n\n /**\n * Wrap the default save behavior with functionality to save to local\n * storage if this is current user.\n *\n * @param {...any} args\n * @returns {Promise}\n */\n save() {\n var _arguments = arguments,\n _superprop_getSave = () => super.save,\n _this2 = this;\n return _asyncToGenerator(function* () {\n for (var _len = _arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = _arguments[_key];\n }\n yield _superprop_getSave().apply(_this2, args);\n const current = yield _this2.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().updateUserOnDisk(_this2);\n }\n return _this2;\n })();\n }\n\n /**\n * Wrap the default destroy behavior with functionality that logs out\n * the current user when it is destroyed\n *\n * @param {...any} args\n * @returns {Parse.User}\n */\n destroy() {\n var _arguments2 = arguments,\n _superprop_getDestroy = () => super.destroy,\n _this3 = this;\n return _asyncToGenerator(function* () {\n for (var _len2 = _arguments2.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = _arguments2[_key2];\n }\n yield _superprop_getDestroy().apply(_this3, args);\n const current = yield _this3.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().removeUserFromDisk();\n }\n return _this3;\n })();\n }\n\n /**\n * Wrap the default fetch behavior with functionality to save to local\n * storage if this is current user.\n *\n * @param {...any} args\n * @returns {Parse.User}\n */\n fetch() {\n var _arguments3 = arguments,\n _superprop_getFetch = () => super.fetch,\n _this4 = this;\n return _asyncToGenerator(function* () {\n for (var _len3 = _arguments3.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = _arguments3[_key3];\n }\n yield _superprop_getFetch().apply(_this4, args);\n const current = yield _this4.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().updateUserOnDisk(_this4);\n }\n return _this4;\n })();\n }\n\n /**\n * Wrap the default fetchWithInclude behavior with functionality to save to local\n * storage if this is current user.\n *\n * @param {...any} args\n * @returns {Parse.User}\n */\n fetchWithInclude() {\n var _arguments4 = arguments,\n _superprop_getFetchWithInclude = () => super.fetchWithInclude,\n _this5 = this;\n return _asyncToGenerator(function* () {\n for (var _len4 = _arguments4.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = _arguments4[_key4];\n }\n yield _superprop_getFetchWithInclude().apply(_this5, args);\n const current = yield _this5.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().updateUserOnDisk(_this5);\n }\n return _this5;\n })();\n }\n\n /**\n * Verify whether a given password is the password of the current user.\n *\n * @param {string} password The password to be verified.\n * @param {object} options The options.\n * @param {boolean} [options.ignoreEmailVerification] Set to `true` to bypass email verification and verify\n * the password regardless of whether the email has been verified. This requires the master key.\n * @returns {Promise} A promise that is fulfilled with a user when the password is correct.\n */\n verifyPassword(password, options) {\n const username = this.getUsername() || '';\n return ParseUser.verifyPassword(username, password, options);\n }\n static readOnlyAttributes() {\n return ['sessionToken'];\n }\n\n /**\n * Adds functionality to the existing Parse.User class.\n *\n * @param {object} protoProps A set of properties to add to the prototype\n * @param {object} classProps A set of static properties to add to the class\n * @static\n * @returns {Parse.User} The newly extended Parse.User class\n */\n static extend(protoProps, classProps) {\n if (protoProps) {\n for (const prop in protoProps) {\n if (prop !== 'className') {\n (0, _defineProperty.default)(ParseUser.prototype, prop, {\n value: protoProps[prop],\n enumerable: false,\n writable: true,\n configurable: true\n });\n }\n }\n }\n if (classProps) {\n for (const prop in classProps) {\n if (prop !== 'className') {\n (0, _defineProperty.default)(ParseUser, prop, {\n value: classProps[prop],\n enumerable: false,\n writable: true,\n configurable: true\n });\n }\n }\n }\n return ParseUser;\n }\n\n /**\n * Retrieves the currently logged in ParseUser with a valid session,\n * either from memory or localStorage, if necessary.\n *\n * @static\n * @returns {Parse.Object} The currently logged in Parse.User.\n */\n static current() {\n if (!canUseCurrentUser) {\n return null;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.currentUser();\n }\n\n /**\n * Retrieves the currently logged in ParseUser from asynchronous Storage.\n *\n * @static\n * @returns {Promise} A Promise that is resolved with the currently\n * logged in Parse User\n */\n static currentAsync() {\n if (!canUseCurrentUser) {\n return _promise.default.resolve(null);\n }\n const controller = _CoreManager.default.getUserController();\n return controller.currentUserAsync();\n }\n\n /**\n * Signs up a new user with a username (or email) and password.\n * This will create a new Parse.User on the server, and also persist the\n * session in localStorage so that you can access the user using\n * {@link #current}.\n *\n * @param {string} username The username (or email) to sign up with.\n * @param {string} password The password to sign up with.\n * @param {object} attrs Extra fields to set on the new user.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the signup completes.\n */\n static signUp(username, password, attrs, options) {\n attrs = attrs || {};\n attrs.username = username;\n attrs.password = password;\n const user = new this(attrs);\n return user.signUp({}, options);\n }\n\n /**\n * Logs in a user with a username (or email) and password. On success, this\n * saves the session to disk, so you can retrieve the currently logged in\n * user using <code>current</code>.\n *\n * @param {string} username The username (or email) to log in with.\n * @param {string} password The password to log in with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static logIn(username, password, options) {\n if (typeof username !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));\n } else if (typeof password !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));\n }\n const user = new this();\n user._finishFetch({\n username: username,\n password: password\n });\n return user.logIn(options);\n }\n\n /**\n * Logs in a user with a username (or email) and password, and authData. On success, this\n * saves the session to disk, so you can retrieve the currently logged in\n * user using <code>current</code>.\n *\n * @param {string} username The username (or email) to log in with.\n * @param {string} password The password to log in with.\n * @param {object} authData The authData to log in with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static logInWithAdditionalAuth(username, password, authData, options) {\n if (typeof username !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));\n }\n if (typeof password !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));\n }\n if (Object.prototype.toString.call(authData) !== '[object Object]') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Auth must be an object.'));\n }\n const user = new this();\n user._finishFetch({\n username: username,\n password: password,\n authData\n });\n return user.logIn(options);\n }\n\n /**\n * Logs in a user with an objectId. On success, this saves the session\n * to disk, so you can retrieve the currently logged in user using\n * <code>current</code>.\n *\n * @param {string} userId The objectId for the user.\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static loginAs(userId) {\n if (!userId) {\n throw new _ParseError.default(_ParseError.default.USERNAME_MISSING, 'Cannot log in as user with an empty user id');\n }\n const controller = _CoreManager.default.getUserController();\n const user = new this();\n return controller.loginAs(user, userId);\n }\n\n /**\n * Logs in a user with a session token. On success, this saves the session\n * to disk, so you can retrieve the currently logged in user using\n * <code>current</code>.\n *\n * @param {string} sessionToken The sessionToken to log in with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static become(sessionToken, options) {\n if (!canUseCurrentUser) {\n throw new Error('It is not memory-safe to become a user in a server environment');\n }\n options = options || {};\n const becomeOptions = {\n sessionToken: sessionToken\n };\n if (options.hasOwnProperty('useMasterKey')) {\n becomeOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n const user = new this();\n return controller.become(user, becomeOptions);\n }\n\n /**\n * Retrieves a user with a session token.\n *\n * @param {string} sessionToken The sessionToken to get user with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user is fetched.\n */\n static me(sessionToken) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const controller = _CoreManager.default.getUserController();\n const meOptions = {\n sessionToken: sessionToken\n };\n if (options.useMasterKey) {\n meOptions.useMasterKey = options.useMasterKey;\n }\n const user = new this();\n return controller.me(user, meOptions);\n }\n\n /**\n * Logs in a user with a session token. On success, this saves the session\n * to disk, so you can retrieve the currently logged in user using\n * <code>current</code>. If there is no session token the user will not logged in.\n *\n * @param {object} userJSON The JSON map of the User's data\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static hydrate(userJSON) {\n const controller = _CoreManager.default.getUserController();\n const user = new this();\n return controller.hydrate(user, userJSON);\n }\n\n /**\n * Static version of {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith}\n *\n * @param provider\n * @param options\n * @param {object} [options.authData]\n * @param saveOpts\n * @static\n * @returns {Promise}\n */\n static logInWith(provider, options, saveOpts) {\n const user = new this();\n return user.linkWith(provider, options, saveOpts);\n }\n\n /**\n * Logs out the currently logged in user session. This will remove the\n * session from disk, log out of linked services, and future calls to\n * <code>current</code> will return <code>null</code>.\n *\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is resolved when the session is\n * destroyed on the server.\n */\n static logOut() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const controller = _CoreManager.default.getUserController();\n return controller.logOut(options);\n }\n\n /**\n * Requests a password reset email to be sent to the specified email address\n * associated with the user account. This email allows the user to securely\n * reset their password on the Parse site.\n *\n * @param {string} email The email address associated with the user that\n * forgot their password.\n * @param {object} options\n * @static\n * @returns {Promise}\n */\n static requestPasswordReset(email, options) {\n options = options || {};\n const requestOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n requestOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.requestPasswordReset(email, requestOptions);\n }\n\n /**\n * Request an email verification.\n *\n * @param {string} email The email address associated with the user that\n * needs to verify their email.\n * @param {object} options\n * @static\n * @returns {Promise}\n */\n static requestEmailVerification(email, options) {\n options = options || {};\n const requestOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n requestOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.requestEmailVerification(email, requestOptions);\n }\n\n /**\n * Verify whether a given password is the password of the current user.\n * @static\n *\n * @param {string} username The username of the user whose password should be verified.\n * @param {string} password The password to be verified.\n * @param {object} options The options.\n * @param {boolean} [options.ignoreEmailVerification] Set to `true` to bypass email verification and verify\n * the password regardless of whether the email has been verified. This requires the master key.\n * @returns {Promise} A promise that is fulfilled with a user when the password is correct.\n */\n static verifyPassword(username, password, options) {\n if (typeof username !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));\n }\n if (typeof password !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));\n }\n const controller = _CoreManager.default.getUserController();\n return controller.verifyPassword(username, password, options || {});\n }\n\n /**\n * Allow someone to define a custom User class without className\n * being rewritten to _User. The default behavior is to rewrite\n * User to _User for legacy reasons. This allows developers to\n * override that behavior.\n *\n * @param {boolean} isAllowed Whether or not to allow custom User class\n * @static\n */\n static allowCustomUserClass(isAllowed) {\n _CoreManager.default.set('PERFORM_USER_REWRITE', !isAllowed);\n }\n\n /**\n * Allows a legacy application to start using revocable sessions. If the\n * current session token is not revocable, a request will be made for a new,\n * revocable session.\n * It is not necessary to call this method from cloud code unless you are\n * handling user signup or login from the server side. In a cloud code call,\n * this function will not attempt to upgrade the current token.\n *\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is resolved when the process has\n * completed. If a replacement session token is requested, the promise\n * will be resolved after a new token has been fetched.\n */\n static enableRevocableSession(options) {\n options = options || {};\n _CoreManager.default.set('FORCE_REVOCABLE_SESSION', true);\n if (canUseCurrentUser) {\n const current = ParseUser.current();\n if (current) {\n return current._upgradeToRevocableSession(options);\n }\n }\n return _promise.default.resolve();\n }\n\n /**\n * Enables the use of become or the current user in a server\n * environment. These features are disabled by default, since they depend on\n * global objects that are not memory-safe for most servers.\n *\n * @static\n */\n static enableUnsafeCurrentUser() {\n canUseCurrentUser = true;\n }\n\n /**\n * Disables the use of become or the current user in any environment.\n * These features are disabled on servers by default, since they depend on\n * global objects that are not memory-safe for most servers.\n *\n * @static\n */\n static disableUnsafeCurrentUser() {\n canUseCurrentUser = false;\n }\n\n /**\n * When registering users with {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} a basic auth provider\n * is automatically created for you.\n *\n * For advanced authentication, you can register an Auth provider to\n * implement custom authentication, deauthentication.\n *\n * @param provider\n * @see {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider}\n * @see {@link https://docs.parseplatform.org/js/guide/#custom-authentication-module Custom Authentication Module}\n * @static\n */\n static _registerAuthenticationProvider(provider) {\n authProviders[provider.getAuthType()] = provider;\n // Synchronize the current user with the auth provider.\n ParseUser.currentAsync().then(current => {\n if (current) {\n current._synchronizeAuthData(provider.getAuthType());\n }\n });\n }\n\n /**\n * @param provider\n * @param options\n * @param {object} [options.authData]\n * @param saveOpts\n * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#logInWith logInWith}\n * @static\n * @returns {Promise}\n */\n static _logInWith(provider, options, saveOpts) {\n const user = new this();\n return user.linkWith(provider, options, saveOpts);\n }\n static _clearCache() {\n currentUserCache = null;\n currentUserCacheMatchesDisk = false;\n }\n static _setCurrentUserCache(user) {\n currentUserCache = user;\n }\n}\n_ParseObject.default.registerSubclass('_User', ParseUser);\nconst DefaultController = {\n updateUserOnDisk(user) {\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n const json = user.toJSON();\n delete json.password;\n json.className = '_User';\n let userData = (0, _stringify.default)(json);\n if (_CoreManager.default.get('ENCRYPTED_USER')) {\n const crypto = _CoreManager.default.getCryptoController();\n userData = crypto.encrypt(json, _CoreManager.default.get('ENCRYPTED_KEY'));\n }\n return _Storage.default.setItemAsync(path, userData).then(() => {\n return user;\n });\n },\n removeUserFromDisk() {\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n currentUserCacheMatchesDisk = true;\n currentUserCache = null;\n return _Storage.default.removeItemAsync(path);\n },\n setCurrentUser(user) {\n currentUserCache = user;\n user._cleanupAuthData();\n user._synchronizeAllAuthData();\n return DefaultController.updateUserOnDisk(user);\n },\n currentUser() {\n if (currentUserCache) {\n return currentUserCache;\n }\n if (currentUserCacheMatchesDisk) {\n return null;\n }\n if (_Storage.default.async()) {\n throw new Error('Cannot call currentUser() when using a platform with an async ' + 'storage system. Call currentUserAsync() instead.');\n }\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n let userData = _Storage.default.getItem(path);\n currentUserCacheMatchesDisk = true;\n if (!userData) {\n currentUserCache = null;\n return null;\n }\n if (_CoreManager.default.get('ENCRYPTED_USER')) {\n const crypto = _CoreManager.default.getCryptoController();\n userData = crypto.decrypt(userData, _CoreManager.default.get('ENCRYPTED_KEY'));\n }\n userData = JSON.parse(userData);\n if (!userData.className) {\n userData.className = '_User';\n }\n if (userData._id) {\n if (userData.objectId !== userData._id) {\n userData.objectId = userData._id;\n }\n delete userData._id;\n }\n if (userData._sessionToken) {\n userData.sessionToken = userData._sessionToken;\n delete userData._sessionToken;\n }\n const current = _ParseObject.default.fromJSON(userData);\n currentUserCache = current;\n current._synchronizeAllAuthData();\n return current;\n },\n currentUserAsync() {\n if (currentUserCache) {\n return _promise.default.resolve(currentUserCache);\n }\n if (currentUserCacheMatchesDisk) {\n return _promise.default.resolve(null);\n }\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n return _Storage.default.getItemAsync(path).then(userData => {\n currentUserCacheMatchesDisk = true;\n if (!userData) {\n currentUserCache = null;\n return _promise.default.resolve(null);\n }\n if (_CoreManager.default.get('ENCRYPTED_USER')) {\n const crypto = _CoreManager.default.getCryptoController();\n userData = crypto.decrypt(userData.toString(), _CoreManager.default.get('ENCRYPTED_KEY'));\n }\n userData = JSON.parse(userData);\n if (!userData.className) {\n userData.className = '_User';\n }\n if (userData._id) {\n if (userData.objectId !== userData._id) {\n userData.objectId = userData._id;\n }\n delete userData._id;\n }\n if (userData._sessionToken) {\n userData.sessionToken = userData._sessionToken;\n delete userData._sessionToken;\n }\n const current = _ParseObject.default.fromJSON(userData);\n currentUserCache = current;\n current._synchronizeAllAuthData();\n return _promise.default.resolve(current);\n });\n },\n signUp(user, attrs, options) {\n const username = attrs && attrs.username || user.get('username');\n const password = attrs && attrs.password || user.get('password');\n if (!username || !username.length) {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Cannot sign up user with an empty username.'));\n }\n if (!password || !password.length) {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Cannot sign up user with an empty password.'));\n }\n return user.save(attrs, options).then(() => {\n // Clear the password field\n user._finishFetch({\n password: undefined\n });\n if (canUseCurrentUser) {\n return DefaultController.setCurrentUser(user);\n }\n return user;\n });\n },\n logIn(user, options) {\n const RESTController = _CoreManager.default.getRESTController();\n const stateController = _CoreManager.default.getObjectStateController();\n const auth = {\n username: user.get('username'),\n password: user.get('password'),\n authData: user.get('authData')\n };\n return RESTController.request(options.usePost ? 'POST' : 'GET', 'login', auth, options).then(response => {\n user._migrateId(response.objectId);\n user._setExisted(true);\n stateController.setPendingOp(user._getStateIdentifier(), 'username', undefined);\n stateController.setPendingOp(user._getStateIdentifier(), 'password', undefined);\n response.password = undefined;\n user._finishFetch(response);\n if (!canUseCurrentUser) {\n // We can't set the current user, so just return the one we logged in\n return _promise.default.resolve(user);\n }\n return DefaultController.setCurrentUser(user);\n });\n },\n loginAs(user, userId) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('POST', 'loginAs', {\n userId\n }, {\n useMasterKey: true\n }).then(response => {\n user._finishFetch(response);\n user._setExisted(true);\n if (!canUseCurrentUser) {\n return _promise.default.resolve(user);\n }\n return DefaultController.setCurrentUser(user);\n });\n },\n become(user, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('GET', 'users/me', {}, options).then(response => {\n user._finishFetch(response);\n user._setExisted(true);\n return DefaultController.setCurrentUser(user);\n });\n },\n hydrate(user, userJSON) {\n user._finishFetch(userJSON);\n user._setExisted(true);\n if (userJSON.sessionToken && canUseCurrentUser) {\n return DefaultController.setCurrentUser(user);\n } else {\n return _promise.default.resolve(user);\n }\n },\n me(user, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('GET', 'users/me', {}, options).then(response => {\n user._finishFetch(response);\n user._setExisted(true);\n return user;\n });\n },\n logOut(options) {\n const RESTController = _CoreManager.default.getRESTController();\n if (options.sessionToken) {\n return RESTController.request('POST', 'logout', {}, options);\n }\n return DefaultController.currentUserAsync().then(currentUser => {\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n let promise = _Storage.default.removeItemAsync(path);\n if (currentUser !== null) {\n const currentSession = currentUser.getSessionToken();\n if (currentSession && (0, _isRevocableSession.default)(currentSession)) {\n promise = promise.then(() => {\n return RESTController.request('POST', 'logout', {}, {\n sessionToken: currentSession\n });\n });\n }\n currentUser._logOutWithAll();\n currentUser._finishFetch({\n sessionToken: undefined\n });\n }\n currentUserCacheMatchesDisk = true;\n currentUserCache = null;\n return promise;\n });\n },\n requestPasswordReset(email, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('POST', 'requestPasswordReset', {\n email: email\n }, options);\n },\n upgradeToRevocableSession(user, options) {\n return _asyncToGenerator(function* () {\n const token = user.getSessionToken();\n if (!token) {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.SESSION_MISSING, 'Cannot upgrade a user with no session token'));\n }\n options.sessionToken = token;\n const RESTController = _CoreManager.default.getRESTController();\n const result = yield RESTController.request('POST', 'upgradeToRevocableSession', {}, options);\n user._finishFetch({\n sessionToken: (result === null || result === void 0 ? void 0 : result.sessionToken) || ''\n });\n const current = yield user.isCurrentAsync();\n if (current) {\n return DefaultController.setCurrentUser(user);\n }\n return _promise.default.resolve(user);\n })();\n },\n linkWith(user, authData, options) {\n return user.save({\n authData\n }, options).then(() => {\n if (canUseCurrentUser) {\n return DefaultController.setCurrentUser(user);\n }\n return user;\n });\n },\n verifyPassword(username, password, options) {\n const RESTController = _CoreManager.default.getRESTController();\n const data = {\n username,\n password,\n ...(options.ignoreEmailVerification !== undefined && {\n ignoreEmailVerification: options.ignoreEmailVerification\n })\n };\n return RESTController.request('GET', 'verifyPassword', data, options);\n },\n requestEmailVerification(email, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('POST', 'verificationEmailRequest', {\n email: email\n }, options);\n }\n};\n_CoreManager.default.setParseUser(ParseUser);\n_CoreManager.default.setUserController(DefaultController);\nvar _default = exports.default = ParseUser;","map":{"version":3,"names":["_asyncToGenerator","require","default","_Object$defineProperty2","_interopRequireDefault","exports","value","_promise","_defineProperty","_stringify","_CoreManager","_isRevocableSession","_ParseError","_ParseObject","_Storage","CURRENT_USER_KEY","canUseCurrentUser","get","currentUserCacheMatchesDisk","currentUserCache","authProviders","ParseUser","constructor","attributes","set","Error","_upgradeToRevocableSession","options","upgradeOptions","hasOwnProperty","useMasterKey","controller","getUserController","upgradeToRevocableSession","linkWith","provider","saveOpts","arguments","length","undefined","sessionToken","getSessionToken","authType","authProvider","restoreAuthentication","getAuthType","authData","oldAnonymousData","anonymous","stripAnonymity","catch","e","restoreAnonimity","resolve","reject","authenticate","success","result","opts","then","error","_linkWith","_synchronizeAuthData","isCurrent","_unlinkFrom","_synchronizeAllAuthData","key","_cleanupAuthData","_isLinked","_logOutWithAll","_logOutWith","deauthenticate","_preserveFieldsOnFetch","current","id","isCurrentAsync","_this","currentAsync","anonymousData","getUsername","username","setUsername","setPassword","password","getEmail","email","setEmail","token","authenticated","signUp","attrs","signupOptions","installationId","Object","prototype","toString","call","context","logIn","loginOptions","usePost","save","_arguments","_superprop_getSave","_this2","_len","args","Array","_key","apply","updateUserOnDisk","destroy","_arguments2","_superprop_getDestroy","_this3","_len2","_key2","removeUserFromDisk","fetch","_arguments3","_superprop_getFetch","_this4","_len3","_key3","fetchWithInclude","_arguments4","_superprop_getFetchWithInclude","_this5","_len4","_key4","verifyPassword","readOnlyAttributes","extend","protoProps","classProps","prop","enumerable","writable","configurable","currentUser","currentUserAsync","user","OTHER_CAUSE","_finishFetch","logInWithAdditionalAuth","loginAs","userId","USERNAME_MISSING","become","becomeOptions","me","meOptions","hydrate","userJSON","logInWith","logOut","requestPasswordReset","requestOptions","requestEmailVerification","allowCustomUserClass","isAllowed","enableRevocableSession","enableUnsafeCurrentUser","disableUnsafeCurrentUser","_registerAuthenticationProvider","_logInWith","_clearCache","_setCurrentUserCache","registerSubclass","DefaultController","path","generatePath","json","toJSON","className","userData","crypto","getCryptoController","encrypt","setItemAsync","removeItemAsync","setCurrentUser","async","getItem","decrypt","JSON","parse","_id","objectId","_sessionToken","fromJSON","getItemAsync","RESTController","getRESTController","stateController","getObjectStateController","auth","request","response","_migrateId","_setExisted","setPendingOp","_getStateIdentifier","promise","currentSession","SESSION_MISSING","data","ignoreEmailVerification","setParseUser","setUserController","_default"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/parse/lib/browser/ParseUser.js"],"sourcesContent":["\"use strict\";\n\nvar _Object$defineProperty2 = require(\"@babel/runtime-corejs3/core-js-stable/object/define-property\");\nvar _interopRequireDefault = require(\"@babel/runtime-corejs3/helpers/interopRequireDefault\");\n_Object$defineProperty2(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _promise = _interopRequireDefault(require(\"@babel/runtime-corejs3/core-js-stable/promise\"));\nvar _defineProperty = _interopRequireDefault(require(\"@babel/runtime-corejs3/core-js-stable/object/define-property\"));\nvar _stringify = _interopRequireDefault(require(\"@babel/runtime-corejs3/core-js-stable/json/stringify\"));\nvar _CoreManager = _interopRequireDefault(require(\"./CoreManager\"));\nvar _isRevocableSession = _interopRequireDefault(require(\"./isRevocableSession\"));\nvar _ParseError = _interopRequireDefault(require(\"./ParseError\"));\nvar _ParseObject = _interopRequireDefault(require(\"./ParseObject\"));\nvar _Storage = _interopRequireDefault(require(\"./Storage\"));\nconst CURRENT_USER_KEY = 'currentUser';\nlet canUseCurrentUser = !_CoreManager.default.get('IS_NODE');\nlet currentUserCacheMatchesDisk = false;\nlet currentUserCache = null;\nconst authProviders = {};\n\n/**\n * <p>A Parse.User object is a local representation of a user persisted to the\n * Parse cloud. This class is a subclass of a Parse.Object, and retains the\n * same functionality of a Parse.Object, but also extends it with various\n * user specific methods, like authentication, signing up, and validation of\n * uniqueness.</p>\n *\n * @alias Parse.User\n * @augments Parse.Object\n */\nclass ParseUser extends _ParseObject.default {\n /**\n * @param {object} attributes The initial set of data to store in the user.\n */\n constructor(attributes) {\n super('_User');\n if (attributes && typeof attributes === 'object') {\n if (!this.set(attributes || {})) {\n throw new Error(\"Can't create an invalid Parse User\");\n }\n }\n }\n\n /**\n * Request a revocable session token to replace the older style of token.\n *\n * @param {object} options\n * @returns {Promise} A promise that is resolved when the replacement\n * token has been fetched.\n */\n _upgradeToRevocableSession(options) {\n options = options || {};\n const upgradeOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n upgradeOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.upgradeToRevocableSession(this, upgradeOptions);\n }\n\n /**\n * Parse allows you to link your users with {@link https://docs.parseplatform.org/parse-server/guide/#oauth-and-3rd-party-authentication 3rd party authentication}, enabling\n * your users to sign up or log into your application using their existing identities.\n * Since 2.9.0\n *\n * @see {@link https://docs.parseplatform.org/js/guide/#linking-users Linking Users}\n * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider}\n * @param {object} options\n * @param {object} [options.authData] AuthData to link with\n * <ul>\n * <li>If provider is string, options is {@link http://docs.parseplatform.org/parse-server/guide/#supported-3rd-party-authentications authData}\n * <li>If provider is AuthProvider, options is saveOpts\n * </ul>\n * @param {object} saveOpts useMasterKey / sessionToken\n * @returns {Promise} A promise that is fulfilled with the user is linked\n */\n linkWith(provider, options) {\n let saveOpts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n saveOpts.sessionToken = saveOpts.sessionToken || this.getSessionToken() || '';\n let authType;\n if (typeof provider === 'string') {\n authType = provider;\n if (authProviders[provider]) {\n provider = authProviders[provider];\n } else {\n const authProvider = {\n restoreAuthentication() {\n return true;\n },\n getAuthType() {\n return authType;\n }\n };\n authProviders[authProvider.getAuthType()] = authProvider;\n provider = authProvider;\n }\n } else {\n authType = provider.getAuthType();\n }\n if (options && options.hasOwnProperty('authData')) {\n const authData = this.get('authData') || {};\n if (typeof authData !== 'object') {\n throw new Error('Invalid type: authData field should be an object');\n }\n authData[authType] = options.authData;\n const oldAnonymousData = authData.anonymous;\n this.stripAnonymity();\n const controller = _CoreManager.default.getUserController();\n return controller.linkWith(this, authData, saveOpts).catch(e => {\n delete authData[authType];\n this.restoreAnonimity(oldAnonymousData);\n throw e;\n });\n } else {\n return new _promise.default((resolve, reject) => {\n provider.authenticate({\n success: (provider, result) => {\n const opts = {};\n opts.authData = result;\n this.linkWith(provider, opts, saveOpts).then(() => {\n resolve(this);\n }, error => {\n reject(error);\n });\n },\n error: (provider, error) => {\n reject(error);\n }\n });\n });\n }\n }\n\n /**\n * @param provider\n * @param options\n * @param {object} [options.authData]\n * @param saveOpts\n * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith}\n * @returns {Promise}\n */\n _linkWith(provider, options) {\n let saveOpts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.linkWith(provider, options, saveOpts);\n }\n\n /**\n * Synchronizes auth data for a provider (e.g. puts the access token in the\n * right place to be used by the Facebook SDK).\n *\n * @param provider\n */\n _synchronizeAuthData(provider) {\n if (!this.isCurrent() || !provider) {\n return;\n }\n let authType;\n if (typeof provider === 'string') {\n authType = provider;\n provider = authProviders[authType];\n } else {\n authType = provider.getAuthType();\n }\n const authData = this.get('authData');\n if (!provider || !authData || typeof authData !== 'object') {\n return;\n }\n const success = provider.restoreAuthentication(authData[authType]);\n if (!success) {\n this._unlinkFrom(provider);\n }\n }\n\n /**\n * Synchronizes authData for all providers.\n */\n _synchronizeAllAuthData() {\n const authData = this.get('authData');\n if (typeof authData !== 'object') {\n return;\n }\n for (const key in authData) {\n this._synchronizeAuthData(key);\n }\n }\n\n /**\n * Removes null values from authData (which exist temporarily for unlinking)\n */\n _cleanupAuthData() {\n if (!this.isCurrent()) {\n return;\n }\n const authData = this.get('authData');\n if (typeof authData !== 'object') {\n return;\n }\n for (const key in authData) {\n if (!authData[key]) {\n delete authData[key];\n }\n }\n }\n\n /**\n * Unlinks a user from a service.\n *\n * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider}\n * @param {object} options MasterKey / SessionToken\n * @returns {Promise} A promise that is fulfilled when the unlinking\n * finishes.\n */\n _unlinkFrom(provider, options) {\n return this.linkWith(provider, {\n authData: null\n }, options).then(() => {\n this._synchronizeAuthData(provider);\n return _promise.default.resolve(this);\n });\n }\n\n /**\n * Checks whether a user is linked to a service.\n *\n * @param {object} provider service to link to\n * @returns {boolean} true if link was successful\n */\n _isLinked(provider) {\n let authType;\n if (typeof provider === 'string') {\n authType = provider;\n } else {\n authType = provider.getAuthType();\n }\n const authData = this.get('authData') || {};\n if (typeof authData !== 'object') {\n return false;\n }\n return !!authData[authType];\n }\n\n /**\n * Deauthenticates all providers.\n */\n _logOutWithAll() {\n const authData = this.get('authData');\n if (typeof authData !== 'object') {\n return;\n }\n for (const key in authData) {\n this._logOutWith(key);\n }\n }\n\n /**\n * Deauthenticates a single provider (e.g. removing access tokens from the\n * Facebook SDK).\n *\n * @param {object} provider service to logout of\n */\n _logOutWith(provider) {\n if (!this.isCurrent()) {\n return;\n }\n if (typeof provider === 'string') {\n provider = authProviders[provider];\n }\n if (provider && provider.deauthenticate) {\n provider.deauthenticate();\n }\n }\n\n /**\n * Class instance method used to maintain specific keys when a fetch occurs.\n * Used to ensure that the session token is not lost.\n *\n * @returns {object} sessionToken\n */\n _preserveFieldsOnFetch() {\n return {\n sessionToken: this.get('sessionToken')\n };\n }\n\n /**\n * Returns true if <code>current</code> would return this user.\n *\n * @returns {boolean} true if user is cached on disk\n */\n isCurrent() {\n const current = ParseUser.current();\n return !!current && current.id === this.id;\n }\n\n /**\n * Returns true if <code>current</code> would return this user.\n *\n * @returns {Promise<boolean>} true if user is cached on disk\n */\n async isCurrentAsync() {\n const current = await ParseUser.currentAsync();\n return !!current && current.id === this.id;\n }\n stripAnonymity() {\n const authData = this.get('authData');\n if (authData && typeof authData === 'object' && authData.hasOwnProperty('anonymous')) {\n // We need to set anonymous to null instead of deleting it in order to remove it from Parse.\n authData.anonymous = null;\n }\n }\n restoreAnonimity(anonymousData) {\n if (anonymousData) {\n const authData = this.get('authData');\n authData.anonymous = anonymousData;\n }\n }\n\n /**\n * Returns get(\"username\").\n *\n * @returns {string}\n */\n getUsername() {\n const username = this.get('username');\n if (username == null || typeof username === 'string') {\n return username;\n }\n return '';\n }\n\n /**\n * Calls set(\"username\", username, options) and returns the result.\n *\n * @param {string} username\n */\n setUsername(username) {\n this.stripAnonymity();\n this.set('username', username);\n }\n\n /**\n * Calls set(\"password\", password, options) and returns the result.\n *\n * @param {string} password User's Password\n */\n setPassword(password) {\n this.set('password', password);\n }\n\n /**\n * Returns get(\"email\").\n *\n * @returns {string} User's Email\n */\n getEmail() {\n const email = this.get('email');\n if (email == null || typeof email === 'string') {\n return email;\n }\n return '';\n }\n\n /**\n * Calls set(\"email\", email) and returns the result.\n *\n * @param {string} email\n * @returns {boolean}\n */\n setEmail(email) {\n return this.set('email', email);\n }\n\n /**\n * Returns the session token for this user, if the user has been logged in,\n * or if it is the result of a query with the master key. Otherwise, returns\n * undefined.\n *\n * @returns {string} the session token, or undefined\n */\n getSessionToken() {\n const token = this.get('sessionToken');\n if (token == null || typeof token === 'string') {\n return token;\n }\n return '';\n }\n\n /**\n * Checks whether this user is the current user and has been authenticated.\n *\n * @returns {boolean} whether this user is the current user and is logged in.\n */\n authenticated() {\n const current = ParseUser.current();\n return !!this.get('sessionToken') && !!current && current.id === this.id;\n }\n\n /**\n * Signs up a new user. You should call this instead of save for\n * new Parse.Users. This will create a new Parse.User on the server, and\n * also persist the session on disk so that you can access the user using\n * <code>current</code>.\n *\n * <p>A username and password must be set before calling signUp.</p>\n *\n * @param {object} attrs Extra fields to set on the new user, or null.\n * @param {object} options\n * @returns {Promise} A promise that is fulfilled when the signup\n * finishes.\n */\n signUp(attrs, options) {\n options = options || {};\n const signupOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n signupOptions.useMasterKey = options.useMasterKey;\n }\n if (options.hasOwnProperty('installationId')) {\n signupOptions.installationId = options.installationId;\n }\n if (options.hasOwnProperty('context') && Object.prototype.toString.call(options.context) === '[object Object]') {\n signupOptions.context = options.context;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.signUp(this, attrs, signupOptions);\n }\n\n /**\n * Logs in a Parse.User. On success, this saves the session to disk,\n * so you can retrieve the currently logged in user using\n * <code>current</code>.\n *\n * <p>A username and password must be set before calling logIn.</p>\n *\n * @param {object} options\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login is complete.\n */\n logIn() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n options = options || {};\n const loginOptions = {\n usePost: true\n };\n if (options.hasOwnProperty('useMasterKey')) {\n loginOptions.useMasterKey = options.useMasterKey;\n }\n if (options.hasOwnProperty('installationId')) {\n loginOptions.installationId = options.installationId;\n }\n if (options.hasOwnProperty('usePost')) {\n loginOptions.usePost = options.usePost;\n }\n if (options.hasOwnProperty('context') && Object.prototype.toString.call(options.context) === '[object Object]') {\n loginOptions.context = options.context;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.logIn(this, loginOptions);\n }\n\n /**\n * Wrap the default save behavior with functionality to save to local\n * storage if this is current user.\n *\n * @param {...any} args\n * @returns {Promise}\n */\n async save() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n await super.save.apply(this, args);\n const current = await this.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().updateUserOnDisk(this);\n }\n return this;\n }\n\n /**\n * Wrap the default destroy behavior with functionality that logs out\n * the current user when it is destroyed\n *\n * @param {...any} args\n * @returns {Parse.User}\n */\n async destroy() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n await super.destroy.apply(this, args);\n const current = await this.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().removeUserFromDisk();\n }\n return this;\n }\n\n /**\n * Wrap the default fetch behavior with functionality to save to local\n * storage if this is current user.\n *\n * @param {...any} args\n * @returns {Parse.User}\n */\n async fetch() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n await super.fetch.apply(this, args);\n const current = await this.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().updateUserOnDisk(this);\n }\n return this;\n }\n\n /**\n * Wrap the default fetchWithInclude behavior with functionality to save to local\n * storage if this is current user.\n *\n * @param {...any} args\n * @returns {Parse.User}\n */\n async fetchWithInclude() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n await super.fetchWithInclude.apply(this, args);\n const current = await this.isCurrentAsync();\n if (current) {\n return _CoreManager.default.getUserController().updateUserOnDisk(this);\n }\n return this;\n }\n\n /**\n * Verify whether a given password is the password of the current user.\n *\n * @param {string} password The password to be verified.\n * @param {object} options The options.\n * @param {boolean} [options.ignoreEmailVerification] Set to `true` to bypass email verification and verify\n * the password regardless of whether the email has been verified. This requires the master key.\n * @returns {Promise} A promise that is fulfilled with a user when the password is correct.\n */\n verifyPassword(password, options) {\n const username = this.getUsername() || '';\n return ParseUser.verifyPassword(username, password, options);\n }\n static readOnlyAttributes() {\n return ['sessionToken'];\n }\n\n /**\n * Adds functionality to the existing Parse.User class.\n *\n * @param {object} protoProps A set of properties to add to the prototype\n * @param {object} classProps A set of static properties to add to the class\n * @static\n * @returns {Parse.User} The newly extended Parse.User class\n */\n static extend(protoProps, classProps) {\n if (protoProps) {\n for (const prop in protoProps) {\n if (prop !== 'className') {\n (0, _defineProperty.default)(ParseUser.prototype, prop, {\n value: protoProps[prop],\n enumerable: false,\n writable: true,\n configurable: true\n });\n }\n }\n }\n if (classProps) {\n for (const prop in classProps) {\n if (prop !== 'className') {\n (0, _defineProperty.default)(ParseUser, prop, {\n value: classProps[prop],\n enumerable: false,\n writable: true,\n configurable: true\n });\n }\n }\n }\n return ParseUser;\n }\n\n /**\n * Retrieves the currently logged in ParseUser with a valid session,\n * either from memory or localStorage, if necessary.\n *\n * @static\n * @returns {Parse.Object} The currently logged in Parse.User.\n */\n static current() {\n if (!canUseCurrentUser) {\n return null;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.currentUser();\n }\n\n /**\n * Retrieves the currently logged in ParseUser from asynchronous Storage.\n *\n * @static\n * @returns {Promise} A Promise that is resolved with the currently\n * logged in Parse User\n */\n static currentAsync() {\n if (!canUseCurrentUser) {\n return _promise.default.resolve(null);\n }\n const controller = _CoreManager.default.getUserController();\n return controller.currentUserAsync();\n }\n\n /**\n * Signs up a new user with a username (or email) and password.\n * This will create a new Parse.User on the server, and also persist the\n * session in localStorage so that you can access the user using\n * {@link #current}.\n *\n * @param {string} username The username (or email) to sign up with.\n * @param {string} password The password to sign up with.\n * @param {object} attrs Extra fields to set on the new user.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the signup completes.\n */\n static signUp(username, password, attrs, options) {\n attrs = attrs || {};\n attrs.username = username;\n attrs.password = password;\n const user = new this(attrs);\n return user.signUp({}, options);\n }\n\n /**\n * Logs in a user with a username (or email) and password. On success, this\n * saves the session to disk, so you can retrieve the currently logged in\n * user using <code>current</code>.\n *\n * @param {string} username The username (or email) to log in with.\n * @param {string} password The password to log in with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static logIn(username, password, options) {\n if (typeof username !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));\n } else if (typeof password !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));\n }\n const user = new this();\n user._finishFetch({\n username: username,\n password: password\n });\n return user.logIn(options);\n }\n\n /**\n * Logs in a user with a username (or email) and password, and authData. On success, this\n * saves the session to disk, so you can retrieve the currently logged in\n * user using <code>current</code>.\n *\n * @param {string} username The username (or email) to log in with.\n * @param {string} password The password to log in with.\n * @param {object} authData The authData to log in with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static logInWithAdditionalAuth(username, password, authData, options) {\n if (typeof username !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));\n }\n if (typeof password !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));\n }\n if (Object.prototype.toString.call(authData) !== '[object Object]') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Auth must be an object.'));\n }\n const user = new this();\n user._finishFetch({\n username: username,\n password: password,\n authData\n });\n return user.logIn(options);\n }\n\n /**\n * Logs in a user with an objectId. On success, this saves the session\n * to disk, so you can retrieve the currently logged in user using\n * <code>current</code>.\n *\n * @param {string} userId The objectId for the user.\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static loginAs(userId) {\n if (!userId) {\n throw new _ParseError.default(_ParseError.default.USERNAME_MISSING, 'Cannot log in as user with an empty user id');\n }\n const controller = _CoreManager.default.getUserController();\n const user = new this();\n return controller.loginAs(user, userId);\n }\n\n /**\n * Logs in a user with a session token. On success, this saves the session\n * to disk, so you can retrieve the currently logged in user using\n * <code>current</code>.\n *\n * @param {string} sessionToken The sessionToken to log in with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static become(sessionToken, options) {\n if (!canUseCurrentUser) {\n throw new Error('It is not memory-safe to become a user in a server environment');\n }\n options = options || {};\n const becomeOptions = {\n sessionToken: sessionToken\n };\n if (options.hasOwnProperty('useMasterKey')) {\n becomeOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n const user = new this();\n return controller.become(user, becomeOptions);\n }\n\n /**\n * Retrieves a user with a session token.\n *\n * @param {string} sessionToken The sessionToken to get user with.\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is fulfilled with the user is fetched.\n */\n static me(sessionToken) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const controller = _CoreManager.default.getUserController();\n const meOptions = {\n sessionToken: sessionToken\n };\n if (options.useMasterKey) {\n meOptions.useMasterKey = options.useMasterKey;\n }\n const user = new this();\n return controller.me(user, meOptions);\n }\n\n /**\n * Logs in a user with a session token. On success, this saves the session\n * to disk, so you can retrieve the currently logged in user using\n * <code>current</code>. If there is no session token the user will not logged in.\n *\n * @param {object} userJSON The JSON map of the User's data\n * @static\n * @returns {Promise} A promise that is fulfilled with the user when\n * the login completes.\n */\n static hydrate(userJSON) {\n const controller = _CoreManager.default.getUserController();\n const user = new this();\n return controller.hydrate(user, userJSON);\n }\n\n /**\n * Static version of {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith}\n *\n * @param provider\n * @param options\n * @param {object} [options.authData]\n * @param saveOpts\n * @static\n * @returns {Promise}\n */\n static logInWith(provider, options, saveOpts) {\n const user = new this();\n return user.linkWith(provider, options, saveOpts);\n }\n\n /**\n * Logs out the currently logged in user session. This will remove the\n * session from disk, log out of linked services, and future calls to\n * <code>current</code> will return <code>null</code>.\n *\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is resolved when the session is\n * destroyed on the server.\n */\n static logOut() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const controller = _CoreManager.default.getUserController();\n return controller.logOut(options);\n }\n\n /**\n * Requests a password reset email to be sent to the specified email address\n * associated with the user account. This email allows the user to securely\n * reset their password on the Parse site.\n *\n * @param {string} email The email address associated with the user that\n * forgot their password.\n * @param {object} options\n * @static\n * @returns {Promise}\n */\n static requestPasswordReset(email, options) {\n options = options || {};\n const requestOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n requestOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.requestPasswordReset(email, requestOptions);\n }\n\n /**\n * Request an email verification.\n *\n * @param {string} email The email address associated with the user that\n * needs to verify their email.\n * @param {object} options\n * @static\n * @returns {Promise}\n */\n static requestEmailVerification(email, options) {\n options = options || {};\n const requestOptions = {};\n if (options.hasOwnProperty('useMasterKey')) {\n requestOptions.useMasterKey = options.useMasterKey;\n }\n const controller = _CoreManager.default.getUserController();\n return controller.requestEmailVerification(email, requestOptions);\n }\n\n /**\n * Verify whether a given password is the password of the current user.\n * @static\n *\n * @param {string} username The username of the user whose password should be verified.\n * @param {string} password The password to be verified.\n * @param {object} options The options.\n * @param {boolean} [options.ignoreEmailVerification] Set to `true` to bypass email verification and verify\n * the password regardless of whether the email has been verified. This requires the master key.\n * @returns {Promise} A promise that is fulfilled with a user when the password is correct.\n */\n static verifyPassword(username, password, options) {\n if (typeof username !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Username must be a string.'));\n }\n if (typeof password !== 'string') {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Password must be a string.'));\n }\n const controller = _CoreManager.default.getUserController();\n return controller.verifyPassword(username, password, options || {});\n }\n\n /**\n * Allow someone to define a custom User class without className\n * being rewritten to _User. The default behavior is to rewrite\n * User to _User for legacy reasons. This allows developers to\n * override that behavior.\n *\n * @param {boolean} isAllowed Whether or not to allow custom User class\n * @static\n */\n static allowCustomUserClass(isAllowed) {\n _CoreManager.default.set('PERFORM_USER_REWRITE', !isAllowed);\n }\n\n /**\n * Allows a legacy application to start using revocable sessions. If the\n * current session token is not revocable, a request will be made for a new,\n * revocable session.\n * It is not necessary to call this method from cloud code unless you are\n * handling user signup or login from the server side. In a cloud code call,\n * this function will not attempt to upgrade the current token.\n *\n * @param {object} options\n * @static\n * @returns {Promise} A promise that is resolved when the process has\n * completed. If a replacement session token is requested, the promise\n * will be resolved after a new token has been fetched.\n */\n static enableRevocableSession(options) {\n options = options || {};\n _CoreManager.default.set('FORCE_REVOCABLE_SESSION', true);\n if (canUseCurrentUser) {\n const current = ParseUser.current();\n if (current) {\n return current._upgradeToRevocableSession(options);\n }\n }\n return _promise.default.resolve();\n }\n\n /**\n * Enables the use of become or the current user in a server\n * environment. These features are disabled by default, since they depend on\n * global objects that are not memory-safe for most servers.\n *\n * @static\n */\n static enableUnsafeCurrentUser() {\n canUseCurrentUser = true;\n }\n\n /**\n * Disables the use of become or the current user in any environment.\n * These features are disabled on servers by default, since they depend on\n * global objects that are not memory-safe for most servers.\n *\n * @static\n */\n static disableUnsafeCurrentUser() {\n canUseCurrentUser = false;\n }\n\n /**\n * When registering users with {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} a basic auth provider\n * is automatically created for you.\n *\n * For advanced authentication, you can register an Auth provider to\n * implement custom authentication, deauthentication.\n *\n * @param provider\n * @see {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider}\n * @see {@link https://docs.parseplatform.org/js/guide/#custom-authentication-module Custom Authentication Module}\n * @static\n */\n static _registerAuthenticationProvider(provider) {\n authProviders[provider.getAuthType()] = provider;\n // Synchronize the current user with the auth provider.\n ParseUser.currentAsync().then(current => {\n if (current) {\n current._synchronizeAuthData(provider.getAuthType());\n }\n });\n }\n\n /**\n * @param provider\n * @param options\n * @param {object} [options.authData]\n * @param saveOpts\n * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#logInWith logInWith}\n * @static\n * @returns {Promise}\n */\n static _logInWith(provider, options, saveOpts) {\n const user = new this();\n return user.linkWith(provider, options, saveOpts);\n }\n static _clearCache() {\n currentUserCache = null;\n currentUserCacheMatchesDisk = false;\n }\n static _setCurrentUserCache(user) {\n currentUserCache = user;\n }\n}\n_ParseObject.default.registerSubclass('_User', ParseUser);\nconst DefaultController = {\n updateUserOnDisk(user) {\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n const json = user.toJSON();\n delete json.password;\n json.className = '_User';\n let userData = (0, _stringify.default)(json);\n if (_CoreManager.default.get('ENCRYPTED_USER')) {\n const crypto = _CoreManager.default.getCryptoController();\n userData = crypto.encrypt(json, _CoreManager.default.get('ENCRYPTED_KEY'));\n }\n return _Storage.default.setItemAsync(path, userData).then(() => {\n return user;\n });\n },\n removeUserFromDisk() {\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n currentUserCacheMatchesDisk = true;\n currentUserCache = null;\n return _Storage.default.removeItemAsync(path);\n },\n setCurrentUser(user) {\n currentUserCache = user;\n user._cleanupAuthData();\n user._synchronizeAllAuthData();\n return DefaultController.updateUserOnDisk(user);\n },\n currentUser() {\n if (currentUserCache) {\n return currentUserCache;\n }\n if (currentUserCacheMatchesDisk) {\n return null;\n }\n if (_Storage.default.async()) {\n throw new Error('Cannot call currentUser() when using a platform with an async ' + 'storage system. Call currentUserAsync() instead.');\n }\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n let userData = _Storage.default.getItem(path);\n currentUserCacheMatchesDisk = true;\n if (!userData) {\n currentUserCache = null;\n return null;\n }\n if (_CoreManager.default.get('ENCRYPTED_USER')) {\n const crypto = _CoreManager.default.getCryptoController();\n userData = crypto.decrypt(userData, _CoreManager.default.get('ENCRYPTED_KEY'));\n }\n userData = JSON.parse(userData);\n if (!userData.className) {\n userData.className = '_User';\n }\n if (userData._id) {\n if (userData.objectId !== userData._id) {\n userData.objectId = userData._id;\n }\n delete userData._id;\n }\n if (userData._sessionToken) {\n userData.sessionToken = userData._sessionToken;\n delete userData._sessionToken;\n }\n const current = _ParseObject.default.fromJSON(userData);\n currentUserCache = current;\n current._synchronizeAllAuthData();\n return current;\n },\n currentUserAsync() {\n if (currentUserCache) {\n return _promise.default.resolve(currentUserCache);\n }\n if (currentUserCacheMatchesDisk) {\n return _promise.default.resolve(null);\n }\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n return _Storage.default.getItemAsync(path).then(userData => {\n currentUserCacheMatchesDisk = true;\n if (!userData) {\n currentUserCache = null;\n return _promise.default.resolve(null);\n }\n if (_CoreManager.default.get('ENCRYPTED_USER')) {\n const crypto = _CoreManager.default.getCryptoController();\n userData = crypto.decrypt(userData.toString(), _CoreManager.default.get('ENCRYPTED_KEY'));\n }\n userData = JSON.parse(userData);\n if (!userData.className) {\n userData.className = '_User';\n }\n if (userData._id) {\n if (userData.objectId !== userData._id) {\n userData.objectId = userData._id;\n }\n delete userData._id;\n }\n if (userData._sessionToken) {\n userData.sessionToken = userData._sessionToken;\n delete userData._sessionToken;\n }\n const current = _ParseObject.default.fromJSON(userData);\n currentUserCache = current;\n current._synchronizeAllAuthData();\n return _promise.default.resolve(current);\n });\n },\n signUp(user, attrs, options) {\n const username = attrs && attrs.username || user.get('username');\n const password = attrs && attrs.password || user.get('password');\n if (!username || !username.length) {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Cannot sign up user with an empty username.'));\n }\n if (!password || !password.length) {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.OTHER_CAUSE, 'Cannot sign up user with an empty password.'));\n }\n return user.save(attrs, options).then(() => {\n // Clear the password field\n user._finishFetch({\n password: undefined\n });\n if (canUseCurrentUser) {\n return DefaultController.setCurrentUser(user);\n }\n return user;\n });\n },\n logIn(user, options) {\n const RESTController = _CoreManager.default.getRESTController();\n const stateController = _CoreManager.default.getObjectStateController();\n const auth = {\n username: user.get('username'),\n password: user.get('password'),\n authData: user.get('authData')\n };\n return RESTController.request(options.usePost ? 'POST' : 'GET', 'login', auth, options).then(response => {\n user._migrateId(response.objectId);\n user._setExisted(true);\n stateController.setPendingOp(user._getStateIdentifier(), 'username', undefined);\n stateController.setPendingOp(user._getStateIdentifier(), 'password', undefined);\n response.password = undefined;\n user._finishFetch(response);\n if (!canUseCurrentUser) {\n // We can't set the current user, so just return the one we logged in\n return _promise.default.resolve(user);\n }\n return DefaultController.setCurrentUser(user);\n });\n },\n loginAs(user, userId) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('POST', 'loginAs', {\n userId\n }, {\n useMasterKey: true\n }).then(response => {\n user._finishFetch(response);\n user._setExisted(true);\n if (!canUseCurrentUser) {\n return _promise.default.resolve(user);\n }\n return DefaultController.setCurrentUser(user);\n });\n },\n become(user, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('GET', 'users/me', {}, options).then(response => {\n user._finishFetch(response);\n user._setExisted(true);\n return DefaultController.setCurrentUser(user);\n });\n },\n hydrate(user, userJSON) {\n user._finishFetch(userJSON);\n user._setExisted(true);\n if (userJSON.sessionToken && canUseCurrentUser) {\n return DefaultController.setCurrentUser(user);\n } else {\n return _promise.default.resolve(user);\n }\n },\n me(user, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('GET', 'users/me', {}, options).then(response => {\n user._finishFetch(response);\n user._setExisted(true);\n return user;\n });\n },\n logOut(options) {\n const RESTController = _CoreManager.default.getRESTController();\n if (options.sessionToken) {\n return RESTController.request('POST', 'logout', {}, options);\n }\n return DefaultController.currentUserAsync().then(currentUser => {\n const path = _Storage.default.generatePath(CURRENT_USER_KEY);\n let promise = _Storage.default.removeItemAsync(path);\n if (currentUser !== null) {\n const currentSession = currentUser.getSessionToken();\n if (currentSession && (0, _isRevocableSession.default)(currentSession)) {\n promise = promise.then(() => {\n return RESTController.request('POST', 'logout', {}, {\n sessionToken: currentSession\n });\n });\n }\n currentUser._logOutWithAll();\n currentUser._finishFetch({\n sessionToken: undefined\n });\n }\n currentUserCacheMatchesDisk = true;\n currentUserCache = null;\n return promise;\n });\n },\n requestPasswordReset(email, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('POST', 'requestPasswordReset', {\n email: email\n }, options);\n },\n async upgradeToRevocableSession(user, options) {\n const token = user.getSessionToken();\n if (!token) {\n return _promise.default.reject(new _ParseError.default(_ParseError.default.SESSION_MISSING, 'Cannot upgrade a user with no session token'));\n }\n options.sessionToken = token;\n const RESTController = _CoreManager.default.getRESTController();\n const result = await RESTController.request('POST', 'upgradeToRevocableSession', {}, options);\n user._finishFetch({\n sessionToken: result?.sessionToken || ''\n });\n const current = await user.isCurrentAsync();\n if (current) {\n return DefaultController.setCurrentUser(user);\n }\n return _promise.default.resolve(user);\n },\n linkWith(user, authData, options) {\n return user.save({\n authData\n }, options).then(() => {\n if (canUseCurrentUser) {\n return DefaultController.setCurrentUser(user);\n }\n return user;\n });\n },\n verifyPassword(username, password, options) {\n const RESTController = _CoreManager.default.getRESTController();\n const data = {\n username,\n password,\n ...(options.ignoreEmailVerification !== undefined && {\n ignoreEmailVerification: options.ignoreEmailVerification\n })\n };\n return RESTController.request('GET', 'verifyPassword', data, options);\n },\n requestEmailVerification(email, options) {\n const RESTController = _CoreManager.default.getRESTController();\n return RESTController.request('POST', 'verificationEmailRequest', {\n email: email\n }, options);\n }\n};\n_CoreManager.default.setParseUser(ParseUser);\n_CoreManager.default.setUserController(DefaultController);\nvar _default = exports.default = ParseUser;"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"script","externalDependencies":[]}
|