parse-server 2.8.4 → 8.6.2

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 (240) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +929 -278
  4. package/lib/AccountLockout.js +47 -30
  5. package/lib/Adapters/AdapterLoader.js +21 -6
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
  7. package/lib/Adapters/Auth/AuthAdapter.js +116 -13
  8. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  9. package/lib/Adapters/Auth/OAuth1Client.js +27 -46
  10. package/lib/Adapters/Auth/apple.js +123 -0
  11. package/lib/Adapters/Auth/facebook.js +162 -35
  12. package/lib/Adapters/Auth/gcenter.js +217 -0
  13. package/lib/Adapters/Auth/github.js +118 -48
  14. package/lib/Adapters/Auth/google.js +160 -51
  15. package/lib/Adapters/Auth/gpgames.js +125 -0
  16. package/lib/Adapters/Auth/httpsRequest.js +6 -7
  17. package/lib/Adapters/Auth/index.js +170 -62
  18. package/lib/Adapters/Auth/instagram.js +114 -40
  19. package/lib/Adapters/Auth/janraincapture.js +52 -23
  20. package/lib/Adapters/Auth/janrainengage.js +19 -36
  21. package/lib/Adapters/Auth/keycloak.js +148 -0
  22. package/lib/Adapters/Auth/ldap.js +167 -0
  23. package/lib/Adapters/Auth/line.js +125 -0
  24. package/lib/Adapters/Auth/linkedin.js +111 -55
  25. package/lib/Adapters/Auth/meetup.js +24 -34
  26. package/lib/Adapters/Auth/mfa.js +324 -0
  27. package/lib/Adapters/Auth/microsoft.js +111 -0
  28. package/lib/Adapters/Auth/oauth2.js +97 -162
  29. package/lib/Adapters/Auth/phantauth.js +53 -0
  30. package/lib/Adapters/Auth/qq.js +108 -49
  31. package/lib/Adapters/Auth/spotify.js +107 -55
  32. package/lib/Adapters/Auth/twitter.js +188 -48
  33. package/lib/Adapters/Auth/utils.js +28 -0
  34. package/lib/Adapters/Auth/vkontakte.js +26 -39
  35. package/lib/Adapters/Auth/wechat.js +106 -44
  36. package/lib/Adapters/Auth/weibo.js +132 -58
  37. package/lib/Adapters/Cache/CacheAdapter.js +13 -8
  38. package/lib/Adapters/Cache/InMemoryCache.js +3 -13
  39. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
  40. package/lib/Adapters/Cache/LRUCache.js +13 -27
  41. package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
  42. package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
  43. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  44. package/lib/Adapters/Email/MailAdapter.js +10 -8
  45. package/lib/Adapters/Files/FilesAdapter.js +83 -25
  46. package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
  47. package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
  48. package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
  49. package/lib/Adapters/Logger/WinstonLogger.js +69 -88
  50. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
  51. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
  52. package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
  53. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  54. package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
  55. package/lib/Adapters/Push/PushAdapter.js +14 -7
  56. package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
  57. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
  58. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
  59. package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
  60. package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
  61. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
  62. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
  63. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
  64. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  65. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  66. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  67. package/lib/Auth.js +488 -125
  68. package/lib/ClientSDK.js +2 -6
  69. package/lib/Config.js +525 -94
  70. package/lib/Controllers/AdaptableController.js +5 -25
  71. package/lib/Controllers/AnalyticsController.js +22 -23
  72. package/lib/Controllers/CacheController.js +10 -31
  73. package/lib/Controllers/DatabaseController.js +767 -313
  74. package/lib/Controllers/FilesController.js +49 -54
  75. package/lib/Controllers/HooksController.js +80 -84
  76. package/lib/Controllers/LiveQueryController.js +35 -22
  77. package/lib/Controllers/LoggerController.js +22 -58
  78. package/lib/Controllers/ParseGraphQLController.js +293 -0
  79. package/lib/Controllers/PushController.js +58 -49
  80. package/lib/Controllers/SchemaController.js +916 -422
  81. package/lib/Controllers/UserController.js +265 -180
  82. package/lib/Controllers/index.js +90 -125
  83. package/lib/Controllers/types.js +1 -1
  84. package/lib/Deprecator/Deprecations.js +30 -0
  85. package/lib/Deprecator/Deprecator.js +127 -0
  86. package/lib/Error.js +48 -0
  87. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  88. package/lib/GraphQL/ParseGraphQLServer.js +214 -0
  89. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  90. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  91. package/lib/GraphQL/loaders/configMutations.js +87 -0
  92. package/lib/GraphQL/loaders/configQueries.js +79 -0
  93. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  94. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  95. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
  96. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  97. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  98. package/lib/GraphQL/loaders/functionsMutations.js +78 -0
  99. package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
  100. package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
  101. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  102. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  103. package/lib/GraphQL/loaders/schemaMutations.js +162 -0
  104. package/lib/GraphQL/loaders/schemaQueries.js +81 -0
  105. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  106. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  107. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  108. package/lib/GraphQL/parseGraphQLUtils.js +63 -0
  109. package/lib/GraphQL/transformers/className.js +14 -0
  110. package/lib/GraphQL/transformers/constraintType.js +53 -0
  111. package/lib/GraphQL/transformers/inputType.js +51 -0
  112. package/lib/GraphQL/transformers/mutation.js +274 -0
  113. package/lib/GraphQL/transformers/outputType.js +51 -0
  114. package/lib/GraphQL/transformers/query.js +237 -0
  115. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  116. package/lib/KeyPromiseQueue.js +48 -0
  117. package/lib/LiveQuery/Client.js +25 -33
  118. package/lib/LiveQuery/Id.js +2 -5
  119. package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
  120. package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
  121. package/lib/LiveQuery/ParsePubSub.js +7 -16
  122. package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
  123. package/lib/LiveQuery/QueryTools.js +76 -15
  124. package/lib/LiveQuery/RequestSchema.js +111 -97
  125. package/lib/LiveQuery/SessionTokenCache.js +23 -36
  126. package/lib/LiveQuery/Subscription.js +8 -17
  127. package/lib/LiveQuery/equalObjects.js +2 -3
  128. package/lib/Options/Definitions.js +1355 -382
  129. package/lib/Options/docs.js +301 -62
  130. package/lib/Options/index.js +11 -1
  131. package/lib/Options/parsers.js +14 -10
  132. package/lib/Page.js +44 -0
  133. package/lib/ParseMessageQueue.js +6 -13
  134. package/lib/ParseServer.js +474 -235
  135. package/lib/ParseServerRESTController.js +102 -40
  136. package/lib/PromiseRouter.js +39 -50
  137. package/lib/Push/PushQueue.js +24 -30
  138. package/lib/Push/PushWorker.js +32 -56
  139. package/lib/Push/utils.js +22 -35
  140. package/lib/RestQuery.js +361 -139
  141. package/lib/RestWrite.js +713 -344
  142. package/lib/Routers/AggregateRouter.js +97 -71
  143. package/lib/Routers/AnalyticsRouter.js +8 -14
  144. package/lib/Routers/AudiencesRouter.js +16 -35
  145. package/lib/Routers/ClassesRouter.js +86 -72
  146. package/lib/Routers/CloudCodeRouter.js +28 -37
  147. package/lib/Routers/FeaturesRouter.js +22 -25
  148. package/lib/Routers/FilesRouter.js +266 -171
  149. package/lib/Routers/FunctionsRouter.js +87 -103
  150. package/lib/Routers/GlobalConfigRouter.js +94 -33
  151. package/lib/Routers/GraphQLRouter.js +41 -0
  152. package/lib/Routers/HooksRouter.js +43 -47
  153. package/lib/Routers/IAPValidationRouter.js +57 -70
  154. package/lib/Routers/InstallationsRouter.js +17 -25
  155. package/lib/Routers/LogsRouter.js +10 -25
  156. package/lib/Routers/PagesRouter.js +647 -0
  157. package/lib/Routers/PublicAPIRouter.js +104 -112
  158. package/lib/Routers/PurgeRouter.js +19 -29
  159. package/lib/Routers/PushRouter.js +14 -28
  160. package/lib/Routers/RolesRouter.js +7 -14
  161. package/lib/Routers/SchemasRouter.js +63 -42
  162. package/lib/Routers/SecurityRouter.js +34 -0
  163. package/lib/Routers/SessionsRouter.js +25 -38
  164. package/lib/Routers/UsersRouter.js +463 -190
  165. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  166. package/lib/SchemaMigrations/Migrations.js +30 -0
  167. package/lib/Security/Check.js +109 -0
  168. package/lib/Security/CheckGroup.js +44 -0
  169. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  170. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
  171. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  172. package/lib/Security/CheckRunner.js +213 -0
  173. package/lib/SharedRest.js +29 -0
  174. package/lib/StatusHandler.js +96 -93
  175. package/lib/TestUtils.js +70 -14
  176. package/lib/Utils.js +468 -0
  177. package/lib/batch.js +74 -40
  178. package/lib/cache.js +8 -8
  179. package/lib/cli/definitions/parse-live-query-server.js +4 -3
  180. package/lib/cli/definitions/parse-server.js +4 -3
  181. package/lib/cli/parse-live-query-server.js +9 -17
  182. package/lib/cli/parse-server.js +49 -47
  183. package/lib/cli/utils/commander.js +20 -29
  184. package/lib/cli/utils/runner.js +31 -32
  185. package/lib/cloud-code/Parse.Cloud.js +711 -36
  186. package/lib/cloud-code/Parse.Server.js +21 -0
  187. package/lib/cryptoUtils.js +6 -11
  188. package/lib/defaults.js +21 -15
  189. package/lib/deprecated.js +1 -1
  190. package/lib/index.js +78 -67
  191. package/lib/logger.js +12 -20
  192. package/lib/middlewares.js +484 -160
  193. package/lib/password.js +10 -6
  194. package/lib/request.js +175 -0
  195. package/lib/requiredParameter.js +4 -3
  196. package/lib/rest.js +157 -82
  197. package/lib/triggers.js +627 -185
  198. package/lib/vendor/README.md +3 -3
  199. package/lib/vendor/mongodbUrl.js +224 -137
  200. package/package.json +135 -57
  201. package/postinstall.js +38 -50
  202. package/public_html/invalid_verification_link.html +3 -3
  203. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  204. package/types/@types/deepcopy/index.d.ts +5 -0
  205. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  206. package/types/Options/index.d.ts +301 -0
  207. package/types/ParseServer.d.ts +65 -0
  208. package/types/eslint.config.mjs +30 -0
  209. package/types/index.d.ts +21 -0
  210. package/types/logger.d.ts +2 -0
  211. package/types/tests.ts +44 -0
  212. package/types/tsconfig.json +24 -0
  213. package/CHANGELOG.md +0 -1246
  214. package/PATENTS +0 -37
  215. package/bin/dev +0 -37
  216. package/lib/.DS_Store +0 -0
  217. package/lib/Adapters/Auth/common.js +0 -2
  218. package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
  219. package/lib/Controllers/SchemaCache.js +0 -97
  220. package/lib/LiveQuery/.DS_Store +0 -0
  221. package/lib/cli/utils/parsers.js +0 -77
  222. package/lib/cloud-code/.DS_Store +0 -0
  223. package/lib/cloud-code/HTTPResponse.js +0 -57
  224. package/lib/cloud-code/Untitled-1 +0 -123
  225. package/lib/cloud-code/httpRequest.js +0 -102
  226. package/lib/cloud-code/team.html +0 -123
  227. package/lib/graphql/ParseClass.js +0 -234
  228. package/lib/graphql/Schema.js +0 -197
  229. package/lib/graphql/index.js +0 -1
  230. package/lib/graphql/types/ACL.js +0 -35
  231. package/lib/graphql/types/Date.js +0 -25
  232. package/lib/graphql/types/File.js +0 -24
  233. package/lib/graphql/types/GeoPoint.js +0 -35
  234. package/lib/graphql/types/JSONObject.js +0 -30
  235. package/lib/graphql/types/NumberInput.js +0 -43
  236. package/lib/graphql/types/NumberQuery.js +0 -42
  237. package/lib/graphql/types/Pointer.js +0 -35
  238. package/lib/graphql/types/QueryConstraint.js +0 -61
  239. package/lib/graphql/types/StringQuery.js +0 -39
  240. package/lib/graphql/types/index.js +0 -110
@@ -1,7 +1,6 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  const https = require('https');
4
-
5
4
  function makeCallback(resolve, reject, noJSON) {
6
5
  return function (res) {
7
6
  let data = '';
@@ -22,13 +21,11 @@ function makeCallback(resolve, reject, noJSON) {
22
21
  res.on('error', reject);
23
22
  };
24
23
  }
25
-
26
24
  function get(options, noJSON = false) {
27
25
  return new Promise((resolve, reject) => {
28
26
  https.get(options, makeCallback(resolve, reject, noJSON)).on('error', reject);
29
27
  });
30
28
  }
31
-
32
29
  function request(options, postData) {
33
30
  return new Promise((resolve, reject) => {
34
31
  const req = https.request(options, makeCallback(resolve, reject));
@@ -37,6 +34,8 @@ function request(options, postData) {
37
34
  req.end();
38
35
  });
39
36
  }
40
-
41
- module.exports = { get, request };
42
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2h0dHBzUmVxdWVzdC5qcyJdLCJuYW1lcyI6WyJodHRwcyIsInJlcXVpcmUiLCJtYWtlQ2FsbGJhY2siLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9KU09OIiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJKU09OIiwicGFyc2UiLCJlIiwiZ2V0Iiwib3B0aW9ucyIsIlByb21pc2UiLCJyZXF1ZXN0IiwicG9zdERhdGEiLCJyZXEiLCJ3cml0ZSIsImVuZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsUUFBUUMsUUFBUSxPQUFSLENBQWQ7O0FBRUEsU0FBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLE1BQS9CLEVBQXVDQyxNQUF2QyxFQUErQztBQUM3QyxTQUFPLFVBQVNDLEdBQVQsRUFBYztBQUNuQixRQUFJQyxPQUFPLEVBQVg7QUFDQUQsUUFBSUUsRUFBSixDQUFPLE1BQVAsRUFBZ0JDLEtBQUQsSUFBVztBQUN4QkYsY0FBUUUsS0FBUjtBQUNELEtBRkQ7QUFHQUgsUUFBSUUsRUFBSixDQUFPLEtBQVAsRUFBYyxNQUFNO0FBQ2xCLFVBQUlILE1BQUosRUFBWTtBQUNWLGVBQU9GLFFBQVFJLElBQVIsQ0FBUDtBQUNEO0FBQ0QsVUFBSTtBQUNGQSxlQUFPRyxLQUFLQyxLQUFMLENBQVdKLElBQVgsQ0FBUDtBQUNELE9BRkQsQ0FFRSxPQUFNSyxDQUFOLEVBQVM7QUFDVCxlQUFPUixPQUFPUSxDQUFQLENBQVA7QUFDRDtBQUNEVCxjQUFRSSxJQUFSO0FBQ0QsS0FWRDtBQVdBRCxRQUFJRSxFQUFKLENBQU8sT0FBUCxFQUFnQkosTUFBaEI7QUFDRCxHQWpCRDtBQWtCRDs7QUFFRCxTQUFTUyxHQUFULENBQWFDLE9BQWIsRUFBc0JULFNBQVMsS0FBL0IsRUFBc0M7QUFDcEMsU0FBTyxJQUFJVSxPQUFKLENBQVksQ0FBQ1osT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDSixVQUNHYSxHQURILENBQ09DLE9BRFAsRUFDZ0JaLGFBQWFDLE9BQWIsRUFBc0JDLE1BQXRCLEVBQThCQyxNQUE5QixDQURoQixFQUVHRyxFQUZILENBRU0sT0FGTixFQUVlSixNQUZmO0FBR0QsR0FKTSxDQUFQO0FBS0Q7O0FBRUQsU0FBU1ksT0FBVCxDQUFpQkYsT0FBakIsRUFBMEJHLFFBQTFCLEVBQW9DO0FBQ2xDLFNBQU8sSUFBSUYsT0FBSixDQUFZLENBQUNaLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUN0QyxVQUFNYyxNQUFNbEIsTUFBTWdCLE9BQU4sQ0FBY0YsT0FBZCxFQUF1QlosYUFBYUMsT0FBYixFQUFzQkMsTUFBdEIsQ0FBdkIsQ0FBWjtBQUNBYyxRQUFJVixFQUFKLENBQU8sT0FBUCxFQUFnQkosTUFBaEI7QUFDQWMsUUFBSUMsS0FBSixDQUFVRixRQUFWO0FBQ0FDLFFBQUlFLEdBQUo7QUFDRCxHQUxNLENBQVA7QUFNRDs7QUFFREMsT0FBT0MsT0FBUCxHQUFpQixFQUFFVCxHQUFGLEVBQU9HLE9BQVAsRUFBakIiLCJmaWxlIjoiaHR0cHNSZXF1ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuXG5mdW5jdGlvbiBtYWtlQ2FsbGJhY2socmVzb2x2ZSwgcmVqZWN0LCBub0pTT04pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJlcykge1xuICAgIGxldCBkYXRhID0gJyc7XG4gICAgcmVzLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBkYXRhICs9IGNodW5rO1xuICAgIH0pO1xuICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgaWYgKG5vSlNPTikge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShkYXRhKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGRhdGEpO1xuICAgIH0pO1xuICAgIHJlcy5vbignZXJyb3InLCByZWplY3QpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXQob3B0aW9ucywgbm9KU09OID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBodHRwc1xuICAgICAgLmdldChvcHRpb25zLCBtYWtlQ2FsbGJhY2socmVzb2x2ZSwgcmVqZWN0LCBub0pTT04pKVxuICAgICAgLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0KG9wdGlvbnMsIHBvc3REYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCBtYWtlQ2FsbGJhY2socmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgcmVxLndyaXRlKHBvc3REYXRhKTtcbiAgICByZXEuZW5kKCk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgZ2V0LCByZXF1ZXN0IH07XG4iXX0=
37
+ module.exports = {
38
+ get,
39
+ request
40
+ };
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwcyIsInJlcXVpcmUiLCJtYWtlQ2FsbGJhY2siLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9KU09OIiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJKU09OIiwicGFyc2UiLCJlIiwiZ2V0Iiwib3B0aW9ucyIsIlByb21pc2UiLCJyZXF1ZXN0IiwicG9zdERhdGEiLCJyZXEiLCJ3cml0ZSIsImVuZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9odHRwc1JlcXVlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuXG5mdW5jdGlvbiBtYWtlQ2FsbGJhY2socmVzb2x2ZSwgcmVqZWN0LCBub0pTT04pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXMpIHtcbiAgICBsZXQgZGF0YSA9ICcnO1xuICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgfSk7XG4gICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICBpZiAobm9KU09OKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGRhdGEpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGRhdGEpO1xuICAgIH0pO1xuICAgIHJlcy5vbignZXJyb3InLCByZWplY3QpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXQob3B0aW9ucywgbm9KU09OID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBodHRwcy5nZXQob3B0aW9ucywgbWFrZUNhbGxiYWNrKHJlc29sdmUsIHJlamVjdCwgbm9KU09OKSkub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3Qob3B0aW9ucywgcG9zdERhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIG1ha2VDYWxsYmFjayhyZXNvbHZlLCByZWplY3QpKTtcbiAgICByZXEub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICByZXEud3JpdGUocG9zdERhdGEpO1xuICAgIHJlcS5lbmQoKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXQsIHJlcXVlc3QgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFFOUIsU0FBU0MsWUFBWUEsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRTtFQUM3QyxPQUFPLFVBQVVDLEdBQUcsRUFBRTtJQUNwQixJQUFJQyxJQUFJLEdBQUcsRUFBRTtJQUNiRCxHQUFHLENBQUNFLEVBQUUsQ0FBQyxNQUFNLEVBQUVDLEtBQUssSUFBSTtNQUN0QkYsSUFBSSxJQUFJRSxLQUFLO0lBQ2YsQ0FBQyxDQUFDO0lBQ0ZILEdBQUcsQ0FBQ0UsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNO01BQ2xCLElBQUlILE1BQU0sRUFBRTtRQUNWLE9BQU9GLE9BQU8sQ0FBQ0ksSUFBSSxDQUFDO01BQ3RCO01BQ0EsSUFBSTtRQUNGQSxJQUFJLEdBQUdHLElBQUksQ0FBQ0MsS0FBSyxDQUFDSixJQUFJLENBQUM7TUFDekIsQ0FBQyxDQUFDLE9BQU9LLENBQUMsRUFBRTtRQUNWLE9BQU9SLE1BQU0sQ0FBQ1EsQ0FBQyxDQUFDO01BQ2xCO01BQ0FULE9BQU8sQ0FBQ0ksSUFBSSxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBQ0ZELEdBQUcsQ0FBQ0UsRUFBRSxDQUFDLE9BQU8sRUFBRUosTUFBTSxDQUFDO0VBQ3pCLENBQUM7QUFDSDtBQUVBLFNBQVNTLEdBQUdBLENBQUNDLE9BQU8sRUFBRVQsTUFBTSxHQUFHLEtBQUssRUFBRTtFQUNwQyxPQUFPLElBQUlVLE9BQU8sQ0FBQyxDQUFDWixPQUFPLEVBQUVDLE1BQU0sS0FBSztJQUN0Q0osS0FBSyxDQUFDYSxHQUFHLENBQUNDLE9BQU8sRUFBRVosWUFBWSxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxDQUFDLENBQUMsQ0FBQ0csRUFBRSxDQUFDLE9BQU8sRUFBRUosTUFBTSxDQUFDO0VBQy9FLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU1ksT0FBT0EsQ0FBQ0YsT0FBTyxFQUFFRyxRQUFRLEVBQUU7RUFDbEMsT0FBTyxJQUFJRixPQUFPLENBQUMsQ0FBQ1osT0FBTyxFQUFFQyxNQUFNLEtBQUs7SUFDdEMsTUFBTWMsR0FBRyxHQUFHbEIsS0FBSyxDQUFDZ0IsT0FBTyxDQUFDRixPQUFPLEVBQUVaLFlBQVksQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLENBQUMsQ0FBQztJQUNqRWMsR0FBRyxDQUFDVixFQUFFLENBQUMsT0FBTyxFQUFFSixNQUFNLENBQUM7SUFDdkJjLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDRixRQUFRLENBQUM7SUFDbkJDLEdBQUcsQ0FBQ0UsR0FBRyxDQUFDLENBQUM7RUFDWCxDQUFDLENBQUM7QUFDSjtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUFFVCxHQUFHO0VBQUVHO0FBQVEsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,28 +1,34 @@
1
- 'use strict';
2
-
3
- var _AdapterLoader = require('../AdapterLoader');
4
-
5
- var _AdapterLoader2 = _interopRequireDefault(_AdapterLoader);
6
-
7
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
-
1
+ "use strict";
2
+
3
+ var _AdapterLoader = _interopRequireDefault(require("../AdapterLoader"));
4
+ var _node = _interopRequireDefault(require("parse/node"));
5
+ var _AuthAdapter = _interopRequireDefault(require("./AuthAdapter"));
6
+ var _gcenter = _interopRequireDefault(require("./gcenter"));
7
+ var _github = _interopRequireDefault(require("./github"));
8
+ var _gpgames = _interopRequireDefault(require("./gpgames"));
9
+ var _instagram = _interopRequireDefault(require("./instagram"));
10
+ var _line = _interopRequireDefault(require("./line"));
11
+ var _linkedin = _interopRequireDefault(require("./linkedin"));
12
+ var _mfa = _interopRequireDefault(require("./mfa"));
13
+ var _microsoft = _interopRequireDefault(require("./microsoft"));
14
+ var _oauth = _interopRequireDefault(require("./oauth2"));
15
+ var _qq = _interopRequireDefault(require("./qq"));
16
+ var _spotify = _interopRequireDefault(require("./spotify"));
17
+ var _twitter = _interopRequireDefault(require("./twitter"));
18
+ var _wechat = _interopRequireDefault(require("./wechat"));
19
+ var _weibo = _interopRequireDefault(require("./weibo"));
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ const apple = require('./apple');
22
+ const digits = require('./twitter'); // digits tokens are validated by twitter
9
23
  const facebook = require('./facebook');
10
- const facebookaccountkit = require('./facebookaccountkit');
11
- const instagram = require("./instagram");
12
- const linkedin = require("./linkedin");
13
- const meetup = require("./meetup");
14
- const google = require("./google");
15
- const github = require("./github");
16
- const twitter = require("./twitter");
17
- const spotify = require("./spotify");
18
- const digits = require("./twitter"); // digits tokens are validated by twitter
19
- const janrainengage = require("./janrainengage");
20
- const janraincapture = require("./janraincapture");
21
- const vkontakte = require("./vkontakte");
22
- const qq = require("./qq");
23
- const wechat = require("./wechat");
24
- const weibo = require("./weibo");
25
-
24
+ const google = require('./google');
25
+ const janraincapture = require('./janraincapture');
26
+ const janrainengage = require('./janrainengage');
27
+ const keycloak = require('./keycloak');
28
+ const ldap = require('./ldap');
29
+ const meetup = require('./meetup');
30
+ const phantauth = require('./phantauth');
31
+ const vkontakte = require('./vkontakte');
26
32
  const anonymous = {
27
33
  validateAuthData: () => {
28
34
  return Promise.resolve();
@@ -31,67 +37,136 @@ const anonymous = {
31
37
  return Promise.resolve();
32
38
  }
33
39
  };
34
-
35
40
  const providers = {
41
+ apple,
42
+ gcenter: _gcenter.default,
43
+ gpgames: _gpgames.default,
36
44
  facebook,
37
- facebookaccountkit,
38
- instagram,
39
- linkedin,
45
+ instagram: _instagram.default,
46
+ linkedin: _linkedin.default,
40
47
  meetup,
48
+ mfa: _mfa.default,
41
49
  google,
42
- github,
43
- twitter,
44
- spotify,
50
+ github: _github.default,
51
+ twitter: _twitter.default,
52
+ spotify: _spotify.default,
45
53
  anonymous,
46
54
  digits,
47
55
  janrainengage,
48
56
  janraincapture,
57
+ line: _line.default,
49
58
  vkontakte,
50
- qq,
51
- wechat,
52
- weibo
59
+ qq: _qq.default,
60
+ wechat: _wechat.default,
61
+ weibo: _weibo.default,
62
+ phantauth,
63
+ microsoft: _microsoft.default,
64
+ keycloak,
65
+ ldap
66
+ };
67
+
68
+ // Indexed auth policies
69
+ const authAdapterPolicies = {
70
+ default: true,
71
+ solo: true,
72
+ additional: true
53
73
  };
54
- function authDataValidator(adapter, appIds, options) {
55
- return function (authData) {
56
- return adapter.validateAuthData(authData, options).then(() => {
57
- if (appIds) {
58
- return adapter.validateAppId(appIds, authData, options);
74
+ function authDataValidator(provider, adapter, appIds, options) {
75
+ return async function (authData, req, user, requestObject) {
76
+ if (appIds && typeof adapter.validateAppId === 'function') {
77
+ await Promise.resolve(adapter.validateAppId(appIds, authData, options, requestObject));
78
+ }
79
+ if (adapter.policy && !authAdapterPolicies[adapter.policy] && typeof adapter.policy !== 'function') {
80
+ throw new _node.default.Error(_node.default.Error.OTHER_CAUSE, 'AuthAdapter policy is not configured correctly. The value must be either "solo", "additional", "default" or undefined (will be handled as "default")');
81
+ }
82
+ if (typeof adapter.validateAuthData === 'function') {
83
+ return adapter.validateAuthData(authData, options, requestObject);
84
+ }
85
+ if (typeof adapter.validateSetUp !== 'function' || typeof adapter.validateLogin !== 'function' || typeof adapter.validateUpdate !== 'function') {
86
+ throw new _node.default.Error(_node.default.Error.OTHER_CAUSE, 'Adapter is not configured. Implement either validateAuthData or all of the following: validateSetUp, validateLogin and validateUpdate');
87
+ }
88
+ // When masterKey is detected, we should trigger a logged in user
89
+ const isLoggedIn = req.auth.user && user && req.auth.user.id === user.id || user && req.auth.isMaster;
90
+ let hasAuthDataConfigured = false;
91
+ if (user && user.get('authData') && user.get('authData')[provider]) {
92
+ hasAuthDataConfigured = true;
93
+ }
94
+ if (isLoggedIn) {
95
+ // User is updating their authData
96
+ if (hasAuthDataConfigured) {
97
+ return {
98
+ method: 'validateUpdate',
99
+ validator: () => adapter.validateUpdate(authData, options, requestObject)
100
+ };
59
101
  }
60
- return Promise.resolve();
61
- });
102
+ // Set up if the user does not have the provider configured
103
+ return {
104
+ method: 'validateSetUp',
105
+ validator: () => adapter.validateSetUp(authData, options, requestObject)
106
+ };
107
+ }
108
+
109
+ // Not logged in and authData is configured on the user
110
+ if (hasAuthDataConfigured) {
111
+ return {
112
+ method: 'validateLogin',
113
+ validator: () => adapter.validateLogin(authData, options, requestObject)
114
+ };
115
+ }
116
+
117
+ // User not logged in and the provider is not set up, for example when a new user
118
+ // signs up or an existing user uses a new auth provider
119
+ return {
120
+ method: 'validateSetUp',
121
+ validator: () => adapter.validateSetUp(authData, options, requestObject)
122
+ };
62
123
  };
63
124
  }
64
-
65
125
  function loadAuthAdapter(provider, authOptions) {
66
- const defaultAdapter = providers[provider];
67
- const adapter = Object.assign({}, defaultAdapter);
126
+ // providers are auth providers implemented by default
127
+ let defaultAdapter = providers[provider];
128
+ // authOptions can contain complete custom auth adapters or
129
+ // a default auth adapter like Facebook
68
130
  const providerOptions = authOptions[provider];
131
+ if (providerOptions && Object.prototype.hasOwnProperty.call(providerOptions, 'oauth2') && providerOptions['oauth2'] === true) {
132
+ defaultAdapter = _oauth.default;
133
+ }
69
134
 
135
+ // Default provider not found and a custom auth provider was not provided
70
136
  if (!defaultAdapter && !providerOptions) {
71
137
  return;
72
138
  }
73
-
139
+ const adapter = defaultAdapter instanceof _AuthAdapter.default ? defaultAdapter : Object.assign({}, defaultAdapter);
140
+ const keys = ['validateAuthData', 'validateAppId', 'validateSetUp', 'validateLogin', 'validateUpdate', 'challenge', 'validateOptions', 'policy', 'afterFind'];
141
+ const defaultAuthAdapter = new _AuthAdapter.default();
142
+ keys.forEach(key => {
143
+ const existing = adapter?.[key];
144
+ if (existing && typeof existing === 'function' && existing.toString() === defaultAuthAdapter[key].toString()) {
145
+ adapter[key] = null;
146
+ }
147
+ });
74
148
  const appIds = providerOptions ? providerOptions.appIds : undefined;
75
149
 
76
150
  // Try the configuration methods
77
151
  if (providerOptions) {
78
- const optionalAdapter = (0, _AdapterLoader2.default)(providerOptions, undefined, providerOptions);
152
+ const optionalAdapter = (0, _AdapterLoader.default)(providerOptions, undefined, providerOptions);
79
153
  if (optionalAdapter) {
80
- ['validateAuthData', 'validateAppId'].forEach(key => {
154
+ keys.forEach(key => {
81
155
  if (optionalAdapter[key]) {
82
156
  adapter[key] = optionalAdapter[key];
83
157
  }
84
158
  });
85
159
  }
86
160
  }
87
-
88
- if (!adapter.validateAuthData || !adapter.validateAppId) {
89
- return;
161
+ if (adapter.validateOptions) {
162
+ adapter.validateOptions(providerOptions);
90
163
  }
91
-
92
- return { adapter, appIds, providerOptions };
164
+ return {
165
+ adapter,
166
+ appIds,
167
+ providerOptions
168
+ };
93
169
  }
94
-
95
170
  module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
96
171
  let _enableAnonymousUsers = enableAnonymousUsers;
97
172
  const setEnableAnonymousUsers = function (enable) {
@@ -99,25 +174,58 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
99
174
  };
100
175
  // To handle the test cases on configuration
101
176
  const getValidatorForProvider = function (provider) {
102
-
103
177
  if (provider === 'anonymous' && !_enableAnonymousUsers) {
178
+ return {
179
+ validator: undefined
180
+ };
181
+ }
182
+ const authAdapter = loadAuthAdapter(provider, authOptions);
183
+ if (!authAdapter) {
104
184
  return;
105
185
  }
106
-
107
186
  const {
108
187
  adapter,
109
188
  appIds,
110
189
  providerOptions
111
- } = loadAuthAdapter(provider, authOptions);
112
-
113
- return authDataValidator(adapter, appIds, providerOptions);
190
+ } = authAdapter;
191
+ return {
192
+ validator: authDataValidator(provider, adapter, appIds, providerOptions),
193
+ adapter
194
+ };
195
+ };
196
+ const runAfterFind = async (req, authData) => {
197
+ if (!authData) {
198
+ return;
199
+ }
200
+ const adapters = Object.keys(authData);
201
+ await Promise.all(adapters.map(async provider => {
202
+ const authAdapter = getValidatorForProvider(provider);
203
+ if (!authAdapter) {
204
+ return;
205
+ }
206
+ const {
207
+ adapter,
208
+ providerOptions
209
+ } = authAdapter;
210
+ const afterFind = adapter.afterFind;
211
+ if (afterFind && typeof afterFind === 'function') {
212
+ const requestObject = {
213
+ ip: req.config.ip,
214
+ user: req.auth.user,
215
+ master: req.auth.isMaster
216
+ };
217
+ const result = afterFind.call(adapter, authData[provider], providerOptions, requestObject);
218
+ if (result) {
219
+ authData[provider] = result;
220
+ }
221
+ }
222
+ }));
114
223
  };
115
-
116
224
  return Object.freeze({
117
225
  getValidatorForProvider,
118
- setEnableAnonymousUsers
226
+ setEnableAnonymousUsers,
227
+ runAfterFind
119
228
  });
120
229
  };
121
-
122
230
  module.exports.loadAuthAdapter = loadAuthAdapter;
123
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2luZGV4LmpzIl0sIm5hbWVzIjpbImZhY2Vib29rIiwicmVxdWlyZSIsImZhY2Vib29rYWNjb3VudGtpdCIsImluc3RhZ3JhbSIsImxpbmtlZGluIiwibWVldHVwIiwiZ29vZ2xlIiwiZ2l0aHViIiwidHdpdHRlciIsInNwb3RpZnkiLCJkaWdpdHMiLCJqYW5yYWluZW5nYWdlIiwiamFucmFpbmNhcHR1cmUiLCJ2a29udGFrdGUiLCJxcSIsIndlY2hhdCIsIndlaWJvIiwiYW5vbnltb3VzIiwidmFsaWRhdGVBdXRoRGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRhdGVBcHBJZCIsInByb3ZpZGVycyIsImF1dGhEYXRhVmFsaWRhdG9yIiwiYWRhcHRlciIsImFwcElkcyIsIm9wdGlvbnMiLCJhdXRoRGF0YSIsInRoZW4iLCJsb2FkQXV0aEFkYXB0ZXIiLCJwcm92aWRlciIsImF1dGhPcHRpb25zIiwiZGVmYXVsdEFkYXB0ZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm92aWRlck9wdGlvbnMiLCJ1bmRlZmluZWQiLCJvcHRpb25hbEFkYXB0ZXIiLCJmb3JFYWNoIiwia2V5IiwibW9kdWxlIiwiZXhwb3J0cyIsImVuYWJsZUFub255bW91c1VzZXJzIiwiX2VuYWJsZUFub255bW91c1VzZXJzIiwic2V0RW5hYmxlQW5vbnltb3VzVXNlcnMiLCJlbmFibGUiLCJnZXRWYWxpZGF0b3JGb3JQcm92aWRlciIsImZyZWV6ZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0FBRUEsTUFBTUEsV0FBV0MsUUFBUSxZQUFSLENBQWpCO0FBQ0EsTUFBTUMscUJBQXFCRCxRQUFRLHNCQUFSLENBQTNCO0FBQ0EsTUFBTUUsWUFBWUYsUUFBUSxhQUFSLENBQWxCO0FBQ0EsTUFBTUcsV0FBV0gsUUFBUSxZQUFSLENBQWpCO0FBQ0EsTUFBTUksU0FBU0osUUFBUSxVQUFSLENBQWY7QUFDQSxNQUFNSyxTQUFTTCxRQUFRLFVBQVIsQ0FBZjtBQUNBLE1BQU1NLFNBQVNOLFFBQVEsVUFBUixDQUFmO0FBQ0EsTUFBTU8sVUFBVVAsUUFBUSxXQUFSLENBQWhCO0FBQ0EsTUFBTVEsVUFBVVIsUUFBUSxXQUFSLENBQWhCO0FBQ0EsTUFBTVMsU0FBU1QsUUFBUSxXQUFSLENBQWYsQyxDQUFxQztBQUNyQyxNQUFNVSxnQkFBZ0JWLFFBQVEsaUJBQVIsQ0FBdEI7QUFDQSxNQUFNVyxpQkFBaUJYLFFBQVEsa0JBQVIsQ0FBdkI7QUFDQSxNQUFNWSxZQUFZWixRQUFRLGFBQVIsQ0FBbEI7QUFDQSxNQUFNYSxLQUFLYixRQUFRLE1BQVIsQ0FBWDtBQUNBLE1BQU1jLFNBQVNkLFFBQVEsVUFBUixDQUFmO0FBQ0EsTUFBTWUsUUFBUWYsUUFBUSxTQUFSLENBQWQ7O0FBRUEsTUFBTWdCLFlBQVk7QUFDaEJDLG9CQUFrQixNQUFNO0FBQ3RCLFdBQU9DLFFBQVFDLE9BQVIsRUFBUDtBQUNELEdBSGU7QUFJaEJDLGlCQUFlLE1BQU07QUFDbkIsV0FBT0YsUUFBUUMsT0FBUixFQUFQO0FBQ0Q7QUFOZSxDQUFsQjs7QUFTQSxNQUFNRSxZQUFZO0FBQ2hCdEIsVUFEZ0I7QUFFaEJFLG9CQUZnQjtBQUdoQkMsV0FIZ0I7QUFJaEJDLFVBSmdCO0FBS2hCQyxRQUxnQjtBQU1oQkMsUUFOZ0I7QUFPaEJDLFFBUGdCO0FBUWhCQyxTQVJnQjtBQVNoQkMsU0FUZ0I7QUFVaEJRLFdBVmdCO0FBV2hCUCxRQVhnQjtBQVloQkMsZUFaZ0I7QUFhaEJDLGdCQWJnQjtBQWNoQkMsV0FkZ0I7QUFlaEJDLElBZmdCO0FBZ0JoQkMsUUFoQmdCO0FBaUJoQkM7QUFqQmdCLENBQWxCO0FBbUJBLFNBQVNPLGlCQUFULENBQTJCQyxPQUEzQixFQUFvQ0MsTUFBcEMsRUFBNENDLE9BQTVDLEVBQXFEO0FBQ25ELFNBQU8sVUFBU0MsUUFBVCxFQUFtQjtBQUN4QixXQUFPSCxRQUFRTixnQkFBUixDQUF5QlMsUUFBekIsRUFBbUNELE9BQW5DLEVBQTRDRSxJQUE1QyxDQUFpRCxNQUFNO0FBQzVELFVBQUlILE1BQUosRUFBWTtBQUNWLGVBQU9ELFFBQVFILGFBQVIsQ0FBc0JJLE1BQXRCLEVBQThCRSxRQUE5QixFQUF3Q0QsT0FBeEMsQ0FBUDtBQUNEO0FBQ0QsYUFBT1AsUUFBUUMsT0FBUixFQUFQO0FBQ0QsS0FMTSxDQUFQO0FBTUQsR0FQRDtBQVFEOztBQUVELFNBQVNTLGVBQVQsQ0FBeUJDLFFBQXpCLEVBQW1DQyxXQUFuQyxFQUFnRDtBQUM5QyxRQUFNQyxpQkFBaUJWLFVBQVVRLFFBQVYsQ0FBdkI7QUFDQSxRQUFNTixVQUFVUyxPQUFPQyxNQUFQLENBQWMsRUFBZCxFQUFrQkYsY0FBbEIsQ0FBaEI7QUFDQSxRQUFNRyxrQkFBa0JKLFlBQVlELFFBQVosQ0FBeEI7O0FBRUEsTUFBSSxDQUFDRSxjQUFELElBQW1CLENBQUNHLGVBQXhCLEVBQXlDO0FBQ3ZDO0FBQ0Q7O0FBRUQsUUFBTVYsU0FBU1Usa0JBQWtCQSxnQkFBZ0JWLE1BQWxDLEdBQTJDVyxTQUExRDs7QUFFQTtBQUNBLE1BQUlELGVBQUosRUFBcUI7QUFDbkIsVUFBTUUsa0JBQWtCLDZCQUFZRixlQUFaLEVBQTZCQyxTQUE3QixFQUF3Q0QsZUFBeEMsQ0FBeEI7QUFDQSxRQUFJRSxlQUFKLEVBQXFCO0FBQ25CLE9BQUMsa0JBQUQsRUFBcUIsZUFBckIsRUFBc0NDLE9BQXRDLENBQStDQyxHQUFELElBQVM7QUFDckQsWUFBSUYsZ0JBQWdCRSxHQUFoQixDQUFKLEVBQTBCO0FBQ3hCZixrQkFBUWUsR0FBUixJQUFlRixnQkFBZ0JFLEdBQWhCLENBQWY7QUFDRDtBQUNGLE9BSkQ7QUFLRDtBQUNGOztBQUVELE1BQUksQ0FBQ2YsUUFBUU4sZ0JBQVQsSUFBNkIsQ0FBQ00sUUFBUUgsYUFBMUMsRUFBeUQ7QUFDdkQ7QUFDRDs7QUFFRCxTQUFPLEVBQUNHLE9BQUQsRUFBVUMsTUFBVixFQUFrQlUsZUFBbEIsRUFBUDtBQUNEOztBQUVESyxPQUFPQyxPQUFQLEdBQWlCLFVBQVNWLGNBQWMsRUFBdkIsRUFBMkJXLHVCQUF1QixJQUFsRCxFQUF3RDtBQUN2RSxNQUFJQyx3QkFBd0JELG9CQUE1QjtBQUNBLFFBQU1FLDBCQUEwQixVQUFTQyxNQUFULEVBQWlCO0FBQy9DRiw0QkFBd0JFLE1BQXhCO0FBQ0QsR0FGRDtBQUdBO0FBQ0EsUUFBTUMsMEJBQTBCLFVBQVNoQixRQUFULEVBQW1COztBQUVqRCxRQUFJQSxhQUFhLFdBQWIsSUFBNEIsQ0FBQ2EscUJBQWpDLEVBQXdEO0FBQ3REO0FBQ0Q7O0FBRUQsVUFBTTtBQUNKbkIsYUFESTtBQUVKQyxZQUZJO0FBR0pVO0FBSEksUUFJRk4sZ0JBQWdCQyxRQUFoQixFQUEwQkMsV0FBMUIsQ0FKSjs7QUFNQSxXQUFPUixrQkFBa0JDLE9BQWxCLEVBQTJCQyxNQUEzQixFQUFtQ1UsZUFBbkMsQ0FBUDtBQUNELEdBYkQ7O0FBZUEsU0FBT0YsT0FBT2MsTUFBUCxDQUFjO0FBQ25CRCwyQkFEbUI7QUFFbkJGO0FBRm1CLEdBQWQsQ0FBUDtBQUlELENBekJEOztBQTJCQUosT0FBT0MsT0FBUCxDQUFlWixlQUFmLEdBQWlDQSxlQUFqQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2FkQWRhcHRlciBmcm9tICcuLi9BZGFwdGVyTG9hZGVyJztcblxuY29uc3QgZmFjZWJvb2sgPSByZXF1aXJlKCcuL2ZhY2Vib29rJyk7XG5jb25zdCBmYWNlYm9va2FjY291bnRraXQgPSByZXF1aXJlKCcuL2ZhY2Vib29rYWNjb3VudGtpdCcpO1xuY29uc3QgaW5zdGFncmFtID0gcmVxdWlyZShcIi4vaW5zdGFncmFtXCIpO1xuY29uc3QgbGlua2VkaW4gPSByZXF1aXJlKFwiLi9saW5rZWRpblwiKTtcbmNvbnN0IG1lZXR1cCA9IHJlcXVpcmUoXCIuL21lZXR1cFwiKTtcbmNvbnN0IGdvb2dsZSA9IHJlcXVpcmUoXCIuL2dvb2dsZVwiKTtcbmNvbnN0IGdpdGh1YiA9IHJlcXVpcmUoXCIuL2dpdGh1YlwiKTtcbmNvbnN0IHR3aXR0ZXIgPSByZXF1aXJlKFwiLi90d2l0dGVyXCIpO1xuY29uc3Qgc3BvdGlmeSA9IHJlcXVpcmUoXCIuL3Nwb3RpZnlcIik7XG5jb25zdCBkaWdpdHMgPSByZXF1aXJlKFwiLi90d2l0dGVyXCIpOyAvLyBkaWdpdHMgdG9rZW5zIGFyZSB2YWxpZGF0ZWQgYnkgdHdpdHRlclxuY29uc3QgamFucmFpbmVuZ2FnZSA9IHJlcXVpcmUoXCIuL2phbnJhaW5lbmdhZ2VcIik7XG5jb25zdCBqYW5yYWluY2FwdHVyZSA9IHJlcXVpcmUoXCIuL2phbnJhaW5jYXB0dXJlXCIpO1xuY29uc3QgdmtvbnRha3RlID0gcmVxdWlyZShcIi4vdmtvbnRha3RlXCIpO1xuY29uc3QgcXEgPSByZXF1aXJlKFwiLi9xcVwiKTtcbmNvbnN0IHdlY2hhdCA9IHJlcXVpcmUoXCIuL3dlY2hhdFwiKTtcbmNvbnN0IHdlaWJvID0gcmVxdWlyZShcIi4vd2VpYm9cIik7XG5cbmNvbnN0IGFub255bW91cyA9IHtcbiAgdmFsaWRhdGVBdXRoRGF0YTogKCkgPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfSxcbiAgdmFsaWRhdGVBcHBJZDogKCkgPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxufVxuXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gIGZhY2Vib29rLFxuICBmYWNlYm9va2FjY291bnRraXQsXG4gIGluc3RhZ3JhbSxcbiAgbGlua2VkaW4sXG4gIG1lZXR1cCxcbiAgZ29vZ2xlLFxuICBnaXRodWIsXG4gIHR3aXR0ZXIsXG4gIHNwb3RpZnksXG4gIGFub255bW91cyxcbiAgZGlnaXRzLFxuICBqYW5yYWluZW5nYWdlLFxuICBqYW5yYWluY2FwdHVyZSxcbiAgdmtvbnRha3RlLFxuICBxcSxcbiAgd2VjaGF0LFxuICB3ZWlib1xufVxuZnVuY3Rpb24gYXV0aERhdGFWYWxpZGF0b3IoYWRhcHRlciwgYXBwSWRzLCBvcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbihhdXRoRGF0YSkge1xuICAgIHJldHVybiBhZGFwdGVyLnZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKGFwcElkcykge1xuICAgICAgICByZXR1cm4gYWRhcHRlci52YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRBdXRoQWRhcHRlcihwcm92aWRlciwgYXV0aE9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdEFkYXB0ZXIgPSBwcm92aWRlcnNbcHJvdmlkZXJdO1xuICBjb25zdCBhZGFwdGVyID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEFkYXB0ZXIpO1xuICBjb25zdCBwcm92aWRlck9wdGlvbnMgPSBhdXRoT3B0aW9uc1twcm92aWRlcl07XG5cbiAgaWYgKCFkZWZhdWx0QWRhcHRlciAmJiAhcHJvdmlkZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBwSWRzID0gcHJvdmlkZXJPcHRpb25zID8gcHJvdmlkZXJPcHRpb25zLmFwcElkcyA6IHVuZGVmaW5lZDtcblxuICAvLyBUcnkgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kc1xuICBpZiAocHJvdmlkZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgb3B0aW9uYWxBZGFwdGVyID0gbG9hZEFkYXB0ZXIocHJvdmlkZXJPcHRpb25zLCB1bmRlZmluZWQsIHByb3ZpZGVyT3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbmFsQWRhcHRlcikge1xuICAgICAgWyd2YWxpZGF0ZUF1dGhEYXRhJywgJ3ZhbGlkYXRlQXBwSWQnXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbmFsQWRhcHRlcltrZXldKSB7XG4gICAgICAgICAgYWRhcHRlcltrZXldID0gb3B0aW9uYWxBZGFwdGVyW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghYWRhcHRlci52YWxpZGF0ZUF1dGhEYXRhIHx8ICFhZGFwdGVyLnZhbGlkYXRlQXBwSWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4ge2FkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhdXRoT3B0aW9ucyA9IHt9LCBlbmFibGVBbm9ueW1vdXNVc2VycyA9IHRydWUpIHtcbiAgbGV0IF9lbmFibGVBbm9ueW1vdXNVc2VycyA9IGVuYWJsZUFub255bW91c1VzZXJzO1xuICBjb25zdCBzZXRFbmFibGVBbm9ueW1vdXNVc2VycyA9IGZ1bmN0aW9uKGVuYWJsZSkge1xuICAgIF9lbmFibGVBbm9ueW1vdXNVc2VycyA9IGVuYWJsZTtcbiAgfVxuICAvLyBUbyBoYW5kbGUgdGhlIHRlc3QgY2FzZXMgb24gY29uZmlndXJhdGlvblxuICBjb25zdCBnZXRWYWxpZGF0b3JGb3JQcm92aWRlciA9IGZ1bmN0aW9uKHByb3ZpZGVyKSB7XG5cbiAgICBpZiAocHJvdmlkZXIgPT09ICdhbm9ueW1vdXMnICYmICFfZW5hYmxlQW5vbnltb3VzVXNlcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBhZGFwdGVyLFxuICAgICAgYXBwSWRzLFxuICAgICAgcHJvdmlkZXJPcHRpb25zXG4gICAgfSA9IGxvYWRBdXRoQWRhcHRlcihwcm92aWRlciwgYXV0aE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGF1dGhEYXRhVmFsaWRhdG9yKGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBnZXRWYWxpZGF0b3JGb3JQcm92aWRlcixcbiAgICBzZXRFbmFibGVBbm9ueW1vdXNVc2Vyc1xuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cy5sb2FkQXV0aEFkYXB0ZXIgPSBsb2FkQXV0aEFkYXB0ZXI7XG4iXX0=
231
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQWRhcHRlckxvYWRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX25vZGUiLCJfQXV0aEFkYXB0ZXIiLCJfZ2NlbnRlciIsIl9naXRodWIiLCJfZ3BnYW1lcyIsIl9pbnN0YWdyYW0iLCJfbGluZSIsIl9saW5rZWRpbiIsIl9tZmEiLCJfbWljcm9zb2Z0IiwiX29hdXRoIiwiX3FxIiwiX3Nwb3RpZnkiLCJfdHdpdHRlciIsIl93ZWNoYXQiLCJfd2VpYm8iLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJhcHBsZSIsImRpZ2l0cyIsImZhY2Vib29rIiwiZ29vZ2xlIiwiamFucmFpbmNhcHR1cmUiLCJqYW5yYWluZW5nYWdlIiwia2V5Y2xvYWsiLCJsZGFwIiwibWVldHVwIiwicGhhbnRhdXRoIiwidmtvbnRha3RlIiwiYW5vbnltb3VzIiwidmFsaWRhdGVBdXRoRGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRhdGVBcHBJZCIsInByb3ZpZGVycyIsImdjZW50ZXIiLCJncGdhbWVzIiwiaW5zdGFncmFtIiwibGlua2VkaW4iLCJtZmEiLCJnaXRodWIiLCJ0d2l0dGVyIiwic3BvdGlmeSIsImxpbmUiLCJxcSIsIndlY2hhdCIsIndlaWJvIiwibWljcm9zb2Z0IiwiYXV0aEFkYXB0ZXJQb2xpY2llcyIsInNvbG8iLCJhZGRpdGlvbmFsIiwiYXV0aERhdGFWYWxpZGF0b3IiLCJwcm92aWRlciIsImFkYXB0ZXIiLCJhcHBJZHMiLCJvcHRpb25zIiwiYXV0aERhdGEiLCJyZXEiLCJ1c2VyIiwicmVxdWVzdE9iamVjdCIsInBvbGljeSIsIlBhcnNlIiwiRXJyb3IiLCJPVEhFUl9DQVVTRSIsInZhbGlkYXRlU2V0VXAiLCJ2YWxpZGF0ZUxvZ2luIiwidmFsaWRhdGVVcGRhdGUiLCJpc0xvZ2dlZEluIiwiYXV0aCIsImlkIiwiaXNNYXN0ZXIiLCJoYXNBdXRoRGF0YUNvbmZpZ3VyZWQiLCJnZXQiLCJtZXRob2QiLCJ2YWxpZGF0b3IiLCJsb2FkQXV0aEFkYXB0ZXIiLCJhdXRoT3B0aW9ucyIsImRlZmF1bHRBZGFwdGVyIiwicHJvdmlkZXJPcHRpb25zIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwib2F1dGgyIiwiQXV0aEFkYXB0ZXIiLCJhc3NpZ24iLCJrZXlzIiwiZGVmYXVsdEF1dGhBZGFwdGVyIiwiZm9yRWFjaCIsImtleSIsImV4aXN0aW5nIiwidG9TdHJpbmciLCJ1bmRlZmluZWQiLCJvcHRpb25hbEFkYXB0ZXIiLCJsb2FkQWRhcHRlciIsInZhbGlkYXRlT3B0aW9ucyIsIm1vZHVsZSIsImV4cG9ydHMiLCJlbmFibGVBbm9ueW1vdXNVc2VycyIsIl9lbmFibGVBbm9ueW1vdXNVc2VycyIsInNldEVuYWJsZUFub255bW91c1VzZXJzIiwiZW5hYmxlIiwiZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIiLCJhdXRoQWRhcHRlciIsInJ1bkFmdGVyRmluZCIsImFkYXB0ZXJzIiwiYWxsIiwibWFwIiwiYWZ0ZXJGaW5kIiwiaXAiLCJjb25maWciLCJtYXN0ZXIiLCJyZXN1bHQiLCJmcmVlemUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZEFkYXB0ZXIgZnJvbSAnLi4vQWRhcHRlckxvYWRlcic7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQXV0aEFkYXB0ZXIgZnJvbSAnLi9BdXRoQWRhcHRlcic7XG5cbmNvbnN0IGFwcGxlID0gcmVxdWlyZSgnLi9hcHBsZScpO1xuY29uc3QgZGlnaXRzID0gcmVxdWlyZSgnLi90d2l0dGVyJyk7IC8vIGRpZ2l0cyB0b2tlbnMgYXJlIHZhbGlkYXRlZCBieSB0d2l0dGVyXG5jb25zdCBmYWNlYm9vayA9IHJlcXVpcmUoJy4vZmFjZWJvb2snKTtcbmltcG9ydCBnY2VudGVyIGZyb20gJy4vZ2NlbnRlcic7XG5pbXBvcnQgZ2l0aHViIGZyb20gJy4vZ2l0aHViJztcbmNvbnN0IGdvb2dsZSA9IHJlcXVpcmUoJy4vZ29vZ2xlJyk7XG5pbXBvcnQgZ3BnYW1lcyBmcm9tICcuL2dwZ2FtZXMnO1xuaW1wb3J0IGluc3RhZ3JhbSBmcm9tICcuL2luc3RhZ3JhbSc7XG5jb25zdCBqYW5yYWluY2FwdHVyZSA9IHJlcXVpcmUoJy4vamFucmFpbmNhcHR1cmUnKTtcbmNvbnN0IGphbnJhaW5lbmdhZ2UgPSByZXF1aXJlKCcuL2phbnJhaW5lbmdhZ2UnKTtcbmNvbnN0IGtleWNsb2FrID0gcmVxdWlyZSgnLi9rZXljbG9haycpO1xuY29uc3QgbGRhcCA9IHJlcXVpcmUoJy4vbGRhcCcpO1xuaW1wb3J0IGxpbmUgZnJvbSAnLi9saW5lJztcbmltcG9ydCBsaW5rZWRpbiBmcm9tICcuL2xpbmtlZGluJztcbmNvbnN0IG1lZXR1cCA9IHJlcXVpcmUoJy4vbWVldHVwJyk7XG5pbXBvcnQgbWZhIGZyb20gJy4vbWZhJztcbmltcG9ydCBtaWNyb3NvZnQgZnJvbSAnLi9taWNyb3NvZnQnO1xuaW1wb3J0IG9hdXRoMiBmcm9tICcuL29hdXRoMic7XG5jb25zdCBwaGFudGF1dGggPSByZXF1aXJlKCcuL3BoYW50YXV0aCcpO1xuaW1wb3J0IHFxIGZyb20gJy4vcXEnO1xuaW1wb3J0IHNwb3RpZnkgZnJvbSAnLi9zcG90aWZ5JztcbmltcG9ydCB0d2l0dGVyIGZyb20gJy4vdHdpdHRlcic7XG5jb25zdCB2a29udGFrdGUgPSByZXF1aXJlKCcuL3Zrb250YWt0ZScpO1xuaW1wb3J0IHdlY2hhdCBmcm9tICcuL3dlY2hhdCc7XG5pbXBvcnQgd2VpYm8gZnJvbSAnLi93ZWlibyc7XG5cblxuY29uc3QgYW5vbnltb3VzID0ge1xuICB2YWxpZGF0ZUF1dGhEYXRhOiAoKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9LFxuICB2YWxpZGF0ZUFwcElkOiAoKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9LFxufTtcblxuY29uc3QgcHJvdmlkZXJzID0ge1xuICBhcHBsZSxcbiAgZ2NlbnRlcixcbiAgZ3BnYW1lcyxcbiAgZmFjZWJvb2ssXG4gIGluc3RhZ3JhbSxcbiAgbGlua2VkaW4sXG4gIG1lZXR1cCxcbiAgbWZhLFxuICBnb29nbGUsXG4gIGdpdGh1YixcbiAgdHdpdHRlcixcbiAgc3BvdGlmeSxcbiAgYW5vbnltb3VzLFxuICBkaWdpdHMsXG4gIGphbnJhaW5lbmdhZ2UsXG4gIGphbnJhaW5jYXB0dXJlLFxuICBsaW5lLFxuICB2a29udGFrdGUsXG4gIHFxLFxuICB3ZWNoYXQsXG4gIHdlaWJvLFxuICBwaGFudGF1dGgsXG4gIG1pY3Jvc29mdCxcbiAga2V5Y2xvYWssXG4gIGxkYXAsXG59O1xuXG4vLyBJbmRleGVkIGF1dGggcG9saWNpZXNcbmNvbnN0IGF1dGhBZGFwdGVyUG9saWNpZXMgPSB7XG4gIGRlZmF1bHQ6IHRydWUsXG4gIHNvbG86IHRydWUsXG4gIGFkZGl0aW9uYWw6IHRydWUsXG59O1xuXG5mdW5jdGlvbiBhdXRoRGF0YVZhbGlkYXRvcihwcm92aWRlciwgYWRhcHRlciwgYXBwSWRzLCBvcHRpb25zKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoYXV0aERhdGEsIHJlcSwgdXNlciwgcmVxdWVzdE9iamVjdCkge1xuICAgIGlmIChhcHBJZHMgJiYgdHlwZW9mIGFkYXB0ZXIudmFsaWRhdGVBcHBJZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGFkYXB0ZXIudmFsaWRhdGVBcHBJZChhcHBJZHMsIGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFkYXB0ZXIucG9saWN5ICYmXG4gICAgICAhYXV0aEFkYXB0ZXJQb2xpY2llc1thZGFwdGVyLnBvbGljeV0gJiZcbiAgICAgIHR5cGVvZiBhZGFwdGVyLnBvbGljeSAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSxcbiAgICAgICAgJ0F1dGhBZGFwdGVyIHBvbGljeSBpcyBub3QgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoZSB2YWx1ZSBtdXN0IGJlIGVpdGhlciBcInNvbG9cIiwgXCJhZGRpdGlvbmFsXCIsIFwiZGVmYXVsdFwiIG9yIHVuZGVmaW5lZCAod2lsbCBiZSBoYW5kbGVkIGFzIFwiZGVmYXVsdFwiKSdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYWRhcHRlci52YWxpZGF0ZUF1dGhEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gYWRhcHRlci52YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGFkYXB0ZXIudmFsaWRhdGVTZXRVcCAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIGFkYXB0ZXIudmFsaWRhdGVMb2dpbiAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIGFkYXB0ZXIudmFsaWRhdGVVcGRhdGUgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgICAgICdBZGFwdGVyIGlzIG5vdCBjb25maWd1cmVkLiBJbXBsZW1lbnQgZWl0aGVyIHZhbGlkYXRlQXV0aERhdGEgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmc6IHZhbGlkYXRlU2V0VXAsIHZhbGlkYXRlTG9naW4gYW5kIHZhbGlkYXRlVXBkYXRlJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gV2hlbiBtYXN0ZXJLZXkgaXMgZGV0ZWN0ZWQsIHdlIHNob3VsZCB0cmlnZ2VyIGEgbG9nZ2VkIGluIHVzZXJcbiAgICBjb25zdCBpc0xvZ2dlZEluID1cbiAgICAgIChyZXEuYXV0aC51c2VyICYmIHVzZXIgJiYgcmVxLmF1dGgudXNlci5pZCA9PT0gdXNlci5pZCkgfHwgKHVzZXIgJiYgcmVxLmF1dGguaXNNYXN0ZXIpO1xuICAgIGxldCBoYXNBdXRoRGF0YUNvbmZpZ3VyZWQgPSBmYWxzZTtcblxuICAgIGlmICh1c2VyICYmIHVzZXIuZ2V0KCdhdXRoRGF0YScpICYmIHVzZXIuZ2V0KCdhdXRoRGF0YScpW3Byb3ZpZGVyXSkge1xuICAgICAgaGFzQXV0aERhdGFDb25maWd1cmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNMb2dnZWRJbikge1xuICAgICAgLy8gVXNlciBpcyB1cGRhdGluZyB0aGVpciBhdXRoRGF0YVxuICAgICAgaWYgKGhhc0F1dGhEYXRhQ29uZmlndXJlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1ldGhvZDogJ3ZhbGlkYXRlVXBkYXRlJyxcbiAgICAgICAgICB2YWxpZGF0b3I6ICgpID0+IGFkYXB0ZXIudmFsaWRhdGVVcGRhdGUoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gU2V0IHVwIGlmIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgdGhlIHByb3ZpZGVyIGNvbmZpZ3VyZWRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ3ZhbGlkYXRlU2V0VXAnLFxuICAgICAgICB2YWxpZGF0b3I6ICgpID0+IGFkYXB0ZXIudmFsaWRhdGVTZXRVcChhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE5vdCBsb2dnZWQgaW4gYW5kIGF1dGhEYXRhIGlzIGNvbmZpZ3VyZWQgb24gdGhlIHVzZXJcbiAgICBpZiAoaGFzQXV0aERhdGFDb25maWd1cmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICd2YWxpZGF0ZUxvZ2luJyxcbiAgICAgICAgdmFsaWRhdG9yOiAoKSA9PiBhZGFwdGVyLnZhbGlkYXRlTG9naW4oYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVc2VyIG5vdCBsb2dnZWQgaW4gYW5kIHRoZSBwcm92aWRlciBpcyBub3Qgc2V0IHVwLCBmb3IgZXhhbXBsZSB3aGVuIGEgbmV3IHVzZXJcbiAgICAvLyBzaWducyB1cCBvciBhbiBleGlzdGluZyB1c2VyIHVzZXMgYSBuZXcgYXV0aCBwcm92aWRlclxuICAgIHJldHVybiB7XG4gICAgICBtZXRob2Q6ICd2YWxpZGF0ZVNldFVwJyxcbiAgICAgIHZhbGlkYXRvcjogKCkgPT4gYWRhcHRlci52YWxpZGF0ZVNldFVwKGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KSxcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBsb2FkQXV0aEFkYXB0ZXIocHJvdmlkZXIsIGF1dGhPcHRpb25zKSB7XG4gIC8vIHByb3ZpZGVycyBhcmUgYXV0aCBwcm92aWRlcnMgaW1wbGVtZW50ZWQgYnkgZGVmYXVsdFxuICBsZXQgZGVmYXVsdEFkYXB0ZXIgPSBwcm92aWRlcnNbcHJvdmlkZXJdO1xuICAvLyBhdXRoT3B0aW9ucyBjYW4gY29udGFpbiBjb21wbGV0ZSBjdXN0b20gYXV0aCBhZGFwdGVycyBvclxuICAvLyBhIGRlZmF1bHQgYXV0aCBhZGFwdGVyIGxpa2UgRmFjZWJvb2tcbiAgY29uc3QgcHJvdmlkZXJPcHRpb25zID0gYXV0aE9wdGlvbnNbcHJvdmlkZXJdO1xuICBpZiAoXG4gICAgcHJvdmlkZXJPcHRpb25zICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3ZpZGVyT3B0aW9ucywgJ29hdXRoMicpICYmXG4gICAgcHJvdmlkZXJPcHRpb25zWydvYXV0aDInXSA9PT0gdHJ1ZVxuICApIHtcbiAgICBkZWZhdWx0QWRhcHRlciA9IG9hdXRoMjtcbiAgfVxuXG4gIC8vIERlZmF1bHQgcHJvdmlkZXIgbm90IGZvdW5kIGFuZCBhIGN1c3RvbSBhdXRoIHByb3ZpZGVyIHdhcyBub3QgcHJvdmlkZWRcbiAgaWYgKCFkZWZhdWx0QWRhcHRlciAmJiAhcHJvdmlkZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9XG4gICAgZGVmYXVsdEFkYXB0ZXIgaW5zdGFuY2VvZiBBdXRoQWRhcHRlciA/IGRlZmF1bHRBZGFwdGVyIDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEFkYXB0ZXIpO1xuICBjb25zdCBrZXlzID0gW1xuICAgICd2YWxpZGF0ZUF1dGhEYXRhJyxcbiAgICAndmFsaWRhdGVBcHBJZCcsXG4gICAgJ3ZhbGlkYXRlU2V0VXAnLFxuICAgICd2YWxpZGF0ZUxvZ2luJyxcbiAgICAndmFsaWRhdGVVcGRhdGUnLFxuICAgICdjaGFsbGVuZ2UnLFxuICAgICd2YWxpZGF0ZU9wdGlvbnMnLFxuICAgICdwb2xpY3knLFxuICAgICdhZnRlckZpbmQnLFxuICBdO1xuICBjb25zdCBkZWZhdWx0QXV0aEFkYXB0ZXIgPSBuZXcgQXV0aEFkYXB0ZXIoKTtcbiAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhZGFwdGVyPy5ba2V5XTtcbiAgICBpZiAoXG4gICAgICBleGlzdGluZyAmJlxuICAgICAgdHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nICYmXG4gICAgICBleGlzdGluZy50b1N0cmluZygpID09PSBkZWZhdWx0QXV0aEFkYXB0ZXJba2V5XS50b1N0cmluZygpXG4gICAgKSB7XG4gICAgICBhZGFwdGVyW2tleV0gPSBudWxsO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGFwcElkcyA9IHByb3ZpZGVyT3B0aW9ucyA/IHByb3ZpZGVyT3B0aW9ucy5hcHBJZHMgOiB1bmRlZmluZWQ7XG5cbiAgLy8gVHJ5IHRoZSBjb25maWd1cmF0aW9uIG1ldGhvZHNcbiAgaWYgKHByb3ZpZGVyT3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbmFsQWRhcHRlciA9IGxvYWRBZGFwdGVyKHByb3ZpZGVyT3B0aW9ucywgdW5kZWZpbmVkLCBwcm92aWRlck9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25hbEFkYXB0ZXIpIHtcbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAob3B0aW9uYWxBZGFwdGVyW2tleV0pIHtcbiAgICAgICAgICBhZGFwdGVyW2tleV0gPSBvcHRpb25hbEFkYXB0ZXJba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChhZGFwdGVyLnZhbGlkYXRlT3B0aW9ucykge1xuICAgIGFkYXB0ZXIudmFsaWRhdGVPcHRpb25zKHByb3ZpZGVyT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4geyBhZGFwdGVyLCBhcHBJZHMsIHByb3ZpZGVyT3B0aW9ucyB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhdXRoT3B0aW9ucyA9IHt9LCBlbmFibGVBbm9ueW1vdXNVc2VycyA9IHRydWUpIHtcbiAgbGV0IF9lbmFibGVBbm9ueW1vdXNVc2VycyA9IGVuYWJsZUFub255bW91c1VzZXJzO1xuICBjb25zdCBzZXRFbmFibGVBbm9ueW1vdXNVc2VycyA9IGZ1bmN0aW9uIChlbmFibGUpIHtcbiAgICBfZW5hYmxlQW5vbnltb3VzVXNlcnMgPSBlbmFibGU7XG4gIH07XG4gIC8vIFRvIGhhbmRsZSB0aGUgdGVzdCBjYXNlcyBvbiBjb25maWd1cmF0aW9uXG4gIGNvbnN0IGdldFZhbGlkYXRvckZvclByb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgaWYgKHByb3ZpZGVyID09PSAnYW5vbnltb3VzJyAmJiAhX2VuYWJsZUFub255bW91c1VzZXJzKSB7XG4gICAgICByZXR1cm4geyB2YWxpZGF0b3I6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBjb25zdCBhdXRoQWRhcHRlciA9IGxvYWRBdXRoQWRhcHRlcihwcm92aWRlciwgYXV0aE9wdGlvbnMpO1xuICAgIGlmICghYXV0aEFkYXB0ZXIpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgeyBhZGFwdGVyLCBhcHBJZHMsIHByb3ZpZGVyT3B0aW9ucyB9ID0gYXV0aEFkYXB0ZXI7XG4gICAgcmV0dXJuIHsgdmFsaWRhdG9yOiBhdXRoRGF0YVZhbGlkYXRvcihwcm92aWRlciwgYWRhcHRlciwgYXBwSWRzLCBwcm92aWRlck9wdGlvbnMpLCBhZGFwdGVyIH07XG4gIH07XG5cbiAgY29uc3QgcnVuQWZ0ZXJGaW5kID0gYXN5bmMgKHJlcSwgYXV0aERhdGEpID0+IHtcbiAgICBpZiAoIWF1dGhEYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFkYXB0ZXJzID0gT2JqZWN0LmtleXMoYXV0aERhdGEpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYWRhcHRlcnMubWFwKGFzeW5jIHByb3ZpZGVyID0+IHtcbiAgICAgICAgY29uc3QgYXV0aEFkYXB0ZXIgPSBnZXRWYWxpZGF0b3JGb3JQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGlmICghYXV0aEFkYXB0ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhZGFwdGVyLCBwcm92aWRlck9wdGlvbnMgfSA9IGF1dGhBZGFwdGVyO1xuICAgICAgICBjb25zdCBhZnRlckZpbmQgPSBhZGFwdGVyLmFmdGVyRmluZDtcbiAgICAgICAgaWYgKGFmdGVyRmluZCAmJiB0eXBlb2YgYWZ0ZXJGaW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IHtcbiAgICAgICAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgICAgICAgdXNlcjogcmVxLmF1dGgudXNlcixcbiAgICAgICAgICAgIG1hc3RlcjogcmVxLmF1dGguaXNNYXN0ZXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhZnRlckZpbmQuY2FsbChcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBhdXRoRGF0YVtwcm92aWRlcl0sXG4gICAgICAgICAgICBwcm92aWRlck9wdGlvbnMsXG4gICAgICAgICAgICByZXF1ZXN0T2JqZWN0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgYXV0aERhdGFbcHJvdmlkZXJdID0gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBnZXRWYWxpZGF0b3JGb3JQcm92aWRlcixcbiAgICBzZXRFbmFibGVBbm9ueW1vdXNVc2VycyxcbiAgICBydW5BZnRlckZpbmQsXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMubG9hZEF1dGhBZGFwdGVyID0gbG9hZEF1dGhBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUtBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFLLFFBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUtBLElBQUFPLEtBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLFNBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFTLElBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLFVBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQVosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFZLEdBQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FB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
@@ -1,44 +1,118 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- // Helper functions for accessing the instagram API.
4
- var https = require('https');
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 Instagram.
11
+ *
12
+ * @class InstagramAdapter
13
+ * @param {Object} options - The adapter configuration options.
14
+ * @param {string} options.clientId - Your Instagram App Client ID. Required for secure authentication.
15
+ * @param {string} options.clientSecret - Your Instagram App Client Secret. Required for secure authentication.
16
+ * @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
17
+ *
18
+ * @description
19
+ * ## Parse Server Configuration
20
+ * To configure Parse Server for Instagram authentication, use the following structure:
21
+ * ```json
22
+ * {
23
+ * "auth": {
24
+ * "instagram": {
25
+ * "clientId": "your-client-id",
26
+ * "clientSecret": "your-client-secret"
27
+ * }
28
+ * }
29
+ * }
30
+ * ```
31
+ * ### Insecure Configuration (Not Recommended)
32
+ * ```json
33
+ * {
34
+ * "auth": {
35
+ * "instagram": {
36
+ * "enableInsecureAuth": true
37
+ * }
38
+ * }
39
+ * }
40
+ * ```
41
+ *
42
+ * The adapter requires the following `authData` fields:
43
+ * - **Secure Authentication**: `code`, `redirect_uri`.
44
+ * - **Insecure Authentication (Deprecated)**: `id`, `access_token`.
45
+ *
46
+ * ## Auth Payloads
47
+ * ### Secure Authentication Payload
48
+ * ```json
49
+ * {
50
+ * "instagram": {
51
+ * "code": "lmn789opq012rst345uvw",
52
+ * "redirect_uri": "https://example.com/callback"
53
+ * }
54
+ * }
55
+ * ```
56
+ *
57
+ * ### Insecure Authentication Payload (Deprecated)
58
+ * ```json
59
+ * {
60
+ * "instagram": {
61
+ * "id": "1234567",
62
+ * "access_token": "AQXNnd2hIT6z9bHFzZz2Kp1ghiMz_RtyuvwXYZ123abc"
63
+ * }
64
+ * }
65
+ * ```
66
+ *
67
+ * ## Notes
68
+ * - `enableInsecureAuth` is **deprecated** and will be removed in future versions. Use secure authentication with `code` and `redirect_uri`.
69
+ * - Secure authentication exchanges the `code` and `redirect_uri` provided by the client for an access token using Instagram's OAuth flow.
70
+ *
71
+ * @see {@link https://developers.facebook.com/docs/instagram-basic-display-api/getting-started Instagram Basic Display API - Getting Started}
72
+ */
6
73
 
7
- // Returns a promise that fulfills iff this user id is valid.
8
- function validateAuthData(authData) {
9
- return request("users/self/?access_token=" + authData.access_token).then(response => {
10
- if (response && response.data && response.data.id == authData.id) {
11
- return;
12
- }
13
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Instagram auth is invalid for this user.');
14
- });
15
- }
16
-
17
- // Returns a promise that fulfills iff this app id is valid.
18
- function validateAppId() {
19
- return Promise.resolve();
20
- }
21
-
22
- // A promisey wrapper for api requests
23
- function request(path) {
24
- return new Promise(function (resolve, reject) {
25
- https.get("https://api.instagram.com/v1/" + path, function (res) {
26
- var data = '';
27
- res.on('data', function (chunk) {
28
- data += chunk;
29
- });
30
- res.on('end', function () {
31
- data = JSON.parse(data);
32
- resolve(data);
33
- });
34
- }).on('error', function () {
35
- reject('Failed to validate this access token with Instagram.');
74
+ class InstagramAdapter extends _BaseCodeAuthAdapter.default {
75
+ constructor() {
76
+ super('Instagram');
77
+ }
78
+ async getAccessTokenFromCode(authData) {
79
+ const response = await fetch('https://api.instagram.com/oauth/access_token', {
80
+ method: 'POST',
81
+ headers: {
82
+ 'Content-Type': 'application/x-www-form-urlencoded'
83
+ },
84
+ body: new URLSearchParams({
85
+ client_id: this.clientId,
86
+ client_secret: this.clientSecret,
87
+ grant_type: 'authorization_code',
88
+ redirect_uri: this.redirectUri,
89
+ code: authData.code
90
+ })
36
91
  });
37
- });
92
+ if (!response.ok) {
93
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Instagram API request failed.');
94
+ }
95
+ const data = await response.json();
96
+ if (data.error) {
97
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, data.error_description || data.error);
98
+ }
99
+ return data.access_token;
100
+ }
101
+ async getUserFromAccessToken(accessToken, authData) {
102
+ const apiURL = 'https://graph.instagram.com/';
103
+ const path = `${apiURL}me?fields=id&access_token=${accessToken}`;
104
+ const response = await fetch(path);
105
+ if (!response.ok) {
106
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Instagram API request failed.');
107
+ }
108
+ const user = await response.json();
109
+ if (user?.id !== authData.id) {
110
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Instagram auth is invalid for this user.');
111
+ }
112
+ return {
113
+ id: user.id
114
+ };
115
+ }
38
116
  }
39
-
40
- module.exports = {
41
- validateAppId: validateAppId,
42
- validateAuthData: validateAuthData
43
- };
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2luc3RhZ3JhbS5qcyJdLCJuYW1lcyI6WyJodHRwcyIsInJlcXVpcmUiLCJQYXJzZSIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsInJlcXVlc3QiLCJhY2Nlc3NfdG9rZW4iLCJ0aGVuIiwicmVzcG9uc2UiLCJkYXRhIiwiaWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwYXRoIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwib24iLCJjaHVuayIsIkpTT04iLCJwYXJzZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxJQUFJQSxRQUFRQyxRQUFRLE9BQVIsQ0FBWjtBQUNBLElBQUlDLFFBQVFELFFBQVEsWUFBUixFQUFzQkMsS0FBbEM7O0FBRUE7QUFDQSxTQUFTQyxnQkFBVCxDQUEwQkMsUUFBMUIsRUFBb0M7QUFDbEMsU0FBT0MsUUFBUSw4QkFBOEJELFNBQVNFLFlBQS9DLEVBQ0pDLElBREksQ0FDRUMsUUFBRCxJQUFjO0FBQ2xCLFFBQUlBLFlBQVlBLFNBQVNDLElBQXJCLElBQTZCRCxTQUFTQyxJQUFULENBQWNDLEVBQWQsSUFBb0JOLFNBQVNNLEVBQTlELEVBQWtFO0FBQ2hFO0FBQ0Q7QUFDRCxVQUFNLElBQUlSLE1BQU1TLEtBQVYsQ0FDSlQsTUFBTVMsS0FBTixDQUFZQyxnQkFEUixFQUVKLDBDQUZJLENBQU47QUFHRCxHQVJJLENBQVA7QUFTRDs7QUFFRDtBQUNBLFNBQVNDLGFBQVQsR0FBeUI7QUFDdkIsU0FBT0MsUUFBUUMsT0FBUixFQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFTVixPQUFULENBQWlCVyxJQUFqQixFQUF1QjtBQUNyQixTQUFPLElBQUlGLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCRSxNQUFsQixFQUEwQjtBQUMzQ2pCLFVBQU1rQixHQUFOLENBQVUsa0NBQWtDRixJQUE1QyxFQUFrRCxVQUFTRyxHQUFULEVBQWM7QUFDOUQsVUFBSVYsT0FBTyxFQUFYO0FBQ0FVLFVBQUlDLEVBQUosQ0FBTyxNQUFQLEVBQWUsVUFBU0MsS0FBVCxFQUFnQjtBQUM3QlosZ0JBQVFZLEtBQVI7QUFDRCxPQUZEO0FBR0FGLFVBQUlDLEVBQUosQ0FBTyxLQUFQLEVBQWMsWUFBVztBQUN2QlgsZUFBT2EsS0FBS0MsS0FBTCxDQUFXZCxJQUFYLENBQVA7QUFDQU0sZ0JBQVFOLElBQVI7QUFDRCxPQUhEO0FBSUQsS0FURCxFQVNHVyxFQVRILENBU00sT0FUTixFQVNlLFlBQVc7QUFDeEJILGFBQU8sc0RBQVA7QUFDRCxLQVhEO0FBWUQsR0FiTSxDQUFQO0FBY0Q7O0FBRURPLE9BQU9DLE9BQVAsR0FBaUI7QUFDZlosaUJBQWVBLGFBREE7QUFFZlYsb0JBQWtCQTtBQUZILENBQWpCIiwiZmlsZSI6Imluc3RhZ3JhbS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgaW5zdGFncmFtIEFQSS5cbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgcmV0dXJuIHJlcXVlc3QoXCJ1c2Vycy9zZWxmLz9hY2Nlc3NfdG9rZW49XCIgKyBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pXG4gICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmlkID09IGF1dGhEYXRhLmlkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgJ0luc3RhZ3JhbSBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgICB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgYXBpIHJlcXVlc3RzXG5mdW5jdGlvbiByZXF1ZXN0KHBhdGgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGh0dHBzLmdldChcImh0dHBzOi8vYXBpLmluc3RhZ3JhbS5jb20vdjEvXCIgKyBwYXRoLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgIHZhciBkYXRhID0gJyc7XG4gICAgICByZXMub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICBkYXRhICs9IGNodW5rO1xuICAgICAgfSk7XG4gICAgICByZXMub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0pO1xuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KCdGYWlsZWQgdG8gdmFsaWRhdGUgdGhpcyBhY2Nlc3MgdG9rZW4gd2l0aCBJbnN0YWdyYW0uJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YVxufTtcbiJdfQ==
117
+ var _default = exports.default = new InstagramAdapter();
118
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmFzZUNvZGVBdXRoQWRhcHRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiSW5zdGFncmFtQWRhcHRlciIsIkJhc2VBdXRoQ29kZUFkYXB0ZXIiLCJjb25zdHJ1Y3RvciIsImdldEFjY2Vzc1Rva2VuRnJvbUNvZGUiLCJhdXRoRGF0YSIsInJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIlVSTFNlYXJjaFBhcmFtcyIsImNsaWVudF9pZCIsImNsaWVudElkIiwiY2xpZW50X3NlY3JldCIsImNsaWVudFNlY3JldCIsImdyYW50X3R5cGUiLCJyZWRpcmVjdF91cmkiLCJyZWRpcmVjdFVyaSIsImNvZGUiLCJvayIsIlBhcnNlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiZGF0YSIsImpzb24iLCJlcnJvciIsImVycm9yX2Rlc2NyaXB0aW9uIiwiYWNjZXNzX3Rva2VuIiwiZ2V0VXNlckZyb21BY2Nlc3NUb2tlbiIsImFjY2Vzc1Rva2VuIiwiYXBpVVJMIiwicGF0aCIsInVzZXIiLCJpZCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2luc3RhZ3JhbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnNlIFNlcnZlciBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIGZvciBJbnN0YWdyYW0uXG4gKlxuICogQGNsYXNzIEluc3RhZ3JhbUFkYXB0ZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY2xpZW50SWQgLSBZb3VyIEluc3RhZ3JhbSBBcHAgQ2xpZW50IElELiBSZXF1aXJlZCBmb3Igc2VjdXJlIGF1dGhlbnRpY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY2xpZW50U2VjcmV0IC0gWW91ciBJbnN0YWdyYW0gQXBwIENsaWVudCBTZWNyZXQuIFJlcXVpcmVkIGZvciBzZWN1cmUgYXV0aGVudGljYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmVuYWJsZUluc2VjdXJlQXV0aD1mYWxzZV0gLSAqKltERVBSRUNBVEVEXSoqIEVuYWJsZSBpbnNlY3VyZSBhdXRoZW50aWNhdGlvbiAobm90IHJlY29tbWVuZGVkKS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqICMjIFBhcnNlIFNlcnZlciBDb25maWd1cmF0aW9uXG4gKiBUbyBjb25maWd1cmUgUGFyc2UgU2VydmVyIGZvciBJbnN0YWdyYW0gYXV0aGVudGljYXRpb24sIHVzZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJhdXRoXCI6IHtcbiAqICAgICBcImluc3RhZ3JhbVwiOiB7XG4gKiAgICAgICBcImNsaWVudElkXCI6IFwieW91ci1jbGllbnQtaWRcIixcbiAqICAgICAgIFwiY2xpZW50U2VjcmV0XCI6IFwieW91ci1jbGllbnQtc2VjcmV0XCJcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICogIyMjIEluc2VjdXJlIENvbmZpZ3VyYXRpb24gKE5vdCBSZWNvbW1lbmRlZClcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJhdXRoXCI6IHtcbiAqICAgICBcImluc3RhZ3JhbVwiOiB7XG4gKiAgICAgICBcImVuYWJsZUluc2VjdXJlQXV0aFwiOiB0cnVlXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgYWRhcHRlciByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGBhdXRoRGF0YWAgZmllbGRzOlxuICogLSAqKlNlY3VyZSBBdXRoZW50aWNhdGlvbioqOiBgY29kZWAsIGByZWRpcmVjdF91cmlgLlxuICogLSAqKkluc2VjdXJlIEF1dGhlbnRpY2F0aW9uIChEZXByZWNhdGVkKSoqOiBgaWRgLCBgYWNjZXNzX3Rva2VuYC5cbiAqXG4gKiAjIyBBdXRoIFBheWxvYWRzXG4gKiAjIyMgU2VjdXJlIEF1dGhlbnRpY2F0aW9uIFBheWxvYWRcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpbnN0YWdyYW1cIjoge1xuICogICAgIFwiY29kZVwiOiBcImxtbjc4OW9wcTAxMnJzdDM0NXV2d1wiLFxuICogICAgIFwicmVkaXJlY3RfdXJpXCI6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9jYWxsYmFja1wiXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIyBJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkIChEZXByZWNhdGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImluc3RhZ3JhbVwiOiB7XG4gKiAgICAgXCJpZFwiOiBcIjEyMzQ1NjdcIixcbiAqICAgICBcImFjY2Vzc190b2tlblwiOiBcIkFRWE5uZDJoSVQ2ejliSEZ6WnoyS3AxZ2hpTXpfUnR5dXZ3WFlaMTIzYWJjXCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogIyMgTm90ZXNcbiAqIC0gYGVuYWJsZUluc2VjdXJlQXV0aGAgaXMgKipkZXByZWNhdGVkKiogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuIFVzZSBzZWN1cmUgYXV0aGVudGljYXRpb24gd2l0aCBgY29kZWAgYW5kIGByZWRpcmVjdF91cmlgLlxuICogLSBTZWN1cmUgYXV0aGVudGljYXRpb24gZXhjaGFuZ2VzIHRoZSBgY29kZWAgYW5kIGByZWRpcmVjdF91cmlgIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgZm9yIGFuIGFjY2VzcyB0b2tlbiB1c2luZyBJbnN0YWdyYW0ncyBPQXV0aCBmbG93LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9pbnN0YWdyYW0tYmFzaWMtZGlzcGxheS1hcGkvZ2V0dGluZy1zdGFydGVkIEluc3RhZ3JhbSBCYXNpYyBEaXNwbGF5IEFQSSAtIEdldHRpbmcgU3RhcnRlZH1cbiAqL1xuXG5cbmltcG9ydCBCYXNlQXV0aENvZGVBZGFwdGVyIGZyb20gJy4vQmFzZUNvZGVBdXRoQWRhcHRlcic7XG5jbGFzcyBJbnN0YWdyYW1BZGFwdGVyIGV4dGVuZHMgQmFzZUF1dGhDb2RlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdJbnN0YWdyYW0nKTtcbiAgfVxuXG4gIGFzeW5jIGdldEFjY2Vzc1Rva2VuRnJvbUNvZGUoYXV0aERhdGEpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5pbnN0YWdyYW0uY29tL29hdXRoL2FjY2Vzc190b2tlbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50U2VjcmV0LFxuICAgICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0VXJpLFxuICAgICAgICBjb2RlOiBhdXRoRGF0YS5jb2RlXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdJbnN0YWdyYW0gQVBJIHJlcXVlc3QgZmFpbGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBkYXRhLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGRhdGEuZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmFjY2Vzc190b2tlbjtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJGcm9tQWNjZXNzVG9rZW4oYWNjZXNzVG9rZW4sIGF1dGhEYXRhKSB7XG4gICAgY29uc3QgYXBpVVJMID0gJ2h0dHBzOi8vZ3JhcGguaW5zdGFncmFtLmNvbS8nO1xuICAgIGNvbnN0IHBhdGggPSBgJHthcGlVUkx9bWU/ZmllbGRzPWlkJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWA7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHBhdGgpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdJbnN0YWdyYW0gQVBJIHJlcXVlc3QgZmFpbGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgaWYgKHVzZXI/LmlkICE9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdJbnN0YWdyYW0gYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB1c2VyLmlkLFxuICAgIH1cblxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBJbnN0YWdyYW1BZGFwdGVyKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQWtFQSxJQUFBQSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXdELFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBbEV4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