parse-server 8.0.1-alpha.2 → 8.0.2-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/lib/Adapters/Auth/AuthAdapter.js +16 -9
  2. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  3. package/lib/Adapters/Auth/apple.js +45 -1
  4. package/lib/Adapters/Auth/facebook.js +61 -1
  5. package/lib/Adapters/Auth/gcenter.js +201 -157
  6. package/lib/Adapters/Auth/github.js +119 -31
  7. package/lib/Adapters/Auth/google.js +45 -1
  8. package/lib/Adapters/Auth/gpgames.js +120 -27
  9. package/lib/Adapters/Auth/index.js +33 -33
  10. package/lib/Adapters/Auth/instagram.js +114 -24
  11. package/lib/Adapters/Auth/janraincapture.js +45 -1
  12. package/lib/Adapters/Auth/janrainengage.js +11 -2
  13. package/lib/Adapters/Auth/keycloak.js +68 -35
  14. package/lib/Adapters/Auth/ldap.js +75 -1
  15. package/lib/Adapters/Auth/line.js +119 -32
  16. package/lib/Adapters/Auth/linkedin.js +111 -35
  17. package/lib/Adapters/Auth/meetup.js +16 -8
  18. package/lib/Adapters/Auth/mfa.js +80 -2
  19. package/lib/Adapters/Auth/microsoft.js +105 -30
  20. package/lib/Adapters/Auth/oauth2.js +96 -109
  21. package/lib/Adapters/Auth/phantauth.js +16 -8
  22. package/lib/Adapters/Auth/qq.js +107 -36
  23. package/lib/Adapters/Auth/spotify.js +108 -39
  24. package/lib/Adapters/Auth/twitter.js +187 -40
  25. package/lib/Adapters/Auth/vkontakte.js +20 -13
  26. package/lib/Adapters/Auth/wechat.js +105 -25
  27. package/lib/Adapters/Auth/weibo.js +135 -37
  28. package/lib/Auth.js +26 -17
  29. package/lib/Config.js +14 -1
  30. package/lib/Deprecator/Deprecations.js +5 -2
  31. package/lib/Options/Definitions.js +7 -1
  32. package/lib/Options/docs.js +2 -1
  33. package/lib/Options/index.js +1 -1
  34. package/lib/RestWrite.js +4 -5
  35. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +10 -1
  36. package/lib/cli/parse-server.js +1 -1
  37. package/package.json +7 -7
@@ -1,22 +1,29 @@
1
1
  'use strict';
2
2
 
3
3
  // Helper functions for accessing the vkontakte API.
4
+ var _Config = _interopRequireDefault(require("../../Config"));
5
+ var _Deprecator = _interopRequireDefault(require("../../Deprecator/Deprecator"));
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
4
7
  const httpsRequest = require('./httpsRequest');
5
8
  var Parse = require('parse/node').Parse;
6
-
7
9
  // Returns a promise that fulfills iff this user id is valid.
8
- function validateAuthData(authData, params) {
9
- return vkOAuth2Request(params).then(function (response) {
10
- if (response && response.access_token) {
11
- return request('api.vk.com', 'method/users.get?access_token=' + authData.access_token + '&v=' + params.apiVersion).then(function (response) {
12
- if (response && response.response && response.response.length && response.response[0].id == authData.id) {
13
- return;
14
- }
15
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is invalid for this user.');
16
- });
17
- }
18
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk appIds or appSecret is incorrect.');
10
+ async function validateAuthData(authData, params) {
11
+ const config = _Config.default.get(Parse.applicationId);
12
+ _Deprecator.default.logRuntimeDeprecation({
13
+ usage: 'vkontakte adapter'
19
14
  });
15
+ const vkConfig = config.auth.vkontakte;
16
+ if (!vkConfig?.enableInsecureAuth || !config.enableInsecureAuthAdapters) {
17
+ throw new Parse.Error('Vk only works with enableInsecureAuth: true');
18
+ }
19
+ const response = await vkOAuth2Request(params);
20
+ if (!response?.access_token) {
21
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk appIds or appSecret is incorrect.');
22
+ }
23
+ const vkUser = await request('api.vk.com', `method/users.get?access_token=${authData.access_token}&v=${params.apiVersion}`);
24
+ if (!vkUser?.response?.length || vkUser.response[0].id !== authData.id) {
25
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is invalid for this user.');
26
+ }
20
27
  }
21
28
  function vkOAuth2Request(params) {
22
29
  return new Promise(function (resolve) {
@@ -45,4 +52,4 @@ module.exports = {
45
52
  validateAppId: validateAppId,
46
53
  validateAuthData: validateAuthData
47
54
  };
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwc1JlcXVlc3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJwYXJhbXMiLCJ2a09BdXRoMlJlcXVlc3QiLCJ0aGVuIiwicmVzcG9uc2UiLCJhY2Nlc3NfdG9rZW4iLCJyZXF1ZXN0IiwiYXBpVmVyc2lvbiIsImxlbmd0aCIsImlkIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhcHBJZHMiLCJhcHBTZWNyZXQiLCJ2YWxpZGF0ZUFwcElkIiwiaG9zdCIsInBhdGgiLCJnZXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvdmtvbnRha3RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSB2a29udGFrdGUgQVBJLlxuXG5jb25zdCBodHRwc1JlcXVlc3QgPSByZXF1aXJlKCcuL2h0dHBzUmVxdWVzdCcpO1xudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHZrT0F1dGgyUmVxdWVzdChwYXJhbXMpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIHJlcXVlc3QoXG4gICAgICAgICdhcGkudmsuY29tJyxcbiAgICAgICAgJ21ldGhvZC91c2Vycy5nZXQ/YWNjZXNzX3Rva2VuPScgKyBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4gKyAnJnY9JyArIHBhcmFtcy5hcGlWZXJzaW9uXG4gICAgICApLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXNwb25zZSAmJlxuICAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlICYmXG4gICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2UubGVuZ3RoICYmXG4gICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VbMF0uaWQgPT0gYXV0aERhdGEuaWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnVmsgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdWayBhcHBJZHMgb3IgYXBwU2VjcmV0IGlzIGluY29ycmVjdC4nKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZrT0F1dGgyUmVxdWVzdChwYXJhbXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgaWYgKFxuICAgICAgIXBhcmFtcyB8fFxuICAgICAgIXBhcmFtcy5hcHBJZHMgfHxcbiAgICAgICFwYXJhbXMuYXBwSWRzLmxlbmd0aCB8fFxuICAgICAgIXBhcmFtcy5hcHBTZWNyZXQgfHxcbiAgICAgICFwYXJhbXMuYXBwU2VjcmV0Lmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgICAnVmsgYXV0aCBpcyBub3QgY29uZmlndXJlZC4gTWlzc2luZyBhcHBJZHMgb3IgYXBwU2VjcmV0LidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmFwaVZlcnNpb24pIHtcbiAgICAgIHBhcmFtcy5hcGlWZXJzaW9uID0gJzUuMTI0JztcbiAgICB9XG4gICAgcmVzb2x2ZSgpO1xuICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChcbiAgICAgICdvYXV0aC52ay5jb20nLFxuICAgICAgJ2FjY2Vzc190b2tlbj9jbGllbnRfaWQ9JyArXG4gICAgICAgIHBhcmFtcy5hcHBJZHMgK1xuICAgICAgICAnJmNsaWVudF9zZWNyZXQ9JyArXG4gICAgICAgIHBhcmFtcy5hcHBTZWNyZXQgK1xuICAgICAgICAnJnY9JyArXG4gICAgICAgIHBhcmFtcy5hcGlWZXJzaW9uICtcbiAgICAgICAgJyZncmFudF90eXBlPWNsaWVudF9jcmVkZW50aWFscydcbiAgICApO1xuICB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgYXBpIHJlcXVlc3RzXG5mdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHBhdGgpIHtcbiAgcmV0dXJuIGh0dHBzUmVxdWVzdC5nZXQoJ2h0dHBzOi8vJyArIGhvc3QgKyAnLycgKyBwYXRoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQ6IHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGE6IHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUVaO0FBRUEsTUFBTUEsWUFBWSxHQUFHQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDOUMsSUFBSUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNDLEtBQUs7O0FBRXZDO0FBQ0EsU0FBU0MsZ0JBQWdCQSxDQUFDQyxRQUFRLEVBQUVDLE1BQU0sRUFBRTtFQUMxQyxPQUFPQyxlQUFlLENBQUNELE1B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
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRvciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImh0dHBzUmVxdWVzdCIsIlBhcnNlIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwicGFyYW1zIiwiY29uZmlnIiwiQ29uZmlnIiwiZ2V0IiwiYXBwbGljYXRpb25JZCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsInZrQ29uZmlnIiwiYXV0aCIsInZrb250YWt0ZSIsImVuYWJsZUluc2VjdXJlQXV0aCIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwiRXJyb3IiLCJyZXNwb25zZSIsInZrT0F1dGgyUmVxdWVzdCIsImFjY2Vzc190b2tlbiIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2a1VzZXIiLCJyZXF1ZXN0IiwiYXBpVmVyc2lvbiIsImxlbmd0aCIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhcHBJZHMiLCJhcHBTZWNyZXQiLCJ0aGVuIiwidmFsaWRhdGVBcHBJZCIsImhvc3QiLCJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3Zrb250YWt0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgdmtvbnRha3RlIEFQSS5cblxuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vLi4vQ29uZmlnJztcbmltcG9ydCBEZXByZWNhdG9yIGZyb20gJy4uLy4uL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIHBhcmFtcykge1xuICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICBEZXByZWNhdG9yLmxvZ1J1bnRpbWVEZXByZWNhdGlvbih7IHVzYWdlOiAndmtvbnRha3RlIGFkYXB0ZXInIH0pO1xuXG4gIGNvbnN0IHZrQ29uZmlnID0gY29uZmlnLmF1dGgudmtvbnRha3RlO1xuICBpZiAoIXZrQ29uZmlnPy5lbmFibGVJbnNlY3VyZUF1dGggfHwgIWNvbmZpZy5lbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcignVmsgb25seSB3b3JrcyB3aXRoIGVuYWJsZUluc2VjdXJlQXV0aDogdHJ1ZScpO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB2a09BdXRoMlJlcXVlc3QocGFyYW1zKTtcbiAgaWYgKCFyZXNwb25zZT8uYWNjZXNzX3Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdWayBhcHBJZHMgb3IgYXBwU2VjcmV0IGlzIGluY29ycmVjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IHZrVXNlciA9IGF3YWl0IHJlcXVlc3QoXG4gICAgJ2FwaS52ay5jb20nLFxuICAgIGBtZXRob2QvdXNlcnMuZ2V0P2FjY2Vzc190b2tlbj0ke2F1dGhEYXRhLmFjY2Vzc190b2tlbn0mdj0ke3BhcmFtcy5hcGlWZXJzaW9ufWBcbiAgKTtcblxuICBpZiAoIXZrVXNlcj8ucmVzcG9uc2U/Lmxlbmd0aCB8fCB2a1VzZXIucmVzcG9uc2VbMF0uaWQgIT09IGF1dGhEYXRhLmlkKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdWayBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2a09BdXRoMlJlcXVlc3QocGFyYW1zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIGlmIChcbiAgICAgICFwYXJhbXMgfHxcbiAgICAgICFwYXJhbXMuYXBwSWRzIHx8XG4gICAgICAhcGFyYW1zLmFwcElkcy5sZW5ndGggfHxcbiAgICAgICFwYXJhbXMuYXBwU2VjcmV0IHx8XG4gICAgICAhcGFyYW1zLmFwcFNlY3JldC5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgJ1ZrIGF1dGggaXMgbm90IGNvbmZpZ3VyZWQuIE1pc3NpbmcgYXBwSWRzIG9yIGFwcFNlY3JldC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXBhcmFtcy5hcGlWZXJzaW9uKSB7XG4gICAgICBwYXJhbXMuYXBpVmVyc2lvbiA9ICc1LjEyNCc7XG4gICAgfVxuICAgIHJlc29sdmUoKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoXG4gICAgICAnb2F1dGgudmsuY29tJyxcbiAgICAgICdhY2Nlc3NfdG9rZW4/Y2xpZW50X2lkPScgK1xuICAgICAgICBwYXJhbXMuYXBwSWRzICtcbiAgICAgICAgJyZjbGllbnRfc2VjcmV0PScgK1xuICAgICAgICBwYXJhbXMuYXBwU2VjcmV0ICtcbiAgICAgICAgJyZ2PScgK1xuICAgICAgICBwYXJhbXMuYXBpVmVyc2lvbiArXG4gICAgICAgICcmZ3JhbnRfdHlwZT1jbGllbnRfY3JlZGVudGlhbHMnXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vLyBBIHByb21pc2V5IHdyYXBwZXIgZm9yIGFwaSByZXF1ZXN0c1xuZnVuY3Rpb24gcmVxdWVzdChob3N0LCBwYXRoKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KCdodHRwczovLycgKyBob3N0ICsgJy8nICsgcGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFFWjtBQUlBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFxRCxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUhyRCxNQUFNRyxZQUFZLEdBQUdMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QyxJQUFJTSxLQUFLLEdBQUdOLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ00sS0FBSztBQUl2QztBQUNBLGVBQWVDLGdCQUFnQkEsQ0FBQ0MsUUFBUSxFQUFFQyxNQUFNLEVBQUU7RUFDaEQsTUFBTUMsTUFBTSxHQUFHQyxlQUFNLENBQUNDLEdBQUcsQ0FBQ04sS0FBSyxDQUFDTyxhQUFhLENBQUM7RUFDOUNDLG1CQUFVLENBQUNDLHFCQUFxQixDQUFDO0lBQUVDLEtBQUssRUFBRTtFQUFvQixDQUFDLENBQUM7RUFFaEUsTUFBTUMsUUFBUSxHQUFHUCxNQUFNLENBQUNRLElBQUksQ0FBQ0MsU0FBUztFQUN0QyxJQUFJLENBQUNGLFFBQVEsRUFBRUcsa0JBQWtCLElBQUksQ0FBQ1YsTUFBTSxDQUFDVywwQkFBMEIsRUFBRTtJQUN2RSxNQUFNLElBQUlmLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQztFQUN0RTtFQUVBLE1BQU1DLFFBQVEsR0FBRyxNQUFNQyxlQUFlLENBQUNmLE1BQU0sQ0FBQztFQUM5QyxJQUFJLENBQUNjLFFBQVEsRUFBRUUsWUFBWSxFQUFFO0lBQzNCLE1BQU0sSUFBSW5CLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ2hCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQUUsc0NBQXNDLENBQUM7RUFDN0Y7RUFFQSxNQUFNQyxNQUFNLEdBQUcsTUFBTUMsT0FBTyxDQUMxQixZQUFZLEVBQ1osaUNBQWlDcEIsUUFBUSxDQUFDaUIsWUFBWSxNQUFNaEIsTUFBTSxDQUFDb0IsVUFBVSxFQUMvRSxDQUFDO0VBRUQsSUFBSSxDQUFDRixNQUFNLEVBQUVKLFFBQVEsRUFBRU8sTUFBTSxJQUFJSCxNQUFNLENBQUNKLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsRUFBRSxLQUFLdkIsUUFBUSxDQUFDdUIsRUFBRSxFQUFFO0lBQ3RFLE1BQU0sSUFBSXpCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ2hCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQUUsbUNBQW1DLENBQUM7RUFDMUY7QUFDRjtBQUVBLFNBQVNGLGVBQWVBLENBQUNmLE1BQU0sRUFBRTtFQUMvQixPQUFPLElBQUl1QixPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO0lBQ3BDLElBQ0UsQ0FBQ3hCLE1BQU0sSUFDUCxDQUFDQSxNQUFNLENBQUN5QixNQUFNLElBQ2QsQ0FBQ3pCLE1BQU0sQ0FBQ3lCLE1BQU0sQ0FBQ0osTUFBTSxJQUNyQixDQUFDckIsTUFBTSxDQUFDMEIsU0FBUyxJQUNqQixDQUFDMUIsTUFBTSxDQUFDMEIsU0FBUyxDQUFDTCxNQUFNLEVBQ3hCO01BQ0EsTUFBTSxJQUFJeEIsS0FBSyxDQUFDZ0IsS0FBSyxDQUNuQmhCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQzVCLHlEQUNGLENBQUM7SUFDSDtJQUNBLElBQUksQ0FBQ2pCLE1BQU0sQ0FBQ29CLFVBQVUsRUFBRTtNQUN0QnBCLE1BQU0sQ0FBQ29CLFVBQVUsR0FBRyxPQUFPO0lBQzdCO0lBQ0FJLE9BQU8sQ0FBQyxDQUFDO0VBQ1gsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQyxZQUFZO0lBQ2xCLE9BQU9SLE9BQU8sQ0FDWixjQUFjLEVBQ2QseUJBQXlCLEdBQ3ZCbkIsTUFBTSxDQUFDeUIsTUFBTSxHQUNiLGlCQUFpQixHQUNqQnpCLE1BQU0sQ0FBQzBCLFNBQVMsR0FDaEIsS0FBSyxHQUNMMUIsTUFBTSxDQUFDb0IsVUFBVSxHQUNqQixnQ0FDSixDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxTQUFTUSxhQUFhQSxDQUFBLEVBQUc7RUFDdkIsT0FBT0wsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUMxQjs7QUFFQTtBQUNBLFNBQVNMLE9BQU9BLENBQUNVLElBQUksRUFBRUMsSUFBSSxFQUFFO0VBQzNCLE9BQU9sQyxZQUFZLENBQUNPLEdBQUcsQ0FBQyxVQUFVLEdBQUcwQixJQUFJLEdBQUcsR0FBRyxHQUFHQyxJQUFJLENBQUM7QUFDekQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZkosYUFBYSxFQUFFQSxhQUFhO0VBQzVCOUIsZ0JBQWdCLEVBQUVBO0FBQ3BCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,30 +1,110 @@
1
1
  "use strict";
2
2
 
3
- // Helper functions for accessing the WeChat Graph API.
4
- const httpsRequest = require('./httpsRequest');
5
- var Parse = require('parse/node').Parse;
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _BaseCodeAuthAdapter = _interopRequireDefault(require("./BaseCodeAuthAdapter"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * Parse Server authentication adapter for WeChat.
11
+ *
12
+ * @class WeChatAdapter
13
+ * @param {Object} options - The adapter options object.
14
+ * @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
15
+ * @param {string} options.clientId - Your WeChat App ID.
16
+ * @param {string} options.clientSecret - Your WeChat App Secret.
17
+ *
18
+ * @description
19
+ * ## Parse Server Configuration
20
+ * To configure Parse Server for WeChat authentication, use the following structure:
21
+ * ### Secure Configuration (Recommended)
22
+ * ```json
23
+ * {
24
+ * "auth": {
25
+ * "wechat": {
26
+ * "clientId": "your-client-id",
27
+ * "clientSecret": "your-client-secret"
28
+ * }
29
+ * }
30
+ * }
31
+ * ```
32
+ * ### Insecure Configuration (Not Recommended)
33
+ * ```json
34
+ * {
35
+ * "auth": {
36
+ * "wechat": {
37
+ * "enableInsecureAuth": true
38
+ * }
39
+ * }
40
+ * }
41
+ * ```
42
+ *
43
+ * The adapter requires the following `authData` fields:
44
+ * - **With `enableInsecureAuth` (Not Recommended)**: `id`, `access_token`.
45
+ * - **Without `enableInsecureAuth`**: `code`.
46
+ *
47
+ * ## Auth Payloads
48
+ * ### Secure Authentication Payload (Recommended)
49
+ * ```json
50
+ * {
51
+ * "wechat": {
52
+ * "code": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
53
+ * }
54
+ * }
55
+ * ```
56
+ * ### Insecure Authentication Payload (Not Recommended)
57
+ * ```json
58
+ * {
59
+ * "wechat": {
60
+ * "id": "1234567",
61
+ * "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
62
+ * }
63
+ * }
64
+ * ```
65
+ *
66
+ * ## Notes
67
+ * - With `enableInsecureAuth`, the adapter directly validates the `id` and `access_token` sent by the client.
68
+ * - Without `enableInsecureAuth`, the adapter uses the `code` provided by the client to exchange for an access token via WeChat's OAuth API.
69
+ * - The `enableInsecureAuth` flag is **deprecated** and may be removed in future versions. Use secure authentication with the `code` field instead.
70
+ *
71
+ * @example <caption>Auth Data Example</caption>
72
+ * // Example authData provided by the client:
73
+ * const authData = {
74
+ * wechat: {
75
+ * code: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
76
+ * }
77
+ * };
78
+ *
79
+ * @see {@link https://developers.weixin.qq.com/doc/offiaccount/en/OA_Web_Apps/Wechat_webpage_authorization.html WeChat Authentication Documentation}
80
+ */
6
81
 
7
- // Returns a promise that fulfills iff this user id is valid.
8
- function validateAuthData(authData) {
9
- return graphRequest('auth?access_token=' + authData.access_token + '&openid=' + authData.id).then(function (data) {
10
- if (data.errcode == 0) {
11
- return;
82
+ class WeChatAdapter extends _BaseCodeAuthAdapter.default {
83
+ constructor() {
84
+ super('WeChat');
85
+ }
86
+ async getUserFromAccessToken(access_token, authData) {
87
+ const response = await fetch(`https://api.weixin.qq.com/sns/auth?access_token=${access_token}&openid=${authData.id}`);
88
+ const data = await response.json();
89
+ if (!response.ok || data.errcode !== 0) {
90
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'WeChat auth is invalid for this user.');
12
91
  }
13
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'wechat auth is invalid for this user.');
14
- });
15
- }
16
-
17
- // Returns a promise that fulfills if this app id is valid.
18
- function validateAppId() {
19
- return Promise.resolve();
20
- }
21
-
22
- // A promisey wrapper for WeChat graph requests.
23
- function graphRequest(path) {
24
- return httpsRequest.get('https://api.weixin.qq.com/sns/' + path);
92
+ return data;
93
+ }
94
+ async getAccessTokenFromCode(authData) {
95
+ if (!authData.code) {
96
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'WeChat auth requires a code to be sent.');
97
+ }
98
+ const appId = this.clientId;
99
+ const appSecret = this.clientSecret;
100
+ const response = await fetch(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${appSecret}&code=${authData.code}&grant_type=authorization_code`);
101
+ const data = await response.json();
102
+ if (!response.ok || data.errcode) {
103
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'WeChat auth is invalid for this user.');
104
+ }
105
+ authData.id = data.openid;
106
+ return data.access_token;
107
+ }
25
108
  }
26
- module.exports = {
27
- validateAppId,
28
- validateAuthData
29
- };
30
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwc1JlcXVlc3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJncmFwaFJlcXVlc3QiLCJhY2Nlc3NfdG9rZW4iLCJpZCIsInRoZW4iLCJkYXRhIiwiZXJyY29kZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhdGgiLCJnZXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvd2VjaGF0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgV2VDaGF0IEdyYXBoIEFQSS5cbmNvbnN0IGh0dHBzUmVxdWVzdCA9IHJlcXVpcmUoJy4vaHR0cHNSZXF1ZXN0Jyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgcmV0dXJuIGdyYXBoUmVxdWVzdCgnYXV0aD9hY2Nlc3NfdG9rZW49JyArIGF1dGhEYXRhLmFjY2Vzc190b2tlbiArICcmb3BlbmlkPScgKyBhdXRoRGF0YS5pZCkudGhlbihcbiAgICBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEuZXJyY29kZSA9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnd2VjaGF0IGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICAgIH1cbiAgKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBXZUNoYXQgZ3JhcGggcmVxdWVzdHMuXG5mdW5jdGlvbiBncmFwaFJlcXVlc3QocGF0aCkge1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCgnaHR0cHM6Ly9hcGkud2VpeGluLnFxLmNvbS9zbnMvJyArIHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxNQUFNQSxZQUFZLEdBQUdDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QyxJQUFJQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0MsS0FBSzs7QUFFdkM7QUFDQSxTQUFTQyxnQkFBZ0JBLENBQUNDLFFBQVEsRUFBRTtFQUNsQyxPQUFPQyxZQUFZLENBQUMsb0JBQW9CLEdBQUdELFFBQVEsQ0FBQ0UsWUFBWSxHQUFHLFVBQVUsR0FBR0YsUUFBUSxDQUFDRyxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxDQUMvRixVQUFVQyxJQUFJLEVBQUU7SUFDZCxJQUFJQSxJQUFJLENBQUNDLE9BQU8sSUFBSSxDQUFDLEVBQUU7TUFDckI7SUFDRjtJQUNBLE1BQU0sSUFBSVIsS0FBSyxDQUFDUyxLQUFLLENBQUNULEtBQUssQ0FBQ1MsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSx1Q0FBdUMsQ0FBQztFQUM5RixDQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBLFNBQVNDLGFBQWFBLENBQUEsRUFBRztFQUN2QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0FBQzFCOztBQUVBO0FBQ0EsU0FBU1YsWUFBWUEsQ0FBQ1csSUFBSSxFQUFFO0VBQzFCLE9BQU9oQixZQUFZLENBQUNpQixHQUFHLENBQUMsZ0NBQWdDLEdBQUdELElBQUksQ0FBQztBQUNsRTtBQUVBRSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmTixhQUFhO0VBQ2JWO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
109
+ var _default = exports.default = new WeChatAdapter();
110
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmFzZUNvZGVBdXRoQWRhcHRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiV2VDaGF0QWRhcHRlciIsIkJhc2VBdXRoQ29kZUFkYXB0ZXIiLCJjb25zdHJ1Y3RvciIsImdldFVzZXJGcm9tQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJhdXRoRGF0YSIsInJlc3BvbnNlIiwiZmV0Y2giLCJpZCIsImRhdGEiLCJqc29uIiwib2siLCJlcnJjb2RlIiwiUGFyc2UiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJnZXRBY2Nlc3NUb2tlbkZyb21Db2RlIiwiY29kZSIsImFwcElkIiwiY2xpZW50SWQiLCJhcHBTZWNyZXQiLCJjbGllbnRTZWNyZXQiLCJvcGVuaWQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC93ZWNoYXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZSBTZXJ2ZXIgYXV0aGVudGljYXRpb24gYWRhcHRlciBmb3IgV2VDaGF0LlxuICpcbiAqIEBjbGFzcyBXZUNoYXRBZGFwdGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBhZGFwdGVyIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5lbmFibGVJbnNlY3VyZUF1dGg9ZmFsc2VdIC0gKipbREVQUkVDQVRFRF0qKiBFbmFibGUgaW5zZWN1cmUgYXV0aGVudGljYXRpb24gKG5vdCByZWNvbW1lbmRlZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jbGllbnRJZCAtIFlvdXIgV2VDaGF0IEFwcCBJRC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNsaWVudFNlY3JldCAtIFlvdXIgV2VDaGF0IEFwcCBTZWNyZXQuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAjIyBQYXJzZSBTZXJ2ZXIgQ29uZmlndXJhdGlvblxuICogVG8gY29uZmlndXJlIFBhcnNlIFNlcnZlciBmb3IgV2VDaGF0IGF1dGhlbnRpY2F0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiAjIyMgU2VjdXJlIENvbmZpZ3VyYXRpb24gKFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwid2VjaGF0XCI6IHtcbiAqICAgICAgIFwiY2xpZW50SWRcIjogXCJ5b3VyLWNsaWVudC1pZFwiLFxuICogICAgICAgXCJjbGllbnRTZWNyZXRcIjogXCJ5b3VyLWNsaWVudC1zZWNyZXRcIlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiAjIyMgSW5zZWN1cmUgQ29uZmlndXJhdGlvbiAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwid2VjaGF0XCI6IHtcbiAqICAgICAgIFwiZW5hYmxlSW5zZWN1cmVBdXRoXCI6IHRydWVcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBhZGFwdGVyIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgYGF1dGhEYXRhYCBmaWVsZHM6XG4gKiAtICoqV2l0aCBgZW5hYmxlSW5zZWN1cmVBdXRoYCAoTm90IFJlY29tbWVuZGVkKSoqOiBgaWRgLCBgYWNjZXNzX3Rva2VuYC5cbiAqIC0gKipXaXRob3V0IGBlbmFibGVJbnNlY3VyZUF1dGhgKio6IGBjb2RlYC5cbiAqXG4gKiAjIyBBdXRoIFBheWxvYWRzXG4gKiAjIyMgU2VjdXJlIEF1dGhlbnRpY2F0aW9uIFBheWxvYWQgKFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcIndlY2hhdFwiOiB7XG4gKiAgICAgXCJjb2RlXCI6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqICMjIyBJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkIChOb3QgUmVjb21tZW5kZWQpXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwid2VjaGF0XCI6IHtcbiAqICAgICBcImlkXCI6IFwiMTIzNDU2N1wiLFxuICogICAgIFwiYWNjZXNzX3Rva2VuXCI6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBOb3Rlc1xuICogLSBXaXRoIGBlbmFibGVJbnNlY3VyZUF1dGhgLCB0aGUgYWRhcHRlciBkaXJlY3RseSB2YWxpZGF0ZXMgdGhlIGBpZGAgYW5kIGBhY2Nlc3NfdG9rZW5gIHNlbnQgYnkgdGhlIGNsaWVudC5cbiAqIC0gV2l0aG91dCBgZW5hYmxlSW5zZWN1cmVBdXRoYCwgdGhlIGFkYXB0ZXIgdXNlcyB0aGUgYGNvZGVgIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgdG8gZXhjaGFuZ2UgZm9yIGFuIGFjY2VzcyB0b2tlbiB2aWEgV2VDaGF0J3MgT0F1dGggQVBJLlxuICogLSBUaGUgYGVuYWJsZUluc2VjdXJlQXV0aGAgZmxhZyBpcyAqKmRlcHJlY2F0ZWQqKiBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBVc2Ugc2VjdXJlIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIGBjb2RlYCBmaWVsZCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkF1dGggRGF0YSBFeGFtcGxlPC9jYXB0aW9uPlxuICogLy8gRXhhbXBsZSBhdXRoRGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50OlxuICogY29uc3QgYXV0aERhdGEgPSB7XG4gKiAgIHdlY2hhdDoge1xuICogICAgIGNvZGU6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9O1xuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVycy53ZWl4aW4ucXEuY29tL2RvYy9vZmZpYWNjb3VudC9lbi9PQV9XZWJfQXBwcy9XZWNoYXRfd2VicGFnZV9hdXRob3JpemF0aW9uLmh0bWwgV2VDaGF0IEF1dGhlbnRpY2F0aW9uIERvY3VtZW50YXRpb259XG4gKi9cblxuaW1wb3J0IEJhc2VBdXRoQ29kZUFkYXB0ZXIgZnJvbSAnLi9CYXNlQ29kZUF1dGhBZGFwdGVyJztcblxuY2xhc3MgV2VDaGF0QWRhcHRlciBleHRlbmRzIEJhc2VBdXRoQ29kZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignV2VDaGF0Jyk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VyRnJvbUFjY2Vzc1Rva2VuKGFjY2Vzc190b2tlbiwgYXV0aERhdGEpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYGh0dHBzOi8vYXBpLndlaXhpbi5xcS5jb20vc25zL2F1dGg/YWNjZXNzX3Rva2VuPSR7YWNjZXNzX3Rva2VufSZvcGVuaWQ9JHthdXRoRGF0YS5pZH1gXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IGRhdGEuZXJyY29kZSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdXZUNoYXQgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBnZXRBY2Nlc3NUb2tlbkZyb21Db2RlKGF1dGhEYXRhKSB7XG4gICAgaWYgKCFhdXRoRGF0YS5jb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1dlQ2hhdCBhdXRoIHJlcXVpcmVzIGEgY29kZSB0byBiZSBzZW50LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcElkID0gdGhpcy5jbGllbnRJZDtcbiAgICBjb25zdCBhcHBTZWNyZXQgPSB0aGlzLmNsaWVudFNlY3JldFxuXG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYGh0dHBzOi8vYXBpLndlaXhpbi5xcS5jb20vc25zL29hdXRoMi9hY2Nlc3NfdG9rZW4/YXBwaWQ9JHthcHBJZH0mc2VjcmV0PSR7YXBwU2VjcmV0fSZjb2RlPSR7YXV0aERhdGEuY29kZX0mZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGVgXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IGRhdGEuZXJyY29kZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdXZUNoYXQgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgfVxuXG4gICAgYXV0aERhdGEuaWQgPSBkYXRhLm9wZW5pZDtcblxuICAgIHJldHVybiBkYXRhLmFjY2Vzc190b2tlbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2VDaGF0QWRhcHRlcigpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUF5RUEsSUFBQUEsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3RCxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQXpFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUlBLE1BQU1HLGFBQWEsU0FBU0MsNEJBQW1CLENBQUM7RUFDOUNDLFdBQVdBLENBQUEsRUFBRztJQUNaLEtBQUssQ0FBQyxRQUFRLENBQUM7RUFDakI7RUFFQSxNQUFNQyxzQkFBc0JBLENBQUNDLFlBQVksRUFBRUMsUUFBUSxFQUFFO0lBQ25ELE1BQU1DLFFBQVEsR0FBRyxNQUFNQyxLQUFLLENBQzFCLG1EQUFtREgsWUFBWSxXQUFXQyxRQUFRLENBQUNHLEVBQUUsRUFDdkYsQ0FBQztJQUVELE1BQU1DLElBQUksR0FBRyxNQUFNSCxRQUFRLENBQUNJLElBQUksQ0FBQyxDQUFDO0lBRWxDLElBQUksQ0FBQ0osUUFBUSxDQUFDSyxFQUFFLElBQUlGLElBQUksQ0FBQ0csT0FBTyxLQUFLLENBQUMsRUFBRTtNQUN0QyxNQUFNLElBQUlDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsdUNBQXVDLENBQUM7SUFDOUY7SUFFQSxPQUFPTixJQUFJO0VBQ2I7RUFFQSxNQUFNTyxzQkFBc0JBLENBQUNYLFFBQVEsRUFBRTtJQUNyQyxJQUFJLENBQUNBLFFBQVEsQ0FBQ1ksSUFBSSxFQUFFO01BQ2xCLE1BQU0sSUFBSUosS0FBSyxDQUFDQyxLQUFLLENBQUNELEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSx5Q0FBeUMsQ0FBQztJQUNoRztJQUVBLE1BQU1HLEtBQUssR0FBRyxJQUFJLENBQUNDLFFBQVE7SUFDM0IsTUFBTUMsU0FBUyxHQUFHLElBQUksQ0FBQ0MsWUFBWTtJQUduQyxNQUFNZixRQUFRLEdBQUcsTUFBTUMsS0FBSyxDQUMxQiwyREFBMkRXLEtBQUssV0FBV0UsU0FBUyxTQUFTZixRQUFRLENBQUNZLElBQUksZ0NBQzVHLENBQUM7SUFFRCxNQUFNUixJQUFJLEdBQUcsTUFBTUgsUUFBUSxDQUFDSSxJQUFJLENBQUMsQ0FBQztJQUVsQyxJQUFJLENBQUNKLFFBQVEsQ0FBQ0ssRUFBRSxJQUFJRixJQUFJLENBQUNHLE9BQU8sRUFBRTtNQUNoQyxNQUFNLElBQUlDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsdUNBQXVDLENBQUM7SUFDOUY7SUFFQVYsUUFBUSxDQUFDRyxFQUFFLEdBQUdDLElBQUksQ0FBQ2EsTUFBTTtJQUV6QixPQUFPYixJQUFJLENBQUNMLFlBQVk7RUFDMUI7QUFDRjtBQUFDLElBQUFtQixRQUFBLEdBQUFDLE9BQUEsQ0FBQXpCLE9BQUEsR0FFYyxJQUFJQyxhQUFhLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,43 +1,141 @@
1
1
  "use strict";
2
2
 
3
- // Helper functions for accessing the weibo Graph API.
4
- var httpsRequest = require('./httpsRequest');
5
- var Parse = require('parse/node').Parse;
6
- var querystring = require('querystring');
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _BaseCodeAuthAdapter = _interopRequireDefault(require("./BaseCodeAuthAdapter"));
8
+ var _querystring = _interopRequireDefault(require("querystring"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * Parse Server authentication adapter for Weibo.
12
+ *
13
+ * @class WeiboAdapter
14
+ * @param {Object} options - The adapter configuration options.
15
+ * @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
16
+ * @param {string} options.clientId - Your Weibo client ID.
17
+ * @param {string} options.clientSecret - Your Weibo client secret.
18
+ *
19
+ * @description
20
+ * ## Parse Server Configuration
21
+ * To configure Parse Server for Weibo authentication, use the following structure:
22
+ * ### Secure Configuration
23
+ * ```json
24
+ * {
25
+ * "auth": {
26
+ * "weibo": {
27
+ * "clientId": "your-client-id",
28
+ * "clientSecret": "your-client-secret"
29
+ * }
30
+ * }
31
+ * }
32
+ * ```
33
+ * ### Insecure Configuration (Not Recommended)
34
+ * ```json
35
+ * {
36
+ * "auth": {
37
+ * "weibo": {
38
+ * "enableInsecureAuth": true
39
+ * }
40
+ * }
41
+ * }
42
+ * ```
43
+ *
44
+ * The adapter requires the following `authData` fields:
45
+ * - **Secure Authentication**: `code`, `redirect_uri`.
46
+ * - **Insecure Authentication (Not Recommended)**: `id`, `access_token`.
47
+ *
48
+ * ## Auth Payloads
49
+ * ### Secure Authentication Payload
50
+ * ```json
51
+ * {
52
+ * "weibo": {
53
+ * "code": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
54
+ * "redirect_uri": "https://example.com/callback"
55
+ * }
56
+ * }
57
+ * ```
58
+ * ### Insecure Authentication Payload (Not Recommended)
59
+ * ```json
60
+ * {
61
+ * "weibo": {
62
+ * "id": "1234567",
63
+ * "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
64
+ * }
65
+ * }
66
+ * ```
67
+ *
68
+ * ## Notes
69
+ * - **Insecure Authentication**: When `enableInsecureAuth` is enabled, the adapter directly validates the `id` and `access_token` provided by the client.
70
+ * - **Secure Authentication**: When `enableInsecureAuth` is disabled, the adapter exchanges the `code` and `redirect_uri` for an access token using Weibo's OAuth API.
71
+ * - `enableInsecureAuth` is **deprecated** and may be removed in future versions. Use secure authentication with `code` and `redirect_uri`.
72
+ *
73
+ * @example <caption>Auth Data Example (Secure)</caption>
74
+ * const authData = {
75
+ * weibo: {
76
+ * code: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
77
+ * redirect_uri: "https://example.com/callback"
78
+ * }
79
+ * };
80
+ *
81
+ * @example <caption>Auth Data Example (Insecure - Not Recommended)</caption>
82
+ * const authData = {
83
+ * weibo: {
84
+ * id: "1234567",
85
+ * access_token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
86
+ * }
87
+ * };
88
+ *
89
+ * @see {@link https://open.weibo.com/wiki/Oauth2/access_token Weibo Authentication Documentation}
90
+ */
7
91
 
8
- // Returns a promise that fulfills iff this user id is valid.
9
- function validateAuthData(authData) {
10
- return graphRequest(authData.access_token).then(function (data) {
11
- if (data && data.uid == authData.id) {
12
- return;
92
+ class WeiboAdapter extends _BaseCodeAuthAdapter.default {
93
+ constructor() {
94
+ super('Weibo');
95
+ }
96
+ async getUserFromAccessToken(access_token) {
97
+ const postData = _querystring.default.stringify({
98
+ access_token: access_token
99
+ });
100
+ const response = await fetch('https://api.weibo.com/oauth2/get_token_info', {
101
+ method: 'POST',
102
+ headers: {
103
+ 'Content-Type': 'application/x-www-form-urlencoded'
104
+ },
105
+ body: postData
106
+ });
107
+ const data = await response.json();
108
+ if (!response.ok) {
109
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Weibo auth is invalid for this user.');
13
110
  }
14
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'weibo auth is invalid for this user.');
15
- });
16
- }
17
-
18
- // Returns a promise that fulfills if this app id is valid.
19
- function validateAppId() {
20
- return Promise.resolve();
21
- }
22
-
23
- // A promisey wrapper for weibo graph requests.
24
- function graphRequest(access_token) {
25
- var postData = querystring.stringify({
26
- access_token: access_token
27
- });
28
- var options = {
29
- hostname: 'api.weibo.com',
30
- path: '/oauth2/get_token_info',
31
- method: 'POST',
32
- headers: {
33
- 'Content-Type': 'application/x-www-form-urlencoded',
34
- 'Content-Length': Buffer.byteLength(postData)
111
+ return {
112
+ id: data.uid
113
+ };
114
+ }
115
+ async getAccessTokenFromCode(authData) {
116
+ if (!authData?.code || !authData?.redirect_uri) {
117
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Weibo auth requires code and redirect_uri to be sent.');
118
+ }
119
+ const postData = _querystring.default.stringify({
120
+ client_id: this.clientId,
121
+ client_secret: this.clientSecret,
122
+ grant_type: 'authorization_code',
123
+ code: authData.code,
124
+ redirect_uri: authData.redirect_uri
125
+ });
126
+ const response = await fetch('https://api.weibo.com/oauth2/access_token', {
127
+ method: 'POST',
128
+ headers: {
129
+ 'Content-Type': 'application/x-www-form-urlencoded'
130
+ },
131
+ body: postData
132
+ });
133
+ const data = await response.json();
134
+ if (!response.ok || data.errcode) {
135
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Weibo auth is invalid for this user.');
35
136
  }
36
- };
37
- return httpsRequest.request(options, postData);
137
+ return data.access_token;
138
+ }
38
139
  }
39
- module.exports = {
40
- validateAppId,
41
- validateAuthData
42
- };
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwc1JlcXVlc3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJxdWVyeXN0cmluZyIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsImdyYXBoUmVxdWVzdCIsImFjY2Vzc190b2tlbiIsInRoZW4iLCJkYXRhIiwidWlkIiwiaWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwb3N0RGF0YSIsInN0cmluZ2lmeSIsIm9wdGlvbnMiLCJob3N0bmFtZSIsInBhdGgiLCJtZXRob2QiLCJoZWFkZXJzIiwiQnVmZmVyIiwiYnl0ZUxlbmd0aCIsInJlcXVlc3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvd2VpYm8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSB3ZWlibyBHcmFwaCBBUEkuXG52YXIgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbnZhciBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgcmV0dXJuIGdyYXBoUmVxdWVzdChhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoZGF0YSAmJiBkYXRhLnVpZCA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ3dlaWJvIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciB3ZWlibyBncmFwaCByZXF1ZXN0cy5cbmZ1bmN0aW9uIGdyYXBoUmVxdWVzdChhY2Nlc3NfdG9rZW4pIHtcbiAgdmFyIHBvc3REYXRhID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHtcbiAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc190b2tlbixcbiAgfSk7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIGhvc3RuYW1lOiAnYXBpLndlaWJvLmNvbScsXG4gICAgcGF0aDogJy9vYXV0aDIvZ2V0X3Rva2VuX2luZm8nLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICdDb250ZW50LUxlbmd0aCc6IEJ1ZmZlci5ieXRlTGVuZ3RoKHBvc3REYXRhKSxcbiAgICB9LFxuICB9O1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LnJlcXVlc3Qob3B0aW9ucywgcG9zdERhdGEpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxJQUFJQSxZQUFZLEdBQUdDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM1QyxJQUFJQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0MsS0FBSztBQUN2QyxJQUFJQyxXQUFXLEdBQUdGLE9BQU8sQ0FBQyxhQUFhLENBQUM7O0FBRXhDO0FBQ0EsU0FBU0csZ0JBQWdCQSxDQUFDQyxRQUFRLEVBQUU7RUFDbEMsT0FBT0MsWUFBWSxDQUFDRCxRQUFRLENBQUNFLFlBQVksQ0FBQyxDQUFDQyxJQUFJLENBQUMsVUFBVUMsSUFBSSxFQUFFO0lBQzlELElBQUlBLElBQUksSUFBSUEsSUFBSSxDQUFDQyxHQUFHLElBQUlMLFFBQVEsQ0FBQ00sRUFBRSxFQUFFO01BQ25DO0lBQ0Y7SUFDQSxNQUFNLElBQUlULEtBQUssQ0FBQ1UsS0FBSyxDQUFDVixLQUFLLENBQUNVLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsc0NBQXNDLENBQUM7RUFDN0YsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxTQUFTQyxhQUFhQSxDQUFBLEVBQUc7RUFDdkIsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUMxQjs7QUFFQTtBQUNBLFNBQVNWLFlBQVlBLENBQUNDLFlBQVksRUFBRTtFQUNsQyxJQUFJVSxRQUFRLEdBQUdkLFdBQVcsQ0FBQ2UsU0FBUyxDQUFDO0lBQ25DWCxZQUFZLEVBQUVBO0VBQ2hCLENBQUMsQ0FBQztFQUNGLElBQUlZLE9BQU8sR0FBRztJQUNaQyxRQUFRLEVBQUUsZUFBZTtJQUN6QkMsSUFBSSxFQUFFLHdCQUF3QjtJQUM5QkMsTUFBTSxFQUFFLE1BQU07SUFDZEMsT0FBTyxFQUFFO01BQ1AsY0FBYyxFQUFFLG1DQUFtQztNQUNuRCxnQkFBZ0IsRUFBRUMsTUFBTSxDQUFDQyxVQUFVLENBQUNSLFFBQVE7SUFDOUM7RUFDRixDQUFDO0VBQ0QsT0FBT2pCLFlBQVksQ0FBQzBCLE9BQU8sQ0FBQ1AsT0FBTyxFQUFFRixRQUFRLENBQUM7QUFDaEQ7QUFFQVUsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZmQsYUFBYTtFQUNiVjtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
140
+ var _default = exports.default = new WeiboAdapter();
141
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmFzZUNvZGVBdXRoQWRhcHRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3F1ZXJ5c3RyaW5nIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiV2VpYm9BZGFwdGVyIiwiQmFzZUF1dGhDb2RlQWRhcHRlciIsImNvbnN0cnVjdG9yIiwiZ2V0VXNlckZyb21BY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsInBvc3REYXRhIiwicXVlcnlzdHJpbmciLCJzdHJpbmdpZnkiLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJkYXRhIiwianNvbiIsIm9rIiwiUGFyc2UiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJpZCIsInVpZCIsImdldEFjY2Vzc1Rva2VuRnJvbUNvZGUiLCJhdXRoRGF0YSIsImNvZGUiLCJyZWRpcmVjdF91cmkiLCJjbGllbnRfaWQiLCJjbGllbnRJZCIsImNsaWVudF9zZWNyZXQiLCJjbGllbnRTZWNyZXQiLCJncmFudF90eXBlIiwiZXJyY29kZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3dlaWJvLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2UgU2VydmVyIGF1dGhlbnRpY2F0aW9uIGFkYXB0ZXIgZm9yIFdlaWJvLlxuICpcbiAqIEBjbGFzcyBXZWlib0FkYXB0ZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5lbmFibGVJbnNlY3VyZUF1dGg9ZmFsc2VdIC0gKipbREVQUkVDQVRFRF0qKiBFbmFibGUgaW5zZWN1cmUgYXV0aGVudGljYXRpb24gKG5vdCByZWNvbW1lbmRlZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jbGllbnRJZCAtIFlvdXIgV2VpYm8gY2xpZW50IElELlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY2xpZW50U2VjcmV0IC0gWW91ciBXZWlibyBjbGllbnQgc2VjcmV0LlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogIyMgUGFyc2UgU2VydmVyIENvbmZpZ3VyYXRpb25cbiAqIFRvIGNvbmZpZ3VyZSBQYXJzZSBTZXJ2ZXIgZm9yIFdlaWJvIGF1dGhlbnRpY2F0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiAjIyMgU2VjdXJlIENvbmZpZ3VyYXRpb25cbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJhdXRoXCI6IHtcbiAqICAgICBcIndlaWJvXCI6IHtcbiAqICAgICAgIFwiY2xpZW50SWRcIjogXCJ5b3VyLWNsaWVudC1pZFwiLFxuICogICAgICAgXCJjbGllbnRTZWNyZXRcIjogXCJ5b3VyLWNsaWVudC1zZWNyZXRcIlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiAjIyMgSW5zZWN1cmUgQ29uZmlndXJhdGlvbiAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwid2VpYm9cIjoge1xuICogICAgICAgXCJlbmFibGVJbnNlY3VyZUF1dGhcIjogdHJ1ZVxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogVGhlIGFkYXB0ZXIgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBgYXV0aERhdGFgIGZpZWxkczpcbiAqIC0gKipTZWN1cmUgQXV0aGVudGljYXRpb24qKjogYGNvZGVgLCBgcmVkaXJlY3RfdXJpYC5cbiAqIC0gKipJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiAoTm90IFJlY29tbWVuZGVkKSoqOiBgaWRgLCBgYWNjZXNzX3Rva2VuYC5cbiAqXG4gKiAjIyBBdXRoIFBheWxvYWRzXG4gKiAjIyMgU2VjdXJlIEF1dGhlbnRpY2F0aW9uIFBheWxvYWRcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJ3ZWlib1wiOiB7XG4gKiAgICAgXCJjb2RlXCI6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIixcbiAqICAgICBcInJlZGlyZWN0X3VyaVwiOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vY2FsbGJhY2tcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqICMjIyBJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkIChOb3QgUmVjb21tZW5kZWQpXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwid2VpYm9cIjoge1xuICogICAgIFwiaWRcIjogXCIxMjM0NTY3XCIsXG4gKiAgICAgXCJhY2Nlc3NfdG9rZW5cIjogXCJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFwiXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIE5vdGVzXG4gKiAtICoqSW5zZWN1cmUgQXV0aGVudGljYXRpb24qKjogV2hlbiBgZW5hYmxlSW5zZWN1cmVBdXRoYCBpcyBlbmFibGVkLCB0aGUgYWRhcHRlciBkaXJlY3RseSB2YWxpZGF0ZXMgdGhlIGBpZGAgYW5kIGBhY2Nlc3NfdG9rZW5gIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuXG4gKiAtICoqU2VjdXJlIEF1dGhlbnRpY2F0aW9uKio6IFdoZW4gYGVuYWJsZUluc2VjdXJlQXV0aGAgaXMgZGlzYWJsZWQsIHRoZSBhZGFwdGVyIGV4Y2hhbmdlcyB0aGUgYGNvZGVgIGFuZCBgcmVkaXJlY3RfdXJpYCBmb3IgYW4gYWNjZXNzIHRva2VuIHVzaW5nIFdlaWJvJ3MgT0F1dGggQVBJLlxuICogLSBgZW5hYmxlSW5zZWN1cmVBdXRoYCBpcyAqKmRlcHJlY2F0ZWQqKiBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBVc2Ugc2VjdXJlIGF1dGhlbnRpY2F0aW9uIHdpdGggYGNvZGVgIGFuZCBgcmVkaXJlY3RfdXJpYC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5BdXRoIERhdGEgRXhhbXBsZSAoU2VjdXJlKTwvY2FwdGlvbj5cbiAqIGNvbnN0IGF1dGhEYXRhID0ge1xuICogICB3ZWlibzoge1xuICogICAgIGNvZGU6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIixcbiAqICAgICByZWRpcmVjdF91cmk6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9jYWxsYmFja1wiXG4gKiAgIH1cbiAqIH07XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QXV0aCBEYXRhIEV4YW1wbGUgKEluc2VjdXJlIC0gTm90IFJlY29tbWVuZGVkKTwvY2FwdGlvbj5cbiAqIGNvbnN0IGF1dGhEYXRhID0ge1xuICogICB3ZWlibzoge1xuICogICAgIGlkOiBcIjEyMzQ1NjdcIixcbiAqICAgICBhY2Nlc3NfdG9rZW46IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9O1xuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3Blbi53ZWliby5jb20vd2lraS9PYXV0aDIvYWNjZXNzX3Rva2VuIFdlaWJvIEF1dGhlbnRpY2F0aW9uIERvY3VtZW50YXRpb259XG4gKi9cblxuaW1wb3J0IEJhc2VBdXRoQ29kZUFkYXB0ZXIgZnJvbSAnLi9CYXNlQ29kZUF1dGhBZGFwdGVyJztcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmNsYXNzIFdlaWJvQWRhcHRlciBleHRlbmRzIEJhc2VBdXRoQ29kZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignV2VpYm8nKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJGcm9tQWNjZXNzVG9rZW4oYWNjZXNzX3Rva2VuKSB7XG4gICAgY29uc3QgcG9zdERhdGEgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoe1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS53ZWliby5jb20vb2F1dGgyL2dldF90b2tlbl9pbmZvJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBwb3N0RGF0YSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1dlaWJvIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS51aWQsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QWNjZXNzVG9rZW5Gcm9tQ29kZShhdXRoRGF0YSkge1xuICAgIGlmICghYXV0aERhdGE/LmNvZGUgfHwgIWF1dGhEYXRhPy5yZWRpcmVjdF91cmkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgJ1dlaWJvIGF1dGggcmVxdWlyZXMgY29kZSBhbmQgcmVkaXJlY3RfdXJpIHRvIGJlIHNlbnQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0RGF0YSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh7XG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgY29kZTogYXV0aERhdGEuY29kZSxcbiAgICAgIHJlZGlyZWN0X3VyaTogYXV0aERhdGEucmVkaXJlY3RfdXJpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkud2VpYm8uY29tL29hdXRoMi9hY2Nlc3NfdG9rZW4nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IHBvc3REYXRhLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgZGF0YS5lcnJjb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1dlaWJvIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmFjY2Vzc190b2tlbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2VpYm9BZGFwdGVyKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQWtGQSxJQUFBQSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQXNDLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBbkZ0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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