上传小说文件
+拖放TXT小说文件到此处或点击上传
支持20MB以内的TXT文件
diff --git a/.env.development b/.env.development index a21f654b..6edf51d2 100644 --- a/.env.development +++ b/.env.development @@ -1,17 +1,60 @@ -NODE_ENV=production +#NODE_ENV=production +NODE_ENV=development # just a flag ENV='staging' LOG_WITH_FILE = 1 +ENABLE_TASKER = 0 +TASKER_INTERVAL = 0 +FORCE_HEADER = 0 +# dr2的api,默认0取public目录。设置1取壳子内部assets +DR2_API_TYPE = 0 # trace/debug/info/warn/error/fatal LOG_LEVEL = info COOKIE_AUTH_CODE = drpys API_AUTH_NAME = admin API_AUTH_CODE = drpys API_PWD = dzyyds -EPG_URL = https://epg.mxdyeah.top/api/diyp/?ch={name}&date={date} +# EPG_URL = https://epg.mxdyeah.top/api/diyp/?ch={name}&date={date} +EPG_URL = https://iptv.crestekk.cn/epgphp/index.php?ch={name}&date={date} LOGO_URL = https://live.mxdyeah.top/logo/{name}.png LIVE_URL = 'https://livetv.wqwqwq.sbs/tv.m3u' # LIVE_URL = './lives/tv.m3u' +MAX_TASK = 8 +dingding_webhook= +wechat_webhook= +tx_news_guonei_api_key= +cookie_52pojie= + +# QQ邮箱配置 +QQ_EMAIL = +QQ_SMTP_AUTH_CODE = + +# 调试猫源-推荐开启 +CAT_DEBUG=1 +PYTHON_PATH= +VIRTUAL_ENV= +daemonMode=0 +DS_REQ_LIB=0 + +# 剪切板相关 +# 单次文本传输最大体积 默认100KB +CLIPBOARD_MAX_SIZE= +# 剪切板接口请求头安全码 +CLIPBOARD_SECURITY_CODE=drpys +# 允许字符集,默认utf-8 +CLIPBOARD_ALLOWED_CHARSET= +# 最大可读取问文本体积,默认2mb +CLIPBOARD_MAX_READ_SIZE= + +# 允许清理文件代理缓存 +allow_file_cache_clear=1 + +# API超时配置(秒) +# 默认API超时时间 +API_TIMEOUT=20 +# action接口专用超时时间 +API_ACTION_TIMEOUT=60 +WEBDAV_DEBUG=0 \ No newline at end of file diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml new file mode 100644 index 00000000..da6c2447 --- /dev/null +++ b/.github/workflows/build-docker.yml @@ -0,0 +1,61 @@ +name: build-docker + +on: + push: + branches: + - main + tags: + - v* + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract version from package.json + id: pkg + run: | + VERSION=$(jq -r '.version' package.json) + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Extract metadata (tags, labels) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=${{ steps.pkg.outputs.version }} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + platforms: linux/amd64,linux/arm64 + context: . + file: Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/.github/workflows/release-assets.yml b/.github/workflows/release-assets.yml new file mode 100644 index 00000000..d4979300 --- /dev/null +++ b/.github/workflows/release-assets.yml @@ -0,0 +1,82 @@ +name: build-and-release + +on: + push: + tags: + - 'v*' + +env: + NODE_VERSION: '22' # 使用 Node.js 22 版本 + +jobs: + build-and-release: + runs-on: ubuntu-latest + permissions: + contents: write # 需要写入权限来创建发布 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # 获取所有历史记录 + + - name: Setup Node.js 22 + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + + - name: Install 7zip + run: | + sudo apt-get update + sudo apt-get install -y p7zip-full + + - name: Install dependencies + run: npm ci + + - name: Run packageJS script + run: npm run packageJS + + - name: Run packageJS-green script + run: npm run packageJS-green + + - name: Find generated 7z files + run: | + # 在上级目录查找生成的 7z 文件 + cd .. + echo "Generated files:" + ls -la *.7z || echo "No 7z files found" + # 将文件列表保存到环境变量中 + echo "FILES=$(ls *.7z 2>/dev/null | tr '\n' ' ')" >> $GITHUB_ENV + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref_name }} + release_name: Release ${{ github.ref_name }} + draft: false + prerelease: false + + - name: Upload Release Assets + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # 切换到上级目录 + cd .. + # 上传所有找到的 7z 文件 + for file in $FILES; do + echo "Uploading $file..." + curl -s \ + -H "Authorization: token $GITHUB_TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"$file" \ + "${{ steps.create_release.outputs.upload_url }}?name=$file" + echo "Uploaded $file" + done + + - name: Verify upload + run: | + echo "Uploaded files: $FILES" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5f6ca6af..78c5d859 100644 --- a/.gitignore +++ b/.gitignore @@ -132,5 +132,30 @@ dist !README.md .idea /config/env.json -/js/UC分享.js +/spider/js/UC分享.js /json/UC分享.json +/jx/奇奇.js +/spider/js/百忙无果[官].js +/data/settings/link_data.json +/yarn.lock +/t4_daemon.pid +/custom.json +/index.json +/vod_cache/ +/jx/芒果关姐.js +/data/mv/ +/database.db +/scripts/python/XYQ提取结果.json +*.pyc +/scripts/python/appMap.txt +/binary/ +/plugins/ +/.claude +/.plugins.js +/clipboard.txt +/clipboard.txt.bak +/apps/cat/ +/data/temp/ +/scripts/mjs/index.db +/scripts/test/rsa-test.json +/apps/salary/ diff --git a/.plugins.example.js b/.plugins.example.js new file mode 100644 index 00000000..c61674e6 --- /dev/null +++ b/.plugins.example.js @@ -0,0 +1,49 @@ +/** + * 插件配置示例文件 + * 定义系统中可用的插件及其配置参数 + * + * 插件配置说明: + * - name: 插件名称,用于标识插件 + * - path: 插件路径,相对于项目根目录 + * - params: 插件启动参数,传递给插件的命令行参数 + * - desc: 插件描述,说明插件的功能 + * - active: 是否激活插件,true表示启用,false表示禁用 + * + * 使用方法: + * 1. 复制此文件为 .plugins.js + * 2. 根据需要修改插件配置 + * 3. 设置 active 字段来启用或禁用插件 + */ + +const plugins = [ + { + name: 'req-proxy', // 插件名称 + path: 'plugins/req-proxy', // 插件路径 + params: '-p 57571', // 启动参数:指定端口为57571 + desc: 'req代理服务', // 插件描述:提供请求代理功能 + active: false // 是否激活:true表示启用此插件 + }, + { + name: 'pvideo', // 插件名称 + path: 'plugins/pvideo', // 插件路径 + params: '-port 57572 -dns 8.8.8.8', // 启动参数:端口57572,DNS服务器8.8.8.8 + desc: '嗷呜适配代理服务', // 插件描述:提供视频适配代理功能 + active: false // 是否激活:true表示启用此插件 + }, + { + name: 'pup-sniffer', // 插件名称 + path: 'plugins/pup-sniffer', // 插件路径 + params: '-port 57573', // 启动参数:端口57573 + desc: 'drplayer嗅探服务', // 插件描述:提供视频适配代理功能 + active: true // 是否激活:true表示启用此插件 + }, + { + name: 'mediaProxy', // 插件名称 + path: 'plugins/mediaProxy', // 插件路径 + params: '-port 57574', // 启动参数:端口57574 + desc: 'go媒体代理服务', // 插件描述:提供视频适配代理功能 + active: true // 是否激活:true表示启用此插件 + }, +] + +export default plugins; \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 1d5e013d..0377fc19 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # 构建器阶段 -# 使用node:current-alpine3.21作为基础镜像 -FROM node:current-alpine3.21 AS builder +# 使用node:20-alpine(17 < version < 23)作为基础镜像 +FROM node:20-alpine AS builder # 安装git RUN apk add --no-cache git @@ -14,18 +14,14 @@ WORKDIR /app # 克隆GitHub仓库到工作目录 RUN git clone https://github.com/hjdhnx/drpy-node.git . -# 设置npm镜像为npmmirror -RUN npm config set registry https://registry.npmmirror.com - -# 全局安装pm2工具(yarn已经自带了不需要再自己装) -RUN npm install -g pm2 - # 安装项目依赖项和puppeteer RUN yarn && yarn add puppeteer # 复制工作目录中的所有文件到一个临时目录中 # 以便在运行器阶段中使用 -RUN mkdir /tmp/drpys && cp -r /app/* /tmp/drpys/ +RUN mkdir -p /tmp/drpys && \ + cp -r /app/. /tmp/drpys/ + # 运行器阶段 # 使用alpine:latest作为基础镜像来创建一个更小的镜像 @@ -36,13 +32,28 @@ FROM alpine:latest AS runner WORKDIR /app # 复制构建器阶段中准备好的文件和依赖项到运行器阶段的工作目录中 -COPY --from=builder /tmp/drpys /app +COPY --from=builder /tmp/drpys/. /app +RUN cp /app/.env.development /app/.env && \ + rm -f /app/.env.development && \ + sed -i 's|^VIRTUAL_ENV[[:space:]]*=[[:space:]]*$|VIRTUAL_ENV=/app/.venv|' /app/.env && \ + echo '{"ali_token":"","ali_refresh_token":"","quark_cookie":"","uc_cookie":"","bili_cookie":"","thread":"10","enable_dr2":"1","enable_py":"2"}' > /app/config/env.json # 安装Node.js运行时(如果需要的话,这里已经假设在构建器阶段中安装了所有必要的Node.js依赖项) # 由于我们已经将node_modules目录复制到了运行器阶段,因此这里不需要再次安装npm或node_modules中的依赖项 # 但是,我们仍然需要安装Node.js运行时本身(除非drpys项目是一个纯静态资源服务,不需要Node.js运行时) RUN apk add --no-cache nodejs +# 安装python3依赖 +RUN apk add --no-cache python3 \ + py3-pip \ + py3-setuptools \ + py3-wheel + +# 激活python3虚拟环境并安装依pip3赖 +RUN python3 -m venv /app/.venv && \ + . /app/.venv/bin/activate && \ + pip3 install -r /app/spider/py/base/requirements.txt + # 暴露应用程序端口(根据您的项目需求调整) EXPOSE 5757 diff --git a/README.md b/README.md index 15948c3c..d98e1b7a 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,94 @@ # drpyS(drpy-node) +[](https://zread.ai/hjdhnx/drpy-node) +[](https://deepwiki.com/hjdhnx/drpy-node) + nodejs作为服务端的drpy实现。全面升级异步写法 -积极开发中,每日一更,当前进度 `29%` +~~积极开发中,每日一更~~,当前进度 `100%` +~~找工作中,随缘更新~~ +上班当牛马,下班要带娃,阶段性佛系趁娃睡觉熬夜更新 + +### 常用超链接 -* [本地配置接口-动态本地](/config?pwd=) -* [本地配置接口-动态外网/局域网](/config/1?pwd=) +* [本项目主页-免翻](https://github.com/hjdhnx/drpy-node) +* [接口文档](docs/apidoc.md) | [接口列表如定时任务](docs/apiList.md) | [小猫影视-待对接T4](https://github.com/waifu-project/movie/pull/135) +* [代码质量评估工具说明](docs/codeCheck.md) | [DS项目代码评估报告](docs/codeCheckReport.md) +* [本地配置接口-动态本地](/config?healthy=1&pwd=$pwd) +* [本地配置接口-动态外网/局域网](/config/1?healthy=1&pwd=$pwd) * [其他配置接口-订阅过滤](/docs/sub.md) -* [代码加解密工具](/admin/encoder) -* [V我50支付凭证生成器](/authcoder?len=10&number=1) +* [python环境](/docs/pyenv.md) | [DS项目环境变量说明](/docs/envdoc.md) +* [猫源调试教程](/docs/catDebug.md) * [接口压测教程](/docs/httpTest.md) -* [央视点播解析工具](/proxy/央视大全[官]/index.html) -* [cookie管理插件](/apps/cookie-butler/index.html) +* [AI编程工具 trae](https://www.trae.ai/account-setting#subscription) | 邮编ZIP输入: 518000 +* [免费AI-360纳米](https://bot.n.cn/)|[免费AI-当贝AI](https://ai.dangbei.com/chat)|[国外聚合全模型](https://lmarena.ai/) * [本站防止爬虫协议](/robots.txt) -* [本项目主页-免翻](https://github.com/hjdhnx/drpy-node) +* [油猴脚本-反切屏检测](/public/monkey/check_screen_leave.user.js) +* [油猴脚本-通用网页脚本框架](/public/monkey/clipboard-sender.user.js) +* [油猴脚本-通用网页脚本框架自定义指令集](/public/monkey/自定义指令集-道长.json) + +------------------------- + +### 插件应用列表 + +* [DrPlayer](/apps/drplayer) +* [Websocket实时日志](/apps/websocket) +* [cookie管理插件](/apps/cookie-butler/index.html) +* [cron表达式插件](/apps/cron-generator/index.html) +* [剪切板智能推送插件](/apps/clipboard-pusher/index.html) +* [DS源可用性检测插件](/apps/source-checker/index.html) +* [DS解析检测插件](/apps/vip-parser/index.html) +* [DS源配置编辑插件](/apps/source-editor/index.html) +* [DS内存图片管理器插件](/apps/image-manager/index.html) +* [DS时钟插件-白色时钟](/apps/clock/white_clock.html)|[日历时钟](/apps/clock/index.html) +* [DS庆祝页面-完结撒花](/apps/happy/index.html) +* [bookReader](/apps/book-reader) +* [代码加解密工具](/admin/encoder) +* [央视点播解析工具](/proxy/央视大全[官]/index.html) +* [在线猫ds源主页](/cat/index.html) +* [V我50支付凭证生成器](/authcoder?len=10&number=1) + +### 同作者项目 + +* [DS源适配猫影视](https://github.com/hjdhnx/CatPawOpen/tree/ds-cat) +* [DS插件项目-golang](https://github.com/hjdhnx/drpy-plugin) +* [DS 二进制插件项目-pup-sniffer](https://github.com/hjdhnx/pup-sniffer) +* [DS 二进制插件项目-file-index](https://github.com/hjdhnx/file-index) +* [DS web插件项目-drplayer](https://github.com/hjdhnx/DrPlayer) +* [drpy2打包项目](https://github.com/hjdhnx/drpy-webpack) + +### 免费壳子推荐 + +* [酷9](https://wwbty.lanzouv.com/iGoUV3d3hxuf) +* [千寻](https://wwbty.lanzouv.com/iSSN93d3hyzg) ## 更新记录 -### 20250107 +### 20251017 + +更新至V1.3.14 + +### 20251015 + +更新至V1.3.13 + +### 20251014 + +更新至V1.3.12 + +### 20251013 + +更新至V1.3.11 -更新至V1.1.3 +### 20251012 -1. req系列函数修复 -2. 增加新源,优化推送 +更新至V1.3.10 [点此查看完整更新记录](docs/updateRecord.md) **注意事项** -总是有人遇到各种奇葩问题,像什么没弹幕,访问/config/1服务马上崩溃等等,能自行解决最好,解决不了我建议你使用下方安装教程 `3.道长腾讯轻量云服务器安装方案` +总是有人遇到各种奇葩问题,像什么没弹幕,访问/config/1服务马上崩溃等等,能自行解决最好,解决不了我建议你使用下方安装教程 +`3.道长腾讯轻量云服务器安装方案` 跟我一样还有问题那就不可能了,我能用你即能用 ## 基础框架 @@ -51,15 +112,17 @@ todo: ## 参考资料 * [crypto-js-wasm使用教程](docs/crypto-js-wasm/readme-CN.md) +* [webdav使用教程](docs/webdav.md) * [puppeteer使用教程](docs/pupInstall.md) * [drpyS源属性说明](docs/ruleAttr.md) * [drpy2写源简述](docs/ruleDesc.md) -* [讯飞星火开放平台](https://console.xfyun.cn/services/bm4) -* [讯飞星火智能体数据集](https://xinghuo.xfyun.cn/botcenter/private-dataset) +* [关姐算法搭建说明](docs/suanfa.md) ## 问题说明 1. windows上直接运行index.js可能会发现运行过程中的日志打印出中文乱码。建议通过yarn dev运行或者在package.json里点击dev脚本运行 +2. `pinyin` 库依赖的 `nodejieba` 跑路了现在无法完成安装 +3. `new Promise` 里发生的错误无法被外部try catch 导致程序崩溃,如 `番薯动漫.js` 里的写法 ## 安装说明 @@ -71,11 +134,11 @@ todo: * 终端执行 -`bash -c "$(curl -fsSLk https://github.com/hjdhnx/drpy-node/raw/refs/heads/main/autorun.sh)"` +`bash -c "$(curl -fsSLk https://github.com/hjdhnx/drpy-node/raw/refs/heads/main/install/autorun.sh)"` * 添加定时方案 -`echo "30 7 * * * cd /patch && bash -c \"\$(curl -fsSLk https://github.com/hjdhnx/drpy-node/raw/refs/heads/main/autorun.sh)\" >> /patch/drpyslog.log 2>&1" | crontab -` +`echo "30 7 * * * cd /patch && bash -c \"\$(curl -fsSLk https://github.com/hjdhnx/drpy-node/raw/refs/heads/main/install/autorun.sh)\" >> /patch/drpyslog.log 2>&1" | crontab -` 或者下载脚本到本地后 @@ -112,3 +175,36 @@ pm2 restart drpys * [代理转发ds](/req/https://github.com/hjdhnx/drpy-node) * [代理转发百度](/req/https://www.baidu.com) * [代理转发范冰冰直播源](/req/https://live.fanmingming.com/tv/m3u/ipv6.m3u) + +## 友链(白嫖接口服务) + +* [猫影视git文件加速](https://github.catvod.com/) +* [猫影视多功能主页](https://catvod.com/) +* [ZY写源教学](https://zy.catni.cn/editSource/edit-grammar.html) +* [源动力-新](https://tvshare.cn/) +* [源动力-老](https://sourcepower.top/index) +* [电竞专业反应测试](https://www.arealme.com/brain-memory-game/zh/) +* [桌面启动器](https://wwbty.lanzouv.com/iDZaP3d3i5ud) + +## AI接入 + +* [讯飞星火](https://console.xfyun.cn/services/bm4) +* [deepseek](https://platform.deepseek.com/api_keys) | [对话](https://chat.deepseek.com/) +* [讯飞智能体](https://xinghuo.xfyun.cn/botcenter/createbot) + | [对话](https://xinghuo.xfyun.cn/botweb/0b83d4b1c0447e82ea00fe9485bd9353) + | [数据集](https://xinghuo.xfyun.cn/botcenter/private-dataset) +* [KIMI](https://platform.moonshot.cn/console/info) | [对话](https://kimi.moonshot.cn/) + +## 版权 + +本项目主体框架由道长开发,项目内相关源收集于互联网,可供学习交流测试使用,禁止商用或者直接转卖代码,转载代码请带上出处。 + +## 免责声明 + +1. 此程序仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2. 由于此程序仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3. 请勿将此程序用于任何商业或非法目的,若违反规定请自行对此负责。 +4. 此程序涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5. 本人对任何程序引发的问题概不负责,包括但不限于由程序错误引起的任何损失和损害。 +6. 如果任何单位或个人认为此程序可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此程序。 +7. 所有直接或间接使用、查看此程序的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此程序,即视为您已接受此免责声明。 diff --git a/apps/book-reader/index.html b/apps/book-reader/index.html new file mode 100644 index 00000000..9a1cd458 --- /dev/null +++ b/apps/book-reader/index.html @@ -0,0 +1,2336 @@ + + +
+ + +拖放TXT小说文件到此处或点击上传
支持20MB以内的TXT文件
正在处理文件,请稍候...
+安全地管理和同步您的文本内容
+ ++ +
+>>0?1:0),m=a.low=m+O,a.high=k+W+(m>>>0 以友好的交互方式选择时间/频率,自动生成支持 6 字段(秒 分 时 日 月 周)格式的 cron 表达式。移动端自适应。 t(l,c,void 0,a&&a[c]));else{const l=Object.keys(e);i=new Array(l.length);for(let c=0,d=l.length;c >>2]>>>24-y%4*8&255,k=h[y+1>>>2]>>>24-(y+1)%4*8&255,x=h[y+2>>>2]>>>24-(y+2)%4*8&255,w=S<<16|k<<8|x,E=0;E<4&&y+E*.75 >>6*(3-E)&63));var _=v.charAt(64);if(_)for(;g.length%4;)g.push(_);return g.join("")},parse:function(c,d){d===void 0&&(d=!0);var h=c.length,p=d?this._safe_map:this._map,v=this._reverseMap;if(!v){v=this._reverseMap=[];for(var g=0;g >>32-P}i.RIPEMD160=l._createHelper(S),i.HmacRIPEMD160=l._createHmacHelper(S)})(),n.RIPEMD160})})(xE)),xE.exports}var wE={exports:{}},_ut=wE.exports,Nie;function yW(){return Nie||(Nie=1,(function(e,t){(function(n,r){e.exports=r($i())})(_ut,function(n){(function(){var r=n,i=r.lib,a=i.Base,s=r.enc,l=s.Utf8,c=r.algo;c.HMAC=a.extend({init:function(d,h){d=this._hasher=new d.init,typeof h=="string"&&(h=l.parse(h));var p=d.blockSize,v=p*4;h.sigBytes>v&&(h=d.finalize(h)),h.clamp();for(var g=this._oKey=h.clone(),y=this._iKey=h.clone(),S=g.words,k=y.words,x=0;x >>2]&255;L.sigBytes-=B}};a.BlockCipher=g.extend({cfg:g.cfg.extend({mode:k,padding:w}),reset:function(){var L;g.reset.call(this);var B=this.cfg,j=B.iv,H=B.mode;this._xformMode==this._ENC_XFORM_MODE?L=H.createEncryptor:(L=H.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==L?this._mode.init(this,j&&j.words):(this._mode=L.call(H,this,j&&j.words),this._mode.__creator=L)},_doProcessBlock:function(L,B){this._mode.processBlock(L,B)},_doFinalize:function(){var L,B=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(B.pad(this._data,this.blockSize),L=this._process(!0)):(L=this._process(!0),B.unpad(L)),L},blockSize:128/32});var E=a.CipherParams=s.extend({init:function(L){this.mixIn(L)},toString:function(L){return(L||this.formatter).stringify(this)}}),_=i.format={},T=_.OpenSSL={stringify:function(L){var B,j=L.ciphertext,H=L.salt;return H?B=l.create([1398893684,1701076831]).concat(H).concat(j):B=j,B.toString(h)},parse:function(L){var B,j=h.parse(L),H=j.words;return H[0]==1398893684&&H[1]==1701076831&&(B=l.create(H.slice(2,4)),H.splice(0,4),j.sigBytes-=16),E.create({ciphertext:j,salt:B})}},D=a.SerializableCipher=s.extend({cfg:s.extend({format:T}),encrypt:function(L,B,j,H){H=this.cfg.extend(H);var U=L.createEncryptor(j,H),W=U.finalize(B),G=U.cfg;return E.create({ciphertext:W,key:j,iv:G.iv,algorithm:L,mode:G.mode,padding:G.padding,blockSize:L.blockSize,formatter:H.format})},decrypt:function(L,B,j,H){H=this.cfg.extend(H),B=this._parse(B,H.format);var U=L.createDecryptor(j,H).finalize(B.ciphertext);return U},_parse:function(L,B){return typeof L=="string"?B.parse(L,this):L}}),P=i.kdf={},M=P.OpenSSL={execute:function(L,B,j,H,U){if(H||(H=l.random(64/8)),U)var W=v.create({keySize:B+j,hasher:U}).compute(L,H);else var W=v.create({keySize:B+j}).compute(L,H);var G=l.create(W.words.slice(B),j*4);return W.sigBytes=B*4,E.create({key:W,iv:G,salt:H})}},O=a.PasswordBasedCipher=D.extend({cfg:D.cfg.extend({kdf:M}),encrypt:function(L,B,j,H){H=this.cfg.extend(H);var U=H.kdf.execute(j,L.keySize,L.ivSize,H.salt,H.hasher);H.iv=U.iv;var W=D.encrypt.call(this,L,B,U.key,H);return W.mixIn(U),W},decrypt:function(L,B,j,H){H=this.cfg.extend(H),B=this._parse(B,H.format);var U=H.kdf.execute(j,L.keySize,L.ivSize,B.salt,H.hasher);H.iv=U.iv;var W=D.decrypt.call(this,L,B,U.key,H);return W}})})()})})(TE)),TE.exports}var AE={exports:{}},Cut=AE.exports,zie;function Eut(){return zie||(zie=1,(function(e,t){(function(n,r,i){e.exports=r($i(),Ia())})(Cut,function(n){return n.mode.CFB=(function(){var r=n.lib.BlockCipherMode.extend();r.Encryptor=r.extend({processBlock:function(a,s){var l=this._cipher,c=l.blockSize;i.call(this,a,s,c,l),this._prevBlock=a.slice(s,s+c)}}),r.Decryptor=r.extend({processBlock:function(a,s){var l=this._cipher,c=l.blockSize,d=a.slice(s,s+c);i.call(this,a,s,c,l),this._prevBlock=d}});function i(a,s,l,c){var d,h=this._iv;h?(d=h.slice(0),this._iv=void 0):d=this._prevBlock,c.encryptBlock(d,0);for(var p=0;pCron 表达式生成器
+ 预览
+ # 生成的 cron 表达式会在这里显示
+
+
+
+ 0&&i(t,n)=>{const r=new IntersectionObserver(i=>{for(const a of i)if(a.isIntersecting){r.disconnect(),t();break}},e);return n(i=>{if(i instanceof Element){if(H5e(i))return t(),r.disconnect(),!1;r.observe(i)}}),()=>r.disconnect()},G5e=e=>t=>{if(e){const n=matchMedia(e);if(n.matches)t();else return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}},K5e=(e=[])=>(t,n)=>{Lr(e)&&(e=[e]);let r=!1;const i=s=>{r||(r=!0,a(),t(),s.target.dispatchEvent(new s.constructor(s.type,s)))},a=()=>{n(s=>{for(const l of e)s.removeEventListener(l,i)})};return n(s=>{for(const l of e)s.addEventListener(l,i,{once:!0})}),a};function q5e(e,t){if(G1(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(G1(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const p0=e=>!!e.type.__asyncLoader;function Qm(e){xr(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:i=200,hydrate:a,timeout:s,suspensible:l=!0,onError:c}=e;let d=null,h,p=0;const v=()=>(p++,d=null,g()),g=()=>{let y;return d||(y=d=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),c)return new Promise((k,x)=>{c(S,()=>k(v()),()=>x(S),p+1)});throw S}).then(S=>y!==d&&d?d:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),h=S,S)))};return Ce({name:"AsyncComponentWrapper",__asyncLoader:g,__asyncHydrate(y,S,k){let x=!1;(S.bu||(S.bu=[])).push(()=>x=!0);const w=()=>{x||k()},E=a?()=>{const _=a(w,T=>q5e(y,T));_&&(S.bum||(S.bum=[])).push(_)}:w;h?E():g().then(()=>!S.isUnmounted&&E())},get __asyncResolved(){return h},setup(){const y=Ga;if(WU(y),h)return()=>vP(h,y);const S=E=>{d=null,Zm(E,y,13,!r)};if(l&&y.suspense||Ly)return g().then(E=>()=>vP(E,y)).catch(E=>(S(E),()=>r?$(r,{error:E}):null));const k=le(!1),x=le(),w=le(!!i);return i&&setTimeout(()=>{w.value=!1},i),s!=null&&setTimeout(()=>{if(!k.value&&!x.value){const E=new Error(`Async component timed out after ${s}ms.`);S(E),x.value=E}},s),g().then(()=>{k.value=!0,y.parent&&q_(y.parent.vnode)&&y.parent.update()}).catch(E=>{S(E),x.value=E}),()=>{if(k.value&&h)return vP(h,y);if(x.value&&r)return $(r,{error:x.value});if(n&&!w.value)return $(n)}}})}function vP(e,t){const{ref:n,props:r,children:i,ce:a}=t.vnode,s=$(e,r,i);return s.ref=n,s.ce=a,delete t.vnode.ce,s}const q_=e=>e.type.__isKeepAlive,Y5e={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=bo(),r=n.ctx;if(!r.renderer)return()=>{const w=t.default&&t.default();return w&&w.length===1?w[0]:w};const i=new Map,a=new Set;let s=null;const l=n.suspense,{renderer:{p:c,m:d,um:h,o:{createElement:p}}}=r,v=p("div");r.activate=(w,E,_,T,D)=>{const P=w.component;d(w,E,_,0,l),c(P.vnode,w,E,_,P,l,T,w.slotScopeIds,D),la(()=>{P.isDeactivated=!1,P.a&&fm(P.a);const M=w.props&&w.props.onVnodeMounted;M&&mu(M,P.parent,w)},l)},r.deactivate=w=>{const E=w.component;O8(E.m),O8(E.a),d(w,v,null,1,l),la(()=>{E.da&&fm(E.da);const _=w.props&&w.props.onVnodeUnmounted;_&&mu(_,E.parent,w),E.isDeactivated=!0},l)};function g(w){mP(w),h(w,n,l,!0)}function y(w){i.forEach((E,_)=>{const T=Wj(E.type);T&&!w(T)&&S(_)})}function S(w){const E=i.get(w);E&&(!s||!Cd(E,s))?g(E):s&&mP(s),i.delete(w),a.delete(w)}It(()=>[e.include,e.exclude],([w,E])=>{w&&y(_=>A4(w,_)),E&&y(_=>!A4(E,_))},{flush:"post",deep:!0});let k=null;const x=()=>{k!=null&&(B8(n.subTree.type)?la(()=>{i.set(k,bx(n.subTree))},n.subTree.suspense):i.set(k,bx(n.subTree)))};return dn(x),tl(x),yo(()=>{i.forEach(w=>{const{subTree:E,suspense:_}=n,T=bx(E);if(w.type===T.type&&w.key===T.key){mP(T);const D=T.component.da;D&&la(D,_);return}g(w)})}),()=>{if(k=null,!t.default)return s=null;const w=t.default(),E=w[0];if(w.length>1)return s=null,w;if(!zi(E)||!(E.shapeFlag&4)&&!(E.shapeFlag&128))return s=null,E;let _=bx(E);if(_.type===Ss)return s=null,_;const T=_.type,D=Wj(p0(_)?_.type.__asyncResolved||{}:T),{include:P,exclude:M,max:O}=e;if(P&&(!D||!A4(P,D))||M&&D&&A4(M,D))return _.shapeFlag&=-257,s=_,E;const L=_.key==null?T:_.key,B=i.get(L);return _.el&&(_=El(_),E.shapeFlag&128&&(E.ssContent=_)),k=L,B?(_.el=B.el,_.component=B.component,_.transition&&Wh(_,_.transition),_.shapeFlag|=512,a.delete(L),a.add(L)):(a.add(L),O&&a.size>parseInt(O,10)&&S(a.values().next().value)),_.shapeFlag|=256,s=_,B8(E.type)?E:_}}},X5e=Y5e;function A4(e,t){return Hn(e)?e.some(n=>A4(n,t)):Lr(e)?e.split(",").includes(t):Vde(e)?(e.lastIndex=0,e.test(t)):!1}function GU(e,t){Rfe(e,"a",t)}function KU(e,t){Rfe(e,"da",t)}function Rfe(e,t,n=Ga){const r=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(w5(t,r,n),n){let i=n.parent;for(;i&&i.parent;)q_(i.parent.vnode)&&Z5e(r,t,n,i),i=i.parent}}function Z5e(e,t,n,r){const i=w5(t,e,r,!0);Wr(()=>{f5(r[t],i)},n)}function mP(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function bx(e){return e.shapeFlag&128?e.ssContent:e}function w5(e,t,n=Ga,r=!1){if(n){const i=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...s)=>{zh();const l=Dm(n),c=Zc(t,n,e,s);return l(),Uh(),c});return r?i.unshift(a):i.push(a),a}}const Xh=e=>(t,n=Ga)=>{(!Ly||e==="sp")&&w5(e,(...r)=>t(...r),n)},Mfe=Xh("bm"),dn=Xh("m"),qU=Xh("bu"),tl=Xh("u"),yo=Xh("bum"),Wr=Xh("um"),$fe=Xh("sp"),Ofe=Xh("rtg"),Bfe=Xh("rtc");function Nfe(e,t=Ga){w5("ec",e,t)}const YU="components",J5e="directives";function Ie(e,t){return XU(YU,e,!0,t)||e}const Ffe=Symbol.for("v-ndc");function Ca(e){return Lr(e)?XU(YU,e,!1)||e:e||Ffe}function i3(e){return XU(J5e,e)}function XU(e,t,n=!0,r=!1){const i=qa||Ga;if(i){const a=i.type;if(e===YU){const l=Wj(a,!1);if(l&&(l===t||l===Mo(t)||l===V0(Mo(t))))return a}const s=lne(i[e]||a[e],t)||lne(i.appContext[e],t);return!s&&r?a:s}}function lne(e,t){return e&&(e[t]||e[Mo(t)]||e[V0(Mo(t))])}function un(e,t,n,r){let i;const a=n&&n[r],s=Hn(e);if(s||Lr(e)){const l=s&&gf(e);let c=!1,d=!1;l&&(c=!cc(e),d=Hh(e),e=y5(e)),i=new Array(e.length);for(let h=0,p=e.length;h>>32-Q,B=q<
>>32-Q):(L=q<