rsshub 1.0.0-master.f9ec483 → 1.0.0-master.fa1dcc5

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 (334) hide show
  1. package/lib/config.ts +42 -1
  2. package/lib/middleware/access-control.ts +3 -3
  3. package/lib/middleware/cache.ts +5 -3
  4. package/lib/middleware/template.test.ts +6 -0
  5. package/lib/middleware/template.tsx +3 -1
  6. package/lib/router.js +0 -6
  7. package/lib/routes/141jav/index.ts +1 -1
  8. package/lib/routes/141ppv/index.ts +1 -1
  9. package/lib/routes/36kr/hot-list.ts +1 -1
  10. package/lib/routes/36kr/index.ts +1 -1
  11. package/lib/routes/78dm/index.ts +429 -43
  12. package/lib/routes/78dm/namespace.ts +2 -0
  13. package/lib/routes/78dm/templates/description.art +17 -0
  14. package/lib/routes/abc/index.ts +10 -9
  15. package/lib/routes/aeon/category.ts +1 -1
  16. package/lib/routes/aeon/type.ts +1 -1
  17. package/lib/routes/afr/latest.ts +69 -0
  18. package/lib/routes/afr/namespace.ts +7 -0
  19. package/lib/routes/afr/navigation.ts +75 -0
  20. package/lib/routes/afr/query.ts +349 -0
  21. package/lib/routes/afr/utils.ts +80 -0
  22. package/lib/routes/aibase/discover.ts +1 -1
  23. package/lib/routes/aibase/news.ts +1 -1
  24. package/lib/routes/aibase/topic.ts +1 -1
  25. package/lib/routes/air-level/index.ts +49 -0
  26. package/lib/routes/air-level/levelrank.ts +65 -0
  27. package/lib/routes/air-level/namespace.ts +12 -0
  28. package/lib/routes/ajcass/namespace.ts +11 -0
  29. package/lib/routes/ajcass/shxyj.ts +73 -0
  30. package/lib/routes/alpinelinux/pkgs.ts +2 -2
  31. package/lib/routes/anime1/anime.ts +1 -1
  32. package/lib/routes/apnews/utils.ts +6 -2
  33. package/lib/routes/appleinsider/index.ts +1 -1
  34. package/lib/routes/aqara/region.ts +1 -1
  35. package/lib/routes/asus/bios.ts +0 -1
  36. package/lib/routes/baoyu/index.ts +57 -0
  37. package/lib/routes/baoyu/namespace.ts +8 -0
  38. package/lib/routes/bilibili/article.ts +37 -14
  39. package/lib/routes/bilibili/dynamic.ts +15 -7
  40. package/lib/routes/bilibili/followings-dynamic.ts +2 -2
  41. package/lib/routes/bilibili/manga-update.ts +3 -0
  42. package/lib/routes/bilibili/ranking.ts +188 -117
  43. package/lib/routes/bilibili/reply.ts +2 -0
  44. package/lib/routes/bilibili/templates/description.art +2 -0
  45. package/lib/routes/bing/daily-wallpaper.ts +5 -1
  46. package/lib/routes/bsky/posts.ts +0 -1
  47. package/lib/routes/bsky/templates/post.art +8 -1
  48. package/lib/routes/buaa/lib/space/newbook.ts +1 -1
  49. package/lib/routes/c114/namespace.ts +2 -0
  50. package/lib/routes/c114/roll.ts +71 -42
  51. package/lib/routes/cags/edu/index.ts +84 -0
  52. package/lib/routes/cags/namespace.ts +9 -0
  53. package/lib/routes/caixin/article.ts +1 -1
  54. package/lib/routes/caixin/blog.ts +2 -3
  55. package/lib/routes/caixin/category.ts +1 -1
  56. package/lib/routes/caixin/latest.ts +12 -16
  57. package/lib/routes/caixin/namespace.ts +1 -1
  58. package/lib/routes/caixin/utils-fulltext.ts +51 -0
  59. package/lib/routes/caixin/utils.ts +37 -37
  60. package/lib/routes/cara/likes.ts +1 -1
  61. package/lib/routes/cara/portfolio.ts +1 -1
  62. package/lib/routes/cara/timeline.ts +1 -1
  63. package/lib/routes/ccfa/index.ts +11 -11
  64. package/lib/routes/chub/characters.ts +1 -1
  65. package/lib/routes/cnbeta/namespace.ts +1 -1
  66. package/lib/routes/cngold/index.ts +195 -0
  67. package/lib/routes/cngold/namespace.ts +9 -0
  68. package/lib/routes/cnki/author.ts +120 -48
  69. package/lib/routes/cnki/utils.ts +4 -4
  70. package/lib/routes/coomer/artist.ts +1 -1
  71. package/lib/routes/coomer/namespace.ts +1 -1
  72. package/lib/routes/coomer/posts.ts +2 -2
  73. package/lib/routes/coomer/utils.ts +1 -1
  74. package/lib/routes/cpcaauto/index.ts +22 -22
  75. package/lib/routes/cs/zzkx.ts +1 -1
  76. package/lib/routes/csdn/blog.ts +17 -13
  77. package/lib/routes/cybersecurityventures/namespace.ts +7 -0
  78. package/lib/routes/cybersecurityventures/news.ts +121 -0
  79. package/lib/routes/cybersecurityventures/types.ts +17 -0
  80. package/lib/routes/daily/discussed.ts +22 -21
  81. package/lib/routes/daily/index.ts +14 -11
  82. package/lib/routes/daily/namespace.ts +1 -1
  83. package/lib/routes/daily/source.ts +186 -0
  84. package/lib/routes/daily/upvoted.ts +17 -17
  85. package/lib/routes/daily/user.ts +6 -23
  86. package/lib/routes/daily/utils.ts +27 -32
  87. package/lib/routes/dataguidance/index.ts +19 -30
  88. package/lib/routes/dcfever/news.ts +1 -1
  89. package/lib/routes/dcfever/reviews.ts +1 -1
  90. package/lib/routes/dcfever/trading-search.ts +1 -1
  91. package/lib/routes/dcfever/trading.ts +1 -1
  92. package/lib/routes/deeplearning/namespace.ts +3 -1
  93. package/lib/routes/deeplearning/templates/description.art +21 -0
  94. package/lib/routes/deeplearning/the-batch.ts +296 -0
  95. package/lib/routes/deepmind/blog.ts +1 -1
  96. package/lib/routes/digitalcameraworld/news.ts +1 -1
  97. package/lib/routes/discord/discord-api.ts +44 -2
  98. package/lib/routes/discord/search.ts +106 -0
  99. package/lib/routes/dn/news.ts +1 -1
  100. package/lib/routes/dockerhub/repositories.ts +42 -0
  101. package/lib/routes/dongqiudi/daily.ts +1 -1
  102. package/lib/routes/dw/namespace.ts +6 -0
  103. package/lib/routes/dw/news.ts +89 -0
  104. package/lib/routes/dw/rss.ts +62 -0
  105. package/lib/routes/dw/templates/description.art +23 -0
  106. package/lib/routes/dw/templates/liveblog.art +13 -0
  107. package/lib/routes/dw/templates/video.art +14 -0
  108. package/lib/routes/dw/utils.ts +172 -0
  109. package/lib/routes/ecnu/jwc.ts +5 -1
  110. package/lib/routes/espn/news.ts +1 -1
  111. package/lib/routes/fashionnetwork/namespace.ts +1 -1
  112. package/lib/routes/flyert/forum.ts +99 -0
  113. package/lib/routes/flyert/namespace.ts +1 -0
  114. package/lib/routes/flyert/templates/description.art +21 -0
  115. package/lib/routes/flyert/util.ts +188 -0
  116. package/lib/routes/follow/profile.ts +2 -2
  117. package/lib/routes/foresightnews/article.ts +1 -1
  118. package/lib/routes/foresightnews/column.ts +1 -1
  119. package/lib/routes/foresightnews/index.ts +3 -1
  120. package/lib/routes/foresightnews/news.ts +1 -1
  121. package/lib/routes/freecomputerbooks/index.ts +0 -10
  122. package/lib/routes/ftm/index.ts +1 -1
  123. package/lib/routes/furaffinity/art.ts +85 -0
  124. package/lib/routes/furaffinity/browse.ts +58 -0
  125. package/lib/routes/furaffinity/commissions.ts +55 -0
  126. package/lib/routes/furaffinity/home.ts +80 -0
  127. package/lib/routes/furaffinity/journal-comments.ts +64 -0
  128. package/lib/routes/furaffinity/journals.ts +56 -0
  129. package/lib/routes/furaffinity/namespace.ts +7 -0
  130. package/lib/routes/furaffinity/search.ts +72 -0
  131. package/lib/routes/furaffinity/shouts.ts +56 -0
  132. package/lib/routes/furaffinity/status.ts +58 -0
  133. package/lib/routes/furaffinity/submission-comments.ts +64 -0
  134. package/lib/{routes-deprecated/furaffinity/user.js → routes/furaffinity/user.ts} +53 -41
  135. package/lib/routes/furaffinity/watchers.ts +62 -0
  136. package/lib/routes/furaffinity/watching.ts +62 -0
  137. package/lib/routes/google/developers.ts +71 -0
  138. package/lib/routes/google/news.ts +26 -6
  139. package/lib/routes/gov/cbirc/index.ts +35 -35
  140. package/lib/routes/hamel/index.ts +81 -0
  141. package/lib/routes/hamel/namespace.ts +7 -0
  142. package/lib/routes/hellogithub/volume.ts +3 -0
  143. package/lib/routes/hket/index.ts +13 -1
  144. package/lib/routes/hostmonit/cloudflareyesv6.ts +1 -1
  145. package/lib/routes/hrbeu/sec/list.ts +80 -0
  146. package/lib/routes/hrbust/jwzx.ts +6 -0
  147. package/lib/routes/hunau/gfxy/index.ts +1 -1
  148. package/lib/routes/hunau/ied.ts +1 -1
  149. package/lib/routes/hunau/jwc.ts +1 -1
  150. package/lib/routes/hunau/xky/index.ts +1 -1
  151. package/lib/routes/hust/gs.ts +4 -3
  152. package/lib/routes/idolmaster/namespace.ts +7 -0
  153. package/lib/routes/idolmaster/news.ts +112 -0
  154. package/lib/routes/ieee/author.ts +95 -0
  155. package/lib/routes/ikea/cn/low-price.ts +2 -1
  156. package/lib/routes/imdb/chart.ts +1 -1
  157. package/lib/routes/inspirehep/author.ts +9 -1
  158. package/lib/routes/isct/namespace.ts +11 -0
  159. package/lib/routes/isct/news.ts +66 -0
  160. package/lib/routes/javtrailers/casts.ts +41 -0
  161. package/lib/routes/javtrailers/categories.ts +40 -0
  162. package/lib/routes/javtrailers/namespace.ts +7 -0
  163. package/lib/routes/javtrailers/studios.ts +39 -0
  164. package/lib/routes/javtrailers/templates/description.art +31 -0
  165. package/lib/routes/javtrailers/types.ts +59 -0
  166. package/lib/routes/javtrailers/utils.ts +48 -0
  167. package/lib/routes/jiemian/list.ts +1 -1
  168. package/lib/routes/jiuyangongshe/community.ts +1 -1
  169. package/lib/routes/jlu/phy/index.ts +55 -0
  170. package/lib/routes/joins/chinese.ts +13 -13
  171. package/lib/routes/kcna/news.ts +7 -5
  172. package/lib/routes/keep/user.ts +1 -1
  173. package/lib/routes/langchain/index.ts +74 -0
  174. package/lib/routes/langchain/namespace.ts +7 -0
  175. package/lib/routes/last-origin/namespace.ts +7 -0
  176. package/lib/routes/last-origin/news.ts +65 -0
  177. package/lib/routes/linkresearcher/index.ts +108 -46
  178. package/lib/routes/linkresearcher/namespace.ts +8 -2
  179. package/lib/routes/linkresearcher/templates/bilingual.art +7 -0
  180. package/lib/routes/linkresearcher/types.ts +103 -0
  181. package/lib/routes/liulinblog/itnews.ts +1 -1
  182. package/lib/routes/lofter/collection.ts +1 -1
  183. package/lib/routes/lofter/tag.ts +1 -1
  184. package/lib/routes/logrocket/index.ts +71 -0
  185. package/lib/routes/logrocket/namespace.ts +7 -0
  186. package/lib/routes/m-78/namespace.ts +7 -0
  187. package/lib/routes/m-78/news.ts +115 -0
  188. package/lib/routes/m-78/types.ts +13 -0
  189. package/lib/routes/mastodon/account-id.ts +1 -1
  190. package/lib/routes/mastodon/acct.ts +1 -1
  191. package/lib/routes/mastodon/timeline-local.ts +2 -2
  192. package/lib/routes/mastodon/timeline-remote.ts +2 -2
  193. package/lib/routes/mastodon/utils.ts +1 -1
  194. package/lib/routes/metacritic/index.ts +1 -1
  195. package/lib/routes/mi/utils.ts +1 -1
  196. package/lib/routes/mihoyo/bbs/official.ts +2 -1
  197. package/lib/routes/misskey/utils.ts +19 -1
  198. package/lib/routes/mittrchina/index.ts +2 -2
  199. package/lib/routes/natgeo/natgeo.ts +25 -24
  200. package/lib/routes/nbd/daily.ts +1 -1
  201. package/lib/routes/nielsberglund/index.ts +78 -0
  202. package/lib/routes/nielsberglund/namespace.ts +7 -0
  203. package/lib/routes/nytimes/rss.ts +57 -0
  204. package/lib/routes/openrice/chart.ts +68 -0
  205. package/lib/routes/openrice/templates/chart.art +9 -0
  206. package/lib/routes/openrice/voting.ts +84 -0
  207. package/lib/routes/oschina/news.ts +26 -7
  208. package/lib/routes/patreon/feed.ts +126 -0
  209. package/lib/routes/patreon/namespace.ts +7 -0
  210. package/lib/routes/patreon/templates/description.art +39 -0
  211. package/lib/routes/patreon/types.ts +387 -0
  212. package/lib/routes/pixiv/api/get-illust-detail.ts +22 -0
  213. package/lib/routes/pixiv/novel-api/content/nsfw.ts +73 -0
  214. package/lib/routes/pixiv/novel-api/content/sfw.ts +63 -0
  215. package/lib/routes/pixiv/novel-api/content/types.ts +254 -0
  216. package/lib/routes/pixiv/novel-api/content/utils.ts +133 -0
  217. package/lib/routes/pixiv/novel-api/series/nsfw.ts +84 -0
  218. package/lib/routes/pixiv/novel-api/series/sfw.ts +70 -0
  219. package/lib/routes/pixiv/novel-api/series/types.ts +94 -0
  220. package/lib/routes/pixiv/novel-api/user-novels/nsfw.ts +82 -0
  221. package/lib/routes/pixiv/novel-api/user-novels/sfw.ts +74 -0
  222. package/lib/routes/pixiv/novel-api/user-novels/types.ts +133 -0
  223. package/lib/routes/pixiv/novel-series.ts +52 -0
  224. package/lib/routes/pixiv/novels.ts +69 -44
  225. package/lib/routes/pixiv/utils.ts +3 -0
  226. package/lib/routes/plurk/anonymous.ts +1 -1
  227. package/lib/routes/plurk/hotlinks.ts +1 -1
  228. package/lib/routes/plurk/news.ts +1 -1
  229. package/lib/routes/plurk/search.ts +1 -1
  230. package/lib/routes/qstheory/index.ts +121 -0
  231. package/lib/routes/qstheory/magazine.ts +64 -0
  232. package/lib/routes/qstheory/namespace.ts +7 -0
  233. package/lib/routes/qstheory/utils.ts +25 -0
  234. package/lib/routes/ruc/ai.ts +1 -1
  235. package/lib/routes/scmp/coronavirus.ts +1 -1
  236. package/lib/routes/scu/jwc/tzgg.ts +75 -0
  237. package/lib/routes/scu/namespace.ts +7 -0
  238. package/lib/routes/scu/scupi/_utils.ts +62 -0
  239. package/lib/routes/scu/scupi/notice.ts +41 -0
  240. package/lib/routes/solidot/namespace.ts +1 -1
  241. package/lib/routes/stbu/jsjxy.ts +4 -1
  242. package/lib/routes/steam/search.ts +7 -0
  243. package/lib/routes/sycl/feeds.ts +1 -1
  244. package/lib/routes/syosetu/dev.ts +67 -0
  245. package/lib/routes/syosetu/index.ts +85 -0
  246. package/lib/routes/syosetu/namespace.ts +2 -2
  247. package/lib/routes/syosetu/ranking-isekai.ts +93 -0
  248. package/lib/routes/syosetu/ranking-r18.ts +192 -0
  249. package/lib/routes/syosetu/ranking.ts +285 -0
  250. package/lib/routes/syosetu/search.ts +161 -0
  251. package/lib/routes/syosetu/templates/description.art +73 -0
  252. package/lib/routes/syosetu/types/ranking-r18.ts +60 -0
  253. package/lib/routes/syosetu/types/ranking.ts +67 -0
  254. package/lib/routes/syosetu/types/search.ts +138 -0
  255. package/lib/routes/syosetu/utils.ts +50 -0
  256. package/lib/routes/telegram/channel.ts +31 -1
  257. package/lib/routes/telegram/scripts/get-telegram-session.mjs +16 -6
  258. package/lib/routes/telegram/stickerpack.ts +1 -1
  259. package/lib/routes/telegram/tglib/channel.ts +12 -9
  260. package/lib/routes/telegram/tglib/client.ts +13 -9
  261. package/lib/routes/test/index.ts +4 -0
  262. package/lib/routes/theblockbeats/index.ts +1 -1
  263. package/lib/routes/thegradient/index.ts +80 -0
  264. package/lib/routes/thegradient/namespace.ts +7 -0
  265. package/lib/routes/theinitium/app.ts +4 -0
  266. package/lib/routes/thepaper/channel.ts +1 -1
  267. package/lib/routes/thepaper/factpaper.ts +1 -1
  268. package/lib/routes/thepaper/featured.ts +1 -1
  269. package/lib/routes/thepaper/list.ts +1 -1
  270. package/lib/routes/thepaper/user.ts +174 -0
  271. package/lib/routes/tongji/sem/_utils.ts +65 -0
  272. package/lib/routes/tongji/sem/notice.ts +58 -0
  273. package/lib/routes/toutiao/a-bogus.ts +540 -0
  274. package/lib/routes/toutiao/namespace.ts +7 -0
  275. package/lib/routes/toutiao/templates/video.art +7 -0
  276. package/lib/routes/toutiao/types.ts +443 -0
  277. package/lib/routes/toutiao/user.ts +127 -0
  278. package/lib/routes/twitter/api/mobile-api/api.ts +8 -0
  279. package/lib/routes/twitter/api/web-api/utils.ts +21 -9
  280. package/lib/routes/twitter/namespace.ts +1 -0
  281. package/lib/routes/twitter/utils.ts +7 -1
  282. package/lib/routes/vertikal/latest.ts +73 -0
  283. package/lib/routes/vertikal/namespace.ts +7 -0
  284. package/lib/routes/vice/topic.ts +1 -1
  285. package/lib/routes/vocus/publication.ts +1 -1
  286. package/lib/routes/vocus/user.ts +1 -1
  287. package/lib/routes/wallstreetcn/calendar.ts +90 -0
  288. package/lib/routes/wallstreetcn/hot.ts +2 -2
  289. package/lib/routes/wallstreetcn/live.ts +1 -1
  290. package/lib/routes/wallstreetcn/news.ts +5 -3
  291. package/lib/routes/weibo/timeline.ts +3 -2
  292. package/lib/routes/wellcee/rent.ts +1 -1
  293. package/lib/routes/wufazhuce/namespace.ts +7 -0
  294. package/lib/routes/wufazhuce/one.ts +90 -0
  295. package/lib/routes/xiaoheihe/discount.ts +72 -28
  296. package/lib/routes/xiaohongshu/user.ts +40 -3
  297. package/lib/routes/xiaohongshu/util.ts +112 -105
  298. package/lib/routes/xsijishe/rank.ts +33 -7
  299. package/lib/routes/xueqiu/cookies.ts +13 -18
  300. package/lib/routes/yahoo/news/listid.ts +4 -1
  301. package/lib/routes/yahoo/news/provider-helper.ts +4 -1
  302. package/lib/routes/yahoo/news/provider.ts +4 -1
  303. package/lib/routes/yande/post.ts +13 -3
  304. package/lib/routes/youtube/user.ts +37 -25
  305. package/lib/routes/zhonglun/index.ts +5 -6
  306. package/lib/routes/zjut/cs/index.ts +1 -1
  307. package/lib/utils/got.ts +2 -1
  308. package/lib/utils/helpers.test.ts +13 -1
  309. package/lib/utils/helpers.ts +10 -0
  310. package/lib/utils/ofetch.ts +3 -0
  311. package/lib/utils/request-rewriter/fetch.test.ts +94 -0
  312. package/lib/utils/request-rewriter/fetch.ts +14 -1
  313. package/lib/views/error.tsx +1 -1
  314. package/package.json +40 -37
  315. package/lib/routes/78dm/templates/image.art +0 -1
  316. package/lib/routes/deeplearning/thebatch.ts +0 -74
  317. package/lib/routes/syosetu/chapter.ts +0 -87
  318. package/lib/routes/xiaohongshu/notes.ts +0 -39
  319. package/lib/routes-deprecated/furaffinity/browse.js +0 -44
  320. package/lib/routes-deprecated/furaffinity/commissions.js +0 -39
  321. package/lib/routes-deprecated/furaffinity/favorites.js +0 -56
  322. package/lib/routes-deprecated/furaffinity/gallery.js +0 -56
  323. package/lib/routes-deprecated/furaffinity/home.js +0 -72
  324. package/lib/routes-deprecated/furaffinity/journal-comments.js +0 -50
  325. package/lib/routes-deprecated/furaffinity/journals.js +0 -49
  326. package/lib/routes-deprecated/furaffinity/scraps.js +0 -56
  327. package/lib/routes-deprecated/furaffinity/search.js +0 -56
  328. package/lib/routes-deprecated/furaffinity/shouts.js +0 -40
  329. package/lib/routes-deprecated/furaffinity/status.js +0 -38
  330. package/lib/routes-deprecated/furaffinity/submission-comments.js +0 -50
  331. package/lib/routes-deprecated/furaffinity/watchers.js +0 -47
  332. package/lib/routes-deprecated/furaffinity/watching.js +0 -47
  333. package/lib/routes-deprecated/ieee/author.js +0 -30
  334. package/lib/routes-deprecated/qstheory/index.js +0 -122
@@ -0,0 +1,540 @@
1
+ /* eslint-disable unicorn/prefer-spread */
2
+ /* eslint-disable unicorn/prefer-math-trunc */
3
+ // @ts-nocheck
4
+
5
+ // Credits:
6
+ // https://github.com/NearHuiwen/TiktokDouyinCrawler/blob/main/utils/a_bogus.js
7
+ // https://github.com/110Art/a-bogus/blob/main/a_bogus.js
8
+ // https://github.com/ShilongLee/Crawler/blob/main/lib/js/douyin.js
9
+
10
+ // Reference:
11
+ // https://github.com/Endy-c/gm-crypt/blob/87bfc13f4b234c538d56798ed2457da16bc006ac/src/sm3.js
12
+
13
+ import logger from '@/utils/logger';
14
+
15
+ function rc4_encrypt(plaintext, key) {
16
+ const s: number[] = [];
17
+ for (let i = 0; i < 256; i++) {
18
+ s[i] = i;
19
+ }
20
+ for (let i = 0, j = 0; i < 256; i++) {
21
+ j = (j + s[i] + key.codePointAt(i % key.length)) % 256;
22
+ const temp = s[i];
23
+ s[i] = s[j];
24
+ s[j] = temp;
25
+ }
26
+
27
+ const cipher: string[] = [];
28
+ for (let i = 0, j = 0, k = 0; k < plaintext.length; k++) {
29
+ i = (i + 1) % 256;
30
+ j = (j + s[i]) % 256;
31
+ const temp = s[i];
32
+ s[i] = s[j];
33
+ s[j] = temp;
34
+ const t = (s[i] + s[j]) % 256;
35
+ cipher.push(String.fromCodePoint(s[t] ^ plaintext.codePointAt(k)));
36
+ }
37
+ return cipher.join('');
38
+ }
39
+
40
+ function rotateLeft32(e, r) {
41
+ return ((e << (r %= 32)) | (e >>> (32 - r))) >>> 0;
42
+ }
43
+
44
+ function T(j) {
45
+ if (0 <= j && j < 16) {
46
+ return 0x79_cc_45_19;
47
+ } else if (16 <= j && j < 64) {
48
+ return 0x7a_87_9d_8a;
49
+ } else {
50
+ logger.error('invalid j for constant Tj');
51
+ }
52
+ }
53
+
54
+ function FF(j, x, y, z) {
55
+ if (0 <= j && j < 16) {
56
+ return (x ^ y ^ z) >>> 0;
57
+ } else if (16 <= j && j < 64) {
58
+ return ((x & y) | (x & z) | (y & z)) >>> 0;
59
+ } else {
60
+ logger.error('invalid j for bool function FF');
61
+ return 0;
62
+ }
63
+ }
64
+
65
+ function GG(j, x, y, z) {
66
+ if (0 <= j && j < 16) {
67
+ return (x ^ y ^ z) >>> 0;
68
+ } else if (16 <= j && j < 64) {
69
+ return ((x & y) | (~x & z)) >>> 0;
70
+ } else {
71
+ logger.error('invalid j for bool function GG');
72
+ return 0;
73
+ }
74
+ }
75
+
76
+ function reset(this: any) {
77
+ this.reg[0] = 0x73_80_16_6f;
78
+ this.reg[1] = 0x49_14_b2_b9;
79
+ this.reg[2] = 0x17_24_42_d7;
80
+ this.reg[3] = 0xda_8a_06_00;
81
+ this.reg[4] = 0xa9_6f_30_bc;
82
+ this.reg[5] = 0x16_31_38_aa;
83
+ this.reg[6] = 0xe3_8d_ee_4d;
84
+ this.reg[7] = 0xb0_fb_0e_4e;
85
+ this.chunk = [];
86
+ this.size = 0;
87
+ }
88
+
89
+ function strToBytes(str) {
90
+ const n = encodeURIComponent(str).replaceAll(/%([0-9A-F]{2})/g, (e, r) => String.fromCodePoint('0x' + r));
91
+ const a = Array.from({ length: n.length });
92
+ Array.prototype.forEach.call(n, (e, r) => {
93
+ a[r] = e.codePointAt(0);
94
+ });
95
+ return a;
96
+ }
97
+
98
+ function write(this: any, message) {
99
+ const a = typeof message === 'string' ? strToBytes(message) : message;
100
+ this.size += a.length;
101
+ let f = 64 - this.chunk.length;
102
+ if (a.length < f) {
103
+ this.chunk = this.chunk.concat(a);
104
+ } else {
105
+ this.chunk = this.chunk.concat(a.slice(0, f));
106
+ while (this.chunk.length >= 64) {
107
+ this._compress(this.chunk);
108
+ this.chunk = f < a.length ? a.slice(f, Math.min(f + 64, a.length)) : [];
109
+ f += 64;
110
+ }
111
+ }
112
+ }
113
+
114
+ function sum(this: any, message, encoding) {
115
+ if (message) {
116
+ this.reset();
117
+ this.write(message);
118
+ }
119
+ this._fill();
120
+ for (let f = 0; f < this.chunk.length; f += 64) {
121
+ this._compress(this.chunk.slice(f, f + 64));
122
+ }
123
+ let digest;
124
+ if (encoding === 'hex') {
125
+ digest = '';
126
+ for (let f = 0; f < 8; f++) {
127
+ digest += se(this.reg[f].toString(16), 8, '0');
128
+ }
129
+ } else {
130
+ digest = Array.from({ length: 32 });
131
+ for (let f = 0; f < 8; f++) {
132
+ let c = this.reg[f];
133
+ digest[4 * f + 3] = (255 & c) >>> 0;
134
+ c >>>= 8;
135
+ digest[4 * f + 2] = (255 & c) >>> 0;
136
+ c >>>= 8;
137
+ digest[4 * f + 1] = (255 & c) >>> 0;
138
+ c >>>= 8;
139
+ digest[4 * f] = (255 & c) >>> 0;
140
+ }
141
+ }
142
+ this.reset();
143
+ return digest;
144
+ }
145
+
146
+ function expand(e) {
147
+ const r: number[] = Array.from({ length: 132 });
148
+ for (let t = 0; t < 16; t++) {
149
+ r[t] = e[4 * t] << 24;
150
+ r[t] |= e[4 * t + 1] << 16;
151
+ r[t] |= e[4 * t + 2] << 8;
152
+ r[t] |= e[4 * t + 3];
153
+ r[t] >>>= 0;
154
+ }
155
+ for (let n = 16; n < 68; n++) {
156
+ let a = r[n - 16] ^ r[n - 9] ^ rotateLeft32(r[n - 3], 15);
157
+ a = a ^ rotateLeft32(a, 15) ^ rotateLeft32(a, 23);
158
+ r[n] = (a ^ rotateLeft32(r[n - 13], 7) ^ r[n - 6]) >>> 0;
159
+ }
160
+ for (let n = 0; n < 64; n++) {
161
+ r[n + 68] = (r[n] ^ r[n + 4]) >>> 0;
162
+ }
163
+ return r;
164
+ }
165
+
166
+ function _compress(this: any, t) {
167
+ if (t < 64) {
168
+ logger.error('compress error: not enough data');
169
+ return;
170
+ } else {
171
+ const f = expand(t);
172
+ const i = this.reg.slice(0);
173
+ for (let c = 0; c < 64; c++) {
174
+ let o = rotateLeft32(i[0], 12) + i[4] + rotateLeft32(T(c), c);
175
+ o = (0xff_ff_ff_ff & o) >>> 0;
176
+ o = rotateLeft32(o, 7);
177
+
178
+ const s = (o ^ rotateLeft32(i[0], 12)) >>> 0;
179
+ let u = FF(c, i[0], i[1], i[2]);
180
+ u = u + i[3] + s + f[c + 68];
181
+ u = (0xff_ff_ff_ff & u) >>> 0;
182
+
183
+ let b = GG(c, i[4], i[5], i[6]);
184
+ b = b + i[7] + o + f[c];
185
+ b = (0xff_ff_ff_ff & b) >>> 0;
186
+ i[3] = i[2];
187
+ i[2] = rotateLeft32(i[1], 9);
188
+ i[1] = i[0];
189
+ i[0] = u;
190
+ i[7] = i[6];
191
+ i[6] = rotateLeft32(i[5], 19);
192
+ i[5] = i[4];
193
+ i[4] = (b ^ rotateLeft32(b, 9) ^ rotateLeft32(b, 17)) >>> 0;
194
+ }
195
+ for (let l = 0; l < 8; l++) {
196
+ this.reg[l] = (this.reg[l] ^ i[l]) >>> 0;
197
+ }
198
+ }
199
+ }
200
+
201
+ function _fill(this: any) {
202
+ const a = 8 * this.size;
203
+ let f = this.chunk.push(128) % 64;
204
+ for (64 - f < 8 && (f -= 64); f < 56; f++) {
205
+ this.chunk.push(0);
206
+ }
207
+ for (let i = 0; i < 4; i++) {
208
+ const c = Math.floor(a / 0x1_00_00_00_00);
209
+ this.chunk.push((c >>> (8 * (3 - i))) & 0xff);
210
+ }
211
+ for (let i = 0; i < 4; i++) {
212
+ this.chunk.push((a >>> (8 * (3 - i))) & 0xff);
213
+ }
214
+ }
215
+
216
+ function SM3(this: any) {
217
+ this.reg = [];
218
+ this.chunk = [];
219
+ this.size = 0;
220
+ this.reset();
221
+ }
222
+ SM3.prototype.reset = reset;
223
+ SM3.prototype.write = write;
224
+ SM3.prototype.sum = sum;
225
+ SM3.prototype._compress = _compress;
226
+ SM3.prototype._fill = _fill;
227
+
228
+ function result_encrypt(long_str: string, num: 's0' | 's1' | 's2' | 's3' | 's4') {
229
+ const s_obj = {
230
+ s0: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
231
+ s1: 'Dkdpgh4ZKsQB80/Mfvw36XI1R25+WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=',
232
+ s2: 'Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=',
233
+ s3: 'ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe',
234
+ s4: 'Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe',
235
+ };
236
+ const constant = {
237
+ '0': 16_515_072,
238
+ '1': 258048,
239
+ '2': 4032,
240
+ str: s_obj[num],
241
+ };
242
+
243
+ let result = '';
244
+ let lound = 0;
245
+ let long_int = get_long_int(lound, long_str);
246
+ for (let i = 0; i < (long_str.length / 3) * 4; i++) {
247
+ if (Math.floor(i / 4) !== lound) {
248
+ lound += 1;
249
+ long_int = get_long_int(lound, long_str);
250
+ }
251
+ const key = i % 4;
252
+ let temp_int: number;
253
+ switch (key) {
254
+ case 0:
255
+ temp_int = (long_int & constant['0']) >> 18;
256
+ result += constant.str.charAt(temp_int);
257
+ break;
258
+ case 1:
259
+ temp_int = (long_int & constant['1']) >> 12;
260
+ result += constant.str.charAt(temp_int);
261
+ break;
262
+ case 2:
263
+ temp_int = (long_int & constant['2']) >> 6;
264
+ result += constant.str.charAt(temp_int);
265
+ break;
266
+ case 3:
267
+ temp_int = long_int & 63;
268
+ result += constant.str.charAt(temp_int);
269
+ break;
270
+ default:
271
+ break;
272
+ }
273
+ }
274
+ return result;
275
+ }
276
+
277
+ function get_long_int(round, long_str) {
278
+ round = round * 3;
279
+ return (long_str.codePointAt(round) << 16) | (long_str.codePointAt(round + 1) << 8) | long_str.codePointAt(round + 2);
280
+ }
281
+
282
+ function gener_random(random, option) {
283
+ return [
284
+ (random & 255 & 170) | (option[0] & 85), // 163
285
+ (random & 255 & 85) | (option[0] & 170), // 87
286
+ ((random >> 8) & 255 & 170) | (option[1] & 85), // 37
287
+ ((random >> 8) & 255 & 85) | (option[1] & 170), // 41
288
+ ];
289
+ }
290
+
291
+ // ////////////////////////////////////////////
292
+ function generate_rc4_bb_str(url_search_params, user_agent, window_env_str, suffix = 'cus', Arguments = [0, 1, 14]) {
293
+ const sm3 = new SM3();
294
+ const start_time = Date.now();
295
+ /**
296
+ * 进行3次加密处理
297
+ * 1: url_search_params两次sm3之的结果
298
+ * 2: 对后缀两次sm3之的结果
299
+ * 3: 对ua处理之后的结果
300
+ */
301
+ // url_search_params两次sm3之的结果
302
+ const url_search_params_list = sm3.sum(sm3.sum(url_search_params + suffix));
303
+ // 对后缀两次sm3之的结果
304
+ const cus = sm3.sum(sm3.sum(suffix));
305
+ // 对ua处理之后的结果
306
+ const ua = sm3.sum(result_encrypt(rc4_encrypt(user_agent, Reflect.apply(String.fromCharCode, null, [0.003_906_25, 1, 14])), 's3'));
307
+ //
308
+ const end_time = Date.now();
309
+ // b
310
+ const b = {
311
+ 8: 3, // 固定
312
+ 10: end_time, // 3次加密结束时间
313
+ 15: {
314
+ aid: 6383,
315
+ pageId: 6241,
316
+ boe: false,
317
+ ddrt: 7,
318
+ paths: {
319
+ include: [{}, {}, {}, {}, {}, {}, {}],
320
+ exclude: [],
321
+ },
322
+ track: {
323
+ mode: 0,
324
+ delay: 300,
325
+ paths: [],
326
+ },
327
+ dump: true,
328
+ rpU: '',
329
+ },
330
+ 16: start_time, // 3次加密开始时间
331
+ 18: 44, // 固定
332
+ 19: [1, 0, 1, 5],
333
+ };
334
+
335
+ // 3次加密开始时间
336
+ b[20] = (b[16] >> 24) & 255;
337
+ b[21] = (b[16] >> 16) & 255;
338
+ b[22] = (b[16] >> 8) & 255;
339
+ b[23] = b[16] & 255;
340
+ b[24] = (b[16] / 256 / 256 / 256 / 256) >> 0;
341
+ b[25] = (b[16] / 256 / 256 / 256 / 256 / 256) >> 0;
342
+
343
+ // 参数Arguments [0, 1, 14, ...]
344
+ // let Arguments = [0, 1, 14]
345
+ b[26] = (Arguments[0] >> 24) & 255;
346
+ b[27] = (Arguments[0] >> 16) & 255;
347
+ b[28] = (Arguments[0] >> 8) & 255;
348
+ b[29] = Arguments[0] & 255;
349
+
350
+ b[30] = (Arguments[1] / 256) & 255;
351
+ b[31] = Arguments[1] % 256 & 255;
352
+ b[32] = (Arguments[1] >> 24) & 255;
353
+ b[33] = (Arguments[1] >> 16) & 255;
354
+
355
+ b[34] = (Arguments[2] >> 24) & 255;
356
+ b[35] = (Arguments[2] >> 16) & 255;
357
+ b[36] = (Arguments[2] >> 8) & 255;
358
+ b[37] = Arguments[2] & 255;
359
+
360
+ // (url_search_params + "cus") 两次sm3之的结果
361
+ /** let url_search_params_list = [
362
+ 91, 186, 35, 86, 143, 253, 6, 76,
363
+ 34, 21, 167, 148, 7, 42, 192, 219,
364
+ 188, 20, 182, 85, 213, 74, 213, 147,
365
+ 37, 155, 93, 139, 85, 118, 228, 213
366
+ ]*/
367
+ b[38] = url_search_params_list[21];
368
+ b[39] = url_search_params_list[22];
369
+
370
+ // ("cus") 对后缀两次sm3之的结果
371
+ /**
372
+ * let cus = [
373
+ 136, 101, 114, 147, 58, 77, 207, 201,
374
+ 215, 162, 154, 93, 248, 13, 142, 160,
375
+ 105, 73, 215, 241, 83, 58, 51, 43,
376
+ 255, 38, 168, 141, 216, 194, 35, 236
377
+ ]*/
378
+ b[40] = cus[21];
379
+ b[41] = cus[22];
380
+
381
+ // 对ua处理之后的结果
382
+ /**
383
+ * let ua = [
384
+ 129, 190, 70, 186, 86, 196, 199, 53,
385
+ 99, 38, 29, 209, 243, 17, 157, 69,
386
+ 147, 104, 53, 23, 114, 126, 66, 228,
387
+ 135, 30, 168, 185, 109, 156, 251, 88
388
+ ]*/
389
+ b[42] = ua[23];
390
+ b[43] = ua[24];
391
+
392
+ // 3次加密结束时间
393
+ b[44] = (b[10] >> 24) & 255;
394
+ b[45] = (b[10] >> 16) & 255;
395
+ b[46] = (b[10] >> 8) & 255;
396
+ b[47] = b[10] & 255;
397
+ b[48] = b[8];
398
+ b[49] = (b[10] / 256 / 256 / 256 / 256) >> 0;
399
+ b[50] = (b[10] / 256 / 256 / 256 / 256 / 256) >> 0;
400
+
401
+ // object配置项
402
+ b[51] = b[15].pageId;
403
+ b[52] = (b[15].pageId >> 24) & 255;
404
+ b[53] = (b[15].pageId >> 16) & 255;
405
+ b[54] = (b[15].pageId >> 8) & 255;
406
+ b[55] = b[15].pageId & 255;
407
+
408
+ b[56] = b[15].aid;
409
+ b[57] = b[15].aid & 255;
410
+ b[58] = (b[15].aid >> 8) & 255;
411
+ b[59] = (b[15].aid >> 16) & 255;
412
+ b[60] = (b[15].aid >> 24) & 255;
413
+
414
+ // 中间进行了环境检测
415
+ // 代码索引: 2496 索引值: 17 (索引64关键条件)
416
+ // '1536|747|1536|834|0|30|0|0|1536|834|1536|864|1525|747|24|24|Win32'.charCodeAt()得到65位数组
417
+ /**
418
+ * let window_env_list = [49, 53, 51, 54, 124, 55, 52, 55, 124, 49, 53, 51, 54, 124, 56, 51, 52, 124, 48, 124, 51,
419
+ * 48, 124, 48, 124, 48, 124, 49, 53, 51, 54, 124, 56, 51, 52, 124, 49, 53, 51, 54, 124, 56,
420
+ * 54, 52, 124, 49, 53, 50, 53, 124, 55, 52, 55, 124, 50, 52, 124, 50, 52, 124, 87, 105, 110,
421
+ * 51, 50]
422
+ */
423
+ const window_env_list: number[] = [];
424
+ for (let index = 0; index < window_env_str.length; index++) {
425
+ window_env_list.push(window_env_str.codePointAt(index));
426
+ }
427
+ b[64] = window_env_list.length;
428
+ b[65] = b[64] & 255;
429
+ b[66] = (b[64] >> 8) & 255;
430
+
431
+ b[69] = [].length;
432
+ b[70] = b[69] & 255;
433
+ b[71] = (b[69] >> 8) & 255;
434
+
435
+ b[72] =
436
+ b[18] ^
437
+ b[20] ^
438
+ b[26] ^
439
+ b[30] ^
440
+ b[38] ^
441
+ b[40] ^
442
+ b[42] ^
443
+ b[21] ^
444
+ b[27] ^
445
+ b[31] ^
446
+ b[35] ^
447
+ b[39] ^
448
+ b[41] ^
449
+ b[43] ^
450
+ b[22] ^
451
+ b[28] ^
452
+ b[32] ^
453
+ b[36] ^
454
+ b[23] ^
455
+ b[29] ^
456
+ b[33] ^
457
+ b[37] ^
458
+ b[44] ^
459
+ b[45] ^
460
+ b[46] ^
461
+ b[47] ^
462
+ b[48] ^
463
+ b[49] ^
464
+ b[50] ^
465
+ b[24] ^
466
+ b[25] ^
467
+ b[52] ^
468
+ b[53] ^
469
+ b[54] ^
470
+ b[55] ^
471
+ b[57] ^
472
+ b[58] ^
473
+ b[59] ^
474
+ b[60] ^
475
+ b[65] ^
476
+ b[66] ^
477
+ b[70] ^
478
+ b[71];
479
+ let bb = [
480
+ b[18],
481
+ b[20],
482
+ b[52],
483
+ b[26],
484
+ b[30],
485
+ b[34],
486
+ b[58],
487
+ b[38],
488
+ b[40],
489
+ b[53],
490
+ b[42],
491
+ b[21],
492
+ b[27],
493
+ b[54],
494
+ b[55],
495
+ b[31],
496
+ b[35],
497
+ b[57],
498
+ b[39],
499
+ b[41],
500
+ b[43],
501
+ b[22],
502
+ b[28],
503
+ b[32],
504
+ b[60],
505
+ b[36],
506
+ b[23],
507
+ b[29],
508
+ b[33],
509
+ b[37],
510
+ b[44],
511
+ b[45],
512
+ b[59],
513
+ b[46],
514
+ b[47],
515
+ b[48],
516
+ b[49],
517
+ b[50],
518
+ b[24],
519
+ b[25],
520
+ b[65],
521
+ b[66],
522
+ b[70],
523
+ b[71],
524
+ ];
525
+ bb = bb.concat(window_env_list).concat(b[72]);
526
+ return rc4_encrypt(String.fromCharCode.apply(null, bb), Reflect.apply(String.fromCharCode, null, [121]));
527
+ }
528
+
529
+ function generate_random_str() {
530
+ let random_str_list: number[] = [];
531
+ random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [3, 45]));
532
+ random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [1, 0]));
533
+ random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [1, 5]));
534
+ return String.fromCharCode.apply(null, random_str_list);
535
+ }
536
+
537
+ export function generate_a_bogus(url_search_params, user_agent) {
538
+ const result_str = generate_random_str() + generate_rc4_bb_str(url_search_params, user_agent, '1536|747|1536|834|0|30|0|0|1536|834|1536|864|1525|747|24|24|Win32');
539
+ return result_encrypt(result_str, 's4') + '=';
540
+ }
@@ -0,0 +1,7 @@
1
+ import type { Namespace } from '@/types';
2
+
3
+ export const namespace: Namespace = {
4
+ name: '今日头条',
5
+ url: 'www.toutiao.com',
6
+ lang: 'zh-CN',
7
+ };
@@ -0,0 +1,7 @@
1
+ <video controls preload="metadata"
2
+ {{ if poster }}
3
+ poster="{{ poster }}"
4
+ {{ /if }}
5
+ >
6
+ <source src="{{ url }}" type="video/mp4" />
7
+ </video>