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.
- package/LICENSE +167 -25
- package/NOTICE +10 -0
- package/README.md +929 -278
- package/lib/AccountLockout.js +47 -30
- package/lib/Adapters/AdapterLoader.js +21 -6
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
- package/lib/Adapters/Auth/AuthAdapter.js +116 -13
- package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
- package/lib/Adapters/Auth/OAuth1Client.js +27 -46
- package/lib/Adapters/Auth/apple.js +123 -0
- package/lib/Adapters/Auth/facebook.js +162 -35
- package/lib/Adapters/Auth/gcenter.js +217 -0
- package/lib/Adapters/Auth/github.js +118 -48
- package/lib/Adapters/Auth/google.js +160 -51
- package/lib/Adapters/Auth/gpgames.js +125 -0
- package/lib/Adapters/Auth/httpsRequest.js +6 -7
- package/lib/Adapters/Auth/index.js +170 -62
- package/lib/Adapters/Auth/instagram.js +114 -40
- package/lib/Adapters/Auth/janraincapture.js +52 -23
- package/lib/Adapters/Auth/janrainengage.js +19 -36
- package/lib/Adapters/Auth/keycloak.js +148 -0
- package/lib/Adapters/Auth/ldap.js +167 -0
- package/lib/Adapters/Auth/line.js +125 -0
- package/lib/Adapters/Auth/linkedin.js +111 -55
- package/lib/Adapters/Auth/meetup.js +24 -34
- package/lib/Adapters/Auth/mfa.js +324 -0
- package/lib/Adapters/Auth/microsoft.js +111 -0
- package/lib/Adapters/Auth/oauth2.js +97 -162
- package/lib/Adapters/Auth/phantauth.js +53 -0
- package/lib/Adapters/Auth/qq.js +108 -49
- package/lib/Adapters/Auth/spotify.js +107 -55
- package/lib/Adapters/Auth/twitter.js +188 -48
- package/lib/Adapters/Auth/utils.js +28 -0
- package/lib/Adapters/Auth/vkontakte.js +26 -39
- package/lib/Adapters/Auth/wechat.js +106 -44
- package/lib/Adapters/Auth/weibo.js +132 -58
- package/lib/Adapters/Cache/CacheAdapter.js +13 -8
- package/lib/Adapters/Cache/InMemoryCache.js +3 -13
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
- package/lib/Adapters/Cache/LRUCache.js +13 -27
- package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
- package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
- package/lib/Adapters/Cache/SchemaCache.js +25 -0
- package/lib/Adapters/Email/MailAdapter.js +10 -8
- package/lib/Adapters/Files/FilesAdapter.js +83 -25
- package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
- package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
- package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
- package/lib/Adapters/Logger/WinstonLogger.js +69 -88
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
- package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
- package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
- package/lib/Adapters/Push/PushAdapter.js +14 -7
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
- package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
- package/lib/Adapters/Storage/StorageAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
- package/lib/Auth.js +488 -125
- package/lib/ClientSDK.js +2 -6
- package/lib/Config.js +525 -94
- package/lib/Controllers/AdaptableController.js +5 -25
- package/lib/Controllers/AnalyticsController.js +22 -23
- package/lib/Controllers/CacheController.js +10 -31
- package/lib/Controllers/DatabaseController.js +767 -313
- package/lib/Controllers/FilesController.js +49 -54
- package/lib/Controllers/HooksController.js +80 -84
- package/lib/Controllers/LiveQueryController.js +35 -22
- package/lib/Controllers/LoggerController.js +22 -58
- package/lib/Controllers/ParseGraphQLController.js +293 -0
- package/lib/Controllers/PushController.js +58 -49
- package/lib/Controllers/SchemaController.js +916 -422
- package/lib/Controllers/UserController.js +265 -180
- package/lib/Controllers/index.js +90 -125
- package/lib/Controllers/types.js +1 -1
- package/lib/Deprecator/Deprecations.js +30 -0
- package/lib/Deprecator/Deprecator.js +127 -0
- package/lib/Error.js +48 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
- package/lib/GraphQL/ParseGraphQLServer.js +214 -0
- package/lib/GraphQL/helpers/objectsMutations.js +30 -0
- package/lib/GraphQL/helpers/objectsQueries.js +246 -0
- package/lib/GraphQL/loaders/configMutations.js +87 -0
- package/lib/GraphQL/loaders/configQueries.js +79 -0
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
- package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
- package/lib/GraphQL/loaders/filesMutations.js +107 -0
- package/lib/GraphQL/loaders/functionsMutations.js +78 -0
- package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
- package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
- package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
- package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
- package/lib/GraphQL/loaders/schemaMutations.js +162 -0
- package/lib/GraphQL/loaders/schemaQueries.js +81 -0
- package/lib/GraphQL/loaders/schemaTypes.js +341 -0
- package/lib/GraphQL/loaders/usersMutations.js +433 -0
- package/lib/GraphQL/loaders/usersQueries.js +90 -0
- package/lib/GraphQL/parseGraphQLUtils.js +63 -0
- package/lib/GraphQL/transformers/className.js +14 -0
- package/lib/GraphQL/transformers/constraintType.js +53 -0
- package/lib/GraphQL/transformers/inputType.js +51 -0
- package/lib/GraphQL/transformers/mutation.js +274 -0
- package/lib/GraphQL/transformers/outputType.js +51 -0
- package/lib/GraphQL/transformers/query.js +237 -0
- package/lib/GraphQL/transformers/schemaFields.js +99 -0
- package/lib/KeyPromiseQueue.js +48 -0
- package/lib/LiveQuery/Client.js +25 -33
- package/lib/LiveQuery/Id.js +2 -5
- package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
- package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
- package/lib/LiveQuery/ParsePubSub.js +7 -16
- package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
- package/lib/LiveQuery/QueryTools.js +76 -15
- package/lib/LiveQuery/RequestSchema.js +111 -97
- package/lib/LiveQuery/SessionTokenCache.js +23 -36
- package/lib/LiveQuery/Subscription.js +8 -17
- package/lib/LiveQuery/equalObjects.js +2 -3
- package/lib/Options/Definitions.js +1355 -382
- package/lib/Options/docs.js +301 -62
- package/lib/Options/index.js +11 -1
- package/lib/Options/parsers.js +14 -10
- package/lib/Page.js +44 -0
- package/lib/ParseMessageQueue.js +6 -13
- package/lib/ParseServer.js +474 -235
- package/lib/ParseServerRESTController.js +102 -40
- package/lib/PromiseRouter.js +39 -50
- package/lib/Push/PushQueue.js +24 -30
- package/lib/Push/PushWorker.js +32 -56
- package/lib/Push/utils.js +22 -35
- package/lib/RestQuery.js +361 -139
- package/lib/RestWrite.js +713 -344
- package/lib/Routers/AggregateRouter.js +97 -71
- package/lib/Routers/AnalyticsRouter.js +8 -14
- package/lib/Routers/AudiencesRouter.js +16 -35
- package/lib/Routers/ClassesRouter.js +86 -72
- package/lib/Routers/CloudCodeRouter.js +28 -37
- package/lib/Routers/FeaturesRouter.js +22 -25
- package/lib/Routers/FilesRouter.js +266 -171
- package/lib/Routers/FunctionsRouter.js +87 -103
- package/lib/Routers/GlobalConfigRouter.js +94 -33
- package/lib/Routers/GraphQLRouter.js +41 -0
- package/lib/Routers/HooksRouter.js +43 -47
- package/lib/Routers/IAPValidationRouter.js +57 -70
- package/lib/Routers/InstallationsRouter.js +17 -25
- package/lib/Routers/LogsRouter.js +10 -25
- package/lib/Routers/PagesRouter.js +647 -0
- package/lib/Routers/PublicAPIRouter.js +104 -112
- package/lib/Routers/PurgeRouter.js +19 -29
- package/lib/Routers/PushRouter.js +14 -28
- package/lib/Routers/RolesRouter.js +7 -14
- package/lib/Routers/SchemasRouter.js +63 -42
- package/lib/Routers/SecurityRouter.js +34 -0
- package/lib/Routers/SessionsRouter.js +25 -38
- package/lib/Routers/UsersRouter.js +463 -190
- package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
- package/lib/SchemaMigrations/Migrations.js +30 -0
- package/lib/Security/Check.js +109 -0
- package/lib/Security/CheckGroup.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
- package/lib/Security/CheckGroups/CheckGroups.js +21 -0
- package/lib/Security/CheckRunner.js +213 -0
- package/lib/SharedRest.js +29 -0
- package/lib/StatusHandler.js +96 -93
- package/lib/TestUtils.js +70 -14
- package/lib/Utils.js +468 -0
- package/lib/batch.js +74 -40
- package/lib/cache.js +8 -8
- package/lib/cli/definitions/parse-live-query-server.js +4 -3
- package/lib/cli/definitions/parse-server.js +4 -3
- package/lib/cli/parse-live-query-server.js +9 -17
- package/lib/cli/parse-server.js +49 -47
- package/lib/cli/utils/commander.js +20 -29
- package/lib/cli/utils/runner.js +31 -32
- package/lib/cloud-code/Parse.Cloud.js +711 -36
- package/lib/cloud-code/Parse.Server.js +21 -0
- package/lib/cryptoUtils.js +6 -11
- package/lib/defaults.js +21 -15
- package/lib/deprecated.js +1 -1
- package/lib/index.js +78 -67
- package/lib/logger.js +12 -20
- package/lib/middlewares.js +484 -160
- package/lib/password.js +10 -6
- package/lib/request.js +175 -0
- package/lib/requiredParameter.js +4 -3
- package/lib/rest.js +157 -82
- package/lib/triggers.js +627 -185
- package/lib/vendor/README.md +3 -3
- package/lib/vendor/mongodbUrl.js +224 -137
- package/package.json +135 -57
- package/postinstall.js +38 -50
- package/public_html/invalid_verification_link.html +3 -3
- package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
- package/types/@types/deepcopy/index.d.ts +5 -0
- package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
- package/types/Options/index.d.ts +301 -0
- package/types/ParseServer.d.ts +65 -0
- package/types/eslint.config.mjs +30 -0
- package/types/index.d.ts +21 -0
- package/types/logger.d.ts +2 -0
- package/types/tests.ts +44 -0
- package/types/tsconfig.json +24 -0
- package/CHANGELOG.md +0 -1246
- package/PATENTS +0 -37
- package/bin/dev +0 -37
- package/lib/.DS_Store +0 -0
- package/lib/Adapters/Auth/common.js +0 -2
- package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
- package/lib/Controllers/SchemaCache.js +0 -97
- package/lib/LiveQuery/.DS_Store +0 -0
- package/lib/cli/utils/parsers.js +0 -77
- package/lib/cloud-code/.DS_Store +0 -0
- package/lib/cloud-code/HTTPResponse.js +0 -57
- package/lib/cloud-code/Untitled-1 +0 -123
- package/lib/cloud-code/httpRequest.js +0 -102
- package/lib/cloud-code/team.html +0 -123
- package/lib/graphql/ParseClass.js +0 -234
- package/lib/graphql/Schema.js +0 -197
- package/lib/graphql/index.js +0 -1
- package/lib/graphql/types/ACL.js +0 -35
- package/lib/graphql/types/Date.js +0 -25
- package/lib/graphql/types/File.js +0 -24
- package/lib/graphql/types/GeoPoint.js +0 -35
- package/lib/graphql/types/JSONObject.js +0 -30
- package/lib/graphql/types/NumberInput.js +0 -43
- package/lib/graphql/types/NumberQuery.js +0 -42
- package/lib/graphql/types/Pointer.js +0 -35
- package/lib/graphql/types/QueryConstraint.js +0 -61
- package/lib/graphql/types/StringQuery.js +0 -39
- package/lib/graphql/types/index.js +0 -110
|
@@ -1,63 +1,115 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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 Spotify.
|
|
11
|
+
*
|
|
12
|
+
* @class SpotifyAdapter
|
|
13
|
+
* @param {Object} options - The adapter configuration options.
|
|
14
|
+
* @param {string} options.clientId - Your Spotify application's Client ID. Required for secure authentication.
|
|
15
|
+
* @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
|
|
16
|
+
*
|
|
17
|
+
* @description
|
|
18
|
+
* ## Parse Server Configuration
|
|
19
|
+
* To configure Parse Server for Spotify authentication, use the following structure:
|
|
20
|
+
* ### Secure Configuration
|
|
21
|
+
* ```json
|
|
22
|
+
* {
|
|
23
|
+
* "auth": {
|
|
24
|
+
* "spotify": {
|
|
25
|
+
* "clientId": "your-client-id"
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
* ### Insecure Configuration (Not Recommended)
|
|
31
|
+
* ```json
|
|
32
|
+
* {
|
|
33
|
+
* "auth": {
|
|
34
|
+
* "spotify": {
|
|
35
|
+
* "enableInsecureAuth": true
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* The adapter requires the following `authData` fields:
|
|
42
|
+
* - **Secure Authentication**: `code`, `redirect_uri`, and `code_verifier`.
|
|
43
|
+
* - **Insecure Authentication (Not Recommended)**: `id`, `access_token`.
|
|
44
|
+
*
|
|
45
|
+
* ## Auth Payloads
|
|
46
|
+
* ### Secure Authentication Payload
|
|
47
|
+
* ```json
|
|
48
|
+
* {
|
|
49
|
+
* "spotify": {
|
|
50
|
+
* "code": "abc123def456ghi789",
|
|
51
|
+
* "redirect_uri": "https://example.com/callback",
|
|
52
|
+
* "code_verifier": "secure-code-verifier"
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
* ### Insecure Authentication Payload (Not Recommended)
|
|
57
|
+
* ```json
|
|
58
|
+
* {
|
|
59
|
+
* "spotify": {
|
|
60
|
+
* "id": "1234567",
|
|
61
|
+
* "access_token": "abc123def456ghi789"
|
|
62
|
+
* }
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* ## Notes
|
|
67
|
+
* - `enableInsecureAuth` is **not recommended** and bypasses secure flows by validating the user ID and access token directly. This method is not suitable for production environments and may be removed in future versions.
|
|
68
|
+
* - Secure authentication exchanges the `code` provided by the client for an access token using Spotify's OAuth API. This method ensures greater security and is the recommended approach.
|
|
69
|
+
*
|
|
70
|
+
* @see {@link https://developer.spotify.com/documentation/web-api/tutorials/getting-started Spotify OAuth Documentation}
|
|
71
|
+
*/
|
|
6
72
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
73
|
+
class SpotifyAdapter extends _BaseCodeAuthAdapter.default {
|
|
74
|
+
constructor() {
|
|
75
|
+
super('spotify');
|
|
76
|
+
}
|
|
77
|
+
async getUserFromAccessToken(access_token) {
|
|
78
|
+
const response = await fetch('https://api.spotify.com/v1/me', {
|
|
79
|
+
headers: {
|
|
80
|
+
Authorization: 'Bearer ' + access_token
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Spotify API request failed.');
|
|
12
85
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
// Returns a promise that fulfills if this app id is valid.
|
|
18
|
-
function validateAppId(appIds, authData) {
|
|
19
|
-
var access_token = authData.access_token;
|
|
20
|
-
if (!appIds.length) {
|
|
21
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Spotify auth is not configured.');
|
|
86
|
+
const user = await response.json();
|
|
87
|
+
return {
|
|
88
|
+
id: user.id
|
|
89
|
+
};
|
|
22
90
|
}
|
|
23
|
-
|
|
24
|
-
if (
|
|
25
|
-
|
|
91
|
+
async getAccessTokenFromCode(authData) {
|
|
92
|
+
if (!authData.code || !authData.redirect_uri || !authData.code_verifier) {
|
|
93
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Spotify auth configuration authData.code and/or authData.redirect_uri and/or authData.code_verifier.');
|
|
26
94
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// A promisey wrapper for Spotify API requests.
|
|
32
|
-
function request(path, access_token) {
|
|
33
|
-
return new Promise(function (resolve, reject) {
|
|
34
|
-
https.get({
|
|
35
|
-
host: 'api.spotify.com',
|
|
36
|
-
path: '/v1/' + path,
|
|
95
|
+
const response = await fetch('https://accounts.spotify.com/api/token', {
|
|
96
|
+
method: 'POST',
|
|
37
97
|
headers: {
|
|
38
|
-
'
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
data = JSON.parse(data);
|
|
48
|
-
} catch (e) {
|
|
49
|
-
return reject(e);
|
|
50
|
-
}
|
|
51
|
-
resolve(data);
|
|
52
|
-
});
|
|
53
|
-
}).on('error', function () {
|
|
54
|
-
reject('Failed to validate this access token with Spotify.');
|
|
98
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
99
|
+
},
|
|
100
|
+
body: new URLSearchParams({
|
|
101
|
+
grant_type: 'authorization_code',
|
|
102
|
+
code: authData.code,
|
|
103
|
+
redirect_uri: authData.redirect_uri,
|
|
104
|
+
code_verifier: authData.code_verifier,
|
|
105
|
+
client_id: this.clientId
|
|
106
|
+
})
|
|
55
107
|
});
|
|
56
|
-
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Spotify API request failed.');
|
|
110
|
+
}
|
|
111
|
+
return response.json();
|
|
112
|
+
}
|
|
57
113
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
validateAppId: validateAppId,
|
|
61
|
-
validateAuthData: validateAuthData
|
|
62
|
-
};
|
|
63
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3Nwb3RpZnkuanMiXSwibmFtZXMiOlsiaHR0cHMiLCJyZXF1aXJlIiwiUGFyc2UiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwidGhlbiIsImRhdGEiLCJpZCIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJhcHBJZHMiLCJsZW5ndGgiLCJpbmRleE9mIiwicGF0aCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwiaG9zdCIsImhlYWRlcnMiLCJyZXMiLCJvbiIsImNodW5rIiwiSlNPTiIsInBhcnNlIiwiZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxJQUFJQSxRQUFRQyxRQUFRLE9BQVIsQ0FBWjtBQUNBLElBQUlDLFFBQVFELFFBQVEsWUFBUixFQUFzQkMsS0FBbEM7O0FBRUE7QUFDQSxTQUFTQyxnQkFBVCxDQUEwQkMsUUFBMUIsRUFBb0M7QUFDbEMsU0FBT0MsUUFBUSxJQUFSLEVBQWNELFNBQVNFLFlBQXZCLEVBQ0pDLElBREksQ0FDRUMsSUFBRCxJQUFVO0FBQ2QsUUFBSUEsUUFBUUEsS0FBS0MsRUFBTCxJQUFXTCxTQUFTSyxFQUFoQyxFQUFvQztBQUNsQztBQUNEO0FBQ0QsVUFBTSxJQUFJUCxNQUFNUSxLQUFWLENBQ0pSLE1BQU1RLEtBQU4sQ0FBWUMsZ0JBRFIsRUFFSix3Q0FGSSxDQUFOO0FBR0QsR0FSSSxDQUFQO0FBU0Q7O0FBRUQ7QUFDQSxTQUFTQyxhQUFULENBQXVCQyxNQUF2QixFQUErQlQsUUFBL0IsRUFBeUM7QUFDdkMsTUFBSUUsZUFBZUYsU0FBU0UsWUFBNUI7QUFDQSxNQUFJLENBQUNPLE9BQU9DLE1BQVosRUFBb0I7QUFDbEIsVUFBTSxJQUFJWixNQUFNUSxLQUFWLENBQ0pSLE1BQU1RLEtBQU4sQ0FBWUMsZ0JBRFIsRUFFSixpQ0FGSSxDQUFOO0FBR0Q7QUFDRCxTQUFPTixRQUFRLElBQVIsRUFBY0MsWUFBZCxFQUNKQyxJQURJLENBQ0VDLElBQUQsSUFBVTtBQUNkLFFBQUlBLFFBQVFLLE9BQU9FLE9BQVAsQ0FBZVAsS0FBS0MsRUFBcEIsS0FBMkIsQ0FBQyxDQUF4QyxFQUEyQztBQUN6QztBQUNEO0FBQ0QsVUFBTSxJQUFJUCxNQUFNUSxLQUFWLENBQ0pSLE1BQU1RLEtBQU4sQ0FBWUMsZ0JBRFIsRUFFSix3Q0FGSSxDQUFOO0FBR0QsR0FSSSxDQUFQO0FBU0Q7O0FBRUQ7QUFDQSxTQUFTTixPQUFULENBQWlCVyxJQUFqQixFQUF1QlYsWUFBdkIsRUFBcUM7QUFDbkMsU0FBTyxJQUFJVyxPQUFKLENBQVksVUFBU0MsT0FBVCxFQUFrQkMsTUFBbEIsRUFBMEI7QUFDM0NuQixVQUFNb0IsR0FBTixDQUFVO0FBQ1JDLFlBQU0saUJBREU7QUFFUkwsWUFBTSxTQUFTQSxJQUZQO0FBR1JNLGVBQVM7QUFDUCx5QkFBaUIsWUFBWWhCO0FBRHRCO0FBSEQsS0FBVixFQU1HLFVBQVNpQixHQUFULEVBQWM7QUFDZixVQUFJZixPQUFPLEVBQVg7QUFDQWUsVUFBSUMsRUFBSixDQUFPLE1BQVAsRUFBZSxVQUFTQyxLQUFULEVBQWdCO0FBQzdCakIsZ0JBQVFpQixLQUFSO0FBQ0QsT0FGRDtBQUdBRixVQUFJQyxFQUFKLENBQU8sS0FBUCxFQUFjLFlBQVc7QUFDdkIsWUFBSTtBQUNGaEIsaUJBQU9rQixLQUFLQyxLQUFMLENBQVduQixJQUFYLENBQVA7QUFDRCxTQUZELENBRUUsT0FBTW9CLENBQU4sRUFBUztBQUNULGlCQUFPVCxPQUFPUyxDQUFQLENBQVA7QUFDRDtBQUNEVixnQkFBUVYsSUFBUjtBQUNELE9BUEQ7QUFRRCxLQW5CRCxFQW1CR2dCLEVBbkJILENBbUJNLE9BbkJOLEVBbUJlLFlBQVc7QUFDeEJMLGFBQU8sb0RBQVA7QUFDRCxLQXJCRDtBQXNCRCxHQXZCTSxDQUFQO0FBd0JEOztBQUVEVSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZsQixpQkFBZUEsYUFEQTtBQUVmVCxvQkFBa0JBO0FBRkgsQ0FBakIiLCJmaWxlIjoic3BvdGlmeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgU3BvdGlmeSBBUEkuXG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhKSB7XG4gIHJldHVybiByZXF1ZXN0KCdtZScsIGF1dGhEYXRhLmFjY2Vzc190b2tlbilcbiAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5pZCA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAgICdTcG90aWZ5IGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICAgIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZChhcHBJZHMsIGF1dGhEYXRhKSB7XG4gIHZhciBhY2Nlc3NfdG9rZW4gPSBhdXRoRGF0YS5hY2Nlc3NfdG9rZW47XG4gIGlmICghYXBwSWRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAnU3BvdGlmeSBhdXRoIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0KCdtZScsIGFjY2Vzc190b2tlbilcbiAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEgJiYgYXBwSWRzLmluZGV4T2YoZGF0YS5pZCkgIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgICAnU3BvdGlmeSBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgICB9KTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBTcG90aWZ5IEFQSSByZXF1ZXN0cy5cbmZ1bmN0aW9uIHJlcXVlc3QocGF0aCwgYWNjZXNzX3Rva2VuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBodHRwcy5nZXQoe1xuICAgICAgaG9zdDogJ2FwaS5zcG90aWZ5LmNvbScsXG4gICAgICBwYXRoOiAnL3YxLycgKyBwYXRoLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc190b2tlblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uKHJlcykge1xuICAgICAgdmFyIGRhdGEgPSAnJztcbiAgICAgIHJlcy5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICB9KTtcbiAgICAgIHJlcy5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0pO1xuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KCdGYWlsZWQgdG8gdmFsaWRhdGUgdGhpcyBhY2Nlc3MgdG9rZW4gd2l0aCBTcG90aWZ5LicpO1xuICAgIH0pO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQ6IHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGE6IHZhbGlkYXRlQXV0aERhdGFcbn07XG4iXX0=
|
|
114
|
+
var _default = exports.default = new SpotifyAdapter();
|
|
115
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmFzZUNvZGVBdXRoQWRhcHRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiU3BvdGlmeUFkYXB0ZXIiLCJCYXNlQXV0aENvZGVBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJnZXRVc2VyRnJvbUFjY2Vzc1Rva2VuIiwiYWNjZXNzX3Rva2VuIiwicmVzcG9uc2UiLCJmZXRjaCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwib2siLCJQYXJzZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInVzZXIiLCJqc29uIiwiaWQiLCJnZXRBY2Nlc3NUb2tlbkZyb21Db2RlIiwiYXV0aERhdGEiLCJjb2RlIiwicmVkaXJlY3RfdXJpIiwiY29kZV92ZXJpZmllciIsIm1ldGhvZCIsImJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJncmFudF90eXBlIiwiY2xpZW50X2lkIiwiY2xpZW50SWQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9zcG90aWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2UgU2VydmVyIGF1dGhlbnRpY2F0aW9uIGFkYXB0ZXIgZm9yIFNwb3RpZnkuXG4gKlxuICogQGNsYXNzIFNwb3RpZnlBZGFwdGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBhZGFwdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNsaWVudElkIC0gWW91ciBTcG90aWZ5IGFwcGxpY2F0aW9uJ3MgQ2xpZW50IElELiBSZXF1aXJlZCBmb3Igc2VjdXJlIGF1dGhlbnRpY2F0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5lbmFibGVJbnNlY3VyZUF1dGg9ZmFsc2VdIC0gKipbREVQUkVDQVRFRF0qKiBFbmFibGUgaW5zZWN1cmUgYXV0aGVudGljYXRpb24gKG5vdCByZWNvbW1lbmRlZCkuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAjIyBQYXJzZSBTZXJ2ZXIgQ29uZmlndXJhdGlvblxuICogVG8gY29uZmlndXJlIFBhcnNlIFNlcnZlciBmb3IgU3BvdGlmeSBhdXRoZW50aWNhdGlvbiwgdXNlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuICogIyMjIFNlY3VyZSBDb25maWd1cmF0aW9uXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwiYXV0aFwiOiB7XG4gKiAgICAgXCJzcG90aWZ5XCI6IHtcbiAqICAgICAgIFwiY2xpZW50SWRcIjogXCJ5b3VyLWNsaWVudC1pZFwiXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqICMjIyBJbnNlY3VyZSBDb25maWd1cmF0aW9uIChOb3QgUmVjb21tZW5kZWQpXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwiYXV0aFwiOiB7XG4gKiAgICAgXCJzcG90aWZ5XCI6IHtcbiAqICAgICAgIFwiZW5hYmxlSW5zZWN1cmVBdXRoXCI6IHRydWVcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBhZGFwdGVyIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgYGF1dGhEYXRhYCBmaWVsZHM6XG4gKiAtICoqU2VjdXJlIEF1dGhlbnRpY2F0aW9uKio6IGBjb2RlYCwgYHJlZGlyZWN0X3VyaWAsIGFuZCBgY29kZV92ZXJpZmllcmAuXG4gKiAtICoqSW5zZWN1cmUgQXV0aGVudGljYXRpb24gKE5vdCBSZWNvbW1lbmRlZCkqKjogYGlkYCwgYGFjY2Vzc190b2tlbmAuXG4gKlxuICogIyMgQXV0aCBQYXlsb2Fkc1xuICogIyMjIFNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwic3BvdGlmeVwiOiB7XG4gKiAgICAgXCJjb2RlXCI6IFwiYWJjMTIzZGVmNDU2Z2hpNzg5XCIsXG4gKiAgICAgXCJyZWRpcmVjdF91cmlcIjogXCJodHRwczovL2V4YW1wbGUuY29tL2NhbGxiYWNrXCIsXG4gKiAgICAgXCJjb2RlX3ZlcmlmaWVyXCI6IFwic2VjdXJlLWNvZGUtdmVyaWZpZXJcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqICMjIyBJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkIChOb3QgUmVjb21tZW5kZWQpXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwic3BvdGlmeVwiOiB7XG4gKiAgICAgXCJpZFwiOiBcIjEyMzQ1NjdcIixcbiAqICAgICBcImFjY2Vzc190b2tlblwiOiBcImFiYzEyM2RlZjQ1NmdoaTc4OVwiXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIE5vdGVzXG4gKiAtIGBlbmFibGVJbnNlY3VyZUF1dGhgIGlzICoqbm90IHJlY29tbWVuZGVkKiogYW5kIGJ5cGFzc2VzIHNlY3VyZSBmbG93cyBieSB2YWxpZGF0aW5nIHRoZSB1c2VyIElEIGFuZCBhY2Nlc3MgdG9rZW4gZGlyZWN0bHkuIFRoaXMgbWV0aG9kIGlzIG5vdCBzdWl0YWJsZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgYW5kIG1heSBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5cbiAqIC0gU2VjdXJlIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdlcyB0aGUgYGNvZGVgIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgZm9yIGFuIGFjY2VzcyB0b2tlbiB1c2luZyBTcG90aWZ5J3MgT0F1dGggQVBJLiBUaGlzIG1ldGhvZCBlbnN1cmVzIGdyZWF0ZXIgc2VjdXJpdHkgYW5kIGlzIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5zcG90aWZ5LmNvbS9kb2N1bWVudGF0aW9uL3dlYi1hcGkvdHV0b3JpYWxzL2dldHRpbmctc3RhcnRlZCBTcG90aWZ5IE9BdXRoIERvY3VtZW50YXRpb259XG4gKi9cblxuaW1wb3J0IEJhc2VBdXRoQ29kZUFkYXB0ZXIgZnJvbSAnLi9CYXNlQ29kZUF1dGhBZGFwdGVyJztcbmNsYXNzIFNwb3RpZnlBZGFwdGVyIGV4dGVuZHMgQmFzZUF1dGhDb2RlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdzcG90aWZ5Jyk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VyRnJvbUFjY2Vzc1Rva2VuKGFjY2Vzc190b2tlbikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLnNwb3RpZnkuY29tL3YxL21lJywge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBhY2Nlc3NfdG9rZW4sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdTcG90aWZ5IEFQSSByZXF1ZXN0IGZhaWxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdXNlci5pZCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0QWNjZXNzVG9rZW5Gcm9tQ29kZShhdXRoRGF0YSkge1xuICAgIGlmICghYXV0aERhdGEuY29kZSB8fCAhYXV0aERhdGEucmVkaXJlY3RfdXJpIHx8ICFhdXRoRGF0YS5jb2RlX3ZlcmlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAgICdTcG90aWZ5IGF1dGggY29uZmlndXJhdGlvbiBhdXRoRGF0YS5jb2RlIGFuZC9vciBhdXRoRGF0YS5yZWRpcmVjdF91cmkgYW5kL29yIGF1dGhEYXRhLmNvZGVfdmVyaWZpZXIuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FjY291bnRzLnNwb3RpZnkuY29tL2FwaS90b2tlbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICB9LFxuICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICBjb2RlOiBhdXRoRGF0YS5jb2RlLFxuICAgICAgICByZWRpcmVjdF91cmk6IGF1dGhEYXRhLnJlZGlyZWN0X3VyaSxcbiAgICAgICAgY29kZV92ZXJpZmllcjogYXV0aERhdGEuY29kZV92ZXJpZmllcixcbiAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1Nwb3RpZnkgQVBJIHJlcXVlc3QgZmFpbGVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFNwb3RpZnlBZGFwdGVyKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQWdFQSxJQUFBQSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXdELFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBaEV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0EsTUFBTUcsY0FBYyxTQUFTQyw0QkFBbUIsQ0FBQztFQUMvQ0MsV0FBV0EsQ0FBQSxFQUFHO0lBQ1osS0FBSyxDQUFDLFNBQVMsQ0FBQztFQUNsQjtFQUVBLE1BQU1DLHNCQUFzQkEsQ0FBQ0MsWUFBWSxFQUFFO0lBQ3pDLE1BQU1DLFFBQVEsR0FBRyxNQUFNQyxLQUFLLENBQUMsK0JBQStCLEVBQUU7TUFDNURDLE9BQU8sRUFBRTtRQUNQQyxhQUFhLEVBQUUsU0FBUyxHQUFHSjtNQUM3QjtJQUNGLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ0MsUUFBUSxDQUFDSSxFQUFFLEVBQUU7TUFDaEIsTUFBTSxJQUFJQyxLQUFLLENBQUNDLEtBQUssQ0FBQ0QsS0FBSyxDQUFDQyxLQUFLLENBQUNDLGdCQUFnQixFQUFFLDZCQUE2QixDQUFDO0lBQ3BGO0lBRUEsTUFBTUMsSUFBSSxHQUFHLE1BQU1SLFFBQVEsQ0FBQ1MsSUFBSSxDQUFDLENBQUM7SUFDbEMsT0FBTztNQUNMQyxFQUFFLEVBQUVGLElBQUksQ0FBQ0U7SUFDWCxDQUFDO0VBQ0g7RUFFQSxNQUFNQyxzQkFBc0JBLENBQUNDLFFBQVEsRUFBRTtJQUNyQyxJQUFJLENBQUNBLFFBQVEsQ0FBQ0MsSUFBSSxJQUFJLENBQUNELFFBQVEsQ0FBQ0UsWUFBWSxJQUFJLENBQUNGLFFBQVEsQ0FBQ0csYUFBYSxFQUFFO01BQ3ZFLE1BQU0sSUFBSVYsS0FBSyxDQUFDQyxLQUFLLENBQ25CRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQzVCLHNHQUNGLENBQUM7SUFDSDtJQUVBLE1BQU1QLFFBQVEsR0FBRyxNQUFNQyxLQUFLLENBQUMsd0NBQXdDLEVBQUU7TUFDckVlLE1BQU0sRUFBRSxNQUFNO01BQ2RkLE9BQU8sRUFBRTtRQUNQLGNBQWMsRUFBRTtNQUNsQixDQUFDO01BQ0RlLElBQUksRUFBRSxJQUFJQyxlQUFlLENBQUM7UUFDeEJDLFVBQVUsRUFBRSxvQkFBb0I7UUFDaENOLElBQUksRUFBRUQsUUFBUSxDQUFDQyxJQUFJO1FBQ25CQyxZQUFZLEVBQUVGLFFBQVEsQ0FBQ0UsWUFBWTtRQUNuQ0MsYUFBYSxFQUFFSCxRQUFRLENBQUNHLGFBQWE7UUFDckNLLFNBQVMsRUFBRSxJQUFJLENBQUNDO01BQ2xCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFJLENBQUNyQixRQUFRLENBQUNJLEVBQUUsRUFBRTtNQUNoQixNQUFNLElBQUlDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsNkJBQTZCLENBQUM7SUFDcEY7SUFFQSxPQUFPUCxRQUFRLENBQUNTLElBQUksQ0FBQyxDQUFDO0VBQ3hCO0FBQ0Y7QUFBQyxJQUFBYSxRQUFBLEdBQUFDLE9BQUEsQ0FBQTdCLE9BQUEsR0FFYyxJQUFJQyxjQUFjLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,57 +1,197 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _Config = _interopRequireDefault(require("../../Config"));
|
|
8
|
+
var _querystring = _interopRequireDefault(require("querystring"));
|
|
9
|
+
var _AuthAdapter = _interopRequireDefault(require("./AuthAdapter"));
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
/**
|
|
12
|
+
* Parse Server authentication adapter for Twitter.
|
|
13
|
+
*
|
|
14
|
+
* @class TwitterAdapter
|
|
15
|
+
* @param {Object} options - The adapter configuration options.
|
|
16
|
+
* @param {string} options.consumerKey - The Twitter App Consumer Key. Required for secure authentication.
|
|
17
|
+
* @param {string} options.consumerSecret - The Twitter App Consumer Secret. Required for secure authentication.
|
|
18
|
+
* @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
|
|
19
|
+
*
|
|
20
|
+
* @description
|
|
21
|
+
* ## Parse Server Configuration
|
|
22
|
+
* To configure Parse Server for Twitter authentication, use the following structure:
|
|
23
|
+
* ### Secure Configuration
|
|
24
|
+
* ```json
|
|
25
|
+
* {
|
|
26
|
+
* "auth": {
|
|
27
|
+
* "twitter": {
|
|
28
|
+
* "consumerKey": "your-consumer-key",
|
|
29
|
+
* "consumerSecret": "your-consumer-secret"
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
* ### Insecure Configuration (Not Recommended)
|
|
35
|
+
* ```json
|
|
36
|
+
* {
|
|
37
|
+
* "auth": {
|
|
38
|
+
* "twitter": {
|
|
39
|
+
* "enableInsecureAuth": true
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* The adapter requires the following `authData` fields:
|
|
46
|
+
* - **Secure Authentication**: `oauth_token`, `oauth_verifier`.
|
|
47
|
+
* - **Insecure Authentication (Not Recommended)**: `id`, `oauth_token`, `oauth_token_secret`.
|
|
48
|
+
*
|
|
49
|
+
* ## Auth Payloads
|
|
50
|
+
* ### Secure Authentication Payload
|
|
51
|
+
* ```json
|
|
52
|
+
* {
|
|
53
|
+
* "twitter": {
|
|
54
|
+
* "oauth_token": "1234567890-abc123def456",
|
|
55
|
+
* "oauth_verifier": "abc123def456"
|
|
56
|
+
* }
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* ### Insecure Authentication Payload (Not Recommended)
|
|
61
|
+
* ```json
|
|
62
|
+
* {
|
|
63
|
+
* "twitter": {
|
|
64
|
+
* "id": "1234567890",
|
|
65
|
+
* "oauth_token": "1234567890-abc123def456",
|
|
66
|
+
* "oauth_token_secret": "1234567890-abc123def456"
|
|
67
|
+
* }
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* ## Notes
|
|
72
|
+
* - **Deprecation Notice**: `enableInsecureAuth` and insecure fields (`id`, `oauth_token_secret`) are **deprecated** and may be removed in future versions. Use secure authentication with `consumerKey` and `consumerSecret`.
|
|
73
|
+
* - Secure authentication exchanges the `oauth_token` and `oauth_verifier` provided by the client for an access token using Twitter's OAuth API.
|
|
74
|
+
*
|
|
75
|
+
* @see {@link https://developer.twitter.com/en/docs/authentication/oauth-1-0a Twitter OAuth Documentation}
|
|
76
|
+
*/
|
|
7
77
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
78
|
+
class TwitterAuthAdapter extends _AuthAdapter.default {
|
|
79
|
+
validateOptions(options) {
|
|
80
|
+
if (!options) {
|
|
81
|
+
throw new Error('Twitter auth options are required.');
|
|
82
|
+
}
|
|
83
|
+
this.enableInsecureAuth = options.enableInsecureAuth;
|
|
84
|
+
if (!this.enableInsecureAuth && (!options.consumer_key || !options.consumer_secret)) {
|
|
85
|
+
throw new Error('Consumer key and secret are required for secure Twitter auth.');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async validateAuthData(authData, options) {
|
|
89
|
+
const config = _Config.default.get(Parse.applicationId);
|
|
90
|
+
const twitterConfig = config.auth.twitter;
|
|
91
|
+
if (this.enableInsecureAuth && twitterConfig && config.enableInsecureAuthAdapters) {
|
|
92
|
+
return this.validateInsecureAuth(authData, options);
|
|
93
|
+
}
|
|
94
|
+
if (!options.consumer_key || !options.consumer_secret) {
|
|
95
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth configuration missing consumer_key and/or consumer_secret.');
|
|
96
|
+
}
|
|
97
|
+
const accessTokenData = await this.exchangeAccessToken(authData);
|
|
98
|
+
if (accessTokenData?.oauth_token && accessTokenData?.user_id) {
|
|
99
|
+
authData.id = accessTokenData.user_id;
|
|
100
|
+
authData.auth_token = accessTokenData.oauth_token;
|
|
21
101
|
return;
|
|
22
102
|
}
|
|
23
103
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
104
|
+
}
|
|
105
|
+
async validateInsecureAuth(authData, options) {
|
|
106
|
+
if (!authData.oauth_token || !authData.oauth_token_secret) {
|
|
107
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter insecure auth requires oauth_token and oauth_token_secret.');
|
|
108
|
+
}
|
|
109
|
+
options = this.handleMultipleConfigurations(authData, options);
|
|
110
|
+
const data = await this.request(authData, options);
|
|
111
|
+
const parsedData = await data.json();
|
|
112
|
+
if (parsedData?.id === authData.id) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
|
|
116
|
+
}
|
|
117
|
+
async exchangeAccessToken(authData) {
|
|
118
|
+
const accessTokenRequestOptions = {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
headers: {
|
|
121
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
122
|
+
},
|
|
123
|
+
body: _querystring.default.stringify({
|
|
124
|
+
oauth_token: authData.oauth_token,
|
|
125
|
+
oauth_verifier: authData.oauth_verifier
|
|
126
|
+
})
|
|
127
|
+
};
|
|
128
|
+
const response = await fetch('https://api.twitter.com/oauth/access_token', accessTokenRequestOptions);
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
throw new Error('Failed to exchange access token.');
|
|
131
|
+
}
|
|
132
|
+
return response.json();
|
|
133
|
+
}
|
|
134
|
+
handleMultipleConfigurations(authData, options) {
|
|
135
|
+
if (Array.isArray(options)) {
|
|
136
|
+
const consumer_key = authData.consumer_key;
|
|
137
|
+
if (!consumer_key) {
|
|
138
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
|
|
139
|
+
}
|
|
140
|
+
options = options.filter(option => option.consumer_key === consumer_key);
|
|
141
|
+
if (options.length === 0) {
|
|
142
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
|
|
143
|
+
}
|
|
144
|
+
return options[0];
|
|
145
|
+
}
|
|
146
|
+
return options;
|
|
147
|
+
}
|
|
148
|
+
async request(authData, options) {
|
|
149
|
+
const {
|
|
150
|
+
consumer_key,
|
|
151
|
+
consumer_secret
|
|
152
|
+
} = options;
|
|
153
|
+
const oauth = {
|
|
154
|
+
consumer_key,
|
|
155
|
+
consumer_secret,
|
|
156
|
+
auth_token: authData.oauth_token,
|
|
157
|
+
auth_token_secret: authData.oauth_token_secret
|
|
158
|
+
};
|
|
159
|
+
const url = new URL('https://api.twitter.com/2/users/me');
|
|
160
|
+
const response = await fetch(url, {
|
|
161
|
+
headers: {
|
|
162
|
+
Authorization: 'Bearer ' + oauth.auth_token
|
|
163
|
+
},
|
|
164
|
+
body: JSON.stringify(oauth)
|
|
41
165
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
logger.error('Twitter Auth', 'Cannot find a configuration for the provided consumer_key');
|
|
45
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
|
|
166
|
+
if (!response.ok) {
|
|
167
|
+
throw new Error('Failed to fetch user data.');
|
|
46
168
|
}
|
|
47
|
-
|
|
169
|
+
return response;
|
|
170
|
+
}
|
|
171
|
+
async beforeFind(authData) {
|
|
172
|
+
if (this.enableInsecureAuth && !authData?.code) {
|
|
173
|
+
if (!authData?.access_token) {
|
|
174
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
|
|
175
|
+
}
|
|
176
|
+
const user = await this.getUserFromAccessToken(authData.access_token, authData);
|
|
177
|
+
if (user.id !== authData.id) {
|
|
178
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (!authData?.code) {
|
|
183
|
+
throw new Parse.Error(Parse.Error.VALIDATION_ERROR, 'Twitter code is required.');
|
|
184
|
+
}
|
|
185
|
+
const access_token = await this.exchangeAccessToken(authData);
|
|
186
|
+
const user = await this.getUserFromAccessToken(access_token, authData);
|
|
187
|
+
authData.access_token = access_token;
|
|
188
|
+
authData.id = user.id;
|
|
189
|
+
delete authData.code;
|
|
190
|
+
delete authData.redirect_uri;
|
|
191
|
+
}
|
|
192
|
+
validateAppId() {
|
|
193
|
+
return Promise.resolve();
|
|
48
194
|
}
|
|
49
|
-
return options;
|
|
50
195
|
}
|
|
51
|
-
|
|
52
|
-
module.exports = {
|
|
53
|
-
validateAppId,
|
|
54
|
-
validateAuthData,
|
|
55
|
-
handleMultipleConfigurations
|
|
56
|
-
};
|
|
57
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3R3aXR0ZXIuanMiXSwibmFtZXMiOlsiT0F1dGgiLCJyZXF1aXJlIiwiUGFyc2UiLCJsb2dnZXIiLCJkZWZhdWx0IiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwib3B0aW9ucyIsIkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiaGFuZGxlTXVsdGlwbGVDb25maWd1cmF0aW9ucyIsImNsaWVudCIsImhvc3QiLCJhdXRoX3Rva2VuIiwiYXV0aF90b2tlbl9zZWNyZXQiLCJnZXQiLCJ0aGVuIiwiZGF0YSIsImlkX3N0ciIsImlkIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkFycmF5IiwiaXNBcnJheSIsImNvbnN1bWVyX2tleSIsImVycm9yIiwiZmlsdGVyIiwib3B0aW9uIiwibGVuZ3RoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLElBQUlBLFFBQVFDLFFBQVEsZ0JBQVIsQ0FBWjtBQUNBLElBQUlDLFFBQVFELFFBQVEsWUFBUixFQUFzQkMsS0FBbEM7QUFDQSxJQUFJQyxTQUFTRixRQUFRLGNBQVIsRUFBd0JHLE9BQXJDOztBQUVBO0FBQ0EsU0FBU0MsZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DQyxPQUFwQyxFQUE2QztBQUMzQyxNQUFHLENBQUNBLE9BQUosRUFBYTtBQUNYLFVBQU0sSUFBSUwsTUFBTU0sS0FBVixDQUFnQk4sTUFBTU0sS0FBTixDQUFZQyxxQkFBNUIsRUFBbUQsb0NBQW5ELENBQU47QUFDRDtBQUNERixZQUFVRyw2QkFBNkJKLFFBQTdCLEVBQXVDQyxPQUF2QyxDQUFWO0FBQ0EsTUFBSUksU0FBUyxJQUFJWCxLQUFKLENBQVVPLE9BQVYsQ0FBYjtBQUNBSSxTQUFPQyxJQUFQLEdBQWMsaUJBQWQ7QUFDQUQsU0FBT0UsVUFBUCxHQUFvQlAsU0FBU08sVUFBN0I7QUFDQUYsU0FBT0csaUJBQVAsR0FBMkJSLFNBQVNRLGlCQUFwQzs7QUFFQSxTQUFPSCxPQUFPSSxHQUFQLENBQVcsc0NBQVgsRUFBbURDLElBQW5ELENBQXlEQyxJQUFELElBQVU7QUFDdkUsUUFBSUEsUUFBUUEsS0FBS0MsTUFBTCxJQUFlLEtBQUtaLFNBQVNhLEVBQXpDLEVBQTZDO0FBQzNDO0FBQ0Q7QUFDRCxVQUFNLElBQUlqQixNQUFNTSxLQUFWLENBQ0pOLE1BQU1NLEtBQU4sQ0FBWVksZ0JBRFIsRUFFSix3Q0FGSSxDQUFOO0FBR0QsR0FQTSxDQUFQO0FBUUQ7O0FBRUQ7QUFDQSxTQUFTQyxhQUFULEdBQXlCO0FBQ3ZCLFNBQU9DLFFBQVFDLE9BQVIsRUFBUDtBQUNEOztBQUVELFNBQVNiLDRCQUFULENBQXNDSixRQUF0QyxFQUFnREMsT0FBaEQsRUFBeUQ7QUFDdkQsTUFBSWlCLE1BQU1DLE9BQU4sQ0FBY2xCLE9BQWQsQ0FBSixFQUE0QjtBQUMxQixVQUFNbUIsZUFBZXBCLFNBQVNvQixZQUE5QjtBQUNBLFFBQUksQ0FBQ0EsWUFBTCxFQUFtQjtBQUNqQnZCLGFBQU93QixLQUFQLENBQWEsY0FBYixFQUE2QiwyRkFBN0I7QUFDQSxZQUFNLElBQUl6QixNQUFNTSxLQUFWLENBQWdCTixNQUFNTSxLQUFOLENBQVlZLGdCQUE1QixFQUE4Qyx3Q0FBOUMsQ0FBTjtBQUNEO0FBQ0RiLGNBQVVBLFFBQVFxQixNQUFSLENBQWdCQyxNQUFELElBQVk7QUFDbkMsYUFBT0EsT0FBT0gsWUFBUCxJQUF1QkEsWUFBOUI7QUFDRCxLQUZTLENBQVY7O0FBSUEsUUFBSW5CLFFBQVF1QixNQUFSLElBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCM0IsYUFBT3dCLEtBQVAsQ0FBYSxjQUFiLEVBQTRCLDJEQUE1QjtBQUNBLFlBQU0sSUFBSXpCLE1BQU1NLEtBQVYsQ0FBZ0JOLE1BQU1NLEtBQU4sQ0FBWVksZ0JBQTVCLEVBQThDLHdDQUE5QyxDQUFOO0FBQ0Q7QUFDRGIsY0FBVUEsUUFBUSxDQUFSLENBQVY7QUFDRDtBQUNELFNBQU9BLE9BQVA7QUFDRDs7QUFFRHdCLE9BQU9DLE9BQVAsR0FBaUI7QUFDZlgsZUFEZTtBQUVmaEIsa0JBRmU7QUFHZks7QUFIZSxDQUFqQiIsImZpbGUiOiJ0d2l0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSB0d2l0dGVyIEFQSS5cbnZhciBPQXV0aCA9IHJlcXVpcmUoJy4vT0F1dGgxQ2xpZW50Jyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG52YXIgbG9nZ2VyID0gcmVxdWlyZSgnLi4vLi4vbG9nZ2VyJykuZGVmYXVsdDtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucykge1xuICBpZighb3B0aW9ucykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1IsICdUd2l0dGVyIGF1dGggY29uZmlndXJhdGlvbiBtaXNzaW5nJyk7XG4gIH1cbiAgb3B0aW9ucyA9IGhhbmRsZU11bHRpcGxlQ29uZmlndXJhdGlvbnMoYXV0aERhdGEsIG9wdGlvbnMpO1xuICB2YXIgY2xpZW50ID0gbmV3IE9BdXRoKG9wdGlvbnMpO1xuICBjbGllbnQuaG9zdCA9IFwiYXBpLnR3aXR0ZXIuY29tXCI7XG4gIGNsaWVudC5hdXRoX3Rva2VuID0gYXV0aERhdGEuYXV0aF90b2tlbjtcbiAgY2xpZW50LmF1dGhfdG9rZW5fc2VjcmV0ID0gYXV0aERhdGEuYXV0aF90b2tlbl9zZWNyZXQ7XG5cbiAgcmV0dXJuIGNsaWVudC5nZXQoXCIvMS4xL2FjY291bnQvdmVyaWZ5X2NyZWRlbnRpYWxzLmpzb25cIikudGhlbigoZGF0YSkgPT4ge1xuICAgIGlmIChkYXRhICYmIGRhdGEuaWRfc3RyID09ICcnICsgYXV0aERhdGEuaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICdUd2l0dGVyIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU11bHRpcGxlQ29uZmlndXJhdGlvbnMoYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICBjb25zdCBjb25zdW1lcl9rZXkgPSBhdXRoRGF0YS5jb25zdW1lcl9rZXk7XG4gICAgaWYgKCFjb25zdW1lcl9rZXkpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignVHdpdHRlciBBdXRoJywgJ011bHRpcGxlIHR3aXR0ZXIgY29uZmlndXJhdGlvbnMgYXJlIGF2YWlsYWJsZSwgYnkgbm8gY29uc3VtZXJfa2V5IHdhcyBzZW50IGJ5IHRoZSBjbGllbnQuJyk7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1R3aXR0ZXIgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9uLmNvbnN1bWVyX2tleSA9PSBjb25zdW1lcl9rZXk7XG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdUd2l0dGVyIEF1dGgnLCdDYW5ub3QgZmluZCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwcm92aWRlZCBjb25zdW1lcl9rZXknKTtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnVHdpdHRlciBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnNbMF07XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhLFxuICBoYW5kbGVNdWx0aXBsZUNvbmZpZ3VyYXRpb25zXG59O1xuIl19
|
|
196
|
+
var _default = exports.default = new TwitterAuthAdapter();
|
|
197
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcXVlcnlzdHJpbmciLCJfQXV0aEFkYXB0ZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJUd2l0dGVyQXV0aEFkYXB0ZXIiLCJBdXRoQWRhcHRlciIsInZhbGlkYXRlT3B0aW9ucyIsIm9wdGlvbnMiLCJFcnJvciIsImVuYWJsZUluc2VjdXJlQXV0aCIsImNvbnN1bWVyX2tleSIsImNvbnN1bWVyX3NlY3JldCIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsImNvbmZpZyIsIkNvbmZpZyIsImdldCIsIlBhcnNlIiwiYXBwbGljYXRpb25JZCIsInR3aXR0ZXJDb25maWciLCJhdXRoIiwidHdpdHRlciIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwidmFsaWRhdGVJbnNlY3VyZUF1dGgiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiYWNjZXNzVG9rZW5EYXRhIiwiZXhjaGFuZ2VBY2Nlc3NUb2tlbiIsIm9hdXRoX3Rva2VuIiwidXNlcl9pZCIsImlkIiwiYXV0aF90b2tlbiIsIm9hdXRoX3Rva2VuX3NlY3JldCIsImhhbmRsZU11bHRpcGxlQ29uZmlndXJhdGlvbnMiLCJkYXRhIiwicmVxdWVzdCIsInBhcnNlZERhdGEiLCJqc29uIiwiYWNjZXNzVG9rZW5SZXF1ZXN0T3B0aW9ucyIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwicXVlcnlzdHJpbmciLCJzdHJpbmdpZnkiLCJvYXV0aF92ZXJpZmllciIsInJlc3BvbnNlIiwiZmV0Y2giLCJvayIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsIm9wdGlvbiIsImxlbmd0aCIsIm9hdXRoIiwiYXV0aF90b2tlbl9zZWNyZXQiLCJ1cmwiLCJVUkwiLCJBdXRob3JpemF0aW9uIiwiSlNPTiIsImJlZm9yZUZpbmQiLCJjb2RlIiwiYWNjZXNzX3Rva2VuIiwidXNlciIsImdldFVzZXJGcm9tQWNjZXNzVG9rZW4iLCJWQUxJREFUSU9OX0VSUk9SIiwicmVkaXJlY3RfdXJpIiwidmFsaWRhdGVBcHBJZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvdHdpdHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnNlIFNlcnZlciBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIGZvciBUd2l0dGVyLlxuICpcbiAqIEBjbGFzcyBUd2l0dGVyQWRhcHRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgYWRhcHRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jb25zdW1lcktleSAtIFRoZSBUd2l0dGVyIEFwcCBDb25zdW1lciBLZXkuIFJlcXVpcmVkIGZvciBzZWN1cmUgYXV0aGVudGljYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jb25zdW1lclNlY3JldCAtIFRoZSBUd2l0dGVyIEFwcCBDb25zdW1lciBTZWNyZXQuIFJlcXVpcmVkIGZvciBzZWN1cmUgYXV0aGVudGljYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmVuYWJsZUluc2VjdXJlQXV0aD1mYWxzZV0gLSAqKltERVBSRUNBVEVEXSoqIEVuYWJsZSBpbnNlY3VyZSBhdXRoZW50aWNhdGlvbiAobm90IHJlY29tbWVuZGVkKS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqICMjIFBhcnNlIFNlcnZlciBDb25maWd1cmF0aW9uXG4gKiBUbyBjb25maWd1cmUgUGFyc2UgU2VydmVyIGZvciBUd2l0dGVyIGF1dGhlbnRpY2F0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiAjIyMgU2VjdXJlIENvbmZpZ3VyYXRpb25cbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJhdXRoXCI6IHtcbiAqICAgICBcInR3aXR0ZXJcIjoge1xuICogICAgICAgXCJjb25zdW1lcktleVwiOiBcInlvdXItY29uc3VtZXIta2V5XCIsXG4gKiAgICAgICBcImNvbnN1bWVyU2VjcmV0XCI6IFwieW91ci1jb25zdW1lci1zZWNyZXRcIlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiAjIyMgSW5zZWN1cmUgQ29uZmlndXJhdGlvbiAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwidHdpdHRlclwiOiB7XG4gKiAgICAgICBcImVuYWJsZUluc2VjdXJlQXV0aFwiOiB0cnVlXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgYWRhcHRlciByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGBhdXRoRGF0YWAgZmllbGRzOlxuICogLSAqKlNlY3VyZSBBdXRoZW50aWNhdGlvbioqOiBgb2F1dGhfdG9rZW5gLCBgb2F1dGhfdmVyaWZpZXJgLlxuICogLSAqKkluc2VjdXJlIEF1dGhlbnRpY2F0aW9uIChOb3QgUmVjb21tZW5kZWQpKio6IGBpZGAsIGBvYXV0aF90b2tlbmAsIGBvYXV0aF90b2tlbl9zZWNyZXRgLlxuICpcbiAqICMjIEF1dGggUGF5bG9hZHNcbiAqICMjIyBTZWN1cmUgQXV0aGVudGljYXRpb24gUGF5bG9hZFxuICogYGBganNvblxuICoge1xuICogICBcInR3aXR0ZXJcIjoge1xuICogICAgIFwib2F1dGhfdG9rZW5cIjogXCIxMjM0NTY3ODkwLWFiYzEyM2RlZjQ1NlwiLFxuICogICAgIFwib2F1dGhfdmVyaWZpZXJcIjogXCJhYmMxMjNkZWY0NTZcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgSW5zZWN1cmUgQXV0aGVudGljYXRpb24gUGF5bG9hZCAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcInR3aXR0ZXJcIjoge1xuICogICAgIFwiaWRcIjogXCIxMjM0NTY3ODkwXCIsXG4gKiAgICAgXCJvYXV0aF90b2tlblwiOiBcIjEyMzQ1Njc4OTAtYWJjMTIzZGVmNDU2XCIsXG4gKiAgICAgXCJvYXV0aF90b2tlbl9zZWNyZXRcIjogXCIxMjM0NTY3ODkwLWFiYzEyM2RlZjQ1NlwiXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIE5vdGVzXG4gKiAtICoqRGVwcmVjYXRpb24gTm90aWNlKio6IGBlbmFibGVJbnNlY3VyZUF1dGhgIGFuZCBpbnNlY3VyZSBmaWVsZHMgKGBpZGAsIGBvYXV0aF90b2tlbl9zZWNyZXRgKSBhcmUgKipkZXByZWNhdGVkKiogYW5kIG1heSBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gVXNlIHNlY3VyZSBhdXRoZW50aWNhdGlvbiB3aXRoIGBjb25zdW1lcktleWAgYW5kIGBjb25zdW1lclNlY3JldGAuXG4gKiAtIFNlY3VyZSBhdXRoZW50aWNhdGlvbiBleGNoYW5nZXMgdGhlIGBvYXV0aF90b2tlbmAgYW5kIGBvYXV0aF92ZXJpZmllcmAgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCBmb3IgYW4gYWNjZXNzIHRva2VuIHVzaW5nIFR3aXR0ZXIncyBPQXV0aCBBUEkuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIudHdpdHRlci5jb20vZW4vZG9jcy9hdXRoZW50aWNhdGlvbi9vYXV0aC0xLTBhIFR3aXR0ZXIgT0F1dGggRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uLy4uL0NvbmZpZyc7XG5pbXBvcnQgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuaW1wb3J0IEF1dGhBZGFwdGVyIGZyb20gJy4vQXV0aEFkYXB0ZXInO1xuXG5jbGFzcyBUd2l0dGVyQXV0aEFkYXB0ZXIgZXh0ZW5kcyBBdXRoQWRhcHRlciB7XG4gIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R3aXR0ZXIgYXV0aCBvcHRpb25zIGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmVuYWJsZUluc2VjdXJlQXV0aCA9IG9wdGlvbnMuZW5hYmxlSW5zZWN1cmVBdXRoO1xuXG4gICAgaWYgKCF0aGlzLmVuYWJsZUluc2VjdXJlQXV0aCAmJiAoIW9wdGlvbnMuY29uc3VtZXJfa2V5IHx8ICFvcHRpb25zLmNvbnN1bWVyX3NlY3JldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc3VtZXIga2V5IGFuZCBzZWNyZXQgYXJlIHJlcXVpcmVkIGZvciBzZWN1cmUgVHdpdHRlciBhdXRoLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICAgIGNvbnN0IHR3aXR0ZXJDb25maWcgPSBjb25maWcuYXV0aC50d2l0dGVyO1xuXG4gICAgaWYgKHRoaXMuZW5hYmxlSW5zZWN1cmVBdXRoICYmIHR3aXR0ZXJDb25maWcgJiYgY29uZmlnLmVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUluc2VjdXJlQXV0aChhdXRoRGF0YSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmNvbnN1bWVyX2tleSB8fCAhb3B0aW9ucy5jb25zdW1lcl9zZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgJ1R3aXR0ZXIgYXV0aCBjb25maWd1cmF0aW9uIG1pc3NpbmcgY29uc3VtZXJfa2V5IGFuZC9vciBjb25zdW1lcl9zZWNyZXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbkRhdGEgPSBhd2FpdCB0aGlzLmV4Y2hhbmdlQWNjZXNzVG9rZW4oYXV0aERhdGEpO1xuXG4gICAgaWYgKGFjY2Vzc1Rva2VuRGF0YT8ub2F1dGhfdG9rZW4gJiYgYWNjZXNzVG9rZW5EYXRhPy51c2VyX2lkKSB7XG4gICAgICBhdXRoRGF0YS5pZCA9IGFjY2Vzc1Rva2VuRGF0YS51c2VyX2lkO1xuICAgICAgYXV0aERhdGEuYXV0aF90b2tlbiA9IGFjY2Vzc1Rva2VuRGF0YS5vYXV0aF90b2tlbjtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgJ1R3aXR0ZXIgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJ1xuICAgICk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZUluc2VjdXJlQXV0aChhdXRoRGF0YSwgb3B0aW9ucykge1xuICAgIGlmICghYXV0aERhdGEub2F1dGhfdG9rZW4gfHwgIWF1dGhEYXRhLm9hdXRoX3Rva2VuX3NlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgICAnVHdpdHRlciBpbnNlY3VyZSBhdXRoIHJlcXVpcmVzIG9hdXRoX3Rva2VuIGFuZCBvYXV0aF90b2tlbl9zZWNyZXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gdGhpcy5oYW5kbGVNdWx0aXBsZUNvbmZpZ3VyYXRpb25zKGF1dGhEYXRhLCBvcHRpb25zKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QoYXV0aERhdGEsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcnNlZERhdGEgPSBhd2FpdCBkYXRhLmpzb24oKTtcblxuICAgIGlmIChwYXJzZWREYXRhPy5pZCA9PT0gYXV0aERhdGEuaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgJ1R3aXR0ZXIgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJ1xuICAgICk7XG4gIH1cblxuICBhc3luYyBleGNoYW5nZUFjY2Vzc1Rva2VuKGF1dGhEYXRhKSB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW5SZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICB9LFxuICAgICAgYm9keTogcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHtcbiAgICAgICAgb2F1dGhfdG9rZW46IGF1dGhEYXRhLm9hdXRoX3Rva2VuLFxuICAgICAgICBvYXV0aF92ZXJpZmllcjogYXV0aERhdGEub2F1dGhfdmVyaWZpZXIsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vb2F1dGgvYWNjZXNzX3Rva2VuJywgYWNjZXNzVG9rZW5SZXF1ZXN0T3B0aW9ucyk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZXhjaGFuZ2UgYWNjZXNzIHRva2VuLicpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cblxuICBoYW5kbGVNdWx0aXBsZUNvbmZpZ3VyYXRpb25zKGF1dGhEYXRhLCBvcHRpb25zKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIGNvbnN0IGNvbnN1bWVyX2tleSA9IGF1dGhEYXRhLmNvbnN1bWVyX2tleTtcblxuICAgICAgaWYgKCFjb25zdW1lcl9rZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAgICAgJ1R3aXR0ZXIgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5jb25zdW1lcl9rZXkgPT09IGNvbnN1bWVyX2tleSk7XG5cbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgICAnVHdpdHRlciBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcHRpb25zWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChhdXRoRGF0YSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHsgY29uc3VtZXJfa2V5LCBjb25zdW1lcl9zZWNyZXQgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBvYXV0aCA9IHtcbiAgICAgIGNvbnN1bWVyX2tleSxcbiAgICAgIGNvbnN1bWVyX3NlY3JldCxcbiAgICAgIGF1dGhfdG9rZW46IGF1dGhEYXRhLm9hdXRoX3Rva2VuLFxuICAgICAgYXV0aF90b2tlbl9zZWNyZXQ6IGF1dGhEYXRhLm9hdXRoX3Rva2VuX3NlY3JldCxcbiAgICB9O1xuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCgnaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vMi91c2Vycy9tZScpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgb2F1dGguYXV0aF90b2tlbixcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShvYXV0aCksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCB1c2VyIGRhdGEuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgYmVmb3JlRmluZChhdXRoRGF0YSkge1xuICAgIGlmICh0aGlzLmVuYWJsZUluc2VjdXJlQXV0aCAmJiAhYXV0aERhdGE/LmNvZGUpIHtcbiAgICAgIGlmICghYXV0aERhdGE/LmFjY2Vzc190b2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1R3aXR0ZXIgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmdldFVzZXJGcm9tQWNjZXNzVG9rZW4oYXV0aERhdGEuYWNjZXNzX3Rva2VuLCBhdXRoRGF0YSk7XG5cbiAgICAgIGlmICh1c2VyLmlkICE9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1R3aXR0ZXIgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWF1dGhEYXRhPy5jb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuVkFMSURBVElPTl9FUlJPUiwgJ1R3aXR0ZXIgY29kZSBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2Nlc3NfdG9rZW4gPSBhd2FpdCB0aGlzLmV4Y2hhbmdlQWNjZXNzVG9rZW4oYXV0aERhdGEpO1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmdldFVzZXJGcm9tQWNjZXNzVG9rZW4oYWNjZXNzX3Rva2VuLCBhdXRoRGF0YSk7XG5cblxuICAgIGF1dGhEYXRhLmFjY2Vzc190b2tlbiA9IGFjY2Vzc190b2tlbjtcbiAgICBhdXRoRGF0YS5pZCA9IHVzZXIuaWQ7XG5cbiAgICBkZWxldGUgYXV0aERhdGEuY29kZTtcbiAgICBkZWxldGUgYXV0aERhdGEucmVkaXJlY3RfdXJpO1xuICB9XG5cbiAgdmFsaWRhdGVBcHBJZCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFR3aXR0ZXJBdXRoQWRhcHRlcigpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFtRUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQXdDLFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBckV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBTUEsTUFBTUcsa0JBQWtCLFNBQVNDLG9CQUFXLENBQUM7RUFDM0NDLGVBQWVBLENBQUNDLE9BQU8sRUFBRTtJQUN2QixJQUFJLENBQUNBLE9BQU8sRUFBRTtNQUNaLE1BQU0sSUFBSUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDO0lBQ3ZEO0lBRUEsSUFBSSxDQUFDQyxrQkFBa0IsR0FBR0YsT0FBTyxDQUFDRSxrQkFBa0I7SUFFcEQsSUFBSSxDQUFDLElBQUksQ0FBQ0Esa0JBQWtCLEtBQUssQ0FBQ0YsT0FBTyxDQUFDRyxZQUFZLElBQUksQ0FBQ0gsT0FBTyxDQUFDSSxlQUFlLENBQUMsRUFBRTtNQUNuRixNQUFNLElBQUlILEtBQUssQ0FBQywrREFBK0QsQ0FBQztJQUNsRjtFQUNGO0VBRUEsTUFBTUksZ0JBQWdCQSxDQUFDQyxRQUFRLEVBQUVOLE9BQU8sRUFBRTtJQUN4QyxNQUFNTyxNQUFNLEdBQUdDLGVBQU0sQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUNDLGFBQWEsQ0FBQztJQUM5QyxNQUFNQyxhQUFhLEdBQUdMLE1BQU0sQ0FBQ00sSUFBSSxDQUFDQyxPQUFPO0lBRXpDLElBQUksSUFBSSxDQUFDWixrQkFBa0IsSUFBSVUsYUFBYSxJQUFJTCxNQUFNLENBQUNRLDBCQUEwQixFQUFFO01BQ2pGLE9BQU8sSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQ1YsUUFBUSxFQUFFTixPQUFPLENBQUM7SUFDckQ7SUFFQSxJQUFJLENBQUNBLE9BQU8sQ0FBQ0csWUFBWSxJQUFJLENBQUNILE9BQU8sQ0FBQ0ksZUFBZSxFQUFFO01BQ3JELE1BQU0sSUFBSU0sS0FBSyxDQUFDVCxLQUFLLENBQ25CUyxLQUFLLENBQUNULEtBQUssQ0FBQ2dCLGdCQUFnQixFQUM1Qix5RUFDRixDQUFDO0lBQ0g7SUFFQSxNQUFNQyxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUNDLG1CQUFtQixDQUFDYixRQUFRLENBQUM7SUFFaEUsSUFBSVksZUFBZSxFQUFFRSxXQUFXLElBQUlGLGVBQWUsRUFBRUcsT0FBTyxFQUFFO01BQzVEZixRQUFRLENBQUNnQixFQUFFLEdBQUdKLGVBQWUsQ0FBQ0csT0FBTztNQUNyQ2YsUUFBUSxDQUFDaUIsVUFBVSxHQUFHTCxlQUFlLENBQUNFLFdBQVc7TUFDakQ7SUFDRjtJQUVBLE1BQU0sSUFBSVYsS0FBSyxDQUFDVCxLQUFLLENBQ25CUyxLQUFLLENBQUNULEtBQUssQ0FBQ2dCLGdCQUFnQixFQUM1Qix3Q0FDRixDQUFDO0VBQ0g7RUFFQSxNQUFNRCxvQkFBb0JBLENBQUNWLFFBQVEsRUFBRU4sT0FBTyxFQUFFO0lBQzVDLElBQUksQ0FBQ00sUUFBUSxDQUFDYyxXQUFXLElBQUksQ0FBQ2QsUUFBUSxDQUFDa0Isa0JBQWtCLEVBQUU7TUFDekQsTUFBTSxJQUFJZCxLQUFLLENBQUNULEtBQUssQ0FDbkJTLEtBQUssQ0FBQ1QsS0FBSyxDQUFDZ0IsZ0JBQWdCLEVBQzVCLG9FQUNGLENBQUM7SUFDSDtJQUVBakIsT0FBTyxHQUFHLElBQUksQ0FBQ3lCLDRCQUE0QixDQUFDbkIsUUFBUSxFQUFFTixPQUFPLENBQUM7SUFFOUQsTUFBTTBCLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQ0MsT0FBTyxDQUFDckIsUUFBUSxFQUFFTixPQUFPLENBQUM7SUFDbEQsTUFBTTRCLFVBQVUsR0FBRyxNQUFNRixJQUFJLENBQUNHLElBQUksQ0FBQyxDQUFDO0lBRXBDLElBQUlELFVBQVUsRUFBRU4sRUFBRSxLQUFLaEIsUUFBUSxDQUFDZ0IsRUFBRSxFQUFFO01BQ2xDO0lBQ0Y7SUFFQSxNQUFNLElBQUlaLEtBQUssQ0FBQ1QsS0FBSyxDQUNuQlMsS0FBSyxDQUFDVCxLQUFLLENBQUNnQixnQkFBZ0IsRUFDNUIsd0NBQ0YsQ0FBQztFQUNIO0VBRUEsTUFBTUUsbUJBQW1CQSxDQUFDYixRQUFRLEVBQUU7SUFDbEMsTUFBTXdCLHlCQUF5QixHQUFHO01BQ2hDQyxNQUFNLEVBQUUsTUFBTTtNQUNkQyxPQUFPLEVBQUU7UUFDUCxjQUFjLEVBQUU7TUFDbEIsQ0FBQztNQUNEQyxJQUFJLEVBQUVDLG9CQUFXLENBQUNDLFNBQVMsQ0FBQztRQUMxQmYsV0FBVyxFQUFFZCxRQUFRLENBQUNjLFdBQVc7UUFDakNnQixjQUFjLEVBQUU5QixRQUFRLENBQUM4QjtNQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU1DLFFBQVEsR0FBRyxNQUFNQyxLQUFLLENBQUMsNENBQTRDLEVBQUVSLHlCQUF5QixDQUFDO0lBQ3JHLElBQUksQ0FBQ08sUUFBUSxDQUFDRSxFQUFFLEVBQUU7TUFDaEIsTUFBTSxJQUFJdEMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDO0lBQ3JEO0lBRUEsT0FBT29DLFFBQVEsQ0FBQ1IsSUFBSSxDQUFDLENBQUM7RUFDeEI7RUFFQUosNEJBQTRCQSxDQUFDbkIsUUFBUSxFQUFFTixPQUFPLEVBQUU7SUFDOUMsSUFBSXdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDekMsT0FBTyxDQUFDLEVBQUU7TUFDMUIsTUFBTUcsWUFBWSxHQUFHRyxRQUFRLENBQUNILFlBQVk7TUFFMUMsSUFBSSxDQUFDQSxZQUFZLEVBQUU7UUFDakIsTUFBTSxJQUFJTyxLQUFLLENBQUNULEtBQUssQ0FDbkJTLEtBQUssQ0FBQ1QsS0FBSyxDQUFDZ0IsZ0JBQWdCLEVBQzVCLHdDQUNGLENBQUM7TUFDSDtNQUVBakIsT0FBTyxHQUFHQSxPQUFPLENBQUMwQyxNQUFNLENBQUNDLE1BQU0sSUFBSUEsTUFBTSxDQUFDeEMsWUFBWSxLQUFLQSxZQUFZLENBQUM7TUFFeEUsSUFBSUgsT0FBTyxDQUFDNEMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUlsQyxLQUFLLENBQUNULEtBQUssQ0FDbkJTLEtBQUssQ0FBQ1QsS0FBSyxDQUFDZ0IsZ0JBQWdCLEVBQzVCLHdDQUNGLENBQUM7TUFDSDtNQUVBLE9BQU9qQixPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25CO0lBRUEsT0FBT0EsT0FBTztFQUNoQjtFQUVBLE1BQU0yQixPQUFPQSxDQUFDckIsUUFBUSxFQUFFTixPQUFPLEVBQUU7SUFDL0IsTUFBTTtNQUFFRyxZQUFZO01BQUVDO0lBQWdCLENBQUMsR0FBR0osT0FBTztJQUVqRCxNQUFNNkMsS0FBSyxHQUFHO01BQ1oxQyxZQUFZO01BQ1pDLGVBQWU7TUFDZm1CLFVBQVUsRUFBRWpCLFFBQVEsQ0FBQ2MsV0FBVztNQUNoQzBCLGlCQUFpQixFQUFFeEMsUUFBUSxDQUFDa0I7SUFDOUIsQ0FBQztJQUVELE1BQU11QixHQUFHLEdBQUcsSUFBSUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDO0lBRXpELE1BQU1YLFFBQVEsR0FBRyxNQUFNQyxLQUFLLENBQUNTLEdBQUcsRUFBRTtNQUNoQ2YsT0FBTyxFQUFFO1FBQ1BpQixhQUFhLEVBQUUsU0FBUyxHQUFHSixLQUFLLENBQUN0QjtNQUNuQyxDQUFDO01BQ0RVLElBQUksRUFBRWlCLElBQUksQ0FBQ2YsU0FBUyxDQUFDVSxLQUFLO0lBQzVCLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ1IsUUFBUSxDQUFDRSxFQUFFLEVBQUU7TUFDaEIsTUFBTSxJQUFJdEMsS0FBSyxDQUFDLDRCQUE0QixDQUFDO0lBQy9DO0lBRUEsT0FBT29DLFFBQVE7RUFDakI7RUFFQSxNQUFNYyxVQUFVQSxDQUFDN0MsUUFBUSxFQUFFO0lBQ3pCLElBQUksSUFBSSxDQUFDSixrQkFBa0IsSUFBSSxDQUFDSSxRQUFRLEVBQUU4QyxJQUFJLEVBQUU7TUFDOUMsSUFBSSxDQUFDOUMsUUFBUSxFQUFFK0MsWUFBWSxFQUFFO1FBQzNCLE1BQU0sSUFBSTNDLEtBQUssQ0FBQ1QsS0FBSyxDQUFDUyxLQUFLLENBQUNULEtBQUssQ0FBQ2dCLGdCQUFnQixFQUFFLHdDQUF3QyxDQUFDO01BQy9GO01BRUEsTUFBTXFDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNqRCxRQUFRLENBQUMrQyxZQUFZLEVBQUUvQyxRQUFRLENBQUM7TUFFL0UsSUFBSWdELElBQUksQ0FBQ2hDLEVBQUUsS0FBS2hCLFFBQVEsQ0FBQ2dCLEVBQUUsRUFBRTtRQUMzQixNQUFNLElBQUlaLEtBQUssQ0FBQ1QsS0FBSyxDQUFDUyxLQUFLLENBQUNULEtBQUssQ0FBQ2dCLGdCQUFnQixFQUFFLHdDQUF3QyxDQUFDO01BQy9GO01BRUE7SUFDRjtJQUVBLElBQUksQ0FBQ1gsUUFBUSxFQUFFOEMsSUFBSSxFQUFFO01BQ25CLE1BQU0sSUFBSTFDLEtBQUssQ0FBQ1QsS0FBSyxDQUFDUyxLQUFLLENBQUNULEtBQUssQ0FBQ3VELGdCQUFnQixFQUFFLDJCQUEyQixDQUFDO0lBQ2xGO0lBRUEsTUFBTUgsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDbEMsbUJBQW1CLENBQUNiLFFBQVEsQ0FBQztJQUM3RCxNQUFNZ0QsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0YsWUFBWSxFQUFFL0MsUUFBUSxDQUFDO0lBR3RFQSxRQUFRLENBQUMrQyxZQUFZLEdBQUdBLFlBQVk7SUFDcEMvQyxRQUFRLENBQUNnQixFQUFFLEdBQUdnQyxJQUFJLENBQUNoQyxFQUFFO0lBRXJCLE9BQU9oQixRQUFRLENBQUM4QyxJQUFJO0lBQ3BCLE9BQU85QyxRQUFRLENBQUNtRCxZQUFZO0VBQzlCO0VBRUFDLGFBQWFBLENBQUEsRUFBRztJQUNkLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7RUFDMUI7QUFDRjtBQUFDLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxDQUFBbEUsT0FBQSxHQUVjLElBQUlDLGtCQUFrQixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const jwt = require('jsonwebtoken');
|
|
4
|
+
const util = require('util');
|
|
5
|
+
const Parse = require('parse/node').Parse;
|
|
6
|
+
const getHeaderFromToken = token => {
|
|
7
|
+
const decodedToken = jwt.decode(token, {
|
|
8
|
+
complete: true
|
|
9
|
+
});
|
|
10
|
+
if (!decodedToken) {
|
|
11
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
12
|
+
}
|
|
13
|
+
return decodedToken.header;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns the signing key from a JWKS client.
|
|
18
|
+
* @param {Object} client The JWKS client.
|
|
19
|
+
* @param {String} key The kid.
|
|
20
|
+
*/
|
|
21
|
+
async function getSigningKey(client, key) {
|
|
22
|
+
return util.promisify(client.getSigningKey)(key);
|
|
23
|
+
}
|
|
24
|
+
module.exports = {
|
|
25
|
+
getHeaderFromToken,
|
|
26
|
+
getSigningKey
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqd3QiLCJyZXF1aXJlIiwidXRpbCIsIlBhcnNlIiwiZ2V0SGVhZGVyRnJvbVRva2VuIiwidG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJkZWNvZGUiLCJjb21wbGV0ZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsImhlYWRlciIsImdldFNpZ25pbmdLZXkiLCJjbGllbnQiLCJrZXkiLCJwcm9taXNpZnkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBnZXRIZWFkZXJGcm9tVG9rZW4gPSB0b2tlbiA9PiB7XG4gIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dC5kZWNvZGUodG9rZW4sIHsgY29tcGxldGU6IHRydWUgfSk7XG4gIGlmICghZGVjb2RlZFRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGBwcm92aWRlZCB0b2tlbiBkb2VzIG5vdCBkZWNvZGUgYXMgSldUYCk7XG4gIH1cblxuICByZXR1cm4gZGVjb2RlZFRva2VuLmhlYWRlcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2lnbmluZyBrZXkgZnJvbSBhIEpXS1MgY2xpZW50LlxuICogQHBhcmFtIHtPYmplY3R9IGNsaWVudCBUaGUgSldLUyBjbGllbnQuXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IFRoZSBraWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFNpZ25pbmdLZXkoY2xpZW50LCBrZXkpIHtcbiAgcmV0dXJuIHV0aWwucHJvbWlzaWZ5KGNsaWVudC5nZXRTaWduaW5nS2V5KShrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhlYWRlckZyb21Ub2tlbixcbiAgZ2V0U2lnbmluZ0tleSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsR0FBRyxHQUFHQyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ25DLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNRSxLQUFLLEdBQUdGLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0UsS0FBSztBQUN6QyxNQUFNQyxrQkFBa0IsR0FBR0MsS0FBSyxJQUFJO0VBQ2xDLE1BQU1DLFlBQVksR0FBR04sR0FBRyxDQUFDTyxNQUFNLENBQUNGLEtBQUssRUFBRTtJQUFFRyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUM7RUFDMUQsSUFBSSxDQUFDRixZQUFZLEVBQUU7SUFDakIsTUFBTSxJQUFJSCxLQUFLLENBQUNNLEtBQUssQ0FBQ04sS0FBSyxDQUFDTSxLQUFLLENBQUNDLGdCQUFnQixFQUFFLHVDQUF1QyxDQUFDO0VBQzlGO0VBRUEsT0FBT0osWUFBWSxDQUFDSyxNQUFNO0FBQzVCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWVDLGFBQWFBLENBQUNDLE1BQU0sRUFBRUMsR0FBRyxFQUFFO0VBQ3hDLE9BQU9aLElBQUksQ0FBQ2EsU0FBUyxDQUFDRixNQUFNLENBQUNELGFBQWEsQ0FBQyxDQUFDRSxHQUFHLENBQUM7QUFDbEQ7QUFDQUUsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZmIsa0JBQWtCO0VBQ2xCUTtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,36 +1,41 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the vkontakte API.
|
|
4
|
-
|
|
5
|
-
var
|
|
4
|
+
var _Config = _interopRequireDefault(require("../../Config"));
|
|
5
|
+
var _Deprecator = _interopRequireDefault(require("../../Deprecator/Deprecator"));
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
const httpsRequest = require('./httpsRequest');
|
|
6
8
|
var Parse = require('parse/node').Parse;
|
|
7
|
-
var logger = require('../../logger').default;
|
|
8
|
-
|
|
9
9
|
// Returns a promise that fulfills iff this user id is valid.
|
|
10
|
-
function validateAuthData(authData, params) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (response && response.response && response.response.user_id == authData.id) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is invalid for this user.');
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
logger.error('Vk Auth', 'Vk appIds or appSecret is incorrect.');
|
|
21
|
-
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'
|
|
22
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
|
+
}
|
|
23
27
|
}
|
|
24
|
-
|
|
25
28
|
function vkOAuth2Request(params) {
|
|
26
29
|
return new Promise(function (resolve) {
|
|
27
30
|
if (!params || !params.appIds || !params.appIds.length || !params.appSecret || !params.appSecret.length) {
|
|
28
|
-
logger.error('Vk Auth', 'Vk auth is not configured. Missing appIds or appSecret.');
|
|
29
31
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is not configured. Missing appIds or appSecret.');
|
|
30
32
|
}
|
|
33
|
+
if (!params.apiVersion) {
|
|
34
|
+
params.apiVersion = '5.124';
|
|
35
|
+
}
|
|
31
36
|
resolve();
|
|
32
37
|
}).then(function () {
|
|
33
|
-
return request(
|
|
38
|
+
return request('oauth.vk.com', 'access_token?client_id=' + params.appIds + '&client_secret=' + params.appSecret + '&v=' + params.apiVersion + '&grant_type=client_credentials');
|
|
34
39
|
});
|
|
35
40
|
}
|
|
36
41
|
|
|
@@ -41,28 +46,10 @@ function validateAppId() {
|
|
|
41
46
|
|
|
42
47
|
// A promisey wrapper for api requests
|
|
43
48
|
function request(host, path) {
|
|
44
|
-
return
|
|
45
|
-
https.get("https://" + host + "/" + path, function (res) {
|
|
46
|
-
var data = '';
|
|
47
|
-
res.on('data', function (chunk) {
|
|
48
|
-
data += chunk;
|
|
49
|
-
});
|
|
50
|
-
res.on('end', function () {
|
|
51
|
-
try {
|
|
52
|
-
data = JSON.parse(data);
|
|
53
|
-
} catch (e) {
|
|
54
|
-
return reject(e);
|
|
55
|
-
}
|
|
56
|
-
resolve(data);
|
|
57
|
-
});
|
|
58
|
-
}).on('error', function () {
|
|
59
|
-
reject('Failed to validate this access token with Vk.');
|
|
60
|
-
});
|
|
61
|
-
});
|
|
49
|
+
return httpsRequest.get('https://' + host + '/' + path);
|
|
62
50
|
}
|
|
63
|
-
|
|
64
51
|
module.exports = {
|
|
65
52
|
validateAppId: validateAppId,
|
|
66
53
|
validateAuthData: validateAuthData
|
|
67
54
|
};
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRvciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImh0dHBzUmVxdWVzdCIsIlBhcnNlIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwicGFyYW1zIiwiY29uZmlnIiwiQ29uZmlnIiwiZ2V0IiwiYXBwbGljYXRpb25JZCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsInZrQ29uZmlnIiwiYXV0aCIsInZrb250YWt0ZSIsImVuYWJsZUluc2VjdXJlQXV0aCIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwiRXJyb3IiLCJyZXNwb25zZSIsInZrT0F1dGgyUmVxdWVzdCIsImFjY2Vzc190b2tlbiIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2a1VzZXIiLCJyZXF1ZXN0IiwiYXBpVmVyc2lvbiIsImxlbmd0aCIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhcHBJZHMiLCJhcHBTZWNyZXQiLCJ0aGVuIiwidmFsaWRhdGVBcHBJZCIsImhvc3QiLCJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3Zrb250YWt0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgdmtvbnRha3RlIEFQSS5cblxuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vLi4vQ29uZmlnJztcbmltcG9ydCBEZXByZWNhdG9yIGZyb20gJy4uLy4uL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIHBhcmFtcykge1xuICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICBEZXByZWNhdG9yLmxvZ1J1bnRpbWVEZXByZWNhdGlvbih7IHVzYWdlOiAndmtvbnRha3RlIGFkYXB0ZXInIH0pO1xuXG4gIGNvbnN0IHZrQ29uZmlnID0gY29uZmlnLmF1dGgudmtvbnRha3RlO1xuICBpZiAoIXZrQ29uZmlnPy5lbmFibGVJbnNlY3VyZUF1dGggfHwgIWNvbmZpZy5lbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcignVmsgb25seSB3b3JrcyB3aXRoIGVuYWJsZUluc2VjdXJlQXV0aDogdHJ1ZScpO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB2a09BdXRoMlJlcXVlc3QocGFyYW1zKTtcbiAgaWYgKCFyZXNwb25zZT8uYWNjZXNzX3Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdWayBhcHBJZHMgb3IgYXBwU2VjcmV0IGlzIGluY29ycmVjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IHZrVXNlciA9IGF3YWl0IHJlcXVlc3QoXG4gICAgJ2FwaS52ay5jb20nLFxuICAgIGBtZXRob2QvdXNlcnMuZ2V0P2FjY2Vzc190b2tlbj0ke2F1dGhEYXRhLmFjY2Vzc190b2tlbn0mdj0ke3BhcmFtcy5hcGlWZXJzaW9ufWBcbiAgKTtcblxuICBpZiAoIXZrVXNlcj8ucmVzcG9uc2U/Lmxlbmd0aCB8fCB2a1VzZXIucmVzcG9uc2VbMF0uaWQgIT09IGF1dGhEYXRhLmlkKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdWayBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2a09BdXRoMlJlcXVlc3QocGFyYW1zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIGlmIChcbiAgICAgICFwYXJhbXMgfHxcbiAgICAgICFwYXJhbXMuYXBwSWRzIHx8XG4gICAgICAhcGFyYW1zLmFwcElkcy5sZW5ndGggfHxcbiAgICAgICFwYXJhbXMuYXBwU2VjcmV0IHx8XG4gICAgICAhcGFyYW1zLmFwcFNlY3JldC5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgJ1ZrIGF1dGggaXMgbm90IGNvbmZpZ3VyZWQuIE1pc3NpbmcgYXBwSWRzIG9yIGFwcFNlY3JldC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXBhcmFtcy5hcGlWZXJzaW9uKSB7XG4gICAgICBwYXJhbXMuYXBpVmVyc2lvbiA9ICc1LjEyNCc7XG4gICAgfVxuICAgIHJlc29sdmUoKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoXG4gICAgICAnb2F1dGgudmsuY29tJyxcbiAgICAgICdhY2Nlc3NfdG9rZW4/Y2xpZW50X2lkPScgK1xuICAgICAgICBwYXJhbXMuYXBwSWRzICtcbiAgICAgICAgJyZjbGllbnRfc2VjcmV0PScgK1xuICAgICAgICBwYXJhbXMuYXBwU2VjcmV0ICtcbiAgICAgICAgJyZ2PScgK1xuICAgICAgICBwYXJhbXMuYXBpVmVyc2lvbiArXG4gICAgICAgICcmZ3JhbnRfdHlwZT1jbGllbnRfY3JlZGVudGlhbHMnXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vLyBBIHByb21pc2V5IHdyYXBwZXIgZm9yIGFwaSByZXF1ZXN0c1xuZnVuY3Rpb24gcmVxdWVzdChob3N0LCBwYXRoKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KCdodHRwczovLycgKyBob3N0ICsgJy8nICsgcGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFFWjtBQUlBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFxRCxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUhyRCxNQUFNRyxZQUFZLEdBQUdMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QyxJQUFJTSxLQUFLLEdBQUdOLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ00sS0FBSztBQUl2QztBQUNBLGVBQWVDLGdCQUFnQkEsQ0FBQ0MsUUFBUSxFQUFFQyxNQUFNLEVBQUU7RUFDaEQsTUFBTUMsTUFBTSxHQUFHQyxlQUFNLENBQUNDLEdBQUcsQ0FBQ04sS0FBSyxDQUFDTyxhQUFhLENBQUM7RUFDOUNDLG1CQUFVLENBQUNDLHFCQUFxQixDQUFDO0lBQUVDLEtBQUssRUFBRTtFQUFvQixDQUFDLENBQUM7RUFFaEUsTUFBTUMsUUFBUSxHQUFHUCxNQUFNLENBQUNRLElBQUksQ0FBQ0MsU0FBUztFQUN0QyxJQUFJLENBQUNGLFFBQVEsRUFBRUcsa0JBQWtCLElBQUksQ0FBQ1YsTUFBTSxDQUFDVywwQkFBMEIsRUFBRTtJQUN2RSxNQUFNLElBQUlmLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQztFQUN0RTtFQUVBLE1BQU1DLFFBQVEsR0FBRyxNQUFNQyxlQUFlLENBQUNmLE1BQU0sQ0FBQztFQUM5QyxJQUFJLENBQUNjLFFBQVEsRUFBRUUsWUFBWSxFQUFFO0lBQzNCLE1BQU0sSUFBSW5CLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ2hCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQUUsc0NBQXNDLENBQUM7RUFDN0Y7RUFFQSxNQUFNQyxNQUFNLEdBQUcsTUFBTUMsT0FBTyxDQUMxQixZQUFZLEVBQ1osaUNBQWlDcEIsUUFBUSxDQUFDaUIsWUFBWSxNQUFNaEIsTUFBTSxDQUFDb0IsVUFBVSxFQUMvRSxDQUFDO0VBRUQsSUFBSSxDQUFDRixNQUFNLEVBQUVKLFFBQVEsRUFBRU8sTUFBTSxJQUFJSCxNQUFNLENBQUNKLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsRUFBRSxLQUFLdkIsUUFBUSxDQUFDdUIsRUFBRSxFQUFFO0lBQ3RFLE1BQU0sSUFBSXpCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ2hCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQUUsbUNBQW1DLENBQUM7RUFDMUY7QUFDRjtBQUVBLFNBQVNGLGVBQWVBLENBQUNmLE1BQU0sRUFBRTtFQUMvQixPQUFPLElBQUl1QixPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO0lBQ3BDLElBQ0UsQ0FBQ3hCLE1BQU0sSUFDUCxDQUFDQSxNQUFNLENBQUN5QixNQUFNLElBQ2QsQ0FBQ3pCLE1BQU0sQ0FBQ3lCLE1BQU0sQ0FBQ0osTUFBTSxJQUNyQixDQUFDckIsTUFBTSxDQUFDMEIsU0FBUyxJQUNqQixDQUFDMUIsTUFBTSxDQUFDMEIsU0FBUyxDQUFDTCxNQUFNLEVBQ3hCO01BQ0EsTUFBTSxJQUFJeEIsS0FBSyxDQUFDZ0IsS0FBSyxDQUNuQmhCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQzVCLHlEQUNGLENBQUM7SUFDSDtJQUNBLElBQUksQ0FBQ2pCLE1BQU0sQ0FBQ29CLFVBQVUsRUFBRTtNQUN0QnBCLE1BQU0sQ0FBQ29CLFVBQVUsR0FBRyxPQUFPO0lBQzdCO0lBQ0FJLE9BQU8sQ0FBQyxDQUFDO0VBQ1gsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQyxZQUFZO0lBQ2xCLE9BQU9SLE9BQU8sQ0FDWixjQUFjLEVBQ2QseUJBQXlCLEdBQ3ZCbkIsTUFBTSxDQUFDeUIsTUFBTSxHQUNiLGlCQUFpQixHQUNqQnpCLE1BQU0sQ0FBQzBCLFNBQVMsR0FDaEIsS0FBSyxHQUNMMUIsTUFBTSxDQUFDb0IsVUFBVSxHQUNqQixnQ0FDSixDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxTQUFTUSxhQUFhQSxDQUFBLEVBQUc7RUFDdkIsT0FBT0wsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUMxQjs7QUFFQTtBQUNBLFNBQVNMLE9BQU9BLENBQUNVLElBQUksRUFBRUMsSUFBSSxFQUFFO0VBQzNCLE9BQU9sQyxZQUFZLENBQUNPLEdBQUcsQ0FBQyxVQUFVLEdBQUcwQixJQUFJLEdBQUcsR0FBRyxHQUFHQyxJQUFJLENBQUM7QUFDekQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZkosYUFBYSxFQUFFQSxhQUFhO0VBQzVCOUIsZ0JBQWdCLEVBQUVBO0FBQ3BCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|