var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; import { objectToQueryString, popupCenter, isWechatBrowser, } from '../utils'; import { BaseAuthenticationClient } from './BaseAuthenticationClient'; /** * @class SocialAuthenticationClient 社会化登录模块 * @description 此模块封装了社会化登录的功能,可以通过简洁的 API 快速使用社会化登录获取用户信息。 * * 发起社会化登录授权请求: * * \`\`\`javascript * import { AuthenticationClient } from "authing-js-sdk" * const authenticationClient = new AuthenticationClient({ * appId: "YOUR_APP_ID", * }) * await authenticationClient.social.authorize("github", { * onSuccess: (user) => { console.log(user) }, * onError: (code, message) => { } * }) * \`\`\` * * * @name SocialAuthenticationClient */ var SocialAuthenticationClient = /** @class */ (function () { function SocialAuthenticationClient(options, tokenProvider, httpClient) { this.options = options; this.tokenProvider = tokenProvider; this.httpClient = httpClient; this.baseClient = new BaseAuthenticationClient(options); } /** * @name authorize * @name_zh 发送授权登录请求 * @description 发送授权登录请求,该方法会直接打开一个新窗口,跳转到第三方社会化登录服务商(如 GitHub、微信、钉钉等)的登录授权页面,用户 * 完成授权之后,会自动关闭此窗口,并触发 onSuccess 回调函数,通过此函数,你可以获取到用户信息。 * * @param {string} provider 社会化登录服务商的标志。 * @param {object} [options] * @param {boolean} [options.popup=true] 是否通过弹窗的方式打开社会化登录窗口,如果设置为 false,将会以 window.open 的方式打开一个新的浏览器 tab 。 * @param {Function} [options.onSuccess] 用户同意授权事件回调函数,第一个参数为用户信息。 * @param {Function} [options.onError] 社会化登录失败事件回调函数,第一个参数 code 为错误码,第二个参数 message 为错误提示。详细的错误码列表请见:详细说明请见:[Authing 错误代码列表](https://docs.authing.co/advanced/error-code.html) * @param {object} [options.position] 只有当 options.popup 为 ture 的时候有效,弹出窗口的位置,默认为 { w: 585, h: 649 } 。 * @param {object} [options.authorizationParams] 请求时的额外参数 * * @example * * // 使用 GitHub 登录 * * const authenticationClient = new AuthenticationClient({ * appId: "YOUR_APP_ID", * }) * * await authenticationClient.social.authorize("github", { * onSuccess: (user) => { console.log(user) }, * onError: (code, message) => { }, * // 自定义弹出窗口的位置 * position: { * w: 100, * h: 100 * } * }) * * @example * * // 使用新建浏览器 tab 的形式打开社会化登录页面 * * const authenticationClient = new AuthenticationClient({ * appId: "YOUR_APP_ID", * }) * * await authenticationClient.social.authorize("github", { * popup: false, * onSuccess: (user) => { console.log(user) }, * onError: (code, message) => { }, * }) * * @memberof SocialAuthenticationClient */ SocialAuthenticationClient.prototype.authorize = function (provider, options) { return __awaiter(this, void 0, void 0, function () { var position, _a, popup, onSuccess, onError, authorization_params, authorizationParams, context, customData, _b, withIdentities, query, url, onMessage; var _this = this; return __generator(this, function (_c) { options = options || {}; position = options.position, _a = options.popup, popup = _a === void 0 ? true : _a, onSuccess = options.onSuccess, onError = options.onError, authorization_params = options.authorization_params, authorizationParams = options.authorizationParams, context = options.context, customData = options.customData, _b = options.withIdentities, withIdentities = _b === void 0 ? false : _b; query = { from_guard: '1', app_id: this.options.appId, authorization_params: JSON.stringify(authorization_params || authorizationParams), with_identities: withIdentities ? '1' : '0' }; if (context) { query.context = JSON.stringify(context); } if (customData) { query.custom_data = JSON.stringify(customData); } url = this.baseClient.appHost + "/connections/social/" + provider + objectToQueryString(query); onMessage = function (e) { var _a = e.data, code = _a.code, message = _a.message, userInfo = _a.data, event = _a.event; event = event || {}; var source = event.source, eventType = event.eventType; if (source !== 'authing' || eventType !== 'socialLogin') { return; } try { var parsedMsg = JSON.parse(message); message = parsedMsg.message; code = parsedMsg.code; } catch (e) { // do nothing... } if (code === 200) { // 保存用户的 token _this.tokenProvider.setUser(userInfo); onSuccess && onSuccess(userInfo); } else { onError && onError(code, message); } window.removeEventListener('message', onMessage); }; window.addEventListener('message', onMessage); if (isWechatBrowser()) { // 在微信内直接打开 window.location.href = url; } else if (popup) { popupCenter(url, position); } else { window.open(url); } return [2 /*return*/]; }); }); }; return SocialAuthenticationClient; }()); export { SocialAuthenticationClient }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29jaWFsQXV0aGVudGljYXRpb25DbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2F1dGhlbnRpY2F0aW9uL1NvY2lhbEF1dGhlbnRpY2F0aW9uQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLGVBQWUsR0FDaEIsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSDtJQU1FLG9DQUNFLE9BQW9DLEVBQ3BDLGFBQTBDLEVBQzFDLFVBQXNCO1FBRXRCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BK0NHO0lBQ0csOENBQVMsR0FBZixVQUNFLFFBQWdCLEVBQ2hCLE9Bb0JDOzs7OztnQkFFRCxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFFdEIsUUFBUSxHQVNOLE9BQU8sU0FURCxFQUNSLEtBUUUsT0FBTyxNQVJHLEVBQVosS0FBSyxtQkFBRyxJQUFJLEtBQUEsRUFDWixTQUFTLEdBT1AsT0FBTyxVQVBBLEVBQ1QsT0FBTyxHQU1MLE9BQU8sUUFORixFQUNQLG9CQUFvQixHQUtsQixPQUFPLHFCQUxXLEVBQ3BCLG1CQUFtQixHQUlqQixPQUFPLG9CQUpVLEVBQ25CLE9BQU8sR0FHTCxPQUFPLFFBSEYsRUFDUCxVQUFVLEdBRVIsT0FBTyxXQUZDLEVBQ1YsS0FDRSxPQUFPLGVBRGEsRUFBdEIsY0FBYyxtQkFBRyxLQUFLLEtBQUEsQ0FDWjtnQkFDTixLQUFLLEdBQTJCO29CQUNwQyxVQUFVLEVBQUUsR0FBRztvQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO29CQUMxQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUNsQyxvQkFBb0IsSUFBSSxtQkFBbUIsQ0FDNUM7b0JBQ0QsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO2lCQUM1QyxDQUFDO2dCQUNGLElBQUksT0FBTyxFQUFFO29CQUNYLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDekM7Z0JBQ0QsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoRDtnQkFDSyxHQUFHLEdBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLDRCQUNGLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUcsQ0FBQztnQkFDekQsU0FBUyxHQUFHLFVBQUMsQ0FBZTtvQkFDNUIsSUFBQSxLQUEyQyxDQUFDLENBQUMsSUFBSSxFQUEvQyxJQUFJLFVBQUEsRUFBRSxPQUFPLGFBQUEsRUFBUSxRQUFRLFVBQUEsRUFBRSxLQUFLLFdBQVcsQ0FBQztvQkFDdEQsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ1osSUFBQSxNQUFNLEdBQWdCLEtBQUssT0FBckIsRUFBRSxTQUFTLEdBQUssS0FBSyxVQUFWLENBQVc7b0JBQ3BDLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssYUFBYSxFQUFFO3dCQUN2RCxPQUFPO3FCQUNSO29CQUVELElBQUk7d0JBQ0YsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdEMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7d0JBQzVCLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3FCQUN2QjtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDVixnQkFBZ0I7cUJBQ2pCO29CQUNELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDaEIsY0FBYzt3QkFDZCxLQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDckMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDbEM7eUJBQU07d0JBQ0wsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ25DO29CQUNELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQztnQkFDRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLGVBQWUsRUFBRSxFQUFFO29CQUNyQixXQUFXO29CQUNYLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztpQkFDNUI7cUJBQU0sSUFBSSxLQUFLLEVBQUU7b0JBQ2hCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQzVCO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2xCOzs7O0tBQ0Y7SUFDSCxpQ0FBQztBQUFELENBQUMsQUF6SkQsSUF5SkMifQ==