rettiwt-api 2.7.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +73 -5
- package/.tool-versions +1 -0
- package/README.md +87 -20
- package/dist/Rettiwt.js +0 -1
- package/dist/Rettiwt.js.map +1 -1
- package/dist/cli.js +2 -4
- package/dist/cli.js.map +1 -1
- package/dist/collections/Extractors.d.ts +37 -0
- package/dist/collections/Extractors.js +67 -0
- package/dist/collections/Extractors.js.map +1 -0
- package/dist/collections/Groups.d.ts +19 -0
- package/dist/collections/Groups.js +55 -0
- package/dist/collections/Groups.js.map +1 -0
- package/dist/collections/Requests.d.ts +12 -0
- package/dist/collections/Requests.js +46 -0
- package/dist/collections/Requests.js.map +1 -0
- package/dist/commands/Auth.d.ts +6 -0
- package/dist/commands/Auth.js +26 -8
- package/dist/commands/Auth.js.map +1 -1
- package/dist/commands/Tweet.js +237 -82
- package/dist/commands/Tweet.js.map +1 -1
- package/dist/commands/User.js +197 -36
- package/dist/commands/User.js.map +1 -1
- package/dist/enums/Api.d.ts +30 -0
- package/dist/enums/Api.js +32 -1
- package/dist/enums/Api.js.map +1 -1
- package/dist/enums/Data.d.ts +9 -0
- package/dist/enums/Data.js +14 -0
- package/dist/enums/Data.js.map +1 -0
- package/dist/enums/Http.d.ts +1 -1
- package/dist/enums/Http.js +1 -1
- package/dist/enums/Logging.d.ts +6 -5
- package/dist/enums/Logging.js +6 -5
- package/dist/enums/Logging.js.map +1 -1
- package/dist/enums/Resource.d.ts +33 -0
- package/dist/enums/Resource.js +42 -0
- package/dist/enums/Resource.js.map +1 -0
- package/dist/helper/CliUtils.d.ts +1 -1
- package/dist/helper/CliUtils.js.map +1 -1
- package/dist/index.d.ts +11 -9
- package/dist/index.js +11 -14
- package/dist/index.js.map +1 -1
- package/dist/models/args/FetchArgs.d.ts +129 -0
- package/dist/models/args/FetchArgs.js +263 -0
- package/dist/models/args/FetchArgs.js.map +1 -0
- package/dist/models/args/PostArgs.d.ts +116 -0
- package/dist/models/args/PostArgs.js +232 -0
- package/dist/models/args/PostArgs.js.map +1 -0
- package/dist/models/data/CursoredData.d.ts +11 -11
- package/dist/models/data/CursoredData.js +21 -16
- package/dist/models/data/CursoredData.js.map +1 -1
- package/dist/models/data/List.d.ts +8 -10
- package/dist/models/data/List.js +2 -4
- package/dist/models/data/List.js.map +1 -1
- package/dist/models/data/Tweet.d.ts +44 -29
- package/dist/models/data/Tweet.js +74 -15
- package/dist/models/data/Tweet.js.map +1 -1
- package/dist/models/data/User.d.ts +38 -20
- package/dist/models/data/User.js +71 -7
- package/dist/models/data/User.js.map +1 -1
- package/dist/models/errors/ApiError.d.ts +1 -3
- package/dist/models/errors/ApiError.js +1 -4
- package/dist/models/errors/ApiError.js.map +1 -1
- package/dist/models/errors/DataValidationError.d.ts +30 -0
- package/dist/models/errors/DataValidationError.js +34 -0
- package/dist/models/errors/DataValidationError.js.map +1 -0
- package/dist/models/errors/HttpError.d.ts +1 -3
- package/dist/models/errors/HttpError.js +1 -4
- package/dist/models/errors/HttpError.js.map +1 -1
- package/dist/models/errors/TimeoutError.d.ts +2 -4
- package/dist/models/errors/TimeoutError.js +2 -5
- package/dist/models/errors/TimeoutError.js.map +1 -1
- package/dist/services/internal/ErrorService.d.ts +45 -35
- package/dist/services/internal/ErrorService.js +70 -68
- package/dist/services/internal/ErrorService.js.map +1 -1
- package/dist/services/internal/LogService.d.ts +7 -5
- package/dist/services/internal/LogService.js +28 -9
- package/dist/services/internal/LogService.js.map +1 -1
- package/dist/services/public/AuthService.d.ts +24 -20
- package/dist/services/public/AuthService.js +38 -36
- package/dist/services/public/AuthService.js.map +1 -1
- package/dist/services/public/FetcherService.d.ts +89 -0
- package/dist/services/public/FetcherService.js +240 -0
- package/dist/services/public/FetcherService.js.map +1 -0
- package/dist/services/public/TweetService.d.ts +213 -94
- package/dist/services/public/TweetService.js +409 -209
- package/dist/services/public/TweetService.js.map +1 -1
- package/dist/services/public/UserService.d.ts +185 -52
- package/dist/services/public/UserService.js +338 -103
- package/dist/services/public/UserService.js.map +1 -1
- package/dist/types/ReturnTypes.d.ts +21 -0
- package/dist/types/ReturnTypes.js +3 -0
- package/dist/types/ReturnTypes.js.map +1 -0
- package/package.json +4 -2
- package/src/Rettiwt.ts +0 -3
- package/src/cli.ts +2 -4
- package/src/collections/Extractors.ts +84 -0
- package/src/collections/Groups.ts +54 -0
- package/src/collections/Requests.ts +52 -0
- package/src/commands/Auth.ts +19 -7
- package/src/commands/Tweet.ts +179 -91
- package/src/commands/User.ts +118 -25
- package/src/enums/Api.ts +31 -0
- package/src/enums/Data.ts +9 -0
- package/src/enums/Http.ts +1 -1
- package/src/enums/Logging.ts +6 -5
- package/src/enums/Resource.ts +40 -0
- package/src/helper/CliUtils.ts +1 -1
- package/src/index.ts +41 -14
- package/src/models/args/FetchArgs.ts +296 -0
- package/src/models/args/PostArgs.ts +263 -0
- package/src/models/data/CursoredData.ts +23 -15
- package/src/models/data/List.ts +12 -15
- package/src/models/data/Tweet.ts +108 -39
- package/src/models/data/User.ts +99 -30
- package/src/models/errors/ApiError.ts +1 -4
- package/src/models/errors/DataValidationError.ts +44 -0
- package/src/models/errors/HttpError.ts +1 -4
- package/src/models/errors/TimeoutError.ts +2 -5
- package/src/services/internal/ErrorService.ts +76 -75
- package/src/services/internal/LogService.ts +20 -10
- package/src/services/public/AuthService.ts +39 -38
- package/src/services/public/FetcherService.ts +209 -0
- package/src/services/public/TweetService.ts +384 -179
- package/src/services/public/UserService.ts +319 -86
- package/src/types/RettiwtConfig.ts +0 -1
- package/src/types/ReturnTypes.ts +24 -0
- package/dist/models/args/TweetArgs.d.ts +0 -44
- package/dist/models/args/TweetArgs.js +0 -82
- package/dist/models/args/TweetArgs.js.map +0 -1
- package/dist/models/data/Media.d.ts +0 -14
- package/dist/models/data/Media.js +0 -19
- package/dist/models/data/Media.js.map +0 -1
- package/dist/services/internal/FetcherService.d.ts +0 -106
- package/dist/services/internal/FetcherService.js +0 -365
- package/dist/services/internal/FetcherService.js.map +0 -1
- package/src/models/args/TweetArgs.ts +0 -98
- package/src/models/data/Media.ts +0 -19
- package/src/services/internal/FetcherService.ts +0 -365
|
@@ -52,19 +52,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
52
52
|
};
|
|
53
53
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
54
|
exports.AuthService = void 0;
|
|
55
|
-
// PACKAGES
|
|
56
55
|
var rettiwt_auth_1 = require("rettiwt-auth");
|
|
57
|
-
|
|
58
|
-
var FetcherService_1 = require("../internal/FetcherService");
|
|
56
|
+
var FetcherService_1 = require("./FetcherService");
|
|
59
57
|
/**
|
|
60
|
-
*
|
|
58
|
+
* The services that handles authentication.
|
|
61
59
|
*
|
|
62
60
|
* @public
|
|
63
61
|
*/
|
|
64
62
|
var AuthService = /** @class */ (function (_super) {
|
|
65
63
|
__extends(AuthService, _super);
|
|
66
64
|
/**
|
|
67
|
-
* @param config - The config object for configuring the Rettiwt instance.
|
|
65
|
+
* @param config - The config object for configuring the `Rettiwt` instance.
|
|
68
66
|
*
|
|
69
67
|
* @internal
|
|
70
68
|
*/
|
|
@@ -72,12 +70,9 @@ var AuthService = /** @class */ (function (_super) {
|
|
|
72
70
|
return _super.call(this, config) || this;
|
|
73
71
|
}
|
|
74
72
|
/**
|
|
75
|
-
* Login to twitter
|
|
73
|
+
* Login to twitter as guest.
|
|
76
74
|
*
|
|
77
|
-
* @
|
|
78
|
-
* @param userName - The username associated with the Twitter account.
|
|
79
|
-
* @param password - The password to the Twitter account.
|
|
80
|
-
* @returns The API_KEY for the Twitter account.
|
|
75
|
+
* @returns A new guest key.
|
|
81
76
|
*
|
|
82
77
|
* @example
|
|
83
78
|
* ```
|
|
@@ -86,10 +81,10 @@ var AuthService = /** @class */ (function (_super) {
|
|
|
86
81
|
* // Creating a new Rettiwt instance
|
|
87
82
|
* const rettiwt = new Rettiwt();
|
|
88
83
|
*
|
|
89
|
-
* // Logging in an getting
|
|
90
|
-
* rettiwt.auth.
|
|
91
|
-
* .then(
|
|
92
|
-
* // Use the
|
|
84
|
+
* // Logging in an getting a new guest key
|
|
85
|
+
* rettiwt.auth.guest()
|
|
86
|
+
* .then(guestKey => {
|
|
87
|
+
* // Use the guest key
|
|
93
88
|
* ...
|
|
94
89
|
* })
|
|
95
90
|
* .catch(err => {
|
|
@@ -97,30 +92,28 @@ var AuthService = /** @class */ (function (_super) {
|
|
|
97
92
|
* });
|
|
98
93
|
* ```
|
|
99
94
|
*/
|
|
100
|
-
AuthService.prototype.
|
|
95
|
+
AuthService.prototype.guest = function () {
|
|
101
96
|
var _a;
|
|
102
97
|
return __awaiter(this, void 0, void 0, function () {
|
|
103
|
-
var
|
|
98
|
+
var guestKey;
|
|
104
99
|
return __generator(this, function (_b) {
|
|
105
100
|
switch (_b.label) {
|
|
106
|
-
case 0: return [4 /*yield*/, new rettiwt_auth_1.Auth(
|
|
107
|
-
email: email,
|
|
108
|
-
userName: userName,
|
|
109
|
-
password: password,
|
|
110
|
-
})];
|
|
101
|
+
case 0: return [4 /*yield*/, new rettiwt_auth_1.Auth().getGuestCredential()];
|
|
111
102
|
case 1:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
apiKey = Buffer.from(apiKey).toString('base64');
|
|
115
|
-
return [2 /*return*/, apiKey];
|
|
103
|
+
guestKey = (_a = (_b.sent()).guestToken) !== null && _a !== void 0 ? _a : '';
|
|
104
|
+
return [2 /*return*/, guestKey];
|
|
116
105
|
}
|
|
117
106
|
});
|
|
118
107
|
});
|
|
119
108
|
};
|
|
120
109
|
/**
|
|
121
|
-
* Login to twitter
|
|
110
|
+
* Login to twitter using account credentials.
|
|
122
111
|
*
|
|
123
|
-
* @
|
|
112
|
+
* @param email - The email id associated with the Twitter account.
|
|
113
|
+
* @param userName - The username associated with the Twitter account.
|
|
114
|
+
* @param password - The password to the Twitter account.
|
|
115
|
+
*
|
|
116
|
+
* @returns The `API_KEY` for the Twitter account.
|
|
124
117
|
*
|
|
125
118
|
* @example
|
|
126
119
|
* ```
|
|
@@ -129,27 +122,36 @@ var AuthService = /** @class */ (function (_super) {
|
|
|
129
122
|
* // Creating a new Rettiwt instance
|
|
130
123
|
* const rettiwt = new Rettiwt();
|
|
131
124
|
*
|
|
132
|
-
* // Logging in an getting
|
|
133
|
-
* rettiwt.auth.
|
|
134
|
-
* .then(
|
|
135
|
-
* // Use the
|
|
125
|
+
* // Logging in an getting the API_KEY
|
|
126
|
+
* rettiwt.auth.login("email@domain.com", "username", "password")
|
|
127
|
+
* .then(apiKey => {
|
|
128
|
+
* // Use the API_KEY
|
|
136
129
|
* ...
|
|
137
130
|
* })
|
|
138
131
|
* .catch(err => {
|
|
139
132
|
* console.log(err);
|
|
140
133
|
* });
|
|
141
134
|
* ```
|
|
135
|
+
*
|
|
136
|
+
* @remarks
|
|
137
|
+
* Interchanging `email` and `userName` works too.
|
|
142
138
|
*/
|
|
143
|
-
AuthService.prototype.
|
|
139
|
+
AuthService.prototype.login = function (email, userName, password) {
|
|
144
140
|
var _a;
|
|
145
141
|
return __awaiter(this, void 0, void 0, function () {
|
|
146
|
-
var
|
|
142
|
+
var apiKey;
|
|
147
143
|
return __generator(this, function (_b) {
|
|
148
144
|
switch (_b.label) {
|
|
149
|
-
case 0: return [4 /*yield*/, new rettiwt_auth_1.Auth().
|
|
145
|
+
case 0: return [4 /*yield*/, new rettiwt_auth_1.Auth({ proxyUrl: this.authProxyUrl }).getUserCredential({
|
|
146
|
+
email: email,
|
|
147
|
+
userName: userName,
|
|
148
|
+
password: password,
|
|
149
|
+
})];
|
|
150
150
|
case 1:
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
apiKey = (_a = (_b.sent()).toHeader().cookie) !== null && _a !== void 0 ? _a : '';
|
|
152
|
+
// Converting the credentials to base64 string
|
|
153
|
+
apiKey = Buffer.from(apiKey).toString('base64');
|
|
154
|
+
return [2 /*return*/, apiKey];
|
|
153
155
|
}
|
|
154
156
|
});
|
|
155
157
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../src/services/public/AuthService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../src/services/public/AuthService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAoC;AAIpC,mDAAkD;AAElD;;;;GAIG;AACH;IAAiC,+BAAc;IAC9C;;;;OAIG;IACH,qBAAmB,MAAuB;eACzC,kBAAM,MAAM,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACU,2BAAK,GAAlB;;;;;;4BAE2B,qBAAM,IAAI,mBAAI,EAAE,CAAC,kBAAkB,EAAE,EAAA;;wBAAzD,QAAQ,GAAW,MAAA,CAAC,SAAqC,CAAC,CAAC,UAAU,mCAAI,EAAE;wBAEjF,sBAAO,QAAQ,EAAC;;;;KAChB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACU,2BAAK,GAAlB,UAAmB,KAAa,EAAE,QAAgB,EAAE,QAAgB;;;;;;4BAIjE,qBAAM,IAAI,mBAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,iBAAiB,CAAC;4BACjE,KAAK,EAAE,KAAK;4BACZ,QAAQ,EAAE,QAAQ;4BAClB,QAAQ,EAAE,QAAQ;yBAClB,CAAC,EAAA;;wBANA,MAAM,GACT,MAAC,CACA,SAIE,CACF,CAAC,QAAQ,EAAE,CAAC,MAAiB,mCAAI,EAAE;wBAErC,8CAA8C;wBAC9C,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAEhD,sBAAO,MAAM,EAAC;;;;KACd;IACF,kBAAC;AAAD,CAAC,AAtFD,CAAiC,+BAAc,GAsF9C;AAtFY,kCAAW"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { EResourceType } from '../../enums/Resource';
|
|
2
|
+
import { FetchArgs } from '../../models/args/FetchArgs';
|
|
3
|
+
import { PostArgs } from '../../models/args/PostArgs';
|
|
4
|
+
import { IRettiwtConfig } from '../../types/RettiwtConfig';
|
|
5
|
+
/**
|
|
6
|
+
* The base service that handles all HTTP requests.
|
|
7
|
+
*
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export declare class FetcherService {
|
|
11
|
+
/** The api key to use for authenticating against Twitter API as user. */
|
|
12
|
+
private readonly apiKey?;
|
|
13
|
+
/** The service used to handle HTTP and API errors */
|
|
14
|
+
private readonly errorHandler;
|
|
15
|
+
/** The guest key to use for authenticating against Twitter API as guest. */
|
|
16
|
+
private readonly guestKey?;
|
|
17
|
+
/** Whether the instance is authenticated or not. */
|
|
18
|
+
private readonly isAuthenticated;
|
|
19
|
+
/** The URL To the proxy server to use for all others. */
|
|
20
|
+
private readonly proxyUrl?;
|
|
21
|
+
/** The max wait time for a response. */
|
|
22
|
+
private readonly timeout;
|
|
23
|
+
/** The URL to the proxy server to use only for authentication. */
|
|
24
|
+
protected readonly authProxyUrl?: URL;
|
|
25
|
+
/**
|
|
26
|
+
* @param config - The config object for configuring the Rettiwt instance.
|
|
27
|
+
*/
|
|
28
|
+
constructor(config?: IRettiwtConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Checks the authorization status based on the requested resource.
|
|
31
|
+
*
|
|
32
|
+
* @param resource - The requested resource.
|
|
33
|
+
*
|
|
34
|
+
* @throws An error if not authorized to access the requested resource.
|
|
35
|
+
*/
|
|
36
|
+
private checkAuthorization;
|
|
37
|
+
/**
|
|
38
|
+
* Returns the AuthCredentials based on the type of key present.
|
|
39
|
+
*
|
|
40
|
+
* @returns The generated AuthCredential
|
|
41
|
+
*/
|
|
42
|
+
private getCredential;
|
|
43
|
+
/**
|
|
44
|
+
* Gets the https agent based on whether a proxy is used or not.
|
|
45
|
+
*
|
|
46
|
+
* @param proxyUrl - Optional URL with proxy configuration to use for requests to Twitter API.
|
|
47
|
+
*
|
|
48
|
+
* @returns The https agent to use.
|
|
49
|
+
*/
|
|
50
|
+
private getHttpsAgent;
|
|
51
|
+
/**
|
|
52
|
+
* Validates the given args against the given resource.
|
|
53
|
+
*
|
|
54
|
+
* @param resource - The resource against which validation is to be done.
|
|
55
|
+
* @param args - The args to be validated.
|
|
56
|
+
*
|
|
57
|
+
* @returns The validated args.
|
|
58
|
+
*/
|
|
59
|
+
private validateArgs;
|
|
60
|
+
/**
|
|
61
|
+
* Makes an HTTP request according to the given parameters.
|
|
62
|
+
*
|
|
63
|
+
* @param resource - The requested resource.
|
|
64
|
+
* @param config - The request configuration.
|
|
65
|
+
*
|
|
66
|
+
* @typeParam T - The type of the returned response data.
|
|
67
|
+
*
|
|
68
|
+
* @returns The raw data response received.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* Fetching the raw details of a user with username 'user1'
|
|
72
|
+
* ```
|
|
73
|
+
* import { FetcherService, EResourceType } from 'rettiwt-api';
|
|
74
|
+
*
|
|
75
|
+
* // Creating a new FetcherService instance using the given 'API_KEY'
|
|
76
|
+
* const fetcher = new FetcherService({ apiKey: API_KEY });
|
|
77
|
+
*
|
|
78
|
+
* // Fetching the details of the User with username 'user1'
|
|
79
|
+
* fetcher.request(EResourceType.USER_DETAILS_BY_USERNAME, { id: 'user1' })
|
|
80
|
+
* .then(res => {
|
|
81
|
+
* console.log(res);
|
|
82
|
+
* })
|
|
83
|
+
* .catch(err => {
|
|
84
|
+
* console.log(err);
|
|
85
|
+
* })
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
request<T>(resource: EResourceType, args: FetchArgs | PostArgs): Promise<T>;
|
|
89
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.FetcherService = void 0;
|
|
54
|
+
var https_1 = __importDefault(require("https"));
|
|
55
|
+
var axios_1 = __importDefault(require("axios"));
|
|
56
|
+
var https_proxy_agent_1 = require("https-proxy-agent");
|
|
57
|
+
var rettiwt_auth_1 = require("rettiwt-auth");
|
|
58
|
+
var Groups_1 = require("../../collections/Groups");
|
|
59
|
+
var Requests_1 = require("../../collections/Requests");
|
|
60
|
+
var Api_1 = require("../../enums/Api");
|
|
61
|
+
var Logging_1 = require("../../enums/Logging");
|
|
62
|
+
var FetchArgs_1 = require("../../models/args/FetchArgs");
|
|
63
|
+
var PostArgs_1 = require("../../models/args/PostArgs");
|
|
64
|
+
var ErrorService_1 = require("../internal/ErrorService");
|
|
65
|
+
var LogService_1 = require("../internal/LogService");
|
|
66
|
+
/**
|
|
67
|
+
* The base service that handles all HTTP requests.
|
|
68
|
+
*
|
|
69
|
+
* @public
|
|
70
|
+
*/
|
|
71
|
+
var FetcherService = /** @class */ (function () {
|
|
72
|
+
/**
|
|
73
|
+
* @param config - The config object for configuring the Rettiwt instance.
|
|
74
|
+
*/
|
|
75
|
+
function FetcherService(config) {
|
|
76
|
+
var _a, _b, _c, _d;
|
|
77
|
+
LogService_1.LogService.enabled = (_a = config === null || config === void 0 ? void 0 : config.logging) !== null && _a !== void 0 ? _a : false;
|
|
78
|
+
this.apiKey = config === null || config === void 0 ? void 0 : config.apiKey;
|
|
79
|
+
this.guestKey = config === null || config === void 0 ? void 0 : config.guestKey;
|
|
80
|
+
this.isAuthenticated = (config === null || config === void 0 ? void 0 : config.apiKey) ? true : false;
|
|
81
|
+
this.authProxyUrl = (_b = config === null || config === void 0 ? void 0 : config.authProxyUrl) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config.proxyUrl;
|
|
82
|
+
this.proxyUrl = config === null || config === void 0 ? void 0 : config.proxyUrl;
|
|
83
|
+
this.timeout = (_c = config === null || config === void 0 ? void 0 : config.timeout) !== null && _c !== void 0 ? _c : 0;
|
|
84
|
+
this.errorHandler = (_d = config === null || config === void 0 ? void 0 : config.errorHandler) !== null && _d !== void 0 ? _d : new ErrorService_1.ErrorService();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Checks the authorization status based on the requested resource.
|
|
88
|
+
*
|
|
89
|
+
* @param resource - The requested resource.
|
|
90
|
+
*
|
|
91
|
+
* @throws An error if not authorized to access the requested resource.
|
|
92
|
+
*/
|
|
93
|
+
FetcherService.prototype.checkAuthorization = function (resource) {
|
|
94
|
+
// Logging
|
|
95
|
+
LogService_1.LogService.log(Logging_1.ELogActions.AUTHORIZATION, { authenticated: this.isAuthenticated });
|
|
96
|
+
// Checking authorization status
|
|
97
|
+
if (!Groups_1.allowGuestAuthentication.includes(resource) && this.isAuthenticated == false) {
|
|
98
|
+
throw new Error(Api_1.EApiErrors.RESOURCE_NOT_ALLOWED);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Returns the AuthCredentials based on the type of key present.
|
|
103
|
+
*
|
|
104
|
+
* @returns The generated AuthCredential
|
|
105
|
+
*/
|
|
106
|
+
FetcherService.prototype.getCredential = function () {
|
|
107
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
108
|
+
var cookies;
|
|
109
|
+
return __generator(this, function (_a) {
|
|
110
|
+
switch (_a.label) {
|
|
111
|
+
case 0:
|
|
112
|
+
if (!this.apiKey) return [3 /*break*/, 1];
|
|
113
|
+
// Logging
|
|
114
|
+
LogService_1.LogService.log(Logging_1.ELogActions.GET, { target: 'USER_CREDENTIAL' });
|
|
115
|
+
cookies = Buffer.from(this.apiKey, 'base64').toString('ascii').split(';');
|
|
116
|
+
return [2 /*return*/, new rettiwt_auth_1.AuthCredential(cookies)];
|
|
117
|
+
case 1:
|
|
118
|
+
if (!this.guestKey) return [3 /*break*/, 2];
|
|
119
|
+
// Logging
|
|
120
|
+
LogService_1.LogService.log(Logging_1.ELogActions.GET, { target: 'GUEST_CREDENTIAL' });
|
|
121
|
+
return [2 /*return*/, new rettiwt_auth_1.AuthCredential(undefined, this.guestKey)];
|
|
122
|
+
case 2:
|
|
123
|
+
// Logging
|
|
124
|
+
LogService_1.LogService.log(Logging_1.ELogActions.GET, { target: 'NEW_GUEST_CREDENTIAL' });
|
|
125
|
+
return [4 /*yield*/, new rettiwt_auth_1.Auth({ proxyUrl: this.authProxyUrl }).getGuestCredential()];
|
|
126
|
+
case 3: return [2 /*return*/, _a.sent()];
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Gets the https agent based on whether a proxy is used or not.
|
|
133
|
+
*
|
|
134
|
+
* @param proxyUrl - Optional URL with proxy configuration to use for requests to Twitter API.
|
|
135
|
+
*
|
|
136
|
+
* @returns The https agent to use.
|
|
137
|
+
*/
|
|
138
|
+
FetcherService.prototype.getHttpsAgent = function (proxyUrl) {
|
|
139
|
+
if (proxyUrl) {
|
|
140
|
+
// Logging
|
|
141
|
+
LogService_1.LogService.log(Logging_1.ELogActions.GET, { target: 'HTTPS_PROXY_AGENT' });
|
|
142
|
+
return new https_proxy_agent_1.HttpsProxyAgent(proxyUrl);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Logging
|
|
146
|
+
LogService_1.LogService.log(Logging_1.ELogActions.GET, { target: 'HTTPS_AGENT' });
|
|
147
|
+
return new https_1.default.Agent();
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Validates the given args against the given resource.
|
|
152
|
+
*
|
|
153
|
+
* @param resource - The resource against which validation is to be done.
|
|
154
|
+
* @param args - The args to be validated.
|
|
155
|
+
*
|
|
156
|
+
* @returns The validated args.
|
|
157
|
+
*/
|
|
158
|
+
FetcherService.prototype.validateArgs = function (resource, args) {
|
|
159
|
+
if (Groups_1.fetchResources.includes(resource)) {
|
|
160
|
+
// Logging
|
|
161
|
+
LogService_1.LogService.log(Logging_1.ELogActions.VALIDATE, { target: 'FETCH_ARGS' });
|
|
162
|
+
return new FetchArgs_1.FetchArgs(resource, args);
|
|
163
|
+
}
|
|
164
|
+
else if (Groups_1.postResources.includes(resource)) {
|
|
165
|
+
// Logging
|
|
166
|
+
LogService_1.LogService.log(Logging_1.ELogActions.VALIDATE, { target: 'POST_ARGS' });
|
|
167
|
+
return new PostArgs_1.PostArgs(resource, args);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Makes an HTTP request according to the given parameters.
|
|
172
|
+
*
|
|
173
|
+
* @param resource - The requested resource.
|
|
174
|
+
* @param config - The request configuration.
|
|
175
|
+
*
|
|
176
|
+
* @typeParam T - The type of the returned response data.
|
|
177
|
+
*
|
|
178
|
+
* @returns The raw data response received.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* Fetching the raw details of a user with username 'user1'
|
|
182
|
+
* ```
|
|
183
|
+
* import { FetcherService, EResourceType } from 'rettiwt-api';
|
|
184
|
+
*
|
|
185
|
+
* // Creating a new FetcherService instance using the given 'API_KEY'
|
|
186
|
+
* const fetcher = new FetcherService({ apiKey: API_KEY });
|
|
187
|
+
*
|
|
188
|
+
* // Fetching the details of the User with username 'user1'
|
|
189
|
+
* fetcher.request(EResourceType.USER_DETAILS_BY_USERNAME, { id: 'user1' })
|
|
190
|
+
* .then(res => {
|
|
191
|
+
* console.log(res);
|
|
192
|
+
* })
|
|
193
|
+
* .catch(err => {
|
|
194
|
+
* console.log(err);
|
|
195
|
+
* })
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
FetcherService.prototype.request = function (resource, args) {
|
|
199
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
200
|
+
var httpsAgent, cred, config, error_1;
|
|
201
|
+
return __generator(this, function (_a) {
|
|
202
|
+
switch (_a.label) {
|
|
203
|
+
case 0:
|
|
204
|
+
// Logging
|
|
205
|
+
LogService_1.LogService.log(Logging_1.ELogActions.REQUEST, { resource: resource, args: args });
|
|
206
|
+
// Checking authorization for the requested resource
|
|
207
|
+
this.checkAuthorization(resource);
|
|
208
|
+
// Validating args
|
|
209
|
+
args = this.validateArgs(resource, args);
|
|
210
|
+
httpsAgent = this.getHttpsAgent(this.proxyUrl);
|
|
211
|
+
return [4 /*yield*/, this.getCredential()];
|
|
212
|
+
case 1:
|
|
213
|
+
cred = _a.sent();
|
|
214
|
+
config = Requests_1.requests[resource](args);
|
|
215
|
+
// Setting additional request parameters
|
|
216
|
+
config.headers = __assign(__assign({}, config.headers), cred.toHeader());
|
|
217
|
+
config.httpAgent = httpsAgent;
|
|
218
|
+
config.httpsAgent = httpsAgent;
|
|
219
|
+
config.timeout = this.timeout;
|
|
220
|
+
_a.label = 2;
|
|
221
|
+
case 2:
|
|
222
|
+
_a.trys.push([2, 4, , 5]);
|
|
223
|
+
return [4 /*yield*/, (0, axios_1.default)(config)];
|
|
224
|
+
case 3:
|
|
225
|
+
// Returning the reponse body
|
|
226
|
+
return [2 /*return*/, (_a.sent()).data];
|
|
227
|
+
case 4:
|
|
228
|
+
error_1 = _a.sent();
|
|
229
|
+
// If error, delegate handling to error handler
|
|
230
|
+
this.errorHandler.handle(error_1);
|
|
231
|
+
throw error_1;
|
|
232
|
+
case 5: return [2 /*return*/];
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
return FetcherService;
|
|
238
|
+
}());
|
|
239
|
+
exports.FetcherService = FetcherService;
|
|
240
|
+
//# sourceMappingURL=FetcherService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetcherService.js","sourceRoot":"","sources":["../../../src/services/public/FetcherService.ts"],"names":[],"mappings":"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"}
|