rettiwt-api 1.0.6 → 1.0.7
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/dist/{queries → graphql/queries}/RootQuery.d.ts +0 -0
- package/dist/{queries → graphql/queries}/RootQuery.js +4 -3
- package/dist/graphql/queries/RootQuery.js.map +1 -0
- package/dist/{resolvers → graphql/resolvers}/AccountResolver.d.ts +1 -1
- package/dist/{resolvers → graphql/resolvers}/AccountResolver.js +0 -0
- package/dist/graphql/resolvers/AccountResolver.js.map +1 -0
- package/dist/{resolvers → graphql/resolvers}/ResolverBase.d.ts +1 -1
- package/dist/{resolvers → graphql/resolvers}/ResolverBase.js +0 -0
- package/dist/graphql/resolvers/ResolverBase.js.map +1 -0
- package/dist/{resolvers → graphql/resolvers}/TweetResolver.d.ts +10 -9
- package/dist/{resolvers → graphql/resolvers}/TweetResolver.js +51 -35
- package/dist/graphql/resolvers/TweetResolver.js.map +1 -0
- package/dist/{resolvers → graphql/resolvers}/UserResolver.d.ts +5 -4
- package/dist/{resolvers → graphql/resolvers}/UserResolver.js +51 -35
- package/dist/graphql/resolvers/UserResolver.js.map +1 -0
- package/dist/{models/graphql → graphql/types}/Global.d.ts +0 -0
- package/dist/{models/graphql → graphql/types}/Global.js +0 -0
- package/dist/graphql/types/Global.js.map +1 -0
- package/dist/graphql/types/TweetTypes.d.ts +4 -0
- package/dist/{models/graphql → graphql/types}/TweetTypes.js +5 -7
- package/dist/graphql/types/TweetTypes.js.map +1 -0
- package/dist/graphql/types/UserTypes.d.ts +3 -0
- package/dist/{models/graphql → graphql/types}/UserTypes.js +9 -11
- package/dist/graphql/types/UserTypes.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/services/AuthService.js +2 -2
- package/dist/services/AuthService.js.map +1 -1
- package/dist/services/CacheService.d.ts +3 -3
- package/dist/services/CacheService.js +22 -75
- package/dist/services/CacheService.js.map +1 -1
- package/dist/services/FetcherService.d.ts +3 -2
- package/dist/services/FetcherService.js +11 -29
- package/dist/services/FetcherService.js.map +1 -1
- package/dist/services/data/TweetService.d.ts +6 -6
- package/dist/services/data/TweetService.js +44 -27
- package/dist/services/data/TweetService.js.map +1 -1
- package/dist/services/data/UserAccountService.d.ts +3 -3
- package/dist/services/data/UserAccountService.js +22 -8
- package/dist/services/data/UserAccountService.js.map +1 -1
- package/dist/services/data/UserService.d.ts +42 -0
- package/dist/services/data/UserService.js +255 -0
- package/dist/services/data/UserService.js.map +1 -0
- package/dist/services/helper/Extractors.js +1 -1
- package/dist/services/helper/Extractors.js.map +1 -1
- package/dist/services/helper/Parser.d.ts +1 -1
- package/dist/services/helper/Parser.js +4 -3
- package/dist/services/helper/Parser.js.map +1 -1
- package/dist/services/helper/Urls.d.ts +2 -2
- package/dist/services/helper/Urls.js +19 -3
- package/dist/services/helper/Urls.js.map +1 -1
- package/dist/services/helper/deserializers/Tweets.d.ts +12 -0
- package/dist/services/helper/deserializers/Tweets.js +92 -0
- package/dist/services/helper/deserializers/Tweets.js.map +1 -0
- package/dist/services/{accounting/Flows.d.ts → helper/deserializers/User.d.ts} +0 -0
- package/dist/services/helper/deserializers/User.js +2 -0
- package/dist/services/helper/deserializers/User.js.map +1 -0
- package/dist/services/helper/deserializers/Users.d.ts +7 -0
- package/dist/services/helper/deserializers/Users.js +27 -0
- package/dist/services/helper/deserializers/Users.js.map +1 -0
- package/dist/services/helper/extractors/TweetExtractors.d.ts +0 -0
- package/dist/services/helper/extractors/TweetExtractors.js +2 -0
- package/dist/services/helper/extractors/TweetExtractors.js.map +1 -0
- package/dist/services/helper/extractors/Tweets.d.ts +32 -0
- package/dist/services/helper/extractors/Tweets.js +264 -0
- package/dist/services/helper/extractors/Tweets.js.map +1 -0
- package/dist/services/helper/extractors/UserExtractors.d.ts +45 -0
- package/dist/services/helper/extractors/UserExtractors.js +176 -0
- package/dist/services/helper/extractors/UserExtractors.js.map +1 -0
- package/dist/services/helper/extractors/Users.d.ts +20 -0
- package/dist/services/helper/extractors/Users.js +151 -0
- package/dist/services/helper/extractors/Users.js.map +1 -0
- package/dist/services/helper/urls/Authentication.d.ts +4 -0
- package/dist/services/helper/urls/Authentication.js +11 -0
- package/dist/services/helper/urls/Authentication.js.map +1 -0
- package/dist/services/helper/urls/Tweets.d.ts +32 -0
- package/dist/services/helper/urls/Tweets.js +51 -0
- package/dist/services/helper/urls/Tweets.js.map +1 -0
- package/dist/services/helper/urls/Urls.d.ts +4 -0
- package/dist/services/helper/urls/Urls.js +11 -0
- package/dist/services/helper/urls/Urls.js.map +1 -0
- package/dist/services/helper/urls/Users.d.ts +31 -0
- package/dist/services/helper/urls/Users.js +66 -0
- package/dist/services/helper/urls/Users.js.map +1 -0
- package/dist/types/{graphql/Errors.d.ts → Errors.d.ts} +0 -0
- package/dist/types/{graphql/Errors.js → Errors.js} +0 -0
- package/dist/types/Errors.js.map +1 -0
- package/dist/types/Resolvers.d.ts +9 -0
- package/dist/types/Resolvers.js +3 -0
- package/dist/types/Resolvers.js.map +1 -0
- package/dist/types/Tweet.d.ts +1 -0
- package/dist/types/Tweet.js.map +1 -1
- package/dist/types/User.d.ts +19 -0
- package/dist/types/User.js +4 -0
- package/dist/types/User.js.map +1 -0
- package/dist/types/data/Errors.d.ts +26 -0
- package/dist/types/data/Errors.js +36 -0
- package/dist/types/data/Errors.js.map +1 -0
- package/dist/types/data/Service.d.ts +29 -0
- package/dist/types/data/Service.js +19 -0
- package/dist/types/data/Service.js.map +1 -0
- package/dist/types/data/Tweet.d.ts +41 -0
- package/dist/types/data/Tweet.js +5 -0
- package/dist/types/data/Tweet.js.map +1 -0
- package/dist/types/data/User.d.ts +19 -0
- package/dist/types/data/User.js +4 -0
- package/dist/types/data/User.js.map +1 -0
- package/dist/types/raw/http/Error.d.ts +34 -0
- package/dist/types/raw/{user/Users.js → http/Error.js} +1 -1
- package/dist/types/raw/http/Error.js.map +1 -0
- package/dist/types/raw/http/Response.d.ts +34 -0
- package/dist/types/raw/http/Response.js +3 -0
- package/dist/types/raw/http/Response.js.map +1 -0
- package/package.json +1 -1
- package/src/{queries → graphql/queries}/RootQuery.ts +5 -4
- package/src/{resolvers → graphql/resolvers}/AccountResolver.ts +21 -21
- package/src/{resolvers → graphql/resolvers}/ResolverBase.ts +1 -1
- package/src/{resolvers → graphql/resolvers}/TweetResolver.ts +43 -30
- package/src/{resolvers → graphql/resolvers}/UserResolver.ts +41 -27
- package/src/{models/graphql → graphql/types}/Global.ts +0 -0
- package/src/{models/graphql → graphql/types}/TweetTypes.ts +9 -11
- package/src/{models/graphql → graphql/types}/UserTypes.ts +13 -15
- package/src/index.ts +2 -2
- package/src/server.ts +3 -3
- package/src/services/AuthService.ts +1 -1
- package/src/services/CacheService.ts +6 -8
- package/src/services/FetcherService.ts +11 -14
- package/src/services/data/TweetService.ts +53 -37
- package/src/services/data/UserService.ts +187 -0
- package/src/services/helper/Parser.ts +6 -4
- package/src/services/helper/{Deserializers.ts → deserializers/Tweets.ts} +3 -28
- package/src/services/helper/deserializers/Users.ts +26 -0
- package/src/services/helper/extractors/Tweets.ts +252 -0
- package/src/services/helper/extractors/Users.ts +137 -0
- package/src/services/helper/urls/Authentication.ts +6 -0
- package/src/services/helper/urls/Tweets.ts +46 -0
- package/src/services/helper/urls/Users.ts +62 -0
- package/src/types/Resolvers.ts +9 -0
- package/src/types/data/Errors.ts +28 -0
- package/src/types/{Service.ts → data/Service.ts} +4 -5
- package/src/types/{Tweet.ts → data/Tweet.ts} +1 -0
- package/src/types/{UserAccount.ts → data/User.ts} +0 -0
- package/tsconfig.json +2 -2
- package/dist/models/graphql/Global.js.map +0 -1
- package/dist/models/graphql/TweetTypes.d.ts +0 -6
- package/dist/models/graphql/TweetTypes.js.map +0 -1
- package/dist/models/graphql/UserTypes.d.ts +0 -3
- package/dist/models/graphql/UserTypes.js.map +0 -1
- package/dist/queries/RootQuery.js.map +0 -1
- package/dist/resolvers/AccountResolver.js.map +0 -1
- package/dist/resolvers/ResolverBase.js.map +0 -1
- package/dist/resolvers/TweetResolver.js.map +0 -1
- package/dist/resolvers/UserResolver.js.map +0 -1
- package/dist/services/AccountsService.d.ts +0 -17
- package/dist/services/AccountsService.js +0 -171
- package/dist/services/AccountsService.js.map +0 -1
- package/dist/services/accounting/AccountsService.d.ts +0 -20
- package/dist/services/accounting/AccountsService.js +0 -147
- package/dist/services/accounting/AccountsService.js.map +0 -1
- package/dist/services/accounting/Flows.js +0 -2
- package/dist/services/accounting/Flows.js.map +0 -1
- package/dist/services/accounting/LoginFlows.d.ts +0 -20
- package/dist/services/accounting/LoginFlows.js +0 -70
- package/dist/services/accounting/LoginFlows.js.map +0 -1
- package/dist/test/Test.js +0 -2
- package/dist/test/Test.js.map +0 -1
- package/dist/types/graphql/Errors.js.map +0 -1
- package/dist/types/raw/user/Users.d.ts +0 -120
- package/dist/types/raw/user/Users.js.map +0 -1
- package/src/services/data/UserAccountService.ts +0 -176
- package/src/services/helper/Extractors.ts +0 -455
- package/src/services/helper/Urls.ts +0 -109
- package/src/types/graphql/Errors.ts +0 -16
- package/src/types/raw/user/Tweets.ts +0 -2847
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
-
function step(op) {
|
|
31
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
-
while (_) try {
|
|
33
|
-
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;
|
|
34
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
-
switch (op[0]) {
|
|
36
|
-
case 0: case 1: t = op; break;
|
|
37
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
-
default:
|
|
41
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
-
if (t[2]) _.ops.pop();
|
|
46
|
-
_.trys.pop(); continue;
|
|
47
|
-
}
|
|
48
|
-
op = body.call(thisArg, _);
|
|
49
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
exports.__esModule = true;
|
|
54
|
-
exports.AccountsService = void 0;
|
|
55
|
-
// CUSTOM LIBS
|
|
56
|
-
// SERVICES
|
|
57
|
-
var AuthService_1 = require("../AuthService");
|
|
58
|
-
var FetcherService_1 = require("../FetcherService");
|
|
59
|
-
var HTTP_1 = require("../../types/HTTP");
|
|
60
|
-
// HELPERS
|
|
61
|
-
var LoginFlows_1 = require("./LoginFlows");
|
|
62
|
-
/**
|
|
63
|
-
* The service that handles all operations related to accounting
|
|
64
|
-
*/
|
|
65
|
-
var AccountsService = /** @class */ (function (_super) {
|
|
66
|
-
__extends(AccountsService, _super);
|
|
67
|
-
function AccountsService() {
|
|
68
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
69
|
-
}
|
|
70
|
-
// MEMBER METHODS
|
|
71
|
-
/**
|
|
72
|
-
* @returns The response from Twitter after execution of the given flow
|
|
73
|
-
* @param flow The flow to be executed against Twitter API
|
|
74
|
-
* @param guestCredentials The guest credentials to use for making HTTP request
|
|
75
|
-
*/
|
|
76
|
-
AccountsService.prototype.executeFlow = function (flow, guestCredentials) {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
78
|
-
var res, data;
|
|
79
|
-
return __generator(this, function (_a) {
|
|
80
|
-
switch (_a.label) {
|
|
81
|
-
case 0: return [4 /*yield*/, this.request(flow.url, HTTP_1.HttpMethods.POST, flow.body, HTTP_1.AuthType.GUEST, guestCredentials)["catch"](function (err) {
|
|
82
|
-
// Getting the list of errors
|
|
83
|
-
var errors = err.response.data.errors;
|
|
84
|
-
throw new Error(errors[0].message);
|
|
85
|
-
})];
|
|
86
|
-
case 1:
|
|
87
|
-
res = _a.sent();
|
|
88
|
-
data = res.data;
|
|
89
|
-
// Returning the response body as well as data of the flow
|
|
90
|
-
return [2 /*return*/, {
|
|
91
|
-
headers: res.headers,
|
|
92
|
-
nextFlowName: LoginFlows_1.LoginFlows[data['subtasks'][0]['subtask_id']],
|
|
93
|
-
nextFlowToken: data['flow_token']
|
|
94
|
-
}];
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
/**
|
|
100
|
-
* @summary Logins into the given account and stores the cookies and store logged in credentials to database
|
|
101
|
-
* @returns The logged in account's cookies and other credentials
|
|
102
|
-
* @param cred The login credentials of the Twitter account to be logged into
|
|
103
|
-
*/
|
|
104
|
-
AccountsService.prototype.login = function (cred) {
|
|
105
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
106
|
-
var currentFlowName, currentFlow, guestCredentials, res;
|
|
107
|
-
return __generator(this, function (_a) {
|
|
108
|
-
switch (_a.label) {
|
|
109
|
-
case 0:
|
|
110
|
-
currentFlowName = LoginFlows_1.LoginFlows.Login;
|
|
111
|
-
currentFlow = (0, LoginFlows_1.generateLoginFlow)(cred, '', LoginFlows_1.LoginFlows.Login);
|
|
112
|
-
return [4 /*yield*/, AuthService_1.AuthService.getInstance()];
|
|
113
|
-
case 1: return [4 /*yield*/, (_a.sent()).getGuestCredentials(true)];
|
|
114
|
-
case 2:
|
|
115
|
-
guestCredentials = _a.sent();
|
|
116
|
-
_a.label = 3;
|
|
117
|
-
case 3:
|
|
118
|
-
if (!true) return [3 /*break*/, 9];
|
|
119
|
-
return [4 /*yield*/, this.executeFlow(currentFlow, guestCredentials)];
|
|
120
|
-
case 4:
|
|
121
|
-
res = _a.sent();
|
|
122
|
-
if (!(currentFlowName == LoginFlows_1.LoginFlows.AccountDuplicationCheck)) return [3 /*break*/, 7];
|
|
123
|
-
return [4 /*yield*/, AuthService_1.AuthService.getInstance()];
|
|
124
|
-
case 5:
|
|
125
|
-
// Storing credentials in database
|
|
126
|
-
return [4 /*yield*/, (_a.sent()).storeCredentials(res.headers)];
|
|
127
|
-
case 6:
|
|
128
|
-
// Storing credentials in database
|
|
129
|
-
_a.sent();
|
|
130
|
-
// Returning the headers
|
|
131
|
-
return [2 /*return*/, res.headers];
|
|
132
|
-
case 7:
|
|
133
|
-
// Changing flow name
|
|
134
|
-
currentFlowName = LoginFlows_1.LoginFlows[res.nextFlowName];
|
|
135
|
-
// Changing current flow data
|
|
136
|
-
currentFlow = (0, LoginFlows_1.generateLoginFlow)(cred, res.nextFlowToken, currentFlowName);
|
|
137
|
-
_a.label = 8;
|
|
138
|
-
case 8: return [3 /*break*/, 3];
|
|
139
|
-
case 9: return [2 /*return*/];
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
};
|
|
144
|
-
return AccountsService;
|
|
145
|
-
}(FetcherService_1.FetcherService));
|
|
146
|
-
exports.AccountsService = AccountsService;
|
|
147
|
-
//# sourceMappingURL=AccountsService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsService.js","sourceRoot":"","sources":["../../../src/services/accounting/AccountsService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,cAAc;AAEd,WAAW;AACX,8CAA6C;AAC7C,oDAAmD;AAInD,yCAAyD;AAEzD,UAAU;AACV,2CAA6D;AAE7D;;GAEG;AACH;IAAqC,mCAAc;IAAnD;;IAqEA,CAAC;IApEG,iBAAiB;IAEjB;;;;OAIG;IACW,qCAAW,GAAzB,UAA0B,IAAe,EAAE,gBAAkC;;;;;4BAE/D,qBAAM,IAAI,CAAC,OAAO,CAAM,IAAI,CAAC,GAAG,EAAE,kBAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAErG,OAAK,CAAA,CAAC,UAAA,GAAG;4BACN,6BAA6B;4BAC7B,IAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;4BAExC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBACvC,CAAC,CAAC,EAAA;;wBAPF,GAAG,GAAG,SAOJ;wBAGF,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;wBAEpB,0DAA0D;wBAC1D,sBAAO;gCACH,OAAO,EAAE,GAAG,CAAC,OAAO;gCACpB,YAAY,EAAE,uBAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAe,CAAC;gCACzE,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;6BACpC,EAAC;;;;KACL;IAED;;;;OAIG;IACG,+BAAK,GAAX,UAAY,IAAsB;;;;;;wBAC1B,eAAe,GAAe,uBAAU,CAAC,KAAK,CAAC;wBAG/C,WAAW,GAAG,IAAA,8BAAiB,EAAC,IAAI,EAAE,EAAE,EAAE,uBAAU,CAAC,KAAK,CAAC,CAAC;wBAGlC,qBAAM,yBAAW,CAAC,WAAW,EAAE,EAAA;4BAAtC,qBAAM,CAAC,SAA+B,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAA;;wBAApF,gBAAgB,GAAG,SAAiE;;;6BAGjF,IAAI;wBACG,qBAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAA;;wBAA3D,GAAG,GAAG,SAAqD;6BAO3D,CAAA,eAAe,IAAI,uBAAU,CAAC,uBAAuB,CAAA,EAArD,wBAAqD;wBAE9C,qBAAM,yBAAW,CAAC,WAAW,EAAE,EAAA;;oBADtC,kCAAkC;oBAClC,qBAAM,CAAC,SAA+B,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAA;;wBADrE,kCAAkC;wBAClC,SAAqE,CAAC;wBAEtE,wBAAwB;wBACxB,sBAAO,GAAG,CAAC,OAAO,EAAC;;wBAGnB,qBAAqB;wBACrB,eAAe,GAAG,uBAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBAE/C,6BAA6B;wBAC7B,WAAW,GAAG,IAAA,8BAAiB,EAAC,IAAI,EAAE,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;;;;;;;KAGrF;IACL,sBAAC;AAAD,CAAC,AArED,CAAqC,+BAAc,GAqElD;AArEY,0CAAe"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Flows.js","sourceRoot":"","sources":["../../../src/services/accounting/Flows.ts"],"names":[],"mappings":""}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { LoginCredentials, LoginFlow } from '../../types/Authentication';
|
|
2
|
-
/**
|
|
3
|
-
* @summary Stores the different flows involved in login process
|
|
4
|
-
*/
|
|
5
|
-
export declare enum LoginFlows {
|
|
6
|
-
Login = "Login",
|
|
7
|
-
LoginJsInstrumentationSubtask = "LoginJsInstrumentationSubtask",
|
|
8
|
-
LoginEnterUserIdentifierSSO = "LoginEnterUserIdentifierSSO",
|
|
9
|
-
LoginEnterAlternateIdentifierSubtask = "LoginEnterAlternateIdentifierSubtask",
|
|
10
|
-
LoginEnterPassword = "LoginEnterPassword",
|
|
11
|
-
AccountDuplicationCheck = "AccountDuplicationCheck",
|
|
12
|
-
LoginSuccessSubtask = "LoginSuccessSubtask"
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* @returns The login flow body content for the required login flow
|
|
16
|
-
* @param cred The login credentials of the account to be logged into
|
|
17
|
-
* @param flowToken The flow token from the previous flow
|
|
18
|
-
* @param flowName The required flow name
|
|
19
|
-
*/
|
|
20
|
-
export declare function generateLoginFlow(cred: LoginCredentials, flowToken: string, flowName: LoginFlows): LoginFlow;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// CUSTOM LIBS
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.generateLoginFlow = exports.LoginFlows = void 0;
|
|
5
|
-
/**
|
|
6
|
-
* @summary Stores the different flows involved in login process
|
|
7
|
-
*/
|
|
8
|
-
var LoginFlows;
|
|
9
|
-
(function (LoginFlows) {
|
|
10
|
-
LoginFlows["Login"] = "Login";
|
|
11
|
-
LoginFlows["LoginJsInstrumentationSubtask"] = "LoginJsInstrumentationSubtask";
|
|
12
|
-
LoginFlows["LoginEnterUserIdentifierSSO"] = "LoginEnterUserIdentifierSSO";
|
|
13
|
-
LoginFlows["LoginEnterAlternateIdentifierSubtask"] = "LoginEnterAlternateIdentifierSubtask";
|
|
14
|
-
LoginFlows["LoginEnterPassword"] = "LoginEnterPassword";
|
|
15
|
-
LoginFlows["AccountDuplicationCheck"] = "AccountDuplicationCheck";
|
|
16
|
-
LoginFlows["LoginSuccessSubtask"] = "LoginSuccessSubtask";
|
|
17
|
-
})(LoginFlows = exports.LoginFlows || (exports.LoginFlows = {}));
|
|
18
|
-
;
|
|
19
|
-
/**
|
|
20
|
-
* @summary Store the body content of the different HTTP request for each flow in login process
|
|
21
|
-
*/
|
|
22
|
-
var LoginFlowsContent = {
|
|
23
|
-
"Login": {
|
|
24
|
-
"url": 'https://twitter.com/i/api/1.1/onboarding/task.json?flow_name=login',
|
|
25
|
-
"body": '{"input_flow_data":{"flow_context":{"debug_overrides":{},"start_location":{"location":"splash_screen"}}},"subtask_versions":{"contacts_live_sync_permission_prompt":0,"email_verification":1,"topics_selector":1,"wait_spinner":1,"cta":4}}'
|
|
26
|
-
},
|
|
27
|
-
"LoginJsInstrumentationSubtask": {
|
|
28
|
-
"url": 'https://twitter.com/i/api/1.1/onboarding/task.json',
|
|
29
|
-
"body": '{"flow_token":"<flow_token>","subtask_inputs":[{"subtask_id":"LoginJsInstrumentationSubtask","js_instrumentation":{"response":"{\\"rf\\":{\\"f3d0013d2401a9e86a63dac052aeec19524813e572f0b446241b550bc1e653e8\\":-146,\\"abef77ded0018c5ef4a2146465e76811c8ee7a377ff84c2181e58ac7e5bb8b97\\":-17,\\"a6d95f40b2cc05ac2baa2ce64ce976d3558cd9ca79a3e1ae797d3bda62847470\\":112,\\"ae30e4310433b0ae4e670acd918eebd0056daee600fa9db57082e8ace2c2fb1c\\":14},\\"s\\":\\"AR1nIiYWWtrhpM2n5cu-WDC77syV8L_zqLIHxmAePc0nhZAnrh3WdNig2MMFoIk-k1TjxWijXgVtjbLaYB-gTFA9KigwnaVsno0o6deCU1b_uH3XxKCRwaE-KN3c65PXRKNJP08YB1nQENeFXgM9MsrywIO0C60zGlPWj8XlB9sAICGoJ26OJ7IgvMZP_5VgIJZwMDpJx3gN4xhI44n32TiLxerU59vDbwltkf0rgsIL34PODWWDOt9m07jrFaPFkt40T_G0sWJhuy9xfEWetgOmMLnQCpn4Ut6kl_W9Yi6wNDH1vtnRMbgeKgaJJRv2cTIvOa9DBvYV63cp_3G9WQAAAYBLmqMB\\"}","link":"next_link"}}]}'
|
|
30
|
-
},
|
|
31
|
-
"LoginEnterUserIdentifierSSO": {
|
|
32
|
-
"url": 'https://twitter.com/i/api/1.1/onboarding/task.json',
|
|
33
|
-
"body": '{"flow_token":"<flow_token>","subtask_inputs":[{"subtask_id":"LoginEnterUserIdentifierSSO","settings_list":{"setting_responses":[{"key":"user_identifier","response_data":{"text_data":{"result":"<email>"}}}],"link":"next_link"}}]}'
|
|
34
|
-
},
|
|
35
|
-
"LoginEnterAlternateIdentifierSubtask": {
|
|
36
|
-
"url": 'https://twitter.com/i/api/1.1/onboarding/task.json',
|
|
37
|
-
"body": '{"flow_token":"<flow_token>","subtask_inputs":[{"subtask_id":"LoginEnterAlternateIdentifierSubtask","enter_text":{"text":"<user_name>","link":"next_link"}}]}'
|
|
38
|
-
},
|
|
39
|
-
"LoginEnterPassword": {
|
|
40
|
-
"url": 'https://twitter.com/i/api/1.1/onboarding/task.json',
|
|
41
|
-
"body": '{"flow_token":"<flow_token>","subtask_inputs":[{"subtask_id":"LoginEnterPassword","enter_password":{"password":"<password>","link":"next_link"}}]}'
|
|
42
|
-
},
|
|
43
|
-
"AccountDuplicationCheck": {
|
|
44
|
-
"url": 'https://twitter.com/i/api/1.1/onboarding/task.json',
|
|
45
|
-
"body": '{"flow_token":"<flow_token>","subtask_inputs":[{"subtask_id":"AccountDuplicationCheck","check_logged_in_account":{"link":"AccountDuplicationCheck_false"}}]}'
|
|
46
|
-
},
|
|
47
|
-
"LoginSuccessSubtask": {
|
|
48
|
-
"url": '',
|
|
49
|
-
"body": ''
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* @returns The login flow body content for the required login flow
|
|
54
|
-
* @param cred The login credentials of the account to be logged into
|
|
55
|
-
* @param flowToken The flow token from the previous flow
|
|
56
|
-
* @param flowName The required flow name
|
|
57
|
-
*/
|
|
58
|
-
function generateLoginFlow(cred, flowToken, flowName) {
|
|
59
|
-
// Getting the requested flow
|
|
60
|
-
var flow = LoginFlowsContent[flowName];
|
|
61
|
-
// Replacing the provided values into the flow body
|
|
62
|
-
flow['body'] = flow['body'].replace("<flow_token>", flowToken);
|
|
63
|
-
flow['body'] = flow['body'].replace("<email>", cred.email);
|
|
64
|
-
flow['body'] = flow['body'].replace("<user_name>", cred.userName);
|
|
65
|
-
flow['body'] = flow['body'].replace("<password>", cred.password);
|
|
66
|
-
flow['body'] = flow['body'];
|
|
67
|
-
return flow;
|
|
68
|
-
}
|
|
69
|
-
exports.generateLoginFlow = generateLoginFlow;
|
|
70
|
-
//# sourceMappingURL=LoginFlows.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoginFlows.js","sourceRoot":"","sources":["../../../src/services/accounting/LoginFlows.ts"],"names":[],"mappings":";AAAA,cAAc;;;AAKd;;GAEG;AACH,IAAY,UAQX;AARD,WAAY,UAAU;IAClB,6BAAe,CAAA;IACf,6EAA+D,CAAA;IAC/D,yEAA2D,CAAA;IAC3D,2FAA6E,CAAA;IAC7E,uDAAyC,CAAA;IACzC,iEAAmD,CAAA;IACnD,yDAA2C,CAAA;AAC/C,CAAC,EARW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAQrB;AAAA,CAAC;AAEF;;GAEG;AACH,IAAM,iBAAiB,GAAG;IACtB,OAAO,EAAE;QACL,KAAK,EAAE,oEAAoE;QAC3E,MAAM,EAAE,6OAA6O;KACxP;IACD,+BAA+B,EAAE;QAC7B,KAAK,EAAE,oDAAoD;QAC3D,MAAM,EAAE,g0BAAg0B;KAC30B;IACD,6BAA6B,EAAE;QAC3B,KAAK,EAAE,oDAAoD;QAC3D,MAAM,EAAE,uOAAuO;KAClP;IACD,sCAAsC,EAAE;QACpC,KAAK,EAAE,oDAAoD;QAC3D,MAAM,EAAE,+JAA+J;KAC1K;IACD,oBAAoB,EAAE;QAClB,KAAK,EAAE,oDAAoD;QAC3D,MAAM,EAAE,oJAAoJ;KAC/J;IACD,yBAAyB,EAAE;QACvB,KAAK,EAAE,oDAAoD;QAC3D,MAAM,EAAE,8JAA8J;KACzK;IACD,qBAAqB,EAAE;QACnB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACb;CACJ,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,IAAsB,EAAE,SAAiB,EAAE,QAAoB;IAC7F,6BAA6B;IAC7B,IAAI,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEvC,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEjE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAE5B,OAAO,IAAI,CAAC;AAChB,CAAC;AAbD,8CAaC"}
|
package/dist/test/Test.js
DELETED
package/dist/test/Test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Test.js","sourceRoot":"","sources":["../../src/test/Test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["../../../src/types/graphql/Errors.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IACxB,wHAAoG,CAAA;IACpG,gFAA4D,CAAA;AAChE,CAAC,EAHW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAG3B;AAAA,CAAC;AAEF;;GAEG;AACH,IAAY,UAIX;AAJD,WAAY,UAAU;IAClB,8EAAgE,CAAA;IAChE,uEAAyD,CAAA;IACzD,2EAA6D,CAAA;AACjE,CAAC,EAJW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAIrB;AAAA,CAAC"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
export default interface Root {
|
|
2
|
-
data: Data;
|
|
3
|
-
}
|
|
4
|
-
export interface Data {
|
|
5
|
-
users: User[];
|
|
6
|
-
}
|
|
7
|
-
export interface User {
|
|
8
|
-
result: Result;
|
|
9
|
-
}
|
|
10
|
-
export interface Result {
|
|
11
|
-
__typename: string;
|
|
12
|
-
id: string;
|
|
13
|
-
rest_id: string;
|
|
14
|
-
affiliates_highlighted_label: AffiliatesHighlightedLabel;
|
|
15
|
-
has_graduated_access: boolean;
|
|
16
|
-
has_nft_avatar: boolean;
|
|
17
|
-
is_blue_verified: boolean;
|
|
18
|
-
legacy: Legacy;
|
|
19
|
-
smart_blocked_by: boolean;
|
|
20
|
-
smart_blocking: boolean;
|
|
21
|
-
super_follow_eligible: boolean;
|
|
22
|
-
super_followed_by: boolean;
|
|
23
|
-
super_following: boolean;
|
|
24
|
-
verified_phone_status: boolean;
|
|
25
|
-
legacy_extended_profile: LegacyExtendedProfile;
|
|
26
|
-
is_profile_translatable: boolean;
|
|
27
|
-
}
|
|
28
|
-
export interface AffiliatesHighlightedLabel {
|
|
29
|
-
}
|
|
30
|
-
export interface Legacy {
|
|
31
|
-
blocked_by: boolean;
|
|
32
|
-
blocking: boolean;
|
|
33
|
-
can_dm: boolean;
|
|
34
|
-
can_media_tag: boolean;
|
|
35
|
-
created_at: string;
|
|
36
|
-
default_profile: boolean;
|
|
37
|
-
default_profile_image: boolean;
|
|
38
|
-
description: string;
|
|
39
|
-
entities: Entities;
|
|
40
|
-
fast_followers_count: number;
|
|
41
|
-
favourites_count: number;
|
|
42
|
-
follow_request_sent: boolean;
|
|
43
|
-
followed_by: boolean;
|
|
44
|
-
followers_count: number;
|
|
45
|
-
following: boolean;
|
|
46
|
-
friends_count: number;
|
|
47
|
-
has_custom_timelines: boolean;
|
|
48
|
-
is_translator: boolean;
|
|
49
|
-
listed_count: number;
|
|
50
|
-
location: string;
|
|
51
|
-
media_count: number;
|
|
52
|
-
muting: boolean;
|
|
53
|
-
name: string;
|
|
54
|
-
normal_followers_count: number;
|
|
55
|
-
notifications: boolean;
|
|
56
|
-
pinned_tweet_ids_str: string[];
|
|
57
|
-
possibly_sensitive: boolean;
|
|
58
|
-
profile_banner_extensions: ProfileBannerExtensions;
|
|
59
|
-
profile_banner_url: string;
|
|
60
|
-
profile_image_extensions: ProfileImageExtensions;
|
|
61
|
-
profile_image_url_https: string;
|
|
62
|
-
profile_interstitial_type: string;
|
|
63
|
-
protected: boolean;
|
|
64
|
-
screen_name: string;
|
|
65
|
-
statuses_count: number;
|
|
66
|
-
translator_type: string;
|
|
67
|
-
verified: boolean;
|
|
68
|
-
want_retweets: boolean;
|
|
69
|
-
withheld_in_countries: any[];
|
|
70
|
-
}
|
|
71
|
-
export interface Entities {
|
|
72
|
-
description: Description;
|
|
73
|
-
}
|
|
74
|
-
export interface Description {
|
|
75
|
-
urls: any[];
|
|
76
|
-
}
|
|
77
|
-
export interface ProfileBannerExtensions {
|
|
78
|
-
mediaColor: MediaColor;
|
|
79
|
-
}
|
|
80
|
-
export interface MediaColor {
|
|
81
|
-
r: R;
|
|
82
|
-
}
|
|
83
|
-
export interface R {
|
|
84
|
-
ok: Ok;
|
|
85
|
-
}
|
|
86
|
-
export interface Ok {
|
|
87
|
-
palette: Palette[];
|
|
88
|
-
}
|
|
89
|
-
export interface Palette {
|
|
90
|
-
percentage: number;
|
|
91
|
-
rgb: Rgb;
|
|
92
|
-
}
|
|
93
|
-
export interface Rgb {
|
|
94
|
-
blue: number;
|
|
95
|
-
green: number;
|
|
96
|
-
red: number;
|
|
97
|
-
}
|
|
98
|
-
export interface ProfileImageExtensions {
|
|
99
|
-
mediaColor: MediaColor2;
|
|
100
|
-
}
|
|
101
|
-
export interface MediaColor2 {
|
|
102
|
-
r: R2;
|
|
103
|
-
}
|
|
104
|
-
export interface R2 {
|
|
105
|
-
ok: Ok2;
|
|
106
|
-
}
|
|
107
|
-
export interface Ok2 {
|
|
108
|
-
palette: Palette2[];
|
|
109
|
-
}
|
|
110
|
-
export interface Palette2 {
|
|
111
|
-
percentage: number;
|
|
112
|
-
rgb: Rgb2;
|
|
113
|
-
}
|
|
114
|
-
export interface Rgb2 {
|
|
115
|
-
blue: number;
|
|
116
|
-
green: number;
|
|
117
|
-
red: number;
|
|
118
|
-
}
|
|
119
|
-
export interface LegacyExtendedProfile {
|
|
120
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Users.js","sourceRoot":"","sources":["../../../../src/types/raw/user/Users.ts"],"names":[],"mappings":""}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
// SERVICES
|
|
2
|
-
import { FetcherService } from '../FetcherService';
|
|
3
|
-
import { AuthService } from '../AuthService';
|
|
4
|
-
|
|
5
|
-
// TYPES
|
|
6
|
-
import { User } from '../../types/UserAccount';
|
|
7
|
-
import { Tweet } from '../../types/Tweet';
|
|
8
|
-
import { CursoredData } from '../../types/Service';
|
|
9
|
-
import RawUser from '../../types/raw/user/User';
|
|
10
|
-
import RawUserFollowers from '../../types/raw/user/Followers';
|
|
11
|
-
import RawUserFollowing from '../../types/raw/user/Following';
|
|
12
|
-
import RawUserLikes from '../../types/raw/user/Likes';
|
|
13
|
-
|
|
14
|
-
// URLS
|
|
15
|
-
import * as Urls from '../helper/Urls';
|
|
16
|
-
|
|
17
|
-
// EXTRACTORS
|
|
18
|
-
import * as Extractors from '../helper/Extractors';
|
|
19
|
-
|
|
20
|
-
// DESERIALIZERS
|
|
21
|
-
import * as Deserializers from '../helper/Deserializers';
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* A service that deals with fetching of data related to user account
|
|
25
|
-
*/
|
|
26
|
-
export class UserAccountService extends FetcherService {
|
|
27
|
-
// MEMBER METHODS
|
|
28
|
-
constructor(auth: AuthService) {
|
|
29
|
-
super(auth);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @returns The user account details of the given user
|
|
34
|
-
* @param screenName The screen name of the target user.
|
|
35
|
-
*/
|
|
36
|
-
async getUserAccountDetails(screenName: string): Promise<User> {
|
|
37
|
-
// Fetching the raw data
|
|
38
|
-
let res: RawUser = await this.request<RawUser>(Urls.userAccountUrl(screenName), false).then(res => res.data);
|
|
39
|
-
|
|
40
|
-
// Extracting data
|
|
41
|
-
let data = Extractors.extractUserAccountDetails(res);
|
|
42
|
-
|
|
43
|
-
// Caching data
|
|
44
|
-
this.cacheData(data);
|
|
45
|
-
|
|
46
|
-
// Parsing data
|
|
47
|
-
let user = Deserializers.toUser(data.required[0]);
|
|
48
|
-
|
|
49
|
-
return user;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* @returns The user account details of the user with given rest id
|
|
54
|
-
* @param restId The screen name of the target user.
|
|
55
|
-
*/
|
|
56
|
-
async getUserAccountDetailsById(restId: string): Promise<User> {
|
|
57
|
-
// Getting data from cache
|
|
58
|
-
let cachedData = await this.readData(restId);
|
|
59
|
-
|
|
60
|
-
// If data exists in cache
|
|
61
|
-
if(cachedData) {
|
|
62
|
-
return cachedData;
|
|
63
|
-
}
|
|
64
|
-
// If data does not exist in cache
|
|
65
|
-
else {
|
|
66
|
-
// Fetchin the raw data
|
|
67
|
-
let res = await this.request<RawUser>(Urls.userAccountByIdUrl(restId), false).then(res => res.data);
|
|
68
|
-
|
|
69
|
-
// Extracting data
|
|
70
|
-
let data = Extractors.extractUserAccountDetails(res);
|
|
71
|
-
|
|
72
|
-
// Caching data
|
|
73
|
-
this.cacheData(data);
|
|
74
|
-
|
|
75
|
-
// Parsing data
|
|
76
|
-
let user = Deserializers.toUser(data.required[0]);
|
|
77
|
-
|
|
78
|
-
return user;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* @returns The list of users followed by the target user
|
|
84
|
-
* @param userId The rest id of the target user
|
|
85
|
-
* @param count The batch size of the list
|
|
86
|
-
* @param cursor The cursor to next batch. If blank, first batch is fetched
|
|
87
|
-
*/
|
|
88
|
-
async getUserFollowing(userId: string, count: number, cursor: string): Promise<CursoredData<User>> {
|
|
89
|
-
// If user is not authenticated, abort
|
|
90
|
-
if(!this.isAuthenticated) {
|
|
91
|
-
return { error: new Error('Cannot fetch user following without authentication!') };
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Fetchin the raw data
|
|
95
|
-
let res = await this.request<RawUserFollowing>(Urls.userFollowingUrl(userId, count, cursor)).then(res => res.data);
|
|
96
|
-
|
|
97
|
-
// Extracting data
|
|
98
|
-
let data = Extractors.extractUserFollow(res);
|
|
99
|
-
|
|
100
|
-
// Caching data
|
|
101
|
-
this.cacheData(data);
|
|
102
|
-
|
|
103
|
-
// Parsing data
|
|
104
|
-
let users = data.required.map(item => Deserializers.toUser(item));
|
|
105
|
-
|
|
106
|
-
return {
|
|
107
|
-
list: users,
|
|
108
|
-
next: { value: data.cursor }
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* @returns The list of users following the target user
|
|
114
|
-
* @param userId The rest id of the target user
|
|
115
|
-
* @param count The batch size of the list
|
|
116
|
-
* @param cursor The cursor to next batch. If blank, first batch is fetched
|
|
117
|
-
*/
|
|
118
|
-
async getUserFollowers(userId: string, count: number, cursor: string): Promise<CursoredData<User>> {
|
|
119
|
-
// If user is not authenticated, abort
|
|
120
|
-
if(!this.isAuthenticated) {
|
|
121
|
-
return { error: new Error('Cannot fetch user followers without authentication!') };
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* When fetching list of followers, the official Twitter API seems to be fetching n + 20 followers,
|
|
126
|
-
* where n is the actual required number of followers.
|
|
127
|
-
* So changing count to count - 20, fixes fetching more than required number of follower
|
|
128
|
-
*/
|
|
129
|
-
// Fetching the raw data
|
|
130
|
-
let res = await this.request<RawUserFollowers>(Urls.userFollowersUrl(userId, (count > 20) ? (count - 20) : count, cursor)).then(res => res.data);
|
|
131
|
-
|
|
132
|
-
// Extracting data
|
|
133
|
-
let data = Extractors.extractUserFollow(res);
|
|
134
|
-
|
|
135
|
-
// Caching data
|
|
136
|
-
this.cacheData(data);
|
|
137
|
-
|
|
138
|
-
// Parsing data
|
|
139
|
-
let users = data.required.map(item => Deserializers.toUser(item));
|
|
140
|
-
|
|
141
|
-
return {
|
|
142
|
-
list: users,
|
|
143
|
-
next: { value: data.cursor }
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* @returns The list of tweets liked by the target user
|
|
149
|
-
* @param userId The rest id of the target user
|
|
150
|
-
* @param count The batch size of the list
|
|
151
|
-
* @param cursor The cursor to next batch. If blank, first batch is fetched
|
|
152
|
-
*/
|
|
153
|
-
async getUserLikes(userId: string, count: number, cursor: string): Promise<CursoredData<Tweet>> {
|
|
154
|
-
// If user is not authenticated, abort
|
|
155
|
-
if(!this.isAuthenticated) {
|
|
156
|
-
return { error: new Error('Cannot fetch user likes without authentication!') };
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Fetching the raw data
|
|
160
|
-
let res = await this.request<RawUserLikes>(Urls.userLikesUrl(userId, count, cursor)).then(res => res.data);
|
|
161
|
-
|
|
162
|
-
// Extracting data
|
|
163
|
-
let data = Extractors.extractUserLikes(res);
|
|
164
|
-
|
|
165
|
-
// Caching data
|
|
166
|
-
this.cacheData(data);
|
|
167
|
-
|
|
168
|
-
// Parsing data
|
|
169
|
-
let tweets = data.required.map(item => Deserializers.toTweet(item));
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
list: tweets,
|
|
173
|
-
next: { value: data.cursor }
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
};
|