@book000/twitterts 0.49.5 → 0.52.0

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 (304) hide show
  1. package/README.md +6 -0
  2. package/dist/converter.d.ts +0 -45
  3. package/dist/converter.d.ts.map +1 -1
  4. package/dist/converter.js +0 -51
  5. package/dist/converter.js.map +1 -1
  6. package/dist/generate-types/custom-types-generator.d.ts +6 -45
  7. package/dist/generate-types/custom-types-generator.d.ts.map +1 -1
  8. package/dist/generate-types/custom-types-generator.js +299 -385
  9. package/dist/generate-types/custom-types-generator.js.map +1 -1
  10. package/dist/generate-types/endpoint-type-generator.d.ts +11 -60
  11. package/dist/generate-types/endpoint-type-generator.d.ts.map +1 -1
  12. package/dist/generate-types/endpoint-type-generator.js +54 -94
  13. package/dist/generate-types/endpoint-type-generator.js.map +1 -1
  14. package/dist/generate-types/types-generator.d.ts +3 -36
  15. package/dist/generate-types/types-generator.d.ts.map +1 -1
  16. package/dist/generate-types/types-generator.js +40 -40
  17. package/dist/generate-types/types-generator.js.map +1 -1
  18. package/dist/generate-types/utils.d.ts +0 -94
  19. package/dist/generate-types/utils.d.ts.map +1 -1
  20. package/dist/generate-types/utils.js +0 -168
  21. package/dist/generate-types/utils.js.map +1 -1
  22. package/dist/generate-types.js +16 -6
  23. package/dist/generate-types.js.map +1 -1
  24. package/dist/migrate-saved-response.d.ts +2 -0
  25. package/dist/migrate-saved-response.d.ts.map +1 -0
  26. package/dist/migrate-saved-response.js +178 -0
  27. package/dist/migrate-saved-response.js.map +1 -0
  28. package/dist/models/exceptions.d.ts +0 -33
  29. package/dist/models/exceptions.d.ts.map +1 -1
  30. package/dist/models/exceptions.js +0 -33
  31. package/dist/models/exceptions.js.map +1 -1
  32. package/dist/models/responses/custom/custom-graph-qltimeline-success-response.d.ts +0 -1
  33. package/dist/models/responses/custom/custom-graph-qltimeline-success-response.d.ts.map +1 -1
  34. package/dist/models/responses/custom/custom-graph-qltimeline-success-response.js +0 -1
  35. package/dist/models/responses/custom/custom-graph-qltimeline-success-response.js.map +1 -1
  36. package/dist/models/responses/custom/custom-search-timeline-entry.d.ts +0 -1
  37. package/dist/models/responses/custom/custom-search-timeline-entry.d.ts.map +1 -1
  38. package/dist/models/responses/custom/custom-search-timeline-entry.js +0 -1
  39. package/dist/models/responses/custom/custom-search-timeline-entry.js.map +1 -1
  40. package/dist/models/responses/custom/custom-timeline-tweet-entry.d.ts +0 -1
  41. package/dist/models/responses/custom/custom-timeline-tweet-entry.d.ts.map +1 -1
  42. package/dist/models/responses/custom/custom-timeline-tweet-entry.js +0 -1
  43. package/dist/models/responses/custom/custom-timeline-tweet-entry.js.map +1 -1
  44. package/dist/models/responses/custom/custom-tweet-legacy-object.d.ts +0 -1
  45. package/dist/models/responses/custom/custom-tweet-legacy-object.d.ts.map +1 -1
  46. package/dist/models/responses/custom/custom-tweet-legacy-object.js +0 -1
  47. package/dist/models/responses/custom/custom-tweet-legacy-object.js.map +1 -1
  48. package/dist/models/responses/custom/custom-tweet-object.d.ts +0 -1
  49. package/dist/models/responses/custom/custom-tweet-object.d.ts.map +1 -1
  50. package/dist/models/responses/custom/custom-tweet-object.js +0 -1
  51. package/dist/models/responses/custom/custom-tweet-object.js.map +1 -1
  52. package/dist/models/responses/custom/custom-user-legacy-object.d.ts +0 -1
  53. package/dist/models/responses/custom/custom-user-legacy-object.d.ts.map +1 -1
  54. package/dist/models/responses/custom/custom-user-legacy-object.js +0 -1
  55. package/dist/models/responses/custom/custom-user-legacy-object.js.map +1 -1
  56. package/dist/models/responses/custom/custom-user-like-tweet-entry.d.ts +0 -1
  57. package/dist/models/responses/custom/custom-user-like-tweet-entry.d.ts.map +1 -1
  58. package/dist/models/responses/custom/custom-user-like-tweet-entry.js +0 -1
  59. package/dist/models/responses/custom/custom-user-like-tweet-entry.js.map +1 -1
  60. package/dist/models/responses/custom/custom-user-tweet-entry.d.ts +0 -1
  61. package/dist/models/responses/custom/custom-user-tweet-entry.d.ts.map +1 -1
  62. package/dist/models/responses/custom/custom-user-tweet-entry.js +0 -1
  63. package/dist/models/responses/custom/custom-user-tweet-entry.js.map +1 -1
  64. package/dist/models/responses/endpoints.d.ts +0 -29
  65. package/dist/models/responses/endpoints.d.ts.map +1 -1
  66. package/dist/models/responses/graphql/get/article-nudge-domains-error.d.ts +0 -1
  67. package/dist/models/responses/graphql/get/article-nudge-domains-error.d.ts.map +1 -1
  68. package/dist/models/responses/graphql/get/article-nudge-domains-error.js +0 -1
  69. package/dist/models/responses/graphql/get/article-nudge-domains-error.js.map +1 -1
  70. package/dist/models/responses/graphql/get/article-nudge-domains-success.d.ts +0 -1
  71. package/dist/models/responses/graphql/get/article-nudge-domains-success.d.ts.map +1 -1
  72. package/dist/models/responses/graphql/get/article-nudge-domains-success.js +0 -1
  73. package/dist/models/responses/graphql/get/article-nudge-domains-success.js.map +1 -1
  74. package/dist/models/responses/graphql/get/audio-space-by-id-success.d.ts +0 -1
  75. package/dist/models/responses/graphql/get/audio-space-by-id-success.d.ts.map +1 -1
  76. package/dist/models/responses/graphql/get/audio-space-by-id-success.js +0 -1
  77. package/dist/models/responses/graphql/get/audio-space-by-id-success.js.map +1 -1
  78. package/dist/models/responses/graphql/get/authenticated-user-tflists-success.d.ts +0 -1
  79. package/dist/models/responses/graphql/get/authenticated-user-tflists-success.d.ts.map +1 -1
  80. package/dist/models/responses/graphql/get/authenticated-user-tflists-success.js +0 -1
  81. package/dist/models/responses/graphql/get/authenticated-user-tflists-success.js.map +1 -1
  82. package/dist/models/responses/graphql/get/bookmarks-success.d.ts +0 -1
  83. package/dist/models/responses/graphql/get/bookmarks-success.d.ts.map +1 -1
  84. package/dist/models/responses/graphql/get/bookmarks-success.js +0 -1
  85. package/dist/models/responses/graphql/get/bookmarks-success.js.map +1 -1
  86. package/dist/models/responses/graphql/get/communities-tab-bar-item-query-success.d.ts +0 -1
  87. package/dist/models/responses/graphql/get/communities-tab-bar-item-query-success.d.ts.map +1 -1
  88. package/dist/models/responses/graphql/get/communities-tab-bar-item-query-success.js +0 -1
  89. package/dist/models/responses/graphql/get/communities-tab-bar-item-query-success.js.map +1 -1
  90. package/dist/models/responses/graphql/get/connect-tab-timeline-success.d.ts +0 -1
  91. package/dist/models/responses/graphql/get/connect-tab-timeline-success.d.ts.map +1 -1
  92. package/dist/models/responses/graphql/get/connect-tab-timeline-success.js +0 -1
  93. package/dist/models/responses/graphql/get/connect-tab-timeline-success.js.map +1 -1
  94. package/dist/models/responses/graphql/get/data-saver-mode-error.d.ts +0 -1
  95. package/dist/models/responses/graphql/get/data-saver-mode-error.d.ts.map +1 -1
  96. package/dist/models/responses/graphql/get/data-saver-mode-error.js +0 -1
  97. package/dist/models/responses/graphql/get/data-saver-mode-error.js.map +1 -1
  98. package/dist/models/responses/graphql/get/data-saver-mode-success.d.ts +0 -1
  99. package/dist/models/responses/graphql/get/data-saver-mode-success.d.ts.map +1 -1
  100. package/dist/models/responses/graphql/get/data-saver-mode-success.js +0 -1
  101. package/dist/models/responses/graphql/get/data-saver-mode-success.js.map +1 -1
  102. package/dist/models/responses/graphql/get/dmpinned-inbox-query-success.d.ts +0 -1
  103. package/dist/models/responses/graphql/get/dmpinned-inbox-query-success.d.ts.map +1 -1
  104. package/dist/models/responses/graphql/get/dmpinned-inbox-query-success.js +0 -1
  105. package/dist/models/responses/graphql/get/dmpinned-inbox-query-success.js.map +1 -1
  106. package/dist/models/responses/graphql/get/follow-host-button-query-success.d.ts +0 -1
  107. package/dist/models/responses/graphql/get/follow-host-button-query-success.d.ts.map +1 -1
  108. package/dist/models/responses/graphql/get/follow-host-button-query-success.js +0 -1
  109. package/dist/models/responses/graphql/get/follow-host-button-query-success.js.map +1 -1
  110. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-error.d.ts +0 -1
  111. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-error.d.ts.map +1 -1
  112. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-error.js +0 -1
  113. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-error.js.map +1 -1
  114. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-success.d.ts +0 -1
  115. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-success.d.ts.map +1 -1
  116. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-success.js +0 -1
  117. package/dist/models/responses/graphql/get/get-alt-text-prompt-preference-success.js.map +1 -1
  118. package/dist/models/responses/graphql/get/get-user-claims-error.d.ts +0 -1
  119. package/dist/models/responses/graphql/get/get-user-claims-error.d.ts.map +1 -1
  120. package/dist/models/responses/graphql/get/get-user-claims-error.js +0 -1
  121. package/dist/models/responses/graphql/get/get-user-claims-error.js.map +1 -1
  122. package/dist/models/responses/graphql/get/get-user-claims-success.d.ts +0 -1
  123. package/dist/models/responses/graphql/get/get-user-claims-success.d.ts.map +1 -1
  124. package/dist/models/responses/graphql/get/get-user-claims-success.js +0 -1
  125. package/dist/models/responses/graphql/get/get-user-claims-success.js.map +1 -1
  126. package/dist/models/responses/graphql/get/home-latest-timeline-success.d.ts +0 -1
  127. package/dist/models/responses/graphql/get/home-latest-timeline-success.d.ts.map +1 -1
  128. package/dist/models/responses/graphql/get/home-latest-timeline-success.js +0 -1
  129. package/dist/models/responses/graphql/get/home-latest-timeline-success.js.map +1 -1
  130. package/dist/models/responses/graphql/get/home-timeline-success.d.ts +0 -1
  131. package/dist/models/responses/graphql/get/home-timeline-success.d.ts.map +1 -1
  132. package/dist/models/responses/graphql/get/home-timeline-success.js +0 -1
  133. package/dist/models/responses/graphql/get/home-timeline-success.js.map +1 -1
  134. package/dist/models/responses/graphql/get/likes-error.d.ts +0 -1
  135. package/dist/models/responses/graphql/get/likes-error.d.ts.map +1 -1
  136. package/dist/models/responses/graphql/get/likes-error.js +0 -1
  137. package/dist/models/responses/graphql/get/likes-error.js.map +1 -1
  138. package/dist/models/responses/graphql/get/likes-success.d.ts +0 -1
  139. package/dist/models/responses/graphql/get/likes-success.d.ts.map +1 -1
  140. package/dist/models/responses/graphql/get/likes-success.js +0 -1
  141. package/dist/models/responses/graphql/get/likes-success.js.map +1 -1
  142. package/dist/models/responses/graphql/get/list-latest-tweets-timeline-success.d.ts +0 -1
  143. package/dist/models/responses/graphql/get/list-latest-tweets-timeline-success.d.ts.map +1 -1
  144. package/dist/models/responses/graphql/get/list-latest-tweets-timeline-success.js +0 -1
  145. package/dist/models/responses/graphql/get/list-latest-tweets-timeline-success.js.map +1 -1
  146. package/dist/models/responses/graphql/get/list-pins-error.d.ts +0 -1
  147. package/dist/models/responses/graphql/get/list-pins-error.d.ts.map +1 -1
  148. package/dist/models/responses/graphql/get/list-pins-error.js +0 -1
  149. package/dist/models/responses/graphql/get/list-pins-error.js.map +1 -1
  150. package/dist/models/responses/graphql/get/list-pins-success.d.ts +0 -1
  151. package/dist/models/responses/graphql/get/list-pins-success.d.ts.map +1 -1
  152. package/dist/models/responses/graphql/get/list-pins-success.js +0 -1
  153. package/dist/models/responses/graphql/get/list-pins-success.js.map +1 -1
  154. package/dist/models/responses/graphql/get/lists-management-page-timeline-success.d.ts +0 -1
  155. package/dist/models/responses/graphql/get/lists-management-page-timeline-success.d.ts.map +1 -1
  156. package/dist/models/responses/graphql/get/lists-management-page-timeline-success.js +0 -1
  157. package/dist/models/responses/graphql/get/lists-management-page-timeline-success.js.map +1 -1
  158. package/dist/models/responses/graphql/get/profile-spotlights-query-error.d.ts +0 -1
  159. package/dist/models/responses/graphql/get/profile-spotlights-query-error.d.ts.map +1 -1
  160. package/dist/models/responses/graphql/get/profile-spotlights-query-error.js +0 -1
  161. package/dist/models/responses/graphql/get/profile-spotlights-query-error.js.map +1 -1
  162. package/dist/models/responses/graphql/get/profile-spotlights-query-success.d.ts +0 -1
  163. package/dist/models/responses/graphql/get/profile-spotlights-query-success.d.ts.map +1 -1
  164. package/dist/models/responses/graphql/get/profile-spotlights-query-success.js +0 -1
  165. package/dist/models/responses/graphql/get/profile-spotlights-query-success.js.map +1 -1
  166. package/dist/models/responses/graphql/get/quick-promote-eligibility-success.d.ts +0 -1
  167. package/dist/models/responses/graphql/get/quick-promote-eligibility-success.d.ts.map +1 -1
  168. package/dist/models/responses/graphql/get/quick-promote-eligibility-success.js +0 -1
  169. package/dist/models/responses/graphql/get/quick-promote-eligibility-success.js.map +1 -1
  170. package/dist/models/responses/graphql/get/search-timeline-success.d.ts +0 -1
  171. package/dist/models/responses/graphql/get/search-timeline-success.d.ts.map +1 -1
  172. package/dist/models/responses/graphql/get/search-timeline-success.js +0 -1
  173. package/dist/models/responses/graphql/get/search-timeline-success.js.map +1 -1
  174. package/dist/models/responses/graphql/get/tweet-detail-error.d.ts +0 -1
  175. package/dist/models/responses/graphql/get/tweet-detail-error.d.ts.map +1 -1
  176. package/dist/models/responses/graphql/get/tweet-detail-error.js +0 -1
  177. package/dist/models/responses/graphql/get/tweet-detail-error.js.map +1 -1
  178. package/dist/models/responses/graphql/get/tweet-detail-success.d.ts +0 -1
  179. package/dist/models/responses/graphql/get/tweet-detail-success.d.ts.map +1 -1
  180. package/dist/models/responses/graphql/get/tweet-detail-success.js +0 -1
  181. package/dist/models/responses/graphql/get/tweet-detail-success.js.map +1 -1
  182. package/dist/models/responses/graphql/get/user-by-rest-id-success.d.ts +0 -1
  183. package/dist/models/responses/graphql/get/user-by-rest-id-success.d.ts.map +1 -1
  184. package/dist/models/responses/graphql/get/user-by-rest-id-success.js +0 -1
  185. package/dist/models/responses/graphql/get/user-by-rest-id-success.js.map +1 -1
  186. package/dist/models/responses/graphql/get/user-by-screen-name-error.d.ts +0 -1
  187. package/dist/models/responses/graphql/get/user-by-screen-name-error.d.ts.map +1 -1
  188. package/dist/models/responses/graphql/get/user-by-screen-name-error.js +0 -1
  189. package/dist/models/responses/graphql/get/user-by-screen-name-error.js.map +1 -1
  190. package/dist/models/responses/graphql/get/user-by-screen-name-success.d.ts +0 -1
  191. package/dist/models/responses/graphql/get/user-by-screen-name-success.d.ts.map +1 -1
  192. package/dist/models/responses/graphql/get/user-by-screen-name-success.js +0 -1
  193. package/dist/models/responses/graphql/get/user-by-screen-name-success.js.map +1 -1
  194. package/dist/models/responses/graphql/get/user-media-success.d.ts +0 -1
  195. package/dist/models/responses/graphql/get/user-media-success.d.ts.map +1 -1
  196. package/dist/models/responses/graphql/get/user-media-success.js +0 -1
  197. package/dist/models/responses/graphql/get/user-media-success.js.map +1 -1
  198. package/dist/models/responses/graphql/get/user-tweets-and-replies-success.d.ts +0 -1
  199. package/dist/models/responses/graphql/get/user-tweets-and-replies-success.d.ts.map +1 -1
  200. package/dist/models/responses/graphql/get/user-tweets-and-replies-success.js +0 -1
  201. package/dist/models/responses/graphql/get/user-tweets-and-replies-success.js.map +1 -1
  202. package/dist/models/responses/graphql/get/user-tweets-error.d.ts +0 -1
  203. package/dist/models/responses/graphql/get/user-tweets-error.d.ts.map +1 -1
  204. package/dist/models/responses/graphql/get/user-tweets-error.js +0 -1
  205. package/dist/models/responses/graphql/get/user-tweets-error.js.map +1 -1
  206. package/dist/models/responses/graphql/get/user-tweets-success.d.ts +0 -1
  207. package/dist/models/responses/graphql/get/user-tweets-success.d.ts.map +1 -1
  208. package/dist/models/responses/graphql/get/user-tweets-success.js +0 -1
  209. package/dist/models/responses/graphql/get/user-tweets-success.js.map +1 -1
  210. package/dist/models/responses/graphql/get/users-by-rest-ids-success.d.ts +0 -1
  211. package/dist/models/responses/graphql/get/users-by-rest-ids-success.d.ts.map +1 -1
  212. package/dist/models/responses/graphql/get/users-by-rest-ids-success.js +0 -1
  213. package/dist/models/responses/graphql/get/users-by-rest-ids-success.js.map +1 -1
  214. package/dist/models/responses/graphql/get/users-verified-avatars-success.d.ts +0 -1
  215. package/dist/models/responses/graphql/get/users-verified-avatars-success.d.ts.map +1 -1
  216. package/dist/models/responses/graphql/get/users-verified-avatars-success.js +0 -1
  217. package/dist/models/responses/graphql/get/users-verified-avatars-success.js.map +1 -1
  218. package/dist/models/responses/graphql/get/viewer-success.d.ts +0 -1
  219. package/dist/models/responses/graphql/get/viewer-success.d.ts.map +1 -1
  220. package/dist/models/responses/graphql/get/viewer-success.js +0 -1
  221. package/dist/models/responses/graphql/get/viewer-success.js.map +1 -1
  222. package/dist/models/responses/graphql/post/create-retweet-success.d.ts +0 -1
  223. package/dist/models/responses/graphql/post/create-retweet-success.d.ts.map +1 -1
  224. package/dist/models/responses/graphql/post/create-retweet-success.js +0 -1
  225. package/dist/models/responses/graphql/post/create-retweet-success.js.map +1 -1
  226. package/dist/models/responses/graphql/post/delete-retweet-success.d.ts +0 -1
  227. package/dist/models/responses/graphql/post/delete-retweet-success.d.ts.map +1 -1
  228. package/dist/models/responses/graphql/post/delete-retweet-success.js +0 -1
  229. package/dist/models/responses/graphql/post/delete-retweet-success.js.map +1 -1
  230. package/dist/models/responses/graphql/post/favorite-tweet-success.d.ts +0 -1
  231. package/dist/models/responses/graphql/post/favorite-tweet-success.d.ts.map +1 -1
  232. package/dist/models/responses/graphql/post/favorite-tweet-success.js +0 -1
  233. package/dist/models/responses/graphql/post/favorite-tweet-success.js.map +1 -1
  234. package/dist/models/responses/graphql/post/home-latest-timeline-error.d.ts +0 -1
  235. package/dist/models/responses/graphql/post/home-latest-timeline-error.d.ts.map +1 -1
  236. package/dist/models/responses/graphql/post/home-latest-timeline-error.js +0 -1
  237. package/dist/models/responses/graphql/post/home-latest-timeline-error.js.map +1 -1
  238. package/dist/models/responses/graphql/post/home-latest-timeline-success.d.ts +0 -1
  239. package/dist/models/responses/graphql/post/home-latest-timeline-success.d.ts.map +1 -1
  240. package/dist/models/responses/graphql/post/home-latest-timeline-success.js +0 -1
  241. package/dist/models/responses/graphql/post/home-latest-timeline-success.js.map +1 -1
  242. package/dist/models/responses/graphql/post/home-timeline-success.d.ts +0 -1
  243. package/dist/models/responses/graphql/post/home-timeline-success.d.ts.map +1 -1
  244. package/dist/models/responses/graphql/post/home-timeline-success.js +0 -1
  245. package/dist/models/responses/graphql/post/home-timeline-success.js.map +1 -1
  246. package/dist/models/responses/graphql/post/put-client-education-flag-success.d.ts +0 -1
  247. package/dist/models/responses/graphql/post/put-client-education-flag-success.d.ts.map +1 -1
  248. package/dist/models/responses/graphql/post/put-client-education-flag-success.js +0 -1
  249. package/dist/models/responses/graphql/post/put-client-education-flag-success.js.map +1 -1
  250. package/dist/models/responses/graphql/post/unfavorite-tweet-success.d.ts +0 -1
  251. package/dist/models/responses/graphql/post/unfavorite-tweet-success.d.ts.map +1 -1
  252. package/dist/models/responses/graphql/post/unfavorite-tweet-success.js +0 -1
  253. package/dist/models/responses/graphql/post/unfavorite-tweet-success.js.map +1 -1
  254. package/dist/options.d.ts +0 -72
  255. package/dist/options.d.ts.map +1 -1
  256. package/dist/options.js +0 -14
  257. package/dist/options.js.map +1 -1
  258. package/dist/parser/base.d.ts +0 -6
  259. package/dist/parser/base.d.ts.map +1 -1
  260. package/dist/parser/base.js +0 -6
  261. package/dist/parser/base.js.map +1 -1
  262. package/dist/parser/home-timeline-parser.d.ts +0 -11
  263. package/dist/parser/home-timeline-parser.d.ts.map +1 -1
  264. package/dist/parser/home-timeline-parser.js +0 -11
  265. package/dist/parser/home-timeline-parser.js.map +1 -1
  266. package/dist/parser/parser.test.js +77 -77
  267. package/dist/parser/parser.test.js.map +1 -1
  268. package/dist/parser/search-timeline.d.ts +0 -11
  269. package/dist/parser/search-timeline.d.ts.map +1 -1
  270. package/dist/parser/search-timeline.js +0 -11
  271. package/dist/parser/search-timeline.js.map +1 -1
  272. package/dist/parser/user-like-tweets.d.ts +0 -11
  273. package/dist/parser/user-like-tweets.d.ts.map +1 -1
  274. package/dist/parser/user-like-tweets.js +0 -11
  275. package/dist/parser/user-like-tweets.js.map +1 -1
  276. package/dist/parser/user-tweets.d.ts +0 -11
  277. package/dist/parser/user-tweets.d.ts.map +1 -1
  278. package/dist/parser/user-tweets.js +0 -11
  279. package/dist/parser/user-tweets.js.map +1 -1
  280. package/dist/save-responses.js +0 -4
  281. package/dist/save-responses.js.map +1 -1
  282. package/dist/saving-responses/index.d.ts +54 -0
  283. package/dist/saving-responses/index.d.ts.map +1 -0
  284. package/dist/saving-responses/index.js +189 -0
  285. package/dist/saving-responses/index.js.map +1 -0
  286. package/dist/saving-responses/response-entity.d.ts +17 -0
  287. package/dist/saving-responses/response-entity.d.ts.map +1 -0
  288. package/dist/saving-responses/response-entity.js +108 -0
  289. package/dist/saving-responses/response-entity.js.map +1 -0
  290. package/dist/scraper.d.ts +5 -229
  291. package/dist/scraper.d.ts.map +1 -1
  292. package/dist/scraper.js +67 -151
  293. package/dist/scraper.js.map +1 -1
  294. package/dist/scraper.test.js +1 -7
  295. package/dist/scraper.test.js.map +1 -1
  296. package/dist/tsconfig.build.tsbuildinfo +1 -1
  297. package/dist/twitter.d.ts +0 -119
  298. package/dist/twitter.d.ts.map +1 -1
  299. package/dist/twitter.js +1 -163
  300. package/dist/twitter.js.map +1 -1
  301. package/dist/twitter.test.js +0 -1
  302. package/dist/twitter.test.js.map +1 -1
  303. package/package.json +29 -28
  304. package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/twitter.d.ts CHANGED
@@ -3,147 +3,28 @@ import { TwitterScraper, TwitterScraperOptions } from './scraper';
3
3
  import { GraphQLGetUserByScreenNameSuccessResponse } from './models/responses/graphql/get/user-by-screen-name-success';
4
4
  import { FullUser, Status } from 'twitter-d';
5
5
  import { CustomTweetObject } from './models/responses/custom/custom-tweet-object';
6
- /**
7
- * {@link TwitterOptions} オプション
8
- */
9
6
  export type TwitterOptions = TwitterScraperOptions;
10
- /**
11
- * Twitter スクレイピングライブラリクラス
12
- */
13
7
  export declare class Twitter {
14
8
  readonly scraper: TwitterScraper;
15
- /**
16
- * @param scraper {@link TwitterScraper} インスタンス
17
- */
18
9
  private constructor();
19
- /**
20
- * Twitter にログインする
21
- *
22
- * @param options ログインオプション
23
- * @returns Twitter インスタンス
24
- */
25
10
  static login(options: TwitterOptions): Promise<Twitter>;
26
- /**
27
- * スクリーンネームからユーザー情報を取得する
28
- *
29
- * @param options ユーザー情報取得オプション
30
- * @returns ユーザー情報
31
- */
32
11
  getUserByScreenName(options: GetUserByScreenNameOptions): Promise<GraphQLGetUserByScreenNameSuccessResponse>;
33
- /**
34
- * ユーザー ID からスクリーンネームを取得する
35
- *
36
- * @param userId ユーザー ID
37
- * @returns スクリーンネーム
38
- */
39
12
  getScreenNameByUserId(options: GetScreenNameByUserIdOptions): Promise<string>;
40
- /**
41
- * ユーザー ID からスクリーンネームを取得する
42
- *
43
- * @param userId ユーザー ID
44
- * @returns スクリーンネーム
45
- */
46
13
  getUserByUserId(options: GetUserByUserIdOptions): Promise<FullUser>;
47
- /**
48
- * ユーザー ID からユーザー情報を取得する。ユーザー情報は生レスポンスで返す
49
- *
50
- * @param userId ユーザー ID
51
- * @returns ユーザー情報(生レスポンス)
52
- */
53
14
  getRawUserByUserId(options: GetUserByUserIdOptions): Promise<GraphQLGetUserByScreenNameSuccessResponse>;
54
- /**
55
- * ホームタイムラインのツイートを取得する。
56
- *
57
- * @param options ホームタイムライン取得オプション
58
- * @returns ホームタイムラインのツイート
59
- */
60
15
  getHomeTimelineTweets(options: GetHomeTimelineTweetsOptions): Promise<Status[]>;
61
- /**
62
- * ホームタイムラインのツイートを取得する。ツイートは非正規化ツイート(CustomTweetObject)で返す
63
- *
64
- * @param options ホームタイムライン取得オプション
65
- * @returns ホームタイムラインのツイート(非正規化ツイート)
66
- */
67
16
  getHomeTimelineRawTweets(options: GetHomeTimelineTweetsOptions): Promise<CustomTweetObject[]>;
68
- /**
69
- * ツイートを検索する。
70
- *
71
- * @param options 検索オプション
72
- * @returns 検索結果
73
- */
74
17
  searchTweets(options: SearchTweetsOptions): Promise<Status[]>;
75
- /**
76
- * ツイートを検索する。ツイートは非正規化ツイート(CustomTweetObject)で返す
77
- *
78
- * @param options 検索オプション
79
- * @returns 検索結果(非正規化ツイート)
80
- */
81
18
  searchRawTweets(options: SearchTweetsOptions): Promise<CustomTweetObject[]>;
82
- /**
83
- * ユーザーのツイートを取得する
84
- *
85
- * @param options ユーザーツイート取得オプション
86
- * @returns ユーザーのツイート
87
- */
88
19
  getUserTweets(options: GetUserTweetsOptions): Promise<Status[]>;
89
- /**
90
- * ユーザーのいいねしたツイートを取得する
91
- *
92
- * @param options ユーザーいいねツイート取得オプション
93
- * @returns ユーザーのツイート
94
- */
95
20
  getUserLikeTweets(options: GetUserLikeTweetsOptions): Promise<Status[]>;
96
- /**
97
- * ツイートの情報を取得する
98
- *
99
- * @param options ツイート取得オプション
100
- * @returns ツイート
101
- */
102
21
  getTweet(options: GetTweetOptions): Promise<Status>;
103
- /**
104
- * ツイートの生情報を取得する
105
- *
106
- * @param options ツイート取得オプション
107
- * @returns ツイートの生情報
108
- */
109
22
  getRawTweet(options: GetTweetOptions): Promise<CustomTweetObject>;
110
- /**
111
- * ツイートをいいねする
112
- *
113
- * @param options いいねオプション
114
- * @returns いいねできたかどうかの文字列(Done)
115
- */
116
23
  likeTweet(options: LikeTweetOptions): Promise<string | undefined>;
117
- /**
118
- * ツイートのいいねを解除する
119
- *
120
- * @param options いいね解除オプション
121
- * @returns いいね解除できたかどうかの文字列(Done)
122
- */
123
24
  unlikeTweet(options: UnlikeTweetOptions): Promise<string | undefined>;
124
- /**
125
- * ユーザーをブロックする
126
- *
127
- * @param options ブロックオプション
128
- */
129
25
  blockUser(options: BlockUserOptions): Promise<void>;
130
- /**
131
- * ユーザーのブロックを解除する
132
- *
133
- * @param options ブロック解除オプション
134
- */
135
26
  unblockUser(options: UnblockUserOptions): Promise<void>;
136
- /**
137
- * ブラウザを閉じる
138
- */
139
27
  close(): Promise<void>;
140
- /**
141
- * エラーレスポンスかどうかを判定する。
142
- * これを使うことでエラーがどうかは判定できるが、レスポンス型は保証されないので利用側で型保証されるメソッドを書いたほうがよい。
143
- *
144
- * @param response レスポンス
145
- * @returns エラーレスポンスかどうか
146
- */
147
28
  isErrorResponse(response: any): response is {
148
29
  errors: any[];
149
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"twitter.d.ts","sourceRoot":"","sources":["../src/twitter.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,mBAAmB,EAEnB,wBAAwB,EACxB,oBAAoB,EACpB,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,EAClB,4BAA4B,EAE5B,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,WAAW,CAAA;AAIlB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAGjE,OAAO,EAAE,yCAAyC,EAAE,MAAM,4DAA4D,CAAA;AACtH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AAGjF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAA;AAElD;;GAEG;AACH,qBAAa,OAAO;IAClB,SAAgB,OAAO,EAAE,cAAc,CAAA;IAEvC;;OAEG;IACH,OAAO;IAIP;;;;;OAKG;WACiB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAMpE;;;;;OAKG;IACU,mBAAmB,CAC9B,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yCAAyC,CAAC;IA4BrD;;;;;OAKG;IACU,qBAAqB,CAChC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,MAAM,CAAC;IASlB;;;;;OAKG;IACU,eAAe,CAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,QAAQ,CAAC;IASpB;;;;;OAKG;IACU,kBAAkB,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,yCAAyC,CAAC;IAmCrD;;;;;OAKG;IACU,qBAAqB,CAChC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpB;;;;;OAKG;IACU,wBAAwB,CACnC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA8E/B;;;;;OAKG;IACU,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ1E;;;;;OAKG;IACU,eAAe,CAC1B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAyD/B;;;;;OAKG;IACU,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoD5E;;;;;OAKG;IACU,iBAAiB,CAC5B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC;IAwDpB;;;;;OAKG;IACU,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE;;;;;OAKG;IACU,WAAW,CACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,iBAAiB,CAAC;IAoD7B;;;;;OAKG;IACU,SAAS,CACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAuF9B;;;;;OAKG;IACU,WAAW,CACtB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAuF9B;;;;OAIG;IACU,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DhE;;;;OAIG;IACU,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDpE;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;;;OAMG;IACI,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,QAAQ,IAAI;QAAE,MAAM,EAAE,GAAG,EAAE,CAAA;KAAE;YAItD,aAAa;CAwB5B"}
1
+ {"version":3,"file":"twitter.d.ts","sourceRoot":"","sources":["../src/twitter.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,mBAAmB,EAEnB,wBAAwB,EACxB,oBAAoB,EACpB,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,EAClB,4BAA4B,EAE5B,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,WAAW,CAAA;AAIlB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAGjE,OAAO,EAAE,yCAAyC,EAAE,MAAM,4DAA4D,CAAA;AACtH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AAMjF,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAA;AAKlD,qBAAa,OAAO;IAClB,SAAgB,OAAO,EAAE,cAAc,CAAA;IAKvC,OAAO;WAUa,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAYvD,mBAAmB,CAC9B,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yCAAyC,CAAC;IAkCxC,qBAAqB,CAChC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,MAAM,CAAC;IAeL,eAAe,CAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,QAAQ,CAAC;IAeP,kBAAkB,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,yCAAyC,CAAC;IAyCxC,qBAAqB,CAChC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,MAAM,EAAE,CAAC;IAcP,wBAAwB,CACnC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAoFlB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAc7D,eAAe,CAC1B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA+DlB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0D/D,iBAAiB,CAC5B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC;IA8DP,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAWnD,WAAW,CACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,iBAAiB,CAAC;IA0DhB,SAAS,CACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA6FjB,WAAW,CACtB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA4FjB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEnD,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,QAAQ,IAAI;QAAE,MAAM,EAAE,GAAG,EAAE,CAAA;KAAE;YAItD,aAAa;CAwB5B"}
package/dist/twitter.js CHANGED
@@ -10,33 +10,15 @@ const user_tweets_1 = require("./parser/user-tweets");
10
10
  const scraper_1 = require("./scraper");
11
11
  const converter_1 = require("./converter");
12
12
  const home_timeline_parser_1 = require("./parser/home-timeline-parser");
13
- /**
14
- * Twitter スクレイピングライブラリクラス
15
- */
16
13
  class Twitter {
17
- /**
18
- * @param scraper {@link TwitterScraper} インスタンス
19
- */
20
14
  constructor(scraper) {
21
15
  this.scraper = scraper;
22
16
  }
23
- /**
24
- * Twitter にログインする
25
- *
26
- * @param options ログインオプション
27
- * @returns Twitter インスタンス
28
- */
29
17
  static async login(options) {
30
18
  const scraper = new scraper_1.TwitterScraper(options);
31
19
  await scraper.login();
32
20
  return new Twitter(scraper);
33
21
  }
34
- /**
35
- * スクリーンネームからユーザー情報を取得する
36
- *
37
- * @param options ユーザー情報取得オプション
38
- * @returns ユーザー情報
39
- */
40
22
  async getUserByScreenName(options) {
41
23
  if (!options.screenName) {
42
24
  throw new exceptions_1.IllegalArgumentError('screenName is required');
@@ -60,12 +42,6 @@ class Twitter {
60
42
  }
61
43
  return response;
62
44
  }
63
- /**
64
- * ユーザー ID からスクリーンネームを取得する
65
- *
66
- * @param userId ユーザー ID
67
- * @returns スクリーンネーム
68
- */
69
45
  async getScreenNameByUserId(options) {
70
46
  if (!options.userId) {
71
47
  throw new exceptions_1.IllegalArgumentError('userId is required');
@@ -73,12 +49,6 @@ class Twitter {
73
49
  const user = await this.getRawUserByUserId(options);
74
50
  return user.data.user.result.legacy.screen_name;
75
51
  }
76
- /**
77
- * ユーザー ID からスクリーンネームを取得する
78
- *
79
- * @param userId ユーザー ID
80
- * @returns スクリーンネーム
81
- */
82
52
  async getUserByUserId(options) {
83
53
  if (!options.userId) {
84
54
  throw new exceptions_1.IllegalArgumentError('userId is required');
@@ -86,21 +56,13 @@ class Twitter {
86
56
  const user = await this.getRawUserByUserId(options);
87
57
  return converter_1.ObjectConverter.convertToFullUser(user);
88
58
  }
89
- /**
90
- * ユーザー ID からユーザー情報を取得する。ユーザー情報は生レスポンスで返す
91
- *
92
- * @param userId ユーザー ID
93
- * @returns ユーザー情報(生レスポンス)
94
- */
95
59
  async getRawUserByUserId(options) {
96
- // TODO: ユーザー情報をv1.1あたりのモデルに変換する処理を入れた方がいい
97
60
  if (!options.userId) {
98
61
  throw new exceptions_1.IllegalArgumentError('userId is required');
99
62
  }
100
63
  const page = await this.scraper.getScraperPage();
101
64
  let response;
102
65
  try {
103
- // UserByRestIdだとログインユーザー自分自身の場合に取得できない。
104
66
  response = await page.waitSingleResponse(`https://twitter.com/intent/user?user_id=${options.userId}`, 'GET', 'GRAPHQL', 'UserByScreenName');
105
67
  }
106
68
  catch (error) {
@@ -120,25 +82,11 @@ class Twitter {
120
82
  }
121
83
  return response;
122
84
  }
123
- /**
124
- * ホームタイムラインのツイートを取得する。
125
- *
126
- * @param options ホームタイムライン取得オプション
127
- * @returns ホームタイムラインのツイート
128
- */
129
85
  async getHomeTimelineTweets(options) {
130
86
  const rawTweets = await this.getHomeTimelineRawTweets(options);
131
87
  return rawTweets.map((rawTweet) => converter_1.ObjectConverter.convertToStatus(rawTweet));
132
88
  }
133
- /**
134
- * ホームタイムラインのツイートを取得する。ツイートは非正規化ツイート(CustomTweetObject)で返す
135
- *
136
- * @param options ホームタイムライン取得オプション
137
- * @returns ホームタイムラインのツイート(非正規化ツイート)
138
- */
139
89
  async getHomeTimelineRawTweets(options) {
140
- // おすすめタブ: HomeTimeline
141
- // フォロー中タブ: HomeLatestTimeline
142
90
  if (!options.timelineType) {
143
91
  throw new exceptions_1.IllegalArgumentError('timelineType is required');
144
92
  }
@@ -154,7 +102,6 @@ class Twitter {
154
102
  const results = [];
155
103
  try {
156
104
  await page.goto(url);
157
- // タブ選択
158
105
  const tabs = await page.page.$$('nav[aria-live="polite"] div[role="tablist"] > div');
159
106
  const tabIndex = options.timelineType === options_1.TimelineType.RECOMMEND ? 0 : 1;
160
107
  if (!tabs[tabIndex]) {
@@ -164,7 +111,6 @@ class Twitter {
164
111
  let lastResponseAt = Date.now();
165
112
  while (true) {
166
113
  if (Date.now() - lastResponseAt > 1000 * 30) {
167
- // 30秒以上レスポンスがない場合はタイムアウトとして終了
168
114
  break;
169
115
  }
170
116
  const getResponse = page.shiftResponse('GET', 'GRAPHQL', endpointName);
@@ -198,22 +144,10 @@ class Twitter {
198
144
  }
199
145
  return results;
200
146
  }
201
- /**
202
- * ツイートを検索する。
203
- *
204
- * @param options 検索オプション
205
- * @returns 検索結果
206
- */
207
147
  async searchTweets(options) {
208
148
  const rawTweets = await this.searchRawTweets(options);
209
149
  return rawTweets.map((rawTweet) => converter_1.ObjectConverter.convertToStatus(rawTweet));
210
150
  }
211
- /**
212
- * ツイートを検索する。ツイートは非正規化ツイート(CustomTweetObject)で返す
213
- *
214
- * @param options 検索オプション
215
- * @returns 検索結果(非正規化ツイート)
216
- */
217
151
  async searchRawTweets(options) {
218
152
  if (!options.query) {
219
153
  throw new exceptions_1.IllegalArgumentError('query is required');
@@ -233,7 +167,6 @@ class Twitter {
233
167
  let lastResponseAt = Date.now();
234
168
  while (true) {
235
169
  if (Date.now() - lastResponseAt > 1000 * 30) {
236
- // 30秒以上レスポンスがない場合はタイムアウトとして終了
237
170
  break;
238
171
  }
239
172
  const response = page.shiftResponse('GET', 'GRAPHQL', 'SearchTimeline');
@@ -264,12 +197,6 @@ class Twitter {
264
197
  }
265
198
  return results;
266
199
  }
267
- /**
268
- * ユーザーのツイートを取得する
269
- *
270
- * @param options ユーザーツイート取得オプション
271
- * @returns ユーザーのツイート
272
- */
273
200
  async getUserTweets(options) {
274
201
  if (!options.screenName) {
275
202
  throw new exceptions_1.IllegalArgumentError('screenName is required');
@@ -287,7 +214,6 @@ class Twitter {
287
214
  let lastResponseAt = Date.now();
288
215
  while (true) {
289
216
  if (Date.now() - lastResponseAt > 1000 * 30) {
290
- // 30秒以上レスポンスがない場合はタイムアウトとして終了
291
217
  break;
292
218
  }
293
219
  const response = page.shiftResponse('GET', 'GRAPHQL', 'UserTweets');
@@ -318,12 +244,6 @@ class Twitter {
318
244
  }
319
245
  return results;
320
246
  }
321
- /**
322
- * ユーザーのいいねしたツイートを取得する
323
- *
324
- * @param options ユーザーいいねツイート取得オプション
325
- * @returns ユーザーのツイート
326
- */
327
247
  async getUserLikeTweets(options) {
328
248
  if (!options.screenName) {
329
249
  throw new exceptions_1.IllegalArgumentError('screenName is required');
@@ -341,7 +261,6 @@ class Twitter {
341
261
  let lastResponseAt = Date.now();
342
262
  while (true) {
343
263
  if (Date.now() - lastResponseAt > 1000 * 30) {
344
- // 30秒以上レスポンスがない場合はタイムアウトとして終了
345
264
  break;
346
265
  }
347
266
  const response = page.shiftResponse('GET', 'GRAPHQL', 'Likes');
@@ -372,22 +291,10 @@ class Twitter {
372
291
  }
373
292
  return results;
374
293
  }
375
- /**
376
- * ツイートの情報を取得する
377
- *
378
- * @param options ツイート取得オプション
379
- * @returns ツイート
380
- */
381
294
  async getTweet(options) {
382
295
  const rawTweet = await this.getRawTweet(options);
383
296
  return converter_1.ObjectConverter.convertToStatus(rawTweet);
384
297
  }
385
- /**
386
- * ツイートの生情報を取得する
387
- *
388
- * @param options ツイート取得オプション
389
- * @returns ツイートの生情報
390
- */
391
298
  async getRawTweet(options) {
392
299
  if (!options.tweetId) {
393
300
  throw new exceptions_1.IllegalArgumentError('tweetId is required');
@@ -419,40 +326,23 @@ class Twitter {
419
326
  }
420
327
  catch (error) {
421
328
  await page.close();
422
- // if timeout
423
329
  if (error instanceof puppeteer_core_1.TimeoutError) {
424
330
  throw new exceptions_1.TwitterTimeoutError('Failed to operate twitter');
425
331
  }
426
332
  throw error;
427
333
  }
428
334
  }
429
- /**
430
- * ツイートをいいねする
431
- *
432
- * @param options いいねオプション
433
- * @returns いいねできたかどうかの文字列(Done)
434
- */
435
335
  async likeTweet(options) {
436
336
  if (!options.tweetId) {
437
337
  throw new exceptions_1.IllegalArgumentError('tweetId is required');
438
338
  }
439
339
  const page = await this.scraper.getScraperPage();
440
- // ツイートページを開く (30sec timeout)
441
- // -> 削除済みその他でツイートが存在しない場合は TwitterOperationError を投げる (TweetDetail のレスポンスがerrorになる)
442
- // いいねボタンが表示されるまで待つ (10sec timeout)
443
- // -> いいねボタンがすでにクリック済みの場合は AlreadyLikedError を投げる
444
- // -> いいねボタンが表示されなかった場合は TwitterOperationError を投げる
445
- // いいねボタンをクリックする
446
- // いいね完了まで待つ (10sec timeout)
447
- // -> いいね完了しなかった場合は TwitterOperationError を投げる
448
- // ツイートページを閉じる
449
340
  try {
450
341
  const url = `https://twitter.com/i/status/${options.tweetId}`;
451
342
  const responseDetail = await page.waitSingleResponse(url, 'GET', 'GRAPHQL', 'TweetDetail', 30000);
452
343
  if (!responseDetail) {
453
344
  throw new exceptions_1.TwitterOperationError('Failed to get tweet detail');
454
345
  }
455
- // いいねボタンが表示されるまで待つ
456
346
  const likeButtonSelector = 'article[tabindex="-1"] div[role="button"][data-testid="like"]';
457
347
  const unlikeButtonSelector = 'article[tabindex="-1"] div[role="button"][data-testid="unlike"]';
458
348
  const likeButton = await page.page.waitForSelector(`${likeButtonSelector}, ${unlikeButtonSelector}`, {
@@ -468,54 +358,34 @@ class Twitter {
468
358
  if (isLiked) {
469
359
  throw new exceptions_1.AlreadyLikedError();
470
360
  }
471
- // いいねボタンをクリックする
472
361
  const responseFavoritePromise = page.waitSingleResponse(null, 'POST', 'GRAPHQL', 'FavoriteTweet', 10000);
473
362
  await page.waitAndClick(likeButtonSelector, true);
474
- // いいね完了まで待つ
475
363
  const responseFavorite = await responseFavoritePromise;
476
364
  if (!responseFavorite) {
477
365
  throw new exceptions_1.TwitterOperationError('Failed to favorite tweet');
478
366
  }
479
- // ツイートページを閉じる
480
367
  await page.close();
481
368
  return responseFavorite.data.favorite_tweet;
482
369
  }
483
370
  catch (error) {
484
371
  await page.close();
485
- // if timeout
486
372
  if (error instanceof puppeteer_core_1.TimeoutError) {
487
373
  throw new exceptions_1.TwitterTimeoutError('Failed to operate twitter');
488
374
  }
489
375
  throw error;
490
376
  }
491
377
  }
492
- /**
493
- * ツイートのいいねを解除する
494
- *
495
- * @param options いいね解除オプション
496
- * @returns いいね解除できたかどうかの文字列(Done)
497
- */
498
378
  async unlikeTweet(options) {
499
379
  if (!options.tweetId) {
500
380
  throw new exceptions_1.IllegalArgumentError('tweetId is required');
501
381
  }
502
382
  const page = await this.scraper.getScraperPage();
503
- // ツイートページを開く (30sec timeout)
504
- // -> 削除済みその他でツイートが存在しない場合は TwitterOperationError を投げる (TweetDetail のレスポンスがerrorになる)
505
- // いいね済みボタンが表示されるまで待つ (10sec timeout)
506
- // -> いいねボタンがすでにクリック済みではない場合は NotLikedError を投げる
507
- // -> いいねボタンが表示されなかった場合は TwitterOperationError を投げる
508
- // いいねボタンをクリックする
509
- // いいね完了まで待つ (10sec timeout)
510
- // -> いいね完了しなかった場合は TwitterOperationError を投げる
511
- // ツイートページを閉じる
512
383
  try {
513
384
  const url = `https://twitter.com/i/status/${options.tweetId}`;
514
385
  const responseDetail = await page.waitSingleResponse(url, 'GET', 'GRAPHQL', 'TweetDetail', 30000);
515
386
  if (!responseDetail) {
516
387
  throw new exceptions_1.TwitterOperationError('Failed to get tweet detail');
517
388
  }
518
- // いいねボタンが表示されるまで待つ
519
389
  const likeButtonSelector = 'article[tabindex="-1"] div[role="button"][data-testid="like"]';
520
390
  const unlikeButtonSelector = 'article[tabindex="-1"] div[role="button"][data-testid="unlike"]';
521
391
  const unlikeButton = await page.page.waitForSelector(`${likeButtonSelector}, ${unlikeButtonSelector}`, {
@@ -531,32 +401,23 @@ class Twitter {
531
401
  if (!isLiked) {
532
402
  throw new exceptions_1.NotLikedError();
533
403
  }
534
- // いいねボタンをクリックする
535
404
  const responseFavoritePromise = page.waitSingleResponse(null, 'POST', 'GRAPHQL', 'UnfavoriteTweet', 10000);
536
405
  await page.waitAndClick(unlikeButtonSelector, true);
537
- // いいね完了まで待つ
538
406
  const responseFavorite = await responseFavoritePromise;
539
407
  if (!responseFavorite) {
540
408
  throw new exceptions_1.TwitterOperationError('Failed to favorite tweet');
541
409
  }
542
- // ツイートページを閉じる
543
410
  await page.close();
544
411
  return responseFavorite.data.unfavorite_tweet;
545
412
  }
546
413
  catch (error) {
547
414
  await page.close();
548
- // if timeout
549
415
  if (error instanceof puppeteer_core_1.TimeoutError) {
550
416
  throw new exceptions_1.TwitterTimeoutError('Failed to operate twitter');
551
417
  }
552
418
  throw error;
553
419
  }
554
420
  }
555
- /**
556
- * ユーザーをブロックする
557
- *
558
- * @param options ブロックオプション
559
- */
560
421
  async blockUser(options) {
561
422
  if (!options.screenName && !options.userId) {
562
423
  throw new exceptions_1.IllegalArgumentError('screenName or userId is required');
@@ -570,7 +431,6 @@ class Twitter {
570
431
  if (this.isErrorResponse(response)) {
571
432
  throw new exceptions_1.TwitterOperationError(response.errors[0].message);
572
433
  }
573
- // プロフィールの表示制限
574
434
  const viewProfileButton = await page.page.$('div[data-testid="emptyState"] div[role="button"]');
575
435
  if (viewProfileButton) {
576
436
  await viewProfileButton.click();
@@ -581,7 +441,6 @@ class Twitter {
581
441
  throw new exceptions_1.TwitterOperationError('Failed to get user status');
582
442
  }
583
443
  if (userStatus === 'unblock') {
584
- // 既にブロック済み
585
444
  throw new exceptions_1.AlreadyBlockedError();
586
445
  }
587
446
  await page.waitAndClick('div[data-testid="userActions"]', true);
@@ -594,18 +453,12 @@ class Twitter {
594
453
  }
595
454
  catch (error) {
596
455
  await page.close();
597
- // if timeout
598
456
  if (error instanceof puppeteer_core_1.TimeoutError) {
599
457
  throw new exceptions_1.TwitterTimeoutError('Failed to operate twitter');
600
458
  }
601
459
  throw error;
602
460
  }
603
461
  }
604
- /**
605
- * ユーザーのブロックを解除する
606
- *
607
- * @param options ブロック解除オプション
608
- */
609
462
  async unblockUser(options) {
610
463
  if (!options.screenName && !options.userId) {
611
464
  throw new exceptions_1.IllegalArgumentError('screenName or userId is required');
@@ -616,7 +469,6 @@ class Twitter {
616
469
  const page = await this.scraper.getScraperPage();
617
470
  await page.goto(url);
618
471
  try {
619
- // プロフィールの表示制限
620
472
  const viewProfileButton = await page.page.$('div[data-testid="emptyState"] div[role="button"]');
621
473
  if (viewProfileButton) {
622
474
  await viewProfileButton.click();
@@ -627,7 +479,6 @@ class Twitter {
627
479
  throw new exceptions_1.TwitterOperationError('Failed to get user status');
628
480
  }
629
481
  if (userStatus !== 'unblock') {
630
- // 既にブロック解除済み
631
482
  throw new exceptions_1.NotBlockedError();
632
483
  }
633
484
  await page.waitAndClick('div[data-testid="userActions"]', true);
@@ -640,32 +491,19 @@ class Twitter {
640
491
  }
641
492
  catch (error) {
642
493
  await page.close();
643
- // if timeout
644
494
  if (error instanceof puppeteer_core_1.TimeoutError) {
645
495
  throw new exceptions_1.TwitterTimeoutError('Failed to operate twitter');
646
496
  }
647
497
  throw error;
648
498
  }
649
499
  }
650
- /**
651
- * ブラウザを閉じる
652
- */
653
500
  async close() {
654
501
  await this.scraper.close();
655
502
  }
656
- /**
657
- * エラーレスポンスかどうかを判定する。
658
- * これを使うことでエラーがどうかは判定できるが、レスポンス型は保証されないので利用側で型保証されるメソッドを書いたほうがよい。
659
- *
660
- * @param response レスポンス
661
- * @returns エラーレスポンスかどうか
662
- */
663
503
  isErrorResponse(response) {
664
504
  return response.errors && response.errors.length > 0;
665
505
  }
666
506
  async getUserStatus(page) {
667
- // 1234567890-follow
668
- // 1234567890-unblock
669
507
  const testId = await page.evaluate(() => {
670
508
  return new Promise((resolve) => {
671
509
  const interval = setInterval(() => {
@@ -677,7 +515,7 @@ class Twitter {
677
515
  setTimeout(() => {
678
516
  clearInterval(interval);
679
517
  resolve();
680
- }, 1000 * 60 * 2); // 2分
518
+ }, 1000 * 60 * 2);
681
519
  });
682
520
  });
683
521
  return testId;