├── .dockerignore
├── .github
└── workflows
│ └── publish.yml
├── .gitignore
├── .npmrc
├── Dockerfile
├── README.md
├── api
└── index.js
├── app.js
├── assets
├── 1.png
├── 2.png
├── 3.png
├── 4.png
├── 5.png
├── 6.png
├── 7.png
└── test.png
├── deno.js
├── esbuild.config.js
├── node.js
├── package-lock.json
├── package.json
├── scripts
└── docker
│ └── test-docker.sh
├── src
├── config.js
├── example.js
├── providers
│ ├── index.js
│ ├── netease
│ │ ├── artist_songs.js
│ │ ├── config.js
│ │ ├── crypto.js
│ │ ├── index.js
│ │ ├── lyric.js
│ │ ├── playlist.js
│ │ ├── search.js
│ │ ├── song.js
│ │ └── util.js
│ ├── spotify
│ │ ├── config.js
│ │ └── index.js
│ ├── tencent
│ │ ├── index.js
│ │ ├── lyric.js
│ │ ├── playlist.js
│ │ ├── song.js
│ │ └── util.js
│ └── ytmusic
│ │ ├── config.js
│ │ └── index.js
├── service
│ └── api.js
├── template.js
└── util.js
├── test
└── providers.test.js
└── vercel.json
/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .vscode
4 | .vercel
5 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish
2 | on:
3 | push:
4 | branches:
5 | - "main"
6 | tags:
7 | - "v*"
8 |
9 | workflow_dispatch:
10 | inputs:
11 | docker:
12 | description: "Deploy to DockerHub"
13 | required: true
14 | type: boolean
15 | default: false
16 | deno:
17 | description: "Deploy to deno"
18 | required: true
19 | type: boolean
20 | default: false
21 |
22 | jobs:
23 | unit-test:
24 | runs-on: ubuntu-latest
25 |
26 | strategy:
27 | matrix:
28 | node-version: ['18.x', '19.x', '20.x', '21.x']
29 |
30 | steps:
31 | - uses: actions/checkout@v3
32 | - uses: actions/setup-node@v3
33 | with:
34 | node-version: ${{ matrix.node-version }}
35 |
36 | - run: npm i
37 | - run: npm run build:all
38 | - run: npm test
39 |
40 | test-docker:
41 | runs-on: ubuntu-latest
42 | needs: [unit-test]
43 |
44 | steps:
45 | - uses: actions/checkout@v3
46 |
47 | - name: Set up QEMU
48 | uses: docker/setup-qemu-action@v2
49 |
50 | - name: Set up Docker Buildx
51 | uses: docker/setup-buildx-action@v2
52 |
53 | - name: Build docker image
54 | uses: docker/build-push-action@v3
55 | with:
56 | load: true
57 | push: false
58 | tags: meting-api:latest
59 | context: .
60 |
61 | - name: Test Docker image
62 | run: bash scripts/docker/test-docker.sh
63 | env:
64 | TAG: latest
65 |
66 | - name: Export Docker image
67 | run: docker save meting-api:latest | gzip -1cf > meting.tar.gz
68 |
69 | - name: Upload Docker image
70 | uses: actions/upload-artifact@v4
71 | with:
72 | name: meting.tar.gz
73 | path: meting.tar.gz
74 | retention-days: 1
75 |
76 | upload-art:
77 | needs: [test-docker]
78 | runs-on: ubuntu-latest
79 |
80 | steps:
81 | - uses: actions/checkout@v3
82 | - uses: actions/setup-node@v3
83 | with:
84 | node-version: 18
85 |
86 | - run: npm i
87 | - run: npm run build:all
88 |
89 | - uses: actions/upload-artifact@v4
90 | with:
91 | name: cloudflare-workers.js
92 | path: dist/cloudflare-workers.js
93 | retention-days: 1
94 | - uses: actions/upload-artifact@v4
95 | with:
96 | name: deno.js
97 | path: dist/deno.js
98 | retention-days: 1
99 |
100 | # deploy-to-deno:
101 | # needs: [upload-art]
102 | # if: ${{ inputs.deno || github.event_name == 'push' }}
103 | # runs-on: ubuntu-latest
104 | # permissions:
105 | # id-token: write
106 | # contents: read
107 |
108 | # steps:
109 | # - uses: actions/download-artifact@v3
110 | # with:
111 | # name: deno.js
112 | # - name: Upload to Deno Deploy
113 | # uses: denoland/deployctl@v1
114 | # with:
115 | # project: meting
116 | # entrypoint: deno.js
117 |
118 | release-docker:
119 | needs: [test-docker]
120 | if: ${{ inputs.docker || github.event_name == 'push' }}
121 | runs-on: ubuntu-latest
122 |
123 | steps:
124 | - uses: actions/checkout@v3
125 |
126 | - name: Login to DockerHub
127 | uses: docker/login-action@v2
128 | with:
129 | username: ${{ secrets.DOCKERHUB_USERNAME }}
130 | password: ${{ secrets.DOCKERHUB_TOKEN }}
131 |
132 | - name: Docker meta
133 | id: meta
134 | uses: docker/metadata-action@v4
135 | with:
136 | images: ${{ secrets.DOCKERHUB_USERNAME }}/meting-api
137 |
138 | - name: Push docker image
139 | uses: docker/build-push-action@v3
140 | with:
141 | push: true
142 | tags: |
143 | ${{ secrets.DOCKERHUB_USERNAME }}/meting-api:latest
144 | ${{ steps.meta.outputs.tags }}
145 | labels: ${{ steps.meta.outputs.labels }}
146 | context: .
147 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .vscode
4 | .vercel
5 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:23-alpine3.20
2 |
3 | WORKDIR /app
4 | COPY . /app
5 |
6 | ARG UID
7 | ARG GID
8 | ARG PORT
9 |
10 | ENV UID=${UID:-1010}
11 | ENV GID=${GID:-1010}
12 | ENV PORT=${PORT:-3000}
13 |
14 | RUN addgroup -g ${GID} --system meting \
15 | && adduser -G meting --system -D -s /bin/sh -u ${UID} meting
16 |
17 | RUN npm i
18 |
19 | RUN chown -R meting:meting /app
20 | USER meting
21 |
22 | EXPOSE ${PORT}
23 |
24 | CMD ["node", "/app/node.js"]
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Meting-API
2 |
3 | https://meting-api-omega.vercel.app/test
4 |
5 | ## Feature
6 |
7 | - js实现
8 | - 插件系统,易于编写新接口及音源
9 |
10 | ## 进度
11 |
12 | | | server参数名称 | 图片 | 歌词 | url | 单曲/song | 歌单/playlist | 歌手/artist | 搜索/search |
13 | | ------------- | -------------- | ---- | ---- | --- | --------- | ------------- | ----------- |--------- |
14 | | 网易云 | netease | √ | √ | √ | √ | √ | √ |√ |
15 | | qq音乐 | tencent | √ | √ | √ | √ | √ | × |× |
16 |
17 | ## 地区限制
18 |
19 | ### 部署在国外
20 |
21 | | 客户端/浏览器访问地区 | 国内 | 国外 |
22 | | --------------------- | ---- | ---- |
23 | | 网易云 | √ | √ |
24 | | qq音乐 | √¹ | × |
25 |
26 |
27 | ### 部署在国内
28 |
29 | | 客户端/浏览器访问地区 | 国内 | 国外 |
30 | | --------------------- | ---- | ---- |
31 | | 网易云 | √ | √ |
32 | | qq音乐 | √ | × |
33 |
34 |
35 | ¹使用jsonp,**需要替换前端插件**, https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js => https://cdn.jsdelivr.net/npm/@xizeyoupan/meting@latest/dist/Meting.min.js , or
36 | https://unpkg.com/meting@2.0.1/dist/Meting.min.js => https://unpkg.com/@xizeyoupan/meting@latest/dist/Meting.min.js
37 |
38 | More info https://github.com/xizeyoupan/MetingJS
39 |
40 | ## 参数配置
41 | 以下参数均由环境变量配置
42 |
43 | - OVERSEAS
44 | 用于判断是否部署于国外。设为1会启用qq音乐的jsonp返回,同时需要替换[前端插件](https://github.com/xizeyoupan/MetingJS),能实现国内访问国外api服务解析qq音乐。部署在国内不用设置这个选项。当部署到vercel上时,此选项自动设为1。
45 | - PORT
46 | api监听端口,也是docker需要映射的端口。默认3000
47 | - UID
48 | 用于docker,默认1010
49 | - GID
50 | 用于docker,默认1010
51 |
52 | ## 部署
53 |
54 | 部署 Meting-API 需要基本的计算机编程常识,如果您在部署过程中遇到无法解决的问题请到 issues 向我们提问,我们会尽快给您答复。
55 |
56 | 如果部署成功,在你的域名后拼接上`/test`,理论上出现类似下图数据:
57 |
58 | 
59 |
60 | ### 手动部署
61 |
62 | 需要克隆项目到本地,node版本>=18。
63 |
64 | ```
65 | npm i
66 | ```
67 |
68 | #### Node
69 |
70 | `node node.js`
71 |
72 | Deprecated
75 |
76 | #### Deno
77 |
78 | `deno run --allow-net --allow-env dist/deno.js`
79 |
80 | 或者直接下载action中的文件运行。
81 |
82 |
103 |
104 | 一直下一步即可。
105 |
106 |
Deprecated
109 |
110 | ### Deno Deploy
111 |
112 | 类似Cloudflare Workers,但提供的域名未被阻断,使用Deno为runtime。
113 |
114 | fork本项目后新建一个[project](https://dash.deno.com/projects),首先在设置中加一个Environment Variable,名称是OVERSEAS,值为1。接着link到你自己的项目,部署方式选action,Deno Deploy 的 project 的 name 需要与你自己的yml中设置的吻合。
115 |
116 | ```yml
117 | uses: denoland/deployctl@v1
118 | with:
119 | project: meting #这里要改成你的Deno Deploy的project的name
120 | entrypoint: deno.js
121 | ```
122 |
123 | 接着在actions/publish/run workflow中勾选Deno即可。
124 |
125 |
25 |
26 |
27 |
28 |
29 |
30 |
当前版本:1.1.2
33 |当前运行环境:${get_runtime()}
34 |当前时间:${new Date()}
35 |内部端口:${config.PORT}
36 |部署在大陆:${config.OVERSEAS ? '否' : '是'}
37 |当前地址:${c.req.url}
38 |实际地址:${get_url(c)}
39 | 40 |api地址:${get_url(c) + 'api'}
41 | 42 | 43 | ` 44 | ) 45 | }) 46 | 47 | export default app 48 | -------------------------------------------------------------------------------- /assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/1.png -------------------------------------------------------------------------------- /assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/2.png -------------------------------------------------------------------------------- /assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/3.png -------------------------------------------------------------------------------- /assets/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/4.png -------------------------------------------------------------------------------- /assets/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/5.png -------------------------------------------------------------------------------- /assets/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/6.png -------------------------------------------------------------------------------- /assets/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/7.png -------------------------------------------------------------------------------- /assets/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsyy/Meting-API/66801f77bf0cbec15a2b8d7024a37c0ddab02b56/assets/test.png -------------------------------------------------------------------------------- /deno.js: -------------------------------------------------------------------------------- 1 | import config from './src/config.js' 2 | import app from './app.js' 3 | import { serve } from 'https://deno.land/std/http/server.ts' 4 | 5 | 6 | serve(app.fetch, { port: config.PORT }) 7 | -------------------------------------------------------------------------------- /esbuild.config.js: -------------------------------------------------------------------------------- 1 | import esbuild from 'esbuild'; 2 | import resolve from 'esbuild-plugin-resolve'; 3 | import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill' 4 | import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill' 5 | import textReplace from 'esbuild-plugin-text-replace' 6 | 7 | await esbuild.build({ 8 | entryPoints: ['./app.js'], 9 | bundle: true, 10 | format: 'esm', 11 | outfile: './dist/cloudflare-workers-min.js', 12 | external: [], 13 | plugins: [ 14 | resolve({ 15 | crypto: 'crypto-browserify' 16 | }), 17 | NodeGlobalsPolyfillPlugin({ 18 | process: true, 19 | buffer: true, 20 | }), 21 | NodeModulesPolyfillPlugin(), 22 | ], 23 | minify: true, 24 | }); 25 | 26 | await esbuild.build({ 27 | entryPoints: ['./app.js'], 28 | bundle: true, 29 | format: 'esm', 30 | outfile: './dist/cloudflare-workers.js', 31 | external: [], 32 | plugins: [ 33 | resolve({ 34 | crypto: 'crypto-browserify' 35 | }), 36 | NodeGlobalsPolyfillPlugin({ 37 | process: true, 38 | buffer: true, 39 | }), 40 | NodeModulesPolyfillPlugin(), 41 | ], 42 | }); 43 | 44 | await esbuild.build({ 45 | entryPoints: ['./deno.js'], 46 | bundle: true, 47 | format: 'esm', 48 | outfile: './dist/deno.js', 49 | external: [], 50 | plugins: [ 51 | textReplace({ 52 | include: new RegExp("src/providers/netease/crypto\.js"), 53 | pattern: [ 54 | ["import crypto from 'crypto-browserify'", "import crypto from 'https://esm.sh/crypto-browserify@3.12.0'"], 55 | ["import { Buffer } from 'buffer/index.js'","import { Buffer } from 'https://esm.sh/buffer@6.0.3'"] 56 | ] 57 | }), 58 | resolve({ 59 | crypto: 'crypto-browserify' 60 | }), 61 | NodeGlobalsPolyfillPlugin({ 62 | process: true, 63 | buffer: true, 64 | }), 65 | NodeModulesPolyfillPlugin(), 66 | 67 | ], 68 | // minify: true, 69 | }); 70 | -------------------------------------------------------------------------------- /node.js: -------------------------------------------------------------------------------- 1 | import { serve } from '@hono/node-server' 2 | 3 | import app from './app.js' 4 | import config from './src/config.js' 5 | 6 | serve({ 7 | fetch: app.fetch, 8 | port: config.PORT 9 | }) 10 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "meting-backend-js", 3 | "version": "1.1.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "meting-backend-js", 9 | "version": "1.1.2", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3", 13 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2", 14 | "@hono/node-server": "^1.8.2", 15 | "buffer": "^6.0.3", 16 | "crypto-browserify": "^3.12.0", 17 | "esbuild": "0.17.5", 18 | "hono": "^4.1.0", 19 | "nanoid": "^4.0.0" 20 | }, 21 | "devDependencies": { 22 | "esbuild-plugin-resolve": "^1.0.3", 23 | "esbuild-plugin-text-replace": "^1.2.0", 24 | "vitest": "^0.29.2" 25 | }, 26 | "engines": { 27 | "node": ">=18.0.0" 28 | } 29 | }, 30 | "node_modules/@esbuild-plugins/node-globals-polyfill": { 31 | "version": "0.2.3", 32 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", 33 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", 34 | "peerDependencies": { 35 | "esbuild": "*" 36 | } 37 | }, 38 | "node_modules/@esbuild-plugins/node-modules-polyfill": { 39 | "version": "0.2.2", 40 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", 41 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", 42 | "dependencies": { 43 | "escape-string-regexp": "^4.0.0", 44 | "rollup-plugin-node-polyfills": "^0.2.1" 45 | }, 46 | "peerDependencies": { 47 | "esbuild": "*" 48 | } 49 | }, 50 | "node_modules/@esbuild/android-arm": { 51 | "version": "0.17.5", 52 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.5.tgz", 53 | "integrity": "sha512-crmPUzgCmF+qZXfl1YkiFoUta2XAfixR1tEnr/gXIixE+WL8Z0BGqfydP5oox0EUOgQMMRgtATtakyAcClQVqQ==", 54 | "cpu": [ 55 | "arm" 56 | ], 57 | "optional": true, 58 | "os": [ 59 | "android" 60 | ], 61 | "engines": { 62 | "node": ">=12" 63 | } 64 | }, 65 | "node_modules/@esbuild/android-arm64": { 66 | "version": "0.17.5", 67 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.5.tgz", 68 | "integrity": "sha512-KHWkDqYAMmKZjY4RAN1PR96q6UOtfkWlTS8uEwWxdLtkRt/0F/csUhXIrVfaSIFxnscIBMPynGfhsMwQDRIBQw==", 69 | "cpu": [ 70 | "arm64" 71 | ], 72 | "optional": true, 73 | "os": [ 74 | "android" 75 | ], 76 | "engines": { 77 | "node": ">=12" 78 | } 79 | }, 80 | "node_modules/@esbuild/android-x64": { 81 | "version": "0.17.5", 82 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.5.tgz", 83 | "integrity": "sha512-8fI/AnIdmWz/+1iza2WrCw8kwXK9wZp/yZY/iS8ioC+U37yJCeppi9EHY05ewJKN64ASoBIseufZROtcFnX5GA==", 84 | "cpu": [ 85 | "x64" 86 | ], 87 | "optional": true, 88 | "os": [ 89 | "android" 90 | ], 91 | "engines": { 92 | "node": ">=12" 93 | } 94 | }, 95 | "node_modules/@esbuild/darwin-arm64": { 96 | "version": "0.17.5", 97 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.5.tgz", 98 | "integrity": "sha512-EAvaoyIySV6Iif3NQCglUNpnMfHSUgC5ugt2efl3+QDntucJe5spn0udNZjTgNi6tKVqSceOw9tQ32liNZc1Xw==", 99 | "cpu": [ 100 | "arm64" 101 | ], 102 | "optional": true, 103 | "os": [ 104 | "darwin" 105 | ], 106 | "engines": { 107 | "node": ">=12" 108 | } 109 | }, 110 | "node_modules/@esbuild/darwin-x64": { 111 | "version": "0.17.5", 112 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.5.tgz", 113 | "integrity": "sha512-ha7QCJh1fuSwwCgoegfdaljowwWozwTDjBgjD3++WAy/qwee5uUi1gvOg2WENJC6EUyHBOkcd3YmLDYSZ2TPPA==", 114 | "cpu": [ 115 | "x64" 116 | ], 117 | "optional": true, 118 | "os": [ 119 | "darwin" 120 | ], 121 | "engines": { 122 | "node": ">=12" 123 | } 124 | }, 125 | "node_modules/@esbuild/freebsd-arm64": { 126 | "version": "0.17.5", 127 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.5.tgz", 128 | "integrity": "sha512-VbdXJkn2aI2pQ/wxNEjEcnEDwPpxt3CWWMFYmO7CcdFBoOsABRy2W8F3kjbF9F/pecEUDcI3b5i2w+By4VQFPg==", 129 | "cpu": [ 130 | "arm64" 131 | ], 132 | "optional": true, 133 | "os": [ 134 | "freebsd" 135 | ], 136 | "engines": { 137 | "node": ">=12" 138 | } 139 | }, 140 | "node_modules/@esbuild/freebsd-x64": { 141 | "version": "0.17.5", 142 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.5.tgz", 143 | "integrity": "sha512-olgGYND1/XnnWxwhjtY3/ryjOG/M4WfcA6XH8dBTH1cxMeBemMODXSFhkw71Kf4TeZFFTN25YOomaNh0vq2iXg==", 144 | "cpu": [ 145 | "x64" 146 | ], 147 | "optional": true, 148 | "os": [ 149 | "freebsd" 150 | ], 151 | "engines": { 152 | "node": ">=12" 153 | } 154 | }, 155 | "node_modules/@esbuild/linux-arm": { 156 | "version": "0.17.5", 157 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.5.tgz", 158 | "integrity": "sha512-YBdCyQwA3OQupi6W2/WO4FnI+NWFWe79cZEtlbqSESOHEg7a73htBIRiE6uHPQe7Yp5E4aALv+JxkRLGEUL7tw==", 159 | "cpu": [ 160 | "arm" 161 | ], 162 | "optional": true, 163 | "os": [ 164 | "linux" 165 | ], 166 | "engines": { 167 | "node": ">=12" 168 | } 169 | }, 170 | "node_modules/@esbuild/linux-arm64": { 171 | "version": "0.17.5", 172 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.5.tgz", 173 | "integrity": "sha512-8a0bqSwu3OlLCfu2FBbDNgQyBYdPJh1B9PvNX7jMaKGC9/KopgHs37t+pQqeMLzcyRqG6z55IGNQAMSlCpBuqg==", 174 | "cpu": [ 175 | "arm64" 176 | ], 177 | "optional": true, 178 | "os": [ 179 | "linux" 180 | ], 181 | "engines": { 182 | "node": ">=12" 183 | } 184 | }, 185 | "node_modules/@esbuild/linux-ia32": { 186 | "version": "0.17.5", 187 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.5.tgz", 188 | "integrity": "sha512-uCwm1r/+NdP7vndctgq3PoZrnmhmnecWAr114GWMRwg2QMFFX+kIWnp7IO220/JLgnXK/jP7VKAFBGmeOYBQYQ==", 189 | "cpu": [ 190 | "ia32" 191 | ], 192 | "optional": true, 193 | "os": [ 194 | "linux" 195 | ], 196 | "engines": { 197 | "node": ">=12" 198 | } 199 | }, 200 | "node_modules/@esbuild/linux-loong64": { 201 | "version": "0.17.5", 202 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.5.tgz", 203 | "integrity": "sha512-3YxhSBl5Sb6TtBjJu+HP93poBruFzgXmf3PVfIe4xOXMj1XpxboYZyw3W8BhoX/uwxzZz4K1I99jTE/5cgDT1g==", 204 | "cpu": [ 205 | "loong64" 206 | ], 207 | "optional": true, 208 | "os": [ 209 | "linux" 210 | ], 211 | "engines": { 212 | "node": ">=12" 213 | } 214 | }, 215 | "node_modules/@esbuild/linux-mips64el": { 216 | "version": "0.17.5", 217 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.5.tgz", 218 | "integrity": "sha512-Hy5Z0YVWyYHdtQ5mfmfp8LdhVwGbwVuq8mHzLqrG16BaMgEmit2xKO+iDakHs+OetEx0EN/2mUzDdfdktI+Nmg==", 219 | "cpu": [ 220 | "mips64el" 221 | ], 222 | "optional": true, 223 | "os": [ 224 | "linux" 225 | ], 226 | "engines": { 227 | "node": ">=12" 228 | } 229 | }, 230 | "node_modules/@esbuild/linux-ppc64": { 231 | "version": "0.17.5", 232 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.5.tgz", 233 | "integrity": "sha512-5dbQvBLbU/Y3Q4ABc9gi23hww1mQcM7KZ9KBqabB7qhJswYMf8WrDDOSw3gdf3p+ffmijMd28mfVMvFucuECyg==", 234 | "cpu": [ 235 | "ppc64" 236 | ], 237 | "optional": true, 238 | "os": [ 239 | "linux" 240 | ], 241 | "engines": { 242 | "node": ">=12" 243 | } 244 | }, 245 | "node_modules/@esbuild/linux-riscv64": { 246 | "version": "0.17.5", 247 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.5.tgz", 248 | "integrity": "sha512-fp/KUB/ZPzEWGTEUgz9wIAKCqu7CjH1GqXUO2WJdik1UNBQ7Xzw7myIajpxztE4Csb9504ERiFMxZg5KZ6HlZQ==", 249 | "cpu": [ 250 | "riscv64" 251 | ], 252 | "optional": true, 253 | "os": [ 254 | "linux" 255 | ], 256 | "engines": { 257 | "node": ">=12" 258 | } 259 | }, 260 | "node_modules/@esbuild/linux-s390x": { 261 | "version": "0.17.5", 262 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.5.tgz", 263 | "integrity": "sha512-kRV3yw19YDqHTp8SfHXfObUFXlaiiw4o2lvT1XjsPZ++22GqZwSsYWJLjMi1Sl7j9qDlDUduWDze/nQx0d6Lzw==", 264 | "cpu": [ 265 | "s390x" 266 | ], 267 | "optional": true, 268 | "os": [ 269 | "linux" 270 | ], 271 | "engines": { 272 | "node": ">=12" 273 | } 274 | }, 275 | "node_modules/@esbuild/linux-x64": { 276 | "version": "0.17.5", 277 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.5.tgz", 278 | "integrity": "sha512-vnxuhh9e4pbtABNLbT2ANW4uwQ/zvcHRCm1JxaYkzSehugoFd5iXyC4ci1nhXU13mxEwCnrnTIiiSGwa/uAF1g==", 279 | "cpu": [ 280 | "x64" 281 | ], 282 | "optional": true, 283 | "os": [ 284 | "linux" 285 | ], 286 | "engines": { 287 | "node": ">=12" 288 | } 289 | }, 290 | "node_modules/@esbuild/netbsd-x64": { 291 | "version": "0.17.5", 292 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.5.tgz", 293 | "integrity": "sha512-cigBpdiSx/vPy7doUyImsQQBnBjV5f1M99ZUlaJckDAJjgXWl6y9W17FIfJTy8TxosEF6MXq+fpLsitMGts2nA==", 294 | "cpu": [ 295 | "x64" 296 | ], 297 | "optional": true, 298 | "os": [ 299 | "netbsd" 300 | ], 301 | "engines": { 302 | "node": ">=12" 303 | } 304 | }, 305 | "node_modules/@esbuild/openbsd-x64": { 306 | "version": "0.17.5", 307 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.5.tgz", 308 | "integrity": "sha512-VdqRqPVIjjZfkf40LrqOaVuhw9EQiAZ/GNCSM2UplDkaIzYVsSnycxcFfAnHdWI8Gyt6dO15KHikbpxwx+xHbw==", 309 | "cpu": [ 310 | "x64" 311 | ], 312 | "optional": true, 313 | "os": [ 314 | "openbsd" 315 | ], 316 | "engines": { 317 | "node": ">=12" 318 | } 319 | }, 320 | "node_modules/@esbuild/sunos-x64": { 321 | "version": "0.17.5", 322 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.5.tgz", 323 | "integrity": "sha512-ItxPaJ3MBLtI4nK+mALLEoUs6amxsx+J1ibnfcYMkqaCqHST1AkF4aENpBehty3czqw64r/XqL+W9WqU6kc2Qw==", 324 | "cpu": [ 325 | "x64" 326 | ], 327 | "optional": true, 328 | "os": [ 329 | "sunos" 330 | ], 331 | "engines": { 332 | "node": ">=12" 333 | } 334 | }, 335 | "node_modules/@esbuild/win32-arm64": { 336 | "version": "0.17.5", 337 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.5.tgz", 338 | "integrity": "sha512-4u2Q6qsJTYNFdS9zHoAi80spzf78C16m2wla4eJPh4kSbRv+BpXIfl6TmBSWupD8e47B1NrTfrOlEuco7mYQtg==", 339 | "cpu": [ 340 | "arm64" 341 | ], 342 | "optional": true, 343 | "os": [ 344 | "win32" 345 | ], 346 | "engines": { 347 | "node": ">=12" 348 | } 349 | }, 350 | "node_modules/@esbuild/win32-ia32": { 351 | "version": "0.17.5", 352 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.5.tgz", 353 | "integrity": "sha512-KYlm+Xu9TXsfTWAcocLuISRtqxKp/Y9ZBVg6CEEj0O5J9mn7YvBKzAszo2j1ndyzUPk+op+Tie2PJeN+BnXGqQ==", 354 | "cpu": [ 355 | "ia32" 356 | ], 357 | "optional": true, 358 | "os": [ 359 | "win32" 360 | ], 361 | "engines": { 362 | "node": ">=12" 363 | } 364 | }, 365 | "node_modules/@esbuild/win32-x64": { 366 | "version": "0.17.5", 367 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.5.tgz", 368 | "integrity": "sha512-XgA9qWRqby7xdYXuF6KALsn37QGBMHsdhmnpjfZtYxKxbTOwfnDM6MYi2WuUku5poNaX2n9XGVr20zgT/2QwCw==", 369 | "cpu": [ 370 | "x64" 371 | ], 372 | "optional": true, 373 | "os": [ 374 | "win32" 375 | ], 376 | "engines": { 377 | "node": ">=12" 378 | } 379 | }, 380 | "node_modules/@hono/node-server": { 381 | "version": "1.8.2", 382 | "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.8.2.tgz", 383 | "integrity": "sha512-h8l2TBLCPHZBUrrkosZ6L5CpBLj6zdESyF4B+zngiCDF7aZFQJ0alVbLx7jn8PCVi9EyoFf8a4hOZFi1tD95EA==", 384 | "engines": { 385 | "node": ">=18.14.1" 386 | } 387 | }, 388 | "node_modules/@types/chai": { 389 | "version": "4.3.4", 390 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", 391 | "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", 392 | "dev": true 393 | }, 394 | "node_modules/@types/chai-subset": { 395 | "version": "1.3.3", 396 | "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", 397 | "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", 398 | "dev": true, 399 | "dependencies": { 400 | "@types/chai": "*" 401 | } 402 | }, 403 | "node_modules/@types/node": { 404 | "version": "18.14.5", 405 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.5.tgz", 406 | "integrity": "sha512-CRT4tMK/DHYhw1fcCEBwME9CSaZNclxfzVMe7GsO6ULSwsttbj70wSiX6rZdIjGblu93sTJxLdhNIT85KKI7Qw==", 407 | "dev": true 408 | }, 409 | "node_modules/@vitest/expect": { 410 | "version": "0.29.2", 411 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.2.tgz", 412 | "integrity": "sha512-wjrdHB2ANTch3XKRhjWZN0UueFocH0cQbi2tR5Jtq60Nb3YOSmakjdAvUa2JFBu/o8Vjhj5cYbcMXkZxn1NzmA==", 413 | "dev": true, 414 | "dependencies": { 415 | "@vitest/spy": "0.29.2", 416 | "@vitest/utils": "0.29.2", 417 | "chai": "^4.3.7" 418 | } 419 | }, 420 | "node_modules/@vitest/runner": { 421 | "version": "0.29.2", 422 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.2.tgz", 423 | "integrity": "sha512-A1P65f5+6ru36AyHWORhuQBJrOOcmDuhzl5RsaMNFe2jEkoj0faEszQS4CtPU/LxUYVIazlUtZTY0OEZmyZBnA==", 424 | "dev": true, 425 | "dependencies": { 426 | "@vitest/utils": "0.29.2", 427 | "p-limit": "^4.0.0", 428 | "pathe": "^1.1.0" 429 | } 430 | }, 431 | "node_modules/@vitest/runner/node_modules/p-limit": { 432 | "version": "4.0.0", 433 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", 434 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", 435 | "dev": true, 436 | "dependencies": { 437 | "yocto-queue": "^1.0.0" 438 | }, 439 | "engines": { 440 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 441 | }, 442 | "funding": { 443 | "url": "https://github.com/sponsors/sindresorhus" 444 | } 445 | }, 446 | "node_modules/@vitest/runner/node_modules/yocto-queue": { 447 | "version": "1.0.0", 448 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 449 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 450 | "dev": true, 451 | "engines": { 452 | "node": ">=12.20" 453 | }, 454 | "funding": { 455 | "url": "https://github.com/sponsors/sindresorhus" 456 | } 457 | }, 458 | "node_modules/@vitest/spy": { 459 | "version": "0.29.2", 460 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.2.tgz", 461 | "integrity": "sha512-Hc44ft5kaAytlGL2PyFwdAsufjbdOvHklwjNy/gy/saRbg9Kfkxfh+PklLm1H2Ib/p586RkQeNFKYuJInUssyw==", 462 | "dev": true, 463 | "dependencies": { 464 | "tinyspy": "^1.0.2" 465 | } 466 | }, 467 | "node_modules/@vitest/utils": { 468 | "version": "0.29.2", 469 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.2.tgz", 470 | "integrity": "sha512-F14/Uc+vCdclStS2KEoXJlOLAEyqRhnw0gM27iXw9bMTcyKRPJrQ+rlC6XZ125GIPvvKYMPpVxNhiou6PsEeYQ==", 471 | "dev": true, 472 | "dependencies": { 473 | "cli-truncate": "^3.1.0", 474 | "diff": "^5.1.0", 475 | "loupe": "^2.3.6", 476 | "picocolors": "^1.0.0", 477 | "pretty-format": "^27.5.1" 478 | } 479 | }, 480 | "node_modules/@vitest/utils/node_modules/ansi-styles": { 481 | "version": "5.2.0", 482 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 483 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 484 | "dev": true, 485 | "engines": { 486 | "node": ">=10" 487 | }, 488 | "funding": { 489 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 490 | } 491 | }, 492 | "node_modules/@vitest/utils/node_modules/pretty-format": { 493 | "version": "27.5.1", 494 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", 495 | "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", 496 | "dev": true, 497 | "dependencies": { 498 | "ansi-regex": "^5.0.1", 499 | "ansi-styles": "^5.0.0", 500 | "react-is": "^17.0.1" 501 | }, 502 | "engines": { 503 | "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" 504 | } 505 | }, 506 | "node_modules/@vitest/utils/node_modules/react-is": { 507 | "version": "17.0.2", 508 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 509 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 510 | "dev": true 511 | }, 512 | "node_modules/acorn": { 513 | "version": "8.8.2", 514 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 515 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 516 | "dev": true, 517 | "bin": { 518 | "acorn": "bin/acorn" 519 | }, 520 | "engines": { 521 | "node": ">=0.4.0" 522 | } 523 | }, 524 | "node_modules/acorn-walk": { 525 | "version": "8.2.0", 526 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 527 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 528 | "dev": true, 529 | "engines": { 530 | "node": ">=0.4.0" 531 | } 532 | }, 533 | "node_modules/ansi-regex": { 534 | "version": "5.0.1", 535 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 536 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 537 | "dev": true, 538 | "engines": { 539 | "node": ">=8" 540 | } 541 | }, 542 | "node_modules/asn1.js": { 543 | "version": "5.4.1", 544 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", 545 | "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", 546 | "dependencies": { 547 | "bn.js": "^4.0.0", 548 | "inherits": "^2.0.1", 549 | "minimalistic-assert": "^1.0.0", 550 | "safer-buffer": "^2.1.0" 551 | } 552 | }, 553 | "node_modules/asn1.js/node_modules/bn.js": { 554 | "version": "4.12.0", 555 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 556 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 557 | }, 558 | "node_modules/assertion-error": { 559 | "version": "1.1.0", 560 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 561 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 562 | "dev": true, 563 | "engines": { 564 | "node": "*" 565 | } 566 | }, 567 | "node_modules/base64-js": { 568 | "version": "1.5.1", 569 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 570 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 571 | "funding": [ 572 | { 573 | "type": "github", 574 | "url": "https://github.com/sponsors/feross" 575 | }, 576 | { 577 | "type": "patreon", 578 | "url": "https://www.patreon.com/feross" 579 | }, 580 | { 581 | "type": "consulting", 582 | "url": "https://feross.org/support" 583 | } 584 | ] 585 | }, 586 | "node_modules/bn.js": { 587 | "version": "5.2.1", 588 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", 589 | "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" 590 | }, 591 | "node_modules/brorand": { 592 | "version": "1.1.0", 593 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 594 | "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" 595 | }, 596 | "node_modules/browserify-aes": { 597 | "version": "1.2.0", 598 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 599 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 600 | "dependencies": { 601 | "buffer-xor": "^1.0.3", 602 | "cipher-base": "^1.0.0", 603 | "create-hash": "^1.1.0", 604 | "evp_bytestokey": "^1.0.3", 605 | "inherits": "^2.0.1", 606 | "safe-buffer": "^5.0.1" 607 | } 608 | }, 609 | "node_modules/browserify-cipher": { 610 | "version": "1.0.1", 611 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 612 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 613 | "dependencies": { 614 | "browserify-aes": "^1.0.4", 615 | "browserify-des": "^1.0.0", 616 | "evp_bytestokey": "^1.0.0" 617 | } 618 | }, 619 | "node_modules/browserify-des": { 620 | "version": "1.0.2", 621 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 622 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 623 | "dependencies": { 624 | "cipher-base": "^1.0.1", 625 | "des.js": "^1.0.0", 626 | "inherits": "^2.0.1", 627 | "safe-buffer": "^5.1.2" 628 | } 629 | }, 630 | "node_modules/browserify-rsa": { 631 | "version": "4.1.0", 632 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", 633 | "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", 634 | "dependencies": { 635 | "bn.js": "^5.0.0", 636 | "randombytes": "^2.0.1" 637 | } 638 | }, 639 | "node_modules/browserify-sign": { 640 | "version": "4.2.1", 641 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", 642 | "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", 643 | "dependencies": { 644 | "bn.js": "^5.1.1", 645 | "browserify-rsa": "^4.0.1", 646 | "create-hash": "^1.2.0", 647 | "create-hmac": "^1.1.7", 648 | "elliptic": "^6.5.3", 649 | "inherits": "^2.0.4", 650 | "parse-asn1": "^5.1.5", 651 | "readable-stream": "^3.6.0", 652 | "safe-buffer": "^5.2.0" 653 | } 654 | }, 655 | "node_modules/buffer": { 656 | "version": "6.0.3", 657 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 658 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 659 | "funding": [ 660 | { 661 | "type": "github", 662 | "url": "https://github.com/sponsors/feross" 663 | }, 664 | { 665 | "type": "patreon", 666 | "url": "https://www.patreon.com/feross" 667 | }, 668 | { 669 | "type": "consulting", 670 | "url": "https://feross.org/support" 671 | } 672 | ], 673 | "dependencies": { 674 | "base64-js": "^1.3.1", 675 | "ieee754": "^1.2.1" 676 | } 677 | }, 678 | "node_modules/buffer-xor": { 679 | "version": "1.0.3", 680 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 681 | "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" 682 | }, 683 | "node_modules/cac": { 684 | "version": "6.7.14", 685 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 686 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 687 | "dev": true, 688 | "engines": { 689 | "node": ">=8" 690 | } 691 | }, 692 | "node_modules/chai": { 693 | "version": "4.3.7", 694 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", 695 | "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", 696 | "dev": true, 697 | "dependencies": { 698 | "assertion-error": "^1.1.0", 699 | "check-error": "^1.0.2", 700 | "deep-eql": "^4.1.2", 701 | "get-func-name": "^2.0.0", 702 | "loupe": "^2.3.1", 703 | "pathval": "^1.1.1", 704 | "type-detect": "^4.0.5" 705 | }, 706 | "engines": { 707 | "node": ">=4" 708 | } 709 | }, 710 | "node_modules/check-error": { 711 | "version": "1.0.2", 712 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 713 | "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", 714 | "dev": true, 715 | "engines": { 716 | "node": "*" 717 | } 718 | }, 719 | "node_modules/cipher-base": { 720 | "version": "1.0.4", 721 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 722 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 723 | "dependencies": { 724 | "inherits": "^2.0.1", 725 | "safe-buffer": "^5.0.1" 726 | } 727 | }, 728 | "node_modules/cli-truncate": { 729 | "version": "3.1.0", 730 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", 731 | "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", 732 | "dev": true, 733 | "dependencies": { 734 | "slice-ansi": "^5.0.0", 735 | "string-width": "^5.0.0" 736 | }, 737 | "engines": { 738 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 739 | }, 740 | "funding": { 741 | "url": "https://github.com/sponsors/sindresorhus" 742 | } 743 | }, 744 | "node_modules/cli-truncate/node_modules/ansi-regex": { 745 | "version": "6.0.1", 746 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 747 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 748 | "dev": true, 749 | "engines": { 750 | "node": ">=12" 751 | }, 752 | "funding": { 753 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 754 | } 755 | }, 756 | "node_modules/cli-truncate/node_modules/emoji-regex": { 757 | "version": "9.2.2", 758 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 759 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 760 | "dev": true 761 | }, 762 | "node_modules/cli-truncate/node_modules/string-width": { 763 | "version": "5.1.2", 764 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 765 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 766 | "dev": true, 767 | "dependencies": { 768 | "eastasianwidth": "^0.2.0", 769 | "emoji-regex": "^9.2.2", 770 | "strip-ansi": "^7.0.1" 771 | }, 772 | "engines": { 773 | "node": ">=12" 774 | }, 775 | "funding": { 776 | "url": "https://github.com/sponsors/sindresorhus" 777 | } 778 | }, 779 | "node_modules/cli-truncate/node_modules/strip-ansi": { 780 | "version": "7.0.1", 781 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 782 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 783 | "dev": true, 784 | "dependencies": { 785 | "ansi-regex": "^6.0.1" 786 | }, 787 | "engines": { 788 | "node": ">=12" 789 | }, 790 | "funding": { 791 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 792 | } 793 | }, 794 | "node_modules/core-js": { 795 | "version": "3.27.2", 796 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", 797 | "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", 798 | "dev": true, 799 | "hasInstallScript": true, 800 | "funding": { 801 | "type": "opencollective", 802 | "url": "https://opencollective.com/core-js" 803 | } 804 | }, 805 | "node_modules/create-ecdh": { 806 | "version": "4.0.4", 807 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", 808 | "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", 809 | "dependencies": { 810 | "bn.js": "^4.1.0", 811 | "elliptic": "^6.5.3" 812 | } 813 | }, 814 | "node_modules/create-ecdh/node_modules/bn.js": { 815 | "version": "4.12.0", 816 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 817 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 818 | }, 819 | "node_modules/create-hash": { 820 | "version": "1.2.0", 821 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 822 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 823 | "dependencies": { 824 | "cipher-base": "^1.0.1", 825 | "inherits": "^2.0.1", 826 | "md5.js": "^1.3.4", 827 | "ripemd160": "^2.0.1", 828 | "sha.js": "^2.4.0" 829 | } 830 | }, 831 | "node_modules/create-hmac": { 832 | "version": "1.1.7", 833 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 834 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 835 | "dependencies": { 836 | "cipher-base": "^1.0.3", 837 | "create-hash": "^1.1.0", 838 | "inherits": "^2.0.1", 839 | "ripemd160": "^2.0.0", 840 | "safe-buffer": "^5.0.1", 841 | "sha.js": "^2.4.8" 842 | } 843 | }, 844 | "node_modules/crypto-browserify": { 845 | "version": "3.12.0", 846 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 847 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 848 | "dependencies": { 849 | "browserify-cipher": "^1.0.0", 850 | "browserify-sign": "^4.0.0", 851 | "create-ecdh": "^4.0.0", 852 | "create-hash": "^1.1.0", 853 | "create-hmac": "^1.1.0", 854 | "diffie-hellman": "^5.0.0", 855 | "inherits": "^2.0.1", 856 | "pbkdf2": "^3.0.3", 857 | "public-encrypt": "^4.0.0", 858 | "randombytes": "^2.0.0", 859 | "randomfill": "^1.0.3" 860 | }, 861 | "engines": { 862 | "node": "*" 863 | } 864 | }, 865 | "node_modules/debug": { 866 | "version": "4.3.4", 867 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 868 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 869 | "dev": true, 870 | "dependencies": { 871 | "ms": "2.1.2" 872 | }, 873 | "engines": { 874 | "node": ">=6.0" 875 | }, 876 | "peerDependenciesMeta": { 877 | "supports-color": { 878 | "optional": true 879 | } 880 | } 881 | }, 882 | "node_modules/deep-eql": { 883 | "version": "4.1.3", 884 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 885 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 886 | "dev": true, 887 | "dependencies": { 888 | "type-detect": "^4.0.0" 889 | }, 890 | "engines": { 891 | "node": ">=6" 892 | } 893 | }, 894 | "node_modules/des.js": { 895 | "version": "1.0.1", 896 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 897 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 898 | "dependencies": { 899 | "inherits": "^2.0.1", 900 | "minimalistic-assert": "^1.0.0" 901 | } 902 | }, 903 | "node_modules/diff": { 904 | "version": "5.1.0", 905 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", 906 | "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", 907 | "dev": true, 908 | "engines": { 909 | "node": ">=0.3.1" 910 | } 911 | }, 912 | "node_modules/diffie-hellman": { 913 | "version": "5.0.3", 914 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 915 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 916 | "dependencies": { 917 | "bn.js": "^4.1.0", 918 | "miller-rabin": "^4.0.0", 919 | "randombytes": "^2.0.0" 920 | } 921 | }, 922 | "node_modules/diffie-hellman/node_modules/bn.js": { 923 | "version": "4.12.0", 924 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 925 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 926 | }, 927 | "node_modules/eastasianwidth": { 928 | "version": "0.2.0", 929 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 930 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 931 | "dev": true 932 | }, 933 | "node_modules/elliptic": { 934 | "version": "6.5.4", 935 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 936 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 937 | "dependencies": { 938 | "bn.js": "^4.11.9", 939 | "brorand": "^1.1.0", 940 | "hash.js": "^1.0.0", 941 | "hmac-drbg": "^1.0.1", 942 | "inherits": "^2.0.4", 943 | "minimalistic-assert": "^1.0.1", 944 | "minimalistic-crypto-utils": "^1.0.1" 945 | } 946 | }, 947 | "node_modules/elliptic/node_modules/bn.js": { 948 | "version": "4.12.0", 949 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 950 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 951 | }, 952 | "node_modules/esbuild": { 953 | "version": "0.17.5", 954 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.5.tgz", 955 | "integrity": "sha512-Bu6WLCc9NMsNoMJUjGl3yBzTjVLXdysMltxQWiLAypP+/vQrf+3L1Xe8fCXzxaECus2cEJ9M7pk4yKatEwQMqQ==", 956 | "hasInstallScript": true, 957 | "bin": { 958 | "esbuild": "bin/esbuild" 959 | }, 960 | "engines": { 961 | "node": ">=12" 962 | }, 963 | "optionalDependencies": { 964 | "@esbuild/android-arm": "0.17.5", 965 | "@esbuild/android-arm64": "0.17.5", 966 | "@esbuild/android-x64": "0.17.5", 967 | "@esbuild/darwin-arm64": "0.17.5", 968 | "@esbuild/darwin-x64": "0.17.5", 969 | "@esbuild/freebsd-arm64": "0.17.5", 970 | "@esbuild/freebsd-x64": "0.17.5", 971 | "@esbuild/linux-arm": "0.17.5", 972 | "@esbuild/linux-arm64": "0.17.5", 973 | "@esbuild/linux-ia32": "0.17.5", 974 | "@esbuild/linux-loong64": "0.17.5", 975 | "@esbuild/linux-mips64el": "0.17.5", 976 | "@esbuild/linux-ppc64": "0.17.5", 977 | "@esbuild/linux-riscv64": "0.17.5", 978 | "@esbuild/linux-s390x": "0.17.5", 979 | "@esbuild/linux-x64": "0.17.5", 980 | "@esbuild/netbsd-x64": "0.17.5", 981 | "@esbuild/openbsd-x64": "0.17.5", 982 | "@esbuild/sunos-x64": "0.17.5", 983 | "@esbuild/win32-arm64": "0.17.5", 984 | "@esbuild/win32-ia32": "0.17.5", 985 | "@esbuild/win32-x64": "0.17.5" 986 | } 987 | }, 988 | "node_modules/esbuild-plugin-resolve": { 989 | "version": "1.0.3", 990 | "resolved": "https://registry.npmjs.org/esbuild-plugin-resolve/-/esbuild-plugin-resolve-1.0.3.tgz", 991 | "integrity": "sha512-DHtwExowoWa5rC+mLVppGqe4MiFCZsKEeNgps4UAOKqmu3CjUgyyFjw+AHXteGCRdCJID76OsUuyGi2cOLIxUQ==", 992 | "dev": true 993 | }, 994 | "node_modules/esbuild-plugin-text-replace": { 995 | "version": "1.2.0", 996 | "resolved": "https://registry.npmjs.org/esbuild-plugin-text-replace/-/esbuild-plugin-text-replace-1.2.0.tgz", 997 | "integrity": "sha512-04kdAMjxqGG+TEV/F+uGQVMFZlh65Eb11xo8b532io8FjOg5x2faoCXGicJo97BovXYARCPUhiZEECKZrFQq7Q==", 998 | "dev": true, 999 | "dependencies": { 1000 | "ts-replace-all": "^1.0.0" 1001 | }, 1002 | "engines": { 1003 | "node": ">=10.1.0" 1004 | } 1005 | }, 1006 | "node_modules/escape-string-regexp": { 1007 | "version": "4.0.0", 1008 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1009 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1010 | "engines": { 1011 | "node": ">=10" 1012 | }, 1013 | "funding": { 1014 | "url": "https://github.com/sponsors/sindresorhus" 1015 | } 1016 | }, 1017 | "node_modules/estree-walker": { 1018 | "version": "0.6.1", 1019 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1020 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" 1021 | }, 1022 | "node_modules/evp_bytestokey": { 1023 | "version": "1.0.3", 1024 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1025 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1026 | "dependencies": { 1027 | "md5.js": "^1.3.4", 1028 | "safe-buffer": "^5.1.1" 1029 | } 1030 | }, 1031 | "node_modules/fsevents": { 1032 | "version": "2.3.2", 1033 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1034 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1035 | "dev": true, 1036 | "hasInstallScript": true, 1037 | "optional": true, 1038 | "os": [ 1039 | "darwin" 1040 | ], 1041 | "engines": { 1042 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1043 | } 1044 | }, 1045 | "node_modules/function-bind": { 1046 | "version": "1.1.1", 1047 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1048 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1049 | "dev": true 1050 | }, 1051 | "node_modules/get-func-name": { 1052 | "version": "2.0.0", 1053 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 1054 | "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", 1055 | "dev": true, 1056 | "engines": { 1057 | "node": "*" 1058 | } 1059 | }, 1060 | "node_modules/has": { 1061 | "version": "1.0.3", 1062 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1063 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1064 | "dev": true, 1065 | "dependencies": { 1066 | "function-bind": "^1.1.1" 1067 | }, 1068 | "engines": { 1069 | "node": ">= 0.4.0" 1070 | } 1071 | }, 1072 | "node_modules/hash-base": { 1073 | "version": "3.1.0", 1074 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", 1075 | "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", 1076 | "dependencies": { 1077 | "inherits": "^2.0.4", 1078 | "readable-stream": "^3.6.0", 1079 | "safe-buffer": "^5.2.0" 1080 | }, 1081 | "engines": { 1082 | "node": ">=4" 1083 | } 1084 | }, 1085 | "node_modules/hash.js": { 1086 | "version": "1.1.7", 1087 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1088 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1089 | "dependencies": { 1090 | "inherits": "^2.0.3", 1091 | "minimalistic-assert": "^1.0.1" 1092 | } 1093 | }, 1094 | "node_modules/hmac-drbg": { 1095 | "version": "1.0.1", 1096 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1097 | "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", 1098 | "dependencies": { 1099 | "hash.js": "^1.0.3", 1100 | "minimalistic-assert": "^1.0.0", 1101 | "minimalistic-crypto-utils": "^1.0.1" 1102 | } 1103 | }, 1104 | "node_modules/hono": { 1105 | "version": "4.1.0", 1106 | "resolved": "https://registry.npmjs.org/hono/-/hono-4.1.0.tgz", 1107 | "integrity": "sha512-9no6DCHb4ijB1tWdFXU6JnrnFgzwVZ1cnIcS1BjAFnMcjbtBTOMsQrDrPH3GXbkNEEEkj8kWqcYBy8Qc0bBkJQ==", 1108 | "engines": { 1109 | "node": ">=16.0.0" 1110 | } 1111 | }, 1112 | "node_modules/ieee754": { 1113 | "version": "1.2.1", 1114 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1115 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1116 | "funding": [ 1117 | { 1118 | "type": "github", 1119 | "url": "https://github.com/sponsors/feross" 1120 | }, 1121 | { 1122 | "type": "patreon", 1123 | "url": "https://www.patreon.com/feross" 1124 | }, 1125 | { 1126 | "type": "consulting", 1127 | "url": "https://feross.org/support" 1128 | } 1129 | ] 1130 | }, 1131 | "node_modules/inherits": { 1132 | "version": "2.0.4", 1133 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1134 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1135 | }, 1136 | "node_modules/is-core-module": { 1137 | "version": "2.11.0", 1138 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1139 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1140 | "dev": true, 1141 | "dependencies": { 1142 | "has": "^1.0.3" 1143 | }, 1144 | "funding": { 1145 | "url": "https://github.com/sponsors/ljharb" 1146 | } 1147 | }, 1148 | "node_modules/jsonc-parser": { 1149 | "version": "3.2.0", 1150 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", 1151 | "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", 1152 | "dev": true 1153 | }, 1154 | "node_modules/local-pkg": { 1155 | "version": "0.4.3", 1156 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", 1157 | "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", 1158 | "dev": true, 1159 | "engines": { 1160 | "node": ">=14" 1161 | }, 1162 | "funding": { 1163 | "url": "https://github.com/sponsors/antfu" 1164 | } 1165 | }, 1166 | "node_modules/loupe": { 1167 | "version": "2.3.6", 1168 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", 1169 | "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", 1170 | "dev": true, 1171 | "dependencies": { 1172 | "get-func-name": "^2.0.0" 1173 | } 1174 | }, 1175 | "node_modules/magic-string": { 1176 | "version": "0.25.9", 1177 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 1178 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 1179 | "dependencies": { 1180 | "sourcemap-codec": "^1.4.8" 1181 | } 1182 | }, 1183 | "node_modules/md5.js": { 1184 | "version": "1.3.5", 1185 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 1186 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 1187 | "dependencies": { 1188 | "hash-base": "^3.0.0", 1189 | "inherits": "^2.0.1", 1190 | "safe-buffer": "^5.1.2" 1191 | } 1192 | }, 1193 | "node_modules/miller-rabin": { 1194 | "version": "4.0.1", 1195 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 1196 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 1197 | "dependencies": { 1198 | "bn.js": "^4.0.0", 1199 | "brorand": "^1.0.1" 1200 | }, 1201 | "bin": { 1202 | "miller-rabin": "bin/miller-rabin" 1203 | } 1204 | }, 1205 | "node_modules/miller-rabin/node_modules/bn.js": { 1206 | "version": "4.12.0", 1207 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1208 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 1209 | }, 1210 | "node_modules/minimalistic-assert": { 1211 | "version": "1.0.1", 1212 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1213 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 1214 | }, 1215 | "node_modules/minimalistic-crypto-utils": { 1216 | "version": "1.0.1", 1217 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1218 | "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" 1219 | }, 1220 | "node_modules/mlly": { 1221 | "version": "1.1.1", 1222 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.1.1.tgz", 1223 | "integrity": "sha512-Jnlh4W/aI4GySPo6+DyTN17Q75KKbLTyFK8BrGhjNP4rxuUjbRWhE6gHg3bs33URWAF44FRm7gdQA348i3XxRw==", 1224 | "dev": true, 1225 | "dependencies": { 1226 | "acorn": "^8.8.2", 1227 | "pathe": "^1.1.0", 1228 | "pkg-types": "^1.0.1", 1229 | "ufo": "^1.1.0" 1230 | } 1231 | }, 1232 | "node_modules/ms": { 1233 | "version": "2.1.2", 1234 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1235 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1236 | "dev": true 1237 | }, 1238 | "node_modules/nanoid": { 1239 | "version": "4.0.0", 1240 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", 1241 | "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==", 1242 | "bin": { 1243 | "nanoid": "bin/nanoid.js" 1244 | }, 1245 | "engines": { 1246 | "node": "^14 || ^16 || >=18" 1247 | } 1248 | }, 1249 | "node_modules/parse-asn1": { 1250 | "version": "5.1.6", 1251 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", 1252 | "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", 1253 | "dependencies": { 1254 | "asn1.js": "^5.2.0", 1255 | "browserify-aes": "^1.0.0", 1256 | "evp_bytestokey": "^1.0.0", 1257 | "pbkdf2": "^3.0.3", 1258 | "safe-buffer": "^5.1.1" 1259 | } 1260 | }, 1261 | "node_modules/path-parse": { 1262 | "version": "1.0.7", 1263 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1264 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1265 | "dev": true 1266 | }, 1267 | "node_modules/pathe": { 1268 | "version": "1.1.0", 1269 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", 1270 | "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", 1271 | "dev": true 1272 | }, 1273 | "node_modules/pathval": { 1274 | "version": "1.1.1", 1275 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 1276 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 1277 | "dev": true, 1278 | "engines": { 1279 | "node": "*" 1280 | } 1281 | }, 1282 | "node_modules/pbkdf2": { 1283 | "version": "3.1.2", 1284 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", 1285 | "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", 1286 | "dependencies": { 1287 | "create-hash": "^1.1.2", 1288 | "create-hmac": "^1.1.4", 1289 | "ripemd160": "^2.0.1", 1290 | "safe-buffer": "^5.0.1", 1291 | "sha.js": "^2.4.8" 1292 | }, 1293 | "engines": { 1294 | "node": ">=0.12" 1295 | } 1296 | }, 1297 | "node_modules/picocolors": { 1298 | "version": "1.0.0", 1299 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1300 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1301 | "dev": true 1302 | }, 1303 | "node_modules/pkg-types": { 1304 | "version": "1.0.2", 1305 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", 1306 | "integrity": "sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==", 1307 | "dev": true, 1308 | "dependencies": { 1309 | "jsonc-parser": "^3.2.0", 1310 | "mlly": "^1.1.1", 1311 | "pathe": "^1.1.0" 1312 | } 1313 | }, 1314 | "node_modules/postcss": { 1315 | "version": "8.4.21", 1316 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 1317 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 1318 | "dev": true, 1319 | "funding": [ 1320 | { 1321 | "type": "opencollective", 1322 | "url": "https://opencollective.com/postcss/" 1323 | }, 1324 | { 1325 | "type": "tidelift", 1326 | "url": "https://tidelift.com/funding/github/npm/postcss" 1327 | } 1328 | ], 1329 | "dependencies": { 1330 | "nanoid": "^3.3.4", 1331 | "picocolors": "^1.0.0", 1332 | "source-map-js": "^1.0.2" 1333 | }, 1334 | "engines": { 1335 | "node": "^10 || ^12 || >=14" 1336 | } 1337 | }, 1338 | "node_modules/postcss/node_modules/nanoid": { 1339 | "version": "3.3.4", 1340 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1341 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1342 | "dev": true, 1343 | "bin": { 1344 | "nanoid": "bin/nanoid.cjs" 1345 | }, 1346 | "engines": { 1347 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1348 | } 1349 | }, 1350 | "node_modules/public-encrypt": { 1351 | "version": "4.0.3", 1352 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 1353 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 1354 | "dependencies": { 1355 | "bn.js": "^4.1.0", 1356 | "browserify-rsa": "^4.0.0", 1357 | "create-hash": "^1.1.0", 1358 | "parse-asn1": "^5.0.0", 1359 | "randombytes": "^2.0.1", 1360 | "safe-buffer": "^5.1.2" 1361 | } 1362 | }, 1363 | "node_modules/public-encrypt/node_modules/bn.js": { 1364 | "version": "4.12.0", 1365 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1366 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 1367 | }, 1368 | "node_modules/randombytes": { 1369 | "version": "2.1.0", 1370 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1371 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1372 | "dependencies": { 1373 | "safe-buffer": "^5.1.0" 1374 | } 1375 | }, 1376 | "node_modules/randomfill": { 1377 | "version": "1.0.4", 1378 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 1379 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 1380 | "dependencies": { 1381 | "randombytes": "^2.0.5", 1382 | "safe-buffer": "^5.1.0" 1383 | } 1384 | }, 1385 | "node_modules/readable-stream": { 1386 | "version": "3.6.0", 1387 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1388 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1389 | "dependencies": { 1390 | "inherits": "^2.0.3", 1391 | "string_decoder": "^1.1.1", 1392 | "util-deprecate": "^1.0.1" 1393 | }, 1394 | "engines": { 1395 | "node": ">= 6" 1396 | } 1397 | }, 1398 | "node_modules/resolve": { 1399 | "version": "1.22.1", 1400 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1401 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1402 | "dev": true, 1403 | "dependencies": { 1404 | "is-core-module": "^2.9.0", 1405 | "path-parse": "^1.0.7", 1406 | "supports-preserve-symlinks-flag": "^1.0.0" 1407 | }, 1408 | "bin": { 1409 | "resolve": "bin/resolve" 1410 | }, 1411 | "funding": { 1412 | "url": "https://github.com/sponsors/ljharb" 1413 | } 1414 | }, 1415 | "node_modules/ripemd160": { 1416 | "version": "2.0.2", 1417 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 1418 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 1419 | "dependencies": { 1420 | "hash-base": "^3.0.0", 1421 | "inherits": "^2.0.1" 1422 | } 1423 | }, 1424 | "node_modules/rollup": { 1425 | "version": "3.18.0", 1426 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.18.0.tgz", 1427 | "integrity": "sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==", 1428 | "dev": true, 1429 | "bin": { 1430 | "rollup": "dist/bin/rollup" 1431 | }, 1432 | "engines": { 1433 | "node": ">=14.18.0", 1434 | "npm": ">=8.0.0" 1435 | }, 1436 | "optionalDependencies": { 1437 | "fsevents": "~2.3.2" 1438 | } 1439 | }, 1440 | "node_modules/rollup-plugin-inject": { 1441 | "version": "3.0.2", 1442 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 1443 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 1444 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", 1445 | "dependencies": { 1446 | "estree-walker": "^0.6.1", 1447 | "magic-string": "^0.25.3", 1448 | "rollup-pluginutils": "^2.8.1" 1449 | } 1450 | }, 1451 | "node_modules/rollup-plugin-node-polyfills": { 1452 | "version": "0.2.1", 1453 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 1454 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 1455 | "dependencies": { 1456 | "rollup-plugin-inject": "^3.0.0" 1457 | } 1458 | }, 1459 | "node_modules/rollup-pluginutils": { 1460 | "version": "2.8.2", 1461 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1462 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1463 | "dependencies": { 1464 | "estree-walker": "^0.6.1" 1465 | } 1466 | }, 1467 | "node_modules/safe-buffer": { 1468 | "version": "5.2.1", 1469 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1470 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1471 | "funding": [ 1472 | { 1473 | "type": "github", 1474 | "url": "https://github.com/sponsors/feross" 1475 | }, 1476 | { 1477 | "type": "patreon", 1478 | "url": "https://www.patreon.com/feross" 1479 | }, 1480 | { 1481 | "type": "consulting", 1482 | "url": "https://feross.org/support" 1483 | } 1484 | ] 1485 | }, 1486 | "node_modules/safer-buffer": { 1487 | "version": "2.1.2", 1488 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1489 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1490 | }, 1491 | "node_modules/sha.js": { 1492 | "version": "2.4.11", 1493 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1494 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1495 | "dependencies": { 1496 | "inherits": "^2.0.1", 1497 | "safe-buffer": "^5.0.1" 1498 | }, 1499 | "bin": { 1500 | "sha.js": "bin.js" 1501 | } 1502 | }, 1503 | "node_modules/siginfo": { 1504 | "version": "2.0.0", 1505 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 1506 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 1507 | "dev": true 1508 | }, 1509 | "node_modules/slice-ansi": { 1510 | "version": "5.0.0", 1511 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 1512 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 1513 | "dev": true, 1514 | "dependencies": { 1515 | "ansi-styles": "^6.0.0", 1516 | "is-fullwidth-code-point": "^4.0.0" 1517 | }, 1518 | "engines": { 1519 | "node": ">=12" 1520 | }, 1521 | "funding": { 1522 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 1523 | } 1524 | }, 1525 | "node_modules/slice-ansi/node_modules/ansi-styles": { 1526 | "version": "6.2.1", 1527 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 1528 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 1529 | "dev": true, 1530 | "engines": { 1531 | "node": ">=12" 1532 | }, 1533 | "funding": { 1534 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1535 | } 1536 | }, 1537 | "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { 1538 | "version": "4.0.0", 1539 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 1540 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 1541 | "dev": true, 1542 | "engines": { 1543 | "node": ">=12" 1544 | }, 1545 | "funding": { 1546 | "url": "https://github.com/sponsors/sindresorhus" 1547 | } 1548 | }, 1549 | "node_modules/source-map": { 1550 | "version": "0.6.1", 1551 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1552 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1553 | "dev": true, 1554 | "engines": { 1555 | "node": ">=0.10.0" 1556 | } 1557 | }, 1558 | "node_modules/source-map-js": { 1559 | "version": "1.0.2", 1560 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1561 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1562 | "dev": true, 1563 | "engines": { 1564 | "node": ">=0.10.0" 1565 | } 1566 | }, 1567 | "node_modules/sourcemap-codec": { 1568 | "version": "1.4.8", 1569 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1570 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1571 | "deprecated": "Please use @jridgewell/sourcemap-codec instead" 1572 | }, 1573 | "node_modules/stackback": { 1574 | "version": "0.0.2", 1575 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 1576 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 1577 | "dev": true 1578 | }, 1579 | "node_modules/std-env": { 1580 | "version": "3.3.2", 1581 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", 1582 | "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==", 1583 | "dev": true 1584 | }, 1585 | "node_modules/string_decoder": { 1586 | "version": "1.3.0", 1587 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1588 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1589 | "dependencies": { 1590 | "safe-buffer": "~5.2.0" 1591 | } 1592 | }, 1593 | "node_modules/strip-literal": { 1594 | "version": "1.0.1", 1595 | "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", 1596 | "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", 1597 | "dev": true, 1598 | "dependencies": { 1599 | "acorn": "^8.8.2" 1600 | }, 1601 | "funding": { 1602 | "url": "https://github.com/sponsors/antfu" 1603 | } 1604 | }, 1605 | "node_modules/supports-preserve-symlinks-flag": { 1606 | "version": "1.0.0", 1607 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1608 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1609 | "dev": true, 1610 | "engines": { 1611 | "node": ">= 0.4" 1612 | }, 1613 | "funding": { 1614 | "url": "https://github.com/sponsors/ljharb" 1615 | } 1616 | }, 1617 | "node_modules/tinybench": { 1618 | "version": "2.4.0", 1619 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.4.0.tgz", 1620 | "integrity": "sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==", 1621 | "dev": true 1622 | }, 1623 | "node_modules/tinypool": { 1624 | "version": "0.3.1", 1625 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", 1626 | "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", 1627 | "dev": true, 1628 | "engines": { 1629 | "node": ">=14.0.0" 1630 | } 1631 | }, 1632 | "node_modules/tinyspy": { 1633 | "version": "1.1.1", 1634 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.1.1.tgz", 1635 | "integrity": "sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==", 1636 | "dev": true, 1637 | "engines": { 1638 | "node": ">=14.0.0" 1639 | } 1640 | }, 1641 | "node_modules/ts-replace-all": { 1642 | "version": "1.0.0", 1643 | "resolved": "https://registry.npmjs.org/ts-replace-all/-/ts-replace-all-1.0.0.tgz", 1644 | "integrity": "sha512-6uBtdkw3jHXkPtx/e9xB/5vcngMm17CyJYsS2YZeQ+9FdRnt6Ev5g931Sg2p+dxbtMGoCm13m3ax/obicTZIkQ==", 1645 | "dev": true, 1646 | "dependencies": { 1647 | "core-js": "^3.4.1" 1648 | } 1649 | }, 1650 | "node_modules/type-detect": { 1651 | "version": "4.0.8", 1652 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 1653 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 1654 | "dev": true, 1655 | "engines": { 1656 | "node": ">=4" 1657 | } 1658 | }, 1659 | "node_modules/ufo": { 1660 | "version": "1.1.1", 1661 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.1.tgz", 1662 | "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", 1663 | "dev": true 1664 | }, 1665 | "node_modules/util-deprecate": { 1666 | "version": "1.0.2", 1667 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1668 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1669 | }, 1670 | "node_modules/vite": { 1671 | "version": "4.1.4", 1672 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", 1673 | "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", 1674 | "dev": true, 1675 | "dependencies": { 1676 | "esbuild": "^0.16.14", 1677 | "postcss": "^8.4.21", 1678 | "resolve": "^1.22.1", 1679 | "rollup": "^3.10.0" 1680 | }, 1681 | "bin": { 1682 | "vite": "bin/vite.js" 1683 | }, 1684 | "engines": { 1685 | "node": "^14.18.0 || >=16.0.0" 1686 | }, 1687 | "optionalDependencies": { 1688 | "fsevents": "~2.3.2" 1689 | }, 1690 | "peerDependencies": { 1691 | "@types/node": ">= 14", 1692 | "less": "*", 1693 | "sass": "*", 1694 | "stylus": "*", 1695 | "sugarss": "*", 1696 | "terser": "^5.4.0" 1697 | }, 1698 | "peerDependenciesMeta": { 1699 | "@types/node": { 1700 | "optional": true 1701 | }, 1702 | "less": { 1703 | "optional": true 1704 | }, 1705 | "sass": { 1706 | "optional": true 1707 | }, 1708 | "stylus": { 1709 | "optional": true 1710 | }, 1711 | "sugarss": { 1712 | "optional": true 1713 | }, 1714 | "terser": { 1715 | "optional": true 1716 | } 1717 | } 1718 | }, 1719 | "node_modules/vite-node": { 1720 | "version": "0.29.2", 1721 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.2.tgz", 1722 | "integrity": "sha512-5oe1z6wzI3gkvc4yOBbDBbgpiWiApvuN4P55E8OI131JGrSuo4X3SOZrNmZYo4R8Zkze/dhi572blX0zc+6SdA==", 1723 | "dev": true, 1724 | "dependencies": { 1725 | "cac": "^6.7.14", 1726 | "debug": "^4.3.4", 1727 | "mlly": "^1.1.0", 1728 | "pathe": "^1.1.0", 1729 | "picocolors": "^1.0.0", 1730 | "vite": "^3.0.0 || ^4.0.0" 1731 | }, 1732 | "bin": { 1733 | "vite-node": "vite-node.mjs" 1734 | }, 1735 | "engines": { 1736 | "node": ">=v14.16.0" 1737 | }, 1738 | "funding": { 1739 | "url": "https://github.com/sponsors/antfu" 1740 | } 1741 | }, 1742 | "node_modules/vite/node_modules/@esbuild/android-arm": { 1743 | "version": "0.16.17", 1744 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", 1745 | "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", 1746 | "cpu": [ 1747 | "arm" 1748 | ], 1749 | "dev": true, 1750 | "optional": true, 1751 | "os": [ 1752 | "android" 1753 | ], 1754 | "engines": { 1755 | "node": ">=12" 1756 | } 1757 | }, 1758 | "node_modules/vite/node_modules/@esbuild/android-arm64": { 1759 | "version": "0.16.17", 1760 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", 1761 | "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", 1762 | "cpu": [ 1763 | "arm64" 1764 | ], 1765 | "dev": true, 1766 | "optional": true, 1767 | "os": [ 1768 | "android" 1769 | ], 1770 | "engines": { 1771 | "node": ">=12" 1772 | } 1773 | }, 1774 | "node_modules/vite/node_modules/@esbuild/android-x64": { 1775 | "version": "0.16.17", 1776 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", 1777 | "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", 1778 | "cpu": [ 1779 | "x64" 1780 | ], 1781 | "dev": true, 1782 | "optional": true, 1783 | "os": [ 1784 | "android" 1785 | ], 1786 | "engines": { 1787 | "node": ">=12" 1788 | } 1789 | }, 1790 | "node_modules/vite/node_modules/@esbuild/darwin-arm64": { 1791 | "version": "0.16.17", 1792 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", 1793 | "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", 1794 | "cpu": [ 1795 | "arm64" 1796 | ], 1797 | "dev": true, 1798 | "optional": true, 1799 | "os": [ 1800 | "darwin" 1801 | ], 1802 | "engines": { 1803 | "node": ">=12" 1804 | } 1805 | }, 1806 | "node_modules/vite/node_modules/@esbuild/darwin-x64": { 1807 | "version": "0.16.17", 1808 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", 1809 | "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", 1810 | "cpu": [ 1811 | "x64" 1812 | ], 1813 | "dev": true, 1814 | "optional": true, 1815 | "os": [ 1816 | "darwin" 1817 | ], 1818 | "engines": { 1819 | "node": ">=12" 1820 | } 1821 | }, 1822 | "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { 1823 | "version": "0.16.17", 1824 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", 1825 | "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", 1826 | "cpu": [ 1827 | "arm64" 1828 | ], 1829 | "dev": true, 1830 | "optional": true, 1831 | "os": [ 1832 | "freebsd" 1833 | ], 1834 | "engines": { 1835 | "node": ">=12" 1836 | } 1837 | }, 1838 | "node_modules/vite/node_modules/@esbuild/freebsd-x64": { 1839 | "version": "0.16.17", 1840 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", 1841 | "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", 1842 | "cpu": [ 1843 | "x64" 1844 | ], 1845 | "dev": true, 1846 | "optional": true, 1847 | "os": [ 1848 | "freebsd" 1849 | ], 1850 | "engines": { 1851 | "node": ">=12" 1852 | } 1853 | }, 1854 | "node_modules/vite/node_modules/@esbuild/linux-arm": { 1855 | "version": "0.16.17", 1856 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", 1857 | "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", 1858 | "cpu": [ 1859 | "arm" 1860 | ], 1861 | "dev": true, 1862 | "optional": true, 1863 | "os": [ 1864 | "linux" 1865 | ], 1866 | "engines": { 1867 | "node": ">=12" 1868 | } 1869 | }, 1870 | "node_modules/vite/node_modules/@esbuild/linux-arm64": { 1871 | "version": "0.16.17", 1872 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", 1873 | "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", 1874 | "cpu": [ 1875 | "arm64" 1876 | ], 1877 | "dev": true, 1878 | "optional": true, 1879 | "os": [ 1880 | "linux" 1881 | ], 1882 | "engines": { 1883 | "node": ">=12" 1884 | } 1885 | }, 1886 | "node_modules/vite/node_modules/@esbuild/linux-ia32": { 1887 | "version": "0.16.17", 1888 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", 1889 | "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", 1890 | "cpu": [ 1891 | "ia32" 1892 | ], 1893 | "dev": true, 1894 | "optional": true, 1895 | "os": [ 1896 | "linux" 1897 | ], 1898 | "engines": { 1899 | "node": ">=12" 1900 | } 1901 | }, 1902 | "node_modules/vite/node_modules/@esbuild/linux-loong64": { 1903 | "version": "0.16.17", 1904 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", 1905 | "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", 1906 | "cpu": [ 1907 | "loong64" 1908 | ], 1909 | "dev": true, 1910 | "optional": true, 1911 | "os": [ 1912 | "linux" 1913 | ], 1914 | "engines": { 1915 | "node": ">=12" 1916 | } 1917 | }, 1918 | "node_modules/vite/node_modules/@esbuild/linux-mips64el": { 1919 | "version": "0.16.17", 1920 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", 1921 | "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", 1922 | "cpu": [ 1923 | "mips64el" 1924 | ], 1925 | "dev": true, 1926 | "optional": true, 1927 | "os": [ 1928 | "linux" 1929 | ], 1930 | "engines": { 1931 | "node": ">=12" 1932 | } 1933 | }, 1934 | "node_modules/vite/node_modules/@esbuild/linux-ppc64": { 1935 | "version": "0.16.17", 1936 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", 1937 | "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", 1938 | "cpu": [ 1939 | "ppc64" 1940 | ], 1941 | "dev": true, 1942 | "optional": true, 1943 | "os": [ 1944 | "linux" 1945 | ], 1946 | "engines": { 1947 | "node": ">=12" 1948 | } 1949 | }, 1950 | "node_modules/vite/node_modules/@esbuild/linux-riscv64": { 1951 | "version": "0.16.17", 1952 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", 1953 | "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", 1954 | "cpu": [ 1955 | "riscv64" 1956 | ], 1957 | "dev": true, 1958 | "optional": true, 1959 | "os": [ 1960 | "linux" 1961 | ], 1962 | "engines": { 1963 | "node": ">=12" 1964 | } 1965 | }, 1966 | "node_modules/vite/node_modules/@esbuild/linux-s390x": { 1967 | "version": "0.16.17", 1968 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", 1969 | "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", 1970 | "cpu": [ 1971 | "s390x" 1972 | ], 1973 | "dev": true, 1974 | "optional": true, 1975 | "os": [ 1976 | "linux" 1977 | ], 1978 | "engines": { 1979 | "node": ">=12" 1980 | } 1981 | }, 1982 | "node_modules/vite/node_modules/@esbuild/linux-x64": { 1983 | "version": "0.16.17", 1984 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", 1985 | "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", 1986 | "cpu": [ 1987 | "x64" 1988 | ], 1989 | "dev": true, 1990 | "optional": true, 1991 | "os": [ 1992 | "linux" 1993 | ], 1994 | "engines": { 1995 | "node": ">=12" 1996 | } 1997 | }, 1998 | "node_modules/vite/node_modules/@esbuild/netbsd-x64": { 1999 | "version": "0.16.17", 2000 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", 2001 | "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", 2002 | "cpu": [ 2003 | "x64" 2004 | ], 2005 | "dev": true, 2006 | "optional": true, 2007 | "os": [ 2008 | "netbsd" 2009 | ], 2010 | "engines": { 2011 | "node": ">=12" 2012 | } 2013 | }, 2014 | "node_modules/vite/node_modules/@esbuild/openbsd-x64": { 2015 | "version": "0.16.17", 2016 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", 2017 | "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", 2018 | "cpu": [ 2019 | "x64" 2020 | ], 2021 | "dev": true, 2022 | "optional": true, 2023 | "os": [ 2024 | "openbsd" 2025 | ], 2026 | "engines": { 2027 | "node": ">=12" 2028 | } 2029 | }, 2030 | "node_modules/vite/node_modules/@esbuild/sunos-x64": { 2031 | "version": "0.16.17", 2032 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", 2033 | "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", 2034 | "cpu": [ 2035 | "x64" 2036 | ], 2037 | "dev": true, 2038 | "optional": true, 2039 | "os": [ 2040 | "sunos" 2041 | ], 2042 | "engines": { 2043 | "node": ">=12" 2044 | } 2045 | }, 2046 | "node_modules/vite/node_modules/@esbuild/win32-arm64": { 2047 | "version": "0.16.17", 2048 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", 2049 | "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", 2050 | "cpu": [ 2051 | "arm64" 2052 | ], 2053 | "dev": true, 2054 | "optional": true, 2055 | "os": [ 2056 | "win32" 2057 | ], 2058 | "engines": { 2059 | "node": ">=12" 2060 | } 2061 | }, 2062 | "node_modules/vite/node_modules/@esbuild/win32-ia32": { 2063 | "version": "0.16.17", 2064 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", 2065 | "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", 2066 | "cpu": [ 2067 | "ia32" 2068 | ], 2069 | "dev": true, 2070 | "optional": true, 2071 | "os": [ 2072 | "win32" 2073 | ], 2074 | "engines": { 2075 | "node": ">=12" 2076 | } 2077 | }, 2078 | "node_modules/vite/node_modules/@esbuild/win32-x64": { 2079 | "version": "0.16.17", 2080 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", 2081 | "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", 2082 | "cpu": [ 2083 | "x64" 2084 | ], 2085 | "dev": true, 2086 | "optional": true, 2087 | "os": [ 2088 | "win32" 2089 | ], 2090 | "engines": { 2091 | "node": ">=12" 2092 | } 2093 | }, 2094 | "node_modules/vite/node_modules/esbuild": { 2095 | "version": "0.16.17", 2096 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", 2097 | "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", 2098 | "dev": true, 2099 | "hasInstallScript": true, 2100 | "bin": { 2101 | "esbuild": "bin/esbuild" 2102 | }, 2103 | "engines": { 2104 | "node": ">=12" 2105 | }, 2106 | "optionalDependencies": { 2107 | "@esbuild/android-arm": "0.16.17", 2108 | "@esbuild/android-arm64": "0.16.17", 2109 | "@esbuild/android-x64": "0.16.17", 2110 | "@esbuild/darwin-arm64": "0.16.17", 2111 | "@esbuild/darwin-x64": "0.16.17", 2112 | "@esbuild/freebsd-arm64": "0.16.17", 2113 | "@esbuild/freebsd-x64": "0.16.17", 2114 | "@esbuild/linux-arm": "0.16.17", 2115 | "@esbuild/linux-arm64": "0.16.17", 2116 | "@esbuild/linux-ia32": "0.16.17", 2117 | "@esbuild/linux-loong64": "0.16.17", 2118 | "@esbuild/linux-mips64el": "0.16.17", 2119 | "@esbuild/linux-ppc64": "0.16.17", 2120 | "@esbuild/linux-riscv64": "0.16.17", 2121 | "@esbuild/linux-s390x": "0.16.17", 2122 | "@esbuild/linux-x64": "0.16.17", 2123 | "@esbuild/netbsd-x64": "0.16.17", 2124 | "@esbuild/openbsd-x64": "0.16.17", 2125 | "@esbuild/sunos-x64": "0.16.17", 2126 | "@esbuild/win32-arm64": "0.16.17", 2127 | "@esbuild/win32-ia32": "0.16.17", 2128 | "@esbuild/win32-x64": "0.16.17" 2129 | } 2130 | }, 2131 | "node_modules/vitest": { 2132 | "version": "0.29.2", 2133 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.2.tgz", 2134 | "integrity": "sha512-ydK9IGbAvoY8wkg29DQ4ivcVviCaUi3ivuPKfZEVddMTenFHUfB8EEDXQV8+RasEk1ACFLgMUqAaDuQ/Nk+mQA==", 2135 | "dev": true, 2136 | "dependencies": { 2137 | "@types/chai": "^4.3.4", 2138 | "@types/chai-subset": "^1.3.3", 2139 | "@types/node": "*", 2140 | "@vitest/expect": "0.29.2", 2141 | "@vitest/runner": "0.29.2", 2142 | "@vitest/spy": "0.29.2", 2143 | "@vitest/utils": "0.29.2", 2144 | "acorn": "^8.8.1", 2145 | "acorn-walk": "^8.2.0", 2146 | "cac": "^6.7.14", 2147 | "chai": "^4.3.7", 2148 | "debug": "^4.3.4", 2149 | "local-pkg": "^0.4.2", 2150 | "pathe": "^1.1.0", 2151 | "picocolors": "^1.0.0", 2152 | "source-map": "^0.6.1", 2153 | "std-env": "^3.3.1", 2154 | "strip-literal": "^1.0.0", 2155 | "tinybench": "^2.3.1", 2156 | "tinypool": "^0.3.1", 2157 | "tinyspy": "^1.0.2", 2158 | "vite": "^3.0.0 || ^4.0.0", 2159 | "vite-node": "0.29.2", 2160 | "why-is-node-running": "^2.2.2" 2161 | }, 2162 | "bin": { 2163 | "vitest": "vitest.mjs" 2164 | }, 2165 | "engines": { 2166 | "node": ">=v14.16.0" 2167 | }, 2168 | "funding": { 2169 | "url": "https://github.com/sponsors/antfu" 2170 | }, 2171 | "peerDependencies": { 2172 | "@edge-runtime/vm": "*", 2173 | "@vitest/browser": "*", 2174 | "@vitest/ui": "*", 2175 | "happy-dom": "*", 2176 | "jsdom": "*" 2177 | }, 2178 | "peerDependenciesMeta": { 2179 | "@edge-runtime/vm": { 2180 | "optional": true 2181 | }, 2182 | "@vitest/browser": { 2183 | "optional": true 2184 | }, 2185 | "@vitest/ui": { 2186 | "optional": true 2187 | }, 2188 | "happy-dom": { 2189 | "optional": true 2190 | }, 2191 | "jsdom": { 2192 | "optional": true 2193 | } 2194 | } 2195 | }, 2196 | "node_modules/why-is-node-running": { 2197 | "version": "2.2.2", 2198 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 2199 | "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 2200 | "dev": true, 2201 | "dependencies": { 2202 | "siginfo": "^2.0.0", 2203 | "stackback": "0.0.2" 2204 | }, 2205 | "bin": { 2206 | "why-is-node-running": "cli.js" 2207 | }, 2208 | "engines": { 2209 | "node": ">=8" 2210 | } 2211 | } 2212 | }, 2213 | "dependencies": { 2214 | "@esbuild-plugins/node-globals-polyfill": { 2215 | "version": "0.2.3", 2216 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", 2217 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", 2218 | "requires": {} 2219 | }, 2220 | "@esbuild-plugins/node-modules-polyfill": { 2221 | "version": "0.2.2", 2222 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", 2223 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", 2224 | "requires": { 2225 | "escape-string-regexp": "^4.0.0", 2226 | "rollup-plugin-node-polyfills": "^0.2.1" 2227 | } 2228 | }, 2229 | "@esbuild/android-arm": { 2230 | "version": "0.17.5", 2231 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.5.tgz", 2232 | "integrity": "sha512-crmPUzgCmF+qZXfl1YkiFoUta2XAfixR1tEnr/gXIixE+WL8Z0BGqfydP5oox0EUOgQMMRgtATtakyAcClQVqQ==", 2233 | "optional": true 2234 | }, 2235 | "@esbuild/android-arm64": { 2236 | "version": "0.17.5", 2237 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.5.tgz", 2238 | "integrity": "sha512-KHWkDqYAMmKZjY4RAN1PR96q6UOtfkWlTS8uEwWxdLtkRt/0F/csUhXIrVfaSIFxnscIBMPynGfhsMwQDRIBQw==", 2239 | "optional": true 2240 | }, 2241 | "@esbuild/android-x64": { 2242 | "version": "0.17.5", 2243 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.5.tgz", 2244 | "integrity": "sha512-8fI/AnIdmWz/+1iza2WrCw8kwXK9wZp/yZY/iS8ioC+U37yJCeppi9EHY05ewJKN64ASoBIseufZROtcFnX5GA==", 2245 | "optional": true 2246 | }, 2247 | "@esbuild/darwin-arm64": { 2248 | "version": "0.17.5", 2249 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.5.tgz", 2250 | "integrity": "sha512-EAvaoyIySV6Iif3NQCglUNpnMfHSUgC5ugt2efl3+QDntucJe5spn0udNZjTgNi6tKVqSceOw9tQ32liNZc1Xw==", 2251 | "optional": true 2252 | }, 2253 | "@esbuild/darwin-x64": { 2254 | "version": "0.17.5", 2255 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.5.tgz", 2256 | "integrity": "sha512-ha7QCJh1fuSwwCgoegfdaljowwWozwTDjBgjD3++WAy/qwee5uUi1gvOg2WENJC6EUyHBOkcd3YmLDYSZ2TPPA==", 2257 | "optional": true 2258 | }, 2259 | "@esbuild/freebsd-arm64": { 2260 | "version": "0.17.5", 2261 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.5.tgz", 2262 | "integrity": "sha512-VbdXJkn2aI2pQ/wxNEjEcnEDwPpxt3CWWMFYmO7CcdFBoOsABRy2W8F3kjbF9F/pecEUDcI3b5i2w+By4VQFPg==", 2263 | "optional": true 2264 | }, 2265 | "@esbuild/freebsd-x64": { 2266 | "version": "0.17.5", 2267 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.5.tgz", 2268 | "integrity": "sha512-olgGYND1/XnnWxwhjtY3/ryjOG/M4WfcA6XH8dBTH1cxMeBemMODXSFhkw71Kf4TeZFFTN25YOomaNh0vq2iXg==", 2269 | "optional": true 2270 | }, 2271 | "@esbuild/linux-arm": { 2272 | "version": "0.17.5", 2273 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.5.tgz", 2274 | "integrity": "sha512-YBdCyQwA3OQupi6W2/WO4FnI+NWFWe79cZEtlbqSESOHEg7a73htBIRiE6uHPQe7Yp5E4aALv+JxkRLGEUL7tw==", 2275 | "optional": true 2276 | }, 2277 | "@esbuild/linux-arm64": { 2278 | "version": "0.17.5", 2279 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.5.tgz", 2280 | "integrity": "sha512-8a0bqSwu3OlLCfu2FBbDNgQyBYdPJh1B9PvNX7jMaKGC9/KopgHs37t+pQqeMLzcyRqG6z55IGNQAMSlCpBuqg==", 2281 | "optional": true 2282 | }, 2283 | "@esbuild/linux-ia32": { 2284 | "version": "0.17.5", 2285 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.5.tgz", 2286 | "integrity": "sha512-uCwm1r/+NdP7vndctgq3PoZrnmhmnecWAr114GWMRwg2QMFFX+kIWnp7IO220/JLgnXK/jP7VKAFBGmeOYBQYQ==", 2287 | "optional": true 2288 | }, 2289 | "@esbuild/linux-loong64": { 2290 | "version": "0.17.5", 2291 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.5.tgz", 2292 | "integrity": "sha512-3YxhSBl5Sb6TtBjJu+HP93poBruFzgXmf3PVfIe4xOXMj1XpxboYZyw3W8BhoX/uwxzZz4K1I99jTE/5cgDT1g==", 2293 | "optional": true 2294 | }, 2295 | "@esbuild/linux-mips64el": { 2296 | "version": "0.17.5", 2297 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.5.tgz", 2298 | "integrity": "sha512-Hy5Z0YVWyYHdtQ5mfmfp8LdhVwGbwVuq8mHzLqrG16BaMgEmit2xKO+iDakHs+OetEx0EN/2mUzDdfdktI+Nmg==", 2299 | "optional": true 2300 | }, 2301 | "@esbuild/linux-ppc64": { 2302 | "version": "0.17.5", 2303 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.5.tgz", 2304 | "integrity": "sha512-5dbQvBLbU/Y3Q4ABc9gi23hww1mQcM7KZ9KBqabB7qhJswYMf8WrDDOSw3gdf3p+ffmijMd28mfVMvFucuECyg==", 2305 | "optional": true 2306 | }, 2307 | "@esbuild/linux-riscv64": { 2308 | "version": "0.17.5", 2309 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.5.tgz", 2310 | "integrity": "sha512-fp/KUB/ZPzEWGTEUgz9wIAKCqu7CjH1GqXUO2WJdik1UNBQ7Xzw7myIajpxztE4Csb9504ERiFMxZg5KZ6HlZQ==", 2311 | "optional": true 2312 | }, 2313 | "@esbuild/linux-s390x": { 2314 | "version": "0.17.5", 2315 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.5.tgz", 2316 | "integrity": "sha512-kRV3yw19YDqHTp8SfHXfObUFXlaiiw4o2lvT1XjsPZ++22GqZwSsYWJLjMi1Sl7j9qDlDUduWDze/nQx0d6Lzw==", 2317 | "optional": true 2318 | }, 2319 | "@esbuild/linux-x64": { 2320 | "version": "0.17.5", 2321 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.5.tgz", 2322 | "integrity": "sha512-vnxuhh9e4pbtABNLbT2ANW4uwQ/zvcHRCm1JxaYkzSehugoFd5iXyC4ci1nhXU13mxEwCnrnTIiiSGwa/uAF1g==", 2323 | "optional": true 2324 | }, 2325 | "@esbuild/netbsd-x64": { 2326 | "version": "0.17.5", 2327 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.5.tgz", 2328 | "integrity": "sha512-cigBpdiSx/vPy7doUyImsQQBnBjV5f1M99ZUlaJckDAJjgXWl6y9W17FIfJTy8TxosEF6MXq+fpLsitMGts2nA==", 2329 | "optional": true 2330 | }, 2331 | "@esbuild/openbsd-x64": { 2332 | "version": "0.17.5", 2333 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.5.tgz", 2334 | "integrity": "sha512-VdqRqPVIjjZfkf40LrqOaVuhw9EQiAZ/GNCSM2UplDkaIzYVsSnycxcFfAnHdWI8Gyt6dO15KHikbpxwx+xHbw==", 2335 | "optional": true 2336 | }, 2337 | "@esbuild/sunos-x64": { 2338 | "version": "0.17.5", 2339 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.5.tgz", 2340 | "integrity": "sha512-ItxPaJ3MBLtI4nK+mALLEoUs6amxsx+J1ibnfcYMkqaCqHST1AkF4aENpBehty3czqw64r/XqL+W9WqU6kc2Qw==", 2341 | "optional": true 2342 | }, 2343 | "@esbuild/win32-arm64": { 2344 | "version": "0.17.5", 2345 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.5.tgz", 2346 | "integrity": "sha512-4u2Q6qsJTYNFdS9zHoAi80spzf78C16m2wla4eJPh4kSbRv+BpXIfl6TmBSWupD8e47B1NrTfrOlEuco7mYQtg==", 2347 | "optional": true 2348 | }, 2349 | "@esbuild/win32-ia32": { 2350 | "version": "0.17.5", 2351 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.5.tgz", 2352 | "integrity": "sha512-KYlm+Xu9TXsfTWAcocLuISRtqxKp/Y9ZBVg6CEEj0O5J9mn7YvBKzAszo2j1ndyzUPk+op+Tie2PJeN+BnXGqQ==", 2353 | "optional": true 2354 | }, 2355 | "@esbuild/win32-x64": { 2356 | "version": "0.17.5", 2357 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.5.tgz", 2358 | "integrity": "sha512-XgA9qWRqby7xdYXuF6KALsn37QGBMHsdhmnpjfZtYxKxbTOwfnDM6MYi2WuUku5poNaX2n9XGVr20zgT/2QwCw==", 2359 | "optional": true 2360 | }, 2361 | "@hono/node-server": { 2362 | "version": "1.8.2", 2363 | "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.8.2.tgz", 2364 | "integrity": "sha512-h8l2TBLCPHZBUrrkosZ6L5CpBLj6zdESyF4B+zngiCDF7aZFQJ0alVbLx7jn8PCVi9EyoFf8a4hOZFi1tD95EA==" 2365 | }, 2366 | "@types/chai": { 2367 | "version": "4.3.4", 2368 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", 2369 | "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", 2370 | "dev": true 2371 | }, 2372 | "@types/chai-subset": { 2373 | "version": "1.3.3", 2374 | "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", 2375 | "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", 2376 | "dev": true, 2377 | "requires": { 2378 | "@types/chai": "*" 2379 | } 2380 | }, 2381 | "@types/node": { 2382 | "version": "18.14.5", 2383 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.5.tgz", 2384 | "integrity": "sha512-CRT4tMK/DHYhw1fcCEBwME9CSaZNclxfzVMe7GsO6ULSwsttbj70wSiX6rZdIjGblu93sTJxLdhNIT85KKI7Qw==", 2385 | "dev": true 2386 | }, 2387 | "@vitest/expect": { 2388 | "version": "0.29.2", 2389 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.2.tgz", 2390 | "integrity": "sha512-wjrdHB2ANTch3XKRhjWZN0UueFocH0cQbi2tR5Jtq60Nb3YOSmakjdAvUa2JFBu/o8Vjhj5cYbcMXkZxn1NzmA==", 2391 | "dev": true, 2392 | "requires": { 2393 | "@vitest/spy": "0.29.2", 2394 | "@vitest/utils": "0.29.2", 2395 | "chai": "^4.3.7" 2396 | } 2397 | }, 2398 | "@vitest/runner": { 2399 | "version": "0.29.2", 2400 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.2.tgz", 2401 | "integrity": "sha512-A1P65f5+6ru36AyHWORhuQBJrOOcmDuhzl5RsaMNFe2jEkoj0faEszQS4CtPU/LxUYVIazlUtZTY0OEZmyZBnA==", 2402 | "dev": true, 2403 | "requires": { 2404 | "@vitest/utils": "0.29.2", 2405 | "p-limit": "^4.0.0", 2406 | "pathe": "^1.1.0" 2407 | }, 2408 | "dependencies": { 2409 | "p-limit": { 2410 | "version": "4.0.0", 2411 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", 2412 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", 2413 | "dev": true, 2414 | "requires": { 2415 | "yocto-queue": "^1.0.0" 2416 | } 2417 | }, 2418 | "yocto-queue": { 2419 | "version": "1.0.0", 2420 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 2421 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 2422 | "dev": true 2423 | } 2424 | } 2425 | }, 2426 | "@vitest/spy": { 2427 | "version": "0.29.2", 2428 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.2.tgz", 2429 | "integrity": "sha512-Hc44ft5kaAytlGL2PyFwdAsufjbdOvHklwjNy/gy/saRbg9Kfkxfh+PklLm1H2Ib/p586RkQeNFKYuJInUssyw==", 2430 | "dev": true, 2431 | "requires": { 2432 | "tinyspy": "^1.0.2" 2433 | } 2434 | }, 2435 | "@vitest/utils": { 2436 | "version": "0.29.2", 2437 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.2.tgz", 2438 | "integrity": "sha512-F14/Uc+vCdclStS2KEoXJlOLAEyqRhnw0gM27iXw9bMTcyKRPJrQ+rlC6XZ125GIPvvKYMPpVxNhiou6PsEeYQ==", 2439 | "dev": true, 2440 | "requires": { 2441 | "cli-truncate": "^3.1.0", 2442 | "diff": "^5.1.0", 2443 | "loupe": "^2.3.6", 2444 | "picocolors": "^1.0.0", 2445 | "pretty-format": "^27.5.1" 2446 | }, 2447 | "dependencies": { 2448 | "ansi-styles": { 2449 | "version": "5.2.0", 2450 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 2451 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 2452 | "dev": true 2453 | }, 2454 | "pretty-format": { 2455 | "version": "27.5.1", 2456 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", 2457 | "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", 2458 | "dev": true, 2459 | "requires": { 2460 | "ansi-regex": "^5.0.1", 2461 | "ansi-styles": "^5.0.0", 2462 | "react-is": "^17.0.1" 2463 | } 2464 | }, 2465 | "react-is": { 2466 | "version": "17.0.2", 2467 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 2468 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 2469 | "dev": true 2470 | } 2471 | } 2472 | }, 2473 | "acorn": { 2474 | "version": "8.8.2", 2475 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 2476 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 2477 | "dev": true 2478 | }, 2479 | "acorn-walk": { 2480 | "version": "8.2.0", 2481 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 2482 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 2483 | "dev": true 2484 | }, 2485 | "ansi-regex": { 2486 | "version": "5.0.1", 2487 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2488 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2489 | "dev": true 2490 | }, 2491 | "asn1.js": { 2492 | "version": "5.4.1", 2493 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", 2494 | "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", 2495 | "requires": { 2496 | "bn.js": "^4.0.0", 2497 | "inherits": "^2.0.1", 2498 | "minimalistic-assert": "^1.0.0", 2499 | "safer-buffer": "^2.1.0" 2500 | }, 2501 | "dependencies": { 2502 | "bn.js": { 2503 | "version": "4.12.0", 2504 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 2505 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 2506 | } 2507 | } 2508 | }, 2509 | "assertion-error": { 2510 | "version": "1.1.0", 2511 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 2512 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 2513 | "dev": true 2514 | }, 2515 | "base64-js": { 2516 | "version": "1.5.1", 2517 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 2518 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 2519 | }, 2520 | "bn.js": { 2521 | "version": "5.2.1", 2522 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", 2523 | "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" 2524 | }, 2525 | "brorand": { 2526 | "version": "1.1.0", 2527 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 2528 | "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" 2529 | }, 2530 | "browserify-aes": { 2531 | "version": "1.2.0", 2532 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 2533 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 2534 | "requires": { 2535 | "buffer-xor": "^1.0.3", 2536 | "cipher-base": "^1.0.0", 2537 | "create-hash": "^1.1.0", 2538 | "evp_bytestokey": "^1.0.3", 2539 | "inherits": "^2.0.1", 2540 | "safe-buffer": "^5.0.1" 2541 | } 2542 | }, 2543 | "browserify-cipher": { 2544 | "version": "1.0.1", 2545 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 2546 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 2547 | "requires": { 2548 | "browserify-aes": "^1.0.4", 2549 | "browserify-des": "^1.0.0", 2550 | "evp_bytestokey": "^1.0.0" 2551 | } 2552 | }, 2553 | "browserify-des": { 2554 | "version": "1.0.2", 2555 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 2556 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 2557 | "requires": { 2558 | "cipher-base": "^1.0.1", 2559 | "des.js": "^1.0.0", 2560 | "inherits": "^2.0.1", 2561 | "safe-buffer": "^5.1.2" 2562 | } 2563 | }, 2564 | "browserify-rsa": { 2565 | "version": "4.1.0", 2566 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", 2567 | "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", 2568 | "requires": { 2569 | "bn.js": "^5.0.0", 2570 | "randombytes": "^2.0.1" 2571 | } 2572 | }, 2573 | "browserify-sign": { 2574 | "version": "4.2.1", 2575 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", 2576 | "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", 2577 | "requires": { 2578 | "bn.js": "^5.1.1", 2579 | "browserify-rsa": "^4.0.1", 2580 | "create-hash": "^1.2.0", 2581 | "create-hmac": "^1.1.7", 2582 | "elliptic": "^6.5.3", 2583 | "inherits": "^2.0.4", 2584 | "parse-asn1": "^5.1.5", 2585 | "readable-stream": "^3.6.0", 2586 | "safe-buffer": "^5.2.0" 2587 | } 2588 | }, 2589 | "buffer": { 2590 | "version": "6.0.3", 2591 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 2592 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 2593 | "requires": { 2594 | "base64-js": "^1.3.1", 2595 | "ieee754": "^1.2.1" 2596 | } 2597 | }, 2598 | "buffer-xor": { 2599 | "version": "1.0.3", 2600 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 2601 | "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" 2602 | }, 2603 | "cac": { 2604 | "version": "6.7.14", 2605 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 2606 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 2607 | "dev": true 2608 | }, 2609 | "chai": { 2610 | "version": "4.3.7", 2611 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", 2612 | "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", 2613 | "dev": true, 2614 | "requires": { 2615 | "assertion-error": "^1.1.0", 2616 | "check-error": "^1.0.2", 2617 | "deep-eql": "^4.1.2", 2618 | "get-func-name": "^2.0.0", 2619 | "loupe": "^2.3.1", 2620 | "pathval": "^1.1.1", 2621 | "type-detect": "^4.0.5" 2622 | } 2623 | }, 2624 | "check-error": { 2625 | "version": "1.0.2", 2626 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 2627 | "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", 2628 | "dev": true 2629 | }, 2630 | "cipher-base": { 2631 | "version": "1.0.4", 2632 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 2633 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 2634 | "requires": { 2635 | "inherits": "^2.0.1", 2636 | "safe-buffer": "^5.0.1" 2637 | } 2638 | }, 2639 | "cli-truncate": { 2640 | "version": "3.1.0", 2641 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", 2642 | "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", 2643 | "dev": true, 2644 | "requires": { 2645 | "slice-ansi": "^5.0.0", 2646 | "string-width": "^5.0.0" 2647 | }, 2648 | "dependencies": { 2649 | "ansi-regex": { 2650 | "version": "6.0.1", 2651 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 2652 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 2653 | "dev": true 2654 | }, 2655 | "emoji-regex": { 2656 | "version": "9.2.2", 2657 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 2658 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 2659 | "dev": true 2660 | }, 2661 | "string-width": { 2662 | "version": "5.1.2", 2663 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2664 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2665 | "dev": true, 2666 | "requires": { 2667 | "eastasianwidth": "^0.2.0", 2668 | "emoji-regex": "^9.2.2", 2669 | "strip-ansi": "^7.0.1" 2670 | } 2671 | }, 2672 | "strip-ansi": { 2673 | "version": "7.0.1", 2674 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 2675 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 2676 | "dev": true, 2677 | "requires": { 2678 | "ansi-regex": "^6.0.1" 2679 | } 2680 | } 2681 | } 2682 | }, 2683 | "core-js": { 2684 | "version": "3.27.2", 2685 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", 2686 | "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", 2687 | "dev": true 2688 | }, 2689 | "create-ecdh": { 2690 | "version": "4.0.4", 2691 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", 2692 | "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", 2693 | "requires": { 2694 | "bn.js": "^4.1.0", 2695 | "elliptic": "^6.5.3" 2696 | }, 2697 | "dependencies": { 2698 | "bn.js": { 2699 | "version": "4.12.0", 2700 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 2701 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 2702 | } 2703 | } 2704 | }, 2705 | "create-hash": { 2706 | "version": "1.2.0", 2707 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 2708 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 2709 | "requires": { 2710 | "cipher-base": "^1.0.1", 2711 | "inherits": "^2.0.1", 2712 | "md5.js": "^1.3.4", 2713 | "ripemd160": "^2.0.1", 2714 | "sha.js": "^2.4.0" 2715 | } 2716 | }, 2717 | "create-hmac": { 2718 | "version": "1.1.7", 2719 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 2720 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 2721 | "requires": { 2722 | "cipher-base": "^1.0.3", 2723 | "create-hash": "^1.1.0", 2724 | "inherits": "^2.0.1", 2725 | "ripemd160": "^2.0.0", 2726 | "safe-buffer": "^5.0.1", 2727 | "sha.js": "^2.4.8" 2728 | } 2729 | }, 2730 | "crypto-browserify": { 2731 | "version": "3.12.0", 2732 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 2733 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 2734 | "requires": { 2735 | "browserify-cipher": "^1.0.0", 2736 | "browserify-sign": "^4.0.0", 2737 | "create-ecdh": "^4.0.0", 2738 | "create-hash": "^1.1.0", 2739 | "create-hmac": "^1.1.0", 2740 | "diffie-hellman": "^5.0.0", 2741 | "inherits": "^2.0.1", 2742 | "pbkdf2": "^3.0.3", 2743 | "public-encrypt": "^4.0.0", 2744 | "randombytes": "^2.0.0", 2745 | "randomfill": "^1.0.3" 2746 | } 2747 | }, 2748 | "debug": { 2749 | "version": "4.3.4", 2750 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2751 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2752 | "dev": true, 2753 | "requires": { 2754 | "ms": "2.1.2" 2755 | } 2756 | }, 2757 | "deep-eql": { 2758 | "version": "4.1.3", 2759 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 2760 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 2761 | "dev": true, 2762 | "requires": { 2763 | "type-detect": "^4.0.0" 2764 | } 2765 | }, 2766 | "des.js": { 2767 | "version": "1.0.1", 2768 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 2769 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 2770 | "requires": { 2771 | "inherits": "^2.0.1", 2772 | "minimalistic-assert": "^1.0.0" 2773 | } 2774 | }, 2775 | "diff": { 2776 | "version": "5.1.0", 2777 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", 2778 | "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", 2779 | "dev": true 2780 | }, 2781 | "diffie-hellman": { 2782 | "version": "5.0.3", 2783 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 2784 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 2785 | "requires": { 2786 | "bn.js": "^4.1.0", 2787 | "miller-rabin": "^4.0.0", 2788 | "randombytes": "^2.0.0" 2789 | }, 2790 | "dependencies": { 2791 | "bn.js": { 2792 | "version": "4.12.0", 2793 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 2794 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 2795 | } 2796 | } 2797 | }, 2798 | "eastasianwidth": { 2799 | "version": "0.2.0", 2800 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 2801 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 2802 | "dev": true 2803 | }, 2804 | "elliptic": { 2805 | "version": "6.5.4", 2806 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 2807 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 2808 | "requires": { 2809 | "bn.js": "^4.11.9", 2810 | "brorand": "^1.1.0", 2811 | "hash.js": "^1.0.0", 2812 | "hmac-drbg": "^1.0.1", 2813 | "inherits": "^2.0.4", 2814 | "minimalistic-assert": "^1.0.1", 2815 | "minimalistic-crypto-utils": "^1.0.1" 2816 | }, 2817 | "dependencies": { 2818 | "bn.js": { 2819 | "version": "4.12.0", 2820 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 2821 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 2822 | } 2823 | } 2824 | }, 2825 | "esbuild": { 2826 | "version": "0.17.5", 2827 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.5.tgz", 2828 | "integrity": "sha512-Bu6WLCc9NMsNoMJUjGl3yBzTjVLXdysMltxQWiLAypP+/vQrf+3L1Xe8fCXzxaECus2cEJ9M7pk4yKatEwQMqQ==", 2829 | "requires": { 2830 | "@esbuild/android-arm": "0.17.5", 2831 | "@esbuild/android-arm64": "0.17.5", 2832 | "@esbuild/android-x64": "0.17.5", 2833 | "@esbuild/darwin-arm64": "0.17.5", 2834 | "@esbuild/darwin-x64": "0.17.5", 2835 | "@esbuild/freebsd-arm64": "0.17.5", 2836 | "@esbuild/freebsd-x64": "0.17.5", 2837 | "@esbuild/linux-arm": "0.17.5", 2838 | "@esbuild/linux-arm64": "0.17.5", 2839 | "@esbuild/linux-ia32": "0.17.5", 2840 | "@esbuild/linux-loong64": "0.17.5", 2841 | "@esbuild/linux-mips64el": "0.17.5", 2842 | "@esbuild/linux-ppc64": "0.17.5", 2843 | "@esbuild/linux-riscv64": "0.17.5", 2844 | "@esbuild/linux-s390x": "0.17.5", 2845 | "@esbuild/linux-x64": "0.17.5", 2846 | "@esbuild/netbsd-x64": "0.17.5", 2847 | "@esbuild/openbsd-x64": "0.17.5", 2848 | "@esbuild/sunos-x64": "0.17.5", 2849 | "@esbuild/win32-arm64": "0.17.5", 2850 | "@esbuild/win32-ia32": "0.17.5", 2851 | "@esbuild/win32-x64": "0.17.5" 2852 | } 2853 | }, 2854 | "esbuild-plugin-resolve": { 2855 | "version": "1.0.3", 2856 | "resolved": "https://registry.npmjs.org/esbuild-plugin-resolve/-/esbuild-plugin-resolve-1.0.3.tgz", 2857 | "integrity": "sha512-DHtwExowoWa5rC+mLVppGqe4MiFCZsKEeNgps4UAOKqmu3CjUgyyFjw+AHXteGCRdCJID76OsUuyGi2cOLIxUQ==", 2858 | "dev": true 2859 | }, 2860 | "esbuild-plugin-text-replace": { 2861 | "version": "1.2.0", 2862 | "resolved": "https://registry.npmjs.org/esbuild-plugin-text-replace/-/esbuild-plugin-text-replace-1.2.0.tgz", 2863 | "integrity": "sha512-04kdAMjxqGG+TEV/F+uGQVMFZlh65Eb11xo8b532io8FjOg5x2faoCXGicJo97BovXYARCPUhiZEECKZrFQq7Q==", 2864 | "dev": true, 2865 | "requires": { 2866 | "ts-replace-all": "^1.0.0" 2867 | } 2868 | }, 2869 | "escape-string-regexp": { 2870 | "version": "4.0.0", 2871 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2872 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 2873 | }, 2874 | "estree-walker": { 2875 | "version": "0.6.1", 2876 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 2877 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" 2878 | }, 2879 | "evp_bytestokey": { 2880 | "version": "1.0.3", 2881 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 2882 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 2883 | "requires": { 2884 | "md5.js": "^1.3.4", 2885 | "safe-buffer": "^5.1.1" 2886 | } 2887 | }, 2888 | "fsevents": { 2889 | "version": "2.3.2", 2890 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2891 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2892 | "dev": true, 2893 | "optional": true 2894 | }, 2895 | "function-bind": { 2896 | "version": "1.1.1", 2897 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2898 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2899 | "dev": true 2900 | }, 2901 | "get-func-name": { 2902 | "version": "2.0.0", 2903 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 2904 | "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", 2905 | "dev": true 2906 | }, 2907 | "has": { 2908 | "version": "1.0.3", 2909 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2910 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2911 | "dev": true, 2912 | "requires": { 2913 | "function-bind": "^1.1.1" 2914 | } 2915 | }, 2916 | "hash-base": { 2917 | "version": "3.1.0", 2918 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", 2919 | "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", 2920 | "requires": { 2921 | "inherits": "^2.0.4", 2922 | "readable-stream": "^3.6.0", 2923 | "safe-buffer": "^5.2.0" 2924 | } 2925 | }, 2926 | "hash.js": { 2927 | "version": "1.1.7", 2928 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 2929 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 2930 | "requires": { 2931 | "inherits": "^2.0.3", 2932 | "minimalistic-assert": "^1.0.1" 2933 | } 2934 | }, 2935 | "hmac-drbg": { 2936 | "version": "1.0.1", 2937 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 2938 | "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", 2939 | "requires": { 2940 | "hash.js": "^1.0.3", 2941 | "minimalistic-assert": "^1.0.0", 2942 | "minimalistic-crypto-utils": "^1.0.1" 2943 | } 2944 | }, 2945 | "hono": { 2946 | "version": "4.1.0", 2947 | "resolved": "https://registry.npmjs.org/hono/-/hono-4.1.0.tgz", 2948 | "integrity": "sha512-9no6DCHb4ijB1tWdFXU6JnrnFgzwVZ1cnIcS1BjAFnMcjbtBTOMsQrDrPH3GXbkNEEEkj8kWqcYBy8Qc0bBkJQ==" 2949 | }, 2950 | "ieee754": { 2951 | "version": "1.2.1", 2952 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 2953 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 2954 | }, 2955 | "inherits": { 2956 | "version": "2.0.4", 2957 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2958 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2959 | }, 2960 | "is-core-module": { 2961 | "version": "2.11.0", 2962 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 2963 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 2964 | "dev": true, 2965 | "requires": { 2966 | "has": "^1.0.3" 2967 | } 2968 | }, 2969 | "jsonc-parser": { 2970 | "version": "3.2.0", 2971 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", 2972 | "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", 2973 | "dev": true 2974 | }, 2975 | "local-pkg": { 2976 | "version": "0.4.3", 2977 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", 2978 | "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", 2979 | "dev": true 2980 | }, 2981 | "loupe": { 2982 | "version": "2.3.6", 2983 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", 2984 | "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", 2985 | "dev": true, 2986 | "requires": { 2987 | "get-func-name": "^2.0.0" 2988 | } 2989 | }, 2990 | "magic-string": { 2991 | "version": "0.25.9", 2992 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 2993 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 2994 | "requires": { 2995 | "sourcemap-codec": "^1.4.8" 2996 | } 2997 | }, 2998 | "md5.js": { 2999 | "version": "1.3.5", 3000 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 3001 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 3002 | "requires": { 3003 | "hash-base": "^3.0.0", 3004 | "inherits": "^2.0.1", 3005 | "safe-buffer": "^5.1.2" 3006 | } 3007 | }, 3008 | "miller-rabin": { 3009 | "version": "4.0.1", 3010 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 3011 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 3012 | "requires": { 3013 | "bn.js": "^4.0.0", 3014 | "brorand": "^1.0.1" 3015 | }, 3016 | "dependencies": { 3017 | "bn.js": { 3018 | "version": "4.12.0", 3019 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 3020 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 3021 | } 3022 | } 3023 | }, 3024 | "minimalistic-assert": { 3025 | "version": "1.0.1", 3026 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 3027 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 3028 | }, 3029 | "minimalistic-crypto-utils": { 3030 | "version": "1.0.1", 3031 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 3032 | "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" 3033 | }, 3034 | "mlly": { 3035 | "version": "1.1.1", 3036 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.1.1.tgz", 3037 | "integrity": "sha512-Jnlh4W/aI4GySPo6+DyTN17Q75KKbLTyFK8BrGhjNP4rxuUjbRWhE6gHg3bs33URWAF44FRm7gdQA348i3XxRw==", 3038 | "dev": true, 3039 | "requires": { 3040 | "acorn": "^8.8.2", 3041 | "pathe": "^1.1.0", 3042 | "pkg-types": "^1.0.1", 3043 | "ufo": "^1.1.0" 3044 | } 3045 | }, 3046 | "ms": { 3047 | "version": "2.1.2", 3048 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3049 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3050 | "dev": true 3051 | }, 3052 | "nanoid": { 3053 | "version": "4.0.0", 3054 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", 3055 | "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==" 3056 | }, 3057 | "parse-asn1": { 3058 | "version": "5.1.6", 3059 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", 3060 | "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", 3061 | "requires": { 3062 | "asn1.js": "^5.2.0", 3063 | "browserify-aes": "^1.0.0", 3064 | "evp_bytestokey": "^1.0.0", 3065 | "pbkdf2": "^3.0.3", 3066 | "safe-buffer": "^5.1.1" 3067 | } 3068 | }, 3069 | "path-parse": { 3070 | "version": "1.0.7", 3071 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3072 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 3073 | "dev": true 3074 | }, 3075 | "pathe": { 3076 | "version": "1.1.0", 3077 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", 3078 | "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", 3079 | "dev": true 3080 | }, 3081 | "pathval": { 3082 | "version": "1.1.1", 3083 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 3084 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 3085 | "dev": true 3086 | }, 3087 | "pbkdf2": { 3088 | "version": "3.1.2", 3089 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", 3090 | "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", 3091 | "requires": { 3092 | "create-hash": "^1.1.2", 3093 | "create-hmac": "^1.1.4", 3094 | "ripemd160": "^2.0.1", 3095 | "safe-buffer": "^5.0.1", 3096 | "sha.js": "^2.4.8" 3097 | } 3098 | }, 3099 | "picocolors": { 3100 | "version": "1.0.0", 3101 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 3102 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 3103 | "dev": true 3104 | }, 3105 | "pkg-types": { 3106 | "version": "1.0.2", 3107 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", 3108 | "integrity": "sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==", 3109 | "dev": true, 3110 | "requires": { 3111 | "jsonc-parser": "^3.2.0", 3112 | "mlly": "^1.1.1", 3113 | "pathe": "^1.1.0" 3114 | } 3115 | }, 3116 | "postcss": { 3117 | "version": "8.4.21", 3118 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 3119 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 3120 | "dev": true, 3121 | "requires": { 3122 | "nanoid": "^3.3.4", 3123 | "picocolors": "^1.0.0", 3124 | "source-map-js": "^1.0.2" 3125 | }, 3126 | "dependencies": { 3127 | "nanoid": { 3128 | "version": "3.3.4", 3129 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 3130 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 3131 | "dev": true 3132 | } 3133 | } 3134 | }, 3135 | "public-encrypt": { 3136 | "version": "4.0.3", 3137 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 3138 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 3139 | "requires": { 3140 | "bn.js": "^4.1.0", 3141 | "browserify-rsa": "^4.0.0", 3142 | "create-hash": "^1.1.0", 3143 | "parse-asn1": "^5.0.0", 3144 | "randombytes": "^2.0.1", 3145 | "safe-buffer": "^5.1.2" 3146 | }, 3147 | "dependencies": { 3148 | "bn.js": { 3149 | "version": "4.12.0", 3150 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 3151 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 3152 | } 3153 | } 3154 | }, 3155 | "randombytes": { 3156 | "version": "2.1.0", 3157 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 3158 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 3159 | "requires": { 3160 | "safe-buffer": "^5.1.0" 3161 | } 3162 | }, 3163 | "randomfill": { 3164 | "version": "1.0.4", 3165 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 3166 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 3167 | "requires": { 3168 | "randombytes": "^2.0.5", 3169 | "safe-buffer": "^5.1.0" 3170 | } 3171 | }, 3172 | "readable-stream": { 3173 | "version": "3.6.0", 3174 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 3175 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 3176 | "requires": { 3177 | "inherits": "^2.0.3", 3178 | "string_decoder": "^1.1.1", 3179 | "util-deprecate": "^1.0.1" 3180 | } 3181 | }, 3182 | "resolve": { 3183 | "version": "1.22.1", 3184 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 3185 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 3186 | "dev": true, 3187 | "requires": { 3188 | "is-core-module": "^2.9.0", 3189 | "path-parse": "^1.0.7", 3190 | "supports-preserve-symlinks-flag": "^1.0.0" 3191 | } 3192 | }, 3193 | "ripemd160": { 3194 | "version": "2.0.2", 3195 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 3196 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 3197 | "requires": { 3198 | "hash-base": "^3.0.0", 3199 | "inherits": "^2.0.1" 3200 | } 3201 | }, 3202 | "rollup": { 3203 | "version": "3.18.0", 3204 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.18.0.tgz", 3205 | "integrity": "sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==", 3206 | "dev": true, 3207 | "requires": { 3208 | "fsevents": "~2.3.2" 3209 | } 3210 | }, 3211 | "rollup-plugin-inject": { 3212 | "version": "3.0.2", 3213 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 3214 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 3215 | "requires": { 3216 | "estree-walker": "^0.6.1", 3217 | "magic-string": "^0.25.3", 3218 | "rollup-pluginutils": "^2.8.1" 3219 | } 3220 | }, 3221 | "rollup-plugin-node-polyfills": { 3222 | "version": "0.2.1", 3223 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 3224 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 3225 | "requires": { 3226 | "rollup-plugin-inject": "^3.0.0" 3227 | } 3228 | }, 3229 | "rollup-pluginutils": { 3230 | "version": "2.8.2", 3231 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 3232 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 3233 | "requires": { 3234 | "estree-walker": "^0.6.1" 3235 | } 3236 | }, 3237 | "safe-buffer": { 3238 | "version": "5.2.1", 3239 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3240 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 3241 | }, 3242 | "safer-buffer": { 3243 | "version": "2.1.2", 3244 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3245 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 3246 | }, 3247 | "sha.js": { 3248 | "version": "2.4.11", 3249 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 3250 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 3251 | "requires": { 3252 | "inherits": "^2.0.1", 3253 | "safe-buffer": "^5.0.1" 3254 | } 3255 | }, 3256 | "siginfo": { 3257 | "version": "2.0.0", 3258 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 3259 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 3260 | "dev": true 3261 | }, 3262 | "slice-ansi": { 3263 | "version": "5.0.0", 3264 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 3265 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 3266 | "dev": true, 3267 | "requires": { 3268 | "ansi-styles": "^6.0.0", 3269 | "is-fullwidth-code-point": "^4.0.0" 3270 | }, 3271 | "dependencies": { 3272 | "ansi-styles": { 3273 | "version": "6.2.1", 3274 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 3275 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 3276 | "dev": true 3277 | }, 3278 | "is-fullwidth-code-point": { 3279 | "version": "4.0.0", 3280 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 3281 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 3282 | "dev": true 3283 | } 3284 | } 3285 | }, 3286 | "source-map": { 3287 | "version": "0.6.1", 3288 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3289 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3290 | "dev": true 3291 | }, 3292 | "source-map-js": { 3293 | "version": "1.0.2", 3294 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 3295 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 3296 | "dev": true 3297 | }, 3298 | "sourcemap-codec": { 3299 | "version": "1.4.8", 3300 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 3301 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 3302 | }, 3303 | "stackback": { 3304 | "version": "0.0.2", 3305 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 3306 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 3307 | "dev": true 3308 | }, 3309 | "std-env": { 3310 | "version": "3.3.2", 3311 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", 3312 | "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==", 3313 | "dev": true 3314 | }, 3315 | "string_decoder": { 3316 | "version": "1.3.0", 3317 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 3318 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 3319 | "requires": { 3320 | "safe-buffer": "~5.2.0" 3321 | } 3322 | }, 3323 | "strip-literal": { 3324 | "version": "1.0.1", 3325 | "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", 3326 | "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", 3327 | "dev": true, 3328 | "requires": { 3329 | "acorn": "^8.8.2" 3330 | } 3331 | }, 3332 | "supports-preserve-symlinks-flag": { 3333 | "version": "1.0.0", 3334 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3335 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3336 | "dev": true 3337 | }, 3338 | "tinybench": { 3339 | "version": "2.4.0", 3340 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.4.0.tgz", 3341 | "integrity": "sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==", 3342 | "dev": true 3343 | }, 3344 | "tinypool": { 3345 | "version": "0.3.1", 3346 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", 3347 | "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", 3348 | "dev": true 3349 | }, 3350 | "tinyspy": { 3351 | "version": "1.1.1", 3352 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.1.1.tgz", 3353 | "integrity": "sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==", 3354 | "dev": true 3355 | }, 3356 | "ts-replace-all": { 3357 | "version": "1.0.0", 3358 | "resolved": "https://registry.npmjs.org/ts-replace-all/-/ts-replace-all-1.0.0.tgz", 3359 | "integrity": "sha512-6uBtdkw3jHXkPtx/e9xB/5vcngMm17CyJYsS2YZeQ+9FdRnt6Ev5g931Sg2p+dxbtMGoCm13m3ax/obicTZIkQ==", 3360 | "dev": true, 3361 | "requires": { 3362 | "core-js": "^3.4.1" 3363 | } 3364 | }, 3365 | "type-detect": { 3366 | "version": "4.0.8", 3367 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 3368 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 3369 | "dev": true 3370 | }, 3371 | "ufo": { 3372 | "version": "1.1.1", 3373 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.1.tgz", 3374 | "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", 3375 | "dev": true 3376 | }, 3377 | "util-deprecate": { 3378 | "version": "1.0.2", 3379 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3380 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 3381 | }, 3382 | "vite": { 3383 | "version": "4.1.4", 3384 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", 3385 | "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", 3386 | "dev": true, 3387 | "requires": { 3388 | "esbuild": "^0.16.14", 3389 | "fsevents": "~2.3.2", 3390 | "postcss": "^8.4.21", 3391 | "resolve": "^1.22.1", 3392 | "rollup": "^3.10.0" 3393 | }, 3394 | "dependencies": { 3395 | "@esbuild/android-arm": { 3396 | "version": "0.16.17", 3397 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", 3398 | "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", 3399 | "dev": true, 3400 | "optional": true 3401 | }, 3402 | "@esbuild/android-arm64": { 3403 | "version": "0.16.17", 3404 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", 3405 | "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", 3406 | "dev": true, 3407 | "optional": true 3408 | }, 3409 | "@esbuild/android-x64": { 3410 | "version": "0.16.17", 3411 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", 3412 | "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", 3413 | "dev": true, 3414 | "optional": true 3415 | }, 3416 | "@esbuild/darwin-arm64": { 3417 | "version": "0.16.17", 3418 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", 3419 | "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", 3420 | "dev": true, 3421 | "optional": true 3422 | }, 3423 | "@esbuild/darwin-x64": { 3424 | "version": "0.16.17", 3425 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", 3426 | "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", 3427 | "dev": true, 3428 | "optional": true 3429 | }, 3430 | "@esbuild/freebsd-arm64": { 3431 | "version": "0.16.17", 3432 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", 3433 | "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", 3434 | "dev": true, 3435 | "optional": true 3436 | }, 3437 | "@esbuild/freebsd-x64": { 3438 | "version": "0.16.17", 3439 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", 3440 | "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", 3441 | "dev": true, 3442 | "optional": true 3443 | }, 3444 | "@esbuild/linux-arm": { 3445 | "version": "0.16.17", 3446 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", 3447 | "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", 3448 | "dev": true, 3449 | "optional": true 3450 | }, 3451 | "@esbuild/linux-arm64": { 3452 | "version": "0.16.17", 3453 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", 3454 | "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", 3455 | "dev": true, 3456 | "optional": true 3457 | }, 3458 | "@esbuild/linux-ia32": { 3459 | "version": "0.16.17", 3460 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", 3461 | "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", 3462 | "dev": true, 3463 | "optional": true 3464 | }, 3465 | "@esbuild/linux-loong64": { 3466 | "version": "0.16.17", 3467 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", 3468 | "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", 3469 | "dev": true, 3470 | "optional": true 3471 | }, 3472 | "@esbuild/linux-mips64el": { 3473 | "version": "0.16.17", 3474 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", 3475 | "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", 3476 | "dev": true, 3477 | "optional": true 3478 | }, 3479 | "@esbuild/linux-ppc64": { 3480 | "version": "0.16.17", 3481 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", 3482 | "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", 3483 | "dev": true, 3484 | "optional": true 3485 | }, 3486 | "@esbuild/linux-riscv64": { 3487 | "version": "0.16.17", 3488 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", 3489 | "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", 3490 | "dev": true, 3491 | "optional": true 3492 | }, 3493 | "@esbuild/linux-s390x": { 3494 | "version": "0.16.17", 3495 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", 3496 | "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", 3497 | "dev": true, 3498 | "optional": true 3499 | }, 3500 | "@esbuild/linux-x64": { 3501 | "version": "0.16.17", 3502 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", 3503 | "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", 3504 | "dev": true, 3505 | "optional": true 3506 | }, 3507 | "@esbuild/netbsd-x64": { 3508 | "version": "0.16.17", 3509 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", 3510 | "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", 3511 | "dev": true, 3512 | "optional": true 3513 | }, 3514 | "@esbuild/openbsd-x64": { 3515 | "version": "0.16.17", 3516 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", 3517 | "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", 3518 | "dev": true, 3519 | "optional": true 3520 | }, 3521 | "@esbuild/sunos-x64": { 3522 | "version": "0.16.17", 3523 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", 3524 | "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", 3525 | "dev": true, 3526 | "optional": true 3527 | }, 3528 | "@esbuild/win32-arm64": { 3529 | "version": "0.16.17", 3530 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", 3531 | "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", 3532 | "dev": true, 3533 | "optional": true 3534 | }, 3535 | "@esbuild/win32-ia32": { 3536 | "version": "0.16.17", 3537 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", 3538 | "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", 3539 | "dev": true, 3540 | "optional": true 3541 | }, 3542 | "@esbuild/win32-x64": { 3543 | "version": "0.16.17", 3544 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", 3545 | "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", 3546 | "dev": true, 3547 | "optional": true 3548 | }, 3549 | "esbuild": { 3550 | "version": "0.16.17", 3551 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", 3552 | "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", 3553 | "dev": true, 3554 | "requires": { 3555 | "@esbuild/android-arm": "0.16.17", 3556 | "@esbuild/android-arm64": "0.16.17", 3557 | "@esbuild/android-x64": "0.16.17", 3558 | "@esbuild/darwin-arm64": "0.16.17", 3559 | "@esbuild/darwin-x64": "0.16.17", 3560 | "@esbuild/freebsd-arm64": "0.16.17", 3561 | "@esbuild/freebsd-x64": "0.16.17", 3562 | "@esbuild/linux-arm": "0.16.17", 3563 | "@esbuild/linux-arm64": "0.16.17", 3564 | "@esbuild/linux-ia32": "0.16.17", 3565 | "@esbuild/linux-loong64": "0.16.17", 3566 | "@esbuild/linux-mips64el": "0.16.17", 3567 | "@esbuild/linux-ppc64": "0.16.17", 3568 | "@esbuild/linux-riscv64": "0.16.17", 3569 | "@esbuild/linux-s390x": "0.16.17", 3570 | "@esbuild/linux-x64": "0.16.17", 3571 | "@esbuild/netbsd-x64": "0.16.17", 3572 | "@esbuild/openbsd-x64": "0.16.17", 3573 | "@esbuild/sunos-x64": "0.16.17", 3574 | "@esbuild/win32-arm64": "0.16.17", 3575 | "@esbuild/win32-ia32": "0.16.17", 3576 | "@esbuild/win32-x64": "0.16.17" 3577 | } 3578 | } 3579 | } 3580 | }, 3581 | "vite-node": { 3582 | "version": "0.29.2", 3583 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.2.tgz", 3584 | "integrity": "sha512-5oe1z6wzI3gkvc4yOBbDBbgpiWiApvuN4P55E8OI131JGrSuo4X3SOZrNmZYo4R8Zkze/dhi572blX0zc+6SdA==", 3585 | "dev": true, 3586 | "requires": { 3587 | "cac": "^6.7.14", 3588 | "debug": "^4.3.4", 3589 | "mlly": "^1.1.0", 3590 | "pathe": "^1.1.0", 3591 | "picocolors": "^1.0.0", 3592 | "vite": "^3.0.0 || ^4.0.0" 3593 | } 3594 | }, 3595 | "vitest": { 3596 | "version": "0.29.2", 3597 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.2.tgz", 3598 | "integrity": "sha512-ydK9IGbAvoY8wkg29DQ4ivcVviCaUi3ivuPKfZEVddMTenFHUfB8EEDXQV8+RasEk1ACFLgMUqAaDuQ/Nk+mQA==", 3599 | "dev": true, 3600 | "requires": { 3601 | "@types/chai": "^4.3.4", 3602 | "@types/chai-subset": "^1.3.3", 3603 | "@types/node": "*", 3604 | "@vitest/expect": "0.29.2", 3605 | "@vitest/runner": "0.29.2", 3606 | "@vitest/spy": "0.29.2", 3607 | "@vitest/utils": "0.29.2", 3608 | "acorn": "^8.8.1", 3609 | "acorn-walk": "^8.2.0", 3610 | "cac": "^6.7.14", 3611 | "chai": "^4.3.7", 3612 | "debug": "^4.3.4", 3613 | "local-pkg": "^0.4.2", 3614 | "pathe": "^1.1.0", 3615 | "picocolors": "^1.0.0", 3616 | "source-map": "^0.6.1", 3617 | "std-env": "^3.3.1", 3618 | "strip-literal": "^1.0.0", 3619 | "tinybench": "^2.3.1", 3620 | "tinypool": "^0.3.1", 3621 | "tinyspy": "^1.0.2", 3622 | "vite": "^3.0.0 || ^4.0.0", 3623 | "vite-node": "0.29.2", 3624 | "why-is-node-running": "^2.2.2" 3625 | } 3626 | }, 3627 | "why-is-node-running": { 3628 | "version": "2.2.2", 3629 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 3630 | "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 3631 | "dev": true, 3632 | "requires": { 3633 | "siginfo": "^2.0.0", 3634 | "stackback": "0.0.2" 3635 | } 3636 | } 3637 | } 3638 | } 3639 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "meting-backend-js", 3 | "version": "1.1.2", 4 | "description": "", 5 | "main": "node.js", 6 | "scripts": { 7 | "build:all": "node esbuild.config.js", 8 | "start:node": "node node.js", 9 | "start:deno": "deno run --allow-net --allow-env dist/deno.js", 10 | "test": "vitest run", 11 | "patch": "npm version patch && git push origin main && git push origin --tags", 12 | "minor": "npm version minor && git push origin main && git push origin --tags", 13 | "major": "npm version major && git push origin main && git push origin --tags" 14 | }, 15 | "engines": { 16 | "node": ">=18.0.0" 17 | }, 18 | "type": "module", 19 | "author": "xizeyoupan", 20 | "license": "MIT", 21 | "devDependencies": { 22 | "esbuild-plugin-resolve": "^1.0.3", 23 | "esbuild-plugin-text-replace": "^1.2.0", 24 | "vitest": "^0.29.2" 25 | }, 26 | "dependencies": { 27 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3", 28 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2", 29 | "@hono/node-server": "^1.8.2", 30 | "buffer": "^6.0.3", 31 | "crypto-browserify": "^3.12.0", 32 | "esbuild": "0.17.5", 33 | "hono": "^4.1.0", 34 | "nanoid": "^4.0.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /scripts/docker/test-docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | MAX_RETRIES=10 4 | 5 | # Try running the docker and get the output 6 | # then try getting /api 7 | 8 | docker run -d -p 3000:3000 meting-api:${TAG} 9 | 10 | if [[ $? -ne 0 ]] 11 | then 12 | echo "Fail to run docker" 13 | exit 1 14 | fi 15 | 16 | RETRY=1 17 | 18 | HTTP_CODE=$(curl -m 10 localhost:3000/api -w "%{http_code}" -o /dev/null) 19 | while [[ $? -ne 0 || "$HTTP_CODE" -ne 200 ]] && [[ $RETRY -lt $MAX_RETRIES ]]; do 20 | echo "HTTP_CODE: ${HTTP_CODE}" 21 | sleep 5 22 | ((RETRY++)) 23 | echo "RETRY: ${RETRY}" 24 | HTTP_CODE=$(curl -m 10 localhost:3000/api -w "%{http_code}" -o /dev/null) 25 | done 26 | 27 | if [[ $RETRY -gt $MAX_RETRIES ]]; then 28 | echo "Unable to run, aborted" 29 | exit 1 30 | else 31 | if [[ $HTTP_CODE -ne 200 ]]; then 32 | echo "Api error" 33 | exit 1 34 | else 35 | echo "Successfully acquire /api, passing" 36 | fi 37 | fi 38 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | import { get_runtime } from "./util.js" 2 | 3 | let OVERSEAS = globalThis?.Deno?.env?.get("OVERSEAS") || globalThis?.process?.env?.OVERSEAS 4 | const runtime = get_runtime() 5 | 6 | if (['cloudflare', 'vercel'].includes(runtime)) OVERSEAS = true 7 | 8 | const PORT = globalThis?.Deno?.env?.get("PORT") || globalThis?.process?.env?.PORT || 3000 9 | 10 | OVERSEAS = Boolean(OVERSEAS) 11 | 12 | export default { 13 | OVERSEAS, 14 | PORT, 15 | } 16 | -------------------------------------------------------------------------------- /src/example.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "tencent": { 3 | "playlist": { "show": true, "value": "7326220405" }, 4 | "song": { "show": true, "value": "002Rnpvi058Qdm" }, 5 | "lrc": { "show": false, "value": "000i26Sh1ZyiNU" }, 6 | "pic": { "show": false, "value": "002Rnpvi058Qdm" }, 7 | "url": { "show": false, "value": "002Rnpvi058Qdm" }, 8 | }, 9 | "netease": { 10 | "playlist": { "show": true, "value": "6907557348" }, 11 | "song": { "show": true, "value": "473403185" }, 12 | "artist": { "show": true, "value": "12441107" }, 13 | "lrc": { "show": false, "value": "2015217630" }, 14 | "url": { "show": false, "value": "473403185" }, 15 | "search": { "show": true, "value": "KN33S0XXX" }, 16 | }, 17 | // "ytmusic": { 18 | // "playlist": { "show": true, "value": "RDCLAK5uy_l12ynH8dyLsBmE11ToAHLm9P04NS2i9ME" }, 19 | // "song": { "show": true, "value": "G3s98l2-GXg" } 20 | // }, 21 | // "spotify": { 22 | // "playlist": { "show": true, "value": "4D7JFKXy4daI9tUVJfGVFF" }, 23 | // "song": { "show": true, "value": "5HU2Ddr33JPv7ZVI77M7D5" } 24 | // } 25 | } 26 | -------------------------------------------------------------------------------- /src/providers/index.js: -------------------------------------------------------------------------------- 1 | import tencent from "./tencent/index.js" 2 | import netease from './netease/index.js' 3 | import ytmusic from './ytmusic/index.js' 4 | import spotify from "./spotify/index.js" 5 | 6 | class Providers { 7 | 8 | constructor() { 9 | this.providers = {} 10 | 11 | tencent.register(this) 12 | netease.register(this) 13 | ytmusic.register(this) 14 | spotify.register(this) 15 | 16 | } 17 | 18 | register(provider_name, handle_obj) { 19 | this.providers[provider_name] = handle_obj 20 | } 21 | 22 | get(provider_name) { 23 | return this.providers[provider_name]; 24 | } 25 | 26 | get_provider_list() { 27 | return Object.keys(this.providers) 28 | } 29 | } 30 | 31 | export default Providers 32 | -------------------------------------------------------------------------------- /src/providers/netease/artist_songs.js: -------------------------------------------------------------------------------- 1 | import { request } from "./util.js" 2 | import { map_song_list } from "./util.js" 3 | 4 | export const get_artist_songs = async (id, cookie) => { 5 | id = parseInt(id) 6 | const data = { 7 | id, 8 | } 9 | 10 | const res = await request('POST', `https://music.163.com/api/artist/top/song`, data, { 11 | crypto: 'weapi', 12 | cookie: {}, 13 | }) 14 | 15 | return map_song_list(res) 16 | 17 | } 18 | 19 | // const res = await get_artist_songs("12441107"); 20 | // console.log(res) 21 | -------------------------------------------------------------------------------- /src/providers/netease/config.js: -------------------------------------------------------------------------------- 1 | const net_ease_anonymous_token = "de91e1f8119d32e01cc73efcb82c0a30c9137e8d4f88dbf5e3d7bf3f28998f21add2bc8204eeee5e56c0bbb8743574b46ca2c10c35dc172199bef9bf4d60ecdeab066bb4dc737d1c3324751bcc9aaf44c3061cd18d77b7a0" 2 | 3 | export { 4 | net_ease_anonymous_token, 5 | } 6 | -------------------------------------------------------------------------------- /src/providers/netease/crypto.js: -------------------------------------------------------------------------------- 1 | // import crypto from 'https://esm.sh/crypto-browserify@3.12.0' 2 | // import { Buffer } from 'https://esm.sh/buffer@6.0.3' 3 | 4 | import crypto from 'crypto-browserify' 5 | import { Buffer } from 'buffer/index.js' 6 | 7 | // import crypto from 'node:crypto' 8 | // import {Buffer} from 'node:buffer' 9 | 10 | const iv = Buffer.from('0102030405060708') 11 | const presetKey = Buffer.from('0CoJUm6Qyw8W8jud') 12 | const linuxapiKey = Buffer.from('rFgB&h#%2?^eDg:Q') 13 | const base62 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' 14 | const publicKey =`-----BEGIN PUBLIC KEY----- 15 | MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgtQn2JZ34ZC28NWYpAUd98iZ3 16 | 7BUrX/aKzmFbt7clFSs6sXqHauqKWqdtLkF2KexO40H1YTX8z2lSgBBOAxLsvakl 17 | V8k4cBFK9snQXE9/DDaFt6Rr7iVZMldczhC0JNgTz+SHXT6CBHuX3e9SdB1Ua44o 18 | ncaTWz7OBGLbCiK45wIDAQAB 19 | -----END PUBLIC KEY----- 20 | ` 21 | 22 | const eapiKey = 'e82ckenh8dichen8' 23 | 24 | const aesEncrypt = (buffer, mode, key, iv) => { 25 | const cipher = crypto.createCipheriv('aes-128-' + mode, key, iv) 26 | return Buffer.concat([cipher.update(buffer), cipher.final()]) 27 | } 28 | 29 | const rsaEncrypt = (buffer, key) => { 30 | buffer = Buffer.concat([Buffer.alloc(128 - buffer.length), buffer]) 31 | return crypto.publicEncrypt( 32 | { key: key, padding: crypto.constants.RSA_NO_PADDING }, 33 | buffer, 34 | ) 35 | } 36 | 37 | const weapi = (object) => { 38 | const text = JSON.stringify(object) 39 | const secretKey = crypto 40 | .randomBytes(16) 41 | .map((n) => base62.charAt(n % 62).charCodeAt()) 42 | return { 43 | params: aesEncrypt( 44 | Buffer.from( 45 | aesEncrypt(Buffer.from(text), 'cbc', presetKey, iv).toString('base64'), 46 | ), 47 | 'cbc', 48 | secretKey, 49 | iv, 50 | ).toString('base64'), 51 | encSecKey: rsaEncrypt(secretKey.reverse(), publicKey).toString('hex'), 52 | } 53 | } 54 | 55 | const linuxapi = (object) => { 56 | const text = JSON.stringify(object) 57 | return { 58 | eparams: aesEncrypt(Buffer.from(text), 'ecb', linuxapiKey, '') 59 | .toString('hex') 60 | .toUpperCase(), 61 | } 62 | } 63 | 64 | const eapi = (url, object) => { 65 | const text = typeof object === 'object' ? JSON.stringify(object) : object 66 | const message = `nobody${url}use${text}md5forencrypt` 67 | const digest = crypto.createHash('md5').update(message).digest('hex') 68 | const data = `${url}-36cd479b6b5-${text}-36cd479b6b5-${digest}` 69 | return { 70 | params: aesEncrypt(Buffer.from(data), 'ecb', eapiKey, '') 71 | .toString('hex') 72 | .toUpperCase(), 73 | } 74 | } 75 | 76 | const decrypt = (cipherBuffer) => { 77 | const decipher = crypto.createDecipheriv('aes-128-ecb', eapiKey, '') 78 | return Buffer.concat([decipher.update(cipherBuffer), decipher.final()]) 79 | } 80 | 81 | export default { weapi, linuxapi, eapi, decrypt } 82 | -------------------------------------------------------------------------------- /src/providers/netease/index.js: -------------------------------------------------------------------------------- 1 | import { get_playlist } from "./playlist.js" 2 | import { get_song_url, get_song_info } from "./song.js" 3 | import { get_lyric } from "./lyric.js" 4 | import { get_artist_songs } from "./artist_songs.js" 5 | import { get_search_songs } from "./search.js" 6 | 7 | const support_type = ['url', 'lrc', 'song', 'playlist', 'artist', 'search', 'pic'] 8 | 9 | const handle = async (type, id, cookie = '') => { 10 | let result; 11 | switch (type) { 12 | case 'lrc': 13 | result = await get_lyric(id) 14 | break 15 | case 'url': 16 | result = await get_song_url(id) 17 | break 18 | case 'pic': 19 | result = (await get_song_info(id))[0].pic 20 | break 21 | case 'song': 22 | result = await get_song_info(id) 23 | break 24 | case 'playlist': 25 | result = await get_playlist(id) 26 | break 27 | case 'artist': 28 | result = await get_artist_songs(id) 29 | break 30 | case 'search': 31 | result = await get_search_songs(id) 32 | break 33 | default: 34 | return -1; 35 | } 36 | return result 37 | } 38 | 39 | export default { 40 | register: (ctx) => { 41 | ctx.register('netease', { handle, support_type }) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/providers/netease/lyric.js: -------------------------------------------------------------------------------- 1 | import { request } from "./util.js" 2 | 3 | export const get_lyric = async (id, cookie) => { 4 | // query.cookie.os = 'ios' 5 | 6 | const data = { 7 | id: id, 8 | tv: -1, 9 | lv: -1, 10 | rv: -1, 11 | kv: -1, 12 | } 13 | const res = await request( 14 | 'POST', 15 | `https://music.163.com/api/song/lyric?_nmclfl=1`, 16 | data, 17 | { 18 | crypto: 'api', 19 | }, 20 | ) 21 | 22 | return { 23 | lyric: res.lrc?.lyric || '', 24 | tlyric: res.tlyric?.lyric || '' 25 | } 26 | } 27 | 28 | // const res = await get_lyric('2015217630') 29 | // console.log(res) -------------------------------------------------------------------------------- /src/providers/netease/playlist.js: -------------------------------------------------------------------------------- 1 | import { request } from './util.js' 2 | import { map_song_list } from "./util.js" 3 | 4 | export const get_playlist = async (id, cookie = '') => { 5 | const data = { 6 | id, 7 | n: 100000, 8 | s: 8, 9 | } 10 | //不放在data里面避免请求带上无用的数据 11 | let limit = 200 || Infinity 12 | let offset = 0 || 0 13 | 14 | let res = await request('POST', `https://music.163.com/api/v6/playlist/detail`, data, { crypto: 'api', }) 15 | 16 | let trackIds = res.playlist.trackIds 17 | 18 | let idsData = { 19 | c: 20 | '[' + 21 | trackIds 22 | .slice(offset, offset + limit) 23 | .map((item) => '{"id":' + item.id + '}') 24 | .join(',') + 25 | ']', 26 | } 27 | 28 | res = await request( 29 | 'POST', 30 | `https://music.163.com/api/v3/song/detail`, 31 | idsData, 32 | { crypto: 'weapi' } 33 | ) 34 | 35 | res = map_song_list(res) 36 | 37 | return res 38 | 39 | } 40 | 41 | // const res = await get_playlist(2787254569) 42 | // console.log(res) 43 | 44 | -------------------------------------------------------------------------------- /src/providers/netease/search.js: -------------------------------------------------------------------------------- 1 | import { request } from "./util.js" 2 | import { map_song_list } from "./util.js" 3 | 4 | export const get_search_songs = async (id, cookie) => { 5 | 6 | const data = { 7 | s: id, 8 | type: 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 9 | limit: 30, 10 | offset: 0, 11 | total: true, 12 | } 13 | 14 | const res = await request('POST', `https://interface.music.163.com/eapi/cloudsearch`, data, { 15 | crypto: 'eapi', 16 | cookie: {}, 17 | url: '/api/cloudsearch/pc' 18 | }) 19 | 20 | return map_song_list(res.result) 21 | 22 | } 23 | 24 | // const res = await get_search_songs("KN33S0XXX"); 25 | // console.log(res) 26 | -------------------------------------------------------------------------------- /src/providers/netease/song.js: -------------------------------------------------------------------------------- 1 | import { request } from "./util.js" 2 | import { map_song_list } from "./util.js" 3 | 4 | export const get_song_url = async (id, cookie = '') => { 5 | 6 | const data = { 7 | ids: '[' + id + ']', 8 | level: 'standard', 9 | encodeType: 'flac', 10 | } 11 | 12 | let res = {} 13 | 14 | try { 15 | res = await request( 16 | 'POST', 17 | `https://interface.music.163.com/eapi/song/enhance/player/url/v1`, 18 | data, 19 | { 20 | crypto: 'eapi', 21 | url: '/api/song/enhance/player/url/v1', 22 | cookie: {} 23 | }, 24 | ) 25 | } catch (e) { 26 | console.error(e) 27 | } 28 | 29 | const url = res.data && res.data[0]?.url?.replace('http://', 'https://') 30 | return url || `https://music.163.com/song/media/outer/url?id=${id}.mp3` 31 | 32 | } 33 | 34 | export const get_song_info = async (id, cookie = '') => { 35 | const ids = [id] 36 | const data = { 37 | c: '[' + ids.map((id) => '{"id":' + id + '}').join(',') + ']', 38 | } 39 | let res = await request('POST', `https://music.163.com/api/v3/song/detail`, data, { 40 | crypto: 'weapi', 41 | }) 42 | 43 | // console.log(res) 44 | 45 | if (!res.songs) { 46 | throw res 47 | } 48 | 49 | res = map_song_list(res) 50 | return res 51 | } 52 | 53 | 54 | // const res = await get_song_info('1874976923'); 55 | // const res = await get_song_url('1874976923'); 56 | // console.log(res) 57 | -------------------------------------------------------------------------------- /src/providers/netease/util.js: -------------------------------------------------------------------------------- 1 | import encrypt from './crypto.js' 2 | import { net_ease_anonymous_token } from './config.js' 3 | import { customAlphabet } from 'nanoid/non-secure' 4 | 5 | const nanoid = customAlphabet('1234567890abcdef', 32) 6 | 7 | const chooseUserAgent = (ua = false) => { 8 | const userAgentList = { 9 | mobile: [ 10 | // iOS 13.5.1 14.0 beta with safari 11 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', 12 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.', 13 | // iOS with qq micromsg 14 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML like Gecko) Mobile/14A456 QQ/6.5.7.408 V1_IPH_SQ_6.5.7_1_APP_A Pixel/750 Core/UIWebView NetType/4G Mem/103', 15 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.15(0x17000f27) NetType/WIFI Language/zh', 16 | // Android -> Huawei Xiaomi 17 | 'Mozilla/5.0 (Linux; Android 9; PCT-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.311 Mobile Safari/537.36', 18 | 'Mozilla/5.0 (Linux; U; Android 9; zh-cn; Redmi Note 8 Build/PKQ1.190616.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.5.22', 19 | // Android + qq micromsg 20 | 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2581 MMWEBSDK/200801 Mobile Safari/537.36 MMWEBID/3027 MicroMessenger/7.0.18.1740(0x27001235) Process/toolsmp WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64', 21 | 'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BKK-AL10 Build/HONORBKK-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.6 Mobile Safari/537.36', 22 | ], 23 | pc: [ 24 | // macOS 10.15.6 Firefox / Chrome / Safari 25 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0', 26 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36', 27 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15', 28 | // Windows 10 Firefox / Chrome / Edge 29 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0', 30 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36', 31 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/13.10586', 32 | // Linux 就算了 33 | ], 34 | } 35 | let realUserAgentList = 36 | userAgentList[ua] || userAgentList.mobile.concat(userAgentList.pc) 37 | return ['mobile', 'pc', false].indexOf(ua) > -1 38 | ? realUserAgentList[Math.floor(Math.random() * realUserAgentList.length)] 39 | : ua 40 | } 41 | 42 | const cnip = () => { 43 | //国内城市IP段 44 | const ips = '58.14.0.0,58.16.0.0,58.24.0.0,58.30.0.0,58.32.0.0,58.66.0.0,58.68.128.0,58.82.0.0,58.87.64.0,58.99.128.0,58.100.0.0,58.116.0.0,58.128.0.0,58.144.0.0,58.154.0.0,58.192.0.0,58.240.0.0,59.32.0.0,59.64.0.0,59.80.0.0,59.107.0.0,59.108.0.0,59.151.0.0,59.155.0.0,59.172.0.0,59.191.0.0,59.191.240.0,59.192.0.0,60.0.0.0,60.55.0.0,60.63.0.0,60.160.0.0,60.194.0.0,60.200.0.0,60.208.0.0,60.232.0.0,60.235.0.0,60.245.128.0,60.247.0.0,60.252.0.0,60.253.128.0,60.255.0.0,61.4.80.0,61.4.176.0,61.8.160.0,61.28.0.0,61.29.128.0,61.45.128.0,61.47.128.0,61.48.0.0,61.87.192.0,61.128.0.0,61.232.0.0,61.236.0.0,61.240.0.0,114.28.0.0,114.54.0.0,114.60.0.0,114.64.0.0,114.68.0.0,114.80.0.0,116.1.0.0,116.2.0.0,116.4.0.0,116.8.0.0,116.13.0.0,116.16.0.0,116.52.0.0,116.56.0.0,116.58.128.0,116.58.208.0,116.60.0.0,116.66.0.0,116.69.0.0,116.70.0.0,116.76.0.0,116.89.144.0,116.90.184.0,116.95.0.0,116.112.0.0,116.116.0.0,116.128.0.0,116.192.0.0,116.193.16.0,116.193.32.0,116.194.0.0,116.196.0.0,116.198.0.0,116.199.0.0,116.199.128.0,116.204.0.0,116.207.0.0,116.208.0.0,116.212.160.0,116.213.64.0,116.213.128.0,116.214.32.0,116.214.64.0,116.214.128.0,116.215.0.0,116.216.0.0,116.224.0.0,116.242.0.0,116.244.0.0,116.248.0.0,116.252.0.0,116.254.128.0,116.255.128.0,117.8.0.0,117.21.0.0,117.22.0.0,117.24.0.0,117.32.0.0,117.40.0.0,117.44.0.0,117.48.0.0,117.53.48.0,117.53.176.0,117.57.0.0,117.58.0.0,117.59.0.0,117.60.0.0,117.64.0.0,117.72.0.0,117.74.64.0,117.74.128.0,117.75.0.0,117.76.0.0,117.80.0.0,117.100.0.0,117.103.16.0,117.103.128.0,117.106.0.0,117.112.0.0,117.120.64.0,117.120.128.0,117.121.0.0,117.121.128.0,117.121.192.0,117.122.128.0,117.124.0.0,117.128.0.0,118.24.0.0,118.64.0.0,118.66.0.0,118.67.112.0,118.72.0.0,118.80.0.0,118.84.0.0,118.88.32.0,118.88.64.0,118.88.128.0,118.89.0.0,118.91.240.0,118.102.16.0,118.112.0.0,118.120.0.0,118.124.0.0,118.126.0.0,118.132.0.0,118.144.0.0,118.178.0.0,118.180.0.0,118.184.0.0,118.192.0.0,118.212.0.0,118.224.0.0,118.228.0.0,118.230.0.0,118.239.0.0,118.242.0.0,118.244.0.0,118.248.0.0,119.0.0.0,119.2.0.0,119.2.128.0,119.3.0.0,119.4.0.0,119.8.0.0,119.10.0.0,119.15.136.0,119.16.0.0,119.18.192.0,119.18.208.0,119.18.224.0,119.19.0.0,119.20.0.0,119.27.64.0,119.27.160.0,119.27.192.0,119.28.0.0,119.30.48.0,119.31.192.0,119.32.0.0,119.40.0.0,119.40.64.0,119.40.128.0,119.41.0.0,119.42.0.0,119.42.136.0,119.42.224.0,119.44.0.0,119.48.0.0,119.57.0.0,119.58.0.0,119.59.128.0,119.60.0.0,119.62.0.0,119.63.32.0,119.75.208.0,119.78.0.0,119.80.0.0,119.84.0.0,119.88.0.0,119.96.0.0,119.108.0.0,119.112.0.0,119.128.0.0,119.144.0.0,119.148.160.0,119.161.128.0,119.162.0.0,119.164.0.0,119.176.0.0,119.232.0.0,119.235.128.0,119.248.0.0,119.253.0.0,119.254.0.0,120.0.0.0,120.24.0.0,120.30.0.0,120.32.0.0,120.48.0.0,120.52.0.0,120.64.0.0,120.72.32.0,120.72.128.0,120.76.0.0,120.80.0.0,120.90.0.0,120.92.0.0,120.94.0.0,120.128.0.0,120.136.128.0,120.137.0.0,120.192.0.0,121.0.16.0,121.4.0.0,121.8.0.0,121.16.0.0,121.32.0.0,121.40.0.0,121.46.0.0,121.48.0.0,121.51.0.0,121.52.160.0,121.52.208.0,121.52.224.0,121.55.0.0,121.56.0.0,121.58.0.0,121.58.144.0,121.59.0.0,121.60.0.0,121.68.0.0,121.76.0.0,121.79.128.0,121.89.0.0,121.100.128.0,121.101.208.0,121.192.0.0,121.201.0.0,121.204.0.0,121.224.0.0,121.248.0.0,121.255.0.0,122.0.64.0,122.0.128.0,122.4.0.0,122.8.0.0,122.48.0.0,122.49.0.0,122.51.0.0,122.64.0.0,122.96.0.0,122.102.0.0,122.102.64.0,122.112.0.0,122.119.0.0,122.136.0.0,122.144.128.0,122.152.192.0,122.156.0.0,122.192.0.0,122.198.0.0,122.200.64.0,122.204.0.0,122.224.0.0,122.240.0.0,122.248.48.0,123.0.128.0,123.4.0.0,123.8.0.0,123.49.128.0,123.52.0.0,123.56.0.0,123.64.0.0,123.96.0.0,123.98.0.0,123.99.128.0,123.100.0.0,123.101.0.0,123.103.0.0,123.108.128.0,123.108.208.0,123.112.0.0,123.128.0.0,123.136.80.0,123.137.0.0,123.138.0.0,123.144.0.0,123.160.0.0,123.176.80.0,123.177.0.0,123.178.0.0,123.180.0.0,123.184.0.0,123.196.0.0,123.199.128.0,123.206.0.0,123.232.0.0,123.242.0.0,123.244.0.0,123.249.0.0,123.253.0.0,124.6.64.0,124.14.0.0,124.16.0.0,124.20.0.0,124.28.192.0,124.29.0.0,124.31.0.0,124.40.112.0,124.40.128.0,124.42.0.0,124.47.0.0,124.64.0.0,124.66.0.0,124.67.0.0,124.68.0.0,124.72.0.0,124.88.0.0,124.108.8.0,124.108.40.0,124.112.0.0,124.126.0.0,124.128.0.0,124.147.128.0,124.156.0.0,124.160.0.0,124.172.0.0,124.192.0.0,124.196.0.0,124.200.0.0,124.220.0.0,124.224.0.0,124.240.0.0,124.240.128.0,124.242.0.0,124.243.192.0,124.248.0.0,124.249.0.0,124.250.0.0,124.254.0.0,125.31.192.0,125.32.0.0,125.58.128.0,125.61.128.0,125.62.0.0,125.64.0.0,125.96.0.0,125.98.0.0,125.104.0.0,125.112.0.0,125.169.0.0,125.171.0.0,125.208.0.0,125.210.0.0,125.213.0.0,125.214.96.0,125.215.0.0,125.216.0.0,125.254.128.0,134.196.0.0,159.226.0.0,161.207.0.0,162.105.0.0,166.111.0.0,167.139.0.0,168.160.0.0,169.211.1.0,192.83.122.0,192.83.169.0,192.124.154.0,192.188.170.0,198.17.7.0,202.0.110.0,202.0.176.0,202.4.128.0,202.4.252.0,202.8.128.0,202.10.64.0,202.14.88.0,202.14.235.0,202.14.236.0,202.14.238.0,202.20.120.0,202.22.248.0,202.38.0.0,202.38.64.0,202.38.128.0,202.38.136.0,202.38.138.0,202.38.140.0,202.38.146.0,202.38.149.0,202.38.150.0,202.38.152.0,202.38.156.0,202.38.158.0,202.38.160.0,202.38.164.0,202.38.168.0,202.38.176.0,202.38.184.0,202.38.192.0,202.41.152.0,202.41.240.0,202.43.144.0,202.46.32.0,202.46.224.0,202.60.112.0,202.63.248.0,202.69.4.0,202.69.16.0,202.70.0.0,202.74.8.0,202.75.208.0,202.85.208.0,202.90.0.0,202.90.224.0,202.90.252.0,202.91.0.0,202.91.128.0,202.91.176.0,202.91.224.0,202.92.0.0,202.92.252.0,202.93.0.0,202.93.252.0,202.95.0.0,202.95.252.0,202.96.0.0,202.112.0.0,202.120.0.0,202.122.0.0,202.122.32.0,202.122.64.0,202.122.112.0,202.122.128.0,202.123.96.0,202.124.24.0,202.125.176.0,202.127.0.0,202.127.12.0,202.127.16.0,202.127.40.0,202.127.48.0,202.127.112.0,202.127.128.0,202.127.160.0,202.127.192.0,202.127.208.0,202.127.212.0,202.127.216.0,202.127.224.0,202.130.0.0,202.130.224.0,202.131.16.0,202.131.48.0,202.131.208.0,202.136.48.0,202.136.208.0,202.136.224.0,202.141.160.0,202.142.16.0,202.143.16.0,202.148.96.0,202.149.160.0,202.149.224.0,202.150.16.0,202.152.176.0,202.153.48.0,202.158.160.0,202.160.176.0,202.164.0.0,202.164.25.0,202.165.96.0,202.165.176.0,202.165.208.0,202.168.160.0,202.170.128.0,202.170.216.0,202.173.8.0,202.173.224.0,202.179.240.0,202.180.128.0,202.181.112.0,202.189.80.0,202.192.0.0,203.18.50.0,203.79.0.0,203.80.144.0,203.81.16.0,203.83.56.0,203.86.0.0,203.86.64.0,203.88.32.0,203.88.192.0,203.89.0.0,203.90.0.0,203.90.128.0,203.90.192.0,203.91.32.0,203.91.96.0,203.91.120.0,203.92.0.0,203.92.160.0,203.93.0.0,203.94.0.0,203.95.0.0,203.95.96.0,203.99.16.0,203.99.80.0,203.100.32.0,203.100.80.0,203.100.96.0,203.100.192.0,203.110.160.0,203.118.192.0,203.119.24.0,203.119.32.0,203.128.32.0,203.128.96.0,203.130.32.0,203.132.32.0,203.134.240.0,203.135.96.0,203.135.160.0,203.142.219.0,203.148.0.0,203.152.64.0,203.156.192.0,203.158.16.0,203.161.192.0,203.166.160.0,203.171.224.0,203.174.7.0,203.174.96.0,203.175.128.0,203.175.192.0,203.176.168.0,203.184.80.0,203.187.160.0,203.190.96.0,203.191.16.0,203.191.64.0,203.191.144.0,203.192.0.0,203.196.0.0,203.207.64.0,203.207.128.0,203.208.0.0,203.208.16.0,203.208.32.0,203.209.224.0,203.212.0.0,203.212.80.0,203.222.192.0,203.223.0.0,210.2.0.0,210.5.0.0,210.5.144.0,210.12.0.0,210.14.64.0,210.14.112.0,210.14.128.0,210.15.0.0,210.15.128.0,210.16.128.0,210.21.0.0,210.22.0.0,210.23.32.0,210.25.0.0,210.26.0.0,210.28.0.0,210.32.0.0,210.51.0.0,210.52.0.0,210.56.192.0,210.72.0.0,210.76.0.0,210.78.0.0,210.79.64.0,210.79.224.0,210.82.0.0,210.87.128.0,210.185.192.0,210.192.96.0,211.64.0.0,211.80.0.0,211.96.0.0,211.136.0.0,211.144.0.0,211.160.0.0,218.0.0.0,218.56.0.0,218.64.0.0,218.96.0.0,218.104.0.0,218.108.0.0,218.185.192.0,218.192.0.0,218.240.0.0,218.249.0.0,219.72.0.0,219.82.0.0,219.128.0.0,219.216.0.0,219.224.0.0,219.242.0.0,219.244.0.0,220.101.192.0,220.112.0.0,220.152.128.0,220.154.0.0,220.160.0.0,220.192.0.0,220.231.0.0,220.231.128.0,220.232.64.0,220.234.0.0,220.242.0.0,220.248.0.0,220.252.0.0,221.0.0.0,221.8.0.0,221.12.0.0,221.12.128.0,221.13.0.0,221.14.0.0,221.122.0.0,221.129.0.0,221.130.0.0,221.133.224.0,221.136.0.0,221.172.0.0,221.176.0.0,221.192.0.0,221.196.0.0,221.198.0.0,221.199.0.0,221.199.128.0,221.199.192.0,221.199.224.0,221.200.0.0,221.208.0.0,221.224.0.0,222.16.0.0,222.32.0.0,222.64.0.0,222.125.0.0,222.126.128.0,222.128.0.0,222.160.0.0,222.168.0.0,222.176.0.0,222.192.0.0,222.240.0.0,222.248.0.0'; 45 | const arr = ips.split(','); 46 | const rnd = parseInt(Math.random() * ((arr.length - 1) - 0 + 1) + 0, 10) 47 | const ip = arr[rnd]; 48 | return ip; 49 | } 50 | 51 | 52 | export const request = async (method, url, data = {}, options) => { 53 | 54 | let headers = { 'User-Agent': chooseUserAgent(options.ua) } 55 | if (method.toUpperCase() === 'POST') 56 | headers['Content-Type'] = 'application/x-www-form-urlencoded' 57 | if (url.includes('music.163.com')) 58 | headers['Referer'] = 'https://music.163.com' 59 | 60 | let ip = cnip() || '' 61 | // console.log(ip) 62 | if (ip) { 63 | headers['X-Real-IP'] = ip 64 | headers['X-Forwarded-For'] = ip 65 | } 66 | // headers['X-Real-IP'] = '118.88.88.88' 67 | if (typeof options.cookie === "undefined") 68 | options.cookie = {} 69 | 70 | if (typeof options.cookie === 'object') { 71 | options.cookie = { 72 | ...options.cookie, 73 | __remember_me: true, 74 | // NMTID: nanoid(), 75 | _ntes_nuid: nanoid(), 76 | } 77 | if (!options.cookie.MUSIC_U) { 78 | // 游客 79 | if (!options.cookie.MUSIC_A) { 80 | options.cookie.MUSIC_A = net_ease_anonymous_token 81 | } 82 | } 83 | headers['Cookie'] = Object.keys(options.cookie) 84 | .map( 85 | (key) => 86 | encodeURIComponent(key) + 87 | '=' + 88 | encodeURIComponent(options.cookie[key]), 89 | ) 90 | .join('; ') 91 | } else if (options.cookie) { 92 | headers['Cookie'] = options.cookie 93 | } else { 94 | headers['Cookie'] = '__remember_me=true; NMTID=xxx' 95 | } 96 | 97 | // console.log(options.cookie, headers['Cookie']) 98 | if (options.crypto === 'weapi') { 99 | let csrfToken = (headers['Cookie'] || '').match(/_csrf=([^(;|$)]+)/) 100 | data.csrf_token = csrfToken ? csrfToken[1] : '' 101 | data = encrypt.weapi(data) 102 | url = url.replace(/\w*api/, 'weapi') 103 | } else if (options.crypto === 'linuxapi') { 104 | data = encrypt.linuxapi({ 105 | method: method, 106 | url: url.replace(/\w*api/, 'api'), 107 | params: data, 108 | }) 109 | headers['User-Agent'] = 110 | 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36' 111 | url = 'https://music.163.com/api/linux/forward' 112 | } else if (options.crypto === 'eapi') { 113 | const cookie = options.cookie || {} 114 | const csrfToken = cookie['__csrf'] || '' 115 | const header = { 116 | osver: cookie.osver, //系统版本 117 | deviceId: cookie.deviceId, //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7') 118 | appver: cookie.appver || '8.7.01', // app版本 119 | versioncode: cookie.versioncode || '140', //版本号 120 | mobilename: cookie.mobilename, //设备model 121 | buildver: cookie.buildver || Date.now().toString().substr(0, 10), 122 | resolution: cookie.resolution || '1920x1080', //设备分辨率 123 | __csrf: csrfToken, 124 | os: cookie.os || 'android', 125 | channel: cookie.channel, 126 | requestId: `${Date.now()}_${Math.floor(Math.random() * 1000) 127 | .toString() 128 | .padStart(4, '0') 129 | } `, 130 | } 131 | if (cookie.MUSIC_U) header['MUSIC_U'] = cookie.MUSIC_U 132 | if (cookie.MUSIC_A) header['MUSIC_A'] = cookie.MUSIC_A 133 | headers['Cookie'] = Object.keys(header) 134 | .map( 135 | (key) => 136 | encodeURIComponent(key) + '=' + encodeURIComponent(header[key]), 137 | ) 138 | .join('; ') 139 | data.header = header 140 | data = encrypt.eapi(options.url, data) 141 | url = url.replace(/\w*api/, 'eapi') 142 | } 143 | 144 | let settings = { 145 | method, 146 | headers, 147 | body: new URLSearchParams(data).toString() 148 | } 149 | 150 | 151 | if (options.crypto === 'eapi') { 152 | settings = { 153 | ...settings, 154 | responseType: 'arraybuffer', 155 | } 156 | } 157 | 158 | 159 | let res, count = 0 160 | do { 161 | res = await fetch(url, settings) 162 | if (options.crypto === 'eapi') { 163 | const _ = await res.arrayBuffer('utf-8') 164 | const enc = new TextDecoder() 165 | res = JSON.parse(enc.decode(_)) 166 | } else { 167 | res = await res.json() 168 | } 169 | count++ 170 | if (count > 1) { 171 | console.log(`Request ${count} times.`) 172 | } 173 | if (count > 5) { 174 | console.error(`Max retries exceeded.`) 175 | break 176 | } 177 | await new Promise(resolve => setTimeout(resolve, 100)) 178 | } while (res.code == -460) // { code: -460, message: '网络太拥挤,请稍候再试!' } 179 | 180 | return res; 181 | 182 | } 183 | 184 | export const map_song_list = (song_list) => { 185 | return song_list.songs.map(song => { 186 | const artists = song.ar || song.artists 187 | return { 188 | title: song.name, 189 | author: artists.reduce((i, v) => ((i ? i + " / " : i) + v.name), ''), 190 | pic: song?.al?.picUrl || song.id, 191 | url: song.id, 192 | lrc: song.id 193 | } 194 | }) 195 | } 196 | -------------------------------------------------------------------------------- /src/providers/spotify/config.js: -------------------------------------------------------------------------------- 1 | const SPOTIFY_API = globalThis?.Deno?.env?.get("SPOTIFY_API") 2 | || globalThis?.process?.env?.SPOTIFY_API 3 | || globalThis?.Deno?.env?.get("YT_API") 4 | || globalThis?.process?.env?.YT_API 5 | 6 | export { 7 | SPOTIFY_API, 8 | } 9 | -------------------------------------------------------------------------------- /src/providers/spotify/index.js: -------------------------------------------------------------------------------- 1 | import { SPOTIFY_API } from "./config.js" 2 | const support_type = ['song', 'playlist'] 3 | 4 | const handle = async (type, id, cookie = '') => { 5 | let result 6 | const query = `?server=spotify&type=${type}&id=${id}` 7 | if (support_type.includes(type)) { 8 | result = await fetch(SPOTIFY_API + query) 9 | result = await result.json() 10 | } else { 11 | result = -1 12 | } 13 | 14 | return result 15 | } 16 | 17 | export default { 18 | register: (ctx) => { 19 | ctx.register('spotify', { handle, support_type }) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/providers/tencent/index.js: -------------------------------------------------------------------------------- 1 | import { get_playlist } from "./playlist.js"; 2 | import { get_song_url, get_song_info, get_pic } from "./song.js"; 3 | import { get_lyric } from "./lyric.js" 4 | 5 | const support_type = ['url', 'pic', 'lrc', 'song', 'playlist'] 6 | 7 | const handle = async (type, id, cookie = '') => { 8 | let result; 9 | switch (type) { 10 | case 'lrc': 11 | result = await get_lyric(id) 12 | break 13 | case 'pic': 14 | result = await get_pic(id) 15 | break 16 | case 'url': 17 | result = await get_song_url(id) 18 | break 19 | case 'song': 20 | result = await get_song_info(id) 21 | break 22 | case 'playlist': 23 | result = await get_playlist(id) 24 | break 25 | default: 26 | return -1; 27 | } 28 | return result 29 | } 30 | 31 | export default { 32 | register: (ctx) => { 33 | ctx.register('tencent', { handle, support_type }) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/providers/tencent/lyric.js: -------------------------------------------------------------------------------- 1 | import { changeUrlQuery } from "./util.js" 2 | 3 | const get_lyric = async (songmid, cookie = '') => { 4 | const data = { 5 | songmid, 6 | pcachetime: new Date().getTime(), 7 | g_tk: 5381, 8 | loginUin: 0, 9 | hostUin: 0, 10 | inCharset: 'utf8', 11 | outCharset: 'utf-8', 12 | notice: 0, 13 | platform: 'yqq', 14 | needNewCode: 0, 15 | format: "json" 16 | } 17 | 18 | 19 | const headers = { 20 | Referer: 'https://y.qq.com', 21 | } 22 | 23 | const url = changeUrlQuery(data, 'http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg') 24 | 25 | let result = await fetch(url, { headers }); 26 | 27 | result = await result.json() 28 | 29 | result.lyric = decodeURIComponent(escape(atob(result.lyric || ''))); 30 | result.trans = decodeURIComponent(escape(atob(result.trans || ''))); 31 | 32 | const res = { lyric: result.lyric, tlyric: result.trans } 33 | return res; 34 | } 35 | 36 | 37 | // const res = await get_lyric('000i26Sh1ZyiNU') 38 | // console.log(res) 39 | 40 | export { get_lyric } 41 | -------------------------------------------------------------------------------- /src/providers/tencent/playlist.js: -------------------------------------------------------------------------------- 1 | import config from "../../config.js" 2 | import { get_song_url } from "./song.js" 3 | import { changeUrlQuery } from "./util.js" 4 | 5 | const get_playlist = async (id, cookie = '') => { 6 | const data = { 7 | type: 1, 8 | utf8: 1, 9 | disstid: id, 10 | loginUin: 0, 11 | format: 'json' 12 | } 13 | 14 | 15 | const headers = { 16 | Referer: 'https://y.qq.com/n/yqq/playlist', 17 | } 18 | 19 | const url = changeUrlQuery(data, 'http://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg') 20 | 21 | let result = await fetch(url, { headers }); 22 | 23 | result = await result.json() 24 | result = result.cdlist[0].songlist 25 | 26 | let jsonp 27 | if (config.OVERSEAS) { 28 | const ids = result.map(song => song.songmid) 29 | jsonp = await get_song_url(ids.join(',')) 30 | } 31 | const res = await Promise.all(result.map(async song => { 32 | let song_info = { 33 | author: song.singer.reduce((i, v) => ((i ? i + " / " : i) + v.name), ''), 34 | title: song.songname, 35 | pic: `https://y.gtimg.cn/music/photo_new/T002R300x300M000${song.albummid}.jpg`, 36 | url: config.OVERSEAS ? '' : song.songmid, 37 | lrc: song.songmid, 38 | songmid: song.songmid, 39 | } 40 | return song_info 41 | })); 42 | 43 | if (config.OVERSEAS) res[0].url = jsonp 44 | return res; 45 | } 46 | 47 | 48 | // const res = await get_playlist('7326220405') 49 | // console.log(res) 50 | 51 | export { get_playlist } 52 | -------------------------------------------------------------------------------- /src/providers/tencent/song.js: -------------------------------------------------------------------------------- 1 | import { changeUrlQuery } from "./util.js" 2 | import config from "../../config.js" 3 | 4 | export const get_song_url = async (id, cookie = '') => { 5 | 6 | id = id.split(',') 7 | let uin = '' 8 | let qqmusic_key = '' 9 | const typeObj = { 10 | s: 'M500', 11 | e: '.mp3', 12 | } 13 | 14 | const file = id.map(e => `${typeObj.s}${e}${e}${typeObj.e}`) 15 | const guid = (Math.random() * 10000000).toFixed(0); 16 | 17 | let purl = ''; 18 | 19 | let data = { 20 | req_0: { 21 | module: 'vkey.GetVkeyServer', 22 | method: 'CgiGetVkey', 23 | param: { 24 | // filename: file, 25 | guid: guid, 26 | songmid: id, 27 | songtype: [0], 28 | uin: uin, 29 | loginflag: 1, 30 | platform: '20', 31 | }, 32 | }, 33 | comm: { 34 | uin: uin, 35 | format: 'json', 36 | ct: 19, 37 | cv: 0, 38 | authst: qqmusic_key, 39 | }, 40 | } 41 | 42 | let params = { 43 | '-': 'getplaysongvkey', 44 | g_tk: 5381, 45 | loginUin: uin, 46 | hostUin: 0, 47 | format: 'json', 48 | inCharset: 'utf8', 49 | outCharset: 'utf-8¬ice=0', 50 | platform: 'yqq.json', 51 | needNewCode: 0, 52 | data: JSON.stringify(data), 53 | } 54 | 55 | 56 | if (config.OVERSEAS || id.length > 1) { 57 | params.format = 'jsonp' 58 | const callback_function_name = 'callback' 59 | const callback_name = "callback" 60 | const parse_function = "qq_get_url_from_json" 61 | const url = changeUrlQuery(params, 'https://u.y.qq.com/cgi-bin/musicu.fcg') 62 | return "@" + parse_function + '@' + callback_name + '@' + callback_function_name + '@' + url 63 | } 64 | 65 | 66 | const url = changeUrlQuery(params, 'https://u.y.qq.com/cgi-bin/musicu.fcg') 67 | 68 | let result = await fetch(url); 69 | 70 | result = await result.json() 71 | // console.log(result) 72 | if (result.req_0 && result.req_0.data && result.req_0.data.midurlinfo) { 73 | purl = result.req_0.data.midurlinfo[0].purl; 74 | } 75 | 76 | const domain = 77 | result.req_0.data.sip.find(i => !i.startsWith('http://ws')) || 78 | result.req_0.data.sip[0]; 79 | 80 | const res = `${domain}${purl}`.replace('http://', 'https://') 81 | // console.log(res); 82 | return res; 83 | 84 | } 85 | 86 | export const get_song_info = async (id, cookie = '') => { 87 | const data = { 88 | data: JSON.stringify({ 89 | songinfo: { 90 | method: 'get_song_detail_yqq', 91 | module: 'music.pf_song_detail_svr', 92 | param: { 93 | song_mid: id, 94 | }, 95 | }, 96 | }), 97 | }; 98 | 99 | const url = changeUrlQuery(data, 'http://u.y.qq.com/cgi-bin/musicu.fcg'); 100 | 101 | let result = await fetch(url); 102 | 103 | result = await result.json() 104 | 105 | result = result.songinfo.data 106 | 107 | let song_info = { 108 | author: result.track_info.singer.reduce((i, v) => ((i ? i + " / " : i) + v.name), ''), 109 | title: result.track_info.name, 110 | pic: `https://y.gtimg.cn/music/photo_new/T002R300x300M000${result.track_info.album.mid}.jpg`, 111 | url: config.OVERSEAS ? await get_song_url(id) : id, 112 | lrc: id, 113 | songmid: id, 114 | } 115 | // console.log(song_info) 116 | return [song_info] 117 | } 118 | 119 | export const get_pic = async (id, cookie = '') => { 120 | const info = await get_song_info(id, cookie) 121 | return info[0].pic 122 | } 123 | 124 | // const res = await get_song_url('002Rnpvi058Qdm'); 125 | // console.log(res) 126 | 127 | // const res = await get_song_url('002Rnpvi058Qdm,000i26Sh1ZyiNU'); 128 | // console.log(res) 129 | 130 | // const res = await get_song_info('002Rnpvi058Qdm'); 131 | // console.log(res) 132 | -------------------------------------------------------------------------------- /src/providers/tencent/util.js: -------------------------------------------------------------------------------- 1 | function getQueryFromUrl(key, search) { 2 | try { 3 | const sArr = search.split('?'); 4 | let s = ''; 5 | if (sArr.length > 1) { 6 | s = sArr[1]; 7 | } else { 8 | return key ? undefined : {}; 9 | } 10 | const querys = s.split('&'); 11 | const result = {}; 12 | querys.forEach((item) => { 13 | const temp = item.split('='); 14 | result[temp[0]] = decodeURIComponent(temp[1]); 15 | }); 16 | return key ? result[key] : result; 17 | } catch (err) { 18 | // 除去search为空等异常 19 | return key ? '' : {}; 20 | } 21 | } 22 | 23 | function changeUrlQuery(obj, baseUrl) { 24 | const query = getQueryFromUrl(null, baseUrl); 25 | let url = baseUrl.split('?')[0]; 26 | 27 | const newQuery = { ...query, ...obj }; 28 | let queryArr = []; 29 | Object.keys(newQuery).forEach((key) => { 30 | if (newQuery[key] !== undefined && newQuery[key] !== '') { 31 | queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`); 32 | } 33 | }); 34 | return `${url}?${queryArr.join('&')}`.replace(/\?$/, ''); 35 | } 36 | 37 | export { changeUrlQuery } -------------------------------------------------------------------------------- /src/providers/ytmusic/config.js: -------------------------------------------------------------------------------- 1 | const YT_API = globalThis?.Deno?.env?.get("YT_API") || globalThis?.process?.env?.YT_API 2 | 3 | export { 4 | YT_API, 5 | } 6 | -------------------------------------------------------------------------------- /src/providers/ytmusic/index.js: -------------------------------------------------------------------------------- 1 | import { YT_API } from "./config.js" 2 | const support_type = ['song', 'playlist'] 3 | 4 | const handle = async (type, id, cookie = '') => { 5 | let result 6 | const query = `?server=ytmusic&type=${type}&id=${id}` 7 | if (support_type.includes(type)) { 8 | result = await fetch(YT_API + query) 9 | result = await result.json() 10 | } else { 11 | result = -1 12 | } 13 | 14 | return result 15 | } 16 | 17 | export default { 18 | register: (ctx) => { 19 | ctx.register('ytmusic', { handle, support_type }) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/service/api.js: -------------------------------------------------------------------------------- 1 | import Providers from "../providers/index.js" 2 | import { format as lyricFormat, get_url } from "../util.js" 3 | 4 | export default async (ctx) => { 5 | 6 | const p = new Providers() 7 | 8 | const query = ctx.req.query() 9 | const server = query.server || 'tencent' 10 | const type = query.type || 'playlist' 11 | const id = query.id || '7326220405' 12 | 13 | if (!p.get_provider_list().includes(server) || !p.get(server).support_type.includes(type)) { 14 | ctx.status(400) 15 | return ctx.json({ status: 400, message: 'server 参数不合法', param: { server, type, id } }) 16 | } 17 | 18 | let data = await p.get(server).handle(type, id) 19 | 20 | if (type === 'url') { 21 | let url = data 22 | 23 | if (!url) { 24 | ctx.status(403) 25 | return ctx.json({ error: 'no url' }) 26 | } 27 | if (url.startsWith('@')) 28 | return ctx.text(url) 29 | 30 | return ctx.redirect(url) 31 | } 32 | 33 | if (type === 'pic') { 34 | return ctx.redirect(data) 35 | } 36 | 37 | if (type === 'lrc') { 38 | return ctx.text(lyricFormat(data.lyric, data.tlyric || '')) 39 | } 40 | 41 | 42 | // json 类型数据填充api 43 | return ctx.json(data.map(x => { 44 | for (let i of ['url', 'pic', 'lrc']) { 45 | const _ = String(x[i]) 46 | // 正常对象_均为id,以下例外不用填充:1.@开头/size为0=>qq音乐jsonp 2.已存在完整链接 47 | if (!_.startsWith('@') && !_.startsWith('http') && _.length > 0) { 48 | x[i] = `${get_url(ctx)}?server=${server}&type=${i}&id=${_}` 49 | } 50 | } 51 | return x 52 | })) 53 | } 54 | -------------------------------------------------------------------------------- /src/template.js: -------------------------------------------------------------------------------- 1 | import example from "./example.js" 2 | 3 | let html = ` 4 | 5 | 6 | 7 | 8 | 9 |${provider} ${type}
28 |