rettiwt-api 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/dist/{queries → graphql/queries}/RootQuery.d.ts +0 -0
  2. package/dist/{queries → graphql/queries}/RootQuery.js +4 -3
  3. package/dist/graphql/queries/RootQuery.js.map +1 -0
  4. package/dist/{resolvers → graphql/resolvers}/AccountResolver.d.ts +1 -1
  5. package/dist/{resolvers → graphql/resolvers}/AccountResolver.js +0 -0
  6. package/dist/graphql/resolvers/AccountResolver.js.map +1 -0
  7. package/dist/{resolvers → graphql/resolvers}/ResolverBase.d.ts +1 -1
  8. package/dist/{resolvers → graphql/resolvers}/ResolverBase.js +0 -0
  9. package/dist/graphql/resolvers/ResolverBase.js.map +1 -0
  10. package/dist/{resolvers → graphql/resolvers}/TweetResolver.d.ts +10 -18
  11. package/dist/{resolvers → graphql/resolvers}/TweetResolver.js +51 -83
  12. package/dist/graphql/resolvers/TweetResolver.js.map +1 -0
  13. package/dist/{resolvers → graphql/resolvers}/UserResolver.d.ts +5 -4
  14. package/dist/{resolvers → graphql/resolvers}/UserResolver.js +51 -35
  15. package/dist/graphql/resolvers/UserResolver.js.map +1 -0
  16. package/dist/{models/graphql → graphql/types}/Global.d.ts +0 -0
  17. package/dist/{models/graphql → graphql/types}/Global.js +0 -0
  18. package/dist/graphql/types/Global.js.map +1 -0
  19. package/dist/graphql/types/TweetTypes.d.ts +4 -0
  20. package/dist/{models/graphql → graphql/types}/TweetTypes.js +17 -13
  21. package/dist/graphql/types/TweetTypes.js.map +1 -0
  22. package/dist/graphql/types/UserTypes.d.ts +3 -0
  23. package/dist/{models/graphql → graphql/types}/UserTypes.js +9 -11
  24. package/dist/graphql/types/UserTypes.js.map +1 -0
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.js +2 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/server.js +3 -3
  29. package/dist/server.js.map +1 -1
  30. package/dist/services/AuthService.js +2 -2
  31. package/dist/services/AuthService.js.map +1 -1
  32. package/dist/services/CacheService.d.ts +3 -3
  33. package/dist/services/CacheService.js +22 -75
  34. package/dist/services/CacheService.js.map +1 -1
  35. package/dist/services/FetcherService.d.ts +3 -2
  36. package/dist/services/FetcherService.js +11 -29
  37. package/dist/services/FetcherService.js.map +1 -1
  38. package/dist/services/data/TweetService.d.ts +15 -16
  39. package/dist/services/data/TweetService.js +71 -50
  40. package/dist/services/data/TweetService.js.map +1 -1
  41. package/dist/services/data/UserAccountService.d.ts +3 -3
  42. package/dist/services/data/UserAccountService.js +22 -8
  43. package/dist/services/data/UserAccountService.js.map +1 -1
  44. package/dist/services/data/UserService.d.ts +42 -0
  45. package/dist/services/data/UserService.js +255 -0
  46. package/dist/services/data/UserService.js.map +1 -0
  47. package/dist/services/helper/Extractors.js +1 -1
  48. package/dist/services/helper/Extractors.js.map +1 -1
  49. package/dist/services/helper/Parser.d.ts +1 -1
  50. package/dist/services/helper/Parser.js +4 -3
  51. package/dist/services/helper/Parser.js.map +1 -1
  52. package/dist/services/helper/Urls.d.ts +2 -2
  53. package/dist/services/helper/Urls.js +19 -3
  54. package/dist/services/helper/Urls.js.map +1 -1
  55. package/dist/services/helper/deserializers/Tweets.d.ts +12 -0
  56. package/dist/services/helper/deserializers/Tweets.js +92 -0
  57. package/dist/services/helper/deserializers/Tweets.js.map +1 -0
  58. package/dist/services/{accounting/Flows.d.ts → helper/deserializers/User.d.ts} +0 -0
  59. package/dist/services/helper/deserializers/User.js +2 -0
  60. package/dist/services/helper/deserializers/User.js.map +1 -0
  61. package/dist/services/helper/deserializers/Users.d.ts +7 -0
  62. package/dist/services/helper/deserializers/Users.js +27 -0
  63. package/dist/services/helper/deserializers/Users.js.map +1 -0
  64. package/dist/services/helper/extractors/TweetExtractors.d.ts +0 -0
  65. package/dist/services/helper/extractors/TweetExtractors.js +2 -0
  66. package/dist/services/helper/extractors/TweetExtractors.js.map +1 -0
  67. package/dist/services/helper/extractors/Tweets.d.ts +34 -0
  68. package/dist/services/helper/extractors/Tweets.js +266 -0
  69. package/dist/services/helper/extractors/Tweets.js.map +1 -0
  70. package/dist/services/helper/extractors/UserExtractors.d.ts +45 -0
  71. package/dist/services/helper/extractors/UserExtractors.js +176 -0
  72. package/dist/services/helper/extractors/UserExtractors.js.map +1 -0
  73. package/dist/services/helper/extractors/Users.d.ts +23 -0
  74. package/dist/services/helper/extractors/Users.js +154 -0
  75. package/dist/services/helper/extractors/Users.js.map +1 -0
  76. package/dist/services/helper/urls/Authentication.d.ts +4 -0
  77. package/dist/services/helper/urls/Authentication.js +11 -0
  78. package/dist/services/helper/urls/Authentication.js.map +1 -0
  79. package/dist/services/helper/urls/Tweets.d.ts +32 -0
  80. package/dist/services/helper/urls/Tweets.js +51 -0
  81. package/dist/services/helper/urls/Tweets.js.map +1 -0
  82. package/dist/services/helper/urls/Urls.d.ts +4 -0
  83. package/dist/services/helper/urls/Urls.js +11 -0
  84. package/dist/services/helper/urls/Urls.js.map +1 -0
  85. package/dist/services/helper/urls/Users.d.ts +31 -0
  86. package/dist/services/helper/urls/Users.js +66 -0
  87. package/dist/services/helper/urls/Users.js.map +1 -0
  88. package/dist/types/{graphql/Errors.d.ts → Errors.d.ts} +0 -0
  89. package/dist/types/{graphql/Errors.js → Errors.js} +0 -0
  90. package/dist/types/Errors.js.map +1 -0
  91. package/dist/types/Resolvers.d.ts +9 -0
  92. package/dist/types/Resolvers.js +3 -0
  93. package/dist/types/Resolvers.js.map +1 -0
  94. package/dist/types/Tweet.d.ts +1 -0
  95. package/dist/types/Tweet.js.map +1 -1
  96. package/dist/types/User.d.ts +19 -0
  97. package/dist/types/User.js +4 -0
  98. package/dist/types/User.js.map +1 -0
  99. package/dist/types/data/Errors.d.ts +27 -0
  100. package/dist/types/data/Errors.js +35 -0
  101. package/dist/types/data/Errors.js.map +1 -0
  102. package/dist/types/data/Service.d.ts +29 -0
  103. package/dist/types/data/Service.js +19 -0
  104. package/dist/types/data/Service.js.map +1 -0
  105. package/dist/types/data/Tweet.d.ts +41 -0
  106. package/dist/types/data/Tweet.js +5 -0
  107. package/dist/types/data/Tweet.js.map +1 -0
  108. package/dist/types/data/User.d.ts +19 -0
  109. package/dist/types/data/User.js +4 -0
  110. package/dist/types/data/User.js.map +1 -0
  111. package/dist/types/raw/http/Error.d.ts +34 -0
  112. package/dist/types/raw/{user/Users.js → http/Error.js} +1 -1
  113. package/dist/types/raw/http/Error.js.map +1 -0
  114. package/dist/types/raw/http/Response.d.ts +34 -0
  115. package/dist/types/raw/http/Response.js +3 -0
  116. package/dist/types/raw/http/Response.js.map +1 -0
  117. package/package.json +1 -1
  118. package/src/{queries → graphql/queries}/RootQuery.ts +5 -4
  119. package/src/{resolvers → graphql/resolvers}/AccountResolver.ts +21 -21
  120. package/src/{resolvers → graphql/resolvers}/ResolverBase.ts +1 -1
  121. package/src/{resolvers → graphql/resolvers}/TweetResolver.ts +48 -30
  122. package/src/{resolvers → graphql/resolvers}/UserResolver.ts +41 -27
  123. package/src/{models/graphql → graphql/types}/Global.ts +0 -0
  124. package/src/{models/graphql → graphql/types}/TweetTypes.ts +16 -12
  125. package/src/{models/graphql → graphql/types}/UserTypes.ts +13 -15
  126. package/src/index.ts +2 -2
  127. package/src/server.ts +3 -3
  128. package/src/services/AuthService.ts +1 -1
  129. package/src/services/CacheService.ts +6 -8
  130. package/src/services/FetcherService.ts +11 -14
  131. package/src/services/data/TweetService.ts +58 -37
  132. package/src/services/data/UserService.ts +187 -0
  133. package/src/services/helper/Parser.ts +6 -4
  134. package/src/services/helper/{Deserializers.ts → deserializers/Tweets.ts} +3 -28
  135. package/src/services/helper/deserializers/Users.ts +26 -0
  136. package/src/services/helper/extractors/Tweets.ts +252 -0
  137. package/src/services/helper/extractors/Users.ts +137 -0
  138. package/src/services/helper/urls/Authentication.ts +6 -0
  139. package/src/services/helper/urls/Tweets.ts +46 -0
  140. package/src/services/helper/urls/Users.ts +62 -0
  141. package/src/types/Resolvers.ts +9 -0
  142. package/src/types/data/Errors.ts +28 -0
  143. package/src/types/{Service.ts → data/Service.ts} +4 -5
  144. package/src/types/{Tweet.ts → data/Tweet.ts} +1 -0
  145. package/src/types/{UserAccount.ts → data/User.ts} +0 -0
  146. package/tsconfig.json +2 -2
  147. package/dist/models/graphql/Global.js.map +0 -1
  148. package/dist/models/graphql/TweetTypes.d.ts +0 -6
  149. package/dist/models/graphql/TweetTypes.js.map +0 -1
  150. package/dist/models/graphql/UserTypes.d.ts +0 -3
  151. package/dist/models/graphql/UserTypes.js.map +0 -1
  152. package/dist/queries/RootQuery.js.map +0 -1
  153. package/dist/resolvers/AccountResolver.js.map +0 -1
  154. package/dist/resolvers/ResolverBase.js.map +0 -1
  155. package/dist/resolvers/TweetResolver.js.map +0 -1
  156. package/dist/resolvers/UserResolver.js.map +0 -1
  157. package/dist/services/AccountsService.d.ts +0 -17
  158. package/dist/services/AccountsService.js +0 -171
  159. package/dist/services/AccountsService.js.map +0 -1
  160. package/dist/services/accounting/AccountsService.d.ts +0 -20
  161. package/dist/services/accounting/AccountsService.js +0 -147
  162. package/dist/services/accounting/AccountsService.js.map +0 -1
  163. package/dist/services/accounting/Flows.js +0 -2
  164. package/dist/services/accounting/Flows.js.map +0 -1
  165. package/dist/services/accounting/LoginFlows.d.ts +0 -20
  166. package/dist/services/accounting/LoginFlows.js +0 -70
  167. package/dist/services/accounting/LoginFlows.js.map +0 -1
  168. package/dist/test/Test.js +0 -2
  169. package/dist/test/Test.js.map +0 -1
  170. package/dist/types/graphql/Errors.js.map +0 -1
  171. package/dist/types/raw/user/Users.d.ts +0 -120
  172. package/dist/types/raw/user/Users.js.map +0 -1
  173. package/src/services/data/UserAccountService.ts +0 -176
  174. package/src/services/helper/Extractors.ts +0 -455
  175. package/src/services/helper/Urls.ts +0 -109
  176. package/src/types/graphql/Errors.ts +0 -16
  177. package/src/types/raw/user/Tweets.ts +0 -2847
@@ -2,15 +2,17 @@
2
2
  import ResolverBase from './ResolverBase';
3
3
 
4
4
  // TYPES
5
- import { Cursor, DataContext } from '../types/Service';
6
-
7
- // HELPERS
8
- import { ValidationErrors } from '../types/graphql/Errors';
5
+ import { Cursor, DataContext } from '../../types/data/Service';
6
+ import { DataErrors, ValidationErrors } from '../../types/data/Errors';
9
7
 
10
8
  export default class UserResolver extends ResolverBase {
9
+ // MEMBER DATA
10
+ private batchSize: number; // To store the batch size when fetching data
11
+
11
12
  // MEMBER METHODS
12
13
  constructor(context: DataContext) {
13
14
  super(context);
15
+ this.batchSize = 40;
14
16
  }
15
17
 
16
18
  /**
@@ -21,11 +23,11 @@ export default class UserResolver extends ResolverBase {
21
23
  async resolveUserDetails(userName: string, id: string): Promise<any> {
22
24
  // If user name is supplied
23
25
  if (userName) {
24
- return await this.context.users.getUserAccountDetails(userName);
26
+ return await this.context.users.getUserDetails(userName);
25
27
  }
26
28
  // If id is supplied
27
29
  else if (id) {
28
- return await this.context.users.getUserAccountDetailsById(id);
30
+ return await this.context.users.getUserDetailsById(id);
29
31
  }
30
32
  // If neither userName nor id is supplied
31
33
  else {
@@ -36,7 +38,7 @@ export default class UserResolver extends ResolverBase {
36
38
  /**
37
39
  * @returns The list of tweets liked by the given user
38
40
  * @param id The id of the user whose likes are to be fetched
39
- * @param count The number of likes to fetch
41
+ * @param count The number of likes to fetch, must be >= 40
40
42
  * @param all Whether to fetch list of all tweets liked by user
41
43
  * @param cursor The cursor to the batch of likes to fetch
42
44
  * @param favouritesCount The total number of tweets liked by target user
@@ -44,22 +46,21 @@ export default class UserResolver extends ResolverBase {
44
46
  async resolveUserLikes(id: string, count: number, all: boolean, cursor: string, favouritesCount: number): Promise<any> {
45
47
  let likes: any[] = []; // To store the list of liked tweets
46
48
  let next: Cursor = new Cursor(cursor); // To store cursor to next batch
47
- let total: number = 0; // To store the total number of liked twets fetched
48
- let batchSize: number = 20; // To store the batchsize to use
49
+ let total: number = 0; // To store the total number of liked tweets fetched
49
50
 
50
51
  // If all liked tweets are to be fetched
51
52
  count = all ? favouritesCount : count;
52
53
 
53
54
  // If required count less than batch size, setting batch size to required count
54
- batchSize = (count < batchSize) ? count : batchSize;
55
+ this.batchSize = (count < this.batchSize) ? count : this.batchSize;
55
56
 
56
57
  // Repeatedly fetching data as long as total data fetched is less than requried
57
- while (total < count) {
58
+ do {
58
59
  // If this is the last batch, change batch size to number of remaining tweets
59
- batchSize = ((count - total) < batchSize) ? (count - total) : batchSize;
60
+ this.batchSize = ((count - total) < this.batchSize) ? (count - total) : this.batchSize;
60
61
 
61
62
  // Getting the data
62
- const res = await this.context.users.getUserLikes(id, count, next.value);
63
+ const res = await this.context.users.getUserLikes(id, this.batchSize, next.value);
63
64
 
64
65
  // If data is available
65
66
  if (res.list?.length) {
@@ -76,6 +77,11 @@ export default class UserResolver extends ResolverBase {
76
77
  else {
77
78
  break;
78
79
  }
80
+ } while (total < count);
81
+
82
+ // If no likes found
83
+ if (!likes.length) {
84
+ return new Error(DataErrors.NoLikedTweetsFound);
79
85
  }
80
86
 
81
87
  // Adding the cursor to the end of list of data
@@ -87,7 +93,7 @@ export default class UserResolver extends ResolverBase {
87
93
  /**
88
94
  * @returns The list of followers of the given twiiter user
89
95
  * @param id The id of the user whose followers are to be fetched
90
- * @param count The number of followers to fetch
96
+ * @param count The number of followers to fetch, must be >= 40 when no cursor is provided
91
97
  * @param all Whether to fetch all followers list
92
98
  * @param cursor The cursor to the batch of followers to fetch
93
99
  * @param followerCount The total number of followers of the target user
@@ -96,21 +102,20 @@ export default class UserResolver extends ResolverBase {
96
102
  let followers: any[] = []; // To store the list of followers
97
103
  let next: Cursor = new Cursor(cursor); // To store cursor to next batch
98
104
  let total: number = 0; // To store the total number of followers fetched
99
- let batchSize: number = 20; // To store the batchsize to use
100
105
 
101
106
  // If all followers are to be fetched
102
- count = (all || count > followersCount) ? followersCount : count;
107
+ count = all ? followersCount : count;
103
108
 
104
109
  // If required count less than batch size, setting batch size to required count
105
- batchSize = (count < batchSize) ? count : batchSize;
110
+ this.batchSize = (count < this.batchSize) ? count : this.batchSize;
106
111
 
107
112
  // Repeatedly fetching data as long as total data fetched is less than requried
108
- while (total < count) {
113
+ do {
109
114
  // If this is the last batch, change batch size to number of remaining followers
110
- batchSize = ((count - total) < batchSize) ? (count - total) : batchSize;
115
+ this.batchSize = ((count - total) < this.batchSize) ? (count - total) : this.batchSize;
111
116
 
112
117
  // Getting the data
113
- const res = await this.context.users.getUserFollowers(id, count, next.value);
118
+ const res = await this.context.users.getUserFollowers(id, this.batchSize, next.value);
114
119
 
115
120
  // If data is available
116
121
  if (res.list?.length) {
@@ -127,6 +132,11 @@ export default class UserResolver extends ResolverBase {
127
132
  else {
128
133
  break;
129
134
  }
135
+ } while (total < count);
136
+
137
+ // If no followers found
138
+ if (!followers.length) {
139
+ return new Error(DataErrors.NoFollowsFound);
130
140
  }
131
141
 
132
142
  // Adding the cursor to the end of list of data
@@ -138,7 +148,7 @@ export default class UserResolver extends ResolverBase {
138
148
  /**
139
149
  * @returns The list of following of the given twiiter user
140
150
  * @param id The id of the user whose followings are to be fetched
141
- * @param count The number of following to fetch
151
+ * @param count The number of following to fetch, should be >= 40 when no cursor is provided
142
152
  * @param all Whether to fetch list of all followings
143
153
  * @param cursor The cursor to the batch of followings to fetch
144
154
  * @param followingsCount The total number of followings of the target user
@@ -147,21 +157,20 @@ export default class UserResolver extends ResolverBase {
147
157
  let following: any[] = []; // To store the list of following
148
158
  let next: Cursor = new Cursor(cursor); // To store cursor to next batch
149
159
  let total: number = 0; // To store the total number of following fetched
150
- let batchSize: number = 20; // To store the batchsize to use
151
160
 
152
161
  // If all followings are to be fetched
153
- count = (all || count > followingsCount) ? followingsCount : count;
162
+ count = all ? followingsCount : count;
154
163
 
155
164
  // If required count less than batch size, setting batch size to required count
156
- batchSize = (count < batchSize) ? count : batchSize;
165
+ this.batchSize = (count < this.batchSize) ? count : this.batchSize;
157
166
 
158
167
  // Repeatedly fetching data as long as total data fetched is less than requried
159
- while (total < count) {
168
+ do {
160
169
  // If this is the last batch, change batch size to number of remaining following
161
- batchSize = ((count - total) < batchSize) ? (count - total) : batchSize;
170
+ this.batchSize = ((count - total) < this.batchSize) ? (count - total) : this.batchSize;
162
171
 
163
172
  // Getting the data
164
- const res = await this.context.users.getUserFollowing(id, count, next.value);
173
+ const res = await this.context.users.getUserFollowing(id, this.batchSize, next.value);
165
174
 
166
175
  // If data is available
167
176
  if (res.list?.length) {
@@ -178,6 +187,11 @@ export default class UserResolver extends ResolverBase {
178
187
  else {
179
188
  break;
180
189
  }
190
+ } while (total < count);
191
+
192
+ // If no following found
193
+ if (!following.length) {
194
+ return new Error(DataErrors.NoFollowsFound);
181
195
  }
182
196
 
183
197
  // Adding the cursor to the end of list of data
File without changes
@@ -1,16 +1,15 @@
1
1
  // PACKAGE
2
- import { GraphQLList, GraphQLString, GraphQLObjectType, GraphQLInt, GraphQLBoolean, GraphQLUnionType } from "graphql";
2
+ import { GraphQLList, GraphQLString, GraphQLObjectType, GraphQLInt, GraphQLBoolean, GraphQLUnionType, GraphQLType } from "graphql";
3
3
 
4
4
  // TYPES
5
5
  import { User, UserList } from './UserTypes';
6
6
  import { Cursor } from './Global';
7
7
 
8
8
  // RESOLVERS
9
- import TweetResolver from '../../resolvers/TweetResolver';
10
- import UserResolver from "../../resolvers/UserResolver";
9
+ import TweetResolver from '../resolvers/TweetResolver';
10
+ import UserResolver from "../resolvers/UserResolver";
11
11
 
12
- //@ts-ignore
13
- export const TweetTokens = new GraphQLObjectType({
12
+ export const TweetTokens: GraphQLObjectType = new GraphQLObjectType({
14
13
  name: 'TweetTokens',
15
14
  description: 'Additional extracted tokens from the tweet like mentions, hashtags, etc',
16
15
  fields: () => ({
@@ -24,8 +23,7 @@ export const TweetTokens = new GraphQLObjectType({
24
23
  })
25
24
  });
26
25
 
27
- //@ts-ignore
28
- export const Tweet = new GraphQLObjectType({
26
+ export const Tweet: GraphQLObjectType = new GraphQLObjectType({
29
27
  name: 'Tweet',
30
28
  description: 'The details of single tweet',
31
29
  fields: () => ({
@@ -52,7 +50,7 @@ export const Tweet = new GraphQLObjectType({
52
50
  args: {
53
51
  count: {
54
52
  type: GraphQLInt,
55
- description: "The number of quotes to fetch",
53
+ description: "The number of quotes to fetch, must be >= 1",
56
54
  defaultValue: 10
57
55
  },
58
56
  all: {
@@ -74,7 +72,7 @@ export const Tweet = new GraphQLObjectType({
74
72
  args: {
75
73
  count: {
76
74
  type: GraphQLInt,
77
- description: "The number of likers to fetch",
75
+ description: "The number of likers to fetch, must be >= 10 (when no cursor if provided)",
78
76
  defaultValue: 10
79
77
  },
80
78
  all: {
@@ -96,7 +94,7 @@ export const Tweet = new GraphQLObjectType({
96
94
  args: {
97
95
  count: {
98
96
  type: GraphQLInt,
99
- description: "The number of retweeters to fetch",
97
+ description: "The number of retweeters to fetch, must be >= 10 (when no cursor if provided)",
100
98
  defaultValue: 10
101
99
  },
102
100
  all: {
@@ -112,7 +110,12 @@ export const Tweet = new GraphQLObjectType({
112
110
  },
113
111
  resolve: (parent, args, context) => new TweetResolver(context).resolveTweetRetweeters(parent.id, args.count, args.all, args.cursor, parent.retweetCount)
114
112
  },
115
- replyCount: { type: GraphQLInt },
113
+ replyCount: { type: GraphQLInt }
114
+ /**
115
+ * THIS IS DISABLED FOR USE FOR NOW BECAUSE TWITTER DOESN'T HAVE ANY ENDPOINT FOR FETCHING REPLIES.
116
+ * THE DATA THIS RETURNS IS INCONSISTENT!
117
+ */
118
+ /*
116
119
  replies: {
117
120
  type: TweetList,
118
121
  args: {
@@ -134,10 +137,11 @@ export const Tweet = new GraphQLObjectType({
134
137
  },
135
138
  resolve: (parent, args, context) => new TweetResolver(context).resolveTweetReplies(parent.id, args.count, args.all, args.cursor, parent.replyCount)
136
139
  }
140
+ */
137
141
  })
138
142
  });
139
143
 
140
- export const TweetList = new GraphQLList(new GraphQLUnionType({
144
+ export const TweetList: GraphQLList<GraphQLType> = new GraphQLList(new GraphQLUnionType({
141
145
  name: 'TweetCursorUnion',
142
146
  description: 'A union type which can either be a Tweet or a Cursor, used in cursored tweet lists',
143
147
  types: [Tweet, Cursor],
@@ -1,17 +1,16 @@
1
1
  // PACKAGE
2
- import { GraphQLBoolean, GraphQLObjectType, GraphQLString, GraphQLInt, GraphQLList, GraphQLUnionType } from 'graphql';
2
+ import { GraphQLBoolean, GraphQLObjectType, GraphQLString, GraphQLInt, GraphQLList, GraphQLUnionType, GraphQLType } from 'graphql';
3
3
 
4
4
  // TYPES
5
5
  import { Tweet, TweetList } from './TweetTypes'
6
6
  import { Cursor } from './Global';
7
- import { TweetFilter } from '../../types/Tweet';
7
+ import { TweetFilter } from '../../types/data/Tweet';
8
8
 
9
9
  // RESOLVERS
10
- import UserResolver from '../../resolvers/UserResolver';
11
- import TweetResolver from '../../resolvers/TweetResolver';
10
+ import UserResolver from '../resolvers/UserResolver';
11
+ import TweetResolver from '../resolvers/TweetResolver';
12
12
 
13
- //@ts-ignore
14
- export const User = new GraphQLObjectType({
13
+ export const User: GraphQLObjectType = new GraphQLObjectType({
15
14
  name: 'User',
16
15
  description: 'The details of a single target twitter user',
17
16
  fields: () => ({
@@ -33,7 +32,7 @@ export const User = new GraphQLObjectType({
33
32
  type: TweetList,
34
33
  args: {
35
34
  count: {
36
- description: "The number of liked tweets to fetch",
35
+ description: "The number of liked tweets to fetch, must be >= 40 (when no cursor if provided)",
37
36
  type: GraphQLInt,
38
37
  defaultValue: 10
39
38
  },
@@ -55,9 +54,9 @@ export const User = new GraphQLObjectType({
55
54
  type: UserList,
56
55
  args: {
57
56
  count: {
58
- description: "The number of followers to fetch",
57
+ description: "The number of followers to fetch, must be >= 40 (when no cursor is provided)",
59
58
  type: GraphQLInt,
60
- defaultValue: 20
59
+ defaultValue: 40
61
60
  },
62
61
  all: {
63
62
  description: "Whether to fetch all followers list",
@@ -78,8 +77,8 @@ export const User = new GraphQLObjectType({
78
77
  args: {
79
78
  count: {
80
79
  type: GraphQLInt,
81
- description: "The number of followings to fetch",
82
- defaultValue: 20
80
+ description: "The number of followings to fetch, must be >= 40 (when no cursor is provided)",
81
+ defaultValue: 40
83
82
  },
84
83
  all: {
85
84
  description: "Whether to fetch all followings list",
@@ -99,7 +98,7 @@ export const User = new GraphQLObjectType({
99
98
  type: TweetList,
100
99
  args: {
101
100
  count: {
102
- description: "The number of tweets to fetch",
101
+ description: "The number of tweets to fetch, must be >= 1",
103
102
  type: GraphQLInt,
104
103
  defaultValue: 10
105
104
  },
@@ -114,13 +113,12 @@ export const User = new GraphQLObjectType({
114
113
  defaultValue: ''
115
114
  }
116
115
  },
117
- resolve: (parent, args, context) => new TweetResolver(context).resolveTweets({ fromUsers: [parent.userName] } as TweetFilter, args.count, args.cursor)
116
+ resolve: (parent, args, context) => new TweetResolver(context).resolveTweets({ fromUsers: [parent.userName] } as TweetFilter, args.all ? parent.statusesCount : args.count, args.cursor)
118
117
  }
119
118
  })
120
119
  });
121
120
 
122
- //@ts-ignore
123
- export const UserList = new GraphQLList(new GraphQLUnionType({
121
+ export const UserList: GraphQLList<GraphQLType> = new GraphQLList(new GraphQLUnionType({
124
122
  name: 'UserCursorUnion',
125
123
  description: 'A union type which can either be a User or a Cursor, used in cursored User lists',
126
124
  types: [User, Cursor],
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  // SERVICES
2
2
  import { AuthService } from "./services/AuthService";
3
- import { UserAccountService } from "./services/data/UserAccountService";
3
+ import { UserService } from "./services/data/UserService";
4
4
  import { TweetService } from "./services/data/TweetService";
5
5
  import { AccountService } from "./services/accounts/AccountService";
6
6
 
@@ -14,7 +14,7 @@ export const Rettiwt = (cookie: string = '') => {
14
14
 
15
15
  // Using the auth service instance to create data services instances
16
16
  return {
17
- users: new UserAccountService(auth),
17
+ users: new UserService(auth),
18
18
  tweets: new TweetService(auth),
19
19
  account: new AccountService()
20
20
  };
package/src/server.ts CHANGED
@@ -4,13 +4,13 @@ import { graphqlHTTP } from 'express-graphql';
4
4
  import { GraphQLSchema } from 'graphql';
5
5
 
6
6
  // Services
7
- import { UserAccountService } from './services/data/UserAccountService';
7
+ import { UserService } from './services/data/UserService';
8
8
  import { TweetService } from './services/data/TweetService';
9
9
  import { AccountService } from './services/accounts/AccountService';
10
10
  import { AuthService } from './services/AuthService';
11
11
 
12
12
  // SCHEMA
13
- import { rootQuery } from './queries/RootQuery';
13
+ import { rootQuery } from './graphql/queries/RootQuery';
14
14
 
15
15
  // CONFIGS
16
16
  import { config } from './config/env';
@@ -24,7 +24,7 @@ app.use('/graphql', graphqlHTTP(req => ({
24
24
  query: rootQuery
25
25
  }),
26
26
  context: {
27
- users: new UserAccountService(new AuthService(req.headers.cookie as string)),
27
+ users: new UserService(new AuthService(req.headers.cookie as string)),
28
28
  tweets: new TweetService(new AuthService(req.headers.cookie as string)),
29
29
  account: new AccountService()
30
30
  },
@@ -2,7 +2,7 @@
2
2
  import axios from 'axios';
3
3
 
4
4
  // URLS
5
- import { guestTokenUrl } from './helper/Urls';
5
+ import { guestTokenUrl } from './helper/urls/Authentication';
6
6
 
7
7
  // TYPES
8
8
  import { GuestCredentials, AuthCredentials } from '../types/Authentication';
@@ -23,16 +23,14 @@ export class CacheService {
23
23
  /**
24
24
  * @returns The current working instance of CacheService
25
25
  */
26
- static async getInstance(): Promise<CacheService> {
26
+ static getInstance(): CacheService {
27
27
  // If an instance doesnt exists already
28
28
  if (!this.instance) {
29
29
  this.instance = new CacheService();
30
- return this.instance;
31
- }
32
- // If an instance already exists, returning it
33
- else {
34
- return this.instance;
35
30
  }
31
+
32
+ // Returning the current instance
33
+ return this.instance;
36
34
  }
37
35
 
38
36
  /**
@@ -40,7 +38,7 @@ export class CacheService {
40
38
  * @returns Whether writing to cache was successful or not
41
39
  * @param data The input data to store
42
40
  */
43
- async write(data: any): Promise<void> {
41
+ public write(data: any): void {
44
42
  // Converting the data to a list of data
45
43
  data = Parsers.dataToList(data);
46
44
 
@@ -61,7 +59,7 @@ export class CacheService {
61
59
  * @returns The data with the given id/rest id from cache
62
60
  * @param id The id/rest id of the data to be fetched from cache
63
61
  */
64
- async read(id: string): Promise<any> {
62
+ public read(id: string): any {
65
63
  // Getting data from cache
66
64
  let res = this.client.get(id);
67
65
 
@@ -12,7 +12,8 @@ import { Result as RawTweet } from '../types/raw/tweet/Tweet';
12
12
 
13
13
  // HELPERS
14
14
  import * as Headers from './helper/Headers'
15
- import * as Deserializers from './helper/Deserializers';
15
+ import * as UserDeserializers from './helper/deserializers/Users';
16
+ import * as TweetDeserializers from './helper/deserializers/Tweets';
16
17
  import { CurlyOptions } from 'node-libcurl/dist/curly';
17
18
 
18
19
  /**
@@ -29,11 +30,13 @@ export enum HttpMethods {
29
30
  export class FetcherService {
30
31
  // MEMBER DATA
31
32
  private auth: AuthService; // To store the auth service instance to use for authentication
33
+ private cache: CacheService; // To stoer the cache service instance to use for caching data
32
34
  protected isAuthenticated: boolean; // To store whether user is authenticated or not
33
35
 
34
36
  // MEMBER METHODS
35
37
  constructor(auth: AuthService) {
36
38
  this.auth = auth;
39
+ this.cache = CacheService.getInstance();
37
40
  this.isAuthenticated = this.auth.isAuthenticated;
38
41
  }
39
42
 
@@ -77,28 +80,22 @@ export class FetcherService {
77
80
  * @summary Caches the extracted data
78
81
  * @param data The extracted data to be cached
79
82
  */
80
- protected async cacheData(data: any): Promise<void> {
81
- // Creating an instance of cache
82
- let cache = await CacheService.getInstance();
83
-
83
+ protected cacheData(data: any): void {
84
84
  // Parsing the extracted data
85
- let users = data.users.map((user: RawUser) => Deserializers.toUser(user));
86
- let tweets = data.tweets.map((tweet: RawTweet) => Deserializers.toTweet(tweet));
85
+ let users = data.users.map((user: RawUser) => UserDeserializers.toUser(user));
86
+ let tweets = data.tweets.map((tweet: RawTweet) => TweetDeserializers.toTweet(tweet));
87
87
 
88
88
  // Caching the data
89
- cache.write(users);
90
- cache.write(tweets);
89
+ this.cache.write(users);
90
+ this.cache.write(tweets);
91
91
  }
92
92
 
93
93
  /**
94
94
  * @returns The data with the given id (if it exists in cache)
95
95
  * @param id The id of the data to be read from cache
96
96
  */
97
- protected async readData(id: string): Promise<any> {
98
- // Creating an instance of cache
99
- let cache = await CacheService.getInstance();
100
-
97
+ protected readData(id: string): any {
101
98
  // Reading data from cache
102
- return cache.read(id);
99
+ return this.cache.read(id);
103
100
  }
104
101
  }