UNPKG

10.2 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
14var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
16var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
18var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
20var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
21
22var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
24var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
26var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
28var _isomorphicFetch = _interopRequireDefault(require("isomorphic-fetch"));
29
30var _get3 = _interopRequireDefault(require("lodash/get"));
31
32var _passportYoutubeV = _interopRequireDefault(require("passport-youtube-v3"));
33
34var _qs = require("qs");
35
36var _BaseStrategy2 = _interopRequireDefault(require("./BaseStrategy"));
37
38function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
39
40function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
41
42function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
43
44function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
45
46var YoutubeStrategy = /*#__PURE__*/function (_BaseStrategy) {
47 (0, _inherits2["default"])(YoutubeStrategy, _BaseStrategy);
48
49 var _super = _createSuper(YoutubeStrategy);
50
51 function YoutubeStrategy() {
52 var _this;
53
54 (0, _classCallCheck2["default"])(this, YoutubeStrategy);
55
56 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
57 args[_key] = arguments[_key];
58 }
59
60 _this = _super.call.apply(_super, [this].concat(args));
61 _this.Strategy = _passportYoutubeV["default"].Strategy;
62 _this.type = 'youtube';
63 return _this;
64 }
65
66 (0, _createClass2["default"])(YoutubeStrategy, [{
67 key: "getPassportStrategyConfig",
68 value: function getPassportStrategyConfig() {
69 var config = (0, _get2["default"])((0, _getPrototypeOf2["default"])(YoutubeStrategy.prototype), "getPassportStrategyConfig", this).call(this);
70 return _objectSpread(_objectSpread({}, config), {}, {
71 scope: config.scope && config.scope.length ? config.scope : ['https://www.googleapis.com/auth/youtube.readonly']
72 });
73 }
74 }, {
75 key: "getInfo",
76 value: function getInfo() {
77 return _objectSpread(_objectSpread({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(YoutubeStrategy.prototype), "getInfo", this).call(this)), {}, {
78 settings: "https://console.developers.google.com/apis/credentials/oauthclient/".concat(this.config.clientId, "?project=").concat(this.config.project)
79 });
80 }
81 }, {
82 key: "updateTokens",
83 value: function () {
84 var _updateTokens = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(passport, creds2) {
85 var ytConfig, creds, res, data, ret;
86 return _regenerator["default"].wrap(function _callee$(_context) {
87 while (1) {
88 switch (_context.prev = _context.next) {
89 case 0:
90 /* eslint-disable no-param-reassign */
91 ytConfig = this.config;
92 creds = {};
93
94 if (creds2 && (creds2.clientId || creds2.clientID) && creds2.clientSecret) {
95 creds.clientId = creds2.clientId || creds2.clientID;
96 creds.clientSecret = creds2.clientSecret;
97 } else {
98 creds.clientId = ytConfig.clientId || ytConfig.clientID;
99 creds.clientSecret = ytConfig.clientSecret;
100 }
101
102 _context.next = 5;
103 return (0, _isomorphicFetch["default"])('https://www.googleapis.com/oauth2/v4/token', {
104 method: 'post',
105 headers: {
106 'Content-Type': 'application/x-www-form-urlencoded'
107 },
108 body: (0, _qs.stringify)({
109 refresh_token: passport.refreshToken,
110 client_id: creds.clientId,
111 client_secret: creds.clientSecret,
112 grant_type: 'refresh_token'
113 })
114 });
115
116 case 5:
117 res = _context.sent;
118 _context.next = 8;
119 return res.json();
120
121 case 8:
122 data = _context.sent;
123 ret = {};
124
125 if (!data.error) {
126 _context.next = 15;
127 break;
128 }
129
130 if (data.error_description === 'Account has been deleted') {
131 passport.status = 'removed';
132 } else if (data.error_description === 'Token has been expired or revoked') {
133 passport.status = 'expired';
134 } else if (data.error === 'invalid_grant') {
135 passport.status = 'invalid';
136 } else if (data.error === 'unauthorized_client') {
137 passport.status = 'unauthorized';
138 } else {
139 this.app.log.error('Passport update unknown error', data);
140 passport.status = 'invalid';
141 }
142
143 passport.lastError = data;
144 passport.lastErrorAt = new Date();
145 throw {
146 code: data.error,
147 message: data.error_description,
148 error: data
149 };
150
151 case 15:
152 if (data.access_token) {
153 passport.status = 'valid';
154 passport.token = data.access_token;
155 ret.accessToken = data.access_token;
156 } // TODO: сначала протестить
157
158
159 if (data.refresh_token) {
160 // passport.refreshToken = data.refresh_token;
161 // __DEV__ && console.log('TODO: сначала протестить', passport.refreshToken, data.refresh_token);
162 ret.refreshToken = data.refresh_token;
163 }
164
165 return _context.abrupt("return", ret);
166
167 case 18:
168 case "end":
169 return _context.stop();
170 }
171 }
172 }, _callee, this);
173 }));
174
175 function updateTokens(_x, _x2) {
176 return _updateTokens.apply(this, arguments);
177 }
178
179 return updateTokens;
180 }()
181 }, {
182 key: "getProfile",
183 value: function () {
184 var _getProfile = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(passport) {
185 var response, json, profile, names;
186 return _regenerator["default"].wrap(function _callee2$(_context2) {
187 while (1) {
188 switch (_context2.prev = _context2.next) {
189 case 0:
190 _context2.next = 2;
191 return (0, _isomorphicFetch["default"])("https://www.googleapis.com/youtube/v3/channels?part=snippet&id=".concat(passport.providerId), {
192 method: 'GET',
193 headers: {
194 Authorization: "Bearer ".concat(passport.token)
195 }
196 });
197
198 case 2:
199 response = _context2.sent;
200 _context2.next = 5;
201 return response.json();
202
203 case 5:
204 json = _context2.sent;
205 profile = {
206 avatar: (0, _get3["default"])(json, 'items[0].snippet.thumbnails.high.url'),
207 title: (0, _get3["default"])(json, 'items[0].snippet.title')
208 };
209
210 if (profile.title) {
211 names = profile.title.split(' ');
212 profile.firstName = names[0]; // eslint-disable-line
213
214 profile.lastName = names.slice(1).join(' ');
215 }
216
217 return _context2.abrupt("return", profile);
218
219 case 9:
220 case "end":
221 return _context2.stop();
222 }
223 }
224 }, _callee2);
225 }));
226
227 function getProfile(_x3) {
228 return _getProfile.apply(this, arguments);
229 }
230
231 return getProfile;
232 }()
233 }]);
234 return YoutubeStrategy;
235}(_BaseStrategy2["default"]);
236
237exports["default"] = YoutubeStrategy;
238//# sourceMappingURL=YoutubeStrategy.js.map
\No newline at end of file