├── .github └── workflows │ ├── deploy.yml │ └── test.yml ├── .gitignore ├── .prettierrc ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── Dockerfile ├── LICENSE ├── README.md ├── beamup.json ├── package-lock.json ├── package.json ├── packages ├── addon │ ├── package.json │ ├── src │ │ ├── addon.ts │ │ ├── index.ts │ │ ├── manifest.ts │ │ ├── meta.ts │ │ ├── server.ts │ │ ├── sort-option.ts │ │ ├── utils.test.ts │ │ └── utils.ts │ ├── stremio-addon-sdk-builder.d.ts │ ├── stremio-addon-sdk.d.ts │ └── tsconfig.json ├── api │ ├── package.json │ ├── src │ │ ├── api.ts │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils.ts │ └── tsconfig.json └── cloudflare-worker │ ├── .gitignore │ ├── package.json │ ├── src │ └── index.ts │ ├── tsconfig.json │ └── wrangler.toml ├── tsconfig.base.json └── tsconfig.json /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Docker image to GitHub Container Registry 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | 8 | jobs: 9 | docker: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout repository 13 | uses: actions/checkout@v4 14 | - name: Set up QEMU 15 | uses: docker/setup-qemu-action@v3 16 | - name: Set up Docker Buildx 17 | uses: docker/setup-buildx-action@v3 18 | - name: Log in to GitHub Container Registry 19 | uses: docker/login-action@v3 20 | with: 21 | registry: ghcr.io 22 | username: ${{ github.actor }} 23 | password: ${{ secrets.GITHUB_TOKEN }} 24 | - name: Build and push Docker image 25 | uses: docker/build-push-action@v6 26 | with: 27 | platforms: linux/amd64,linux/arm64 28 | push: true 29 | tags: | 30 | ghcr.io/${{ github.repository_owner }}/stremio-easynews-addon:${{ github.ref_name }} 31 | ghcr.io/${{ github.repository_owner }}/stremio-easynews-addon:latest 32 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Build and test 2 | 3 | on: [push] 4 | 5 | jobs: 6 | test: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v4 10 | - name: Use Node.js 11 | uses: actions/setup-node@v4 12 | with: 13 | node-version: '23.x' 14 | - run: npm ci 15 | - run: npm run build 16 | - run: npm test 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | *.tsbuildinfo 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "tabWidth": 2, 5 | "trailingComma": "es5", 6 | "endOfLine": "lf" 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["esbenp.prettier-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "debug addon", 6 | "type": "node", 7 | "request": "launch", 8 | "program": "src/server.ts", 9 | "localRoot": "${workspaceFolder}/packages/addon", 10 | "runtimeExecutable": "tsx", 11 | "console": "integratedTerminal", 12 | "internalConsoleOptions": "neverOpen", 13 | "skipFiles": ["/**", "${workspaceFolder}/node_modules/**"] 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": ["cinemeta", "Easynews", "imdb"], 3 | "editor.formatOnSave": true, 4 | "editor.defaultFormatter": "esbenp.prettier-vscode" 5 | } 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:22-alpine AS builder 2 | 3 | WORKDIR /build 4 | 5 | # Copy LICENSE file. 6 | COPY LICENSE ./ 7 | 8 | # Copy the relevant package.json and package-lock.json files. 9 | COPY package*.json ./ 10 | COPY packages/api/package*.json ./packages/api/ 11 | COPY packages/addon/package*.json ./packages/addon/ 12 | 13 | # Install dependencies. 14 | RUN npm install 15 | 16 | # Copy source files. 17 | COPY tsconfig.*json ./ 18 | COPY packages/api ./packages/api 19 | COPY packages/addon ./packages/addon 20 | 21 | # Build the project. 22 | RUN npm run build 23 | 24 | # Remove development dependencies. 25 | RUN npm --workspaces prune --omit=dev 26 | 27 | FROM node:22-alpine AS final 28 | 29 | WORKDIR /app 30 | 31 | # Copy the built files from the builder. 32 | # The package.json files must be copied as well for NPM workspace symlinks between local packages to work. 33 | COPY --from=builder /build/package*.json /build/LICENSE ./ 34 | COPY --from=builder /build/packages/addon/package.*json ./packages/addon/ 35 | COPY --from=builder /build/packages/api/package.*json ./packages/api/ 36 | COPY --from=builder /build/packages/addon/dist ./packages/addon/dist 37 | COPY --from=builder /build/packages/api/dist ./packages/api/dist 38 | 39 | COPY --from=builder /build/node_modules ./node_modules 40 | 41 | EXPOSE 1337 42 | 43 | ENTRYPOINT ["npm", "run", "start:addon"] 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Sleeyax 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Easynews+ 2 | 3 | > [!NOTE] 4 | > I am not affiliated with Easynews in any way. This project is a fan-made addon for Stremio that provides access to Easynews content. You need an active Easynews subscription to use this addon. 5 | 6 | Provides content from Easynews & includes a search catalog. This addon can also be [self-hosted](#self-hosting). 7 | 8 | Public instance: [b89262c192b0-stremio-easynews-addon.baby-beamup.club](https://b89262c192b0-stremio-easynews-addon.baby-beamup.club/). 9 | 10 | ## FAQ 11 | 12 | ### What is Easynews? 13 | 14 | Easynews is a premium Usenet provider that offers a web-based Usenet browser. It allows you to search, preview, and download files from Usenet newsgroups without the need for a newsreader. Easynews is known for its user-friendly interface and fast download speeds. The Easynews addon for Stremio provides access to Easynews content directly within the Stremio app. You can search for and stream movies, TV shows, and other media files from Easynews using the addon. In a way it can serve as an alternative to debrid services (Real-Debrid, Premiumize, AllDebrid etc.). An Easynews account with an active subscription is required to use the addon. 15 | 16 | ### Why not extend the existing Easynews addon? 17 | 18 | Initially I wanted to simply add the search catalog to the existing Easynews addon but when the developer didn't respond to my query, and the code wasn't open source for me to add it myself, I decided to create my own addon. 19 | 20 | The goal of this addon is to provide more features, better performance, self-host-ability and an open-source codebase for anyone to contribute to. 21 | 22 | ### Why can't I find show X or movie Y? 23 | 24 | Golden rule of thumb: look it up on [Easynews web search](https://members.easynews.com/). If you can't find it there, or it's only returning bad quality results (duration < 5 minutes, marked as spam, no video etc.), you won't find it using the addon either. 25 | 26 | If you do find your content through the web search however, it may be because the addon can't match the resulting titles returned by the Easynews API names with the metadata from Stremio, or it's in the wrong format. 27 | 28 | A couple of examples where the addon won't be able to find results: 29 | 30 | - The anime series `death note` doesn't follow the conventional season number + episode number standard. The show has titles like `Death Note 02` instead of the expected format `Death Note S01E02`. 31 | - For the movie `Mission: Impossible - Dead Reckoning Part One (2023)` Stremio's metadata returns only `dead reckoning` for this title, making it impossible (pun not intended) to match. Movie titles are strictly matched by their full title. 32 | - The real title of the movie `WALL-E (2008)` contains an annoying 'dot' special character: `WALL·E`. This should be converted to a `-` character, but the addon converts that character already to a space because this sanitization is needed for 99% of the other titles. No results for `WALL E` will be returned (actually, no results for `WALL-E` either, but it still serves as a good example). 33 | 34 | There are more oddly titled file names returned by EasyNews. The good news is they are a minority. The bad news is that addon can't possibly support all of these edge cases because that would slow down the search query exponentially and put more stress on both the addon's server and Easynews API, ultimately impacting the performance. 35 | 36 | We try to match most shows, but for the remaining 10-20% of edge cases we currently require you to use the EN+ search catalog instead. Maybe this wil improve in the future. If you have any suggestions to improve this system, please [let us know](https://github.com/sleeyax/stremio-easynews-addon/discussions). 37 | 38 | In any case, feel free to [open an issue](https://github.com/sleeyax/stremio-easynews-addon/issues/new?labels=missing+content&title=Missing+content+for+%27TITLE+SEASON+EPISODE+%27) if you think the addon should be able to find a specific show or movie. It helps us improve the addon. 39 | 40 | ## Self-hosting 41 | 42 | To get results in a fast and private manner, you may wish to self-host the addon. This is easy to do, and only requires a few steps. We support multiple ways of self-hosting: 43 | 44 | ### Cloudflare workers 45 | 46 | The addon can be deployed as a [Cloudflare worker](https://workers.cloudflare.com/), which is a serverless platform that runs your code in data centers around the world. It's incredibly fast and reliable, and you can deploy the addon for free. 47 | 48 | Follow the [getting started guide](https://developers.cloudflare.com/workers/get-started/guide/) and then deploy the addon with the [wrangler CLI](https://developers.cloudflare.com/workers/wrangler/install-and-update/): 49 | 50 | ```bash 51 | $ git clone https://github.com/sleeyax/stremio-easynews-addon.git && cd stremio-easynews-addon 52 | $ npm i 53 | $ npm run build 54 | $ npm run deploy:cloudflare-worker 55 | ``` 56 | 57 | Navigate to the URL provided by Cloudflare to verify that the addon is running. It should look something like `https://stremio-easynews-addon.yourname.workers.dev/`. 58 | 59 | ### Docker 60 | 61 | You can use the provided Dockerfile to build and run the addon in a container. To do this, you need to have [Docker](https://docs.docker.com/get-docker/) installed on your system. 62 | 63 | ```bash 64 | $ docker run -p 8080:1337 ghcr.io/sleeyax/stremio-easynews-addon:latest 65 | ``` 66 | 67 | Alternatively, build the image yourself: 68 | 69 | ```bash 70 | $ git clone https://github.com/sleeyax/stremio-easynews-addon.git && cd stremio-easynews-addon 71 | $ docker build -t stremio-easynews-addon . 72 | $ docker run -p 8080:1337 stremio-easynews-addon 73 | ``` 74 | 75 | Navigate to `http://localhost:8080/` in your browser to verify that the addon is running. 76 | 77 | ### From source 78 | 79 | If you'd rather run directly from source, you can do so with [Node.js](https://nodejs.org/en/download/prebuilt-installer/current). Make sure you have NPM 7 or higher installed on your system. We also recommend Node 20 or higher, though older versions might still work. 80 | 81 | ```bash 82 | # version should be >= 20 83 | $ node -v 84 | # version must be >= 7 85 | $ npm -v 86 | $ git clone https://github.com/sleeyax/stremio-easynews-addon.git && cd stremio-easynews-addon 87 | $ npm i 88 | $ npm run build 89 | # starts the addon in production mode 90 | $ npm run start:addon 91 | ``` 92 | 93 | Navigate to `http://localhost:1337/` in your browser to verify that the addon is running. You can set the `PORT` environment variable to change the listener port. For example, to run the addon on port `8080`: 94 | 95 | ```bash 96 | $ PORT=8080 npm run start:addon 97 | ``` 98 | 99 | --- 100 | 101 | Looking for additional hosting options? Let us know which platform(s) you'd like to see supported by [creating an issue](https://github.com/sleeyax/stremio-easynews-addon/issues/new). 102 | 103 | ## Contribute 104 | 105 | Notes for contributors. 106 | 107 | ### Development 108 | 109 | Clone the repository and install the dependencies: 110 | 111 | ```bash 112 | $ git clone https://github.com/sleeyax/stremio-easynews-addon.git 113 | $ cd stremio-easynews-addon 114 | $ npm i 115 | ``` 116 | 117 | Run the easynews addon in development mode: 118 | 119 | ```bash 120 | # addon 121 | $ npm run start:addon:dev 122 | # cloudflare worker 123 | $ npm run start:cloudflare-worker:dev 124 | ``` 125 | 126 | ### Production 127 | 128 | To deploy the addon to beamup, run: 129 | 130 | ```bash 131 | $ npm run deploy:beamup 132 | ``` 133 | 134 | To release a new version of the addon: 135 | 136 | ```bash 137 | $ npm version 138 | $ git push --follow-tags 139 | ``` 140 | 141 | Finally, create a new release targeting the tag you just pushed on GitHub and include some release notes. 142 | 143 | ## License 144 | 145 | [MIT](./LICENSE) 146 | -------------------------------------------------------------------------------- /beamup.json: -------------------------------------------------------------------------------- 1 | { 2 | "projectName": "stremio-easynews-addon", 3 | "lastCommit": "13b1dfa" 4 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@easynews/core", 3 | "version": "1.3.5", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@easynews/core", 9 | "version": "1.3.5", 10 | "license": "MIT", 11 | "workspaces": [ 12 | "packages/*" 13 | ], 14 | "devDependencies": { 15 | "@types/node": "^20.14.10", 16 | "beamup-cli": "^1.3.0", 17 | "cross-env": "^7.0.3", 18 | "prettier": "^3.3.2", 19 | "tsx": "^4.16.2", 20 | "typescript": "^5.5.3", 21 | "vitest": "^2.1.5" 22 | }, 23 | "engines": { 24 | "node": ">=20.0.0", 25 | "npm": ">=7.0.0" 26 | } 27 | }, 28 | "node_modules/@cloudflare/kv-asset-handler": { 29 | "version": "0.3.4", 30 | "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", 31 | "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", 32 | "dev": true, 33 | "license": "MIT OR Apache-2.0", 34 | "dependencies": { 35 | "mime": "^3.0.0" 36 | }, 37 | "engines": { 38 | "node": ">=16.13" 39 | } 40 | }, 41 | "node_modules/@cloudflare/kv-asset-handler/node_modules/mime": { 42 | "version": "3.0.0", 43 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 44 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 45 | "dev": true, 46 | "license": "MIT", 47 | "bin": { 48 | "mime": "cli.js" 49 | }, 50 | "engines": { 51 | "node": ">=10.0.0" 52 | } 53 | }, 54 | "node_modules/@cloudflare/workerd-darwin-64": { 55 | "version": "1.20240718.0", 56 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240718.0.tgz", 57 | "integrity": "sha512-BsPZcSCgoGnufog2GIgdPuiKicYTNyO/Dp++HbpLRH+yQdX3x4aWx83M+a0suTl1xv76dO4g9aw7SIB6OSgIyQ==", 58 | "cpu": [ 59 | "x64" 60 | ], 61 | "dev": true, 62 | "license": "Apache-2.0", 63 | "optional": true, 64 | "os": [ 65 | "darwin" 66 | ], 67 | "engines": { 68 | "node": ">=16" 69 | } 70 | }, 71 | "node_modules/@cloudflare/workerd-darwin-arm64": { 72 | "version": "1.20240718.0", 73 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240718.0.tgz", 74 | "integrity": "sha512-nlr4gaOO5gcJerILJQph3+2rnas/nx/lYsuaot1ntHu4LAPBoQo1q/Pucj2cSIav4UiMzTbDmoDwPlls4Kteog==", 75 | "cpu": [ 76 | "arm64" 77 | ], 78 | "dev": true, 79 | "license": "Apache-2.0", 80 | "optional": true, 81 | "os": [ 82 | "darwin" 83 | ], 84 | "engines": { 85 | "node": ">=16" 86 | } 87 | }, 88 | "node_modules/@cloudflare/workerd-linux-64": { 89 | "version": "1.20240718.0", 90 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240718.0.tgz", 91 | "integrity": "sha512-LJ/k3y47pBcjax0ee4K+6ZRrSsqWlfU4lbU8Dn6u5tSC9yzwI4YFNXDrKWInB0vd7RT3w4Yqq1S6ZEbfRrqVUg==", 92 | "cpu": [ 93 | "x64" 94 | ], 95 | "dev": true, 96 | "license": "Apache-2.0", 97 | "optional": true, 98 | "os": [ 99 | "linux" 100 | ], 101 | "engines": { 102 | "node": ">=16" 103 | } 104 | }, 105 | "node_modules/@cloudflare/workerd-linux-arm64": { 106 | "version": "1.20240718.0", 107 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240718.0.tgz", 108 | "integrity": "sha512-zBEZvy88EcAMGRGfuVtS00Yl7lJdUM9sH7i651OoL+q0Plv9kphlCC0REQPwzxrEYT1qibSYtWcD9IxQGgx2/g==", 109 | "cpu": [ 110 | "arm64" 111 | ], 112 | "dev": true, 113 | "license": "Apache-2.0", 114 | "optional": true, 115 | "os": [ 116 | "linux" 117 | ], 118 | "engines": { 119 | "node": ">=16" 120 | } 121 | }, 122 | "node_modules/@cloudflare/workerd-windows-64": { 123 | "version": "1.20240718.0", 124 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240718.0.tgz", 125 | "integrity": "sha512-YpCRvvT47XanFum7C3SedOZKK6BfVhqmwdAAVAQFyc4gsCdegZo0JkUkdloC/jwuWlbCACOG2HTADHOqyeolzQ==", 126 | "cpu": [ 127 | "x64" 128 | ], 129 | "dev": true, 130 | "license": "Apache-2.0", 131 | "optional": true, 132 | "os": [ 133 | "win32" 134 | ], 135 | "engines": { 136 | "node": ">=16" 137 | } 138 | }, 139 | "node_modules/@cloudflare/workers-types": { 140 | "version": "4.20240725.0", 141 | "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20240725.0.tgz", 142 | "integrity": "sha512-L6T/Bg50zm9IIACQVQ0CdVcQL+2nLkRXdPz6BsXF3SlzgjyWR5ndVctAbfr/HLV7aKYxWnnEZsIORsTWb+FssA==", 143 | "dev": true, 144 | "license": "MIT OR Apache-2.0" 145 | }, 146 | "node_modules/@cspotcode/source-map-support": { 147 | "version": "0.8.1", 148 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 149 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 150 | "dev": true, 151 | "license": "MIT", 152 | "dependencies": { 153 | "@jridgewell/trace-mapping": "0.3.9" 154 | }, 155 | "engines": { 156 | "node": ">=12" 157 | } 158 | }, 159 | "node_modules/@easynews/addon": { 160 | "resolved": "packages/addon", 161 | "link": true 162 | }, 163 | "node_modules/@easynews/api": { 164 | "resolved": "packages/api", 165 | "link": true 166 | }, 167 | "node_modules/@easynews/cloudflare-worker": { 168 | "resolved": "packages/cloudflare-worker", 169 | "link": true 170 | }, 171 | "node_modules/@esbuild-plugins/node-globals-polyfill": { 172 | "version": "0.2.3", 173 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", 174 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", 175 | "dev": true, 176 | "license": "ISC", 177 | "peerDependencies": { 178 | "esbuild": "*" 179 | } 180 | }, 181 | "node_modules/@esbuild-plugins/node-modules-polyfill": { 182 | "version": "0.2.2", 183 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", 184 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", 185 | "dev": true, 186 | "license": "ISC", 187 | "dependencies": { 188 | "escape-string-regexp": "^4.0.0", 189 | "rollup-plugin-node-polyfills": "^0.2.1" 190 | }, 191 | "peerDependencies": { 192 | "esbuild": "*" 193 | } 194 | }, 195 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/escape-string-regexp": { 196 | "version": "4.0.0", 197 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 198 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 199 | "dev": true, 200 | "license": "MIT", 201 | "engines": { 202 | "node": ">=10" 203 | }, 204 | "funding": { 205 | "url": "https://github.com/sponsors/sindresorhus" 206 | } 207 | }, 208 | "node_modules/@esbuild/aix-ppc64": { 209 | "version": "0.21.5", 210 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 211 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 212 | "cpu": [ 213 | "ppc64" 214 | ], 215 | "dev": true, 216 | "license": "MIT", 217 | "optional": true, 218 | "os": [ 219 | "aix" 220 | ], 221 | "engines": { 222 | "node": ">=12" 223 | } 224 | }, 225 | "node_modules/@esbuild/android-arm": { 226 | "version": "0.21.5", 227 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 228 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 229 | "cpu": [ 230 | "arm" 231 | ], 232 | "dev": true, 233 | "license": "MIT", 234 | "optional": true, 235 | "os": [ 236 | "android" 237 | ], 238 | "engines": { 239 | "node": ">=12" 240 | } 241 | }, 242 | "node_modules/@esbuild/android-arm64": { 243 | "version": "0.21.5", 244 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 245 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 246 | "cpu": [ 247 | "arm64" 248 | ], 249 | "dev": true, 250 | "license": "MIT", 251 | "optional": true, 252 | "os": [ 253 | "android" 254 | ], 255 | "engines": { 256 | "node": ">=12" 257 | } 258 | }, 259 | "node_modules/@esbuild/android-x64": { 260 | "version": "0.21.5", 261 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 262 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 263 | "cpu": [ 264 | "x64" 265 | ], 266 | "dev": true, 267 | "license": "MIT", 268 | "optional": true, 269 | "os": [ 270 | "android" 271 | ], 272 | "engines": { 273 | "node": ">=12" 274 | } 275 | }, 276 | "node_modules/@esbuild/darwin-arm64": { 277 | "version": "0.21.5", 278 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 279 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 280 | "cpu": [ 281 | "arm64" 282 | ], 283 | "dev": true, 284 | "license": "MIT", 285 | "optional": true, 286 | "os": [ 287 | "darwin" 288 | ], 289 | "engines": { 290 | "node": ">=12" 291 | } 292 | }, 293 | "node_modules/@esbuild/darwin-x64": { 294 | "version": "0.21.5", 295 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 296 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 297 | "cpu": [ 298 | "x64" 299 | ], 300 | "dev": true, 301 | "license": "MIT", 302 | "optional": true, 303 | "os": [ 304 | "darwin" 305 | ], 306 | "engines": { 307 | "node": ">=12" 308 | } 309 | }, 310 | "node_modules/@esbuild/freebsd-arm64": { 311 | "version": "0.21.5", 312 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 313 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 314 | "cpu": [ 315 | "arm64" 316 | ], 317 | "dev": true, 318 | "license": "MIT", 319 | "optional": true, 320 | "os": [ 321 | "freebsd" 322 | ], 323 | "engines": { 324 | "node": ">=12" 325 | } 326 | }, 327 | "node_modules/@esbuild/freebsd-x64": { 328 | "version": "0.21.5", 329 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 330 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 331 | "cpu": [ 332 | "x64" 333 | ], 334 | "dev": true, 335 | "license": "MIT", 336 | "optional": true, 337 | "os": [ 338 | "freebsd" 339 | ], 340 | "engines": { 341 | "node": ">=12" 342 | } 343 | }, 344 | "node_modules/@esbuild/linux-arm": { 345 | "version": "0.21.5", 346 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 347 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 348 | "cpu": [ 349 | "arm" 350 | ], 351 | "dev": true, 352 | "license": "MIT", 353 | "optional": true, 354 | "os": [ 355 | "linux" 356 | ], 357 | "engines": { 358 | "node": ">=12" 359 | } 360 | }, 361 | "node_modules/@esbuild/linux-arm64": { 362 | "version": "0.21.5", 363 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 364 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 365 | "cpu": [ 366 | "arm64" 367 | ], 368 | "dev": true, 369 | "license": "MIT", 370 | "optional": true, 371 | "os": [ 372 | "linux" 373 | ], 374 | "engines": { 375 | "node": ">=12" 376 | } 377 | }, 378 | "node_modules/@esbuild/linux-ia32": { 379 | "version": "0.21.5", 380 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 381 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 382 | "cpu": [ 383 | "ia32" 384 | ], 385 | "dev": true, 386 | "license": "MIT", 387 | "optional": true, 388 | "os": [ 389 | "linux" 390 | ], 391 | "engines": { 392 | "node": ">=12" 393 | } 394 | }, 395 | "node_modules/@esbuild/linux-loong64": { 396 | "version": "0.21.5", 397 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 398 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 399 | "cpu": [ 400 | "loong64" 401 | ], 402 | "dev": true, 403 | "license": "MIT", 404 | "optional": true, 405 | "os": [ 406 | "linux" 407 | ], 408 | "engines": { 409 | "node": ">=12" 410 | } 411 | }, 412 | "node_modules/@esbuild/linux-mips64el": { 413 | "version": "0.21.5", 414 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 415 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 416 | "cpu": [ 417 | "mips64el" 418 | ], 419 | "dev": true, 420 | "license": "MIT", 421 | "optional": true, 422 | "os": [ 423 | "linux" 424 | ], 425 | "engines": { 426 | "node": ">=12" 427 | } 428 | }, 429 | "node_modules/@esbuild/linux-ppc64": { 430 | "version": "0.21.5", 431 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 432 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 433 | "cpu": [ 434 | "ppc64" 435 | ], 436 | "dev": true, 437 | "license": "MIT", 438 | "optional": true, 439 | "os": [ 440 | "linux" 441 | ], 442 | "engines": { 443 | "node": ">=12" 444 | } 445 | }, 446 | "node_modules/@esbuild/linux-riscv64": { 447 | "version": "0.21.5", 448 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 449 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 450 | "cpu": [ 451 | "riscv64" 452 | ], 453 | "dev": true, 454 | "license": "MIT", 455 | "optional": true, 456 | "os": [ 457 | "linux" 458 | ], 459 | "engines": { 460 | "node": ">=12" 461 | } 462 | }, 463 | "node_modules/@esbuild/linux-s390x": { 464 | "version": "0.21.5", 465 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 466 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 467 | "cpu": [ 468 | "s390x" 469 | ], 470 | "dev": true, 471 | "license": "MIT", 472 | "optional": true, 473 | "os": [ 474 | "linux" 475 | ], 476 | "engines": { 477 | "node": ">=12" 478 | } 479 | }, 480 | "node_modules/@esbuild/linux-x64": { 481 | "version": "0.21.5", 482 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 483 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 484 | "cpu": [ 485 | "x64" 486 | ], 487 | "dev": true, 488 | "license": "MIT", 489 | "optional": true, 490 | "os": [ 491 | "linux" 492 | ], 493 | "engines": { 494 | "node": ">=12" 495 | } 496 | }, 497 | "node_modules/@esbuild/netbsd-x64": { 498 | "version": "0.21.5", 499 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 500 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 501 | "cpu": [ 502 | "x64" 503 | ], 504 | "dev": true, 505 | "license": "MIT", 506 | "optional": true, 507 | "os": [ 508 | "netbsd" 509 | ], 510 | "engines": { 511 | "node": ">=12" 512 | } 513 | }, 514 | "node_modules/@esbuild/openbsd-x64": { 515 | "version": "0.21.5", 516 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 517 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 518 | "cpu": [ 519 | "x64" 520 | ], 521 | "dev": true, 522 | "license": "MIT", 523 | "optional": true, 524 | "os": [ 525 | "openbsd" 526 | ], 527 | "engines": { 528 | "node": ">=12" 529 | } 530 | }, 531 | "node_modules/@esbuild/sunos-x64": { 532 | "version": "0.21.5", 533 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 534 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 535 | "cpu": [ 536 | "x64" 537 | ], 538 | "dev": true, 539 | "license": "MIT", 540 | "optional": true, 541 | "os": [ 542 | "sunos" 543 | ], 544 | "engines": { 545 | "node": ">=12" 546 | } 547 | }, 548 | "node_modules/@esbuild/win32-arm64": { 549 | "version": "0.21.5", 550 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 551 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 552 | "cpu": [ 553 | "arm64" 554 | ], 555 | "dev": true, 556 | "license": "MIT", 557 | "optional": true, 558 | "os": [ 559 | "win32" 560 | ], 561 | "engines": { 562 | "node": ">=12" 563 | } 564 | }, 565 | "node_modules/@esbuild/win32-ia32": { 566 | "version": "0.21.5", 567 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 568 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 569 | "cpu": [ 570 | "ia32" 571 | ], 572 | "dev": true, 573 | "license": "MIT", 574 | "optional": true, 575 | "os": [ 576 | "win32" 577 | ], 578 | "engines": { 579 | "node": ">=12" 580 | } 581 | }, 582 | "node_modules/@esbuild/win32-x64": { 583 | "version": "0.21.5", 584 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 585 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 586 | "cpu": [ 587 | "x64" 588 | ], 589 | "dev": true, 590 | "license": "MIT", 591 | "optional": true, 592 | "os": [ 593 | "win32" 594 | ], 595 | "engines": { 596 | "node": ">=12" 597 | } 598 | }, 599 | "node_modules/@fastify/busboy": { 600 | "version": "2.1.1", 601 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", 602 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 603 | "dev": true, 604 | "license": "MIT", 605 | "engines": { 606 | "node": ">=14" 607 | } 608 | }, 609 | "node_modules/@jridgewell/resolve-uri": { 610 | "version": "3.1.2", 611 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 612 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 613 | "dev": true, 614 | "license": "MIT", 615 | "engines": { 616 | "node": ">=6.0.0" 617 | } 618 | }, 619 | "node_modules/@jridgewell/sourcemap-codec": { 620 | "version": "1.5.0", 621 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 622 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 623 | "dev": true, 624 | "license": "MIT" 625 | }, 626 | "node_modules/@jridgewell/trace-mapping": { 627 | "version": "0.3.9", 628 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 629 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 630 | "dev": true, 631 | "license": "MIT", 632 | "dependencies": { 633 | "@jridgewell/resolve-uri": "^3.0.3", 634 | "@jridgewell/sourcemap-codec": "^1.4.10" 635 | } 636 | }, 637 | "node_modules/@rollup/rollup-android-arm-eabi": { 638 | "version": "4.26.0", 639 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz", 640 | "integrity": "sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==", 641 | "cpu": [ 642 | "arm" 643 | ], 644 | "dev": true, 645 | "license": "MIT", 646 | "optional": true, 647 | "os": [ 648 | "android" 649 | ] 650 | }, 651 | "node_modules/@rollup/rollup-android-arm64": { 652 | "version": "4.26.0", 653 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.26.0.tgz", 654 | "integrity": "sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==", 655 | "cpu": [ 656 | "arm64" 657 | ], 658 | "dev": true, 659 | "license": "MIT", 660 | "optional": true, 661 | "os": [ 662 | "android" 663 | ] 664 | }, 665 | "node_modules/@rollup/rollup-darwin-arm64": { 666 | "version": "4.26.0", 667 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.26.0.tgz", 668 | "integrity": "sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==", 669 | "cpu": [ 670 | "arm64" 671 | ], 672 | "dev": true, 673 | "license": "MIT", 674 | "optional": true, 675 | "os": [ 676 | "darwin" 677 | ] 678 | }, 679 | "node_modules/@rollup/rollup-darwin-x64": { 680 | "version": "4.26.0", 681 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.26.0.tgz", 682 | "integrity": "sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==", 683 | "cpu": [ 684 | "x64" 685 | ], 686 | "dev": true, 687 | "license": "MIT", 688 | "optional": true, 689 | "os": [ 690 | "darwin" 691 | ] 692 | }, 693 | "node_modules/@rollup/rollup-freebsd-arm64": { 694 | "version": "4.26.0", 695 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.26.0.tgz", 696 | "integrity": "sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==", 697 | "cpu": [ 698 | "arm64" 699 | ], 700 | "dev": true, 701 | "license": "MIT", 702 | "optional": true, 703 | "os": [ 704 | "freebsd" 705 | ] 706 | }, 707 | "node_modules/@rollup/rollup-freebsd-x64": { 708 | "version": "4.26.0", 709 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.26.0.tgz", 710 | "integrity": "sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==", 711 | "cpu": [ 712 | "x64" 713 | ], 714 | "dev": true, 715 | "license": "MIT", 716 | "optional": true, 717 | "os": [ 718 | "freebsd" 719 | ] 720 | }, 721 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 722 | "version": "4.26.0", 723 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.26.0.tgz", 724 | "integrity": "sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==", 725 | "cpu": [ 726 | "arm" 727 | ], 728 | "dev": true, 729 | "license": "MIT", 730 | "optional": true, 731 | "os": [ 732 | "linux" 733 | ] 734 | }, 735 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 736 | "version": "4.26.0", 737 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.26.0.tgz", 738 | "integrity": "sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==", 739 | "cpu": [ 740 | "arm" 741 | ], 742 | "dev": true, 743 | "license": "MIT", 744 | "optional": true, 745 | "os": [ 746 | "linux" 747 | ] 748 | }, 749 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 750 | "version": "4.26.0", 751 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.26.0.tgz", 752 | "integrity": "sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==", 753 | "cpu": [ 754 | "arm64" 755 | ], 756 | "dev": true, 757 | "license": "MIT", 758 | "optional": true, 759 | "os": [ 760 | "linux" 761 | ] 762 | }, 763 | "node_modules/@rollup/rollup-linux-arm64-musl": { 764 | "version": "4.26.0", 765 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.26.0.tgz", 766 | "integrity": "sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==", 767 | "cpu": [ 768 | "arm64" 769 | ], 770 | "dev": true, 771 | "license": "MIT", 772 | "optional": true, 773 | "os": [ 774 | "linux" 775 | ] 776 | }, 777 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 778 | "version": "4.26.0", 779 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.26.0.tgz", 780 | "integrity": "sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==", 781 | "cpu": [ 782 | "ppc64" 783 | ], 784 | "dev": true, 785 | "license": "MIT", 786 | "optional": true, 787 | "os": [ 788 | "linux" 789 | ] 790 | }, 791 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 792 | "version": "4.26.0", 793 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.26.0.tgz", 794 | "integrity": "sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==", 795 | "cpu": [ 796 | "riscv64" 797 | ], 798 | "dev": true, 799 | "license": "MIT", 800 | "optional": true, 801 | "os": [ 802 | "linux" 803 | ] 804 | }, 805 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 806 | "version": "4.26.0", 807 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.26.0.tgz", 808 | "integrity": "sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==", 809 | "cpu": [ 810 | "s390x" 811 | ], 812 | "dev": true, 813 | "license": "MIT", 814 | "optional": true, 815 | "os": [ 816 | "linux" 817 | ] 818 | }, 819 | "node_modules/@rollup/rollup-linux-x64-gnu": { 820 | "version": "4.26.0", 821 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.26.0.tgz", 822 | "integrity": "sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==", 823 | "cpu": [ 824 | "x64" 825 | ], 826 | "dev": true, 827 | "license": "MIT", 828 | "optional": true, 829 | "os": [ 830 | "linux" 831 | ] 832 | }, 833 | "node_modules/@rollup/rollup-linux-x64-musl": { 834 | "version": "4.26.0", 835 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.26.0.tgz", 836 | "integrity": "sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==", 837 | "cpu": [ 838 | "x64" 839 | ], 840 | "dev": true, 841 | "license": "MIT", 842 | "optional": true, 843 | "os": [ 844 | "linux" 845 | ] 846 | }, 847 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 848 | "version": "4.26.0", 849 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.26.0.tgz", 850 | "integrity": "sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==", 851 | "cpu": [ 852 | "arm64" 853 | ], 854 | "dev": true, 855 | "license": "MIT", 856 | "optional": true, 857 | "os": [ 858 | "win32" 859 | ] 860 | }, 861 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 862 | "version": "4.26.0", 863 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.26.0.tgz", 864 | "integrity": "sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==", 865 | "cpu": [ 866 | "ia32" 867 | ], 868 | "dev": true, 869 | "license": "MIT", 870 | "optional": true, 871 | "os": [ 872 | "win32" 873 | ] 874 | }, 875 | "node_modules/@rollup/rollup-win32-x64-msvc": { 876 | "version": "4.26.0", 877 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.26.0.tgz", 878 | "integrity": "sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==", 879 | "cpu": [ 880 | "x64" 881 | ], 882 | "dev": true, 883 | "license": "MIT", 884 | "optional": true, 885 | "os": [ 886 | "win32" 887 | ] 888 | }, 889 | "node_modules/@types/estree": { 890 | "version": "1.0.6", 891 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 892 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 893 | "dev": true, 894 | "license": "MIT" 895 | }, 896 | "node_modules/@types/node": { 897 | "version": "20.14.10", 898 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", 899 | "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", 900 | "dev": true, 901 | "license": "MIT", 902 | "dependencies": { 903 | "undici-types": "~5.26.4" 904 | } 905 | }, 906 | "node_modules/@types/node-forge": { 907 | "version": "1.3.11", 908 | "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", 909 | "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", 910 | "dev": true, 911 | "license": "MIT", 912 | "dependencies": { 913 | "@types/node": "*" 914 | } 915 | }, 916 | "node_modules/@types/ssh2": { 917 | "version": "1.15.0", 918 | "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.0.tgz", 919 | "integrity": "sha512-YcT8jP5F8NzWeevWvcyrrLB3zcneVjzYY9ZDSMAMboI+2zR1qYWFhwsyOFVzT7Jorn67vqxC0FRiw8YyG9P1ww==", 920 | "dev": true, 921 | "license": "MIT", 922 | "dependencies": { 923 | "@types/node": "^18.11.18" 924 | } 925 | }, 926 | "node_modules/@types/ssh2/node_modules/@types/node": { 927 | "version": "18.19.42", 928 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", 929 | "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", 930 | "dev": true, 931 | "license": "MIT", 932 | "dependencies": { 933 | "undici-types": "~5.26.4" 934 | } 935 | }, 936 | "node_modules/@types/stremio-addon-sdk": { 937 | "version": "1.6.11", 938 | "resolved": "https://registry.npmjs.org/@types/stremio-addon-sdk/-/stremio-addon-sdk-1.6.11.tgz", 939 | "integrity": "sha512-y0nXwX2gqrWcVYLEvujxqLOm/yZoMu8nLyiw1MthgVuiPp6RVfgWqwpql71MUV5shSfPNsd7EtsiWw2cUFhcWQ==", 940 | "dev": true, 941 | "license": "MIT" 942 | }, 943 | "node_modules/@vitest/expect": { 944 | "version": "2.1.5", 945 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", 946 | "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", 947 | "dev": true, 948 | "license": "MIT", 949 | "dependencies": { 950 | "@vitest/spy": "2.1.5", 951 | "@vitest/utils": "2.1.5", 952 | "chai": "^5.1.2", 953 | "tinyrainbow": "^1.2.0" 954 | }, 955 | "funding": { 956 | "url": "https://opencollective.com/vitest" 957 | } 958 | }, 959 | "node_modules/@vitest/mocker": { 960 | "version": "2.1.5", 961 | "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", 962 | "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", 963 | "dev": true, 964 | "license": "MIT", 965 | "dependencies": { 966 | "@vitest/spy": "2.1.5", 967 | "estree-walker": "^3.0.3", 968 | "magic-string": "^0.30.12" 969 | }, 970 | "funding": { 971 | "url": "https://opencollective.com/vitest" 972 | }, 973 | "peerDependencies": { 974 | "msw": "^2.4.9", 975 | "vite": "^5.0.0" 976 | }, 977 | "peerDependenciesMeta": { 978 | "msw": { 979 | "optional": true 980 | }, 981 | "vite": { 982 | "optional": true 983 | } 984 | } 985 | }, 986 | "node_modules/@vitest/mocker/node_modules/estree-walker": { 987 | "version": "3.0.3", 988 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 989 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 990 | "dev": true, 991 | "license": "MIT", 992 | "dependencies": { 993 | "@types/estree": "^1.0.0" 994 | } 995 | }, 996 | "node_modules/@vitest/mocker/node_modules/magic-string": { 997 | "version": "0.30.12", 998 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", 999 | "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", 1000 | "dev": true, 1001 | "license": "MIT", 1002 | "dependencies": { 1003 | "@jridgewell/sourcemap-codec": "^1.5.0" 1004 | } 1005 | }, 1006 | "node_modules/@vitest/pretty-format": { 1007 | "version": "2.1.5", 1008 | "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", 1009 | "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", 1010 | "dev": true, 1011 | "license": "MIT", 1012 | "dependencies": { 1013 | "tinyrainbow": "^1.2.0" 1014 | }, 1015 | "funding": { 1016 | "url": "https://opencollective.com/vitest" 1017 | } 1018 | }, 1019 | "node_modules/@vitest/runner": { 1020 | "version": "2.1.5", 1021 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", 1022 | "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", 1023 | "dev": true, 1024 | "license": "MIT", 1025 | "dependencies": { 1026 | "@vitest/utils": "2.1.5", 1027 | "pathe": "^1.1.2" 1028 | }, 1029 | "funding": { 1030 | "url": "https://opencollective.com/vitest" 1031 | } 1032 | }, 1033 | "node_modules/@vitest/snapshot": { 1034 | "version": "2.1.5", 1035 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", 1036 | "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", 1037 | "dev": true, 1038 | "license": "MIT", 1039 | "dependencies": { 1040 | "@vitest/pretty-format": "2.1.5", 1041 | "magic-string": "^0.30.12", 1042 | "pathe": "^1.1.2" 1043 | }, 1044 | "funding": { 1045 | "url": "https://opencollective.com/vitest" 1046 | } 1047 | }, 1048 | "node_modules/@vitest/snapshot/node_modules/magic-string": { 1049 | "version": "0.30.12", 1050 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", 1051 | "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", 1052 | "dev": true, 1053 | "license": "MIT", 1054 | "dependencies": { 1055 | "@jridgewell/sourcemap-codec": "^1.5.0" 1056 | } 1057 | }, 1058 | "node_modules/@vitest/spy": { 1059 | "version": "2.1.5", 1060 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", 1061 | "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", 1062 | "dev": true, 1063 | "license": "MIT", 1064 | "dependencies": { 1065 | "tinyspy": "^3.0.2" 1066 | }, 1067 | "funding": { 1068 | "url": "https://opencollective.com/vitest" 1069 | } 1070 | }, 1071 | "node_modules/@vitest/utils": { 1072 | "version": "2.1.5", 1073 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", 1074 | "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", 1075 | "dev": true, 1076 | "license": "MIT", 1077 | "dependencies": { 1078 | "@vitest/pretty-format": "2.1.5", 1079 | "loupe": "^3.1.2", 1080 | "tinyrainbow": "^1.2.0" 1081 | }, 1082 | "funding": { 1083 | "url": "https://opencollective.com/vitest" 1084 | } 1085 | }, 1086 | "node_modules/accepts": { 1087 | "version": "1.3.8", 1088 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 1089 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 1090 | "license": "MIT", 1091 | "dependencies": { 1092 | "mime-types": "~2.1.34", 1093 | "negotiator": "0.6.3" 1094 | }, 1095 | "engines": { 1096 | "node": ">= 0.6" 1097 | } 1098 | }, 1099 | "node_modules/acorn": { 1100 | "version": "8.12.1", 1101 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 1102 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 1103 | "dev": true, 1104 | "license": "MIT", 1105 | "bin": { 1106 | "acorn": "bin/acorn" 1107 | }, 1108 | "engines": { 1109 | "node": ">=0.4.0" 1110 | } 1111 | }, 1112 | "node_modules/acorn-walk": { 1113 | "version": "8.3.3", 1114 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 1115 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 1116 | "dev": true, 1117 | "license": "MIT", 1118 | "dependencies": { 1119 | "acorn": "^8.11.0" 1120 | }, 1121 | "engines": { 1122 | "node": ">=0.4.0" 1123 | } 1124 | }, 1125 | "node_modules/ansi-escapes": { 1126 | "version": "3.2.0", 1127 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 1128 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 1129 | "license": "MIT", 1130 | "engines": { 1131 | "node": ">=4" 1132 | } 1133 | }, 1134 | "node_modules/ansi-regex": { 1135 | "version": "4.1.1", 1136 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1137 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 1138 | "license": "MIT", 1139 | "engines": { 1140 | "node": ">=6" 1141 | } 1142 | }, 1143 | "node_modules/ansi-styles": { 1144 | "version": "3.2.1", 1145 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1146 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1147 | "license": "MIT", 1148 | "dependencies": { 1149 | "color-convert": "^1.9.0" 1150 | }, 1151 | "engines": { 1152 | "node": ">=4" 1153 | } 1154 | }, 1155 | "node_modules/anymatch": { 1156 | "version": "3.1.3", 1157 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1158 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1159 | "dev": true, 1160 | "license": "ISC", 1161 | "dependencies": { 1162 | "normalize-path": "^3.0.0", 1163 | "picomatch": "^2.0.4" 1164 | }, 1165 | "engines": { 1166 | "node": ">= 8" 1167 | } 1168 | }, 1169 | "node_modules/array-flatten": { 1170 | "version": "1.1.1", 1171 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 1172 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", 1173 | "license": "MIT" 1174 | }, 1175 | "node_modules/as-table": { 1176 | "version": "1.0.55", 1177 | "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", 1178 | "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", 1179 | "dev": true, 1180 | "license": "MIT", 1181 | "dependencies": { 1182 | "printable-characters": "^1.0.42" 1183 | } 1184 | }, 1185 | "node_modules/asn1": { 1186 | "version": "0.2.6", 1187 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", 1188 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", 1189 | "dev": true, 1190 | "license": "MIT", 1191 | "dependencies": { 1192 | "safer-buffer": "~2.1.0" 1193 | } 1194 | }, 1195 | "node_modules/assertion-error": { 1196 | "version": "2.0.1", 1197 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 1198 | "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 1199 | "dev": true, 1200 | "license": "MIT", 1201 | "engines": { 1202 | "node": ">=12" 1203 | } 1204 | }, 1205 | "node_modules/async-file": { 1206 | "version": "2.0.2", 1207 | "resolved": "https://registry.npmjs.org/async-file/-/async-file-2.0.2.tgz", 1208 | "integrity": "sha512-oVmpzk0eaqZ022vPnkYHS/GaZO0y1B2DwB6rInNYg/1Rc+2hs0oUushzYFkizUyDpBY0PbEJ/RoCkJyAbrNluw==", 1209 | "dev": true, 1210 | "license": "MIT", 1211 | "dependencies": { 1212 | "rimraf": "^2.5.2" 1213 | } 1214 | }, 1215 | "node_modules/balanced-match": { 1216 | "version": "1.0.2", 1217 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1218 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1219 | "dev": true, 1220 | "license": "MIT" 1221 | }, 1222 | "node_modules/bcrypt-pbkdf": { 1223 | "version": "1.0.2", 1224 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 1225 | "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", 1226 | "dev": true, 1227 | "license": "BSD-3-Clause", 1228 | "dependencies": { 1229 | "tweetnacl": "^0.14.3" 1230 | } 1231 | }, 1232 | "node_modules/beamup-cli": { 1233 | "version": "1.3.0", 1234 | "resolved": "https://registry.npmjs.org/beamup-cli/-/beamup-cli-1.3.0.tgz", 1235 | "integrity": "sha512-OjYg5FnrytUwoD2rNWpqs8166VFqlGas2FbwKOitaq42SdURwpoFMMjcajcC/goDJSStjDjH7b5Ey+e4jRa1tw==", 1236 | "dev": true, 1237 | "license": "MIT", 1238 | "dependencies": { 1239 | "async-file": "2.0.2", 1240 | "commander": "6.1.0", 1241 | "crypto-js": "4.0.0", 1242 | "node-ssh": "13.1.0" 1243 | }, 1244 | "bin": { 1245 | "beamup": "bin/index.js" 1246 | } 1247 | }, 1248 | "node_modules/binary-extensions": { 1249 | "version": "2.3.0", 1250 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 1251 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 1252 | "dev": true, 1253 | "license": "MIT", 1254 | "engines": { 1255 | "node": ">=8" 1256 | }, 1257 | "funding": { 1258 | "url": "https://github.com/sponsors/sindresorhus" 1259 | } 1260 | }, 1261 | "node_modules/blake3-wasm": { 1262 | "version": "2.1.5", 1263 | "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", 1264 | "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", 1265 | "dev": true, 1266 | "license": "MIT" 1267 | }, 1268 | "node_modules/body-parser": { 1269 | "version": "1.20.2", 1270 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 1271 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 1272 | "license": "MIT", 1273 | "dependencies": { 1274 | "bytes": "3.1.2", 1275 | "content-type": "~1.0.5", 1276 | "debug": "2.6.9", 1277 | "depd": "2.0.0", 1278 | "destroy": "1.2.0", 1279 | "http-errors": "2.0.0", 1280 | "iconv-lite": "0.4.24", 1281 | "on-finished": "2.4.1", 1282 | "qs": "6.11.0", 1283 | "raw-body": "2.5.2", 1284 | "type-is": "~1.6.18", 1285 | "unpipe": "1.0.0" 1286 | }, 1287 | "engines": { 1288 | "node": ">= 0.8", 1289 | "npm": "1.2.8000 || >= 1.4.16" 1290 | } 1291 | }, 1292 | "node_modules/brace-expansion": { 1293 | "version": "1.1.11", 1294 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1295 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1296 | "dev": true, 1297 | "license": "MIT", 1298 | "dependencies": { 1299 | "balanced-match": "^1.0.0", 1300 | "concat-map": "0.0.1" 1301 | } 1302 | }, 1303 | "node_modules/braces": { 1304 | "version": "3.0.3", 1305 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1306 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1307 | "dev": true, 1308 | "license": "MIT", 1309 | "dependencies": { 1310 | "fill-range": "^7.1.1" 1311 | }, 1312 | "engines": { 1313 | "node": ">=8" 1314 | } 1315 | }, 1316 | "node_modules/buildcheck": { 1317 | "version": "0.0.6", 1318 | "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", 1319 | "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", 1320 | "dev": true, 1321 | "optional": true, 1322 | "engines": { 1323 | "node": ">=10.0.0" 1324 | } 1325 | }, 1326 | "node_modules/bytes": { 1327 | "version": "3.1.2", 1328 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 1329 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 1330 | "license": "MIT", 1331 | "engines": { 1332 | "node": ">= 0.8" 1333 | } 1334 | }, 1335 | "node_modules/cac": { 1336 | "version": "6.7.14", 1337 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1338 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1339 | "dev": true, 1340 | "license": "MIT", 1341 | "engines": { 1342 | "node": ">=8" 1343 | } 1344 | }, 1345 | "node_modules/call-bind": { 1346 | "version": "1.0.7", 1347 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 1348 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 1349 | "license": "MIT", 1350 | "dependencies": { 1351 | "es-define-property": "^1.0.0", 1352 | "es-errors": "^1.3.0", 1353 | "function-bind": "^1.1.2", 1354 | "get-intrinsic": "^1.2.4", 1355 | "set-function-length": "^1.2.1" 1356 | }, 1357 | "engines": { 1358 | "node": ">= 0.4" 1359 | }, 1360 | "funding": { 1361 | "url": "https://github.com/sponsors/ljharb" 1362 | } 1363 | }, 1364 | "node_modules/capnp-ts": { 1365 | "version": "0.7.0", 1366 | "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", 1367 | "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", 1368 | "dev": true, 1369 | "license": "MIT", 1370 | "dependencies": { 1371 | "debug": "^4.3.1", 1372 | "tslib": "^2.2.0" 1373 | } 1374 | }, 1375 | "node_modules/capnp-ts/node_modules/debug": { 1376 | "version": "4.3.6", 1377 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 1378 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 1379 | "dev": true, 1380 | "license": "MIT", 1381 | "dependencies": { 1382 | "ms": "2.1.2" 1383 | }, 1384 | "engines": { 1385 | "node": ">=6.0" 1386 | }, 1387 | "peerDependenciesMeta": { 1388 | "supports-color": { 1389 | "optional": true 1390 | } 1391 | } 1392 | }, 1393 | "node_modules/capnp-ts/node_modules/ms": { 1394 | "version": "2.1.2", 1395 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1396 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1397 | "dev": true, 1398 | "license": "MIT" 1399 | }, 1400 | "node_modules/capnp-ts/node_modules/tslib": { 1401 | "version": "2.6.3", 1402 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", 1403 | "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", 1404 | "dev": true, 1405 | "license": "0BSD" 1406 | }, 1407 | "node_modules/chai": { 1408 | "version": "5.1.2", 1409 | "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", 1410 | "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", 1411 | "dev": true, 1412 | "license": "MIT", 1413 | "dependencies": { 1414 | "assertion-error": "^2.0.1", 1415 | "check-error": "^2.1.1", 1416 | "deep-eql": "^5.0.1", 1417 | "loupe": "^3.1.0", 1418 | "pathval": "^2.0.0" 1419 | }, 1420 | "engines": { 1421 | "node": ">=12" 1422 | } 1423 | }, 1424 | "node_modules/chalk": { 1425 | "version": "2.4.2", 1426 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1427 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1428 | "license": "MIT", 1429 | "dependencies": { 1430 | "ansi-styles": "^3.2.1", 1431 | "escape-string-regexp": "^1.0.5", 1432 | "supports-color": "^5.3.0" 1433 | }, 1434 | "engines": { 1435 | "node": ">=4" 1436 | } 1437 | }, 1438 | "node_modules/chardet": { 1439 | "version": "0.7.0", 1440 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 1441 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 1442 | "license": "MIT" 1443 | }, 1444 | "node_modules/check-error": { 1445 | "version": "2.1.1", 1446 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", 1447 | "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", 1448 | "dev": true, 1449 | "license": "MIT", 1450 | "engines": { 1451 | "node": ">= 16" 1452 | } 1453 | }, 1454 | "node_modules/chokidar": { 1455 | "version": "3.6.0", 1456 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 1457 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 1458 | "dev": true, 1459 | "license": "MIT", 1460 | "dependencies": { 1461 | "anymatch": "~3.1.2", 1462 | "braces": "~3.0.2", 1463 | "glob-parent": "~5.1.2", 1464 | "is-binary-path": "~2.1.0", 1465 | "is-glob": "~4.0.1", 1466 | "normalize-path": "~3.0.0", 1467 | "readdirp": "~3.6.0" 1468 | }, 1469 | "engines": { 1470 | "node": ">= 8.10.0" 1471 | }, 1472 | "funding": { 1473 | "url": "https://paulmillr.com/funding/" 1474 | }, 1475 | "optionalDependencies": { 1476 | "fsevents": "~2.3.2" 1477 | } 1478 | }, 1479 | "node_modules/cli-cursor": { 1480 | "version": "2.1.0", 1481 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 1482 | "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", 1483 | "license": "MIT", 1484 | "dependencies": { 1485 | "restore-cursor": "^2.0.0" 1486 | }, 1487 | "engines": { 1488 | "node": ">=4" 1489 | } 1490 | }, 1491 | "node_modules/cli-width": { 1492 | "version": "2.2.1", 1493 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 1494 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", 1495 | "license": "ISC" 1496 | }, 1497 | "node_modules/color-convert": { 1498 | "version": "1.9.3", 1499 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1500 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1501 | "license": "MIT", 1502 | "dependencies": { 1503 | "color-name": "1.1.3" 1504 | } 1505 | }, 1506 | "node_modules/color-name": { 1507 | "version": "1.1.3", 1508 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1509 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 1510 | "license": "MIT" 1511 | }, 1512 | "node_modules/commander": { 1513 | "version": "6.1.0", 1514 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", 1515 | "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", 1516 | "dev": true, 1517 | "license": "MIT", 1518 | "engines": { 1519 | "node": ">= 6" 1520 | } 1521 | }, 1522 | "node_modules/concat-map": { 1523 | "version": "0.0.1", 1524 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1525 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1526 | "dev": true, 1527 | "license": "MIT" 1528 | }, 1529 | "node_modules/consola": { 1530 | "version": "3.2.3", 1531 | "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", 1532 | "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", 1533 | "dev": true, 1534 | "license": "MIT", 1535 | "engines": { 1536 | "node": "^14.18.0 || >=16.10.0" 1537 | } 1538 | }, 1539 | "node_modules/content-disposition": { 1540 | "version": "0.5.4", 1541 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 1542 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 1543 | "license": "MIT", 1544 | "dependencies": { 1545 | "safe-buffer": "5.2.1" 1546 | }, 1547 | "engines": { 1548 | "node": ">= 0.6" 1549 | } 1550 | }, 1551 | "node_modules/content-type": { 1552 | "version": "1.0.5", 1553 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 1554 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 1555 | "license": "MIT", 1556 | "engines": { 1557 | "node": ">= 0.6" 1558 | } 1559 | }, 1560 | "node_modules/cookie": { 1561 | "version": "0.6.0", 1562 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 1563 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 1564 | "license": "MIT", 1565 | "engines": { 1566 | "node": ">= 0.6" 1567 | } 1568 | }, 1569 | "node_modules/cookie-signature": { 1570 | "version": "1.0.6", 1571 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 1572 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", 1573 | "license": "MIT" 1574 | }, 1575 | "node_modules/cors": { 1576 | "version": "2.8.5", 1577 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 1578 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 1579 | "license": "MIT", 1580 | "dependencies": { 1581 | "object-assign": "^4", 1582 | "vary": "^1" 1583 | }, 1584 | "engines": { 1585 | "node": ">= 0.10" 1586 | } 1587 | }, 1588 | "node_modules/cpu-features": { 1589 | "version": "0.0.10", 1590 | "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", 1591 | "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", 1592 | "dev": true, 1593 | "hasInstallScript": true, 1594 | "optional": true, 1595 | "dependencies": { 1596 | "buildcheck": "~0.0.6", 1597 | "nan": "^2.19.0" 1598 | }, 1599 | "engines": { 1600 | "node": ">=10.0.0" 1601 | } 1602 | }, 1603 | "node_modules/cross-env": { 1604 | "version": "7.0.3", 1605 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", 1606 | "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", 1607 | "dev": true, 1608 | "license": "MIT", 1609 | "dependencies": { 1610 | "cross-spawn": "^7.0.1" 1611 | }, 1612 | "bin": { 1613 | "cross-env": "src/bin/cross-env.js", 1614 | "cross-env-shell": "src/bin/cross-env-shell.js" 1615 | }, 1616 | "engines": { 1617 | "node": ">=10.14", 1618 | "npm": ">=6", 1619 | "yarn": ">=1" 1620 | } 1621 | }, 1622 | "node_modules/cross-spawn": { 1623 | "version": "7.0.3", 1624 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1625 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1626 | "dev": true, 1627 | "license": "MIT", 1628 | "dependencies": { 1629 | "path-key": "^3.1.0", 1630 | "shebang-command": "^2.0.0", 1631 | "which": "^2.0.1" 1632 | }, 1633 | "engines": { 1634 | "node": ">= 8" 1635 | } 1636 | }, 1637 | "node_modules/crypto-js": { 1638 | "version": "4.0.0", 1639 | "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", 1640 | "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==", 1641 | "dev": true, 1642 | "license": "MIT" 1643 | }, 1644 | "node_modules/data-uri-to-buffer": { 1645 | "version": "2.0.2", 1646 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", 1647 | "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", 1648 | "dev": true, 1649 | "license": "MIT" 1650 | }, 1651 | "node_modules/date-fns": { 1652 | "version": "3.6.0", 1653 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", 1654 | "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", 1655 | "dev": true, 1656 | "license": "MIT", 1657 | "funding": { 1658 | "type": "github", 1659 | "url": "https://github.com/sponsors/kossnocorp" 1660 | } 1661 | }, 1662 | "node_modules/debug": { 1663 | "version": "2.6.9", 1664 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1665 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1666 | "license": "MIT", 1667 | "dependencies": { 1668 | "ms": "2.0.0" 1669 | } 1670 | }, 1671 | "node_modules/deep-eql": { 1672 | "version": "5.0.2", 1673 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 1674 | "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 1675 | "dev": true, 1676 | "license": "MIT", 1677 | "engines": { 1678 | "node": ">=6" 1679 | } 1680 | }, 1681 | "node_modules/define-data-property": { 1682 | "version": "1.1.4", 1683 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 1684 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 1685 | "license": "MIT", 1686 | "dependencies": { 1687 | "es-define-property": "^1.0.0", 1688 | "es-errors": "^1.3.0", 1689 | "gopd": "^1.0.1" 1690 | }, 1691 | "engines": { 1692 | "node": ">= 0.4" 1693 | }, 1694 | "funding": { 1695 | "url": "https://github.com/sponsors/ljharb" 1696 | } 1697 | }, 1698 | "node_modules/defu": { 1699 | "version": "6.1.4", 1700 | "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", 1701 | "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", 1702 | "dev": true, 1703 | "license": "MIT" 1704 | }, 1705 | "node_modules/depd": { 1706 | "version": "2.0.0", 1707 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1708 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 1709 | "license": "MIT", 1710 | "engines": { 1711 | "node": ">= 0.8" 1712 | } 1713 | }, 1714 | "node_modules/destroy": { 1715 | "version": "1.2.0", 1716 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1717 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 1718 | "license": "MIT", 1719 | "engines": { 1720 | "node": ">= 0.8", 1721 | "npm": "1.2.8000 || >= 1.4.16" 1722 | } 1723 | }, 1724 | "node_modules/ee-first": { 1725 | "version": "1.1.1", 1726 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1727 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 1728 | "license": "MIT" 1729 | }, 1730 | "node_modules/encodeurl": { 1731 | "version": "1.0.2", 1732 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1733 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 1734 | "license": "MIT", 1735 | "engines": { 1736 | "node": ">= 0.8" 1737 | } 1738 | }, 1739 | "node_modules/es-define-property": { 1740 | "version": "1.0.0", 1741 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 1742 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 1743 | "license": "MIT", 1744 | "dependencies": { 1745 | "get-intrinsic": "^1.2.4" 1746 | }, 1747 | "engines": { 1748 | "node": ">= 0.4" 1749 | } 1750 | }, 1751 | "node_modules/es-errors": { 1752 | "version": "1.3.0", 1753 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1754 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1755 | "license": "MIT", 1756 | "engines": { 1757 | "node": ">= 0.4" 1758 | } 1759 | }, 1760 | "node_modules/es-module-lexer": { 1761 | "version": "1.5.4", 1762 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", 1763 | "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", 1764 | "dev": true, 1765 | "license": "MIT" 1766 | }, 1767 | "node_modules/esbuild": { 1768 | "version": "0.21.5", 1769 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 1770 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 1771 | "dev": true, 1772 | "hasInstallScript": true, 1773 | "license": "MIT", 1774 | "bin": { 1775 | "esbuild": "bin/esbuild" 1776 | }, 1777 | "engines": { 1778 | "node": ">=12" 1779 | }, 1780 | "optionalDependencies": { 1781 | "@esbuild/aix-ppc64": "0.21.5", 1782 | "@esbuild/android-arm": "0.21.5", 1783 | "@esbuild/android-arm64": "0.21.5", 1784 | "@esbuild/android-x64": "0.21.5", 1785 | "@esbuild/darwin-arm64": "0.21.5", 1786 | "@esbuild/darwin-x64": "0.21.5", 1787 | "@esbuild/freebsd-arm64": "0.21.5", 1788 | "@esbuild/freebsd-x64": "0.21.5", 1789 | "@esbuild/linux-arm": "0.21.5", 1790 | "@esbuild/linux-arm64": "0.21.5", 1791 | "@esbuild/linux-ia32": "0.21.5", 1792 | "@esbuild/linux-loong64": "0.21.5", 1793 | "@esbuild/linux-mips64el": "0.21.5", 1794 | "@esbuild/linux-ppc64": "0.21.5", 1795 | "@esbuild/linux-riscv64": "0.21.5", 1796 | "@esbuild/linux-s390x": "0.21.5", 1797 | "@esbuild/linux-x64": "0.21.5", 1798 | "@esbuild/netbsd-x64": "0.21.5", 1799 | "@esbuild/openbsd-x64": "0.21.5", 1800 | "@esbuild/sunos-x64": "0.21.5", 1801 | "@esbuild/win32-arm64": "0.21.5", 1802 | "@esbuild/win32-ia32": "0.21.5", 1803 | "@esbuild/win32-x64": "0.21.5" 1804 | } 1805 | }, 1806 | "node_modules/escape-html": { 1807 | "version": "1.0.3", 1808 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1809 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 1810 | "license": "MIT" 1811 | }, 1812 | "node_modules/escape-string-regexp": { 1813 | "version": "1.0.5", 1814 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1815 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1816 | "license": "MIT", 1817 | "engines": { 1818 | "node": ">=0.8.0" 1819 | } 1820 | }, 1821 | "node_modules/estree-walker": { 1822 | "version": "0.6.1", 1823 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1824 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1825 | "dev": true, 1826 | "license": "MIT" 1827 | }, 1828 | "node_modules/etag": { 1829 | "version": "1.8.1", 1830 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1831 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 1832 | "license": "MIT", 1833 | "engines": { 1834 | "node": ">= 0.6" 1835 | } 1836 | }, 1837 | "node_modules/exit-hook": { 1838 | "version": "2.2.1", 1839 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", 1840 | "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", 1841 | "dev": true, 1842 | "license": "MIT", 1843 | "engines": { 1844 | "node": ">=6" 1845 | }, 1846 | "funding": { 1847 | "url": "https://github.com/sponsors/sindresorhus" 1848 | } 1849 | }, 1850 | "node_modules/expect-type": { 1851 | "version": "1.1.0", 1852 | "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", 1853 | "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", 1854 | "dev": true, 1855 | "license": "Apache-2.0", 1856 | "engines": { 1857 | "node": ">=12.0.0" 1858 | } 1859 | }, 1860 | "node_modules/express": { 1861 | "version": "4.19.2", 1862 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", 1863 | "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", 1864 | "license": "MIT", 1865 | "dependencies": { 1866 | "accepts": "~1.3.8", 1867 | "array-flatten": "1.1.1", 1868 | "body-parser": "1.20.2", 1869 | "content-disposition": "0.5.4", 1870 | "content-type": "~1.0.4", 1871 | "cookie": "0.6.0", 1872 | "cookie-signature": "1.0.6", 1873 | "debug": "2.6.9", 1874 | "depd": "2.0.0", 1875 | "encodeurl": "~1.0.2", 1876 | "escape-html": "~1.0.3", 1877 | "etag": "~1.8.1", 1878 | "finalhandler": "1.2.0", 1879 | "fresh": "0.5.2", 1880 | "http-errors": "2.0.0", 1881 | "merge-descriptors": "1.0.1", 1882 | "methods": "~1.1.2", 1883 | "on-finished": "2.4.1", 1884 | "parseurl": "~1.3.3", 1885 | "path-to-regexp": "0.1.7", 1886 | "proxy-addr": "~2.0.7", 1887 | "qs": "6.11.0", 1888 | "range-parser": "~1.2.1", 1889 | "safe-buffer": "5.2.1", 1890 | "send": "0.18.0", 1891 | "serve-static": "1.15.0", 1892 | "setprototypeof": "1.2.0", 1893 | "statuses": "2.0.1", 1894 | "type-is": "~1.6.18", 1895 | "utils-merge": "1.0.1", 1896 | "vary": "~1.1.2" 1897 | }, 1898 | "engines": { 1899 | "node": ">= 0.10.0" 1900 | } 1901 | }, 1902 | "node_modules/external-editor": { 1903 | "version": "3.1.0", 1904 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 1905 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 1906 | "license": "MIT", 1907 | "dependencies": { 1908 | "chardet": "^0.7.0", 1909 | "iconv-lite": "^0.4.24", 1910 | "tmp": "^0.0.33" 1911 | }, 1912 | "engines": { 1913 | "node": ">=4" 1914 | } 1915 | }, 1916 | "node_modules/figures": { 1917 | "version": "2.0.0", 1918 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1919 | "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", 1920 | "license": "MIT", 1921 | "dependencies": { 1922 | "escape-string-regexp": "^1.0.5" 1923 | }, 1924 | "engines": { 1925 | "node": ">=4" 1926 | } 1927 | }, 1928 | "node_modules/fill-range": { 1929 | "version": "7.1.1", 1930 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1931 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1932 | "dev": true, 1933 | "license": "MIT", 1934 | "dependencies": { 1935 | "to-regex-range": "^5.0.1" 1936 | }, 1937 | "engines": { 1938 | "node": ">=8" 1939 | } 1940 | }, 1941 | "node_modules/finalhandler": { 1942 | "version": "1.2.0", 1943 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 1944 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 1945 | "license": "MIT", 1946 | "dependencies": { 1947 | "debug": "2.6.9", 1948 | "encodeurl": "~1.0.2", 1949 | "escape-html": "~1.0.3", 1950 | "on-finished": "2.4.1", 1951 | "parseurl": "~1.3.3", 1952 | "statuses": "2.0.1", 1953 | "unpipe": "~1.0.0" 1954 | }, 1955 | "engines": { 1956 | "node": ">= 0.8" 1957 | } 1958 | }, 1959 | "node_modules/forwarded": { 1960 | "version": "0.2.0", 1961 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1962 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 1963 | "license": "MIT", 1964 | "engines": { 1965 | "node": ">= 0.6" 1966 | } 1967 | }, 1968 | "node_modules/fresh": { 1969 | "version": "0.5.2", 1970 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1971 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 1972 | "license": "MIT", 1973 | "engines": { 1974 | "node": ">= 0.6" 1975 | } 1976 | }, 1977 | "node_modules/fs.realpath": { 1978 | "version": "1.0.0", 1979 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1980 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1981 | "dev": true, 1982 | "license": "ISC" 1983 | }, 1984 | "node_modules/fsevents": { 1985 | "version": "2.3.3", 1986 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1987 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1988 | "dev": true, 1989 | "hasInstallScript": true, 1990 | "license": "MIT", 1991 | "optional": true, 1992 | "os": [ 1993 | "darwin" 1994 | ], 1995 | "engines": { 1996 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1997 | } 1998 | }, 1999 | "node_modules/function-bind": { 2000 | "version": "1.1.2", 2001 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2002 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2003 | "license": "MIT", 2004 | "funding": { 2005 | "url": "https://github.com/sponsors/ljharb" 2006 | } 2007 | }, 2008 | "node_modules/get-intrinsic": { 2009 | "version": "1.2.4", 2010 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 2011 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 2012 | "license": "MIT", 2013 | "dependencies": { 2014 | "es-errors": "^1.3.0", 2015 | "function-bind": "^1.1.2", 2016 | "has-proto": "^1.0.1", 2017 | "has-symbols": "^1.0.3", 2018 | "hasown": "^2.0.0" 2019 | }, 2020 | "engines": { 2021 | "node": ">= 0.4" 2022 | }, 2023 | "funding": { 2024 | "url": "https://github.com/sponsors/ljharb" 2025 | } 2026 | }, 2027 | "node_modules/get-source": { 2028 | "version": "2.0.12", 2029 | "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", 2030 | "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", 2031 | "dev": true, 2032 | "license": "Unlicense", 2033 | "dependencies": { 2034 | "data-uri-to-buffer": "^2.0.0", 2035 | "source-map": "^0.6.1" 2036 | } 2037 | }, 2038 | "node_modules/get-tsconfig": { 2039 | "version": "4.7.5", 2040 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", 2041 | "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", 2042 | "dev": true, 2043 | "license": "MIT", 2044 | "dependencies": { 2045 | "resolve-pkg-maps": "^1.0.0" 2046 | }, 2047 | "funding": { 2048 | "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 2049 | } 2050 | }, 2051 | "node_modules/glob": { 2052 | "version": "7.2.3", 2053 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2054 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2055 | "deprecated": "Glob versions prior to v9 are no longer supported", 2056 | "dev": true, 2057 | "license": "ISC", 2058 | "dependencies": { 2059 | "fs.realpath": "^1.0.0", 2060 | "inflight": "^1.0.4", 2061 | "inherits": "2", 2062 | "minimatch": "^3.1.1", 2063 | "once": "^1.3.0", 2064 | "path-is-absolute": "^1.0.0" 2065 | }, 2066 | "engines": { 2067 | "node": "*" 2068 | }, 2069 | "funding": { 2070 | "url": "https://github.com/sponsors/isaacs" 2071 | } 2072 | }, 2073 | "node_modules/glob-parent": { 2074 | "version": "5.1.2", 2075 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2076 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2077 | "dev": true, 2078 | "license": "ISC", 2079 | "dependencies": { 2080 | "is-glob": "^4.0.1" 2081 | }, 2082 | "engines": { 2083 | "node": ">= 6" 2084 | } 2085 | }, 2086 | "node_modules/glob-to-regexp": { 2087 | "version": "0.4.1", 2088 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 2089 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 2090 | "dev": true, 2091 | "license": "BSD-2-Clause" 2092 | }, 2093 | "node_modules/gopd": { 2094 | "version": "1.0.1", 2095 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 2096 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 2097 | "license": "MIT", 2098 | "dependencies": { 2099 | "get-intrinsic": "^1.1.3" 2100 | }, 2101 | "funding": { 2102 | "url": "https://github.com/sponsors/ljharb" 2103 | } 2104 | }, 2105 | "node_modules/has-flag": { 2106 | "version": "3.0.0", 2107 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2108 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 2109 | "license": "MIT", 2110 | "engines": { 2111 | "node": ">=4" 2112 | } 2113 | }, 2114 | "node_modules/has-property-descriptors": { 2115 | "version": "1.0.2", 2116 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 2117 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 2118 | "license": "MIT", 2119 | "dependencies": { 2120 | "es-define-property": "^1.0.0" 2121 | }, 2122 | "funding": { 2123 | "url": "https://github.com/sponsors/ljharb" 2124 | } 2125 | }, 2126 | "node_modules/has-proto": { 2127 | "version": "1.0.3", 2128 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 2129 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 2130 | "license": "MIT", 2131 | "engines": { 2132 | "node": ">= 0.4" 2133 | }, 2134 | "funding": { 2135 | "url": "https://github.com/sponsors/ljharb" 2136 | } 2137 | }, 2138 | "node_modules/has-symbols": { 2139 | "version": "1.0.3", 2140 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2141 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 2142 | "license": "MIT", 2143 | "engines": { 2144 | "node": ">= 0.4" 2145 | }, 2146 | "funding": { 2147 | "url": "https://github.com/sponsors/ljharb" 2148 | } 2149 | }, 2150 | "node_modules/hasown": { 2151 | "version": "2.0.2", 2152 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2153 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2154 | "license": "MIT", 2155 | "dependencies": { 2156 | "function-bind": "^1.1.2" 2157 | }, 2158 | "engines": { 2159 | "node": ">= 0.4" 2160 | } 2161 | }, 2162 | "node_modules/hono": { 2163 | "version": "4.5.3", 2164 | "resolved": "https://registry.npmjs.org/hono/-/hono-4.5.3.tgz", 2165 | "integrity": "sha512-r26WwwbKD3BAYdfB294knNnegNda7VfV1tVn66D9Kvl9WQTdrR+5eKdoeaQNHQcC3Gr0KBikzAtjd6VsRGVSaw==", 2166 | "license": "MIT", 2167 | "engines": { 2168 | "node": ">=16.0.0" 2169 | } 2170 | }, 2171 | "node_modules/hono-stremio": { 2172 | "version": "0.1.1", 2173 | "resolved": "https://registry.npmjs.org/hono-stremio/-/hono-stremio-0.1.1.tgz", 2174 | "integrity": "sha512-f5uMCQqo6sOiuPQ/zByyAWqfZJ939R9XqUIrVMfNLMU82x4ZtUb2ervX//jF0A8XsXJNzWHN4Uga5tqP9Q8XMA==", 2175 | "license": "MIT", 2176 | "peerDependencies": { 2177 | "hono": "*" 2178 | } 2179 | }, 2180 | "node_modules/http-errors": { 2181 | "version": "2.0.0", 2182 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 2183 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 2184 | "license": "MIT", 2185 | "dependencies": { 2186 | "depd": "2.0.0", 2187 | "inherits": "2.0.4", 2188 | "setprototypeof": "1.2.0", 2189 | "statuses": "2.0.1", 2190 | "toidentifier": "1.0.1" 2191 | }, 2192 | "engines": { 2193 | "node": ">= 0.8" 2194 | } 2195 | }, 2196 | "node_modules/iconv-lite": { 2197 | "version": "0.4.24", 2198 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2199 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2200 | "license": "MIT", 2201 | "dependencies": { 2202 | "safer-buffer": ">= 2.1.2 < 3" 2203 | }, 2204 | "engines": { 2205 | "node": ">=0.10.0" 2206 | } 2207 | }, 2208 | "node_modules/inflight": { 2209 | "version": "1.0.6", 2210 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2211 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2212 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 2213 | "dev": true, 2214 | "license": "ISC", 2215 | "dependencies": { 2216 | "once": "^1.3.0", 2217 | "wrappy": "1" 2218 | } 2219 | }, 2220 | "node_modules/inherits": { 2221 | "version": "2.0.4", 2222 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2223 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2224 | "license": "ISC" 2225 | }, 2226 | "node_modules/inquirer": { 2227 | "version": "6.5.2", 2228 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", 2229 | "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", 2230 | "license": "MIT", 2231 | "dependencies": { 2232 | "ansi-escapes": "^3.2.0", 2233 | "chalk": "^2.4.2", 2234 | "cli-cursor": "^2.1.0", 2235 | "cli-width": "^2.0.0", 2236 | "external-editor": "^3.0.3", 2237 | "figures": "^2.0.0", 2238 | "lodash": "^4.17.12", 2239 | "mute-stream": "0.0.7", 2240 | "run-async": "^2.2.0", 2241 | "rxjs": "^6.4.0", 2242 | "string-width": "^2.1.0", 2243 | "strip-ansi": "^5.1.0", 2244 | "through": "^2.3.6" 2245 | }, 2246 | "engines": { 2247 | "node": ">=6.0.0" 2248 | } 2249 | }, 2250 | "node_modules/ipaddr.js": { 2251 | "version": "1.9.1", 2252 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2253 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 2254 | "license": "MIT", 2255 | "engines": { 2256 | "node": ">= 0.10" 2257 | } 2258 | }, 2259 | "node_modules/is-binary-path": { 2260 | "version": "2.1.0", 2261 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2262 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2263 | "dev": true, 2264 | "license": "MIT", 2265 | "dependencies": { 2266 | "binary-extensions": "^2.0.0" 2267 | }, 2268 | "engines": { 2269 | "node": ">=8" 2270 | } 2271 | }, 2272 | "node_modules/is-core-module": { 2273 | "version": "2.15.0", 2274 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", 2275 | "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", 2276 | "dev": true, 2277 | "license": "MIT", 2278 | "dependencies": { 2279 | "hasown": "^2.0.2" 2280 | }, 2281 | "engines": { 2282 | "node": ">= 0.4" 2283 | }, 2284 | "funding": { 2285 | "url": "https://github.com/sponsors/ljharb" 2286 | } 2287 | }, 2288 | "node_modules/is-extglob": { 2289 | "version": "2.1.1", 2290 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2291 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2292 | "dev": true, 2293 | "license": "MIT", 2294 | "engines": { 2295 | "node": ">=0.10.0" 2296 | } 2297 | }, 2298 | "node_modules/is-fullwidth-code-point": { 2299 | "version": "2.0.0", 2300 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2301 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", 2302 | "license": "MIT", 2303 | "engines": { 2304 | "node": ">=4" 2305 | } 2306 | }, 2307 | "node_modules/is-glob": { 2308 | "version": "4.0.3", 2309 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2310 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2311 | "dev": true, 2312 | "license": "MIT", 2313 | "dependencies": { 2314 | "is-extglob": "^2.1.1" 2315 | }, 2316 | "engines": { 2317 | "node": ">=0.10.0" 2318 | } 2319 | }, 2320 | "node_modules/is-number": { 2321 | "version": "7.0.0", 2322 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2323 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2324 | "dev": true, 2325 | "license": "MIT", 2326 | "engines": { 2327 | "node": ">=0.12.0" 2328 | } 2329 | }, 2330 | "node_modules/is-stream": { 2331 | "version": "2.0.1", 2332 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 2333 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 2334 | "dev": true, 2335 | "license": "MIT", 2336 | "engines": { 2337 | "node": ">=8" 2338 | }, 2339 | "funding": { 2340 | "url": "https://github.com/sponsors/sindresorhus" 2341 | } 2342 | }, 2343 | "node_modules/is-wsl": { 2344 | "version": "1.1.0", 2345 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", 2346 | "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", 2347 | "license": "MIT", 2348 | "engines": { 2349 | "node": ">=4" 2350 | } 2351 | }, 2352 | "node_modules/isexe": { 2353 | "version": "2.0.0", 2354 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2355 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2356 | "dev": true, 2357 | "license": "ISC" 2358 | }, 2359 | "node_modules/lodash": { 2360 | "version": "4.17.21", 2361 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2362 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2363 | "license": "MIT" 2364 | }, 2365 | "node_modules/loupe": { 2366 | "version": "3.1.2", 2367 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", 2368 | "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", 2369 | "dev": true, 2370 | "license": "MIT" 2371 | }, 2372 | "node_modules/magic-string": { 2373 | "version": "0.25.9", 2374 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 2375 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 2376 | "dev": true, 2377 | "license": "MIT", 2378 | "dependencies": { 2379 | "sourcemap-codec": "^1.4.8" 2380 | } 2381 | }, 2382 | "node_modules/make-dir": { 2383 | "version": "3.1.0", 2384 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 2385 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 2386 | "dev": true, 2387 | "license": "MIT", 2388 | "dependencies": { 2389 | "semver": "^6.0.0" 2390 | }, 2391 | "engines": { 2392 | "node": ">=8" 2393 | }, 2394 | "funding": { 2395 | "url": "https://github.com/sponsors/sindresorhus" 2396 | } 2397 | }, 2398 | "node_modules/make-dir/node_modules/semver": { 2399 | "version": "6.3.1", 2400 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 2401 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 2402 | "dev": true, 2403 | "license": "ISC", 2404 | "bin": { 2405 | "semver": "bin/semver.js" 2406 | } 2407 | }, 2408 | "node_modules/media-typer": { 2409 | "version": "0.3.0", 2410 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2411 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 2412 | "license": "MIT", 2413 | "engines": { 2414 | "node": ">= 0.6" 2415 | } 2416 | }, 2417 | "node_modules/merge-descriptors": { 2418 | "version": "1.0.1", 2419 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 2420 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", 2421 | "license": "MIT" 2422 | }, 2423 | "node_modules/methods": { 2424 | "version": "1.1.2", 2425 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2426 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 2427 | "license": "MIT", 2428 | "engines": { 2429 | "node": ">= 0.6" 2430 | } 2431 | }, 2432 | "node_modules/mime": { 2433 | "version": "1.6.0", 2434 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 2435 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 2436 | "license": "MIT", 2437 | "bin": { 2438 | "mime": "cli.js" 2439 | }, 2440 | "engines": { 2441 | "node": ">=4" 2442 | } 2443 | }, 2444 | "node_modules/mime-db": { 2445 | "version": "1.52.0", 2446 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2447 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2448 | "license": "MIT", 2449 | "engines": { 2450 | "node": ">= 0.6" 2451 | } 2452 | }, 2453 | "node_modules/mime-types": { 2454 | "version": "2.1.35", 2455 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2456 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2457 | "license": "MIT", 2458 | "dependencies": { 2459 | "mime-db": "1.52.0" 2460 | }, 2461 | "engines": { 2462 | "node": ">= 0.6" 2463 | } 2464 | }, 2465 | "node_modules/mimic-fn": { 2466 | "version": "1.2.0", 2467 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 2468 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 2469 | "license": "MIT", 2470 | "engines": { 2471 | "node": ">=4" 2472 | } 2473 | }, 2474 | "node_modules/miniflare": { 2475 | "version": "3.20240718.1", 2476 | "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240718.1.tgz", 2477 | "integrity": "sha512-mn3MjGnpgYvarCRTfz4TQyVyY8yW0zz7f8LOAPVai78IGC/lcVcyskZcuIr7Zovb2i+IERmmsJAiEPeZHIIKbA==", 2478 | "dev": true, 2479 | "license": "MIT", 2480 | "dependencies": { 2481 | "@cspotcode/source-map-support": "0.8.1", 2482 | "acorn": "^8.8.0", 2483 | "acorn-walk": "^8.2.0", 2484 | "capnp-ts": "^0.7.0", 2485 | "exit-hook": "^2.2.1", 2486 | "glob-to-regexp": "^0.4.1", 2487 | "stoppable": "^1.1.0", 2488 | "undici": "^5.28.4", 2489 | "workerd": "1.20240718.0", 2490 | "ws": "^8.17.1", 2491 | "youch": "^3.2.2", 2492 | "zod": "^3.22.3" 2493 | }, 2494 | "bin": { 2495 | "miniflare": "bootstrap.js" 2496 | }, 2497 | "engines": { 2498 | "node": ">=16.13" 2499 | } 2500 | }, 2501 | "node_modules/minimatch": { 2502 | "version": "3.1.2", 2503 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2504 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2505 | "dev": true, 2506 | "license": "ISC", 2507 | "dependencies": { 2508 | "brace-expansion": "^1.1.7" 2509 | }, 2510 | "engines": { 2511 | "node": "*" 2512 | } 2513 | }, 2514 | "node_modules/minimist": { 2515 | "version": "1.2.8", 2516 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2517 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2518 | "license": "MIT", 2519 | "funding": { 2520 | "url": "https://github.com/sponsors/ljharb" 2521 | } 2522 | }, 2523 | "node_modules/mkdirp": { 2524 | "version": "0.5.6", 2525 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 2526 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 2527 | "license": "MIT", 2528 | "dependencies": { 2529 | "minimist": "^1.2.6" 2530 | }, 2531 | "bin": { 2532 | "mkdirp": "bin/cmd.js" 2533 | } 2534 | }, 2535 | "node_modules/ms": { 2536 | "version": "2.0.0", 2537 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2538 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 2539 | "license": "MIT" 2540 | }, 2541 | "node_modules/mustache": { 2542 | "version": "4.2.0", 2543 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", 2544 | "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", 2545 | "dev": true, 2546 | "license": "MIT", 2547 | "bin": { 2548 | "mustache": "bin/mustache" 2549 | } 2550 | }, 2551 | "node_modules/mute-stream": { 2552 | "version": "0.0.7", 2553 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 2554 | "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", 2555 | "license": "ISC" 2556 | }, 2557 | "node_modules/nan": { 2558 | "version": "2.20.0", 2559 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", 2560 | "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", 2561 | "dev": true, 2562 | "license": "MIT", 2563 | "optional": true 2564 | }, 2565 | "node_modules/nanoid": { 2566 | "version": "3.3.7", 2567 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 2568 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 2569 | "dev": true, 2570 | "funding": [ 2571 | { 2572 | "type": "github", 2573 | "url": "https://github.com/sponsors/ai" 2574 | } 2575 | ], 2576 | "license": "MIT", 2577 | "bin": { 2578 | "nanoid": "bin/nanoid.cjs" 2579 | }, 2580 | "engines": { 2581 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2582 | } 2583 | }, 2584 | "node_modules/negotiator": { 2585 | "version": "0.6.3", 2586 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 2587 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 2588 | "license": "MIT", 2589 | "engines": { 2590 | "node": ">= 0.6" 2591 | } 2592 | }, 2593 | "node_modules/node-fetch": { 2594 | "version": "2.7.0", 2595 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 2596 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 2597 | "license": "MIT", 2598 | "dependencies": { 2599 | "whatwg-url": "^5.0.0" 2600 | }, 2601 | "engines": { 2602 | "node": "4.x || >=6.0.0" 2603 | }, 2604 | "peerDependencies": { 2605 | "encoding": "^0.1.0" 2606 | }, 2607 | "peerDependenciesMeta": { 2608 | "encoding": { 2609 | "optional": true 2610 | } 2611 | } 2612 | }, 2613 | "node_modules/node-fetch-native": { 2614 | "version": "1.6.4", 2615 | "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", 2616 | "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", 2617 | "dev": true, 2618 | "license": "MIT" 2619 | }, 2620 | "node_modules/node-forge": { 2621 | "version": "1.3.1", 2622 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", 2623 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", 2624 | "dev": true, 2625 | "license": "(BSD-3-Clause OR GPL-2.0)", 2626 | "engines": { 2627 | "node": ">= 6.13.0" 2628 | } 2629 | }, 2630 | "node_modules/node-ssh": { 2631 | "version": "13.1.0", 2632 | "resolved": "https://registry.npmjs.org/node-ssh/-/node-ssh-13.1.0.tgz", 2633 | "integrity": "sha512-GLcw49yFd9+rUpP+FgX6wrF/N90cmuDl2n0i8d3L828b6riRjkb9w3SS+XvviRWbrAhLxuMKywFqxvQDZQ1bug==", 2634 | "dev": true, 2635 | "license": "MIT", 2636 | "dependencies": { 2637 | "@types/ssh2": "^1.11.9", 2638 | "is-stream": "^2.0.0", 2639 | "make-dir": "^3.1.0", 2640 | "sb-promise-queue": "^2.1.0", 2641 | "sb-scandir": "^3.1.0", 2642 | "shell-escape": "^0.2.0", 2643 | "ssh2": "^1.11.0" 2644 | }, 2645 | "engines": { 2646 | "node": ">= 10" 2647 | } 2648 | }, 2649 | "node_modules/normalize-path": { 2650 | "version": "3.0.0", 2651 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2652 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2653 | "dev": true, 2654 | "license": "MIT", 2655 | "engines": { 2656 | "node": ">=0.10.0" 2657 | } 2658 | }, 2659 | "node_modules/object-assign": { 2660 | "version": "4.1.1", 2661 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2662 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2663 | "license": "MIT", 2664 | "engines": { 2665 | "node": ">=0.10.0" 2666 | } 2667 | }, 2668 | "node_modules/object-inspect": { 2669 | "version": "1.13.2", 2670 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", 2671 | "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", 2672 | "license": "MIT", 2673 | "engines": { 2674 | "node": ">= 0.4" 2675 | }, 2676 | "funding": { 2677 | "url": "https://github.com/sponsors/ljharb" 2678 | } 2679 | }, 2680 | "node_modules/on-finished": { 2681 | "version": "2.4.1", 2682 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 2683 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 2684 | "license": "MIT", 2685 | "dependencies": { 2686 | "ee-first": "1.1.1" 2687 | }, 2688 | "engines": { 2689 | "node": ">= 0.8" 2690 | } 2691 | }, 2692 | "node_modules/once": { 2693 | "version": "1.4.0", 2694 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2695 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2696 | "dev": true, 2697 | "license": "ISC", 2698 | "dependencies": { 2699 | "wrappy": "1" 2700 | } 2701 | }, 2702 | "node_modules/onetime": { 2703 | "version": "2.0.1", 2704 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 2705 | "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", 2706 | "license": "MIT", 2707 | "dependencies": { 2708 | "mimic-fn": "^1.0.0" 2709 | }, 2710 | "engines": { 2711 | "node": ">=4" 2712 | } 2713 | }, 2714 | "node_modules/opn": { 2715 | "version": "5.5.0", 2716 | "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", 2717 | "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", 2718 | "license": "MIT", 2719 | "dependencies": { 2720 | "is-wsl": "^1.1.0" 2721 | }, 2722 | "engines": { 2723 | "node": ">=4" 2724 | } 2725 | }, 2726 | "node_modules/os-tmpdir": { 2727 | "version": "1.0.2", 2728 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2729 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 2730 | "license": "MIT", 2731 | "engines": { 2732 | "node": ">=0.10.0" 2733 | } 2734 | }, 2735 | "node_modules/parse-torrent-title": { 2736 | "version": "1.4.0", 2737 | "resolved": "https://registry.npmjs.org/parse-torrent-title/-/parse-torrent-title-1.4.0.tgz", 2738 | "integrity": "sha512-/G0rQNeAUmNwB3QtyBJtNDAr1Q95Gg3wgwQ3dbYEkX8tOdkw5XmUS03O3+QqAV5hDNRVMatBG2fIoz+H/UMseQ==", 2739 | "license": "MIT", 2740 | "engines": { 2741 | "node": ">=8" 2742 | } 2743 | }, 2744 | "node_modules/parseurl": { 2745 | "version": "1.3.3", 2746 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2747 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 2748 | "license": "MIT", 2749 | "engines": { 2750 | "node": ">= 0.8" 2751 | } 2752 | }, 2753 | "node_modules/path-is-absolute": { 2754 | "version": "1.0.1", 2755 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2756 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2757 | "dev": true, 2758 | "license": "MIT", 2759 | "engines": { 2760 | "node": ">=0.10.0" 2761 | } 2762 | }, 2763 | "node_modules/path-key": { 2764 | "version": "3.1.1", 2765 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2766 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2767 | "dev": true, 2768 | "license": "MIT", 2769 | "engines": { 2770 | "node": ">=8" 2771 | } 2772 | }, 2773 | "node_modules/path-parse": { 2774 | "version": "1.0.7", 2775 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2776 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2777 | "dev": true, 2778 | "license": "MIT" 2779 | }, 2780 | "node_modules/path-to-regexp": { 2781 | "version": "0.1.7", 2782 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2783 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", 2784 | "license": "MIT" 2785 | }, 2786 | "node_modules/pathe": { 2787 | "version": "1.1.2", 2788 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 2789 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 2790 | "dev": true, 2791 | "license": "MIT" 2792 | }, 2793 | "node_modules/pathval": { 2794 | "version": "2.0.0", 2795 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", 2796 | "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", 2797 | "dev": true, 2798 | "license": "MIT", 2799 | "engines": { 2800 | "node": ">= 14.16" 2801 | } 2802 | }, 2803 | "node_modules/picocolors": { 2804 | "version": "1.1.1", 2805 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2806 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2807 | "dev": true, 2808 | "license": "ISC" 2809 | }, 2810 | "node_modules/picomatch": { 2811 | "version": "2.3.1", 2812 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2813 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2814 | "dev": true, 2815 | "license": "MIT", 2816 | "engines": { 2817 | "node": ">=8.6" 2818 | }, 2819 | "funding": { 2820 | "url": "https://github.com/sponsors/jonschlinkert" 2821 | } 2822 | }, 2823 | "node_modules/postcss": { 2824 | "version": "8.4.49", 2825 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", 2826 | "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", 2827 | "dev": true, 2828 | "funding": [ 2829 | { 2830 | "type": "opencollective", 2831 | "url": "https://opencollective.com/postcss/" 2832 | }, 2833 | { 2834 | "type": "tidelift", 2835 | "url": "https://tidelift.com/funding/github/npm/postcss" 2836 | }, 2837 | { 2838 | "type": "github", 2839 | "url": "https://github.com/sponsors/ai" 2840 | } 2841 | ], 2842 | "license": "MIT", 2843 | "dependencies": { 2844 | "nanoid": "^3.3.7", 2845 | "picocolors": "^1.1.1", 2846 | "source-map-js": "^1.2.1" 2847 | }, 2848 | "engines": { 2849 | "node": "^10 || ^12 || >=14" 2850 | } 2851 | }, 2852 | "node_modules/prettier": { 2853 | "version": "3.3.2", 2854 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", 2855 | "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", 2856 | "dev": true, 2857 | "license": "MIT", 2858 | "bin": { 2859 | "prettier": "bin/prettier.cjs" 2860 | }, 2861 | "engines": { 2862 | "node": ">=14" 2863 | }, 2864 | "funding": { 2865 | "url": "https://github.com/prettier/prettier?sponsor=1" 2866 | } 2867 | }, 2868 | "node_modules/printable-characters": { 2869 | "version": "1.0.42", 2870 | "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", 2871 | "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", 2872 | "dev": true, 2873 | "license": "Unlicense" 2874 | }, 2875 | "node_modules/proxy-addr": { 2876 | "version": "2.0.7", 2877 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2878 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2879 | "license": "MIT", 2880 | "dependencies": { 2881 | "forwarded": "0.2.0", 2882 | "ipaddr.js": "1.9.1" 2883 | }, 2884 | "engines": { 2885 | "node": ">= 0.10" 2886 | } 2887 | }, 2888 | "node_modules/qs": { 2889 | "version": "6.11.0", 2890 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 2891 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 2892 | "license": "BSD-3-Clause", 2893 | "dependencies": { 2894 | "side-channel": "^1.0.4" 2895 | }, 2896 | "engines": { 2897 | "node": ">=0.6" 2898 | }, 2899 | "funding": { 2900 | "url": "https://github.com/sponsors/ljharb" 2901 | } 2902 | }, 2903 | "node_modules/range-parser": { 2904 | "version": "1.2.1", 2905 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2906 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 2907 | "license": "MIT", 2908 | "engines": { 2909 | "node": ">= 0.6" 2910 | } 2911 | }, 2912 | "node_modules/raw-body": { 2913 | "version": "2.5.2", 2914 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 2915 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 2916 | "license": "MIT", 2917 | "dependencies": { 2918 | "bytes": "3.1.2", 2919 | "http-errors": "2.0.0", 2920 | "iconv-lite": "0.4.24", 2921 | "unpipe": "1.0.0" 2922 | }, 2923 | "engines": { 2924 | "node": ">= 0.8" 2925 | } 2926 | }, 2927 | "node_modules/readdirp": { 2928 | "version": "3.6.0", 2929 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2930 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2931 | "dev": true, 2932 | "license": "MIT", 2933 | "dependencies": { 2934 | "picomatch": "^2.2.1" 2935 | }, 2936 | "engines": { 2937 | "node": ">=8.10.0" 2938 | } 2939 | }, 2940 | "node_modules/resolve": { 2941 | "version": "1.22.8", 2942 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 2943 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 2944 | "dev": true, 2945 | "license": "MIT", 2946 | "dependencies": { 2947 | "is-core-module": "^2.13.0", 2948 | "path-parse": "^1.0.7", 2949 | "supports-preserve-symlinks-flag": "^1.0.0" 2950 | }, 2951 | "bin": { 2952 | "resolve": "bin/resolve" 2953 | }, 2954 | "funding": { 2955 | "url": "https://github.com/sponsors/ljharb" 2956 | } 2957 | }, 2958 | "node_modules/resolve-pkg-maps": { 2959 | "version": "1.0.0", 2960 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 2961 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 2962 | "dev": true, 2963 | "license": "MIT", 2964 | "funding": { 2965 | "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 2966 | } 2967 | }, 2968 | "node_modules/resolve.exports": { 2969 | "version": "2.0.2", 2970 | "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", 2971 | "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", 2972 | "dev": true, 2973 | "license": "MIT", 2974 | "engines": { 2975 | "node": ">=10" 2976 | } 2977 | }, 2978 | "node_modules/restore-cursor": { 2979 | "version": "2.0.0", 2980 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 2981 | "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", 2982 | "license": "MIT", 2983 | "dependencies": { 2984 | "onetime": "^2.0.0", 2985 | "signal-exit": "^3.0.2" 2986 | }, 2987 | "engines": { 2988 | "node": ">=4" 2989 | } 2990 | }, 2991 | "node_modules/rimraf": { 2992 | "version": "2.7.1", 2993 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 2994 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 2995 | "deprecated": "Rimraf versions prior to v4 are no longer supported", 2996 | "dev": true, 2997 | "license": "ISC", 2998 | "dependencies": { 2999 | "glob": "^7.1.3" 3000 | }, 3001 | "bin": { 3002 | "rimraf": "bin.js" 3003 | } 3004 | }, 3005 | "node_modules/rollup": { 3006 | "version": "4.26.0", 3007 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz", 3008 | "integrity": "sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==", 3009 | "dev": true, 3010 | "license": "MIT", 3011 | "dependencies": { 3012 | "@types/estree": "1.0.6" 3013 | }, 3014 | "bin": { 3015 | "rollup": "dist/bin/rollup" 3016 | }, 3017 | "engines": { 3018 | "node": ">=18.0.0", 3019 | "npm": ">=8.0.0" 3020 | }, 3021 | "optionalDependencies": { 3022 | "@rollup/rollup-android-arm-eabi": "4.26.0", 3023 | "@rollup/rollup-android-arm64": "4.26.0", 3024 | "@rollup/rollup-darwin-arm64": "4.26.0", 3025 | "@rollup/rollup-darwin-x64": "4.26.0", 3026 | "@rollup/rollup-freebsd-arm64": "4.26.0", 3027 | "@rollup/rollup-freebsd-x64": "4.26.0", 3028 | "@rollup/rollup-linux-arm-gnueabihf": "4.26.0", 3029 | "@rollup/rollup-linux-arm-musleabihf": "4.26.0", 3030 | "@rollup/rollup-linux-arm64-gnu": "4.26.0", 3031 | "@rollup/rollup-linux-arm64-musl": "4.26.0", 3032 | "@rollup/rollup-linux-powerpc64le-gnu": "4.26.0", 3033 | "@rollup/rollup-linux-riscv64-gnu": "4.26.0", 3034 | "@rollup/rollup-linux-s390x-gnu": "4.26.0", 3035 | "@rollup/rollup-linux-x64-gnu": "4.26.0", 3036 | "@rollup/rollup-linux-x64-musl": "4.26.0", 3037 | "@rollup/rollup-win32-arm64-msvc": "4.26.0", 3038 | "@rollup/rollup-win32-ia32-msvc": "4.26.0", 3039 | "@rollup/rollup-win32-x64-msvc": "4.26.0", 3040 | "fsevents": "~2.3.2" 3041 | } 3042 | }, 3043 | "node_modules/rollup-plugin-inject": { 3044 | "version": "3.0.2", 3045 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 3046 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 3047 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", 3048 | "dev": true, 3049 | "license": "MIT", 3050 | "dependencies": { 3051 | "estree-walker": "^0.6.1", 3052 | "magic-string": "^0.25.3", 3053 | "rollup-pluginutils": "^2.8.1" 3054 | } 3055 | }, 3056 | "node_modules/rollup-plugin-node-polyfills": { 3057 | "version": "0.2.1", 3058 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 3059 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 3060 | "dev": true, 3061 | "license": "MIT", 3062 | "dependencies": { 3063 | "rollup-plugin-inject": "^3.0.0" 3064 | } 3065 | }, 3066 | "node_modules/rollup-pluginutils": { 3067 | "version": "2.8.2", 3068 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 3069 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 3070 | "dev": true, 3071 | "license": "MIT", 3072 | "dependencies": { 3073 | "estree-walker": "^0.6.1" 3074 | } 3075 | }, 3076 | "node_modules/router": { 3077 | "version": "1.3.8", 3078 | "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", 3079 | "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", 3080 | "license": "MIT", 3081 | "dependencies": { 3082 | "array-flatten": "3.0.0", 3083 | "debug": "2.6.9", 3084 | "methods": "~1.1.2", 3085 | "parseurl": "~1.3.3", 3086 | "path-to-regexp": "0.1.7", 3087 | "setprototypeof": "1.2.0", 3088 | "utils-merge": "1.0.1" 3089 | }, 3090 | "engines": { 3091 | "node": ">= 0.8" 3092 | } 3093 | }, 3094 | "node_modules/router/node_modules/array-flatten": { 3095 | "version": "3.0.0", 3096 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", 3097 | "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", 3098 | "license": "MIT" 3099 | }, 3100 | "node_modules/run-async": { 3101 | "version": "2.4.1", 3102 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 3103 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 3104 | "license": "MIT", 3105 | "engines": { 3106 | "node": ">=0.12.0" 3107 | } 3108 | }, 3109 | "node_modules/rxjs": { 3110 | "version": "6.6.7", 3111 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 3112 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 3113 | "license": "Apache-2.0", 3114 | "dependencies": { 3115 | "tslib": "^1.9.0" 3116 | }, 3117 | "engines": { 3118 | "npm": ">=2.0.0" 3119 | } 3120 | }, 3121 | "node_modules/safe-buffer": { 3122 | "version": "5.2.1", 3123 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3124 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 3125 | "funding": [ 3126 | { 3127 | "type": "github", 3128 | "url": "https://github.com/sponsors/feross" 3129 | }, 3130 | { 3131 | "type": "patreon", 3132 | "url": "https://www.patreon.com/feross" 3133 | }, 3134 | { 3135 | "type": "consulting", 3136 | "url": "https://feross.org/support" 3137 | } 3138 | ], 3139 | "license": "MIT" 3140 | }, 3141 | "node_modules/safer-buffer": { 3142 | "version": "2.1.2", 3143 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3144 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 3145 | "license": "MIT" 3146 | }, 3147 | "node_modules/sb-promise-queue": { 3148 | "version": "2.1.0", 3149 | "resolved": "https://registry.npmjs.org/sb-promise-queue/-/sb-promise-queue-2.1.0.tgz", 3150 | "integrity": "sha512-zwq4YuP1FQFkGx2Q7GIkZYZ6PqWpV+bg0nIO1sJhWOyGyhqbj0MsTvK6lCFo5TQwX5pZr6SCQ75e8PCDCuNvkg==", 3151 | "dev": true, 3152 | "license": "MIT", 3153 | "engines": { 3154 | "node": ">= 8" 3155 | } 3156 | }, 3157 | "node_modules/sb-scandir": { 3158 | "version": "3.1.0", 3159 | "resolved": "https://registry.npmjs.org/sb-scandir/-/sb-scandir-3.1.0.tgz", 3160 | "integrity": "sha512-70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==", 3161 | "dev": true, 3162 | "license": "MIT", 3163 | "dependencies": { 3164 | "sb-promise-queue": "^2.1.0" 3165 | }, 3166 | "engines": { 3167 | "node": ">= 8" 3168 | } 3169 | }, 3170 | "node_modules/selfsigned": { 3171 | "version": "2.4.1", 3172 | "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", 3173 | "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", 3174 | "dev": true, 3175 | "license": "MIT", 3176 | "dependencies": { 3177 | "@types/node-forge": "^1.3.0", 3178 | "node-forge": "^1" 3179 | }, 3180 | "engines": { 3181 | "node": ">=10" 3182 | } 3183 | }, 3184 | "node_modules/semver": { 3185 | "version": "5.7.2", 3186 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", 3187 | "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", 3188 | "license": "ISC", 3189 | "bin": { 3190 | "semver": "bin/semver" 3191 | } 3192 | }, 3193 | "node_modules/send": { 3194 | "version": "0.18.0", 3195 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 3196 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 3197 | "license": "MIT", 3198 | "dependencies": { 3199 | "debug": "2.6.9", 3200 | "depd": "2.0.0", 3201 | "destroy": "1.2.0", 3202 | "encodeurl": "~1.0.2", 3203 | "escape-html": "~1.0.3", 3204 | "etag": "~1.8.1", 3205 | "fresh": "0.5.2", 3206 | "http-errors": "2.0.0", 3207 | "mime": "1.6.0", 3208 | "ms": "2.1.3", 3209 | "on-finished": "2.4.1", 3210 | "range-parser": "~1.2.1", 3211 | "statuses": "2.0.1" 3212 | }, 3213 | "engines": { 3214 | "node": ">= 0.8.0" 3215 | } 3216 | }, 3217 | "node_modules/send/node_modules/ms": { 3218 | "version": "2.1.3", 3219 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3220 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3221 | "license": "MIT" 3222 | }, 3223 | "node_modules/serve-static": { 3224 | "version": "1.15.0", 3225 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 3226 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 3227 | "license": "MIT", 3228 | "dependencies": { 3229 | "encodeurl": "~1.0.2", 3230 | "escape-html": "~1.0.3", 3231 | "parseurl": "~1.3.3", 3232 | "send": "0.18.0" 3233 | }, 3234 | "engines": { 3235 | "node": ">= 0.8.0" 3236 | } 3237 | }, 3238 | "node_modules/set-function-length": { 3239 | "version": "1.2.2", 3240 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 3241 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 3242 | "license": "MIT", 3243 | "dependencies": { 3244 | "define-data-property": "^1.1.4", 3245 | "es-errors": "^1.3.0", 3246 | "function-bind": "^1.1.2", 3247 | "get-intrinsic": "^1.2.4", 3248 | "gopd": "^1.0.1", 3249 | "has-property-descriptors": "^1.0.2" 3250 | }, 3251 | "engines": { 3252 | "node": ">= 0.4" 3253 | } 3254 | }, 3255 | "node_modules/setprototypeof": { 3256 | "version": "1.2.0", 3257 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3258 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 3259 | "license": "ISC" 3260 | }, 3261 | "node_modules/shebang-command": { 3262 | "version": "2.0.0", 3263 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3264 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3265 | "dev": true, 3266 | "license": "MIT", 3267 | "dependencies": { 3268 | "shebang-regex": "^3.0.0" 3269 | }, 3270 | "engines": { 3271 | "node": ">=8" 3272 | } 3273 | }, 3274 | "node_modules/shebang-regex": { 3275 | "version": "3.0.0", 3276 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3277 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3278 | "dev": true, 3279 | "license": "MIT", 3280 | "engines": { 3281 | "node": ">=8" 3282 | } 3283 | }, 3284 | "node_modules/shell-escape": { 3285 | "version": "0.2.0", 3286 | "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz", 3287 | "integrity": "sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==", 3288 | "dev": true, 3289 | "license": "MIT" 3290 | }, 3291 | "node_modules/side-channel": { 3292 | "version": "1.0.6", 3293 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 3294 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 3295 | "license": "MIT", 3296 | "dependencies": { 3297 | "call-bind": "^1.0.7", 3298 | "es-errors": "^1.3.0", 3299 | "get-intrinsic": "^1.2.4", 3300 | "object-inspect": "^1.13.1" 3301 | }, 3302 | "engines": { 3303 | "node": ">= 0.4" 3304 | }, 3305 | "funding": { 3306 | "url": "https://github.com/sponsors/ljharb" 3307 | } 3308 | }, 3309 | "node_modules/siginfo": { 3310 | "version": "2.0.0", 3311 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 3312 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 3313 | "dev": true, 3314 | "license": "ISC" 3315 | }, 3316 | "node_modules/signal-exit": { 3317 | "version": "3.0.7", 3318 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 3319 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 3320 | "license": "ISC" 3321 | }, 3322 | "node_modules/source-map": { 3323 | "version": "0.6.1", 3324 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3325 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3326 | "dev": true, 3327 | "license": "BSD-3-Clause", 3328 | "engines": { 3329 | "node": ">=0.10.0" 3330 | } 3331 | }, 3332 | "node_modules/source-map-js": { 3333 | "version": "1.2.1", 3334 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 3335 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 3336 | "dev": true, 3337 | "license": "BSD-3-Clause", 3338 | "engines": { 3339 | "node": ">=0.10.0" 3340 | } 3341 | }, 3342 | "node_modules/sourcemap-codec": { 3343 | "version": "1.4.8", 3344 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 3345 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 3346 | "deprecated": "Please use @jridgewell/sourcemap-codec instead", 3347 | "dev": true, 3348 | "license": "MIT" 3349 | }, 3350 | "node_modules/ssh2": { 3351 | "version": "1.15.0", 3352 | "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", 3353 | "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", 3354 | "dev": true, 3355 | "hasInstallScript": true, 3356 | "dependencies": { 3357 | "asn1": "^0.2.6", 3358 | "bcrypt-pbkdf": "^1.0.2" 3359 | }, 3360 | "engines": { 3361 | "node": ">=10.16.0" 3362 | }, 3363 | "optionalDependencies": { 3364 | "cpu-features": "~0.0.9", 3365 | "nan": "^2.18.0" 3366 | } 3367 | }, 3368 | "node_modules/stackback": { 3369 | "version": "0.0.2", 3370 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 3371 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 3372 | "dev": true, 3373 | "license": "MIT" 3374 | }, 3375 | "node_modules/stacktracey": { 3376 | "version": "2.1.8", 3377 | "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", 3378 | "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", 3379 | "dev": true, 3380 | "license": "Unlicense", 3381 | "dependencies": { 3382 | "as-table": "^1.0.36", 3383 | "get-source": "^2.0.12" 3384 | } 3385 | }, 3386 | "node_modules/statuses": { 3387 | "version": "2.0.1", 3388 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 3389 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 3390 | "license": "MIT", 3391 | "engines": { 3392 | "node": ">= 0.8" 3393 | } 3394 | }, 3395 | "node_modules/std-env": { 3396 | "version": "3.8.0", 3397 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", 3398 | "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", 3399 | "dev": true, 3400 | "license": "MIT" 3401 | }, 3402 | "node_modules/stoppable": { 3403 | "version": "1.1.0", 3404 | "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", 3405 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", 3406 | "dev": true, 3407 | "license": "MIT", 3408 | "engines": { 3409 | "node": ">=4", 3410 | "npm": ">=6" 3411 | } 3412 | }, 3413 | "node_modules/stremio-addon-linter": { 3414 | "version": "1.7.0", 3415 | "resolved": "https://registry.npmjs.org/stremio-addon-linter/-/stremio-addon-linter-1.7.0.tgz", 3416 | "integrity": "sha512-ck1L1Wp2qvAhvXLj+4Lq1XRn8K3r2gx1i/f+e1W6K0+Et/oIYYDmaIVoh3SvExiNbCBcbJjH9WWEeDYKoqaMqQ==", 3417 | "license": "MIT", 3418 | "dependencies": { 3419 | "semver": "^5.5.0" 3420 | } 3421 | }, 3422 | "node_modules/stremio-addon-sdk": { 3423 | "version": "1.6.10", 3424 | "resolved": "https://registry.npmjs.org/stremio-addon-sdk/-/stremio-addon-sdk-1.6.10.tgz", 3425 | "integrity": "sha512-+U/lDGv73JPZa7OOy8eMb+SkUFhnHuZGBRXuKNeXcz706oDdwC/sQe9r8Wxw2A7Cw05+f/CQIJSl4zIcmKBkGg==", 3426 | "license": "MIT", 3427 | "dependencies": { 3428 | "chalk": "^2.4.2", 3429 | "cors": "^2.8.4", 3430 | "express": "^4.16.3", 3431 | "inquirer": "^6.2.2", 3432 | "mkdirp": "^0.5.1", 3433 | "node-fetch": "^2.3.0", 3434 | "opn": "^5.4.0", 3435 | "router": "^1.3.3", 3436 | "stremio-addon-linter": "^1.7.0" 3437 | }, 3438 | "bin": { 3439 | "addon-bootstrap": "cli/bootstrap.js" 3440 | } 3441 | }, 3442 | "node_modules/string-width": { 3443 | "version": "2.1.1", 3444 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 3445 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 3446 | "license": "MIT", 3447 | "dependencies": { 3448 | "is-fullwidth-code-point": "^2.0.0", 3449 | "strip-ansi": "^4.0.0" 3450 | }, 3451 | "engines": { 3452 | "node": ">=4" 3453 | } 3454 | }, 3455 | "node_modules/string-width/node_modules/ansi-regex": { 3456 | "version": "3.0.1", 3457 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", 3458 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", 3459 | "license": "MIT", 3460 | "engines": { 3461 | "node": ">=4" 3462 | } 3463 | }, 3464 | "node_modules/string-width/node_modules/strip-ansi": { 3465 | "version": "4.0.0", 3466 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 3467 | "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 3468 | "license": "MIT", 3469 | "dependencies": { 3470 | "ansi-regex": "^3.0.0" 3471 | }, 3472 | "engines": { 3473 | "node": ">=4" 3474 | } 3475 | }, 3476 | "node_modules/strip-ansi": { 3477 | "version": "5.2.0", 3478 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 3479 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 3480 | "license": "MIT", 3481 | "dependencies": { 3482 | "ansi-regex": "^4.1.0" 3483 | }, 3484 | "engines": { 3485 | "node": ">=6" 3486 | } 3487 | }, 3488 | "node_modules/supports-color": { 3489 | "version": "5.5.0", 3490 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3491 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3492 | "license": "MIT", 3493 | "dependencies": { 3494 | "has-flag": "^3.0.0" 3495 | }, 3496 | "engines": { 3497 | "node": ">=4" 3498 | } 3499 | }, 3500 | "node_modules/supports-preserve-symlinks-flag": { 3501 | "version": "1.0.0", 3502 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3503 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3504 | "dev": true, 3505 | "license": "MIT", 3506 | "engines": { 3507 | "node": ">= 0.4" 3508 | }, 3509 | "funding": { 3510 | "url": "https://github.com/sponsors/ljharb" 3511 | } 3512 | }, 3513 | "node_modules/through": { 3514 | "version": "2.3.8", 3515 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3516 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 3517 | "license": "MIT" 3518 | }, 3519 | "node_modules/tinybench": { 3520 | "version": "2.9.0", 3521 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 3522 | "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 3523 | "dev": true, 3524 | "license": "MIT" 3525 | }, 3526 | "node_modules/tinyexec": { 3527 | "version": "0.3.1", 3528 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", 3529 | "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", 3530 | "dev": true, 3531 | "license": "MIT" 3532 | }, 3533 | "node_modules/tinypool": { 3534 | "version": "1.0.1", 3535 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", 3536 | "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", 3537 | "dev": true, 3538 | "license": "MIT", 3539 | "engines": { 3540 | "node": "^18.0.0 || >=20.0.0" 3541 | } 3542 | }, 3543 | "node_modules/tinyrainbow": { 3544 | "version": "1.2.0", 3545 | "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", 3546 | "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", 3547 | "dev": true, 3548 | "license": "MIT", 3549 | "engines": { 3550 | "node": ">=14.0.0" 3551 | } 3552 | }, 3553 | "node_modules/tinyspy": { 3554 | "version": "3.0.2", 3555 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", 3556 | "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", 3557 | "dev": true, 3558 | "license": "MIT", 3559 | "engines": { 3560 | "node": ">=14.0.0" 3561 | } 3562 | }, 3563 | "node_modules/tmp": { 3564 | "version": "0.0.33", 3565 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 3566 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 3567 | "license": "MIT", 3568 | "dependencies": { 3569 | "os-tmpdir": "~1.0.2" 3570 | }, 3571 | "engines": { 3572 | "node": ">=0.6.0" 3573 | } 3574 | }, 3575 | "node_modules/to-regex-range": { 3576 | "version": "5.0.1", 3577 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3578 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3579 | "dev": true, 3580 | "license": "MIT", 3581 | "dependencies": { 3582 | "is-number": "^7.0.0" 3583 | }, 3584 | "engines": { 3585 | "node": ">=8.0" 3586 | } 3587 | }, 3588 | "node_modules/toidentifier": { 3589 | "version": "1.0.1", 3590 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3591 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 3592 | "license": "MIT", 3593 | "engines": { 3594 | "node": ">=0.6" 3595 | } 3596 | }, 3597 | "node_modules/tr46": { 3598 | "version": "0.0.3", 3599 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 3600 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 3601 | "license": "MIT" 3602 | }, 3603 | "node_modules/tslib": { 3604 | "version": "1.14.1", 3605 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 3606 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 3607 | "license": "0BSD" 3608 | }, 3609 | "node_modules/tsx": { 3610 | "version": "4.16.2", 3611 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.2.tgz", 3612 | "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", 3613 | "dev": true, 3614 | "license": "MIT", 3615 | "dependencies": { 3616 | "esbuild": "~0.21.5", 3617 | "get-tsconfig": "^4.7.5" 3618 | }, 3619 | "bin": { 3620 | "tsx": "dist/cli.mjs" 3621 | }, 3622 | "engines": { 3623 | "node": ">=18.0.0" 3624 | }, 3625 | "optionalDependencies": { 3626 | "fsevents": "~2.3.3" 3627 | } 3628 | }, 3629 | "node_modules/tweetnacl": { 3630 | "version": "0.14.5", 3631 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3632 | "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", 3633 | "dev": true, 3634 | "license": "Unlicense" 3635 | }, 3636 | "node_modules/type-is": { 3637 | "version": "1.6.18", 3638 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 3639 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 3640 | "license": "MIT", 3641 | "dependencies": { 3642 | "media-typer": "0.3.0", 3643 | "mime-types": "~2.1.24" 3644 | }, 3645 | "engines": { 3646 | "node": ">= 0.6" 3647 | } 3648 | }, 3649 | "node_modules/typescript": { 3650 | "version": "5.5.3", 3651 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", 3652 | "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", 3653 | "dev": true, 3654 | "license": "Apache-2.0", 3655 | "bin": { 3656 | "tsc": "bin/tsc", 3657 | "tsserver": "bin/tsserver" 3658 | }, 3659 | "engines": { 3660 | "node": ">=14.17" 3661 | } 3662 | }, 3663 | "node_modules/ufo": { 3664 | "version": "1.5.4", 3665 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", 3666 | "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", 3667 | "dev": true, 3668 | "license": "MIT" 3669 | }, 3670 | "node_modules/undici": { 3671 | "version": "5.28.4", 3672 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", 3673 | "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 3674 | "dev": true, 3675 | "license": "MIT", 3676 | "dependencies": { 3677 | "@fastify/busboy": "^2.0.0" 3678 | }, 3679 | "engines": { 3680 | "node": ">=14.0" 3681 | } 3682 | }, 3683 | "node_modules/undici-types": { 3684 | "version": "5.26.5", 3685 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 3686 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 3687 | "dev": true, 3688 | "license": "MIT" 3689 | }, 3690 | "node_modules/unenv": { 3691 | "name": "unenv-nightly", 3692 | "version": "1.10.0-1717606461.a117952", 3693 | "resolved": "https://registry.npmjs.org/unenv-nightly/-/unenv-nightly-1.10.0-1717606461.a117952.tgz", 3694 | "integrity": "sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==", 3695 | "dev": true, 3696 | "license": "MIT", 3697 | "dependencies": { 3698 | "consola": "^3.2.3", 3699 | "defu": "^6.1.4", 3700 | "mime": "^3.0.0", 3701 | "node-fetch-native": "^1.6.4", 3702 | "pathe": "^1.1.2", 3703 | "ufo": "^1.5.3" 3704 | } 3705 | }, 3706 | "node_modules/unenv/node_modules/mime": { 3707 | "version": "3.0.0", 3708 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 3709 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 3710 | "dev": true, 3711 | "license": "MIT", 3712 | "bin": { 3713 | "mime": "cli.js" 3714 | }, 3715 | "engines": { 3716 | "node": ">=10.0.0" 3717 | } 3718 | }, 3719 | "node_modules/unpipe": { 3720 | "version": "1.0.0", 3721 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3722 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 3723 | "license": "MIT", 3724 | "engines": { 3725 | "node": ">= 0.8" 3726 | } 3727 | }, 3728 | "node_modules/utils-merge": { 3729 | "version": "1.0.1", 3730 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3731 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 3732 | "license": "MIT", 3733 | "engines": { 3734 | "node": ">= 0.4.0" 3735 | } 3736 | }, 3737 | "node_modules/vary": { 3738 | "version": "1.1.2", 3739 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3740 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 3741 | "license": "MIT", 3742 | "engines": { 3743 | "node": ">= 0.8" 3744 | } 3745 | }, 3746 | "node_modules/vite": { 3747 | "version": "5.4.11", 3748 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", 3749 | "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", 3750 | "dev": true, 3751 | "license": "MIT", 3752 | "dependencies": { 3753 | "esbuild": "^0.21.3", 3754 | "postcss": "^8.4.43", 3755 | "rollup": "^4.20.0" 3756 | }, 3757 | "bin": { 3758 | "vite": "bin/vite.js" 3759 | }, 3760 | "engines": { 3761 | "node": "^18.0.0 || >=20.0.0" 3762 | }, 3763 | "funding": { 3764 | "url": "https://github.com/vitejs/vite?sponsor=1" 3765 | }, 3766 | "optionalDependencies": { 3767 | "fsevents": "~2.3.3" 3768 | }, 3769 | "peerDependencies": { 3770 | "@types/node": "^18.0.0 || >=20.0.0", 3771 | "less": "*", 3772 | "lightningcss": "^1.21.0", 3773 | "sass": "*", 3774 | "sass-embedded": "*", 3775 | "stylus": "*", 3776 | "sugarss": "*", 3777 | "terser": "^5.4.0" 3778 | }, 3779 | "peerDependenciesMeta": { 3780 | "@types/node": { 3781 | "optional": true 3782 | }, 3783 | "less": { 3784 | "optional": true 3785 | }, 3786 | "lightningcss": { 3787 | "optional": true 3788 | }, 3789 | "sass": { 3790 | "optional": true 3791 | }, 3792 | "sass-embedded": { 3793 | "optional": true 3794 | }, 3795 | "stylus": { 3796 | "optional": true 3797 | }, 3798 | "sugarss": { 3799 | "optional": true 3800 | }, 3801 | "terser": { 3802 | "optional": true 3803 | } 3804 | } 3805 | }, 3806 | "node_modules/vite-node": { 3807 | "version": "2.1.5", 3808 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", 3809 | "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", 3810 | "dev": true, 3811 | "license": "MIT", 3812 | "dependencies": { 3813 | "cac": "^6.7.14", 3814 | "debug": "^4.3.7", 3815 | "es-module-lexer": "^1.5.4", 3816 | "pathe": "^1.1.2", 3817 | "vite": "^5.0.0" 3818 | }, 3819 | "bin": { 3820 | "vite-node": "vite-node.mjs" 3821 | }, 3822 | "engines": { 3823 | "node": "^18.0.0 || >=20.0.0" 3824 | }, 3825 | "funding": { 3826 | "url": "https://opencollective.com/vitest" 3827 | } 3828 | }, 3829 | "node_modules/vite-node/node_modules/debug": { 3830 | "version": "4.3.7", 3831 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 3832 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 3833 | "dev": true, 3834 | "license": "MIT", 3835 | "dependencies": { 3836 | "ms": "^2.1.3" 3837 | }, 3838 | "engines": { 3839 | "node": ">=6.0" 3840 | }, 3841 | "peerDependenciesMeta": { 3842 | "supports-color": { 3843 | "optional": true 3844 | } 3845 | } 3846 | }, 3847 | "node_modules/vite-node/node_modules/ms": { 3848 | "version": "2.1.3", 3849 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3850 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3851 | "dev": true, 3852 | "license": "MIT" 3853 | }, 3854 | "node_modules/vitest": { 3855 | "version": "2.1.5", 3856 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", 3857 | "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", 3858 | "dev": true, 3859 | "license": "MIT", 3860 | "dependencies": { 3861 | "@vitest/expect": "2.1.5", 3862 | "@vitest/mocker": "2.1.5", 3863 | "@vitest/pretty-format": "^2.1.5", 3864 | "@vitest/runner": "2.1.5", 3865 | "@vitest/snapshot": "2.1.5", 3866 | "@vitest/spy": "2.1.5", 3867 | "@vitest/utils": "2.1.5", 3868 | "chai": "^5.1.2", 3869 | "debug": "^4.3.7", 3870 | "expect-type": "^1.1.0", 3871 | "magic-string": "^0.30.12", 3872 | "pathe": "^1.1.2", 3873 | "std-env": "^3.8.0", 3874 | "tinybench": "^2.9.0", 3875 | "tinyexec": "^0.3.1", 3876 | "tinypool": "^1.0.1", 3877 | "tinyrainbow": "^1.2.0", 3878 | "vite": "^5.0.0", 3879 | "vite-node": "2.1.5", 3880 | "why-is-node-running": "^2.3.0" 3881 | }, 3882 | "bin": { 3883 | "vitest": "vitest.mjs" 3884 | }, 3885 | "engines": { 3886 | "node": "^18.0.0 || >=20.0.0" 3887 | }, 3888 | "funding": { 3889 | "url": "https://opencollective.com/vitest" 3890 | }, 3891 | "peerDependencies": { 3892 | "@edge-runtime/vm": "*", 3893 | "@types/node": "^18.0.0 || >=20.0.0", 3894 | "@vitest/browser": "2.1.5", 3895 | "@vitest/ui": "2.1.5", 3896 | "happy-dom": "*", 3897 | "jsdom": "*" 3898 | }, 3899 | "peerDependenciesMeta": { 3900 | "@edge-runtime/vm": { 3901 | "optional": true 3902 | }, 3903 | "@types/node": { 3904 | "optional": true 3905 | }, 3906 | "@vitest/browser": { 3907 | "optional": true 3908 | }, 3909 | "@vitest/ui": { 3910 | "optional": true 3911 | }, 3912 | "happy-dom": { 3913 | "optional": true 3914 | }, 3915 | "jsdom": { 3916 | "optional": true 3917 | } 3918 | } 3919 | }, 3920 | "node_modules/vitest/node_modules/debug": { 3921 | "version": "4.3.7", 3922 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 3923 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 3924 | "dev": true, 3925 | "license": "MIT", 3926 | "dependencies": { 3927 | "ms": "^2.1.3" 3928 | }, 3929 | "engines": { 3930 | "node": ">=6.0" 3931 | }, 3932 | "peerDependenciesMeta": { 3933 | "supports-color": { 3934 | "optional": true 3935 | } 3936 | } 3937 | }, 3938 | "node_modules/vitest/node_modules/magic-string": { 3939 | "version": "0.30.12", 3940 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", 3941 | "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", 3942 | "dev": true, 3943 | "license": "MIT", 3944 | "dependencies": { 3945 | "@jridgewell/sourcemap-codec": "^1.5.0" 3946 | } 3947 | }, 3948 | "node_modules/vitest/node_modules/ms": { 3949 | "version": "2.1.3", 3950 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3951 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3952 | "dev": true, 3953 | "license": "MIT" 3954 | }, 3955 | "node_modules/webidl-conversions": { 3956 | "version": "3.0.1", 3957 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 3958 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 3959 | "license": "BSD-2-Clause" 3960 | }, 3961 | "node_modules/whatwg-url": { 3962 | "version": "5.0.0", 3963 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 3964 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 3965 | "license": "MIT", 3966 | "dependencies": { 3967 | "tr46": "~0.0.3", 3968 | "webidl-conversions": "^3.0.0" 3969 | } 3970 | }, 3971 | "node_modules/which": { 3972 | "version": "2.0.2", 3973 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3974 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3975 | "dev": true, 3976 | "license": "ISC", 3977 | "dependencies": { 3978 | "isexe": "^2.0.0" 3979 | }, 3980 | "bin": { 3981 | "node-which": "bin/node-which" 3982 | }, 3983 | "engines": { 3984 | "node": ">= 8" 3985 | } 3986 | }, 3987 | "node_modules/why-is-node-running": { 3988 | "version": "2.3.0", 3989 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 3990 | "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 3991 | "dev": true, 3992 | "license": "MIT", 3993 | "dependencies": { 3994 | "siginfo": "^2.0.0", 3995 | "stackback": "0.0.2" 3996 | }, 3997 | "bin": { 3998 | "why-is-node-running": "cli.js" 3999 | }, 4000 | "engines": { 4001 | "node": ">=8" 4002 | } 4003 | }, 4004 | "node_modules/workerd": { 4005 | "version": "1.20240718.0", 4006 | "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240718.0.tgz", 4007 | "integrity": "sha512-w7lOLRy0XecQTg/ujTLWBiJJuoQvzB3CdQ6/8Wgex3QxFhV9Pbnh3UbwIuUfMw3OCCPQc4o7y+1P+mISAgp6yg==", 4008 | "dev": true, 4009 | "hasInstallScript": true, 4010 | "license": "Apache-2.0", 4011 | "bin": { 4012 | "workerd": "bin/workerd" 4013 | }, 4014 | "engines": { 4015 | "node": ">=16" 4016 | }, 4017 | "optionalDependencies": { 4018 | "@cloudflare/workerd-darwin-64": "1.20240718.0", 4019 | "@cloudflare/workerd-darwin-arm64": "1.20240718.0", 4020 | "@cloudflare/workerd-linux-64": "1.20240718.0", 4021 | "@cloudflare/workerd-linux-arm64": "1.20240718.0", 4022 | "@cloudflare/workerd-windows-64": "1.20240718.0" 4023 | } 4024 | }, 4025 | "node_modules/wrangler": { 4026 | "version": "3.67.1", 4027 | "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.67.1.tgz", 4028 | "integrity": "sha512-lLVJxq/OZMfntvZ79WQJNC1OKfxOCs6PLfogqDBuPFEQ3L/Mwqvd9IZ0bB8ahrwUN/K3lSdDPXynk9HfcGZxVw==", 4029 | "dev": true, 4030 | "license": "MIT OR Apache-2.0", 4031 | "dependencies": { 4032 | "@cloudflare/kv-asset-handler": "0.3.4", 4033 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3", 4034 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2", 4035 | "blake3-wasm": "^2.1.5", 4036 | "chokidar": "^3.5.3", 4037 | "date-fns": "^3.6.0", 4038 | "esbuild": "0.17.19", 4039 | "miniflare": "3.20240718.1", 4040 | "nanoid": "^3.3.3", 4041 | "path-to-regexp": "^6.2.0", 4042 | "resolve": "^1.22.8", 4043 | "resolve.exports": "^2.0.2", 4044 | "selfsigned": "^2.0.1", 4045 | "source-map": "^0.6.1", 4046 | "unenv": "npm:unenv-nightly@1.10.0-1717606461.a117952", 4047 | "workerd": "1.20240718.0", 4048 | "xxhash-wasm": "^1.0.1" 4049 | }, 4050 | "bin": { 4051 | "wrangler": "bin/wrangler.js", 4052 | "wrangler2": "bin/wrangler.js" 4053 | }, 4054 | "engines": { 4055 | "node": ">=16.17.0" 4056 | }, 4057 | "optionalDependencies": { 4058 | "fsevents": "~2.3.2" 4059 | }, 4060 | "peerDependencies": { 4061 | "@cloudflare/workers-types": "^4.20240718.0" 4062 | }, 4063 | "peerDependenciesMeta": { 4064 | "@cloudflare/workers-types": { 4065 | "optional": true 4066 | } 4067 | } 4068 | }, 4069 | "node_modules/wrangler/node_modules/@esbuild/android-arm": { 4070 | "version": "0.17.19", 4071 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 4072 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 4073 | "cpu": [ 4074 | "arm" 4075 | ], 4076 | "dev": true, 4077 | "license": "MIT", 4078 | "optional": true, 4079 | "os": [ 4080 | "android" 4081 | ], 4082 | "engines": { 4083 | "node": ">=12" 4084 | } 4085 | }, 4086 | "node_modules/wrangler/node_modules/@esbuild/android-arm64": { 4087 | "version": "0.17.19", 4088 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 4089 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 4090 | "cpu": [ 4091 | "arm64" 4092 | ], 4093 | "dev": true, 4094 | "license": "MIT", 4095 | "optional": true, 4096 | "os": [ 4097 | "android" 4098 | ], 4099 | "engines": { 4100 | "node": ">=12" 4101 | } 4102 | }, 4103 | "node_modules/wrangler/node_modules/@esbuild/android-x64": { 4104 | "version": "0.17.19", 4105 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 4106 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 4107 | "cpu": [ 4108 | "x64" 4109 | ], 4110 | "dev": true, 4111 | "license": "MIT", 4112 | "optional": true, 4113 | "os": [ 4114 | "android" 4115 | ], 4116 | "engines": { 4117 | "node": ">=12" 4118 | } 4119 | }, 4120 | "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { 4121 | "version": "0.17.19", 4122 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 4123 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 4124 | "cpu": [ 4125 | "arm64" 4126 | ], 4127 | "dev": true, 4128 | "license": "MIT", 4129 | "optional": true, 4130 | "os": [ 4131 | "darwin" 4132 | ], 4133 | "engines": { 4134 | "node": ">=12" 4135 | } 4136 | }, 4137 | "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { 4138 | "version": "0.17.19", 4139 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 4140 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 4141 | "cpu": [ 4142 | "x64" 4143 | ], 4144 | "dev": true, 4145 | "license": "MIT", 4146 | "optional": true, 4147 | "os": [ 4148 | "darwin" 4149 | ], 4150 | "engines": { 4151 | "node": ">=12" 4152 | } 4153 | }, 4154 | "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { 4155 | "version": "0.17.19", 4156 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 4157 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 4158 | "cpu": [ 4159 | "arm64" 4160 | ], 4161 | "dev": true, 4162 | "license": "MIT", 4163 | "optional": true, 4164 | "os": [ 4165 | "freebsd" 4166 | ], 4167 | "engines": { 4168 | "node": ">=12" 4169 | } 4170 | }, 4171 | "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { 4172 | "version": "0.17.19", 4173 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 4174 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 4175 | "cpu": [ 4176 | "x64" 4177 | ], 4178 | "dev": true, 4179 | "license": "MIT", 4180 | "optional": true, 4181 | "os": [ 4182 | "freebsd" 4183 | ], 4184 | "engines": { 4185 | "node": ">=12" 4186 | } 4187 | }, 4188 | "node_modules/wrangler/node_modules/@esbuild/linux-arm": { 4189 | "version": "0.17.19", 4190 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 4191 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 4192 | "cpu": [ 4193 | "arm" 4194 | ], 4195 | "dev": true, 4196 | "license": "MIT", 4197 | "optional": true, 4198 | "os": [ 4199 | "linux" 4200 | ], 4201 | "engines": { 4202 | "node": ">=12" 4203 | } 4204 | }, 4205 | "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { 4206 | "version": "0.17.19", 4207 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 4208 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 4209 | "cpu": [ 4210 | "arm64" 4211 | ], 4212 | "dev": true, 4213 | "license": "MIT", 4214 | "optional": true, 4215 | "os": [ 4216 | "linux" 4217 | ], 4218 | "engines": { 4219 | "node": ">=12" 4220 | } 4221 | }, 4222 | "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { 4223 | "version": "0.17.19", 4224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 4225 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 4226 | "cpu": [ 4227 | "ia32" 4228 | ], 4229 | "dev": true, 4230 | "license": "MIT", 4231 | "optional": true, 4232 | "os": [ 4233 | "linux" 4234 | ], 4235 | "engines": { 4236 | "node": ">=12" 4237 | } 4238 | }, 4239 | "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { 4240 | "version": "0.17.19", 4241 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 4242 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 4243 | "cpu": [ 4244 | "loong64" 4245 | ], 4246 | "dev": true, 4247 | "license": "MIT", 4248 | "optional": true, 4249 | "os": [ 4250 | "linux" 4251 | ], 4252 | "engines": { 4253 | "node": ">=12" 4254 | } 4255 | }, 4256 | "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { 4257 | "version": "0.17.19", 4258 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 4259 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 4260 | "cpu": [ 4261 | "mips64el" 4262 | ], 4263 | "dev": true, 4264 | "license": "MIT", 4265 | "optional": true, 4266 | "os": [ 4267 | "linux" 4268 | ], 4269 | "engines": { 4270 | "node": ">=12" 4271 | } 4272 | }, 4273 | "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { 4274 | "version": "0.17.19", 4275 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 4276 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 4277 | "cpu": [ 4278 | "ppc64" 4279 | ], 4280 | "dev": true, 4281 | "license": "MIT", 4282 | "optional": true, 4283 | "os": [ 4284 | "linux" 4285 | ], 4286 | "engines": { 4287 | "node": ">=12" 4288 | } 4289 | }, 4290 | "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { 4291 | "version": "0.17.19", 4292 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 4293 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 4294 | "cpu": [ 4295 | "riscv64" 4296 | ], 4297 | "dev": true, 4298 | "license": "MIT", 4299 | "optional": true, 4300 | "os": [ 4301 | "linux" 4302 | ], 4303 | "engines": { 4304 | "node": ">=12" 4305 | } 4306 | }, 4307 | "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { 4308 | "version": "0.17.19", 4309 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 4310 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 4311 | "cpu": [ 4312 | "s390x" 4313 | ], 4314 | "dev": true, 4315 | "license": "MIT", 4316 | "optional": true, 4317 | "os": [ 4318 | "linux" 4319 | ], 4320 | "engines": { 4321 | "node": ">=12" 4322 | } 4323 | }, 4324 | "node_modules/wrangler/node_modules/@esbuild/linux-x64": { 4325 | "version": "0.17.19", 4326 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 4327 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 4328 | "cpu": [ 4329 | "x64" 4330 | ], 4331 | "dev": true, 4332 | "license": "MIT", 4333 | "optional": true, 4334 | "os": [ 4335 | "linux" 4336 | ], 4337 | "engines": { 4338 | "node": ">=12" 4339 | } 4340 | }, 4341 | "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { 4342 | "version": "0.17.19", 4343 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 4344 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 4345 | "cpu": [ 4346 | "x64" 4347 | ], 4348 | "dev": true, 4349 | "license": "MIT", 4350 | "optional": true, 4351 | "os": [ 4352 | "netbsd" 4353 | ], 4354 | "engines": { 4355 | "node": ">=12" 4356 | } 4357 | }, 4358 | "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { 4359 | "version": "0.17.19", 4360 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 4361 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 4362 | "cpu": [ 4363 | "x64" 4364 | ], 4365 | "dev": true, 4366 | "license": "MIT", 4367 | "optional": true, 4368 | "os": [ 4369 | "openbsd" 4370 | ], 4371 | "engines": { 4372 | "node": ">=12" 4373 | } 4374 | }, 4375 | "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { 4376 | "version": "0.17.19", 4377 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 4378 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 4379 | "cpu": [ 4380 | "x64" 4381 | ], 4382 | "dev": true, 4383 | "license": "MIT", 4384 | "optional": true, 4385 | "os": [ 4386 | "sunos" 4387 | ], 4388 | "engines": { 4389 | "node": ">=12" 4390 | } 4391 | }, 4392 | "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { 4393 | "version": "0.17.19", 4394 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 4395 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 4396 | "cpu": [ 4397 | "arm64" 4398 | ], 4399 | "dev": true, 4400 | "license": "MIT", 4401 | "optional": true, 4402 | "os": [ 4403 | "win32" 4404 | ], 4405 | "engines": { 4406 | "node": ">=12" 4407 | } 4408 | }, 4409 | "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { 4410 | "version": "0.17.19", 4411 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 4412 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 4413 | "cpu": [ 4414 | "ia32" 4415 | ], 4416 | "dev": true, 4417 | "license": "MIT", 4418 | "optional": true, 4419 | "os": [ 4420 | "win32" 4421 | ], 4422 | "engines": { 4423 | "node": ">=12" 4424 | } 4425 | }, 4426 | "node_modules/wrangler/node_modules/@esbuild/win32-x64": { 4427 | "version": "0.17.19", 4428 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 4429 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 4430 | "cpu": [ 4431 | "x64" 4432 | ], 4433 | "dev": true, 4434 | "license": "MIT", 4435 | "optional": true, 4436 | "os": [ 4437 | "win32" 4438 | ], 4439 | "engines": { 4440 | "node": ">=12" 4441 | } 4442 | }, 4443 | "node_modules/wrangler/node_modules/esbuild": { 4444 | "version": "0.17.19", 4445 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 4446 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 4447 | "dev": true, 4448 | "hasInstallScript": true, 4449 | "license": "MIT", 4450 | "bin": { 4451 | "esbuild": "bin/esbuild" 4452 | }, 4453 | "engines": { 4454 | "node": ">=12" 4455 | }, 4456 | "optionalDependencies": { 4457 | "@esbuild/android-arm": "0.17.19", 4458 | "@esbuild/android-arm64": "0.17.19", 4459 | "@esbuild/android-x64": "0.17.19", 4460 | "@esbuild/darwin-arm64": "0.17.19", 4461 | "@esbuild/darwin-x64": "0.17.19", 4462 | "@esbuild/freebsd-arm64": "0.17.19", 4463 | "@esbuild/freebsd-x64": "0.17.19", 4464 | "@esbuild/linux-arm": "0.17.19", 4465 | "@esbuild/linux-arm64": "0.17.19", 4466 | "@esbuild/linux-ia32": "0.17.19", 4467 | "@esbuild/linux-loong64": "0.17.19", 4468 | "@esbuild/linux-mips64el": "0.17.19", 4469 | "@esbuild/linux-ppc64": "0.17.19", 4470 | "@esbuild/linux-riscv64": "0.17.19", 4471 | "@esbuild/linux-s390x": "0.17.19", 4472 | "@esbuild/linux-x64": "0.17.19", 4473 | "@esbuild/netbsd-x64": "0.17.19", 4474 | "@esbuild/openbsd-x64": "0.17.19", 4475 | "@esbuild/sunos-x64": "0.17.19", 4476 | "@esbuild/win32-arm64": "0.17.19", 4477 | "@esbuild/win32-ia32": "0.17.19", 4478 | "@esbuild/win32-x64": "0.17.19" 4479 | } 4480 | }, 4481 | "node_modules/wrangler/node_modules/path-to-regexp": { 4482 | "version": "6.2.2", 4483 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", 4484 | "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", 4485 | "dev": true, 4486 | "license": "MIT" 4487 | }, 4488 | "node_modules/wrappy": { 4489 | "version": "1.0.2", 4490 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4491 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 4492 | "dev": true, 4493 | "license": "ISC" 4494 | }, 4495 | "node_modules/ws": { 4496 | "version": "8.18.0", 4497 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 4498 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 4499 | "dev": true, 4500 | "license": "MIT", 4501 | "engines": { 4502 | "node": ">=10.0.0" 4503 | }, 4504 | "peerDependencies": { 4505 | "bufferutil": "^4.0.1", 4506 | "utf-8-validate": ">=5.0.2" 4507 | }, 4508 | "peerDependenciesMeta": { 4509 | "bufferutil": { 4510 | "optional": true 4511 | }, 4512 | "utf-8-validate": { 4513 | "optional": true 4514 | } 4515 | } 4516 | }, 4517 | "node_modules/xxhash-wasm": { 4518 | "version": "1.0.2", 4519 | "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", 4520 | "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", 4521 | "dev": true, 4522 | "license": "MIT" 4523 | }, 4524 | "node_modules/youch": { 4525 | "version": "3.3.3", 4526 | "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", 4527 | "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", 4528 | "dev": true, 4529 | "license": "MIT", 4530 | "dependencies": { 4531 | "cookie": "^0.5.0", 4532 | "mustache": "^4.2.0", 4533 | "stacktracey": "^2.1.8" 4534 | } 4535 | }, 4536 | "node_modules/youch/node_modules/cookie": { 4537 | "version": "0.5.0", 4538 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 4539 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 4540 | "dev": true, 4541 | "license": "MIT", 4542 | "engines": { 4543 | "node": ">= 0.6" 4544 | } 4545 | }, 4546 | "node_modules/zod": { 4547 | "version": "3.23.8", 4548 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", 4549 | "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", 4550 | "dev": true, 4551 | "license": "MIT", 4552 | "funding": { 4553 | "url": "https://github.com/sponsors/colinhacks" 4554 | } 4555 | }, 4556 | "packages/addon": { 4557 | "name": "@easynews/addon", 4558 | "version": "1.3.5", 4559 | "dependencies": { 4560 | "@easynews/api": "^1.0.0", 4561 | "parse-torrent-title": "^1.4.0", 4562 | "stremio-addon-sdk": "^1.6.10" 4563 | }, 4564 | "devDependencies": { 4565 | "@types/stremio-addon-sdk": "^1.6.11" 4566 | } 4567 | }, 4568 | "packages/api": { 4569 | "name": "@easynews/api", 4570 | "version": "1.3.5" 4571 | }, 4572 | "packages/cloudflare-worker": { 4573 | "name": "@easynews/cloudflare-worker", 4574 | "version": "1.3.5", 4575 | "dependencies": { 4576 | "@easynews/addon": "^1.0.0", 4577 | "hono": "^4.5.3", 4578 | "hono-stremio": "^0.1.1" 4579 | }, 4580 | "devDependencies": { 4581 | "@cloudflare/workers-types": "^4.20240529.0", 4582 | "wrangler": "^3.57.2" 4583 | } 4584 | }, 4585 | "packages/easynews-api": { 4586 | "version": "1.0.0", 4587 | "extraneous": true, 4588 | "license": "MIT" 4589 | } 4590 | } 4591 | } 4592 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@easynews/core", 3 | "version": "1.3.5", 4 | "main": "dist/server.js", 5 | "scripts": { 6 | "test": "npm run test --workspaces", 7 | "format": "prettier --write .", 8 | "build": "npm -w packages/api run build && npm -w packages/addon run build", 9 | "build:watch": "tsc --build --watch", 10 | "start:addon": "npm -w packages/addon start", 11 | "start:addon:dev": "npm -w packages/addon run start:dev", 12 | "start:cloudflare-worker:dev": "npm -w packages/cloudflare-worker run dev", 13 | "deploy:beamup": "beamup", 14 | "deploy:cloudflare-worker": "npm -w packages/cloudflare-worker run deploy", 15 | "version": "npm version $npm_package_version --workspaces && git add **/package.json" 16 | }, 17 | "keywords": [ 18 | "stremio easynews addon", 19 | "stremio easynews" 20 | ], 21 | "author": "Sleeyax", 22 | "license": "MIT", 23 | "description": "Provides content from Easynews & includes a search catalog. This addon can also be self-hosted.", 24 | "workspaces": [ 25 | "packages/*" 26 | ], 27 | "engines": { 28 | "node": ">=20.0.0", 29 | "npm": ">=7.0.0" 30 | }, 31 | "devDependencies": { 32 | "@types/node": "^20.14.10", 33 | "beamup-cli": "^1.3.0", 34 | "cross-env": "^7.0.3", 35 | "prettier": "^3.3.2", 36 | "tsx": "^4.16.2", 37 | "typescript": "^5.5.3", 38 | "vitest": "^2.1.5" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /packages/addon/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@easynews/addon", 3 | "version": "1.3.5", 4 | "main": "dist/index.js", 5 | "scripts": { 6 | "test": "vitest run --passWithNoTests", 7 | "test:watch": "vitest watch", 8 | "build": "tsc", 9 | "prepublish": "npm run build", 10 | "start": "node dist/server.js", 11 | "start:dev": "cross-env NODE_ENV=dev tsx watch src/server.ts" 12 | }, 13 | "description": "Provides content from Easynews & includes a search catalog. This addon can also be self-hosted.", 14 | "devDependencies": { 15 | "@types/stremio-addon-sdk": "^1.6.11" 16 | }, 17 | "dependencies": { 18 | "@easynews/api": "^1.0.0", 19 | "parse-torrent-title": "^1.4.0", 20 | "stremio-addon-sdk": "^1.6.10" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/addon/src/addon.ts: -------------------------------------------------------------------------------- 1 | import { Cache, MetaDetail, MetaVideo, Stream } from 'stremio-addon-sdk'; 2 | import addonBuilder from 'stremio-addon-sdk/src/builder'; 3 | import landingTemplate from 'stremio-addon-sdk/src/landingTemplate'; 4 | import { catalog, manifest } from './manifest'; 5 | import { 6 | buildSearchQuery, 7 | createStreamAuth, 8 | createStreamPath, 9 | createStreamUrl, 10 | createThumbnailUrl, 11 | getDuration, 12 | getFileExtension, 13 | getPostTitle, 14 | getQuality, 15 | getSize, 16 | isBadVideo, 17 | logError, 18 | matchesTitle, 19 | } from './utils'; 20 | import { EasynewsAPI, SearchOptions, createBasic } from '@easynews/api'; 21 | import { publicMetaProvider } from './meta'; 22 | import { fromHumanReadable, toDirection } from './sort-option'; 23 | 24 | const builder = new addonBuilder(manifest); 25 | 26 | const prefix = `${catalog.id}:`; 27 | 28 | builder.defineCatalogHandler(async ({ extra: { search } }) => { 29 | return { 30 | metas: [ 31 | { 32 | id: `${prefix}${encodeURIComponent(search)}`, 33 | name: search, 34 | type: 'tv', 35 | logo: manifest.logo, 36 | background: manifest.background, 37 | posterShape: 'square', 38 | poster: manifest.logo, 39 | description: `Provides search results from Easynews for '${search}'`, 40 | }, 41 | ], 42 | cacheMaxAge: 3600 * 24 * 30, // The returned data is static so it may be cached for a long time (30 days). 43 | }; 44 | }); 45 | 46 | builder.defineMetaHandler( 47 | async ({ id, type, config: { username, password } }) => { 48 | try { 49 | if (!id.startsWith(catalog.id)) { 50 | return { meta: null as unknown as MetaDetail }; 51 | } 52 | 53 | const search = decodeURIComponent(id.replace(prefix, '')); 54 | 55 | const videos: MetaVideo[] = []; 56 | 57 | const api = new EasynewsAPI({ username, password }); 58 | const res = await api.searchAll({ query: search }); 59 | 60 | for (const file of res?.data ?? []) { 61 | const title = getPostTitle(file); 62 | 63 | if (isBadVideo(file) || !matchesTitle(title, search, false)) { 64 | continue; 65 | } 66 | 67 | videos.push({ 68 | id: `${prefix}${file.sig}`, 69 | released: new Date(file['5']).toISOString(), 70 | title, 71 | overview: file['6'], 72 | thumbnail: createThumbnailUrl(res, file), 73 | streams: [ 74 | mapStream({ 75 | username, 76 | password, 77 | title, 78 | fullResolution: file.fullres, 79 | fileExtension: getFileExtension(file), 80 | duration: getDuration(file), 81 | size: getSize(file), 82 | url: `${createStreamUrl(res)}/${createStreamPath(file)}|${createStreamAuth(username, password)}`, 83 | videoSize: file.rawSize, 84 | }), 85 | ], 86 | }); 87 | } 88 | 89 | return { 90 | meta: { 91 | id, 92 | name: search, 93 | type: 'tv', 94 | logo: manifest.logo, 95 | background: manifest.background, 96 | poster: manifest.logo, 97 | posterShape: 'square', 98 | description: `Provides search results from Easynews for '${search}'`, 99 | videos, 100 | }, 101 | ...getCacheOptions(videos.length), 102 | }; 103 | } catch (error) { 104 | logError({ 105 | message: 'failed to handle meta', 106 | error, 107 | context: { resource: 'meta', id, type }, 108 | }); 109 | return { meta: null as unknown as MetaDetail }; 110 | } 111 | } 112 | ); 113 | 114 | builder.defineStreamHandler( 115 | async ({ id, type, config: { username, password, ...options } }) => { 116 | try { 117 | if (!id.startsWith('tt')) { 118 | return { streams: [] }; 119 | } 120 | 121 | // Sort options are profiled as human-readable strings in the manifest. 122 | // so we need to convert them back to their internal representation 123 | // before passing them to the search function below. 124 | const sortOptions: Partial = { 125 | sort1: fromHumanReadable(options.sort1), 126 | sort2: fromHumanReadable(options.sort2), 127 | sort3: fromHumanReadable(options.sort3), 128 | sort1Direction: toDirection(options.sort1Direction), 129 | sort2Direction: toDirection(options.sort2Direction), 130 | sort3Direction: toDirection(options.sort3Direction), 131 | }; 132 | 133 | const meta = await publicMetaProvider(id, type); 134 | 135 | const api = new EasynewsAPI({ username, password }); 136 | 137 | let query = buildSearchQuery(type, { ...meta, year: undefined }); 138 | let res = await api.search({ 139 | ...sortOptions, 140 | query, 141 | }); 142 | 143 | if (res?.data?.length <= 1 && meta.year !== undefined) { 144 | query = buildSearchQuery(type, meta); 145 | res = await api.search({ 146 | ...sortOptions, 147 | query, 148 | }); 149 | } 150 | 151 | if (!res || !res.data) { 152 | return { streams: [] }; 153 | } 154 | 155 | const streams: Stream[] = []; 156 | 157 | for (const file of res.data ?? []) { 158 | const title = getPostTitle(file); 159 | 160 | if (isBadVideo(file)) { 161 | continue; 162 | } 163 | 164 | // For series there are multiple possible queries that could match the title. 165 | // We check if at least one of them matches. 166 | if (type === 'series') { 167 | const queries = [ 168 | // full query with season and episode (and optionally year) 169 | query, 170 | // query with episode only 171 | buildSearchQuery(type, { name: meta.name, episode: meta.episode }), 172 | ]; 173 | 174 | if (!queries.some((query) => matchesTitle(title, query, false))) { 175 | continue; 176 | } 177 | } 178 | 179 | // Movie titles should match the query strictly. 180 | // Other content types are loosely matched. 181 | if (!matchesTitle(title, query, type === 'movie')) { 182 | continue; 183 | } 184 | 185 | streams.push( 186 | mapStream({ 187 | username, 188 | password, 189 | fullResolution: file.fullres, 190 | fileExtension: getFileExtension(file), 191 | duration: getDuration(file), 192 | size: getSize(file), 193 | title, 194 | url: `${createStreamUrl(res)}/${createStreamPath(file)}`, 195 | videoSize: file.rawSize, 196 | }) 197 | ); 198 | } 199 | 200 | return { streams, ...getCacheOptions(streams.length) }; 201 | } catch (error) { 202 | logError({ 203 | message: 'failed to handle stream', 204 | error, 205 | context: { resource: 'stream', id, type }, 206 | }); 207 | return { streams: [] }; 208 | } 209 | } 210 | ); 211 | 212 | function mapStream({ 213 | username, 214 | password, 215 | duration, 216 | size, 217 | fullResolution, 218 | title, 219 | fileExtension, 220 | videoSize, 221 | url, 222 | }: { 223 | title: string; 224 | url: string; 225 | username: string; 226 | password: string; 227 | fileExtension: string; 228 | videoSize: number | undefined; 229 | duration: string | undefined; 230 | size: string | undefined; 231 | fullResolution: string | undefined; 232 | }): Stream { 233 | const quality = getQuality(title, fullResolution); 234 | 235 | return { 236 | name: `Easynews+${quality ? `\n${quality}` : ''}`, 237 | description: [ 238 | `${title}${fileExtension}`, 239 | `🕛 ${duration ?? 'unknown duration'}`, 240 | `📦 ${size ?? 'unknown size'}`, 241 | ].join('\n'), 242 | url: url, 243 | behaviorHints: { 244 | notWebReady: true, 245 | proxyHeaders: { 246 | request: { 247 | 'User-Agent': 'Stremio', 248 | Authorization: createBasic(username, password), 249 | }, 250 | }, 251 | fileName: title, 252 | videoSize, 253 | } as Stream['behaviorHints'], 254 | }; 255 | } 256 | 257 | function getCacheOptions(itemsLength: number): Partial { 258 | if (itemsLength === 0) { 259 | return {}; 260 | } 261 | 262 | const oneDay = 3600 * 24; 263 | const oneWeek = oneDay * 7; 264 | 265 | return { 266 | cacheMaxAge: oneWeek, 267 | staleError: oneDay, 268 | staleRevalidate: oneDay, 269 | }; 270 | } 271 | 272 | export const addonInterface = builder.getInterface(); 273 | export const landingHTML = landingTemplate(addonInterface.manifest); 274 | -------------------------------------------------------------------------------- /packages/addon/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './addon'; 2 | -------------------------------------------------------------------------------- /packages/addon/src/manifest.ts: -------------------------------------------------------------------------------- 1 | import { Manifest, ManifestCatalog } from 'stremio-addon-sdk'; 2 | import { 3 | DirectionKey, 4 | humanReadableDirections, 5 | humanReadableSortOptions, 6 | toHumanReadable, 7 | } from './sort-option'; 8 | const { version, description } = require('../package.json'); 9 | 10 | export const catalog: ManifestCatalog = { 11 | id: 'easynews-plus', 12 | name: 'Easynews+', 13 | type: 'tv', 14 | extra: [{ name: 'search', isRequired: true }], 15 | }; 16 | 17 | // TODO: fix in '@types/stremio-addon-sdk' 18 | const sortOptions = humanReadableSortOptions as any; 19 | const directionOptions = humanReadableDirections as any; 20 | 21 | export const manifest: Manifest = { 22 | id: 'community.easynews-plus', 23 | version, 24 | description, 25 | catalogs: [catalog], 26 | resources: [ 27 | 'catalog', 28 | { name: 'meta', types: ['tv'], idPrefixes: [catalog.id] }, 29 | { name: 'stream', types: ['movie', 'series'], idPrefixes: ['tt'] }, 30 | ], 31 | types: ['movie', 'series', 'tv'], 32 | name: 'Easynews+', 33 | background: 34 | 'https://images.pexels.com/photos/518543/pexels-photo-518543.jpeg', 35 | logo: 'https://pbs.twimg.com/profile_images/479627852757733376/8v9zH7Yo_400x400.jpeg', 36 | behaviorHints: { configurable: true, configurationRequired: true }, 37 | config: [ 38 | { title: 'username', key: 'username', type: 'text' }, 39 | { title: 'password', key: 'password', type: 'password' }, 40 | { 41 | title: 'Sort 1st', 42 | key: 'sort1', 43 | type: 'select', 44 | options: sortOptions, 45 | default: toHumanReadable('Size'), 46 | }, 47 | { 48 | title: 'Sort 1st direction', 49 | key: 'sort1Direction', 50 | type: 'select', 51 | options: directionOptions, 52 | default: 'Descending' satisfies DirectionKey, 53 | }, 54 | { 55 | title: 'Sort 2nd', 56 | key: 'sort2', 57 | type: 'select', 58 | options: sortOptions, 59 | default: toHumanReadable('Relevance'), 60 | }, 61 | { 62 | title: 'Sort 2nd direction', 63 | key: 'sort2Direction', 64 | type: 'select', 65 | options: directionOptions, 66 | default: 'Descending' satisfies DirectionKey, 67 | }, 68 | { 69 | title: 'Sort 3rd', 70 | key: 'sort3', 71 | type: 'select', 72 | options: sortOptions, 73 | default: toHumanReadable('DateTime'), 74 | }, 75 | { 76 | title: 'Sort 3rd direction', 77 | key: 'sort3Direction', 78 | type: 'select', 79 | options: directionOptions, 80 | default: 'Descending' satisfies DirectionKey, 81 | }, 82 | ], 83 | }; 84 | -------------------------------------------------------------------------------- /packages/addon/src/meta.ts: -------------------------------------------------------------------------------- 1 | import { extractDigits } from './utils'; 2 | 3 | export type MetaProviderResponse = { 4 | name: string; 5 | year?: number; 6 | season?: string; 7 | episode?: string; 8 | }; 9 | 10 | export async function imdbMetaProvider( 11 | id: string 12 | ): Promise { 13 | var [tt, season, episode] = id.split(':'); 14 | 15 | return fetch(`https://v2.sg.media-imdb.com/suggestion/t/${tt}.json`) 16 | .then((res) => res.json()) 17 | .then((json) => { 18 | return json.d.find((item: { id: string }) => item.id === tt); 19 | }) 20 | .then(({ l, y }) => ({ name: l, year: y, season, episode })); 21 | } 22 | 23 | export async function cinemetaMetaProvider( 24 | id: string, 25 | type: string 26 | ): Promise { 27 | var [tt, season, episode] = id.split(':'); 28 | 29 | return fetch(`https://v3-cinemeta.strem.io/meta/${type}/${tt}.json`) 30 | .then((res) => res.json()) 31 | .then((json) => { 32 | const meta = json.meta; 33 | const name = meta.name; 34 | const year = extractDigits(meta.year ?? meta.releaseInfo); 35 | 36 | return { 37 | name, 38 | year, 39 | episode, 40 | season, 41 | } satisfies MetaProviderResponse; 42 | }); 43 | } 44 | 45 | /** 46 | * Fetches metadata from IMDB and use Cinemeta as a fallback. 47 | */ 48 | export async function publicMetaProvider( 49 | id: string, 50 | type: string 51 | ): Promise { 52 | return imdbMetaProvider(id) 53 | .then((meta) => { 54 | if (meta.name) { 55 | return meta; 56 | } 57 | 58 | return cinemetaMetaProvider(id, type); 59 | }) 60 | .then((meta) => { 61 | if (meta.name) { 62 | return meta; 63 | } 64 | 65 | throw new Error('Failed to find metadata'); 66 | }); 67 | } 68 | -------------------------------------------------------------------------------- /packages/addon/src/server.ts: -------------------------------------------------------------------------------- 1 | import { serveHTTP } from 'stremio-addon-sdk'; 2 | import { addonInterface } from './addon'; 3 | 4 | serveHTTP(addonInterface, { port: +(process.env.PORT ?? 1337) }); 5 | -------------------------------------------------------------------------------- /packages/addon/src/sort-option.ts: -------------------------------------------------------------------------------- 1 | import { capitalizeFirstLetter } from './utils'; 2 | 3 | export enum SortOption { 4 | Relevance = 'relevance', 5 | Extension = 'next', 6 | Size = 'dsize', 7 | Expire = 'xtime', 8 | DateTime = 'dtime', 9 | Filename = 'nrfile', 10 | Subject = 'nsubject', 11 | From = 'nfrom', 12 | Group = 'sgroup', 13 | Header = 'head', 14 | TPN = 'thmparnzb', 15 | Set = 'set', 16 | VideoCodec = 'svcodec', 17 | AudioCodec = 'sacodec', 18 | ImageSize = 'dpixels', 19 | AVLength = 'druntime', 20 | Bitrate = 'dbps', 21 | SampleRate = 'dhz', 22 | FramesPerSec = 'dfps', 23 | Day = 'otime', 24 | } 25 | 26 | export type SortOptionKey = keyof typeof SortOption; 27 | 28 | export const humanReadableSortOptions = Object.keys(SortOption).map((value) => 29 | toHumanReadable(value as SortOptionKey) 30 | ); 31 | 32 | export const humanReadableDirections = ['Ascending', 'Descending'] as const; 33 | export type DirectionKey = (typeof humanReadableDirections)[number]; 34 | 35 | export function toHumanReadable(value: SortOptionKey): string { 36 | const mapComplexStrings: Partial> = { 37 | AVLength: 'A/V Length', 38 | DateTime: 'Date & Time', 39 | TPN: 'TPN', 40 | }; 41 | 42 | return ( 43 | mapComplexStrings[value] ?? 44 | capitalizeFirstLetter(value.split(/(?=[A-Z])/).join(' ')) 45 | ); 46 | } 47 | 48 | export function fromHumanReadable( 49 | value: SortOptionKey | string | undefined 50 | ): SortOption | undefined { 51 | if (!value) return undefined; 52 | 53 | const key = Object.keys(SortOption).find( 54 | (key) => toHumanReadable(key as SortOptionKey) === value 55 | ); 56 | 57 | return SortOption[key as SortOptionKey]; 58 | } 59 | 60 | export function toDirection( 61 | value?: DirectionKey | string 62 | ): '+' | '-' | undefined { 63 | return value ? (value === 'Ascending' ? '+' : '-') : undefined; 64 | } 65 | -------------------------------------------------------------------------------- /packages/addon/src/utils.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, it, test } from 'vitest'; 2 | import { matchesTitle, sanitizeTitle } from './utils.js'; 3 | import { describe } from 'node:test'; 4 | 5 | describe('sanitizeTitle', () => { 6 | // See also: https://github.com/sleeyax/stremio-easynews-addon/issues/38#issuecomment-2467015435. 7 | it.each([ 8 | ['Three Colors: Blue (1993)', 'three colors blue 1993'], 9 | [ 10 | 'Willy Wonka & the Chocolate Factory (1973)', 11 | 'willy wonka and the chocolate factory 1973', 12 | ], 13 | ["America's got talent", 'americas got talent'], 14 | ['WALL-E (2008)', 'wall e 2008'], 15 | ['WALL·E', 'walle'], 16 | [ 17 | 'Mission: Impossible - Dead Reckoning Part One (2023)', 18 | 'mission impossible dead reckoning part one 2023', 19 | ], 20 | [ 21 | 'The Lord of the Rings: The Fellowship of the Ring', 22 | 'the lord of the rings the fellowship of the ring', 23 | ], 24 | ['Once Upon a Time ... in Hollywood', 'once upon a time in hollywood'], 25 | ['Am_er-ic.a', 'am er ic a'], 26 | ['Amérîcâ', 'amérîcâ'], 27 | ["D'où vient-il?", 'doù vient il'], 28 | ['Fête du cinéma', 'fête du cinéma'], 29 | ])("sanitizes the title '%s'", (input, expected) => { 30 | expect(sanitizeTitle(input)).toBe(expected); 31 | }); 32 | }); 33 | 34 | describe('matchesTitle', () => { 35 | it.each([ 36 | // ignore apostrophes 37 | ["America's Next Top Model", "America's", true], 38 | ["America's Next Top Model", 'Americas', true], 39 | // french characters should match exactly 40 | ['Fête du cinéma', 'cinema', false], 41 | ['Fête du cinéma', 'cinéma', true], 42 | ['Fête du cinéma', 'Fete', false], 43 | ['Fête du cinéma', 'Fête', true], 44 | // ignore special characters 45 | ['Am_er-ic.a the Beautiful', 'America the Beautiful', false], 46 | ['Am_er-ic.a the Beautiful', 'Am er ic a the Beautiful', true], 47 | ])("matches the title '%s' with query '%s'", (title, query, expected) => { 48 | expect(matchesTitle(title, query, false)).toBe(expected); 49 | }); 50 | }); 51 | -------------------------------------------------------------------------------- /packages/addon/src/utils.ts: -------------------------------------------------------------------------------- 1 | import { EasynewsSearchResponse, FileData } from '@easynews/api'; 2 | import { MetaProviderResponse } from './meta'; 3 | import { ContentType } from 'stremio-addon-sdk'; 4 | import { parse as parseTorrentTitle } from 'parse-torrent-title'; 5 | 6 | export function isBadVideo(file: FileData) { 7 | const duration = file['14'] ?? ''; 8 | 9 | return ( 10 | // <= 5 minutes in duration 11 | duration.match(/^\d+s/) || 12 | duration.match('^[0-5]m') || 13 | // password protected 14 | file.passwd || 15 | // malicious 16 | file.virus || 17 | // not a video 18 | file.type.toUpperCase() !== 'VIDEO' 19 | ); 20 | } 21 | 22 | export function sanitizeTitle(title: string) { 23 | return ( 24 | title 25 | // replace common symbols with words 26 | .replaceAll('&', 'and') 27 | // replace common separators (., _, -, whitespace) with a single space 28 | .replace(/[\.\-_:\s]+/g, ' ') 29 | // remove non-alphanumeric characters except for accented characters 30 | .replace(/[^\w\sÀ-ÿ]/g, '') 31 | // to lowercase + remove spaces at the beginning and end 32 | .toLowerCase() 33 | .trim() 34 | ); 35 | } 36 | 37 | export function matchesTitle(title: string, query: string, strict: boolean) { 38 | const sanitizedQuery = sanitizeTitle(query); 39 | 40 | if (strict) { 41 | const { title: movieTitle } = parseTorrentTitle(title); 42 | if (movieTitle) { 43 | return sanitizeTitle(movieTitle) === sanitizedQuery; 44 | } 45 | } 46 | 47 | const sanitizedTitle = sanitizeTitle(title); 48 | const re = new RegExp(`\\b${sanitizedQuery}\\b`, 'i'); // match the whole word; e.g. query "deadpool 2" shouldn't match "deadpool 2016" 49 | return re.test(sanitizedTitle); 50 | } 51 | 52 | export function createStreamUrl({ 53 | downURL, 54 | dlFarm, 55 | dlPort, 56 | }: Pick) { 57 | return `${downURL}/${dlFarm}/${dlPort}`; 58 | } 59 | 60 | export function createStreamPath(file: FileData) { 61 | const postHash = file['0'] ?? ''; 62 | const postTitle = file['10'] ?? ''; 63 | const ext = file['11'] ?? ''; 64 | 65 | return `${postHash}${ext}/${postTitle}${ext}`; 66 | } 67 | 68 | export function createStreamAuth(username: string, password: string) { 69 | return `Authorization=${encodeURIComponent(username + ':' + password)}`; 70 | } 71 | 72 | export function getFileExtension(file: FileData) { 73 | return file['2'] ?? ''; 74 | } 75 | 76 | export function getPostTitle(file: FileData) { 77 | return file['10'] ?? ''; 78 | } 79 | 80 | export function getDuration(file: FileData) { 81 | return file['14'] ?? ''; 82 | } 83 | 84 | export function getSize(file: FileData) { 85 | return file['4'] ?? ''; 86 | } 87 | 88 | export function getQuality( 89 | title: string, 90 | fallbackResolution?: string 91 | ): string | undefined { 92 | const { resolution } = parseTorrentTitle(title); 93 | return resolution ?? fallbackResolution; 94 | } 95 | 96 | export function createThumbnailUrl( 97 | res: EasynewsSearchResponse, 98 | file: FileData 99 | ) { 100 | const id = file['0']; 101 | const idChars = id.slice(0, 3); 102 | const thumbnailSlug = file['10']; 103 | return `${res.thumbURL}${idChars}/pr-${id}.jpg/th-${thumbnailSlug}.jpg`; 104 | } 105 | 106 | export function extractDigits(value: string) { 107 | const match = value.match(/\d+/); 108 | 109 | if (match) { 110 | return parseInt(match[0], 10); 111 | } 112 | 113 | return undefined; 114 | } 115 | 116 | export function buildSearchQuery( 117 | type: ContentType, 118 | meta: MetaProviderResponse 119 | ) { 120 | let query = `${meta.name}`; 121 | 122 | if (type === 'series') { 123 | if (meta.season) { 124 | query += ` S${meta.season.toString().padStart(2, '0')}`; 125 | } 126 | 127 | if (meta.episode) { 128 | query += `${!meta.season ? ' ' : ''}E${meta.episode.toString().padStart(2, '0')}`; 129 | } 130 | } 131 | 132 | if (meta.year) { 133 | query += ` ${meta.year}`; 134 | } 135 | 136 | return query; 137 | } 138 | 139 | export function logError(message: { 140 | message: string; 141 | error: unknown; 142 | context: unknown; 143 | }) { 144 | console.error(message); 145 | } 146 | 147 | export function capitalizeFirstLetter(str: string): string { 148 | if (!str) return str; 149 | return str.charAt(0).toUpperCase() + str.slice(1); 150 | } 151 | -------------------------------------------------------------------------------- /packages/addon/stremio-addon-sdk-builder.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'stremio-addon-sdk/src/builder' { 2 | import type { 3 | AddonCatalog, 4 | AddonInterface, 5 | Cache, 6 | ContentType, 7 | Manifest, 8 | MetaDetail, 9 | MetaPreview, 10 | Subtitle, 11 | } from 'stremio-addon-sdk'; 12 | 13 | type Config = { 14 | username: string; 15 | password: string; 16 | sort1?: string; 17 | sort1Direction?: string; 18 | sort2?: string; 19 | sort2Direction?: string; 20 | sort3?: string; 21 | sort3Direction?: string; 22 | }; 23 | 24 | export default class addonBuilder { 25 | constructor(manifest: Manifest); 26 | 27 | defineCatalogHandler( 28 | handler: (args: Args) => Promise<{ metas: MetaPreview[] } & Cache> 29 | ): void; 30 | 31 | defineMetaHandler( 32 | handler: (args: { 33 | type: ContentType; 34 | id: string; 35 | config: Config; 36 | }) => Promise<{ meta: MetaDetail } & Cache> 37 | ): void; 38 | 39 | defineStreamHandler( 40 | handler: (args: { 41 | type: ContentType; 42 | id: string; 43 | config: Config; 44 | }) => Promise<{ streams: Stream[] } & Cache> 45 | ): void; 46 | 47 | defineSubtitlesHandler( 48 | handler: (args: { 49 | type: ContentType; 50 | id: string; 51 | extra: { 52 | videoHash: string; 53 | videoSize: string; 54 | }; 55 | }) => Promise<{ subtitles: Subtitle[] } & Cache> 56 | ): void; 57 | 58 | defineResourceHandler(args: { 59 | type: ContentType; 60 | id: string; 61 | }): Promise<{ addons: AddonCatalog[] } & Cache>; 62 | 63 | getInterface(): AddonInterface; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /packages/addon/stremio-addon-sdk.d.ts: -------------------------------------------------------------------------------- 1 | import { ContentType } from 'stremio-addon-sdk'; 2 | 3 | declare module 'stremio-addon-sdk' { 4 | interface Stream { 5 | description?: string; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/addon/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "rootDir": "src", 5 | "outDir": "dist", 6 | "resolveJsonModule": true 7 | }, 8 | "references": [ 9 | { 10 | "path": "../api" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /packages/api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@easynews/api", 3 | "version": "1.3.5", 4 | "main": "./dist/index.js", 5 | "scripts": { 6 | "test": "vitest run --passWithNoTests", 7 | "build": "tsc" 8 | }, 9 | "description": "Easynews API library" 10 | } 11 | -------------------------------------------------------------------------------- /packages/api/src/api.ts: -------------------------------------------------------------------------------- 1 | import { createBasic } from './utils'; 2 | import { EasynewsSearchResponse, FileData, SearchOptions } from './types'; 3 | 4 | export class EasynewsAPI { 5 | private readonly baseUrl = 'https://members.easynews.com'; 6 | private readonly headers: Headers; 7 | 8 | constructor(options: { username: string; password: string }) { 9 | if (!options) { 10 | throw new Error('Missing options'); 11 | } 12 | 13 | this.headers = new Headers(); 14 | const basic = createBasic(options.username, options.password); 15 | this.headers.append('Authorization', basic); 16 | } 17 | 18 | async search({ 19 | query, 20 | pageNr = 1, 21 | maxResults = 1000, 22 | sort1 = 'dsize', 23 | sort1Direction = '-', 24 | sort2 = 'relevance', 25 | sort2Direction = '-', 26 | sort3 = 'dtime', 27 | sort3Direction = '-', 28 | }: SearchOptions): Promise { 29 | const searchParams = { 30 | st: 'adv', 31 | sb: '1', 32 | fex: 'm4v,3gp,mov,divx,xvid,wmv,avi,mpg,mpeg,mp4,mkv,avc,flv,webm', 33 | 'fty[]': 'VIDEO', 34 | spamf: '1', 35 | u: '1', 36 | gx: '1', 37 | pno: pageNr.toString(), 38 | sS: '3', 39 | s1: sort1, 40 | s1d: sort1Direction, 41 | s2: sort2, 42 | s2d: sort2Direction, 43 | s3: sort3, 44 | s3d: sort3Direction, 45 | pby: maxResults.toString(), 46 | safeO: '0', 47 | gps: query, 48 | }; 49 | 50 | const url = new URL(`${this.baseUrl}/2.0/search/solr-search/advanced`); 51 | url.search = new URLSearchParams(searchParams).toString(); 52 | 53 | const res = await fetch(url, { 54 | headers: this.headers, 55 | signal: AbortSignal.timeout(20_000), // 20 seconds 56 | }); 57 | 58 | if (!res.ok) { 59 | throw new Error( 60 | `Failed to fetch search results of query '${query}': ${res.status} ${res.statusText}` 61 | ); 62 | } 63 | 64 | const json = await res.json(); 65 | 66 | return json; 67 | } 68 | 69 | async searchAll(options: SearchOptions): Promise { 70 | const data: FileData[] = []; 71 | let res: EasynewsSearchResponse; 72 | let pageNr = 1; 73 | 74 | while (true) { 75 | res = await this.search({ ...options, pageNr }); 76 | 77 | // No more results. 78 | if ( 79 | (res.data ?? []).length === 0 || 80 | data[0]?.['0'] === res.data[0]?.['0'] 81 | ) { 82 | break; 83 | } 84 | 85 | data.push(...res.data); 86 | 87 | pageNr++; 88 | } 89 | 90 | res.data = data; 91 | 92 | return res; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /packages/api/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api'; 2 | export * from './types'; 3 | export * from './utils'; 4 | -------------------------------------------------------------------------------- /packages/api/src/types.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Generated using: https://app.quicktype.io/. 3 | * 4 | */ 5 | export type EasynewsSearchResponse = { 6 | sid: string; 7 | results: number; 8 | perPage: string; 9 | numPages: number; 10 | dlFarm: string; 11 | dlPort: number; 12 | baseURL: string; 13 | downURL: string; 14 | thumbURL: string; 15 | page: number; 16 | groups: { [key: string]: number }[]; 17 | data: FileData[]; 18 | returned: number; 19 | unfilteredResults: number; 20 | hidden: number; 21 | classicThumbs: string; 22 | fields: Fields; 23 | hthm: number; 24 | hInfo: number; 25 | st: string; 26 | sS: string; 27 | stemmed: string; 28 | largeThumb: string; 29 | largeThumbSize: string; 30 | gsColumns: GsColumn[]; 31 | }; 32 | 33 | export type FileData = { 34 | '0': string; 35 | '1': string; 36 | '2': FileExtension; 37 | '3': string; 38 | '4': string; 39 | '5': string; 40 | '6': string; 41 | '7': string; 42 | '8': string; 43 | '9': Group; 44 | '10': string; 45 | '11': FileExtension; 46 | '12': CompressionStandard; 47 | '13': string; 48 | '14': string; 49 | '15': number; 50 | '16': number; 51 | '17': number; 52 | '18': CodingFormat; 53 | '19': string; 54 | '20': The20; 55 | '35': string; 56 | type: ContentType; 57 | height: string; 58 | width: string; 59 | theight: number; 60 | twidth: number; 61 | fullres: string; 62 | alangs: string[] | null; 63 | slangs: null; 64 | passwd: boolean; 65 | virus: boolean; 66 | expires: The20; 67 | nfo: string; 68 | ts: number; 69 | rawSize: number; 70 | volume: boolean; 71 | sc: boolean; 72 | primaryURL: URL; 73 | fallbackURL: URL; 74 | sb: number; 75 | size: number; 76 | runtime: number; 77 | sig: string; 78 | }; 79 | 80 | export enum FileExtension { 81 | AVI = '.avi', 82 | Mkv = '.mkv', 83 | Mp4 = '.mp4', 84 | } 85 | 86 | export enum CompressionStandard { 87 | H264 = 'H264', 88 | Xvid = 'XVID', 89 | } 90 | 91 | export enum CodingFormat { 92 | AAC = 'AAC', 93 | Mp3 = 'MP3', 94 | Mpg123 = 'MPG123', 95 | Unknown = 'UNKNOWN', 96 | } 97 | 98 | export enum The20 { 99 | The8734 = '∞', 100 | } 101 | 102 | export enum Group { 103 | AltBinariesBonelessAltBinariesMisc = 'alt.binaries.boneless alt.binaries.misc', 104 | AltBinariesBonelessAltBinariesMiscAltBinariesNl = 'alt.binaries.boneless alt.binaries.misc alt.binaries.nl', 105 | AltBinariesBonelessAltBinariesMultimedia = 'alt.binaries.boneless alt.binaries.multimedia', 106 | AltBinariesBonelessAltBinariesNewzbin = 'alt.binaries.boneless alt.binaries.newzbin', 107 | AltBinariesDVDAltBinariesNlAltBinariesX = 'alt.binaries.dvd alt.binaries.nl alt.binaries.x', 108 | AltBinariesMiscAltBinariesNl = 'alt.binaries.misc alt.binaries.nl', 109 | AltBinariesMultimedia = 'alt.binaries.multimedia', 110 | AltBinariesMultimediaAltBinariesTeevee = 'alt.binaries.multimedia alt.binaries.teevee', 111 | AltBinariesNl = 'alt.binaries.nl', 112 | AltBinariesWtfnzbDelta = 'alt.binaries.wtfnzb.delta', 113 | } 114 | 115 | export enum URL { 116 | MembersEasynewsCOM = '//members.easynews.com', 117 | } 118 | 119 | export enum ContentType { 120 | Video = 'VIDEO', 121 | } 122 | 123 | export type Fields = { 124 | '2': string; 125 | '3': string; 126 | '4': string; 127 | '5': string; 128 | '6': string; 129 | '7': string; 130 | '9': string; 131 | '10': string; 132 | '12': string; 133 | '14': string; 134 | '15': string; 135 | '16': string; 136 | '17': string; 137 | '18': string; 138 | '20': string; 139 | FullThumb: string; 140 | }; 141 | 142 | export type GsColumn = { 143 | num: number; 144 | name: string; 145 | }; 146 | 147 | export type SortDirection = '+' | '-'; 148 | 149 | export type SearchOptions = { 150 | query: string; 151 | pageNr?: number; 152 | maxResults?: number; 153 | sort1?: string; 154 | sort1Direction?: SortDirection; 155 | sort2?: string; 156 | sort2Direction?: SortDirection; 157 | sort3?: string; 158 | sort3Direction?: SortDirection; 159 | }; 160 | -------------------------------------------------------------------------------- /packages/api/src/utils.ts: -------------------------------------------------------------------------------- 1 | export function createBasic(username: string, password: string) { 2 | const userInfo = `${username}:${password}`; 3 | 4 | return `Basic ${btoa(userInfo)}`; 5 | } 6 | -------------------------------------------------------------------------------- /packages/api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "dist", 5 | "rootDir": "src" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/cloudflare-worker/.gitignore: -------------------------------------------------------------------------------- 1 | # prod 2 | dist/ 3 | 4 | # dev 5 | .yarn/ 6 | !.yarn/releases 7 | .vscode/* 8 | !.vscode/launch.json 9 | !.vscode/*.code-snippets 10 | .idea/workspace.xml 11 | .idea/usage.statistics.xml 12 | .idea/shelf 13 | 14 | # deps 15 | node_modules/ 16 | .wrangler 17 | 18 | # env 19 | .env 20 | .env.production 21 | .dev.vars 22 | 23 | # logs 24 | logs/ 25 | *.log 26 | npm-debug.log* 27 | yarn-debug.log* 28 | yarn-error.log* 29 | pnpm-debug.log* 30 | lerna-debug.log* 31 | 32 | # misc 33 | .DS_Store 34 | -------------------------------------------------------------------------------- /packages/cloudflare-worker/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@easynews/cloudflare-worker", 3 | "version": "1.3.5", 4 | "scripts": { 5 | "test": "vitest run --passWithNoTests", 6 | "dev": "wrangler dev src/index.ts", 7 | "deploy": "wrangler deploy --minify src/index.ts", 8 | "build": "exit 0" 9 | }, 10 | "dependencies": { 11 | "@easynews/addon": "^1.0.0", 12 | "hono": "^4.5.3", 13 | "hono-stremio": "^0.1.1" 14 | }, 15 | "devDependencies": { 16 | "@cloudflare/workers-types": "^4.20240529.0", 17 | "wrangler": "^3.57.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/cloudflare-worker/src/index.ts: -------------------------------------------------------------------------------- 1 | import { Hono } from 'hono'; 2 | import { getRouter } from 'hono-stremio'; 3 | import { addonInterface, landingHTML } from '@easynews/addon'; 4 | 5 | const addonRouter = getRouter(addonInterface, { landingHTML }); 6 | 7 | const app = new Hono(); 8 | 9 | app.route('/', addonRouter); 10 | 11 | export default app; 12 | -------------------------------------------------------------------------------- /packages/cloudflare-worker/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | "moduleResolution": "Bundler", 7 | "strict": true, 8 | "skipLibCheck": true, 9 | "lib": ["ESNext"], 10 | "types": ["@cloudflare/workers-types"], 11 | "jsx": "react-jsx", 12 | "jsxImportSource": "hono/jsx" 13 | }, 14 | "references": [ 15 | { 16 | "path": "../addon" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /packages/cloudflare-worker/wrangler.toml: -------------------------------------------------------------------------------- 1 | name = "easynews-cloudflare-worker" 2 | compatibility_date = "2024-08-01" 3 | 4 | # [vars] 5 | # MY_VAR = "my-variable" 6 | 7 | # [[kv_namespaces]] 8 | # binding = "MY_KV_NAMESPACE" 9 | # id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 10 | 11 | # [[r2_buckets]] 12 | # binding = "MY_BUCKET" 13 | # bucket_name = "my-bucket" 14 | 15 | # [[d1_databases]] 16 | # binding = "DB" 17 | # database_name = "my-database" 18 | # database_id = "" 19 | 20 | # [ai] 21 | # binding = "AI" -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2021", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "incremental": true, 7 | "composite": true, 8 | "declaration": true, 9 | "sourceMap": true, 10 | "strict": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "forceConsistentCasingInFileNames": true 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "references": [{ "path": "packages/addon" }, { "path": "packages/api" }] 4 | } 5 | --------------------------------------------------------------------------------