{
  "name": "rsshub",
  "version": "1.0.0-master.e086c17",
  "description": "Make RSS Great Again!",
  "keywords": [
    "RSS"
  ],
  "homepage": "https://github.com/DIYgod/RSSHub#readme",
  "bugs": {
    "url": "https://github.com/DIYgod/RSSHub/issues"
  },
  "license": "AGPL-3.0",
  "author": "DIYgod",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/DIYgod/RSSHub.git"
  },
  "files": [
    "dist-lib"
  ],
  "type": "module",
  "exports": {
    ".": {
      "types": "./dist-lib/pkg.d.mts",
      "import": "./dist-lib/pkg.mjs"
    }
  },
  "dependencies": {
    "@bbob/html": "4.4.1",
    "@bbob/plugin-helper": "4.4.1",
    "@bbob/preset-html5": "4.4.1",
    "@googleapis/youtube": "34.0.0",
    "@honeybadger-io/js": "6.16.0",
    "@hono/node-server": "2.1.0",
    "@hono/zod-openapi": "1.5.2",
    "@jocmp/mercury-parser": "3.1.0",
    "@notionhq/client": "5.24.0",
    "@opentelemetry/api": "1.9.1",
    "@opentelemetry/exporter-prometheus": "0.221.0",
    "@opentelemetry/exporter-trace-otlp-http": "0.221.0",
    "@opentelemetry/resources": "2.10.0",
    "@opentelemetry/sdk-metrics": "2.10.0",
    "@opentelemetry/sdk-trace-base": "2.10.0",
    "@opentelemetry/semantic-conventions": "1.43.0",
    "@rss3/sdk": "0.0.25",
    "@scalar/hono-api-reference": "0.11.13",
    "@sentry/node": "10.69.0",
    "cheerio": "1.2.0",
    "city-timezones": "1.3.4",
    "cross-env": "10.1.0",
    "crypto-js": "4.2.0",
    "currency-symbol-map": "5.1.0",
    "dayjs": "1.11.21",
    "destr": "2.0.5",
    "dotenv": "17.4.2",
    "entities": "8.0.0",
    "etag": "1.8.1",
    "fanfou-sdk": "6.0.0",
    "google-play-scraper": "10.1.3",
    "header-generator": "2.1.88",
    "hono": "4.13.1",
    "html-to-text": "10.0.0",
    "http-cookie-agent": "8.0.0",
    "https-proxy-agent": "9.1.0",
    "iconv-lite": "0.7.3",
    "imapflow": "1.6.6",
    "instagram-private-api": "1.46.1",
    "ioredis": "6.0.0",
    "ip-regex": "5.0.0",
    "jsdom": "30.0.1",
    "json-bigint": "1.0.0",
    "jsonpath-plus": "10.4.0",
    "jsrsasign": "11.1.3",
    "lru-cache": "11.5.2",
    "lz-string": "1.5.0",
    "mailparser": "3.9.15",
    "markdown-it": "15.0.0",
    "mixi2": "0.2.2",
    "narou": "2.0.1",
    "notion-to-md": "3.1.9",
    "oauth-1.0a": "2.2.6",
    "ofetch": "1.5.1",
    "otplib": "13.4.1",
    "p-map": "7.0.6",
    "pac-proxy-agent": "9.1.0",
    "patchright": "1.61.1",
    "query-string": "9.5.0",
    "rate-limiter-flexible": "11.2.0",
    "re2js": "2.8.6",
    "rfc4648": "1.5.4",
    "rss-parser": "3.13.0",
    "sanitize-html": "2.17.6",
    "simplecc-wasm": "1.1.1",
    "socks-proxy-agent": "10.1.0",
    "source-map": "0.8.0",
    "teleproto": "1.228.5",
    "title": "4.0.1",
    "tldts": "7.4.10",
    "tosource": "2.0.0-alpha.3",
    "tough-cookie": "6.0.2",
    "tsx": "4.23.11",
    "twitter-api-v2": "1.29.1",
    "ufo": "1.6.4",
    "undici": "8.10.0",
    "uuid": "14.0.1",
    "winston": "3.19.0",
    "xxhash-wasm": "1.1.0",
    "youtube-caption-extractor": "1.10.2",
    "youtubei.js": "17.2.0",
    "zod": "4.4.3"
  },
  "devDependencies": {
    "@actions/core": "3.0.1",
    "@actions/github": "9.1.1",
    "@bbob/types": "4.4.1",
    "@cloudflare/containers": "0.3.7",
    "@cloudflare/playwright": "1.3.5",
    "@cloudflare/vitest-pool-workers": "0.20.3",
    "@cloudflare/workers-types": "5.20260808.1",
    "@eslint/eslintrc": "3.3.6",
    "@eslint/js": "10.0.1",
    "@oxlint/plugins": "1.77.0",
    "@stylistic/eslint-plugin": "5.10.0",
    "@types/babel__preset-env": "7.10.0",
    "@types/crypto-js": "4.2.2",
    "@types/eslint": "9.6.1",
    "@types/etag": "1.8.4",
    "@types/fs-extra": "11.0.4",
    "@types/html-to-text": "9.0.4",
    "@types/js-beautify": "1.14.3",
    "@types/jsdom": "30.0.0",
    "@types/json-bigint": "1.0.4",
    "@types/jsrsasign": "10.5.15",
    "@types/mailparser": "3.4.6",
    "@types/module-alias": "2.0.4",
    "@types/node": "26.2.0",
    "@types/sanitize-html": "2.16.1",
    "@typescript-eslint/eslint-plugin": "8.66.0",
    "@typescript-eslint/parser": "8.66.0",
    "@vercel/nft": "1.10.2",
    "@vitest/coverage-v8": "4.1.10",
    "discord-api-types": "0.38.53",
    "domhandler": "6.0.1",
    "eslint": "10.8.1",
    "eslint-nibble": "9.1.1",
    "eslint-plugin-n": "18.2.2",
    "eslint-plugin-regexp": "3.1.1",
    "eslint-plugin-simple-import-sort": "14.0.0",
    "eslint-plugin-unicorn": "72.0.0",
    "eslint-plugin-yml": "3.8.1",
    "fast-string-width": "3.0.2",
    "fs-extra": "11.4.0",
    "globals": "17.9.0",
    "husky": "9.1.7",
    "js-beautify": "2.0.3",
    "lint-staged": "17.3.0",
    "mockdate": "3.0.5",
    "msw": "2.15.0",
    "node-network-devtools": "1.0.30",
    "oxc-parser": "0.143.0",
    "oxfmt": "0.62.0",
    "oxlint": "1.77.0",
    "oxlint-plugin-eslint": "1.77.0",
    "oxlint-tsgolint": "7.0.2001",
    "remark": "15.0.1",
    "remark-gfm": "4.0.1",
    "remark-pangu": "2.2.0",
    "remark-parse": "11.0.0",
    "tsdown": "0.22.14",
    "typescript": "npm:@typescript/typescript6@6.0.2",
    "typescript-7": "npm:typescript@7.0.2",
    "unified": "11.0.5",
    "unrun": "0.3.1",
    "vite-tsconfig-paths": "7.0.0-alpha.1",
    "vitest": "4.1.10",
    "wrangler": "4.120.0",
    "yaml-eslint-parser": "2.1.0"
  },
  "lint-staged": {
    "!(*.ts|*.tsx|*.js|*.cjs|*.mjs|*.yml)": [
      "oxfmt --no-error-on-unmatched-pattern"
    ],
    "*.{ts,tsx,js,cjs,mjs}": [
      "tsx scripts/workflow/format-description.ts",
      "oxlint --type-aware --fix",
      "eslint --cache --fix --concurrency auto",
      "oxfmt --no-error-on-unmatched-pattern"
    ],
    "*.yml": [
      "eslint --cache --fix --concurrency auto",
      "oxfmt --no-error-on-unmatched-pattern"
    ]
  },
  "engines": {
    "node": "^22.22.2 || ^24.15.0"
  },
  "scripts": {
    "build": "npm run build:routes && tsdown",
    "build:docs": "npm run build:routes && tsx scripts/workflow/build-docs.ts",
    "build:lib": "npm run build:routes && tsdown --config ./tsdown-lib.config.ts",
    "build:routes": "cross-env NODE_ENV=dev tsx scripts/workflow/build-routes.ts",
    "build:routes:worker": "cross-env NODE_ENV=dev WORKER_BUILD=true tsx scripts/workflow/build-routes.ts",
    "container-build": "tsdown --config ./tsdown-container.config.ts",
    "container-deploy": "npm run container-build && wrangler deploy --config wrangler-container.toml --containers-rollout=immediate",
    "dev": "cross-env NODE_ENV=dev NODE_OPTIONS='--max-http-header-size=32768' tsx watch --inspect --clear-screen=false lib/index.ts",
    "dev:cache": "cross-env NODE_ENV=production NODE_OPTIONS='--max-http-header-size=32768' tsx watch --clear-screen=false lib/index.ts",
    "eslint": "eslint --cache . --concurrency auto",
    "format": "oxlint --type-aware --fix . && oxfmt .",
    "format:check": "oxlint --type-aware . && oxfmt . --check",
    "format:description": "tsx scripts/workflow/format-description.ts",
    "format:staged": "lint-staged",
    "lint": "oxlint --type-aware .",
    "profiling": "cross-env NODE_ENV=production tsx --prof lib/index.ts",
    "start": "cross-env NODE_ENV=production NODE_OPTIONS='--max-http-header-size=32768' node dist/index.mjs",
    "test": "npm run format:check && npm run vitest:coverage",
    "typecheck": "tsc --noEmit",
    "vercel-build": "npm run build:routes && tsdown --config ./tsdown-vercel.config.ts",
    "vitest": "cross-env NODE_ENV=test vitest",
    "vitest:coverage": "cross-env NODE_ENV=test vitest --coverage.enabled --reporter=junit",
    "vitest:fullroutes": "cross-env NODE_ENV=test FULL_ROUTES_TEST=true vitest --reporter=json --reporter=default --outputFile=\"./assets/build/test-full-routes.json\" lib/app.test.ts",
    "vitest:watch": "cross-env NODE_ENV=test vitest --watch",
    "vitest:workerd": "cross-env NODE_ENV=test vitest run --config vitest.workers.config.ts",
    "worker-build": "npm run build:routes:worker && tsdown --config ./tsdown-worker.config.ts",
    "worker-deploy": "npm run worker-build && wrangler deploy",
    "worker-dev": "npm run worker-build && wrangler dev",
    "worker-test": "npm run worker-build && vitest run lib/worker.test.ts"
  }
}