diff --git a/Dockerfile b/Dockerfile index 1305fc78ee..af82c446bc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,11 +2,13 @@ FROM node:16-bullseye as dep-builder # Here we use the non-slim image to provide build-time deps (compilers and python), thus no need to install later. # This effectively speeds up qemu-based cross-build. +# no longer needed +#RUN ln -sf /bin/bash /bin/sh + WORKDIR /app # place ARG statement before RUN statement which need it to avoid cache miss ARG USE_CHINA_NPM_REGISTRY=0 -ARG TARGETPLATFORM RUN \ set -ex && \ if [ "$USE_CHINA_NPM_REGISTRY" = 1 ]; then \ @@ -18,15 +20,6 @@ RUN \ COPY ./yarn.lock /app/ COPY ./package.json /app/ -# required for building canvas in arm64 and arm/v7 (introduce in #10954) -RUN \ - set -ex && \ - if [ "$TARGETPLATFORM" != "linux/amd64" ]; then \ - apt-get update && \ - apt-get install -yq --no-install-recommends \ - libpango1.0-dev ; \ - fi; - # lazy install Chromium to avoid cache miss, only install production dependencies to minimize the image size RUN \ set -ex && \ diff --git a/assets/radar-rules.js b/assets/radar-rules.js index 627147be90..bf9dec0460 100644 --- a/assets/radar-rules.js +++ b/assets/radar-rules.js @@ -1,5 +1,5 @@ ({ - // '8world.com': { _name: '8视界', '.': [{ title: '分类', docs: 'https://docs.rsshub.app/new-media.html#_8-shi-jie-fen-lei', source: ['/:category', '/'], target: '/8world/:category?' }] }, + '8world.com': { _name: '8视界', '.': [{ title: '分类', docs: 'https://docs.rsshub.app/new-media.html#_8-shi-jie-fen-lei', source: ['/:category', '/'], target: '/8world/:category?' }] }, 'aamacau.com': { _name: '論盡媒體 AllAboutMacau Media', '.': [{ title: '话题', docs: 'https://docs.rsshub.app/new-media.html#lun-jin-mei-ti-allaboutmacau-media-hua-ti', source: ['/'], target: '/:category?/:id?' }] }, 'eprice.com.tw': { _name: 'ePrice', '.': [{ title: 'ePrice 比價王', docs: 'https://docs.rsshub.app/new-media.html#eprice', source: ['/'], target: '/:region?' }] }, 'eprice.com.hk': { _name: 'ePrice', '.': [{ title: 'ePrice 香港', docs: 'https://docs.rsshub.app/new-media.html#eprice', source: ['/'], target: '/:region?' }] }, diff --git a/docs/anime.md b/docs/anime.md index 8232fb643b..8e897496ff 100644 --- a/docs/anime.md +++ b/docs/anime.md @@ -246,12 +246,6 @@ pageClass: routes 见 [#bilibili](/social-media.html#bilibili) -## CCC 創作集 - -### 漫畫 - - - ## DLsite ### 当前日期发售的新产品 diff --git a/docs/en/new-media.md b/docs/en/new-media.md index 82b5783831..ddde6afd89 100644 --- a/docs/en/new-media.md +++ b/docs/en/new-media.md @@ -762,8 +762,6 @@ Compared to the official one, this feed: ## The Verge -### The Verge - Provides a better reading experience (full text articles) over the official one. diff --git a/docs/en/traditional-media.md b/docs/en/traditional-media.md index ef793f5c7b..0be094d436 100644 --- a/docs/en/traditional-media.md +++ b/docs/en/traditional-media.md @@ -56,64 +56,6 @@ The following are some of the supported Channel and Topic ids. -## Aljazeera - -### News - - - -Language - -| Arbric | Chinese | English | -| ------ | ------- | ------- | -| arbric | chinese | english | - -::: tip Tip - -If you subscribe to [Al Jazeera English - Economy](https://www.aljazeera.com/economy), whose language is `english` and whose path is `economy`, you can get the route as [`/aljazeera/english/economy`](https://rsshub.app/aljazeera/english/economy) - -If you subscribe to [Al Jazeera Chinese - Political](https://chinese.aljazeera.net/news/political) with language `chinese` and path `news/political`, you can get the route as [`/aljazeera/chinese/news/political`](https://rsshub.app/aljazeera/chinese/news/political) - -::: - - - -### Tag - - - -Language - -| Arbric | Chinese | English | -| ------ | ------- | ------- | -| arbric | chinese | english | - -::: tip Tip - -If you subscribe to [Al Jazeera English - Science and Technology](https://www.aljazeera.com/tag/science-and-technology), whose language is `english` and whose path is `science-and-technology`, you can get the route as [`/aljazeera/english/tag/science-and-technology`](https://rsshub.app/aljazeera/english/tag/science-and-technology) - -::: - - - -### Official RSS - - - -Language - -| Arbric | Chinese | English | -| ------ | ------- | ------- | -| arbric | chinese | english | - -::: tip Tip - -There is no RSS source for Al Jazeera Chinese, returning homepage content by default - -::: - - - ## AP News ### Topics diff --git a/docs/finance.md b/docs/finance.md index 8d9679eefe..daa1705f4e 100644 --- a/docs/finance.md +++ b/docs/finance.md @@ -525,10 +525,6 @@ TokenInsight 官方亦有提供 RSS,可参考 - ### 用户动态 @@ -631,31 +627,6 @@ TokenInsight 官方亦有提供 RSS,可参考 -## 智通财经网 - -### 推荐 - - - -| id | 栏目 | -| ------------ | --- | -| recommend | 推荐 | -| hkstock | 港股 | -| meigu | 美股 | -| agu | 沪深 | -| ct | 创投 | -| esg | ESG | -| aqs | 券商 | -| ajj | 基金 | -| focus | 要闻 | -| announcement | 公告 | -| research | 研究 | -| shares | 新股 | -| bazaar | 市场 | -| company | 公司 | - - - ## 中国人民银行 ### 沟通交流 diff --git a/docs/government.md b/docs/government.md index 81d7f5ef48..182ed343d7 100644 --- a/docs/government.md +++ b/docs/government.md @@ -44,18 +44,6 @@ pageClass: routes -## 北京市保障房中心有限公司 - -### 北京市共有产权住房租赁服务平台 - - - -| 通知公告 | 项目介绍 | -| :----------: | :-----: | -| announcement | project | - - - ## 北京市教育委员会 ### 通知公告 diff --git a/docs/multimedia.md b/docs/multimedia.md index 79b3c53f99..d243536175 100644 --- a/docs/multimedia.md +++ b/docs/multimedia.md @@ -1656,55 +1656,9 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性 ## 云听 -### 专辑 +### 电台节目 - - -如果订阅 [中国相声榜](https://www.radio.cn/pc-portal/sanji/detail.html?columnId=15682090498666),其 URL 为 ,可以得到 `columnId` 为 `15682090498666` - -所以对应路由为 [`/radio/album/15682090498666`](https://rsshub.app/radio/album/15682090498666) - -::: tip 提示 - -部分专辑不适用该路由,此时可以尝试 [节目](#yun-ting-jie-mu) 路由 - -::: - - - -### 节目 - - - -如果订阅 [共和国追梦人](http://www.radio.cn/pc-portal/sanji/detail.html?columnId=1552135),其 URL 为 ,可以得到 `columnId` 为 `1552135` - -所以对应路由为 [`/radio/1552135`](https://rsshub.app/radio/1552135) - -::: tip 提示 - -该路由仅适用于更新时间较早的电台节目,如 [共和国追梦人](http://www.radio.cn/pc-portal/sanji/detail.html?columnId=1552135) - -与适用于 [专辑](#yun-ting-zhuan-ji) 路由的专辑其 `columnId` 长度相比,它们的 `columnId` 长度较短 - -::: - - - -### 直播 - - - -如果订阅 [新闻和报纸摘要](http://www.radio.cn/pc-portal/sanji/zhibo\_2.html?name=1395528),其 URL 为 ,可以得到 `name` 为 `1395528` - -所以对应路由为 [`/radio/zhibo/1395528`](https://rsshub.app/radio/zhibo/1395528) - -::: tip 提示 - -查看更多电台直播节目,可前往 [电台直播](http://www.radio.cn/pc-portal/erji/radioStation.html) - -::: - - + ## 中国高清网 diff --git a/docs/new-media.md b/docs/new-media.md index e7079ae809..e41fd647c2 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -100,25 +100,14 @@ pageClass: routes ### 分类 - + -| 分类 | id | -| ------------------- | -------------- | -| 即时 REALTIME | realtime | -| 新加坡 SINGAPORE | singapore | -| 东南亚 SOUTH-EAST ASIA | southeast-asia | -| 中港台 GREATER CHINA | greater-china | -| 国际 WORLD | world | -| 财经 FINANCE | finance | -| 体育 SPORTS | sports | -| 社团 COMMUNITY | community | +| 即时 | 新加坡 | 东南亚 | 中港台 | 国际 | 财经 | 体育 | +| -------- | --------- | -------------- | ------------- | ----- | ------- | ------ | +| realtime | singapore | southeast-asia | greater-china | world | finance | sports | -### 标签 - - - ## 9To5 ### 9To5 分站 @@ -151,6 +140,12 @@ pageClass: routes +## Aljazeera 半岛网 + +### 新闻 + + + ## AppleInsider ### 分类 diff --git a/docs/traditional-media.md b/docs/traditional-media.md index 21cf744a73..6a0b39e628 100644 --- a/docs/traditional-media.md +++ b/docs/traditional-media.md @@ -62,64 +62,6 @@ pageClass: routes -## Aljazeera 半岛电视台 - -### 新闻 - - - -语言 - -| 阿拉伯文 | 中文 | 英文 | -| ------ | ------- | ------- | -| arbric | chinese | english | - -::: tip 提示 - -若订阅 [Al Jazeera English - Economy](https://www.aljazeera.com/economy),其语言为 `english`,路径为 `economy`,可得到其路由为 [`/aljazeera/english/economy`](https://rsshub.app/aljazeera/english/economy) - -若订阅 [半岛电视台中文频道 - 政治](https://chinese.aljazeera.net/news/political),其语言为 `chinese`,路径为 `news/political`,可得到其路由为 [`/aljazeera/chinese/news/political`](https://rsshub.app/aljazeera/chinese/news/political) - -::: - - - -### 标签 - - - -语言 - -| 阿拉伯文 | 中文 | 英文 | -| ------ | ------- | ------- | -| arbric | chinese | english | - -::: tip 提示 - -若订阅 [Al Jazeera English - Science and Technology](https://www.aljazeera.com/tag/science-and-technology),其语言为 `english`,标签 id 为 `science-and-technology`,可得到其路由为 [`/aljazeera/english/tag/science-and-technology`](https://rsshub.app/aljazeera/english/tag/science-and-technology) - -::: - - - -### 官方 RSS - - - -语言 - -| 阿拉伯文 | 中文 | 英文 | -| ------ | ------- | ------- | -| arbric | chinese | english | - -::: tip 提示 - -半岛电视台中文频道无对应的 RSS,故默认返回首页内容 - -::: - - - ## AP News ### 话题 @@ -502,6 +444,12 @@ Solidot 提供的 feed: +## UDN + +### 轉角國際 + + + ## Voice of America (VOA) 透過提取全文,以獲得更好的閱讀體驗 @@ -1414,25 +1362,6 @@ category 对应的关键词有 -### 轉角國際 - 首頁 - - - -| 首頁 | 最新文章 | 熱門文章 | -| -- | ---- | ---- | -| | new | hot | - - - -### 轉角國際 - 標籤 - - - -| 過去 24 小時 | 鏡頭背後 | 深度專欄 | 重磅廣播 | -| -------- | ---- | ---- | ---- | - - - ## 路透社 ::: warning 迁移说明 diff --git a/docs/university.md b/docs/university.md index 5aa9821f38..4eb9964aad 100644 --- a/docs/university.md +++ b/docs/university.md @@ -2991,26 +2991,6 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS -### 财经学院 - - - -| 栏目 | 学院新闻 | 学院通知 | -| -- | ---- | ---- | -| 代码 | xyxw | xytz | - - - -### 信息学院 - - - -| 栏目 | 学院新闻 | 通知公告 | 教育教学 | 学生工作 | 招生就业 | -| -- | ---- | ---- | ---- | ---- | ---- | -| 代码 | xyxw | tzgg | jyjx | xsgz | zsjy | - - - ## 信阳师范学院 ### 高等教育自学考试办公室 diff --git a/lib/router.js b/lib/router.js index b9358a332a..fd198a0f05 100644 --- a/lib/router.js +++ b/lib/router.js @@ -878,7 +878,7 @@ router.get('/bbc/:site?/:channel?', lazyloadRouteHandler('./routes/bbc/index')); // router.get('/ft/:language/:channel?', lazyloadRouteHandler('./routes/ft/channel')); // The Verge -// router.get('/verge', lazyloadRouteHandler('./routes/verge/index')); +router.get('/verge', lazyloadRouteHandler('./routes/verge/index')); // 看雪 router.get('/pediy/topic/:category?/:type?', lazyloadRouteHandler('./routes/pediy/topic')); @@ -1035,7 +1035,7 @@ router.get('/anime1/anime/:time/:name', lazyloadRouteHandler('./routes/anime1/an router.get('/anime1/search/:keyword', lazyloadRouteHandler('./routes/anime1/search')); // Global UDN -// router.get('/udn/global/:tid', lazyloadRouteHandler('./routes/udn/global')); +router.get('/udn/global/:tid', lazyloadRouteHandler('./routes/udn/global')); // gitea router.get('/gitea/blog', lazyloadRouteHandler('./routes/gitea/blog')); @@ -2807,7 +2807,7 @@ router.get('/manhuadui/manhua/:name/:serial?', lazyloadRouteHandler('./routes/ma router.get('/fzdm/manhua/:id', lazyloadRouteHandler('./routes/fzdm/manhua')); // Aljazeera 半岛网 -// router.get('/aljazeera/news', lazyloadRouteHandler('./routes/aljazeera/news')); +router.get('/aljazeera/news', lazyloadRouteHandler('./routes/aljazeera/news')); // CFD indices dividend adjustment router.get('/cfd/gbp_div', lazyloadRouteHandler('./routes/cfd/gbp_div')); diff --git a/lib/routes/aljazeera/news.js b/lib/routes/aljazeera/news.js new file mode 100644 index 0000000000..caabd24958 --- /dev/null +++ b/lib/routes/aljazeera/news.js @@ -0,0 +1,38 @@ +const url = require('url'); +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const link = `https://chinese.aljazeera.net/news`; + const response = await got({ + method: 'get', + url: link, + }); + const $ = cheerio.load(response.data); + + const list = $('h3 a') + .map((_, item) => { + item = $(item); + return { + title: item.text(), + link: url.resolve(`https://chinese.aljazeera.net`, item.attr('href')), + }; + }) + .get(); + + ctx.state.data = { + title: `Aljazeera半岛网 - 新闻`, + link, + item: await Promise.all( + list.map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ method: 'get', url: item.link }); + const content = cheerio.load(detailResponse.data); + item.pubDate = new Date(detailResponse.data.match(/"datePublished": "(.*?)",/)[1]).toUTCString(); + item.description = content('div.wysiwyg').html(); + return item; + }) + ) + ), + }; +}; diff --git a/lib/routes/udn/global.js b/lib/routes/udn/global.js new file mode 100644 index 0000000000..1dba7d8069 --- /dev/null +++ b/lib/routes/udn/global.js @@ -0,0 +1,61 @@ +const cheerio = require('cheerio'); +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + let filter, url, tag; + if (ctx.params.tid !== 'newest') { + url = `https://global.udn.com/search/tagging/1020/${ctx.params.tid}`; + filter = 'li.contentli'; + tag = ctx.params.tid; + } else { + url = `https://global.udn.com/global_vision/index`; + filter = `.news_cards > ul > li`; + tag = '最新文章'; + } + const res = await got.get(url); + const $ = cheerio.load(res.data); + const list = $(filter).get(); + + const out = await Promise.all( + list.map(async (item) => { + const $ = cheerio.load(item); + let title; + let address = $('a').attr('href'); + if (ctx.params.tid === 'newest') { + address = `https://global.udn.com` + address; + title = $('h3').text(); + } else { + title = $('h2').text(); + } + const time = $('span.date').text(); + const author = $('span.author').text(); + const cache = await ctx.cache.get(address); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + const res = await got.get(address); + const capture = cheerio.load(res.data); + capture('div.social_bar').remove(); + capture('div.area').remove(); + capture('.story_art_title').remove(); + capture('.story_bady_info_author').remove(); + capture('.photo_pop').remove(); + const contents = capture('div.story_body_content').html(); + const single = { + title, + author, + description: contents, + link: address, + guid: address, + pubDate: new Date(time).toUTCString(), + }; + ctx.cache.set(address, JSON.stringify(single)); + return Promise.resolve(single); + }) + ); + ctx.state.data = { + title: `轉角國際 | ${tag}`, + link: url, + item: out, + }; +}; diff --git a/lib/routes/verge/index.js b/lib/routes/verge/index.js new file mode 100644 index 0000000000..f125d8add4 --- /dev/null +++ b/lib/routes/verge/index.js @@ -0,0 +1,88 @@ +const got = require('@/utils/got'); +const parser = require('@/utils/rss-parser'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const feed = await parser.parseURL('https://www.theverge.com/rss/index.xml'); + + const items = await Promise.all( + feed.items.slice(0, 10).map(async (item) => { + const response = await got({ + method: 'get', + url: item.link, + }); + + const $ = cheerio.load(response.data); + + const content = $('div.c-entry-content'); + + // 处理封面图片 + + const cover = $('meta[property="og:image"]'); + + if (cover.length > 0) { + $(``).insertBefore(content[0].childNodes[0]); + } + + // 处理封面视频 + $('div.l-col__main > div.c-video-embed, div.c-entry-hero > div.c-video-embed').each((i, e) => { + const src = `https://volume.vox-cdn.com/embed/${e.attribs['data-volume-uuid']}?autoplay=false`; + + $(``).insertBefore(content[0].childNodes[0]); + }); + + // 处理封面视频 + $('div.l-col__main > div.c-video-embed--media iframe').each((i, e) => { + $(e).insertBefore(content[0].childNodes[0]); + }); + + // 处理文章图片 + content.find('figure.e-image').each((i, e) => { + let src, caption; + + // 处理 jpeg, png + if ($(e).find('picture > source').length > 0) { + src = $(e) + .find('picture > img')[0] + .attribs.srcset.match(/(?<=320w,).*?(?=520w)/g)[0] + .trim(); + } else if ($(e).find('img.c-dynamic-image').length > 0) { + // 处理 gif + src = $(e).find('span.e-image__image')[0].attribs['data-original']; + } + + // 处理 caption + if ($(e).find('span.e-image__meta').length > 0) { + caption = $(e).find('span.e-image__meta').text(); + } + + const figure = `
${caption ? `
${caption}
` : ''}
`; + + $(figure).insertBefore(e); + + $(e).remove(); + }); + + // 移除无用 DOM + content.find('aside').each((i, e) => { + $(e).remove(); + }); + + const single = { + title: item.title, + description: content.html(), + author: item.author, + pubDate: item.pubDate, + link: item.link, + }; + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: feed.title, + link: feed.link, + description: feed.description, + item: items, + }; +}; diff --git a/lib/v2/8world/index.js b/lib/v2/8world/index.js index 351b1dcd2a..3a5ce452f8 100644 --- a/lib/v2/8world/index.js +++ b/lib/v2/8world/index.js @@ -3,10 +3,10 @@ const cheerio = require('cheerio'); const { parseDate } = require('@/utils/parse-date'); module.exports = async (ctx) => { - const path = ctx.path === '/' ? '/realtime' : ctx.path; + const category = ctx.params.category ?? 'realtime'; const rootUrl = 'https://www.8world.com'; - const currentUrl = `${rootUrl}${path}`; + const currentUrl = `${rootUrl}/${category}`; const response = await got({ method: 'get', @@ -15,19 +15,19 @@ module.exports = async (ctx) => { const $ = cheerio.load(response.data); - let items = $('div[data-column="Two-Third"] .article-title .article-link') - .toArray() - .map((item) => { + const list = $('div[data-column="Two-Third"] .article-title .article-link') + .map((_, item) => { item = $(item); return { title: item.text(), link: `${rootUrl}${item.attr('href')}`, }; - }); + }) + .get(); - items = await Promise.all( - items.map((item) => + const items = await Promise.all( + list.map((item) => ctx.cache.tryGet(item.link, async () => { const detailResponse = await got({ method: 'get', diff --git a/lib/v2/8world/maintainer.js b/lib/v2/8world/maintainer.js index 932ca1ca12..81eb78d732 100644 --- a/lib/v2/8world/maintainer.js +++ b/lib/v2/8world/maintainer.js @@ -1,4 +1,3 @@ module.exports = { '/:category?': ['nczitzk'], - '/topic/:id': ['nczitzk'], }; diff --git a/lib/v2/8world/radar.js b/lib/v2/8world/radar.js index 4f53efbe64..90e50ea8b0 100644 --- a/lib/v2/8world/radar.js +++ b/lib/v2/8world/radar.js @@ -8,12 +8,6 @@ module.exports = { source: ['/:category', '/'], target: '/8world/:category?', }, - { - title: '标签', - docs: 'https://docs.rsshub.app/new-media.html#_8-shi-jie-biao-qian', - source: ['/topic/:id', '/'], - target: '/8world/topic/:id', - }, ], }, }; diff --git a/lib/v2/8world/router.js b/lib/v2/8world/router.js index 4063156855..cf781366fd 100644 --- a/lib/v2/8world/router.js +++ b/lib/v2/8world/router.js @@ -1,3 +1,3 @@ module.exports = function (router) { - router.get(/([\w-/]+)?/, require('./index')); + router.get('/:category?', require('./index')); }; diff --git a/lib/v2/aljazeera/index.js b/lib/v2/aljazeera/index.js deleted file mode 100644 index a2b55203e1..0000000000 --- a/lib/v2/aljazeera/index.js +++ /dev/null @@ -1,87 +0,0 @@ -const got = require('@/utils/got'); -const cheerio = require('cheerio'); -const { parseDate } = require('@/utils/parse-date'); -const { art } = require('@/utils/render'); -const path = require('path'); - -const languages = { - arabic: { - rootUrl: 'https://www.aljazeera.net', - rssUrl: 'rss', - }, - chinese: { - rootUrl: 'https://chinese.aljazeera.net', - rssUrl: undefined, - }, - english: { - rootUrl: 'https://www.aljazeera.com', - rssUrl: 'xml/rss/all.xml', - }, -}; - -module.exports = async (ctx) => { - const params = ctx.path === '/' ? ['arabic'] : ctx.path.replace(/^\//, '').split('/'); - - if (!languages.hasOwnProperty(params[0])) { - params.unshift('arabic'); - } - - const language = params.shift(); - const isRSS = params.length === 1 && params.at(-1) === 'rss' && languages[language].rssUrl; - - const rootUrl = languages[language].rootUrl; - const currentUrl = `${rootUrl}/${isRSS ? languages[language].rssUrl : params.join('/')}`; - - const response = await got({ - method: 'get', - url: currentUrl, - }); - - const $ = cheerio.load(response.data); - - let items = isRSS - ? response.data.match(new RegExp('' + rootUrl + '/(.*?)', 'g')).map((item) => ({ - link: item.match(/(.*?)<\/link>/)[1], - })) - : $('.u-clickable-card__link') - .toArray() - .map((item) => { - item = $(item); - - return { - link: `${rootUrl}${item.attr('href')}`, - }; - }); - - items = await Promise.all( - items.slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 50).map((item) => - ctx.cache.tryGet(item.link, async () => { - const detailResponse = await got({ - method: 'get', - url: item.link, - }); - - const content = cheerio.load(detailResponse.data); - - content('.more-on').parent().remove(); - content('.responsive-image img').removeAttr('srcset'); - - item.title = content('h1').first().text(); - item.author = content('.author').text(); - item.pubDate = parseDate(detailResponse.data.match(/"datePublished": "(.*?)",/)[1]); - item.description = art(path.join(__dirname, 'templates/description.art'), { - image: content('.article-featured-image').html(), - description: content('.wysiwyg').html(), - }); - - return item; - }) - ) - ); - - ctx.state.data = { - title: $('title').first().text(), - link: currentUrl, - item: items, - }; -}; diff --git a/lib/v2/aljazeera/maintainer.js b/lib/v2/aljazeera/maintainer.js deleted file mode 100644 index f705151e68..0000000000 --- a/lib/v2/aljazeera/maintainer.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - '/:language?/:category?': ['nczitzk'], - '/:language?/tag/:id': ['nczitzk'], - '/:language?/rss': ['nczitzk'], -}; diff --git a/lib/v2/aljazeera/radar.js b/lib/v2/aljazeera/radar.js deleted file mode 100644 index 0df007fbb3..0000000000 --- a/lib/v2/aljazeera/radar.js +++ /dev/null @@ -1,62 +0,0 @@ -module.exports = { - 'aljazeera.com': { - _name: 'Aljazeera 半岛电视台', - '.': [ - { - title: 'News', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-xin-wen', - source: ['/:category', '/'], - target: '/aljazeera/english/:category', - }, - { - title: 'Tag', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-biao-qian', - source: ['/tag/:id', '/'], - target: '/aljazeera/english/tag/:id', - }, - { - title: 'Official RSS', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-guan-fang-rss', - source: ['/xml/rss/all.xml', '/'], - target: '/aljazeera/english/rss', - }, - ], - }, - 'aljazeera.net': { - _name: 'Aljazeera 半岛电视台', - '.': [ - { - title: 'News', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-xin-wen', - source: ['/:category', '/'], - target: '/aljazeera/arbric/:category', - }, - { - title: 'Tag', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-biao-qian', - source: ['/tag/:id', '/'], - target: '/aljazeera/arbric/tag/:id', - }, - { - title: 'Official RSS', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-guan-fang-rss', - source: ['/rss', '/'], - target: '/aljazeera/arbric/rss', - }, - ], - chinese: [ - { - title: '新闻', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-xin-wen', - source: ['/:category', '/'], - target: '/aljazeera/chinese/:category', - }, - { - title: '标签', - docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-biao-qian', - source: ['/tag/:id', '/'], - target: '/aljazeera/chinese/tag/:id', - }, - ], - }, -}; diff --git a/lib/v2/aljazeera/router.js b/lib/v2/aljazeera/router.js deleted file mode 100644 index 37c089127b..0000000000 --- a/lib/v2/aljazeera/router.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function (router) { - router.get(/([\w/-]+)?/, require('./index')); -}; diff --git a/lib/v2/aljazeera/templates/description.art b/lib/v2/aljazeera/templates/description.art deleted file mode 100644 index cbd5696ec8..0000000000 --- a/lib/v2/aljazeera/templates/description.art +++ /dev/null @@ -1,8 +0,0 @@ -{{ if image }} -
-{{@ image }} -
-{{ /if }} -{{ if description }} -{{@ description }} -{{ /if }} \ No newline at end of file diff --git a/lib/v2/baidu/tieba/forum.js b/lib/v2/baidu/tieba/forum.js index 1ed79fb62b..622e8df254 100644 --- a/lib/v2/baidu/tieba/forum.js +++ b/lib/v2/baidu/tieba/forum.js @@ -39,7 +39,7 @@ module.exports = async (ctx) => { .toArray() .map((element) => { const item = $(element); - return ``; + return ``; }) .join(''); diff --git a/lib/v2/bilibili/cache.js b/lib/v2/bilibili/cache.js index 9dedad9c16..7f233d8ede 100644 --- a/lib/v2/bilibili/cache.js +++ b/lib/v2/bilibili/cache.js @@ -1,53 +1,30 @@ const got = require('@/utils/got'); module.exports = { - getCookie: (ctx) => { - const key = 'bili-cookie'; - return ctx.cache.tryGet(key, async () => { - const response = await got(`https://www.bilibili.com/`); - return response.headers['set-cookie']; - }); - }, getUsernameFromUID: (ctx, uid) => { const key = 'bili-username-from-uid-' + uid; return ctx.cache.tryGet(key, async () => { - const cookie = await module.exports.getCookie(ctx); - await got(`https://space.bilibili.com/${uid}/`, { + const { data: nameResponse } = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&jsonp=jsonp`, { headers: { - Referer: 'https://www.bilibili.com/', - Cookie: cookie, - }, - }); - const { data: nameResponse } = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { - headers: { - Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie, + Referer: `https://space.bilibili.com/${uid}`, }, }); return nameResponse.data.name; }); }, getUsernameAndFaceFromUID: async (ctx, uid) => { - const cookie = await module.exports.getCookie(ctx); const nameKey = 'bili-username-from-uid-' + uid; const faceKey = 'bili-userface-from-uid-' + uid; let name = await ctx.cache.get(nameKey); let face = await ctx.cache.get(faceKey); - if (!name || !face) { - await got(`https://space.bilibili.com/${uid}/`, { + if (!name) { + const nameResponse = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&jsonp=jsonp`, { headers: { - Referer: `https://www.bilibili.com/`, - Cookie: cookie, + Referer: `https://space.bilibili.com/${uid}`, }, }); - const { data: nameResponse } = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { - headers: { - Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie, - }, - }); - name = nameResponse.data.name; - face = nameResponse.data.face; + name = nameResponse.data.data.name; + face = nameResponse.data.data.face; ctx.cache.set(nameKey, name); ctx.cache.set(faceKey, face); } diff --git a/lib/v2/bilibili/video-all.js b/lib/v2/bilibili/video-all.js index 2cf71c68cc..f025119edd 100644 --- a/lib/v2/bilibili/video-all.js +++ b/lib/v2/bilibili/video-all.js @@ -6,45 +6,27 @@ const { parseDate } = require('@/utils/parse-date'); module.exports = async (ctx) => { const uid = ctx.params.uid; const disableEmbed = ctx.params.disableEmbed; - const cookie = await cache.getCookie(ctx); const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid); - await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, { - headers: { - Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie, - }, - }); const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, { headers: { - Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, - Cookie: cookie, + Referer: `https://space.bilibili.com/${uid}/`, }, }); const vlist = [...response.data.data.list.vlist]; const pageTotal = Math.ceil(response.data.data.page.count / response.data.data.page.ps); - - const getPage = async (pageId) => { - await got(`https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`, { - headers: { - Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie, - }, - }); - return await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${pageId}&keyword=&order=pubdate&jsonp=jsonp`, { - headers: { - Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`, - Cookie: cookie, - }, - }); - }; - const promises = []; if (pageTotal > 1) { for (let i = 2; i <= pageTotal; i++) { - promises.push(getPage(i)); + promises.push( + got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${i}&keyword=&order=pubdate&jsonp=jsonp`, { + headers: { + Referer: `https://space.bilibili.com/${uid}/`, + }, + }) + ); } const rets = await Promise.all(promises); rets.forEach((ret) => { diff --git a/lib/v2/bilibili/video.js b/lib/v2/bilibili/video.js index d55ed7582e..ec0b77117a 100644 --- a/lib/v2/bilibili/video.js +++ b/lib/v2/bilibili/video.js @@ -5,19 +5,13 @@ const utils = require('./utils'); module.exports = async (ctx) => { const uid = ctx.params.uid; const disableEmbed = ctx.params.disableEmbed; - const cookie = await cache.getCookie(ctx); const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid); - await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, { + const response = await got({ + method: 'get', + url: `https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=10&tid=0&pn=1&order=pubdate&jsonp=jsonp`, headers: { Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie, - }, - }); - const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, { - headers: { - Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, - Cookie: cookie, }, }); const data = response.data; diff --git a/lib/v2/creative-comic/book.js b/lib/v2/creative-comic/book.js deleted file mode 100644 index a14773b052..0000000000 --- a/lib/v2/creative-comic/book.js +++ /dev/null @@ -1,60 +0,0 @@ -const { parseDate } = require('@/utils/parse-date'); -const { art } = require('@/utils/render'); -const path = require('path'); -const { getUuid, getBook, getChapter, getChapters, getImgEncrypted, getImgKey, decrypt, getRealKey, siteHost } = require('./utils'); - -module.exports = async (ctx) => { - const { id, coverOnly = 'true', quality = '1' } = ctx.params; - const uuid = await getUuid(ctx.cache.tryGet); - let { data: book } = await getBook(id, uuid); - let { data: chapters } = await getChapters(id, uuid); - book = book.data; - chapters = chapters.data; - - const items = await Promise.all( - chapters.chapters.map(async (c) => { - let pages; - if (coverOnly !== 'true' && coverOnly !== '1') { - let { data: chapter } = await getChapter(c.id, uuid); - chapter = chapter.data; - - if (chapter.chapter.free_day === null || chapter.chapter.free_day === 0) { - pages = await Promise.all( - chapter.chapter.proportion.map(async (p) => { - let { data: imgKey } = await getImgKey(p.id, uuid); - imgKey = imgKey.data.key; - - const realKey = getRealKey(imgKey); - const encrypted = await getImgEncrypted(p.id, quality); - - return ctx.cache.tryGet(`${siteHost}/fs/chapter_content/encrypt/${p.id}/${quality}`, () => decrypt(encrypted, realKey)); - }) - ); - } - } - - return { - title: c.vol_name, - description: art(path.join(__dirname, 'templates/chapter.art'), { - chapter: c, - pages, - cover: c.image1, - }), - pubDate: parseDate(c.online_at), - updated: parseDate(c.updated_at), - link: `https://www.creative-comic.tw/reader_comic/${c.id}`, - author: book.author.map((author) => author.name).join(', '), - category: book.tags.map((tag) => tag.name), - }; - }) - ); - - ctx.state.data = { - title: `${book.name} | CCC創作集`, - description: `${book.brief} ${book.description}`, - link: book.share_link, - image: book.image1, - item: items, - language: 'zh-hant', - }; -}; diff --git a/lib/v2/creative-comic/maintainer.js b/lib/v2/creative-comic/maintainer.js deleted file mode 100644 index 3dcaecb971..0000000000 --- a/lib/v2/creative-comic/maintainer.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - '/book/:id/:coverOnly?/:quality?': ['TonyRL'], -}; diff --git a/lib/v2/creative-comic/radar.js b/lib/v2/creative-comic/radar.js deleted file mode 100644 index 9e7af75317..0000000000 --- a/lib/v2/creative-comic/radar.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - 'creative-comic.tw': { - _name: 'CCC 創作集', - '.': [ - { - title: '漫畫', - docs: 'https://docs.rsshub.app/anime.html#ccc-chuang-zuo-ji', - source: ['/book/:id/*'], - target: '/creative-comic/:id', - }, - ], - }, -}; diff --git a/lib/v2/creative-comic/router.js b/lib/v2/creative-comic/router.js deleted file mode 100644 index 23ab64e769..0000000000 --- a/lib/v2/creative-comic/router.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (router) => { - router.get('/book/:id/:coverOnly?/:quality?', require('./book')); -}; diff --git a/lib/v2/creative-comic/templates/chapter.art b/lib/v2/creative-comic/templates/chapter.art deleted file mode 100644 index d65dacfbd1..0000000000 --- a/lib/v2/creative-comic/templates/chapter.art +++ /dev/null @@ -1,11 +0,0 @@ -{{ if chapter }} -

{{ chapter.name }}

-{{ /if }} -{{ if pages }} - {{ each pages page }} -
- {{ /each }} -{{ /if }} -{{ if cover }} - -{{ /if }} diff --git a/lib/v2/creative-comic/utils.js b/lib/v2/creative-comic/utils.js deleted file mode 100644 index 6bed527c2f..0000000000 --- a/lib/v2/creative-comic/utils.js +++ /dev/null @@ -1,96 +0,0 @@ -const got = require('@/utils/got'); -const CryptoJS = require('crypto-js'); - -const apiHost = 'https://api.creative-comic.tw'; -const siteHost = 'https://www.creative-comic.tw'; -const device = 'web_desktop'; -const DEFAULT_TOKEN = 'freeforccc2020reading'; - -const getBook = (bookId, uuid) => - got(`${apiHost}/book/${bookId}/info`, { - headers: { - device, - uuid, - }, - }); - -const getChapter = (id, uuid) => - got(`${apiHost}/book/chapter/${id}`, { - headers: { - device, - uuid, - }, - }); - -const getChapters = (bookId, uuid) => - got(`${apiHost}/book/${bookId}/chapter`, { - headers: { - device, - uuid, - }, - }); - -const getImgEncrypted = async (pageId, quality) => { - const { data: res } = await got(`${siteHost}/fs/chapter_content/encrypt/${pageId}/${quality}`, { - headers: { - device, - }, - responseType: 'buffer', - }); - return Buffer.from(res).toString('base64'); -}; - -const getImgKey = (pageId, uuid) => - got(`${apiHost}/book/chapter/image/${pageId}`, { - headers: { - device, - uuid, - }, - }); - -const getUuid = (tryGet) => - tryGet('creative-comic:uuid', async () => { - const { data } = await got(`${apiHost}/guest`, { - headers: { - device, - }, - }); - return data.data; - }); - -const decrypt = (encrypted, secrets) => - CryptoJS.AES.decrypt(encrypted, CryptoJS.enc.Hex.parse(secrets.key), { - iv: CryptoJS.enc.Hex.parse(secrets.iv), - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7, - }).toString(CryptoJS.enc.Utf8); - -const token2Key = (token) => { - const t = CryptoJS.SHA512(token).toString(); - return { - key: t.substring(0, 64), - iv: t.substring(30, 62), // t.substr(30, 32) - }; -}; - -const getRealKey = (imgKey, token = DEFAULT_TOKEN) => { - const secrets = token2Key(token); - const key = decrypt(imgKey, secrets); - const realKey = key.split(':'); - return { - key: realKey[0], - iv: realKey[1], - }; -}; - -module.exports = { - getBook, - getChapter, - getChapters, - getImgEncrypted, - getImgKey, - getUuid, - decrypt, - token2Key, - getRealKey, -}; diff --git a/lib/v2/gov/beijing/bphc/index.js b/lib/v2/gov/beijing/bphc/index.js deleted file mode 100644 index f8d033e49d..0000000000 --- a/lib/v2/gov/beijing/bphc/index.js +++ /dev/null @@ -1,54 +0,0 @@ -const got = require('@/utils/got'); -const { parseDate } = require('@/utils/parse-date'); -const timezone = require('@/utils/timezone'); - -const mapping = { - '/project': { - title: '项目介绍', - list: '/front/index/project/page', - detail: '/front/index/project', - link: '/#/communityDetail?id=', - }, - '/announcement': { - title: '通知公告', - list: '/front/announcement/page', - detail: '/front/announcement/', - link: '/#/announcementList/detail?id=', - }, -}; - -module.exports = async (ctx) => { - const rootUrl = 'http://gycp.bphc.com.cn:21000'; - const defaultPath = 'announcement'; - - const pathname = ctx.path.replace(/(^\/beijing\/bphc|\/$)/g, ''); - const key = pathname === '' ? defaultPath : pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; - const obj = mapping[key]; - const currentUrl = `${rootUrl}${obj.list}`; - - const listResp = await got(currentUrl).json(); - const list = listResp.data?.records ?? []; - const items = await Promise.all( - list.map((item) => { - const detail = `${rootUrl}${obj.detail}/${item.id}`; - return ctx.cache.tryGet(detail, async () => { - const detailResponse = await got(detail).json(); - const description = (detailResponse.data?.content || detailResponse.data?.introduction) ?? ''; - const single = { - title: item.title || item.fullName, - author: description.match(/来源:(.*?)[A-Z_]+)=(?(?:.*?(?=; max-age)|[a-fA-F0-9]+))/gm; +const regex = /([A-Z_]+=(?:.*?(?=; max-age)|[a-fA-F0-9]+))/gm; const parseCookie = async (body) => { - let m; - const cookies = []; - while ((m = regex.exec(body)) !== null) { - // This is necessary to avoid infinite loops with zero-width matches - if (m.index === regex.lastIndex) { - regex.lastIndex++; - } - const { key, value } = m.groups; - cookies.push(new Cookie({ key, value })); + const cookies = body.match(regex); + if (cookies) { + await Promise.all(cookies.map((c) => cookieJar.setCookie(c, rootUrl))); } - await Promise.all(cookies.map((c) => cookieJar.setCookie(c, rootUrl))); }; const parseNewsList = async (url, selector, ctx) => { const response = await got(url, { cookieJar }); const data = response.data; - await parseCookie(data); + parseCookie(data); const $ = cheerio.load(data); const list = $(selector) @@ -47,27 +40,11 @@ const parseNewsList = async (url, selector, ctx) => { return { list, title }; }; -const changeTrCookie = async () => { - const cookies = await cookieJar.getCookies(rootUrl); - const c = cookies.find((c) => c.key === 'HOY_TR'); - if (c) { - const value = c.value; - const tr_array = value.split(','); - const csr = tr_array[0]; - const cnv = tr_array[1].split(''); - const otr = tr_array[2].split(''); - otr[0] = csr.charAt(parseInt(cnv[0], 16)); - const nc = new Cookie({ key: 'HOY_TR', value: csr + ',' + cnv.join('') + ',' + otr.join('') + ',0' }); - await cookieJar.setCookie(nc, rootUrl); - } -}; - -const parseArticle = async (item, ctx) => { - await changeTrCookie(); - return await ctx.cache.tryGet(item.link, async () => { +const parseArticle = async (item, ctx) => + await ctx.cache.tryGet(item.link, async () => { const response = await got(item.link, { cookieJar }); const data = response.data; - await parseCookie(data); + parseCookie(data); const $ = cheerio.load(data); const title = $('.daty, .source-box').text().trim(); @@ -85,7 +62,6 @@ const parseArticle = async (item, ctx) => { item.description = $('.content, .bom-box').html(); return item; }); -}; module.exports = { rootUrl, diff --git a/lib/v2/gov/maintainer.js b/lib/v2/gov/maintainer.js index 0e5616cd2e..c4c1a972cd 100644 --- a/lib/v2/gov/maintainer.js +++ b/lib/v2/gov/maintainer.js @@ -37,7 +37,6 @@ module.exports = { '/stats/:path+': ['bigfei'], // province '/anhui/kjt/:path?': ['nczitzk'], - '/beijing/bphc/:channel': ['bigfei'], '/beijing/jw/tzgg': ['nczitzk'], '/beijing/kw/:channel': ['Fatpandac'], '/guangdong/tqyb/tfxtq': ['Fatpandac'], diff --git a/lib/v2/gov/radar.js b/lib/v2/gov/radar.js index 61ca3303d2..3e7148f223 100644 --- a/lib/v2/gov/radar.js +++ b/lib/v2/gov/radar.js @@ -297,17 +297,6 @@ module.exports = { }, ], }, - 'bphc.com.cn': { - _name: '北京保障房中心有限公司', - gycpt: [ - { - title: '北京市共有产权住房租赁服务平台', - docs: 'https://docs.rsshub.app/government.html#bei-jing-shi-bao-zhang-fang-zhong-xin-you-xian-gong-si', - source: ['/*'], - target: (params, url) => `/gov/bphc/${new URL(url).href.match(/gycpt\.bphc\.com\.cn\/(.*)/)[1]}`, - }, - ], - }, 'ccdi.gov.cn': { _name: '中央纪委国家监委', www: [ diff --git a/lib/v2/gov/router.js b/lib/v2/gov/router.js index fdf19f16c5..466b2eae76 100644 --- a/lib/v2/gov/router.js +++ b/lib/v2/gov/router.js @@ -29,7 +29,6 @@ module.exports = function (router) { router.get(/stats(\/[\w/-]+)?/, require('./stats')); // province router.get(/anhui\/kjt\/([\w\d/-]+)?/, require('./anhui/kjt')); - router.get(/beijing\/bphc(\/[\w/-]+)?/, require('./beijing/bphc')); router.get('/beijing/jw/tzgg', require('./beijing/jw/tzgg')); router.get('/beijing/kw/:channel', require('./beijing/kw/index')); router.get('/guangdong/tqyb/tfxtq', require('./guangdong/tqyb/tfxtq')); diff --git a/lib/v2/hackernews/index.js b/lib/v2/hackernews/index.js index c41576ed86..aa26d9a924 100644 --- a/lib/v2/hackernews/index.js +++ b/lib/v2/hackernews/index.js @@ -25,13 +25,13 @@ module.exports = async (ctx) => { const item = {}; item.guid = thing.attr('id'); - item.title = thing.find('.titleline').children('a').text(); + item.title = thing.find('.titlelink').text(); item.category = thing.find('.sitestr').text(); item.author = thing.next().find('.hnuser').text(); item.pubDate = parseDate(thing.find('.age').attr('title') ?? thing.next().find('.age').attr('title')); item.link = `${rootUrl}/item?id=${item.guid}`; - item.origin = thing.find('.titleline').children('a').attr('href'); + item.origin = thing.find('.titlelink').attr('href'); item.onStory = thing.find('.onstory').text().substring(2); item.comments = thing.next().find('a').last().text().split(' comment')[0]; diff --git a/lib/v2/jandan/index.js b/lib/v2/jandan/index.js index cd0c19710f..e3a45abf92 100644 --- a/lib/v2/jandan/index.js +++ b/lib/v2/jandan/index.js @@ -1,30 +1,64 @@ const got = require('@/utils/got'); const cheerio = require('cheerio'); -const parser = require('@/utils/rss-parser'); +const timezone = require('@/utils/timezone'); +const { parseDate } = require('@/utils/parse-date'); +const { art } = require('@/utils/render'); +const path = require('path'); module.exports = async (ctx) => { const rootUrl = 'http://i.jandan.net'; - const feed = await parser.parseURL(`${rootUrl}/feed/`); - const items = await Promise.all( - feed.items.map((item) => + + const response = await got({ + method: 'get', + url: rootUrl, + }); + + const $ = cheerio.load(response.data); + + let items = $('.post') + .slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 15) + .toArray() + .map((item) => { + item = $(item); + + const a = item.find('.thetitle a'); + + return { + title: a.text(), + link: a.attr('href'), + description: art(path.join(__dirname, 'templates/description.art'), { + summary: item.find('.indexs').text(), + image: item + .find('img') + .attr('data-original') + .replace(/!square/, ''), + }), + }; + }); + + items = await Promise.all( + items.map((item) => ctx.cache.tryGet(item.link, async () => { - const response = await got(item.link); - const $ = cheerio.load(response.data); - $('.wechat-hide').prev().nextAll().remove(); - const single = { - title: item.title, - description: $('.entry').html(), - pubDate: item.pubDate, - link: item.link, - author: item['dc:creator'], - category: item.categories, - }; - return single; + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + content('.wechat-hide').prev().nextAll().remove(); + + item.description += content('.entry').html(); + item.author = content('.postinfo strong').text(); + item.pubDate = timezone(parseDate(detailResponse.data.match(/"pubDate": "(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})"/)[1]), +8); + + return item; }) ) ); + ctx.state.data = { - title: '煎蛋', + title: $('title').text(), link: rootUrl, item: items, }; diff --git a/lib/v2/jandan/maintainer.js b/lib/v2/jandan/maintainer.js index 33b455c436..8dc696085e 100644 --- a/lib/v2/jandan/maintainer.js +++ b/lib/v2/jandan/maintainer.js @@ -1,4 +1,4 @@ module.exports = { '/:category?': ['nczitzk'], - '/': ['nczitzk', 'bigfei'], + '/': ['nczitzk'], }; diff --git a/lib/v2/picuki/profile.js b/lib/v2/picuki/profile.js index 269f9cbc32..a117876611 100644 --- a/lib/v2/picuki/profile.js +++ b/lib/v2/picuki/profile.js @@ -48,20 +48,8 @@ module.exports = async (ctx) => { const $ = cheerio.load(data); // Instagram 允许最多 10 条图片/视频任意混合于一条 post,picuki 在所有情况下都会将它(们)置于 .single-photo 内 let html = ''; - $('.single-photo img').each((_, item) => { - html += $(item).toString(); - }); - $('.single-photo video').each((_, item) => { - item = $(item); - let videoSrc = item.attr('src'); - if (videoSrc === undefined) { - videoSrc = item.children().attr('src'); - } - const videoPoster = item.attr('poster'); - html += art(path.join(__dirname, 'templates/video.art'), { - videoSrc, - videoPoster, - }); + $('.single-photo img,video').each((_, item) => { + html += $(item).toString(); // 可能是视频,也可能是图片,格式都比较友好,这里直接添加 }); return html; } diff --git a/lib/v2/picuki/templates/video.art b/lib/v2/picuki/templates/video.art deleted file mode 100644 index 67e673cab9..0000000000 --- a/lib/v2/picuki/templates/video.art +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/lib/v2/radio/album.js b/lib/v2/radio/album.js deleted file mode 100644 index f6aec28a84..0000000000 --- a/lib/v2/radio/album.js +++ /dev/null @@ -1,96 +0,0 @@ -const got = require('@/utils/got'); -const { parseDate } = require('@/utils/parse-date'); -const { art } = require('@/utils/render'); -const path = require('path'); -const CryptoJS = require('crypto-js'); - -module.exports = async (ctx) => { - const KEY = 'f0fc4c668392f9f9a447e48584c214ee'; - - const id = ctx.params.id; - const size = ctx.query.limit ?? '100'; - - const params = `albumId=${id}&pageNo=0&pageSize=${size}`; - - const rootUrl = 'https://www.radio.cn'; - const apiRootUrl = 'https://ytmsout.radio.cn'; - const detailRootUrl = 'https://ytapi.radio.cn'; - - const iconUrl = `${rootUrl}/pc-portal/image/icon_32.jpg`; - const currentUrl = `${rootUrl}/pc-portal/sanji/detail.html?columnId=${id}`; - const apiUrl = `${apiRootUrl}/web/appSingle/pageByAlbum?${params}`; - const detailUrl = `${detailRootUrl}/ytsrv/srv/wifimusicbox/demand/detail`; - - const detailResponse = await got({ - method: 'post', - url: detailUrl, - form: { - pageIndex: '0', - sortType: '1', - mobileId: '', - providerCode: '25010', - pid: id, - paySongFlag: '1', - richText: '1', - h5flag: '1', - }, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - version: '4.0.0', - providerCode: '25010', - equipmentSource: 'WEB', - }, - }); - - const data = detailResponse.data; - - const timestamp = new Date().getTime(); - const sign = CryptoJS.MD5(`${params}×tamp=${timestamp}&key=${KEY}`).toString().toUpperCase(); - - const response = await got({ - method: 'get', - url: apiUrl, - headers: { - sign, - timestamp, - 'Content-Type': 'application/json', - equipmentId: '0000', - platformCode: 'WEB', - }, - }); - - const items = response.data.data.data.map((item) => { - let enclosure_url = item.playUrlHigh ?? item.playUrlLow; - enclosure_url = /\.m3u8$/.test(enclosure_url) ? item.downloadUrl : enclosure_url; - - const enclosure_type = `audio/${enclosure_url.match(/\.(\w+)$/)[1]}`; - - return { - guid: item.id, - title: item.name, - link: enclosure_url, - description: art(path.join(__dirname, 'templates/description.art'), { - description: item.des, - enclosure_url, - enclosure_type, - }), - author: data.anchorpersons, - pubDate: parseDate(item.publishTime), - enclosure_url, - enclosure_type, - enclosure_length: item.fileSize, - itunes_duration: item.duration, - itunes_item_image: iconUrl, - }; - }); - - ctx.state.data = { - title: `云听 - ${data.columnName}`, - link: currentUrl, - item: items, - image: iconUrl, - itunes_author: data.anchorpersons, - description: data.descriptions ?? data.descriptionSimple, - itunes_category: data.atypeInfo.map((c) => c.categoryName).join(), - }; -}; diff --git a/lib/v2/radio/index.js b/lib/v2/radio/index.js index 182c4c9eda..9e6f6d43aa 100644 --- a/lib/v2/radio/index.js +++ b/lib/v2/radio/index.js @@ -5,44 +5,37 @@ const path = require('path'); module.exports = async (ctx) => { const id = ctx.params.id; - const size = ctx.query.limit ?? '100'; - const rootUrl = 'https://www.radio.cn'; - const apiRootUrl = 'http://tacc.radio.cn'; - const apiUrl = `${apiRootUrl}/pcpages/odchannelpages?od_id=${id}&start=1&rows=${size}`; + const rootUrl = 'http://www.radio.cn'; const currentUrl = `${rootUrl}/pc-portal/sanji/detail.html?columnId=${id}`; + const apiRootUrl = 'http://tacc.radio.cn'; + const apiUrl = `${apiRootUrl}/pcpages/odchannelpages?od_id=${id}&start=1&rows=50`; + const response = await got({ method: 'get', url: apiUrl, }); if (/^\(.*\)$/.test(response.data)) { - response.data = JSON.parse(response.data.match(/^\((.*)\)$/)[1]); + response.data = JSON.parse(response.data)[0]; } const data = response.data.data; - const items = data.program.map((item) => { - const enclosure_url = item.streams[0].url; - const enclosure_type = `audio/${enclosure_url.match(/\.(\w+)$/)[1]}`; - - return { - guid: item.id, - title: item.name, - link: item.streams[0].url, - description: art(path.join(__dirname, 'templates/description.art'), { - description: item.description, - enclosure_url, - enclosure_type, - }), - pubDate: parseDate(item.onlinetime), - enclosure_url, - enclosure_type, - itunes_duration: item.duration, - itunes_item_image: data.odchannel.imageUrl[0].url, - }; - }); + const items = data.program.map((item) => ({ + guid: item.id, + title: item.name, + link: item.streams[0].url, + description: `${item.description}${art(path.join(__dirname, 'templates/description.art'), { + streams: item.streams, + })}`, + pubDate: parseDate(item.onlinetime), + enclosure_url: item.streams[0].url, + enclosure_type: 'audio/x-m4a', + itunes_duration: item.duration, + itunes_item_image: data.odchannel.imageUrl[0].url, + })); ctx.state.data = { title: `云听 - ${data.odchannel.name}`, diff --git a/lib/v2/radio/maintainer.js b/lib/v2/radio/maintainer.js index cafcf1fd96..fac8655d8c 100644 --- a/lib/v2/radio/maintainer.js +++ b/lib/v2/radio/maintainer.js @@ -1,5 +1,3 @@ module.exports = { - '/album/:id': ['nczitzk'], - '/zhibo/:id': ['nczitzk'], '/:id': ['kt286', 'nczitzk'], }; diff --git a/lib/v2/radio/radar.js b/lib/v2/radio/radar.js index 93f72c9094..fd7428fd9b 100644 --- a/lib/v2/radio/radar.js +++ b/lib/v2/radio/radar.js @@ -3,23 +3,11 @@ module.exports = { _name: '云听', '.': [ { - title: '专辑', - docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-zhuan-ji', - source: ['/pc-portal/sanji/detail.html', '/share/albumDetail', '/'], - target: (params, url) => `/radio/album/${new URL(url).searchParams.get('columnId')}`, - }, - { - title: '节目', - docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-jie-mu', - source: ['/pc-portal/sanji/detail.html', '/share/albumDetail', '/'], + title: '电台节目', + docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-dian-tai-jie-mu', + source: ['/pc-portal/sanji/detail.html', '/'], target: (params, url) => `/radio/${new URL(url).searchParams.get('columnId')}`, }, - { - title: '直播', - docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-zhi-bo', - source: ['/pc-portal/sanji/zhibo_2.html', '/'], - target: (params, url) => `/radio/zhibo/${new URL(url).searchParams.get('name')}`, - }, ], }, }; diff --git a/lib/v2/radio/radio.js b/lib/v2/radio/radio.js new file mode 100644 index 0000000000..4534cd253d --- /dev/null +++ b/lib/v2/radio/radio.js @@ -0,0 +1,50 @@ +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + const channelname = ctx.params.channelname; // 专辑id + const name = ctx.params.name; // 专辑id + + const api = `http://tacc.radio.cn/pcpages/searchs/livehistory?channelname=${channelname}&name=${name}&start=1&rows=20`; + const response = await got.get(api); + + const playList = response.data.passprogram; + let title = ''; + let itunes_category = ''; + let items = []; + if (playList && playList.length > 0) { + const first = playList[0]; + title = `${first.channel_name} ${first.name}`; + itunes_category = first.channel_name; + + items = playList.map((item) => { + const single = { + title: `${item.name} ${item.broadcast_date}`, + link: 'http://' + item.stream_domain1 + item.stream_url1, + description: ` + + `, + pubDate: item.update_time, + guid: item.id, + itunes_item_image: 'http://www.radio.cn/pc-portal/image/icon_32.jpg', + enclosure_url: 'http://' + item.stream_domain1 + item.stream_url1, + itunes_duration: item.resource_length, + enclosure_type: 'audio/x-m4a', + }; + return single; + }); + } + + ctx.state.data = { + title, + link: `http://www.radio.cn/pc-portal/sanji/zhibo_2.html?channelname=${channelname}&name=${name}&title=radio`, + description: title, + image: 'http://www.radio.cn/pc-portal/image/icon_32.jpg', + itunes_author: 'radio.cn', + itunes_category, + item: items, + }; +}; diff --git a/lib/v2/radio/router.js b/lib/v2/radio/router.js index dd022b028f..641c23df3a 100644 --- a/lib/v2/radio/router.js +++ b/lib/v2/radio/router.js @@ -1,5 +1,3 @@ module.exports = function (router) { - router.get('/album/:id', require('./album')); - router.get('/zhibo/:id', require('./zhibo')); router.get('/:id', require('./index')); }; diff --git a/lib/v2/radio/templates/description.art b/lib/v2/radio/templates/description.art index 995d8dd8da..6325c012a5 100644 --- a/lib/v2/radio/templates/description.art +++ b/lib/v2/radio/templates/description.art @@ -1,8 +1,5 @@ -{{ if description }} -

{{ description }}

-{{ /if }} -{{ if enclosure_url && enclosure_type }} -{{ /if }} \ No newline at end of file +{{each streams stream}} + +{{/each}} + \ No newline at end of file diff --git a/lib/v2/radio/zhibo.js b/lib/v2/radio/zhibo.js deleted file mode 100644 index ea4a3540ec..0000000000 --- a/lib/v2/radio/zhibo.js +++ /dev/null @@ -1,70 +0,0 @@ -const got = require('@/utils/got'); -const { parseDate } = require('@/utils/parse-date'); -const { art } = require('@/utils/render'); -const path = require('path'); -const CryptoJS = require('crypto-js'); - -module.exports = async (ctx) => { - const KEY = 'f0fc4c668392f9f9a447e48584c214ee'; - - const id = ctx.params.id; - const size = ctx.query.limit ?? '100'; - - const params = `columnId=${id}&pageNo=0&pageSize=${size}`; - - const rootUrl = 'https://www.radio.cn'; - const apiRootUrl = 'https://ytmsout.radio.cn'; - - const iconUrl = `${rootUrl}/pc-portal/image/icon_32.jpg`; - const currentUrl = `${rootUrl}/pc-portal/sanji/zhibo_2.html?name=${id}`; - const apiUrl = `${apiRootUrl}/web/appProgram/pageByColumn?${params}`; - - const timestamp = new Date().getTime(); - const sign = CryptoJS.MD5(`${params}×tamp=${timestamp}&key=${KEY}`).toString().toUpperCase(); - - const response = await got({ - method: 'get', - url: apiUrl, - headers: { - sign, - timestamp, - 'Content-Type': 'application/json', - equipmentId: '0000', - platformCode: 'WEB', - }, - }); - - const data = response.data.data.data; - - const items = data.map((item) => { - let enclosure_url = item.playUrlHigh ?? item.playUrlLow; - enclosure_url = /\.m3u8$/.test(enclosure_url) ? item.downloadUrl : enclosure_url; - - const enclosure_type = `audio/${enclosure_url.match(/\.(\w+)$/)[1]}`; - - return { - guid: item.id, - title: item.name, - link: enclosure_url, - description: art(path.join(__dirname, 'templates/description.art'), { - description: item.des, - enclosure_url, - enclosure_type, - }), - pubDate: parseDate(item.startTime), - enclosure_url, - enclosure_type, - itunes_duration: item.durationStr, - itunes_item_image: iconUrl, - }; - }); - - ctx.state.data = { - title: `云听 - ${data[0].name}`, - link: currentUrl, - item: items, - image: iconUrl, - itunes_author: 'radio.cn', - description: data[0].des, - }; -}; diff --git a/lib/v2/swpu/cjxy.js b/lib/v2/swpu/cjxy.js deleted file mode 100644 index 33ef336e0b..0000000000 --- a/lib/v2/swpu/cjxy.js +++ /dev/null @@ -1,53 +0,0 @@ -const { parseDate } = require('@/utils/parse-date'); -const cheerio = require('cheerio'); -const got = require('@/utils/got'); -const timezone = require('@/utils/timezone'); - -module.exports = async (ctx) => { - const url = `https://www.swpu.edu.cn/nccjxy/xydt/${ctx.params.code}.htm`; - - const res = await got(url); - const $ = cheerio.load(res.data); - - let title = $('title').text(); - title = title.substring(0, title.indexOf('-')); - - const items = $('.main_conRCb > ul > li') - .toArray() - .map((elem) => ({ - title: $('a[href]', elem).text().trim(), - pubDate: timezone(parseDate($('span', elem).text(), 'YYYY年MM月DD日'), +8), - link: `https://www.swpu.edu.cn/nccjxy/${$('a[href]', elem).attr('href').split('../')[1]}`, - })); - - const out = await Promise.all( - items.map((item) => - ctx.cache.tryGet(item.link, async () => { - const res = await got(item.link); - const $ = cheerio.load(res.data); - if ($('title').text().startsWith('系统提示')) { - item.author = '系统'; - item.description = '无权访问'; - } else { - item.author = '财经学院'; - item.description = $('.v_news_content').html(); - for (const elem of $('.v_news_content p')) { - if ($(elem).css('text-align') === 'right') { - item.author = $(elem).text(); - break; - } - } - } - return item; - }) - ) - ); - - ctx.state.data = { - title: `西南石油大学财经学院 ${title}`, - link: url, - description: `西南石油大学财经学院 ${title}`, - language: 'zh-CN', - item: out, - }; -}; diff --git a/lib/v2/swpu/is.js b/lib/v2/swpu/is.js deleted file mode 100644 index cde903df9d..0000000000 --- a/lib/v2/swpu/is.js +++ /dev/null @@ -1,53 +0,0 @@ -const { parseDate } = require('@/utils/parse-date'); -const cheerio = require('cheerio'); -const got = require('@/utils/got'); -const timezone = require('@/utils/timezone'); - -module.exports = async (ctx) => { - const url = `https://www.swpu.edu.cn/is/xydt/${ctx.params.code}.htm`; - - const res = await got(url); - const $ = cheerio.load(res.data); - - let title = $('title').text(); - title = title.substring(0, title.indexOf('-')); - - const items = $('tr[height="20"]') - .toArray() - .map((elem) => ({ - title: $('a[title]', elem).text().trim(), - pubDate: timezone(parseDate($('td:eq(1)', elem).text(), 'YYYY年MM月DD日'), +8), - link: `https://www.swpu.edu.cn/is/${$('a[href]', elem).attr('href').split('../')[1]}`, - })); - - const out = await Promise.all( - items.map((item) => - ctx.cache.tryGet(item.link, async () => { - const res = await got(item.link); - const $ = cheerio.load(res.data); - if ($('title').text().startsWith('系统提示')) { - item.author = '系统'; - item.description = '无权访问'; - } else { - item.author = '学院'; - item.description = $('.v_news_content').html(); - for (const elem of $('.v_news_content p')) { - if ($(elem).css('text-align') === 'right') { - item.author = $(elem).text(); - break; - } - } - } - return item; - }) - ) - ); - - ctx.state.data = { - title: `西南石油大学信息学院 ${title}`, - link: url, - description: `西南石油大学信息学院 ${title}`, - language: 'zh-CN', - item: out, - }; -}; diff --git a/lib/v2/swpu/maintainer.js b/lib/v2/swpu/maintainer.js index 7e603e379e..3ce9c2e4bb 100644 --- a/lib/v2/swpu/maintainer.js +++ b/lib/v2/swpu/maintainer.js @@ -1,8 +1,6 @@ module.exports = { '/bgw/:code': ['CYTMWIA'], - '/cjxy/:code': ['RiverTwilight'], '/dean/:code': ['CYTMWIA'], '/dxy/:code': ['CYTMWIA'], - '/is/:code': ['RiverTwilight'], '/scs/:code': ['CYTMWIA'], }; diff --git a/lib/v2/swpu/radar.js b/lib/v2/swpu/radar.js index 68d2392709..00b13ea650 100644 --- a/lib/v2/swpu/radar.js +++ b/lib/v2/swpu/radar.js @@ -26,18 +26,6 @@ module.exports = { source: ['/'], target: '', }, - { - title: '信息学院', - docs: 'https://docs.rsshub.app/university.html#xi-nan-shi-you-da-xue', - source: ['/'], - target: '', - }, - { - title: '财经学院', - docs: 'https://docs.rsshub.app/university.html#xi-nan-shi-you-da-xue', - source: ['/'], - target: '', - }, ], }, }; diff --git a/lib/v2/swpu/router.js b/lib/v2/swpu/router.js index 9fe26808c2..c548310ca9 100644 --- a/lib/v2/swpu/router.js +++ b/lib/v2/swpu/router.js @@ -1,8 +1,6 @@ module.exports = function (router) { router.get('/bgw/:code', require('./bgw')); - router.get('/cjxy/:code', require('./cjxy')); router.get('/dean/:code', require('./dean')); router.get('/dxy/:code', require('./dxy')); - router.get('/is/:code', require('./is')); router.get('/scs/:code', require('./scs')); }; diff --git a/lib/v2/theverge/index.js b/lib/v2/theverge/index.js deleted file mode 100644 index f251db2d1b..0000000000 --- a/lib/v2/theverge/index.js +++ /dev/null @@ -1,90 +0,0 @@ -const got = require('@/utils/got'); -const parser = require('@/utils/rss-parser'); -const cheerio = require('cheerio'); - -module.exports = async (ctx) => { - const feed = await parser.parseURL('https://www.theverge.com/rss/index.xml'); - - const items = await Promise.all( - feed.items.map((item) => - ctx.cache.tryGet(item.link, async () => { - const response = await got(item.link); - - const $ = cheerio.load(response.data); - - const content = $('#content'); - const body = $('.duet--article--article-body-component-container'); - - // 处理封面图片 - - const cover = $('meta[property="og:image"]'); - - if (cover.length > 0) { - $(``).insertBefore(body[0].childNodes[0]); - } - - // 处理封面视频 - $('div.l-col__main > div.c-video-embed, div.c-entry-hero > div.c-video-embed').each((i, e) => { - const src = `https://volume.vox-cdn.com/embed/${e.attribs['data-volume-uuid']}?autoplay=false`; - - $(``).insertBefore(body[0].childNodes[0]); - }); - - // 处理封面视频 - $('div.l-col__main > div.c-video-embed--media iframe').each((i, e) => { - $(e).insertBefore(body[0].childNodes[0]); - }); - - // 处理文章图片 - content.find('figure.e-image').each((i, e) => { - let src, caption; - - // 处理 jpeg, png - if ($(e).find('picture > source').length > 0) { - src = $(e) - .find('picture > img')[0] - .attribs.srcset.match(/(?<=320w,).*?(?=520w)/g)[0] - .trim(); - } else if ($(e).find('img.c-dynamic-image').length > 0) { - // 处理 gif - src = $(e).find('span.e-image__image')[0].attribs['data-original']; - } - - // 处理 caption - if ($(e).find('span.e-image__meta').length > 0) { - caption = $(e).find('span.e-image__meta').text(); - } - - const figure = `
${caption ? `
${caption}
` : ''}
`; - - $(figure).insertBefore(e); - - $(e).remove(); - }); - - const lede = $('.duet--article--lede h2:first'); - if (lede[0]) { - lede.insertBefore(body[0].childNodes[0]); - } - - // 移除无用 DOM - content.find('.duet--article--comments-join-the-conversation').remove(); - content.find('.duet--recirculation--related-list').remove(); - delete item.content; - delete item.contentSnippet; - delete item.isoDate; - - item.description = body.html(); - - return item; - }) - ) - ); - - ctx.state.data = { - title: feed.title, - link: feed.link, - description: feed.description, - item: items, - }; -}; diff --git a/lib/v2/theverge/maintainer.js b/lib/v2/theverge/maintainer.js deleted file mode 100644 index bccb53f334..0000000000 --- a/lib/v2/theverge/maintainer.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - '/': ['HenryQW'], -}; diff --git a/lib/v2/theverge/radar.js b/lib/v2/theverge/radar.js deleted file mode 100644 index 357423e71f..0000000000 --- a/lib/v2/theverge/radar.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - 'theverge.com': { - _name: 'The Verge', - '.': [ - { - title: 'The Verge', - docs: 'https://docs.rsshub.app/new-media.html#the-verge', - source: ['/rss/index.xml', '/'], - target: '/theverge', - }, - ], - }, -}; diff --git a/lib/v2/theverge/router.js b/lib/v2/theverge/router.js deleted file mode 100644 index 7e427447c7..0000000000 --- a/lib/v2/theverge/router.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (router) => { - router.get('/', require('./index')); -}; diff --git a/lib/v2/udn/global/index.js b/lib/v2/udn/global/index.js deleted file mode 100644 index b37db82b2c..0000000000 --- a/lib/v2/udn/global/index.js +++ /dev/null @@ -1,67 +0,0 @@ -const got = require('@/utils/got'); -const cheerio = require('cheerio'); -const timezone = require('@/utils/timezone'); -const { parseDate } = require('@/utils/parse-date'); - -module.exports = async (ctx) => { - const category = ctx.params.category ?? ''; - - const start = category === 'hot' ? 6 : 0; - const end = category === 'new' ? 6 : 12; - - const rootUrl = 'https://global.udn.com'; - const currentUrl = `${rootUrl}/global_vision/index${category ? `/${category}` : ''}`; - - const response = await got({ - method: 'get', - url: currentUrl, - }); - - const $ = cheerio.load(response.data); - - $('.topic').remove(); - - let items = $('.news_cards ul li a') - .toArray() - .slice(start, end) - .concat(category === '' ? $('.last24, h2').find('a').toArray() : []) - .map((item) => { - item = $(item); - - const link = item.attr('href'); - - return { - title: item.find('h3').text() || item.text(), - link: /^http/.test(link) ? link : `${rootUrl}${item.attr('href')}`, - }; - }); - - items = await Promise.all( - items.map((item) => - ctx.cache.tryGet(item.link, async () => { - const detailResponse = await got({ - method: 'get', - url: item.link, - }); - - const content = cheerio.load(detailResponse.data); - - content('#story_art_title, #story_bady_info, #story_also').remove(); - content('.social_bar, .photo_pop, .only_mobile, .area').remove(); - - item.description = content('#tags').prev().html(); - item.author = content('#story_author_name').text(); - item.pubDate = timezone(parseDate(content('meta[name="date"]').attr('content')), +8); - item.category = content('meta[name="news_keywords"]').attr('content').split(','); - - return item; - }) - ) - ); - - ctx.state.data = { - title: $('title').text(), - link: currentUrl, - item: items, - }; -}; diff --git a/lib/v2/udn/global/tag.js b/lib/v2/udn/global/tag.js deleted file mode 100644 index f14c078356..0000000000 --- a/lib/v2/udn/global/tag.js +++ /dev/null @@ -1,51 +0,0 @@ -const got = require('@/utils/got'); -const cheerio = require('cheerio'); -const { parseDate } = require('@/utils/parse-date'); - -module.exports = async (ctx) => { - const tag = ctx.params.tag ?? '過去24小時'; - - const rootUrl = 'https://global.udn.com'; - const currentUrl = `${rootUrl}/search/tagging/1020/${tag}`; - const apiUrl = `${rootUrl}/search/ajax_tag/1020/${tag}`; - - const response = await got({ - method: 'get', - url: apiUrl, - }); - - let items = response.data.articles.map((item) => ({ - title: item.TITLE, - author: item.AUTHOR, - pubDate: parseDate(item.TIMESTAMP * 1000), - category: item.TAG.map((t) => t.tag), - link: `${rootUrl}/global_vision/story/${item.CATE_ID}/${item.ART_ID}`, - })); - - items = await Promise.all( - items.map((item) => - ctx.cache.tryGet(item.link, async () => { - const detailResponse = await got({ - method: 'get', - url: item.link, - }); - - const content = cheerio.load(detailResponse.data); - - content('#story_art_title, #story_bady_info, #story_also').remove(); - content('.social_bar, .photo_pop, .only_mobile, .area').remove(); - - item.author = content('#story_author_name').text(); - item.description = content('#tags').prev().html(); - - return item; - }) - ) - ); - - ctx.state.data = { - title: `轉角國際 udn Global - ${tag}`, - link: currentUrl, - item: items, - }; -}; diff --git a/lib/v2/udn/maintainer.js b/lib/v2/udn/maintainer.js index e5e0f0907a..a9599ed9b2 100644 --- a/lib/v2/udn/maintainer.js +++ b/lib/v2/udn/maintainer.js @@ -1,5 +1,3 @@ module.exports = { - '/global/:category?': ['nczitzk'], - '/global/tag/:tag?': ['emdoe', 'nczitzk'], '/news/breakingnews/:id': ['miles170'], }; diff --git a/lib/v2/udn/radar.js b/lib/v2/udn/radar.js index 931c472348..09f9c35ba3 100644 --- a/lib/v2/udn/radar.js +++ b/lib/v2/udn/radar.js @@ -5,23 +5,9 @@ module.exports = { { title: '即時新聞', docs: 'https://docs.rsshub.app/new-media.html#lian-he-xin-wen-wang-ji-shi-xin-wen', - source: ['/news/breaknews/1/:id', '/'], + source: '/news/breaknews/1/:id', target: '/udn/news/breakingnews/:id', }, ], - global: [ - { - title: '轉角國際 - 首頁', - docs: 'https://docs.rsshub.app/new-media.html#lian-he-xin-wen-wang-zhuan-jiao-guo-ji-shou-ye', - source: ['/global_vision/index/:category', '/'], - target: '/udn/global/:category?', - }, - { - title: '轉角國際 - 標籤', - docs: 'https://docs.rsshub.app/new-media.html#lian-he-xin-wen-wang-zhuan-jiao-guo-ji-biao-qian', - source: ['/search/tagging/1020/:tag', '/'], - target: '/udn/global/tag/:tag?', - }, - ], }, }; diff --git a/lib/v2/udn/router.js b/lib/v2/udn/router.js index 2e0d731cf8..c6cfe33c45 100644 --- a/lib/v2/udn/router.js +++ b/lib/v2/udn/router.js @@ -1,5 +1,3 @@ module.exports = (router) => { - router.get('/global/tag/:tag?', require('./global/tag')); - router.get('/global/:category?', require('./global/index')); router.get('/news/breakingnews/:id', require('./breaking-news')); }; diff --git a/lib/v2/xueqiu/maintainer.js b/lib/v2/xueqiu/maintainer.js index dc49083497..75be5e02ca 100644 --- a/lib/v2/xueqiu/maintainer.js +++ b/lib/v2/xueqiu/maintainer.js @@ -6,7 +6,6 @@ module.exports = { '/snb/:id': ['ZhishanZhang'], '/stock_comments/:id/:titleLength?': ['zytomorrow'], '/stock_info/:id/:type?': ['YuYang'], - '/today': ['nczitzk'], '/user/:id/:type?': ['imlonghao'], '/user_stock/:id': ['hillerliao'], }; diff --git a/lib/v2/xueqiu/radar.js b/lib/v2/xueqiu/radar.js index 99f456db88..2b52a4d70a 100644 --- a/lib/v2/xueqiu/radar.js +++ b/lib/v2/xueqiu/radar.js @@ -13,12 +13,6 @@ module.exports = { 'xueqiu.com': { _name: '雪球', '.': [ - { - title: '今日话题', - docs: 'https://docs.rsshub.app/finance.html#xue-qiu', - source: ['/today'], - target: '/xueqiu/today', - }, { title: '用户动态', docs: 'https://docs.rsshub.app/finance.html#xue-qiu', diff --git a/lib/v2/xueqiu/router.js b/lib/v2/xueqiu/router.js index e266cad05f..963ac5b4f3 100644 --- a/lib/v2/xueqiu/router.js +++ b/lib/v2/xueqiu/router.js @@ -6,7 +6,6 @@ module.exports = (router) => { router.get('/snb/:id', require('./snb')); router.get('/stock_comments/:id/:titleLength?', require('./stock_comments')); router.get('/stock_info/:id/:type?', require('./stock_info')); - router.get('/today', require('./today')); router.get('/user/:id/:type?', require('./user')); router.get('/user_stock/:id', require('./user_stock')); }; diff --git a/lib/v2/xueqiu/today.js b/lib/v2/xueqiu/today.js deleted file mode 100644 index 570921af17..0000000000 --- a/lib/v2/xueqiu/today.js +++ /dev/null @@ -1,65 +0,0 @@ -const got = require('@/utils/got'); -const cheerio = require('cheerio'); -const { parseDate } = require('@/utils/parse-date'); - -module.exports = async (ctx) => { - const size = ctx.query.limit ?? '20'; - - const rootUrl = 'https://xueqiu.com'; - const currentUrl = `${rootUrl}/today`; - const apiUrl = `${rootUrl}/statuses/hot/listV2.json?since_id=-1&size=${size}`; - - const firstResponse = await got({ - method: 'get', - url: rootUrl, - }); - - const token = firstResponse.headers['set-cookie'].join(',').match(/(xq_a_token=.*?;)/)[1]; - - const response = await got({ - method: 'get', - url: apiUrl, - headers: { - Referer: rootUrl, - Cookie: token, - }, - }); - - let items = response.data.items.map((item) => { - item = item.original_status; - - return { - title: item.title || item.rawTitle || item.description.replace(/<(.*?)>/g, ''), - link: `${rootUrl}${item.target}`, - pubDate: parseDate(item.created_at), - author: item.user.screen_name, - }; - }); - - items = await Promise.all( - items.map((item) => - ctx.cache.tryGet(item.link, async () => { - const detailResponse = await got({ - method: 'get', - url: item.link, - headers: { - Referer: rootUrl, - Cookie: token, - }, - }); - - const content = cheerio.load(detailResponse.data); - - item.description = content('.article__bd__detail').html(); - - return item; - }) - ) - ); - - ctx.state.data = { - title: '今日话题 - 雪球', - link: currentUrl, - item: items, - }; -}; diff --git a/lib/v2/yoasobi-music/info.js b/lib/v2/yoasobi-music/info.js index d1a01ac861..668f576263 100644 --- a/lib/v2/yoasobi-music/info.js +++ b/lib/v2/yoasobi-music/info.js @@ -30,7 +30,6 @@ module.exports = async (ctx) => { return { id: isBio ? null : item.id, - guid: isBio ? `bio:${item.url}` : `news:${item.title}${item.date}`, title: isBio ? `${randomEmoji} ${item.url}` : item.title, category: item.category ?? 'Achievement', date: isBio ? item.url : item.date, @@ -59,7 +58,7 @@ module.exports = async (ctx) => { // the article publish time pubDate: parseDate(i.date), // guid - guid: i.guid, + guid: i.title + i.date, // the article link link: i.id ? `${officialUrl}/${i.id}` : officialUrl, category: i.category, diff --git a/lib/v2/zhihu/activities.js b/lib/v2/zhihu/activities.js index 677acef3e3..64421f190c 100644 --- a/lib/v2/zhihu/activities.js +++ b/lib/v2/zhihu/activities.js @@ -1,9 +1,8 @@ -/* eslint-disable no-console */ const got = require('@/utils/got'); const utils = require('./utils'); const { parseDate } = require('@/utils/parse-date'); -const g_encrypt = require('./execlib/g_encrypt_3'); -const zhihu_hash = require('./execlib/hash.js'); +const md5 = require('@/utils/md5'); +const g_encrypt = require('./execlib/g_encrypt'); module.exports = async (ctx) => { const id = ctx.params.id; @@ -34,16 +33,16 @@ module.exports = async (ctx) => { const cookie = `d_c0=${cookie_mes}`; // second: get real data from zhihu - const apiPath = `/api/v3/moments/${id}/activities?limit=7&desktop=true`; + const apiPath = `/api/v4/web_moments/${id}/activities?limit=7&desktop=true`; // calculate x-zse-96, refer to https://github.com/srx-2000/spider_collection/issues/18 - const f = `101_3_3.0+${apiPath}+${cookie_mes}`; - const xzse96 = '2.0_' + g_encrypt(zhihu_hash(f)); - const _header = { cookie, 'x-zse-96': xzse96, 'x-app-za': 'OS=Web', 'x-zse-93': '101_3_3.0' }; + const f = `101_3_2.0+${apiPath}+${cookie_mes}`; + const xzse96 = '2.0_' + g_encrypt(md5(f)); + const _header = { cookie, 'x-zse-96': xzse96, 'x-app-za': 'OS=Web', 'x-zse-93': '101_3_2.0' }; const response = await got({ method: 'get', - url: `https://www.zhihu.com/api/v3/moments/${id}/activities?limit=7&desktop=true`, + url: `https://www.zhihu.com/api/v4/web_moments/${id}/activities?limit=7&desktop=true`, headers: { ...utils.header, ..._header, diff --git a/lib/v2/zhihu/execlib/g_encrypt_3.js b/lib/v2/zhihu/execlib/g_encrypt_3.js deleted file mode 100644 index 7e3affd5d4..0000000000 --- a/lib/v2/zhihu/execlib/g_encrypt_3.js +++ /dev/null @@ -1,430 +0,0 @@ -/* eslint-disable space-in-parens */ -/* eslint-disable no-eval */ -/* eslint-disable block-scoped-var */ -/* eslint-disable no-var */ -/* eslint-disable eqeqeq */ -/* eslint-disable no-unused-vars */ -/* eslint-disable no-func-assign */ - -const jsdom = require('jsdom'); -const { JSDOM } = jsdom; -const dom = new JSDOM(`

Hello world

`); -dom.reconfigure({ - url: 'https://www.zhihu.com', -}); -const window = dom.window; -const document = dom.window.document; -document.toString = function () { - return '[object HTMLDocument]'; -}; -const navigator = dom.window.navigator; -const location = dom.window.location; -const Location = dom.window.location; -const history = dom.window.history; -const screen = dom.window.screen; -const alert = dom.window.alert; - -function o(e) { - return (o = - 'function' == typeof Symbol && 'symbol' == typeof Symbol.A - ? function (e) { - return typeof e; - } - : function (e) { - return e && 'function' == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? 'symbol' : typeof e; - })(e); -} -function x(e) { - return C(e) || s(e) || t(); -} -function C(e) { - if (Array.isArray(e)) { - for (var t = 0, n = new Array(e.length); t < e.length; t++) { - n[t] = e[t]; - } - return n; - } -} -function s(e) { - if (Symbol.A in Object(e) || '[object Arguments]' === Object.prototype.toString.call(e)) { - return Array.from(e); - } -} -function t() { - throw new TypeError('Invalid attempt to spread non-iterable instance'); -} -Object.defineProperty(exports, '__esModule', { - value: !0, -}); -var A = '3.0', - S = window, - h; -function i(e, t, n) { - (t[n] = 255 & (e >>> 24)), (t[n + 1] = 255 & (e >>> 16)), (t[n + 2] = 255 & (e >>> 8)), (t[n + 3] = 255 & e); -} -function B(e, t) { - return ((255 & e[t]) << 24) | ((255 & e[t + 1]) << 16) | ((255 & e[t + 2]) << 8) | (255 & e[t + 3]); -} -function Q(e, t) { - return ((4294967295 & e) << t) | (e >>> (32 - t)); -} -function G(e) { - var t = new Array(4), - n = new Array(4); - i(e, t, 0), (n[0] = h.zb[255 & t[0]]), (n[1] = h.zb[255 & t[1]]), (n[2] = h.zb[255 & t[2]]), (n[3] = h.zb[255 & t[3]]); - var r = B(n, 0); - return r ^ Q(r, 2) ^ Q(r, 10) ^ Q(r, 18) ^ Q(r, 24); -} -var __g = { - x(e, t) { - for (var n = [], r = e.length, i = 0; 0 < r; r -= 16) { - for (var o = e.slice(16 * i, 16 * (i + 1)), a = new Array(16), c = 0; c < 16; c++) { - a[c] = o[c] ^ t[c]; - } - (t = __g.r(a)), (n = n.concat(t)), i++; - } - return n; - }, - r(e) { - var t = new Array(16), - n = new Array(36); - (n[0] = B(e, 0)), (n[1] = B(e, 4)), (n[2] = B(e, 8)), (n[3] = B(e, 12)); - for (var r = 0; r < 32; r++) { - var o = G(n[r + 1] ^ n[r + 2] ^ n[r + 3] ^ h.zk[r]); - n[r + 4] = n[r] ^ o; - } - return i(n[35], t, 0), i(n[34], t, 4), i(n[33], t, 8), i(n[32], t, 12), t; - }, -}; -function l() { - (this.C = [0, 0, 0, 0]), - (this.s = +[]), - (this.t = []), - (this.S = []), - (this.h = []), - (this.i = []), - (this.B = []), - (this.Q = !1), - (this.G = []), - (this.D = []), - (this.w = 1024), - (this.g = null), - (this.a = Date.now()), - (this.e = +[]), - (this.T = 255), - (this.V = null), - (this.U = Date.now), - (this.M = new Array(32)); -} -(l.prototype.O = function (A, C, s) { - for (var t, S, h, i, B, Q, G, D, w, g, a, e, E, T, r, V, U, M, O, c, I; this.T < this.w; ) { - try { - switch (this.T) { - case 27: - (this.C[this.c] = this.C[this.I] >> this.C[this.F]), (this.M[12] = 35), (this.T = this.T * (this.C.length + (this.M[13] ? 3 : 9)) + 1); - break; - case 34: - (this.C[this.c] = this.C[this.I] & this.C[this.F]), (this.T = this.T * (this.M[15] - 6) + 12); - break; - case 41: - (this.C[this.c] = this.C[this.I] <= this.C[this.F]), (this.T = 8 * this.T + 27); - break; - case 48: - (this.C[this.c] = !this.C[this.I]), (this.T = 7 * this.T + 16); - break; - case 50: - (this.C[this.c] = this.C[this.I] | this.C[this.F]), (this.T = 6 * this.T + 52); - break; - case 57: - (this.C[this.c] = this.C[this.I] >>> this.C[this.F]), (this.T = 7 * this.T - 47); - break; - case 64: - (this.C[this.c] = this.C[this.I] << this.C[this.F]), (this.T = 5 * this.T + 32); - break; - case 71: - (this.C[this.c] = this.C[this.I] ^ this.C[this.F]), (this.T = 6 * this.T - 74); - break; - case 78: - (this.C[this.c] = this.C[this.I] & this.C[this.F]), (this.T = 4 * this.T + 40); - break; - case 80: - (this.C[this.c] = this.C[this.I] < this.C[this.F]), (this.T = 5 * this.T - 48); - break; - case 87: - (this.C[this.c] = -this.C[this.I]), (this.T = 3 * this.T + 91); - break; - case 94: - (this.C[this.c] = this.C[this.I] > this.C[this.F]), (this.T = 4 * this.T - 24); - break; - case 101: - (this.C[this.c] = this.C[this.I] in this.C[this.F]), (this.T = 3 * this.T + 49); - break; - case 108: - (this.C[this.c] = o(this.C[this.I])), (this.T = 2 * this.T + 136); - break; - case 110: - (this.C[this.c] = this.C[this.I] !== this.C[this.F]), (this.T += 242); - break; - case 117: - (this.C[this.c] = this.C[this.I] && this.C[this.F]), (this.T = 3 * this.T + 1); - break; - case 124: - (this.C[this.c] = this.C[this.I] || this.C[this.F]), (this.T += 228); - break; - case 131: - (this.C[this.c] = this.C[this.I] >= this.C[this.F]), (this.T = 3 * this.T - 41); - break; - case 138: - (this.C[this.c] = this.C[this.I] == this.C[this.F]), (this.T = 2 * this.T + 76); - break; - case 140: - (this.C[this.c] = this.C[this.I] % this.C[this.F]), (this.T += 212); - break; - case 147: - (this.C[this.c] = this.C[this.I] / this.C[this.F]), (this.T += 205); - break; - case 154: - (this.C[this.c] = this.C[this.I] * this.C[this.F]), (this.T += 198); - break; - case 161: - (this.C[this.c] = this.C[this.I] - this.C[this.F]), (this.T += 191); - break; - case 168: - (this.C[this.c] = this.C[this.I] + this.C[this.F]), (this.T = 2 * this.T + 16); - break; - case 254: - (this.C[this.c] = eval(i)), (this.T += 20 < this.M[11] ? 98 : 89); - break; - case 255: - (this.s = C || 0), (this.M[26] = 52), (this.T += this.M[13] ? 8 : 6); - break; - case 258: - g = {}; - for (var F = 0; F < this.k; F++) { - (e = this.i.pop()), (a = this.i.pop()), (g[a] = e); - } - (this.C[this.W] = g), (this.T += 94); - break; - case 261: - (this.D = s || []), (this.M[11] = 68), (this.T += this.M[26] ? 3 : 5); - break; - case 264: - (this.M[15] = 16), (this.T = 'string' == typeof A ? 331 : 336); - break; - case 266: - (this.C[this.I][i] = this.i.pop()), (this.T += 86); - break; - case 278: - if (i == '_resourceLoader' || i == '_sessionHistory') { - (this.C[this.c] = this.C[this.I]._function_not_exists), (this.T += this.M[22] ? 63 : 74); - } else if (this.C[this.I].toString() == '[object Window]' && i == 'constructor') { - (this.C[this.c] = 'function Window() { [native code] }'.toString()), (this.T += this.M[22] ? 63 : 74); - } else { - (this.C[this.c] = this.C[this.I][i]), (this.T += this.M[22] ? 63 : 74); - } - break; - case 283: - this.C[this.c] = eval(String.fromCharCode(this.C[this.I])); - break; - case 300: - (S = this.U()), (this.M[0] = 66), (this.T += this.M[11]); - break; - case 331: - (D = atob(A)), (w = (D.charCodeAt(0) << 16) | (D.charCodeAt(1) << 8) | D.charCodeAt(2)); - for (var k = 3; k < w + 3; k += 3) { - this.G.push((D.charCodeAt(k) << 16) | (D.charCodeAt(k + 1) << 8) | D.charCodeAt(k + 2)); - } - for (V = w + 3; V < D.length; ) { - (E = (D.charCodeAt(V) << 8) | D.charCodeAt(V + 1)), (T = D.slice(V + 2, V + 2 + E)), this.D.push(T), (V += E + 2); - } - (this.M[21] = 8), (this.T += 1e3 < V ? 21 : 35); - break; - case 336: - (this.G = A), (this.D = s), (this.M[18] = 134), (this.T += this.M[15]); - break; - case 344: - this.T = 3 * this.T - 8; - break; - case 350: - (U = 66), (M = []), (I = this.D[this.k]); - for (var W = 0; W < I.length; W++) { - M.push(String.fromCharCode(24 ^ I.charCodeAt(W) ^ U)), (U = 24 ^ I.charCodeAt(W) ^ U); - } - (r = parseInt(M.join('').split('|')[1])), (this.C[this.W] = this.i.slice(this.i.length - r)), (this.i = this.i.slice(0, this.i.length - r)), (this.T += 2); - break; - case 352: - (this.e = this.G[this.s++]), (this.T -= this.M[26]); - break; - case 360: - (this.a = S), (this.T += this.M[0]); - break; - case 368: - this.T -= 500 < S - this.a ? 24 : 8; - break; - case 380: - this.i.push(16383 & this.e), (this.T -= 28); - break; - case 400: - this.i.push(this.S[16383 & this.e]), (this.T -= 48); - break; - case 408: - this.T -= 64; - break; - case 413: - (this.C[(this.e >> 15) & 7] = ((this.e >> 18) & 1) == +[] ? 32767 & this.e : this.S[32767 & this.e]), (this.T -= 61); - break; - case 418: - (this.S[65535 & this.e] = this.C[(this.e >> 16) & 7]), (this.T -= this.e >> 16 < 20 ? 66 : 80); - break; - case 423: - (this.c = (this.e >> 16) & 7), (this.I = (this.e >> 13) & 7), (this.F = (this.e >> 10) & 7), (this.J = 1023 & this.e), (this.T -= 255 + 6 * this.J + (this.J % 5)); - break; - case 426: - this.T += 5 * (this.e >> 19) - 18; - break; - case 428: - (this.W = (this.e >> 16) & 7), (this.k = 65535 & this.e), this.t.push(this.s), this.h.push(this.S), (this.s = this.C[this.W]), (this.S = []); - for (var J = 0; J < this.k; J++) { - this.S.unshift(this.i.pop()); - } - this.B.push(this.i), (this.i = []), (this.T -= 76); - break; - case 433: - (this.s = this.t.pop()), (this.S = this.h.pop()), (this.i = this.B.pop()), (this.T -= 81); - break; - case 438: - (this.Q = this.C[(this.e >> 16) & 7]), (this.T -= 86); - break; - case 440: - (U = 66), (M = []), (I = this.D[16383 & this.e]); - for (var b = 0; b < I.length; b++) { - M.push(String.fromCharCode(24 ^ I.charCodeAt(b) ^ U)), (U = 24 ^ I.charCodeAt(b) ^ U); - } - (M = M.join('').split('|')), - (O = parseInt(M.shift())), - this.i.push(O === +[] ? M.join('|') : O === +!+[] ? (-1 !== M.join().indexOf('.') ? parseInt(M.join()) : parseFloat(M.join())) : O === !+[] + !+[] ? eval(M.join()) : 3 === O ? null : void 0), - (this.T -= 88); - break; - case 443: - (this.b = (this.e >> 2) & 65535), - (this.J = 3 & this.e), - this.J === +[] ? (this.s = this.b) : this.J === +!+[] ? !!this.Q && (this.s = this.b) : 2 === this.J ? !this.Q && (this.s = this.b) : (this.s = this.b), - (this.g = null), - (this.T -= 91); - break; - case 445: - this.i.push(this.C[(this.e >> 14) & 7]), (this.T -= 93); - break; - case 448: - (this.W = (this.e >> 16) & 7), - (this.k = (this.e >> 2) & 4095), - (this.J = 3 & this.e), - (Q = this.J === +!+[] && this.i.pop()), - (G = this.i.slice(this.i.length - this.k, this.i.length)), - (this.i = this.i.slice(0, this.i.length - this.k)), - (c = 2 < G.length ? 3 : G.length), - (this.T += 6 * this.J + 1 + 10 * c); - break; - case 449: - (this.C[3] = this.C[this.W]()), (this.T -= 97 - G.length); - break; - case 455: - (this.C[3] = this.C[this.W][Q]()), (this.T -= 103 + G.length); - break; - case 453: - (B = (this.e >> 17) & 3), (this.T = B === +[] ? 445 : B === +!+[] ? 380 : B === !+[] + !+[] ? 400 : 440); - break; - case 458: - (this.J = (this.e >> 17) & 3), (this.c = (this.e >> 14) & 7), (this.I = (this.e >> 11) & 7), (i = this.i.pop()), (this.T -= 12 * this.J + 180); - break; - case 459: - (this.C[3] = this.C[this.W](G[+[]])), (this.T -= 100 + 7 * G.length); - break; - case 461: - (this.C[3] = new this.C[this.W]()), (this.T -= 109 - G.length); - break; - case 463: - (U = 66), (M = []), (I = this.D[65535 & this.e]); - for (var n = 0; n < I.length; n++) { - M.push(String.fromCharCode(24 ^ I.charCodeAt(n) ^ U)), (U = 24 ^ I.charCodeAt(n) ^ U); - } - (M = M.join('').split('|')), (O = parseInt(M.shift())), (this.T += 10 * O + 3); - break; - case 465: - if (Q == 'indexOf' && G[0] == 'Canvas') { - (this.C[3] = 8), (this.T -= 13 * G.length + 100); - } else { - (this.C[3] = this.C[this.W][Q](G[+[]])), (this.T -= 13 * G.length + 100); - } - break; - case 466: - (this.C[(this.e >> 16) & 7] = M.join('|')), (this.T -= 114 * M.length); - break; - case 468: - (this.g = 65535 & this.e), (this.T -= 116); - break; - case 469: - (this.C[3] = this.C[this.W](G[+[]], G[1])), (this.T -= 119 - G.length); - break; - case 471: - (this.C[3] = new this.C[this.W](G[+[]])), (this.T -= 118 + G.length); - break; - case 473: - throw this.C[(this.e >> 16) & 7]; - case 475: - (this.C[3] = this.C[this.W][Q](G[+[]], G[1])), (this.T -= 123); - break; - case 476: - (this.C[(this.e >> 16) & 7] = -1 !== M.join().indexOf('.') ? parseInt(M.join()) : parseFloat(M.join())), (this.T -= this.M[21] < 10 ? 124 : 126); - break; - case 478: - (t = [0].concat(x(this.S))), - (this.V = 65535 & this.e), - (h = this), - (this.C[3] = function (e) { - var n = new l(); - return (n.S = t), (n.S[0] = e), n.O(h.G, h.V, h.D), n.C[3]; - }), - (this.T -= 50 < this.M[3] ? 120 : 126); - break; - case 479: - (this.C[3] = this.C[this.W].apply(null, G)), (this.M[3] = 168), (this.T -= this.M[9] ? 127 : 128); - break; - case 481: - (this.C[3] = new this.C[this.W](G[+[]], G[1])), (this.T -= 10 * G.length + 109); - break; - case 483: - (this.J = (this.e >> 15) & 15), (this.W = (this.e >> 12) & 7), (this.k = 4095 & this.e), (this.T = 0 === this.J ? 258 : 350); - break; - case 485: - (this.C[3] = this.C[this.W][Q].apply(null, G)), (this.T -= this.M[15] % 2 == 1 ? 143 : 133); - break; - case 486: - (this.C[(this.e >> 16) & 7] = eval(M.join())), (this.T -= this.M[18]); - break; - case 491: - (this.C[3] = new this.C[this.W].apply(null, G)), (this.T -= this.M[8] / this.M[1] < 10 ? 139 : 130); - break; - case 496: - (this.C[(this.e >> 16) & 7] = null), (this.T -= 10 < this.M[5] - this.M[3] ? 160 : 144); - break; - case 506: - (this.C[(this.e >> 16) & 7] = void 0), (this.T -= this.M[18] % this.M[12] == 1 ? 154 : 145); - break; - default: - this.T = this.w; - } - } catch (A) { - this.g && (this.s = this.g), (this.T -= 114); - } - } -}), - ((S.__ZH__ = S.__ZH__ || {}), - (h = S.__ZH__.zse = S.__ZH__.zse || {}), - new l().O( - 'ABt7CAAUSAAACADfSAAACAD1SAAACAAHSAAACAD4SAAACAACSAAACADCSAAACADRSAAACABXSAAACAAGSAAACADjSAAACAD9SAAACADwSAAACACASAAACADeSAAACABbSAAACADtSAAACAAJSAAACAB9SAAACACdSAAACADmSAAACABdSAAACAD8SAAACADNSAAACABaSAAACABPSAAACACQSAAACADHSAAACACfSAAACADFSAAACAC6SAAACACnSAAACAAnSAAACAAlSAAACACcSAAACADGSAAACAAmSAAACAAqSAAACAArSAAACACoSAAACADZSAAACACZSAAACAAPSAAACABnSAAACABQSAAACAC9SAAACABHSAAACAC/SAAACABhSAAACABUSAAACAD3SAAACABfSAAACAAkSAAACABFSAAACAAOSAAACAAjSAAACAAMSAAACACrSAAACAAcSAAACABySAAACACySAAACACUSAAACABWSAAACAC2SAAACAAgSAAACABTSAAACACeSAAACABtSAAACAAWSAAACAD/SAAACABeSAAACADuSAAACACXSAAACABVSAAACABNSAAACAB8SAAACAD+SAAACAASSAAACAAESAAACAAaSAAACAB7SAAACACwSAAACADoSAAACADBSAAACACDSAAACACsSAAACACPSAAACACOSAAACACWSAAACAAeSAAACAAKSAAACACSSAAACACiSAAACAA+SAAACADgSAAACADaSAAACADESAAACADlSAAACAABSAAACADASAAACADVSAAACAAbSAAACABuSAAACAA4SAAACADnSAAACAC0SAAACACKSAAACABrSAAACADySAAACAC7SAAACAA2SAAACAB4SAAACAATSAAACAAsSAAACAB1SAAACADkSAAACADXSAAACADLSAAACAA1SAAACADvSAAACAD7SAAACAB/SAAACABRSAAACAALSAAACACFSAAACABgSAAACADMSAAACACESAAACAApSAAACABzSAAACABJSAAACAA3SAAACAD5SAAACACTSAAACABmSAAACAAwSAAACAB6SAAACACRSAAACABqSAAACAB2SAAACABKSAAACAC+SAAACAAdSAAACAAQSAAACACuSAAACAAFSAAACACxSAAACACBSAAACAA/SAAACABxSAAACABjSAAACAAfSAAACAChSAAACABMSAAACAD2SAAACAAiSAAACADTSAAACAANSAAACAA8SAAACABESAAACADPSAAACACgSAAACABBSAAACABvSAAACABSSAAACAClSAAACABDSAAACACpSAAACADhSAAACAA5SAAACABwSAAACAD0SAAACACbSAAACAAzSAAACADsSAAACADISAAACADpSAAACAA6SAAACAA9SAAACAAvSAAACABkSAAACACJSAAACAC5SAAACABASAAACAARSAAACABGSAAACADqSAAACACjSAAACADbSAAACABsSAAACACqSAAACACmSAAACAA7SAAACACVSAAACAA0SAAACABpSAAACAAYSAAACADUSAAACABOSAAACACtSAAACAAtSAAACAAASAAACAB0SAAACADiSAAACAB3SAAACACISAAACADOSAAACACHSAAACACvSAAACADDSAAACAAZSAAACABcSAAACAB5SAAACADQSAAACAB+SAAACACLSAAACAADSAAACABLSAAACACNSAAACAAVSAAACACCSAAACABiSAAACADxSAAACAAoSAAACACaSAAACABCSAAACAC4SAAACAAxSAAACAC1SAAACAAuSAAACADzSAAACABYSAAACABlSAAACAC3SAAACAAISAAACAAXSAAACABISAAACAC8SAAACABoSAAACACzSAAACADSSAAACACGSAAACAD6SAAACADJSAAACACkSAAACABZSAAACADYSAAACADKSAAACADcSAAACAAySAAACADdSAAACACYSAAACACMSAAACAAhSAAACADrSAAACADWSAAAeIAAEAAACAB4SAAACAAySAAACABiSAAACABlSAAACABjSAAACABiSAAACAB3SAAACABkSAAACABnSAAACABrSAAACABjSAAACAB3SAAACABhSAAACABjSAAACABuSAAACABvSAAAeIABEAABCABkSAAACAAzSAAACABkSAAACAAySAAACABlSAAACAA3SAAACAAySAAACAA2SAAACABmSAAACAA1SAAACAAwSAAACABkSAAACAA0SAAACAAxSAAACAAwSAAACAAxSAAAeIABEAACCAAgSAAATgACVAAAQAAGEwADDAADSAAADAACSAAADAAASAAACANcIAADDAADSAAASAAATgADVAAATgAEUAAATgAFUAAATgAGUgAADAAASAAASAAATgADVAAATgAEUAAATgAFUAAATgAHUgAADAABSAAASAAATgADVAAATgAEUAAATgAFUAAATgAIUgAAcAgUSMAATgAJVAAATgAKUgAAAAAADAABSAAADAAAUAAACID/GwQPCAAYG2AREwAGDAABCIABGwQASMAADAAAUAAACID/GwQPCAAQG2AREwAHDAABCIACGwQASMAADAAAUAAACID/GwQPCAAIG2AREwAIDAABCIADGwQASMAADAAAUAAACID/GwQPEwAJDYAGDAAHG2ATDAAIG2ATDAAJG2ATKAAACAD/DIAACQAYGygSGwwPSMAASMAADAACSAAADAABUgAACAD/DIAACQAQGygSGwwPSMAASMAADAACCIABGwQASMAADAABUgAACAD/DIAACQAIGygSGwwPSMAASMAADAACCIACGwQASMAADAABUgAACAD/DIAAGwQPSMAASMAADAACCIADGwQASMAADAABUgAAKAAACAAgDIABGwQBEwANDAAAWQALGwQPDAABG2AREwAODAAODIAADQANGygSGwwTEwAPDYAPKAAACAAESAAATgACVAAAQAAGEwAQCAAESAAATgACVAAAQAAGEwAFDAAASAAADAAQSAAACAAASAAACAKsIAADCAAASAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAAASAAADAAFUgAACAABSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAABSAAADAAFUgAACAACSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAACSAAADAAFUgAACAADSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAADSAAADAAFUgAADAAFSAAACAAASAAACAJ8IAACEwARDAARSAAACAANSAAACALdIAACEwASDAARSAAACAAXSAAACALdIAACEwATDAARDIASGwQQDAATG2AQEwAUDYAUKAAAWAAMSAAAWAANSAAAWAAOSAAAWAAPSAAAWAAQSAAAWAARSAAAWAASSAAAWAATSAAAWAAUSAAAWAAVSAAAWAAWSAAAWAAXSAAAWAAYSAAAWAAZSAAAWAAaSAAAWAAbSAAAWAAcSAAAWAAdSAAAWAAeSAAAWAAfSAAAWAAgSAAAWAAhSAAAWAAiSAAAWAAjSAAAWAAkSAAAWAAlSAAAWAAmSAAAWAAnSAAAWAAoSAAAWAApSAAAWAAqSAAAWAArSAAAeIAsEAAXWAAtSAAAWAAuSAAAWAAvSAAAWAAwSAAAeIAxEAAYCAAESAAATgACVAAAQAAGEwAZCAAkSAAATgACVAAAQAAGEwAaDAABSAAACAAASAAACAJ8IAACSMAASMAACAAASAAADAAZUgAADAABSAAACAAESAAACAJ8IAACSMAASMAACAABSAAADAAZUgAADAABSAAACAAISAAACAJ8IAACSMAASMAACAACSAAADAAZUgAADAABSAAACAAMSAAACAJ8IAACSMAASMAACAADSAAADAAZUgAACAAASAAADAAZUAAACIAASEAADIAYUEgAGwQQSMAASMAACAAASAAADAAaUgAACAABSAAADAAZUAAACIABSEAADIAYUEgAGwQQSMAASMAACAABSAAADAAaUgAACAACSAAADAAZUAAACIACSEAADIAYUEgAGwQQSMAASMAACAACSAAADAAaUgAACAADSAAADAAZUAAACIADSEAADIAYUEgAGwQQSMAASMAACAADSAAADAAaUgAACAAAEAAJDAAJCIAgGwQOMwAGOBG2DAAJCIABGwQASMAADAAaUAAAEAAbDAAJCIACGwQASMAADAAaUAAAEAAcDAAJCIADGwQASMAADAAaUAAAEAAdDAAbDIAcGwQQDAAdG2AQDAAJSAAADAAXUAAAG2AQEwAeDAAeSAAADAACSAAACALvIAACEwAfDAAJSAAADAAaUAAADIAfGwQQSMAASMAADAAJCIAEGwQASMAADAAaUgAADAAJCIAEGwQASMAADAAaUAAASAAASAAADAAJSAAADAAAUgAADAAJCIABGQQAEQAJOBCIKAAADAABTgAyUAAACIAQGwQEEwAVCAAQDIAVGwQBEwAKCAAAEAAhDAAhDIAKGwQOMwAGOBImDAAKSAAADAABTgAzQAAFDAAhCIABGQQAEQAhOBHoCAAASAAACAAQSAAADAABTgA0QAAJEwAiCAAQSAAATgACVAAAQAAGEwAjCAAAEAALDAALCIAQGwQOMwAGOBLSDAALSAAADAAiUAAADIALSEAADIAAUEgAGwQQCAAqG2AQSMAASMAADAALSAAADAAjUgAA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' - )); -var D = function (e) { - return __g._encrypt(encodeURIComponent(e)); -}; -module.exports = D; diff --git a/lib/v2/zhihu/execlib/hash.js b/lib/v2/zhihu/execlib/hash.js deleted file mode 100644 index dc50afcced..0000000000 --- a/lib/v2/zhihu/execlib/hash.js +++ /dev/null @@ -1,155 +0,0 @@ -function o(e, t) { - const n = (65535 & e) + (65535 & t); - return (((e >> 16) + (t >> 16) + (n >> 16)) << 16) | (65535 & n); -} - -function a(e, t, n, r, i, a) { - let c, u; - return o(((c = o(o(t, e), o(r, a))) << (u = i)) | (c >>> (32 - u)), n); -} - -function c(e, t, n, r, i, o, c) { - return a((t & n) | (~t & r), e, t, i, o, c); -} - -function u(e, t, n, r, i, o, c) { - return a((t & r) | (n & ~r), e, t, i, o, c); -} - -function s(e, t, n, r, i, o, c) { - return a(t ^ n ^ r, e, t, i, o, c); -} - -function l(e, t, n, r, i, o, c) { - return a(n ^ (t | ~r), e, t, i, o, c); -} - -function d(e, t) { - let n, r, i, a, d; - (e[t >> 5] |= 128 << t % 32), (e[14 + (((t + 64) >>> 9) << 4)] = t); - let f = 1732584193, - p = -271733879, - h = -1732584194, - b = 271733878; - for (n = 0; n < e.length; n += 16) { - (r = f), - (i = p), - (a = h), - (d = b), - (f = c(f, p, h, b, e[n], 7, -680876936)), - (b = c(b, f, p, h, e[n + 1], 12, -389564586)), - (h = c(h, b, f, p, e[n + 2], 17, 606105819)), - (p = c(p, h, b, f, e[n + 3], 22, -1044525330)), - (f = c(f, p, h, b, e[n + 4], 7, -176418897)), - (b = c(b, f, p, h, e[n + 5], 12, 1200080426)), - (h = c(h, b, f, p, e[n + 6], 17, -1473231341)), - (p = c(p, h, b, f, e[n + 7], 22, -45705983)), - (f = c(f, p, h, b, e[n + 8], 7, 1770035416)), - (b = c(b, f, p, h, e[n + 9], 12, -1958414417)), - (h = c(h, b, f, p, e[n + 10], 17, -42063)), - (p = c(p, h, b, f, e[n + 11], 22, -1990404162)), - (f = c(f, p, h, b, e[n + 12], 7, 1804603682)), - (b = c(b, f, p, h, e[n + 13], 12, -40341101)), - (h = c(h, b, f, p, e[n + 14], 17, -1502002290)), - (f = u(f, (p = c(p, h, b, f, e[n + 15], 22, 1236535329)), h, b, e[n + 1], 5, -165796510)), - (b = u(b, f, p, h, e[n + 6], 9, -1069501632)), - (h = u(h, b, f, p, e[n + 11], 14, 643717713)), - (p = u(p, h, b, f, e[n], 20, -373897302)), - (f = u(f, p, h, b, e[n + 5], 5, -701558691)), - (b = u(b, f, p, h, e[n + 10], 9, 38016083)), - (h = u(h, b, f, p, e[n + 15], 14, -660478335)), - (p = u(p, h, b, f, e[n + 4], 20, -405537848)), - (f = u(f, p, h, b, e[n + 9], 5, 568446438)), - (b = u(b, f, p, h, e[n + 14], 9, -1019803690)), - (h = u(h, b, f, p, e[n + 3], 14, -187363961)), - (p = u(p, h, b, f, e[n + 8], 20, 1163531501)), - (f = u(f, p, h, b, e[n + 13], 5, -1444681467)), - (b = u(b, f, p, h, e[n + 2], 9, -51403784)), - (h = u(h, b, f, p, e[n + 7], 14, 1735328473)), - (f = s(f, (p = u(p, h, b, f, e[n + 12], 20, -1926607734)), h, b, e[n + 5], 4, -378558)), - (b = s(b, f, p, h, e[n + 8], 11, -2022574463)), - (h = s(h, b, f, p, e[n + 11], 16, 1839030562)), - (p = s(p, h, b, f, e[n + 14], 23, -35309556)), - (f = s(f, p, h, b, e[n + 1], 4, -1530992060)), - (b = s(b, f, p, h, e[n + 4], 11, 1272893353)), - (h = s(h, b, f, p, e[n + 7], 16, -155497632)), - (p = s(p, h, b, f, e[n + 10], 23, -1094730640)), - (f = s(f, p, h, b, e[n + 13], 4, 681279174)), - (b = s(b, f, p, h, e[n], 11, -358537222)), - (h = s(h, b, f, p, e[n + 3], 16, -722521979)), - (p = s(p, h, b, f, e[n + 6], 23, 76029189)), - (f = s(f, p, h, b, e[n + 9], 4, -640364487)), - (b = s(b, f, p, h, e[n + 12], 11, -421815835)), - (h = s(h, b, f, p, e[n + 15], 16, 530742520)), - (f = l(f, (p = s(p, h, b, f, e[n + 2], 23, -995338651)), h, b, e[n], 6, -198630844)), - (b = l(b, f, p, h, e[n + 7], 10, 1126891415)), - (h = l(h, b, f, p, e[n + 14], 15, -1416354905)), - (p = l(p, h, b, f, e[n + 5], 21, -57434055)), - (f = l(f, p, h, b, e[n + 12], 6, 1700485571)), - (b = l(b, f, p, h, e[n + 3], 10, -1894986606)), - (h = l(h, b, f, p, e[n + 10], 15, -1051523)), - (p = l(p, h, b, f, e[n + 1], 21, -2054922799)), - (f = l(f, p, h, b, e[n + 8], 6, 1873313359)), - (b = l(b, f, p, h, e[n + 15], 10, -30611744)), - (h = l(h, b, f, p, e[n + 6], 15, -1560198380)), - (p = l(p, h, b, f, e[n + 13], 21, 1309151649)), - (f = l(f, p, h, b, e[n + 4], 6, -145523070)), - (b = l(b, f, p, h, e[n + 11], 10, -1120210379)), - (h = l(h, b, f, p, e[n + 2], 15, 718787259)), - (p = l(p, h, b, f, e[n + 9], 21, -343485551)), - (f = o(f, r)), - (p = o(p, i)), - (h = o(h, a)), - (b = o(b, d)); - } - return [f, p, h, b]; -} - -function f(e) { - let t, - n = ''; - const r = 32 * e.length; - for (t = 0; t < r; t += 8) { - n += String.fromCharCode((e[t >> 5] >>> t % 32) & 255); - } - return n; -} - -function p(e) { - let t; - const n = []; - for (n[(e.length >> 2) - 1] = void 0, t = 0; t < n.length; t += 1) { - n[t] = 0; - } - const r = 8 * e.length; - for (t = 0; t < r; t += 8) { - n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32; - } - return n; -} - -function h(e) { - let t, - n, - r = ''; - for (n = 0; n < e.length; n += 1) { - (t = e.charCodeAt(n)), (r += '0123456789abcdef'.charAt((t >>> 4) & 15) + '0123456789abcdef'.charAt(15 & t)); - } - return r; -} - -function b(e) { - return unescape(encodeURIComponent(e)); -} - -function v(e) { - return (function (e) { - return f(d(p(e), 8 * e.length)); - })(b(e)); -} - -function A(e) { - return h(v(e)); -} - -module.exports = A; diff --git a/lib/v2/zhitongcaijing/index.js b/lib/v2/zhitongcaijing/index.js deleted file mode 100644 index 26d9071ed0..0000000000 --- a/lib/v2/zhitongcaijing/index.js +++ /dev/null @@ -1,118 +0,0 @@ -const got = require('@/utils/got'); -const cheerio = require('cheerio'); -const { parseDate } = require('@/utils/parse-date'); -const { art } = require('@/utils/render'); -const path = require('path'); - -const ids = { - recommend: { - url: 'content/recommend', - title: '推荐', - }, - hkstock: { - url: 'content/hkstock', - title: '港股', - }, - meigu: { - url: 'content/meigu', - title: '美股', - }, - agu: { - url: 'content/agu', - title: '沪深', - }, - ct: { - url: 'content/ct', - title: '创投', - }, - esg: { - url: 'content/esg', - title: 'ESG', - }, - aqs: { - url: 'content/aqs', - title: '券商', - }, - ajj: { - url: 'content/ajj', - title: '基金', - }, - focus: { - url: 'focus', - title: '要闻', - }, - announcement: { - url: 'announcement', - title: '公告', - }, - research: { - url: 'research', - title: '研究', - }, - shares: { - url: 'shares', - title: '新股', - }, - bazaar: { - url: 'bazaar', - title: '市场', - }, - company: { - url: 'company', - title: '公司', - }, -}; - -module.exports = async (ctx) => { - const id = ctx.params.id ?? 'recommend'; - const category = ctx.params.category ?? ''; - - const limit = ctx.query.limit ? parseInt(ctx.query.limit) : 20; - - const rootUrl = 'https://www.zhitongcaijing.com'; - const currentUrl = `${rootUrl}/${ids[id].url}.html${category === '' ? '' : `?category_key=${category}`}`; - const apiUrl = `${rootUrl}/${ids[id].url}.html?data_type=1&page=1${category === '' ? '' : `&category_key=${category}`}`; - - const response = await got({ - method: 'get', - url: apiUrl, - }); - - let items = response.data.data.slice(0, limit).map((item) => ({ - title: item.title, - link: `${rootUrl}${item.url}`, - description: item.digest, - author: item.author_info.author_name, - pubDate: parseDate((item.create_time ?? parseInt(item.original_time)) * 1000), - category: (item.keywords?.split(',') ?? []).concat([item.category_name ?? item.type_tag]), - })); - - items = await Promise.all( - items.map((item) => - ctx.cache.tryGet(item.link, async () => { - const detailResponse = await got({ - method: 'get', - url: item.link, - }); - - const content = cheerio.load(detailResponse.data); - - content('#subscribe-vip-box').remove(); - content('#news-content').remove(); - - item.description = art(path.join(__dirname, 'templates/description.art'), { - digest: content('.digetst-box').html() || content('.telegram-origin-contentn').html(), - description: content('.news-body-content').html(), - }); - - return item; - }) - ) - ); - - ctx.state.data = { - title: `智通财经 - ${ids[id].title}`, - link: currentUrl, - item: items, - }; -}; diff --git a/lib/v2/zhitongcaijing/maintainer.js b/lib/v2/zhitongcaijing/maintainer.js deleted file mode 100644 index db32d54ace..0000000000 --- a/lib/v2/zhitongcaijing/maintainer.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - '/:id?/:category?': ['nczitzk'], -}; diff --git a/lib/v2/zhitongcaijing/radar.js b/lib/v2/zhitongcaijing/radar.js deleted file mode 100644 index 51a8829485..0000000000 --- a/lib/v2/zhitongcaijing/radar.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - 'zhitongcaijing.com': { - _name: '智通财经', - '.': [ - { - title: '资讯', - docs: 'https://docs.rsshub.app/finance.html#zhi-tong-cai-jing-zi-xun', - source: ['/:category', '/'], - target: (params, url) => { - const id = new URL(url).toString().match(/\/(\w+)\.html/)[1]; - const category = new URL(url).searchParams.get('category_key'); - return `/zhitongcaijing/${id}${category ? `/${category}` : ''}`; - }, - }, - ], - }, -}; diff --git a/lib/v2/zhitongcaijing/router.js b/lib/v2/zhitongcaijing/router.js deleted file mode 100644 index ea2152ae08..0000000000 --- a/lib/v2/zhitongcaijing/router.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function (router) { - router.get('/:id?/:category?', require('./index')); -}; diff --git a/lib/v2/zhitongcaijing/templates/description.art b/lib/v2/zhitongcaijing/templates/description.art deleted file mode 100644 index 715af125f2..0000000000 --- a/lib/v2/zhitongcaijing/templates/description.art +++ /dev/null @@ -1,6 +0,0 @@ -{{ if digest }} -{{@ digest }} -{{ /if }} -{{ if description }} -{{@ description }} -{{ /if }} \ No newline at end of file diff --git a/package.json b/package.json index d1ff5b1525..d513f6875e 100644 --- a/package.json +++ b/package.json @@ -54,8 +54,8 @@ "eslint-plugin-prettier": "4.2.1", "eslint-plugin-yml": "1.2.0", "fs-extra": "10.1.0", - "jest": "29.1.2", - "meilisearch": "0.28.0", + "jest": "29.0.3", + "meilisearch": "0.27.0", "mockdate": "3.0.5", "nock": "13.2.9", "nodemon": "2.0.20", @@ -83,18 +83,17 @@ "dependencies": { "@koa/router": "12.0.0", "@postlight/parser": "2.2.2", - "@sentry/node": "7.14.1", + "@sentry/node": "7.13.0", "aes-js": "3.1.2", "art-template": "4.13.2", "bbcodejs": "0.0.4", - "canvas": "2.10.1", "cheerio": "1.0.0-rc.12", "chrono-node": "2.4.1", "city-timezones": "1.2.1", "crypto-js": "4.1.1", "currency-symbol-map": "5.1.0", "dayjs": "1.11.5", - "dotenv": "16.0.3", + "dotenv": "16.0.2", "emailjs-imap-client": "3.1.0", "entities": "3.0.1", "etag": "1.8.1", @@ -108,7 +107,7 @@ "ioredis": "5.2.3", "ip-regex": "4.3.0", "is-localhost-ip": "2.0.0", - "jsdom": "20.0.1", + "jsdom": "20.0.0", "json-bigint": "1.0.0", "json5": "2.2.1", "koa": "2.13.4", @@ -123,12 +122,12 @@ "parse-torrent": "9.1.5", "pidusage": "3.0.0", "plist": "3.0.6", - "proxy-chain": "2.1.0", + "proxy-chain": "2.0.7", "puppeteer": "18.0.5", "puppeteer-extra": "3.3.4", "puppeteer-extra-plugin-stealth": "2.11.1", "query-string": "7.1.1", - "rand-user-agent": "1.0.84", + "rand-user-agent": "1.0.83", "re2": "1.17.7", "require-all": "3.0.0", "rss-parser": "3.12.0", diff --git a/yarn.lock b/yarn.lock index 974ddd72e4..bd1880110d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1085,28 +1085,28 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.2.tgz#0ae975a70004696f8320490fcaa1a4152f7b62e4" - integrity sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ== +"@jest/console@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.0.3.tgz#a222ab87e399317a89db88a58eaec289519e807a" + integrity sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.1.2" - jest-util "^29.1.2" + jest-message-util "^29.0.3" + jest-util "^29.0.3" slash "^3.0.0" -"@jest/core@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.1.2.tgz#e5ce7a71e7da45156a96fb5eeed11d18b67bd112" - integrity sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA== +"@jest/core@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.0.3.tgz#ba22a9cbd0c7ba36e04292e2093c547bf53ec1fd" + integrity sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ== dependencies: - "@jest/console" "^29.1.2" - "@jest/reporters" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.0.3" + "@jest/reporters" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" @@ -1114,80 +1114,80 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^29.0.0" - jest-config "^29.1.2" - jest-haste-map "^29.1.2" - jest-message-util "^29.1.2" + jest-config "^29.0.3" + jest-haste-map "^29.0.3" + jest-message-util "^29.0.3" jest-regex-util "^29.0.0" - jest-resolve "^29.1.2" - jest-resolve-dependencies "^29.1.2" - jest-runner "^29.1.2" - jest-runtime "^29.1.2" - jest-snapshot "^29.1.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" - jest-watcher "^29.1.2" + jest-resolve "^29.0.3" + jest-resolve-dependencies "^29.0.3" + jest-runner "^29.0.3" + jest-runtime "^29.0.3" + jest-snapshot "^29.0.3" + jest-util "^29.0.3" + jest-validate "^29.0.3" + jest-watcher "^29.0.3" micromatch "^4.0.4" - pretty-format "^29.1.2" + pretty-format "^29.0.3" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.2.tgz#bb51a43fce9f960ba9a48f0b5b556f30618ebc0a" - integrity sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ== +"@jest/environment@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.0.3.tgz#7745ec30a954e828e8cc6df6a13280d3b51d8f35" + integrity sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA== dependencies: - "@jest/fake-timers" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/fake-timers" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" - jest-mock "^29.1.2" + jest-mock "^29.0.3" -"@jest/expect-utils@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.2.tgz#66dbb514d38f7d21456bc774419c9ae5cca3f88d" - integrity sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg== +"@jest/expect-utils@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.3.tgz#f5bb86f5565bf2dacfca31ccbd887684936045b2" + integrity sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q== dependencies: jest-get-type "^29.0.0" -"@jest/expect@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.2.tgz#334a86395f621f1ab63ad95b06a588b9114d7b7a" - integrity sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ== +"@jest/expect@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.0.3.tgz#9dc7c46354eeb7a348d73881fba6402f5fdb2c30" + integrity sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ== dependencies: - expect "^29.1.2" - jest-snapshot "^29.1.2" + expect "^29.0.3" + jest-snapshot "^29.0.3" -"@jest/fake-timers@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.2.tgz#f157cdf23b4da48ce46cb00fea28ed1b57fc271a" - integrity sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q== +"@jest/fake-timers@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.0.3.tgz#ad5432639b715d45a86a75c47fd75019bc36b22c" + integrity sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^29.1.2" - jest-mock "^29.1.2" - jest-util "^29.1.2" + jest-message-util "^29.0.3" + jest-mock "^29.0.3" + jest-util "^29.0.3" -"@jest/globals@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.2.tgz#826ede84bc280ae7f789cb72d325c48cd048b9d3" - integrity sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g== +"@jest/globals@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.0.3.tgz#681950c430fdc13ff9aa89b2d8d572ac0e4a1bf5" + integrity sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w== dependencies: - "@jest/environment" "^29.1.2" - "@jest/expect" "^29.1.2" - "@jest/types" "^29.1.2" - jest-mock "^29.1.2" + "@jest/environment" "^29.0.3" + "@jest/expect" "^29.0.3" + "@jest/types" "^29.0.3" + jest-mock "^29.0.3" -"@jest/reporters@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.1.2.tgz#5520898ed0a4ecf69d8b671e1dc8465d0acdfa6e" - integrity sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA== +"@jest/reporters@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.0.3.tgz#735f110e08b44b38729d8dbbb74063bdf5aba8a5" + integrity sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" @@ -1200,9 +1200,9 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.1.2" - jest-util "^29.1.2" - jest-worker "^29.1.2" + jest-message-util "^29.0.3" + jest-util "^29.0.3" + jest-worker "^29.0.3" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -1225,51 +1225,51 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.2.tgz#6a8d006eb2b31ce0287d1fc10d12b8ff8504f3c8" - integrity sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg== +"@jest/test-result@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.0.3.tgz#b03d8ef4c58be84cd5d5d3b24d4b4c8cabbf2746" + integrity sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg== dependencies: - "@jest/console" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.0.3" + "@jest/types" "^29.0.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz#10bfd89c08bfdba382eb05cc79c1d23a01238a93" - integrity sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q== +"@jest/test-sequencer@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz#0681061ad21fb8e293b49c4fdf7e631ca79240ba" + integrity sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ== dependencies: - "@jest/test-result" "^29.1.2" + "@jest/test-result" "^29.0.3" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" + jest-haste-map "^29.0.3" slash "^3.0.0" -"@jest/transform@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.2.tgz#20f814696e04f090421f6d505c14bbfe0157062a" - integrity sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw== +"@jest/transform@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.0.3.tgz#9eb1fed2072a0354f190569807d1250572fb0970" + integrity sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" + jest-haste-map "^29.0.3" jest-regex-util "^29.0.0" - jest-util "^29.1.2" + jest-util "^29.0.3" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.1" -"@jest/types@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.2.tgz#7442d32b16bcd7592d9614173078b8c334ec730a" - integrity sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg== +"@jest/types@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.3.tgz#0be78fdddb1a35aeb2041074e55b860561c8ef63" + integrity sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A== dependencies: "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" @@ -1333,7 +1333,7 @@ resolved "https://registry.yarnpkg.com/@lifeomic/attempt/-/attempt-3.0.3.tgz#e742a5b85eb673e2f1746b0f39cb932cbc6145bb" integrity sha512-GlM2AbzrErd/TmLL3E8hAHmb5Q7VhDJp35vIbyPVA5Rz55LZuRr8pwL3qrwwkVNo05gMX1J44gURKb4MHQZo7w== -"@mapbox/node-pre-gyp@^1.0.0", "@mapbox/node-pre-gyp@^1.0.5": +"@mapbox/node-pre-gyp@^1.0.5": version "1.0.10" resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== @@ -1544,50 +1544,50 @@ domhandler "^4.2.0" selderee "^0.6.0" -"@sentry/core@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.14.1.tgz#6b046181a1c13ed0fbc90d88d9c18ab1d70d98da" - integrity sha512-sjk60Gf5o9zynhWe1e0ro9uQO4OrKZ3H9xfgBf2ExgKXeMfKzYp5r2v2OKNevEde36Sr/DzlpiPj8EK67xrWPA== +"@sentry/core@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.13.0.tgz#65597d71f8bfa1186f34009803e03ca9edb3adee" + integrity sha512-hB46fklmKrSDMEvZOF8qBHhys7PONBFyxQtbNDZUlv/kabs4gF3VEg1ftCaXnjx4lLNlsUl/ScFdM6194RvISg== dependencies: - "@sentry/hub" "7.14.1" - "@sentry/types" "7.14.1" - "@sentry/utils" "7.14.1" + "@sentry/hub" "7.13.0" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" tslib "^1.9.3" -"@sentry/hub@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.14.1.tgz#f24d8ac65ff39dab6dbaa859c06a0651359f20d2" - integrity sha512-BWh5jUvGmzCsJtYy6EX3qA6gTOxwGhA64IEXHbzwIAnBoG+VWao3addaL77AGR9pIgAqn6ssfkX665OZa+GPGw== +"@sentry/hub@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.13.0.tgz#752068e528cfb277ed154bc94e311cad50ef792e" + integrity sha512-88/GsD1BoyrBwRKJCmVHZtSH5rizOsImUHWEXc1AOa1aR8nanfn56JdAbd6tC55pA+nT4R4H4vN/PrUaomTbtg== dependencies: - "@sentry/types" "7.14.1" - "@sentry/utils" "7.14.1" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" tslib "^1.9.3" -"@sentry/node@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.14.1.tgz#96e0dcafa7b8f2471c9b67ccb4c4a37933914502" - integrity sha512-A+FSEjC0BKwSLaEhB3OW6ipPCajAb7aZvHEk7bzHnkPI/ADPzqSZ41C2pr7+F5DZ8FOdE6//fqXAQi+Cn0FGpg== +"@sentry/node@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.13.0.tgz#0e073b75d4cce684db006d93ef18f2de2cf2f60e" + integrity sha512-uP3bPAIRHPilnOEiYGQQDLaQphc/c7d87wm91bZrTJ+WPnMW4D/NmT7fna5zGGDQIr/KTdQ/LEpDeZOILbkCqQ== dependencies: - "@sentry/core" "7.14.1" - "@sentry/hub" "7.14.1" - "@sentry/types" "7.14.1" - "@sentry/utils" "7.14.1" + "@sentry/core" "7.13.0" + "@sentry/hub" "7.13.0" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/types@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.14.1.tgz#8d46c41595b2730f3426d54d1d0a9376b8739e33" - integrity sha512-PxAfrIwBci6ouHOuRsfVq1B16i92nQNV5IvlqfJIYciazVhDWJvbF52caJAPOFS1WnuQZ4zqBDMYvtnwld3JCA== +"@sentry/types@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.13.0.tgz#398e33e5c92ea0ce91e2c86e3ab003fe00c471a2" + integrity sha512-ttckM1XaeyHRLMdr79wmGA5PFbTGx2jio9DCD/mkEpSfk6OGfqfC7gpwy7BNstDH/VKyQj/lDCJPnwvWqARMoQ== -"@sentry/utils@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.14.1.tgz#95f408853129197fce5841ed0c9b2ed87400e183" - integrity sha512-CErQFbJMuhnHFKGkfIazQj5ETKoS7hG8PkoQEBt19F5QMh4+sbrJgnpIrIW8fVGtp0qKWKuIxQwD3b+1cFBozA== +"@sentry/utils@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.13.0.tgz#0d47a9278806ece78ba3a83c7dbebce817462759" + integrity sha512-jnR85LgRLSk7IQe2OhKOPMY4fasJCNQNW0iCXsH+S2R1qnsF+N4ksNkQ+7JyyM9E7F03YpI2qd76bKY0VIn5iA== dependencies: - "@sentry/types" "7.14.1" + "@sentry/types" "7.13.0" tslib "^1.9.3" "@sinclair/typebox@^0.24.1": @@ -2574,23 +2574,23 @@ accepts@^1.2.5, accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" + acorn "^7.1.1" + acorn-walk "^7.1.1" acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.0.2: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn@^5.0.3: version "5.7.4" @@ -2602,7 +2602,12 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^8.1.0, acorn@^8.6.0, acorn@^8.8.0: +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.6.0, acorn@^8.7.1, acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -3014,12 +3019,12 @@ babel-extract-comments@^1.0.0: dependencies: babylon "^6.18.0" -babel-jest@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.1.2.tgz#540d3241925c55240fb0c742e3ffc5f33a501978" - integrity sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q== +babel-jest@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.0.3.tgz#64e156a47a77588db6a669a88dedff27ed6e260f" + integrity sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg== dependencies: - "@jest/transform" "^29.1.2" + "@jest/transform" "^29.0.3" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^29.0.2" @@ -3368,6 +3373,11 @@ brotli@~1.3.2: dependencies: base64-js "^1.1.2" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + "browser-request@github:postlight/browser-request#feat-add-headers-to-response": version "0.3.2" resolved "https://codeload.github.com/postlight/browser-request/tar.gz/38faa5b85741aabfca61aa37d1ef044d68969ddf" @@ -3713,15 +3723,6 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001400: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001409.tgz#6135da9dcab34cd9761d9cdb12a68e6740c5e96e" integrity sha512-V0mnJ5dwarmhYv8/MzhJ//aW68UpvnQBXv8lJ2QUsvn2pHcmAuNtu8hQEDz37XnA1iE+lRR9CIfGWWpgJ5QedQ== -canvas@2.10.1: - version "2.10.1" - resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.10.1.tgz#fbfd4b1b3b106c3454481d79d363ebadf8811c08" - integrity sha512-29pIjn9uwTUsIgJUNd7GXxKk8sg4iyJwLm1wIilNIqX1mVzXSc2nUij9exW1LqNpis1d2ebMYfMqTWcokZ4pdA== - dependencies: - "@mapbox/node-pre-gyp" "^1.0.0" - nan "^2.15.0" - simple-get "^3.0.3" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -4727,7 +4728,7 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js@^10.4.1: +decimal.js@^10.3.1: version "10.4.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.1.tgz#be75eeac4a2281aace80c1a8753587c27ef053e7" integrity sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw== @@ -4744,13 +4745,6 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - decompress-response@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" @@ -5172,10 +5166,10 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dotenv@16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== +dotenv@16.0.2: + version "16.0.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" + integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== dotenv@^6.2.0: version "6.2.0" @@ -5915,16 +5909,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.2.tgz#82f8f28d7d408c7c68da3a386a490ee683e1eced" - integrity sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw== +expect@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.3.tgz#6be65ddb945202f143c4e07c083f4f39f3bd326f" + integrity sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q== dependencies: - "@jest/expect-utils" "^29.1.2" + "@jest/expect-utils" "^29.0.3" jest-get-type "^29.0.0" - jest-matcher-utils "^29.1.2" - jest-message-util "^29.1.2" - jest-util "^29.1.2" + jest-matcher-utils "^29.0.3" + jest-message-util "^29.0.3" + jest-util "^29.0.3" express@^4.17.1: version "4.18.1" @@ -8166,86 +8160,86 @@ jest-changed-files@^29.0.0: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.2.tgz#4551068e432f169a53167fe1aef420cf51c8a735" - integrity sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA== +jest-circus@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.0.3.tgz#90faebc90295291cfc636b27dbd82e3bfb9e7a48" + integrity sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg== dependencies: - "@jest/environment" "^29.1.2" - "@jest/expect" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/environment" "^29.0.3" + "@jest/expect" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.1.2" - jest-matcher-utils "^29.1.2" - jest-message-util "^29.1.2" - jest-runtime "^29.1.2" - jest-snapshot "^29.1.2" - jest-util "^29.1.2" + jest-each "^29.0.3" + jest-matcher-utils "^29.0.3" + jest-message-util "^29.0.3" + jest-runtime "^29.0.3" + jest-snapshot "^29.0.3" + jest-util "^29.0.3" p-limit "^3.1.0" - pretty-format "^29.1.2" + pretty-format "^29.0.3" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.1.2.tgz#423b9c5d3ea20a50b1354b8bf3f2a20e72110e89" - integrity sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw== +jest-cli@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.0.3.tgz#fd8f0ef363a7a3d9c53ef62e0651f18eeffa77b9" + integrity sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ== dependencies: - "@jest/core" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/core" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/types" "^29.0.3" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.1.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" + jest-config "^29.0.3" + jest-util "^29.0.3" + jest-validate "^29.0.3" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.1.2.tgz#7d004345ca4c09f5d8f802355f54494e90842f4d" - integrity sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA== +jest-config@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.0.3.tgz#c2e52a8f5adbd18de79f99532d8332a19e232f13" + integrity sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.1.2" - "@jest/types" "^29.1.2" - babel-jest "^29.1.2" + "@jest/test-sequencer" "^29.0.3" + "@jest/types" "^29.0.3" + babel-jest "^29.0.3" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.1.2" - jest-environment-node "^29.1.2" + jest-circus "^29.0.3" + jest-environment-node "^29.0.3" jest-get-type "^29.0.0" jest-regex-util "^29.0.0" - jest-resolve "^29.1.2" - jest-runner "^29.1.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" + jest-resolve "^29.0.3" + jest-runner "^29.0.3" + jest-util "^29.0.3" + jest-validate "^29.0.3" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.1.2" + pretty-format "^29.0.3" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.2.tgz#bb7aaf5353227d6f4f96c5e7e8713ce576a607dc" - integrity sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ== +jest-diff@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.3.tgz#41cc02409ad1458ae1bf7684129a3da2856341ac" + integrity sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg== dependencies: chalk "^4.0.0" diff-sequences "^29.0.0" jest-get-type "^29.0.0" - pretty-format "^29.1.2" + pretty-format "^29.0.3" jest-docblock@^29.0.0: version "29.0.0" @@ -8254,94 +8248,93 @@ jest-docblock@^29.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.2.tgz#d4c8532c07a846e79f194f7007ce7cb1987d1cd0" - integrity sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A== +jest-each@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.0.3.tgz#7ef3157580b15a609d7ef663dd4fc9b07f4e1299" + integrity sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" chalk "^4.0.0" jest-get-type "^29.0.0" - jest-util "^29.1.2" - pretty-format "^29.1.2" + jest-util "^29.0.3" + pretty-format "^29.0.3" -jest-environment-node@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.1.2.tgz#005e05cc6ea4b9b5ba55906ab1ce53c82f6907a7" - integrity sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ== +jest-environment-node@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.0.3.tgz#293804b1e0fa5f0e354dacbe510655caa478a3b2" + integrity sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg== dependencies: - "@jest/environment" "^29.1.2" - "@jest/fake-timers" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/environment" "^29.0.3" + "@jest/fake-timers" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" - jest-mock "^29.1.2" - jest-util "^29.1.2" + jest-mock "^29.0.3" + jest-util "^29.0.3" jest-get-type@^29.0.0: version "29.0.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== -jest-haste-map@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.2.tgz#93f3634aa921b6b654e7c94137b24e02e7ca6ac9" - integrity sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw== +jest-haste-map@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.0.3.tgz#d7f3f7180f558d760eacc5184aac5a67f20ef939" + integrity sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^29.0.0" - jest-util "^29.1.2" - jest-worker "^29.1.2" + jest-util "^29.0.3" + jest-worker "^29.0.3" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz#4c846db14c58219430ccbc4f01a1ec52ebee4fc2" - integrity sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ== +jest-leak-detector@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz#e85cf3391106a7a250850b6766b508bfe9c7bc6f" + integrity sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ== dependencies: jest-get-type "^29.0.0" - pretty-format "^29.1.2" + pretty-format "^29.0.3" -jest-matcher-utils@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz#e68c4bcc0266e70aa1a5c13fb7b8cd4695e318a1" - integrity sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw== +jest-matcher-utils@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz#b8305fd3f9e27cdbc210b21fc7dbba92d4e54560" + integrity sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w== dependencies: chalk "^4.0.0" - jest-diff "^29.1.2" + jest-diff "^29.0.3" jest-get-type "^29.0.0" - pretty-format "^29.1.2" + pretty-format "^29.0.3" -jest-message-util@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.2.tgz#c21a33c25f9dc1ebfcd0f921d89438847a09a501" - integrity sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ== +jest-message-util@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.3.tgz#f0254e1ffad21890c78355726202cc91d0a40ea8" + integrity sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.1.2" + pretty-format "^29.0.3" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.2.tgz#de47807edbb9d4abf8423f1d8d308d670105678c" - integrity sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA== +jest-mock@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.0.3.tgz#4f0093f6a9cb2ffdb9c44a07a3912f0c098c8de9" + integrity sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" "@types/node" "*" - jest-util "^29.1.2" jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -8353,88 +8346,88 @@ jest-regex-util@^29.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de" integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug== -jest-resolve-dependencies@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz#a6919e58a0c7465582cb8ec2d745b4e64ae8647f" - integrity sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ== +jest-resolve-dependencies@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz#f23a54295efc6374b86b198cf8efed5606d6b762" + integrity sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw== dependencies: jest-regex-util "^29.0.0" - jest-snapshot "^29.1.2" + jest-snapshot "^29.0.3" -jest-resolve@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.2.tgz#9dd8c2fc83e59ee7d676b14bd45a5f89e877741d" - integrity sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg== +jest-resolve@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.0.3.tgz#329a3431e3b9eb6629a2cd483e9bed95b26827b9" + integrity sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" + jest-haste-map "^29.0.3" jest-pnp-resolver "^1.2.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" + jest-util "^29.0.3" + jest-validate "^29.0.3" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.1.2.tgz#f18b2b86101341e047de8c2f51a5fdc4e97d053a" - integrity sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q== +jest-runner@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.0.3.tgz#2e47fe1e8777aea9b8970f37e8f83630b508fb87" + integrity sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw== dependencies: - "@jest/console" "^29.1.2" - "@jest/environment" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.0.3" + "@jest/environment" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^29.0.0" - jest-environment-node "^29.1.2" - jest-haste-map "^29.1.2" - jest-leak-detector "^29.1.2" - jest-message-util "^29.1.2" - jest-resolve "^29.1.2" - jest-runtime "^29.1.2" - jest-util "^29.1.2" - jest-watcher "^29.1.2" - jest-worker "^29.1.2" + jest-environment-node "^29.0.3" + jest-haste-map "^29.0.3" + jest-leak-detector "^29.0.3" + jest-message-util "^29.0.3" + jest-resolve "^29.0.3" + jest-runtime "^29.0.3" + jest-util "^29.0.3" + jest-watcher "^29.0.3" + jest-worker "^29.0.3" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.2.tgz#dbcd57103d61115479108d5864bdcd661d9c6783" - integrity sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw== +jest-runtime@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.0.3.tgz#5a823ec5902257519556a4e5a71a868e8fd788aa" + integrity sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ== dependencies: - "@jest/environment" "^29.1.2" - "@jest/fake-timers" "^29.1.2" - "@jest/globals" "^29.1.2" + "@jest/environment" "^29.0.3" + "@jest/fake-timers" "^29.0.3" + "@jest/globals" "^29.0.3" "@jest/source-map" "^29.0.0" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" - jest-message-util "^29.1.2" - jest-mock "^29.1.2" + jest-haste-map "^29.0.3" + jest-message-util "^29.0.3" + jest-mock "^29.0.3" jest-regex-util "^29.0.0" - jest-resolve "^29.1.2" - jest-snapshot "^29.1.2" - jest-util "^29.1.2" + jest-resolve "^29.0.3" + jest-snapshot "^29.0.3" + jest-util "^29.0.3" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.2.tgz#7dd277e88c45f2d2ff5888de1612e63c7ceb575b" - integrity sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg== +jest-snapshot@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.0.3.tgz#0a024706986a915a6eefae74d7343069d2fc8eef" + integrity sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -8442,82 +8435,81 @@ jest-snapshot@^29.1.2: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/expect-utils" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.1.2" + expect "^29.0.3" graceful-fs "^4.2.9" - jest-diff "^29.1.2" + jest-diff "^29.0.3" jest-get-type "^29.0.0" - jest-haste-map "^29.1.2" - jest-matcher-utils "^29.1.2" - jest-message-util "^29.1.2" - jest-util "^29.1.2" + jest-haste-map "^29.0.3" + jest-matcher-utils "^29.0.3" + jest-message-util "^29.0.3" + jest-util "^29.0.3" natural-compare "^1.4.0" - pretty-format "^29.1.2" + pretty-format "^29.0.3" semver "^7.3.5" -jest-util@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.2.tgz#ac5798e93cb6a6703084e194cfa0898d66126df1" - integrity sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ== +jest-util@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.3.tgz#06d1d77f9a1bea380f121897d78695902959fbc0" + integrity sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.2.tgz#83a728b8f6354da2e52346878c8bc7383516ca51" - integrity sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA== +jest-validate@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.0.3.tgz#f9521581d7344685428afa0a4d110e9c519aeeb6" + integrity sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.0.3" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^29.0.0" leven "^3.1.0" - pretty-format "^29.1.2" + pretty-format "^29.0.3" -jest-watcher@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.1.2.tgz#de21439b7d889e2fcf62cc2a4779ef1a3f1f3c62" - integrity sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w== +jest-watcher@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.0.3.tgz#8e220d1cc4f8029875e82015d084cab20f33d57f" + integrity sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw== dependencies: - "@jest/test-result" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/test-result" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^29.1.2" + jest-util "^29.0.3" string-length "^4.0.1" -jest-worker@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.2.tgz#a68302af61bce82b42a9a57285ca7499d29b2afc" - integrity sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA== +jest-worker@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.0.3.tgz#c2ba0aa7e41eec9eb0be8e8a322ae6518df72647" + integrity sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng== dependencies: "@types/node" "*" - jest-util "^29.1.2" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.1.2.tgz#f821a1695ffd6cd0efc3b59d2dfcc70a98582499" - integrity sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw== +jest@29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.0.3.tgz#5227a0596d30791b2649eea347e4aa97f734944d" + integrity sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ== dependencies: - "@jest/core" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/core" "^29.0.3" + "@jest/types" "^29.0.3" import-local "^3.0.2" - jest-cli "^29.1.2" + jest-cli "^29.0.3" jquery@^3.5.0: version "3.6.1" @@ -8559,18 +8551,18 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.1.tgz#d95b4a3b6e1eec6520aa01d9d908eade8c6ba153" - integrity sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A== +jsdom@20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.0.tgz#882825ac9cc5e5bbee704ba16143e1fa78361ebf" + integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== dependencies: abab "^2.0.6" - acorn "^8.8.0" - acorn-globals "^7.0.0" + acorn "^8.7.1" + acorn-globals "^6.0.0" cssom "^0.5.0" cssstyle "^2.3.0" data-urls "^3.0.2" - decimal.js "^10.4.1" + decimal.js "^10.3.1" domexception "^4.0.0" escodegen "^2.0.0" form-data "^4.0.0" @@ -8578,17 +8570,18 @@ jsdom@20.0.1: http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.1" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" + nwsapi "^2.2.0" + parse5 "^7.0.0" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.1.2" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" w3c-xmlserializer "^3.0.0" webidl-conversions "^7.0.0" whatwg-encoding "^2.0.0" whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" - ws "^8.9.0" + ws "^8.8.0" xml-name-validator "^4.0.0" jsesc@^2.5.1: @@ -9479,14 +9472,7 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -meilisearch@0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/meilisearch/-/meilisearch-0.28.0.tgz#650f08a56ef0a989a41d13233f7a744cfa7f54df" - integrity sha512-zC50xLyPWBtfAIZiFTSJyYJp/a5bO+dSSigBKUEoShFkuv9+/KC4J3T3ZejNVHXG2DU0ohOMf8TZ3HAHXNd3EA== - dependencies: - cross-fetch "^3.1.5" - -meilisearch@^0.27.0: +meilisearch@0.27.0, meilisearch@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/meilisearch/-/meilisearch-0.27.0.tgz#8bd57ddb77b975f93e054cb977b951c488ece297" integrity sha512-kZOZFIuSO7c6xRf+Y2/9/h6A9pl0sCl/G44X4KuaSwxGbruOZPhmxbeVEgLHBv4pUFvQ56rNVTA/2d/5GCU1YA== @@ -9938,7 +9924,7 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.12.1, nan@^2.15.0, nan@^2.16.0: +nan@^2.12.1, nan@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== @@ -10243,7 +10229,7 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== -nwsapi@^2.2.2: +nwsapi@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== @@ -10642,7 +10628,7 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@^7.0.0, parse5@^7.1.1: +parse5@^7.0.0: version "7.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== @@ -11267,10 +11253,10 @@ pretty-error@^2.0.2: lodash "^4.17.20" renderkid "^2.0.4" -pretty-format@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.2.tgz#b1f6b75be7d699be1a051f5da36e8ae9e76a8e6a" - integrity sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg== +pretty-format@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.3.tgz#23d5f8cabc9cbf209a77d49409d093d61166a811" + integrity sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q== dependencies: "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" @@ -11361,10 +11347,10 @@ proxy-agent@^4.0.0: proxy-from-env "^1.0.0" socks-proxy-agent "^5.0.0" -proxy-chain@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/proxy-chain/-/proxy-chain-2.1.0.tgz#aa887029505656c9ff2899197b97f3e6f951e922" - integrity sha512-i5JC8YGYpW27eQf4dFoV8N5NsEfqmgG2SOG3csa3lcdCCev4J8LH5UaKej1kXXtDkhaREXKivqw0LOLY21BiEQ== +proxy-chain@2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-chain/-/proxy-chain-2.0.7.tgz#ce368e7783ddd204231b284874323af32270cbe7" + integrity sha512-JYoszbLmEWkjltnzpe7XImWqTLBs1mIwYtObznqm3DF8z1P33iLvZKHrv2Guh+FwRcmjxOiJUzjrjpOMGvEk2Q== dependencies: tslib "^2.3.1" @@ -11619,10 +11605,10 @@ ramda@^0.26.1: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== -rand-user-agent@1.0.84: - version "1.0.84" - resolved "https://registry.yarnpkg.com/rand-user-agent/-/rand-user-agent-1.0.84.tgz#f1bf31374185ce61fd870e4c39ae09a69cf35942" - integrity sha512-OvK4PozS1C6Q1mn57E+F0umGqxOtDm7xhDc9WDnUOMuiVbCgTiUQlj79AJNHbLoxJW9AhF5pV6gHFYprwunfEg== +rand-user-agent@1.0.83: + version "1.0.83" + resolved "https://registry.yarnpkg.com/rand-user-agent/-/rand-user-agent-1.0.83.tgz#645afa4ab189ba129130e13dfdfaf947639eb271" + integrity sha512-HmNgyAXWArb+6jNpVq1HTDl8atbFY+J2YwnWBd4HZZDMoA5NcywVi6y0Tha29mbouSpyEkwWBUNLrrkQY7fzPw== randexp@0.4.6: version "0.4.6" @@ -12446,15 +12432,6 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== -simple-get@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" - integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - simple-get@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" @@ -13450,7 +13427,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@4.1.2, tough-cookie@^4.1.2: +tough-cookie@4.1.2, tough-cookie@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== @@ -14144,6 +14121,13 @@ vuepress@1.9.7: opencollective-postinstall "^2.0.2" update-notifier "^4.0.0" +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + w3c-xmlserializer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" @@ -14642,7 +14626,7 @@ write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@8.8.1: +ws@8.8.1, ws@^8.8.0: version "8.8.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== @@ -14654,11 +14638,6 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^8.9.0: - version "8.9.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e" - integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== - wuzzy@^0.1.4: version "0.1.8" resolved "https://registry.yarnpkg.com/wuzzy/-/wuzzy-0.1.8.tgz#2e729f157b5757d4ed4d73c050f9f4ae12336f5c"