From 589919d91df494bc32e7568dbdfa392eb7c35e7e Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Thu, 14 Aug 2025 21:22:40 -0500 Subject: [PATCH] saving current implementation of the action using the new pypi stats site --- .dev.env | 20 + .github/workflows/stats.yml | 40 + ARCHITECTURE.md | 177 + CLAUDE.md | 107 + INSTALLATION.md | 107 - PUBLISHING.md | 260 - README.md | 155 +- Test-Readme.md | 134 + action.yml | 64 +- bun.lock | 453 +- bunfig.toml | 11 +- ...point-cli-cumulative-release-downloads.svg | 405 + ...nt-oss-sailpoint-cli-release-downloads.svg | 554 ++ ...ss-sailpoint-cli-top-release-downloads.svg | 246 + ...lpoint-api-client-cumulative-downloads.svg | 428 + ...oint-api-client-new-downloads-by-month.svg | 428 + .../powershell-combined-downloads.svg | 681 ++ .../powershell-cumulative-downloads.svg | 729 ++ charts/pypi/sailpoint-pypi-installer.svg | 1093 +++ charts/pypi/sailpoint-pypi-overall.svg | 509 ++ .../sailpoint-pypi-python-major-totals.svg | 127 + charts/pypi/sailpoint-pypi-python-major.svg | 505 ++ .../sailpoint-pypi-python-minor-totals.svg | 217 + charts/pypi/sailpoint-pypi-python-minor.svg | 1093 +++ charts/pypi/sailpoint-pypi-system-totals.svg | 155 + charts/pypi/sailpoint-pypi-system.svg | 673 ++ dist/action.js | 121 - dist/index.js | 80 - examples/basic-usage.yml | 39 - examples/input-based-config.yml | 59 - package.json | 28 +- src/action.ts | 294 +- src/aggregator.ts | 289 - src/collectors/github.ts | 366 + src/collectors/npm.ts | 154 + src/collectors/powershell.ts | 363 + src/collectors/pypi.ts | 193 + src/collectors/types.ts | 44 + src/github-tracker.test.ts | 52 - src/index.test.ts | 104 - src/index.ts | 262 - src/summaries/github.ts | 321 + src/summaries/npm.ts | 201 + src/summaries/powershell.ts | 288 + src/summaries/pypi.ts | 397 + src/test-setup.ts | 29 - src/trackers/github.ts | 201 - src/trackers/go.ts | 298 - src/trackers/homebrew.ts | 199 - src/trackers/npm.ts | 109 - src/trackers/postman.ts | 286 - src/trackers/powershell.ts | 212 - src/trackers/pypi.ts | 146 - src/types/index.ts | 30 - src/utils.ts | 148 + stats.json | 8028 +++++++++++++++++ summary.md | 83 + yarn.lock | 1029 +++ 58 files changed, 20647 insertions(+), 3177 deletions(-) create mode 100644 .dev.env create mode 100644 .github/workflows/stats.yml create mode 100644 ARCHITECTURE.md create mode 100644 CLAUDE.md delete mode 100644 INSTALLATION.md delete mode 100644 PUBLISHING.md create mode 100644 Test-Readme.md create mode 100644 charts/github/sailpoint-oss-sailpoint-cli-cumulative-release-downloads.svg create mode 100644 charts/github/sailpoint-oss-sailpoint-cli-release-downloads.svg create mode 100644 charts/github/sailpoint-oss-sailpoint-cli-top-release-downloads.svg create mode 100644 charts/npm/sailpoint-api-client-cumulative-downloads.svg create mode 100644 charts/npm/sailpoint-api-client-new-downloads-by-month.svg create mode 100644 charts/powershell/powershell-combined-downloads.svg create mode 100644 charts/powershell/powershell-cumulative-downloads.svg create mode 100644 charts/pypi/sailpoint-pypi-installer.svg create mode 100644 charts/pypi/sailpoint-pypi-overall.svg create mode 100644 charts/pypi/sailpoint-pypi-python-major-totals.svg create mode 100644 charts/pypi/sailpoint-pypi-python-major.svg create mode 100644 charts/pypi/sailpoint-pypi-python-minor-totals.svg create mode 100644 charts/pypi/sailpoint-pypi-python-minor.svg create mode 100644 charts/pypi/sailpoint-pypi-system-totals.svg create mode 100644 charts/pypi/sailpoint-pypi-system.svg delete mode 100755 dist/action.js delete mode 100755 dist/index.js delete mode 100644 examples/basic-usage.yml delete mode 100644 examples/input-based-config.yml delete mode 100644 src/aggregator.ts create mode 100644 src/collectors/github.ts create mode 100644 src/collectors/npm.ts create mode 100644 src/collectors/powershell.ts create mode 100644 src/collectors/pypi.ts create mode 100644 src/collectors/types.ts delete mode 100644 src/github-tracker.test.ts delete mode 100644 src/index.test.ts delete mode 100644 src/index.ts create mode 100644 src/summaries/github.ts create mode 100644 src/summaries/npm.ts create mode 100644 src/summaries/powershell.ts create mode 100644 src/summaries/pypi.ts delete mode 100644 src/test-setup.ts delete mode 100644 src/trackers/github.ts delete mode 100644 src/trackers/go.ts delete mode 100644 src/trackers/homebrew.ts delete mode 100644 src/trackers/npm.ts delete mode 100644 src/trackers/postman.ts delete mode 100644 src/trackers/powershell.ts delete mode 100644 src/trackers/pypi.ts delete mode 100644 src/types/index.ts create mode 100644 src/utils.ts create mode 100644 stats.json create mode 100644 summary.md create mode 100644 yarn.lock diff --git a/.dev.env b/.dev.env new file mode 100644 index 0000000..8de6e3c --- /dev/null +++ b/.dev.env @@ -0,0 +1,20 @@ +# NPM packages +INPUT_NPM-PACKAGES=sailpoint-api-client + +# GitHub repositories +INPUT_GITHUB-REPOSITORIES=sailpoint-oss/sailpoint-cli + +# PyPI packages +INPUT_PYPI-PACKAGES=sailpoint + +# PowerShell modules +INPUT_POWERSHELL-MODULES=PSSailPoint,PSSailpoint.V3,PSSailpoint.Beta,PSSailpoint.V2024,PSSailpoint.V2025 + +# Go modules +INPUT_GO-MODULES=github.com/sailpoint-oss/golang-sdk/v2 + +# Output configuration +INPUT_JSON-OUTPUT-PATH=stats.json +INPUT_UPDATE-README=true +INPUT_COMMIT-MESSAGE=chore: update usage statistics +INPUT_README-PATH=Test-Readme.md \ No newline at end of file diff --git a/.github/workflows/stats.yml b/.github/workflows/stats.yml new file mode 100644 index 0000000..75d7eae --- /dev/null +++ b/.github/workflows/stats.yml @@ -0,0 +1,40 @@ +name: Collect Usage Stats + +on: + schedule: + - cron: '0 0 * * 1' # Every Monday at midnight UTC + workflow_dispatch: # Allow manual triggering + +jobs: + stats: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + + - name: Install dependencies + run: bun install + + - name: Run collection script + run: bun run scripts/collect.ts + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure Git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Commit and push changes + run: | + git add README.md output/ + git commit -m "chore: update usage statistics" || echo "No changes to commit" + git push \ No newline at end of file diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md new file mode 100644 index 0000000..7ed35ab --- /dev/null +++ b/ARCHITECTURE.md @@ -0,0 +1,177 @@ +# Usage Statistics - Simplified Architecture + +This document describes the new simplified architecture for the usage statistics tracker. + +## ๐Ÿ—๏ธ Architecture Overview + +The new system is organized into clear, modular components: + +``` +project-root/ +โ”œโ”€โ”€ collectors/ # Platform-specific data collectors +โ”‚ โ”œโ”€โ”€ types.ts # Shared interfaces +โ”‚ โ”œโ”€โ”€ github.ts # GitHub repository stats +โ”‚ โ”œโ”€โ”€ npm.ts # NPM package stats +โ”‚ โ”œโ”€โ”€ pypi.ts # PyPI package stats +โ”‚ โ”œโ”€โ”€ homebrew.ts # Homebrew formula stats +โ”‚ โ”œโ”€โ”€ powershell.ts # PowerShell module stats +โ”‚ โ””โ”€โ”€ [removed] +โ”œโ”€โ”€ core/ # Core orchestration logic +โ”‚ โ”œโ”€โ”€ runner.ts # Main collection orchestrator +โ”‚ โ”œโ”€โ”€ registry.ts # Collector registry +โ”‚ โ”œโ”€โ”€ summarize.ts # Markdown table generation +โ”‚ โ”œโ”€โ”€ update-readme.ts # README section replacement +โ”‚ โ”œโ”€โ”€ write-output.ts # JSON file writing +โ”‚ โ””โ”€โ”€ utils.ts # Shared utilities +โ”œโ”€โ”€ config/ +โ”‚ โ””โ”€โ”€ sources.json # Configuration of what to track +โ”œโ”€โ”€ output/ # Generated output files +โ”œโ”€โ”€ scripts/ +โ”‚ โ””โ”€โ”€ collect.ts # Main collection script +โ””โ”€โ”€ .github/workflows/ + โ””โ”€โ”€ stats.yml # GitHub Action workflow +``` + +## ๐Ÿ”ง Key Components + +### 1. Collectors (`collectors/`) + +Each collector is a simple function that takes a source name and returns a `MetricResult`: + +```typescript +export interface MetricResult { + platform: string; + name: string; + timestamp: string; + metrics: Record; + error?: string; +} +``` + +### 2. Registry (`core/registry.ts`) + +The registry manages all collectors and provides a unified interface: + +```typescript +export const collectors = { + github: { collect: collectGithubMetrics, batched: true }, + npm: { collect: collectNpmMetrics, batched: false }, + // ... +}; +``` + +### 3. Runner (`core/runner.ts`) + +The main orchestrator that: +- Loads sources from `config/sources.json` +- Groups sources by platform +- Handles batching for supported platforms +- Manages errors gracefully + +### 4. Summarizer (`core/summarize.ts`) + +Converts raw metrics into a human-readable markdown table for the README. + +### 5. README Updater (`core/update-readme.ts`) + +Replaces a marked section in the README with the generated statistics. + +## ๐Ÿ“Š Configuration + +Sources are configured in `config/sources.json`: + +```json +{ + "sources": [ + { + "platform": "npm", + "name": "express" + }, + { + "platform": "github", + "name": "facebook/react" + } + ] +} +``` + +## ๐Ÿš€ Usage + +### Local Development + +```bash +# Install dependencies +bun install + +# Run collection +bun run collect + +# Run collection and update README +bun run collect:readme +``` + +### GitHub Actions + +The workflow in `.github/workflows/stats.yml` runs every Monday and: +1. Runs the collection script +2. Updates the README with new statistics +3. Commits and pushes the changes + +## ๐Ÿ“ˆ Adding New Platforms + +To add a new platform: + +1. Create a new collector in `collectors/`: +```typescript +export const collectNewPlatformMetrics: MetricCollector = { + async collect(source: string): Promise { + // Implementation + } +}; +``` + +2. Register it in `core/registry.ts`: +```typescript +import { collectNewPlatformMetrics } from '../collectors/newplatform'; + +export const collectors = { + // ... existing collectors + newplatform: { collect: collectNewPlatformMetrics, batched: false } +}; +``` + +3. Add sources to `config/sources.json` + +## ๐Ÿ”„ Output Files + +The system generates several output files in the `output/` directory: + +- `latest.json` - Complete collection results +- `results.json` - Just the metrics array +- `summary.md` - Human-readable summary +- `backup-{timestamp}.json` - Timestamped backups + +## ๐ŸŽฏ Benefits of the New Architecture + +1. **Simplicity**: Each component has a single responsibility +2. **Reliability**: Graceful error handling and retries +3. **Extensibility**: Easy to add new platforms +4. **Maintainability**: Clear separation of concerns +5. **Testability**: Pure functions with clear interfaces + +## ๐Ÿ”ง Environment Variables + +- `GITHUB_TOKEN`: For GitHub API access (optional) +- `GITHUB_ACTIONS`: Set to 'true' in GitHub Actions context + +## ๐Ÿ“ README Integration + +The system looks for these markers in the README: + +```markdown + +[This section will be auto-updated] + +``` + +Everything between these markers will be replaced with the generated statistics table. \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..630114b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,107 @@ +--- + +Default to using Bun instead of Node.js. + +- Use `bun ` instead of `node ` or `ts-node ` +- Use `bun test` instead of `jest` or `vitest` +- Use `bun build ` instead of `webpack` or `esbuild` +- Use `bun install` instead of `npm install` or `yarn install` or `pnpm install` +- Use `bun run + + +``` + +With the following `frontend.tsx`: + +```tsx#frontend.tsx +import React from "react"; + +// import .css files directly and it works +import './index.css'; + +import { createRoot } from "react-dom/client"; + +const root = createRoot(document.body); + +export default function Frontend() { + return

Hello, world!

; +} + +root.render(); +``` + +Then, run index.ts + +```sh +bun --hot ./index.ts +``` + +For more information, read the Bun API docs in `node_modules/bun-types/docs/**.md`. diff --git a/INSTALLATION.md b/INSTALLATION.md deleted file mode 100644 index 639b73f..0000000 --- a/INSTALLATION.md +++ /dev/null @@ -1,107 +0,0 @@ -# Quick Installation Guide - -## ๐Ÿš€ Install the Usage Statistics Tracker - -### Basic Installation - -Add this to your GitHub Actions workflow: - -```yaml -- name: Usage Statistics Tracker - uses: LukeHagar/usage-statistics@v1 - with: - npm-packages: 'lodash,axios' - github-repositories: 'microsoft/vscode,facebook/react' - pypi-packages: 'requests,numpy' - homebrew-formulas: 'git,node' - powershell-modules: 'PowerShellGet,PSReadLine' - postman-collections: '12345,67890' - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' - json-output-path: 'stats.json' - update-readme: 'true' - github-token: ${{ secrets.GITHUB_TOKEN }} -``` - -### Complete Example Workflow - -```yaml -name: Update Usage Statistics - -on: - schedule: - - cron: '0 0 * * *' # Daily at midnight - workflow_dispatch: - -jobs: - update-stats: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Usage Statistics Tracker - uses: LukeHagar/usage-statistics@v1 - with: - npm-packages: 'lodash,axios' - github-repositories: 'microsoft/vscode,facebook/react' - pypi-packages: 'requests,numpy' - homebrew-formulas: 'git,node' - powershell-modules: 'PowerShellGet,PSReadLine' - postman-collections: '12345,67890' - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' - json-output-path: 'stats.json' - csv-output-path: 'stats.csv' - report-output-path: 'docs/usage-report.md' - update-readme: 'true' - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Commit and push changes - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git add stats.json stats.csv docs/usage-report.md README.md - git commit -m "chore: update usage statistics [skip ci]" || echo "No changes to commit" - git push -``` - -### README Integration - -Add these markers to your README.md for automatic updates: - -```markdown - -## ๐Ÿ“Š Usage Statistics - -Last updated: 2025-07-29T18:53:52.619Z - -### Summary -- **Total Downloads**: 414,533 -- **Unique Packages**: 8 -- **Platforms Tracked**: npm, pypi, homebrew, go - -### Platform Totals -- **HOMEBREW**: 380,163 downloads (2 packages) -- **NPM**: 34,311 downloads (2 packages) -- **GO**: 33 downloads (2 packages) - -### Top Packages -1. **node** (homebrew) - 226,882 downloads -2. **git** (homebrew) - 153,281 downloads -3. **axios** (npm) - 18,397 downloads -4. **lodash** (npm) - 15,914 downloads -5. **github.com/go-chi/chi** (go) - 33 downloads - -``` - -## ๐Ÿ“š Documentation - -- **Full Documentation**: [README.md](README.md) -- **Examples**: [examples/basic-usage.yml](examples/basic-usage.yml) -- **Repository**: [https://github.com/LukeHagar/usage-statistics](https://github.com/LukeHagar/usage-statistics) - -## ๐Ÿค Support - -- **Issues**: [GitHub Issues](https://github.com/LukeHagar/usage-statistics/issues) -- **Discussions**: [GitHub Discussions](https://github.com/LukeHagar/usage-statistics/discussions) -- **Documentation**: [README.md](README.md) \ No newline at end of file diff --git a/PUBLISHING.md b/PUBLISHING.md deleted file mode 100644 index 4381581..0000000 --- a/PUBLISHING.md +++ /dev/null @@ -1,260 +0,0 @@ -# Publishing to GitHub Marketplace - -This guide walks you through the process of publishing the Usage Statistics Tracker to the GitHub Marketplace. - -## Prerequisites - -1. **GitHub Account**: You need a GitHub account with a verified email -2. **Repository**: This repository should be public -3. **GitHub Actions**: Actions must be enabled on your repository - -## Step 1: Prepare Your Repository - -### 1.1 Build the Action - -```bash -# Install dependencies -bun install - -# Build the action for distribution -bun run action:build - -# Verify the build -ls -la dist/ -``` - -### 1.2 Commit the Built Files - -```bash -# Add the built files -git add dist/ - -# Commit with a descriptive message -git commit -m "build: add action distribution files for v1.0.0" - -# Push to main branch -git push origin main -``` - -### 1.3 Create a Release - -```bash -# Create and push a tag -git tag v1.0.0 -git push origin v1.0.0 - -# Or create a release via GitHub UI: -# 1. Go to your repository -# 2. Click "Releases" on the right -# 3. Click "Create a new release" -# 4. Choose the tag v1.0.0 -# 5. Add release notes -# 6. Publish release -``` - -## Step 2: Publish to Marketplace - -### 2.1 Access the Publishing Interface - -1. Go to your repository on GitHub -2. Click on the **Actions** tab -3. Look for a banner that says "Publish this Action to the GitHub Marketplace" -4. Click **Publish this Action** - -### 2.2 Fill in Action Details - -#### Basic Information -- **Action name**: `usage-statistics-tracker` -- **Description**: `Track download statistics across multiple platforms (NPM, GitHub, PyPI, Homebrew, PowerShell, Postman, Go)` -- **Repository**: `LukeHagar/usage-statistics` -- **Category**: Choose `Data` or `Utilities` -- **Icon**: Upload a relevant icon (512x512px PNG recommended) -- **Color**: Choose a brand color (e.g., `#0366d6` for blue) - -#### Detailed Description -Use the content from the main README.md file, focusing on: -- Features and capabilities -- Usage examples -- Configuration options -- Supported platforms - -#### Keywords -Add relevant keywords: -- `statistics` -- `analytics` -- `downloads` -- `npm` -- `github` -- `pypi` -- `homebrew` -- `powershell` -- `postman` -- `go` -- `tracking` -- `usage` - -### 2.3 Marketplace Listing - -#### Action Name -- **Marketplace name**: `Usage Statistics Tracker` -- **Description**: `Comprehensive GitHub Action for tracking download statistics across multiple platforms with configurable outputs and README integration` -- **Repository**: `LukeHagar/usage-statistics` - -#### Categories -- **Primary category**: `Data` -- **Secondary category**: `Utilities` - -#### Pricing -- **Pricing model**: Free -- **License**: MIT - -## Step 3: Version Management - -### 3.1 Semantic Versioning - -Follow semantic versioning for releases: -- **Major** (1.0.0): Breaking changes -- **Minor** (1.1.0): New features, backward compatible -- **Patch** (1.0.1): Bug fixes - -### 3.2 Release Process - -For each new version: - -```bash -# 1. Update version in package.json -# 2. Update CHANGELOG.md -# 3. Build the action -bun run action:build - -# 4. Commit changes -git add . -git commit -m "feat: release v1.1.0" - -# 5. Create and push tag -git tag v1.1.0 -git push origin v1.1.0 - -# 6. Create GitHub release -# Go to GitHub and create a release for the new tag -``` - -### 3.3 Changelog - -Maintain a `CHANGELOG.md` file: - -```markdown -# Changelog - -## [1.1.0] - 2025-01-XX -### Added -- New platform support for X -- Enhanced error handling -- Additional configuration options - -### Changed -- Improved performance for large datasets -- Updated dependencies - -### Fixed -- Bug fix for Y platform -- Resolved issue with Z feature - -## [1.0.0] - 2025-01-XX -### Added -- Initial release -- Support for NPM, GitHub, PyPI, Homebrew, PowerShell, Postman, Go -- Configurable outputs (JSON, CSV, human-readable) -- README integration -- Preview mode -``` - -## Step 4: Marketing and Documentation - -### 4.1 README Optimization - -Ensure your README includes: -- Clear installation instructions -- Multiple usage examples -- Configuration documentation -- Troubleshooting section -- Contributing guidelines - -### 4.2 Examples Repository - -Consider creating a separate repository with examples: -- Basic usage workflows -- Advanced configurations -- Custom integrations -- Troubleshooting guides - -### 4.3 Social Media - -Promote your action on: -- GitHub Discussions -- Reddit (r/github, r/devops) -- Twitter/X with relevant hashtags -- LinkedIn for professional audience - -## Step 5: Maintenance - -### 5.1 Monitoring - -- Monitor GitHub Issues for user feedback -- Track download statistics -- Respond to questions and bug reports -- Update documentation as needed - -### 5.2 Updates - -Regular maintenance tasks: -- Update dependencies -- Fix security vulnerabilities -- Add new platform support -- Improve performance -- Enhance documentation - -### 5.3 Community Engagement - -- Respond to issues promptly -- Help users with configuration -- Accept and review pull requests -- Maintain a welcoming community - -## Troubleshooting - -### Common Issues - -1. **Action not found**: Ensure the action is properly built and tagged -2. **Build failures**: Check that all dependencies are included -3. **Permission issues**: Verify GitHub token permissions -4. **Rate limiting**: Implement proper rate limiting in the action - -### Support - -- GitHub Issues: For bug reports and feature requests -- GitHub Discussions: For questions and community support -- Documentation: Comprehensive README and examples - -## Success Metrics - -Track these metrics to measure success: -- **Downloads**: Number of action downloads -- **Stars**: Repository stars -- **Forks**: Repository forks -- **Issues**: User engagement and feedback -- **Usage**: Number of repositories using the action - -## Legal Considerations - -- **License**: MIT License (included) -- **Privacy**: No personal data collection -- **Terms of Service**: Follow GitHub's terms -- **Attribution**: Credit original authors if applicable - -## Resources - -- [GitHub Actions Documentation](https://docs.github.com/en/actions) -- [GitHub Marketplace Guidelines](https://docs.github.com/en/developers/github-marketplace) -- [Action Metadata Syntax](https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions) -- [Publishing Actions](https://docs.github.com/en/actions/creating-actions/publishing-actions-in-github-marketplace) \ No newline at end of file diff --git a/README.md b/README.md index 40edb95..3365745 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,99 @@ # Usage Statistics Tracker -A comprehensive GitHub Action for tracking download statistics across multiple platforms (NPM, GitHub, PyPI, Homebrew, PowerShell, Postman, Go) with configurable outputs and README integration. +A comprehensive GitHub Action for tracking download statistics across multiple platforms (NPM, GitHub, PyPI, Homebrew, PowerShell) with configurable outputs and README integration. ## ๐Ÿš€ Features -- ๐Ÿ“Š **Multi-Platform Tracking**: NPM, GitHub, PyPI, Homebrew, PowerShell, Postman, Go +- ๐Ÿ“Š **Multi-Platform Tracking**: NPM, GitHub, PyPI, Homebrew, PowerShell - ๐ŸŽญ **Preview Mode**: Test with mock data without external API calls - ๐Ÿ“„ **Flexible Outputs**: JSON, CSV, and human-readable reports - ๐Ÿ“ **README Integration**: Auto-update README with statistics - โš™๏ธ **Configurable**: Custom configurations via JSON or preset modes - ๐Ÿ”„ **GitHub Actions Ready**: Built for CI/CD workflows - ๐Ÿงช **Comprehensive Testing**: Full test suite with Bun +- ๐Ÿ **Enhanced PyPI Integration**: Uses PyPI Stats API for comprehensive download statistics +- ๐Ÿ“ฆ **Enhanced NPM Integration**: Bundle size analysis and dependency metrics +- ๐Ÿ™ **Enhanced GitHub Integration**: Traffic insights and release downloads +- ๐Ÿ’ป **Enhanced PowerShell Integration**: Module analytics and function counts +- ๐Ÿ”ง **Enhanced Go Integration**: Version analysis and GitHub integration + +## ๐Ÿ“ฆ Enhanced Platform Integrations + +### ๐Ÿ PyPI Statistics +Uses an external PyPI Stats API (via BigQuery replication) for comprehensive download statistics: +- **Download Metrics**: Monthly, weekly, daily download counts +- **Python Version Breakdown**: Downloads by Python version adoption +- **Platform Analysis**: Downloads by OS (Windows, Linux, macOS) +- **Trend Analysis**: Growth rates and time series data +- **API Integration**: Serves precomputed and on-demand results from a BigQuery-backed service + +### ๐Ÿ“ฆ NPM Statistics +Enhanced with bundle analysis and dependency metrics: +- **Download Statistics**: Daily, weekly, monthly, and yearly downloads +- **Bundle Analysis**: Bundle size, gzip size, dependency count +- **Dependency Metrics**: Total dependencies, dev dependencies, peer dependencies +- **Package Analytics**: Version count, package age, maintainer count + +### ๐Ÿ™ GitHub Statistics +Comprehensive repository analytics with traffic insights: +- **Repository Metrics**: Stars, forks, watchers, open issues +- **Traffic Analytics**: Views, unique visitors, clone statistics +- **Release Downloads**: Total and latest release download counts +- **Activity Metrics**: Repository age, last activity, release count + +### ๐Ÿ’ป PowerShell Statistics +Enhanced module analytics with detailed download tracking: +- **Download Metrics**: Total downloads across all versions with version-by-version breakdown +- **Version Analysis**: Latest version downloads, version count, release dates +- **Combined Charts**: Multi-module charts with different colors for each module +- **Time Series Data**: Downloads over time and cumulative download trends +- **Top Versions**: Bar charts showing top performing versions across all modules +- **Metadata**: Author, company, tags, package size, PowerShell version requirements + + ## ๐Ÿ“ฆ Installation +### PyPI Statistics Source + +The PyPI collector now uses an external PyPI Stats API instead of querying BigQuery directly. + +#### Option 1: Service Account (Recommended for GitHub Actions) + +1. **Create a Google Cloud Project** (if you don't have one) +2. **Enable the BigQuery API** in your Google Cloud Console +3. **Create a Service Account**: + - Go to IAM & Admin > Service Accounts + - Click "Create Service Account" + - Give it a name like "pypi-stats-collector" + - Grant "BigQuery User" role +4. **Create and download a JSON key**: + - Click on your service account + - Go to "Keys" tab + - Click "Add Key" > "Create new key" > "JSON" + - Download the JSON file +5. **Add the service account key as a GitHub secret**: + - In your GitHub repository, go to Settings > Secrets and variables > Actions + - Create a new secret named `GOOGLE_CLOUD_CREDENTIALS` + - Paste the entire contents of the downloaded JSON file + +#### Option 2: Application Default Credentials (Local Development) + +For local development, you can use Application Default Credentials: + +```bash +# Install Google Cloud CLI +curl https://sdk.cloud.google.com | bash +exec -l $SHELL + +# Authenticate +gcloud auth application-default login +``` + +#### Environment Variables + +- `PYPI_STATS_BASE_URL` (optional): Base URL for the PyPI Stats API. Default is `https://pypistats.dev`. + ### As a GitHub Action ```yaml @@ -26,12 +106,14 @@ A comprehensive GitHub Action for tracking download statistics across multiple p homebrew-formulas: 'git,node' powershell-modules: 'PowerShellGet,PSReadLine' postman-collections: '12345,67890' - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' + # go-modules removed json-output-path: 'stats.json' csv-output-path: 'stats.csv' report-output-path: 'report.md' update-readme: 'true' github-token: ${{ secrets.GITHUB_TOKEN }} + # env: + # PYPI_STATS_BASE_URL: https://your-host ``` ### Local Development @@ -50,6 +132,51 @@ bun preview bun test ``` + + +## ๐Ÿ“Š Usage Statistics + +Last updated: 2025-07-31T16:09:10.951Z + +**Summary:** +- **Total Sources**: 26 +- **Platforms**: npm, github, pypi, powershell, go +- **Total Monthly Downloads**: 4640.4M +- **Total Stars**: 1103.1K +- **Total Forks**: 234.0K + +## ๐Ÿ“ฆ Package Statistics + +| Platform | Name | Downloads (Monthly) | Downloads (Total) | Stars | Forks | Enhanced Metrics | +|---|---|---|---|---|---|---| +| NPM | express | 196.7M | 1884.3M | โ€” | โ€” | Bundle: 568.4KB, Age: 5327 days, Versions: 283 | +| NPM | react | 179.1M | 1632.6M | โ€” | โ€” | Bundle: 7.4KB, Age: 5026 days, Versions: 2423 | +| NPM | lodash | 347.7M | 3194.1M | โ€” | โ€” | Bundle: 69.8KB, Age: 4846 days, Versions: 114 | +| NPM | axios | 286.2M | 2968.9M | โ€” | โ€” | Bundle: 36.0KB, Age: 3988 days, Versions: 116 | +| NPM | moment | 108.3M | 1154.0M | โ€” | โ€” | Bundle: 294.9KB, Age: 5035 days, Versions: 76 | +| NPM | vue | 28.8M | 304.2M | โ€” | โ€” | Bundle: 126.0KB, Age: 4254 days, Versions: 538 | +| GitHub | facebook/react | โ€” | โ€” | 237.7K | 49.0K | Watchers: 237.7K, Releases: 30 | +| GitHub | microsoft/vscode | โ€” | โ€” | 175.2K | 34.1K | Watchers: 175.2K, Releases: 30 | +| GitHub | vercel/next.js | โ€” | โ€” | 133.5K | 29.0K | Watchers: 133.5K, Releases: 30 | +| GitHub | vuejs/vue | โ€” | โ€” | 209.2K | 33.7K | Watchers: 209.2K, Releases: 30 | +| GitHub | tensorflow/tensorflow | โ€” | โ€” | 191.0K | 74.8K | Watchers: 191.0K, Releases: 30 | +| PyPI | requests | 1423.9M | 716.0M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | numpy | 899.7M | 451.0M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | django | 48.9M | 24.5M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | flask | 226.5M | 113.2M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | pandas | 709.0M | 356.4M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | matplotlib | 185.3M | 92.8M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PowerShell | PowerShellGet | โ€” | โ€” | โ€” | โ€” | Versions: 81 | +| PowerShell | PSReadLine | โ€” | โ€” | โ€” | โ€” | Versions: 46 | +| PowerShell | Pester | โ€” | โ€” | โ€” | โ€” | Versions: 100 | +| PowerShell | PSScriptAnalyzer | โ€” | โ€” | โ€” | โ€” | Versions: 37 | +| PowerShell | dbatools | โ€” | โ€” | โ€” | โ€” | Versions: 100 | + + + + + + ## ๐Ÿ”ง Configuration ### Input Parameters @@ -62,7 +189,7 @@ bun test | `homebrew-formulas` | Comma-separated list of Homebrew formulas | No | (empty) | | `powershell-modules` | Comma-separated list of PowerShell modules | No | (empty) | | `postman-collections` | Comma-separated list of Postman collection IDs | No | (empty) | -| `go-modules` | Comma-separated list of Go modules | No | (empty) | + | `json-output-path` | Path for JSON output | No | `stats.json` | | `csv-output-path` | Path for CSV output | No | (empty) | | `report-output-path` | Path for human-readable report | No | (empty) | @@ -102,7 +229,9 @@ bun test homebrew-formulas: 'git,node' powershell-modules: 'PowerShellGet,PSReadLine' postman-collections: '12345,67890' - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' + # go-modules removed + # env: + # PYPI_STATS_BASE_URL: https://your-host ``` ### Outputs @@ -145,10 +274,12 @@ jobs: homebrew-formulas: 'git,node' powershell-modules: 'PowerShellGet,PSReadLine' postman-collections: '12345,67890' - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' + # go-modules removed json-output-path: 'stats.json' update-readme: 'true' github-token: ${{ secrets.GITHUB_TOKEN }} + env: + GOOGLE_CLOUD_CREDENTIALS: ${{ secrets.GOOGLE_CLOUD_CREDENTIALS }} - name: Commit and push changes run: | @@ -171,7 +302,7 @@ jobs: homebrew-formulas: 'git,node' powershell-modules: 'PowerShellGet,PSReadLine' postman-collections: '12345,67890' - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' + # go-modules removed json-output-path: 'data/stats.json' csv-output-path: 'data/stats.csv' report-output-path: 'docs/usage-report.md' @@ -180,6 +311,8 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} postman-api-key: ${{ secrets.POSTMAN_API_KEY }} commit-message: 'feat: update usage statistics with detailed report' + env: + GOOGLE_CLOUD_CREDENTIALS: ${{ secrets.GOOGLE_CLOUD_CREDENTIALS }} ``` ### Preview Mode for Testing @@ -206,7 +339,7 @@ jobs: github-repositories: 'microsoft/vscode,facebook/react' powershell-modules: 'PowerShellGet' postman-collections: '12345' - go-modules: 'github.com/gin-gonic/gin' + # go-modules removed json-output-path: 'stats.json' - name: Use Statistics Data @@ -222,7 +355,7 @@ jobs: To enable automatic README updates, add these markers to your README.md: ```markdown - + ## ๐Ÿ“Š Usage Statistics Last updated: 2025-07-29T18:53:52.619Z @@ -243,7 +376,7 @@ Last updated: 2025-07-29T18:53:52.619Z 3. **axios** (npm) - 18,397 downloads 4. **lodash** (npm) - 15,914 downloads 5. **github.com/go-chi/chi** (go) - 33 downloads - + ``` ## ๐Ÿ”ง Development @@ -346,7 +479,7 @@ git push origin v1.1.0 - **Homebrew**: Formula installation statistics - **PowerShell**: Module download statistics - **Postman**: Collection fork/download statistics -- **Go**: Module proxy statistics + ## ๐Ÿค Contributing diff --git a/Test-Readme.md b/Test-Readme.md new file mode 100644 index 0000000..5d85532 --- /dev/null +++ b/Test-Readme.md @@ -0,0 +1,134 @@ + +# Usage Statistics + +Last updated: 8/14/2025, 9:11:29 PM + +Below are stats from artifacts tracked across NPM, GitHub, PyPI and PowerShell. + +### NPM (JavaScript/TypeScript): + +| Package | Downloads | Monthly Downloads | Weekly Downloads | Daily Downloads | +| --- | --- | --- | --- | --- | +| sailpoint-api-client | 16,740 | 1,308 | 272 | 39 | +| **Total** | **16,740** | **1,308** | **272** | **39** | | | | | + +![./charts/npm/sailpoint-api-client-new-downloads-by-month.svg](./charts/npm/sailpoint-api-client-new-downloads-by-month.svg) +![./charts/npm/sailpoint-api-client-cumulative-downloads.svg](./charts/npm/sailpoint-api-client-cumulative-downloads.svg) + +### GitHub: + +| Repository | Stars | Forks | Watchers | Open Issues | Closed Issues | Total Issues | Release Downloads | Releases | Latest Release | Language | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| sailpoint-oss/sailpoint-cli | 35 | 24 | 9 | 5 | 35 | 40 | 10,013 | 31 | 2.2.5 | Go | +| **Total** | **35** | **24** | **9** | **5** | **35** | **40** | **10,013** | **31** | | | + +#### Repository Details: + +**sailpoint-oss/sailpoint-cli**: +- Last Activity: 34 days ago +- Repository Age: 1,120 days +- Release Count: 31 +- Total Release Downloads: 10,013 +- Latest Release: 2.2.5 +- Latest Release Downloads: 746 +- Views: 484 +- Unique Visitors: 160 +- Clones: 18 + + + +![./charts/github/sailpoint-oss-sailpoint-cli-release-downloads.svg](./charts/github/sailpoint-oss-sailpoint-cli-release-downloads.svg) +![./charts/github/sailpoint-oss-sailpoint-cli-cumulative-release-downloads.svg](./charts/github/sailpoint-oss-sailpoint-cli-cumulative-release-downloads.svg) +![./charts/github/sailpoint-oss-sailpoint-cli-top-release-downloads.svg](./charts/github/sailpoint-oss-sailpoint-cli-top-release-downloads.svg) + +### PyPI (Python): + +| Package | Total Downloads | Monthly Downloads | Weekly Downloads | Daily Downloads | Version | +| --- | --- | --- | --- | --- | --- | +| sailpoint | 21,614 | 10,108 | 2,894 | 468 | 1.3.8 | +| **Total** | **21,614** | **10,108** | **2,894** | **468** | | | + +#### Package Details: + +**sailpoint**: +- Version: 1.3.8 +- Released: 2025-07-29 +- Popular system: Linux +- Popular installer: pip +- Releases: 29 +- OS Usage Breakdown + - other: 1782 + - Darwin: 67 + - Windows: 87 + - Linux: 9570 +- Python Version Breakdown + - python2: 1 + - python3: 9690 + + +![./charts/pypi/sailpoint-pypi-overall.svg](./charts/pypi/sailpoint-pypi-overall.svg) +![./charts/pypi/sailpoint-pypi-python-major.svg](./charts/pypi/sailpoint-pypi-python-major.svg) +![./charts/pypi/sailpoint-pypi-python-minor.svg](./charts/pypi/sailpoint-pypi-python-minor.svg) +![./charts/pypi/sailpoint-pypi-installer.svg](./charts/pypi/sailpoint-pypi-installer.svg) +![./charts/pypi/sailpoint-pypi-system.svg](./charts/pypi/sailpoint-pypi-system.svg) + +### PowerShell: + +| Module | Total Downloads | Latest Version | Version Downloads | Versions | Last Updated | +| --- | --- | --- | --- | --- | --- | +| PSSailPoint | 20,447 | 1.6.6 | 111 | 32 | 8/14/2025 | +| PSSailpoint.V3 | 11,721 | 1.6.6 | 111 | 19 | 8/14/2025 | +| PSSailpoint.Beta | 12,049 | 1.6.6 | 110 | 19 | 8/14/2025 | +| PSSailpoint.V2024 | 11,716 | 1.6.6 | 106 | 19 | 8/14/2025 | +| PSSailpoint.V2025 | 1,009 | 1.6.6 | 102 | 8 | 8/14/2025 | +| **Total** | **56,942** | | | **97** | | + +#### PowerShell Module Details: + +**PSSailPoint**: +- Total Downloads: 20,447 +- Latest Version: 1.6.6 +- Latest Version Downloads: 111 +- Version Count: 32 +- Last Updated: 8/14/2025 +- Package Size: 13618 KB + +**PSSailpoint.V3**: +- Total Downloads: 11,721 +- Latest Version: 1.6.6 +- Latest Version Downloads: 111 +- Version Count: 19 +- Last Updated: 8/14/2025 +- Package Size: 1023 KB + +**PSSailpoint.Beta**: +- Total Downloads: 12,049 +- Latest Version: 1.6.6 +- Latest Version Downloads: 110 +- Version Count: 19 +- Last Updated: 8/14/2025 +- Package Size: 1526 KB + +**PSSailpoint.V2024**: +- Total Downloads: 11,716 +- Latest Version: 1.6.6 +- Latest Version Downloads: 106 +- Version Count: 19 +- Last Updated: 8/14/2025 +- Package Size: 1881 KB + +**PSSailpoint.V2025**: +- Total Downloads: 1,009 +- Latest Version: 1.6.6 +- Latest Version Downloads: 102 +- Version Count: 8 +- Last Updated: 8/14/2025 +- Package Size: 1923 KB + + + +![./charts/powershell/powershell-combined-downloads.svg](./charts/powershell/powershell-combined-downloads.svg) +![./charts/powershell/powershell-cumulative-downloads.svg](./charts/powershell/powershell-cumulative-downloads.svg) + + + \ No newline at end of file diff --git a/action.yml b/action.yml index 7755a2b..d291bee 100644 --- a/action.yml +++ b/action.yml @@ -1,5 +1,5 @@ name: 'Usage Statistics Tracker' -description: 'Track download statistics across multiple platforms (NPM, GitHub, PyPI, Homebrew, PowerShell, Postman, Go)' +description: 'Track download statistics across multiple platforms (NPM, GitHub, PyPI, PowerShell)' author: 'LukeHagar' inputs: @@ -21,45 +21,23 @@ inputs: required: false default: '' - # Homebrew Configuration - homebrew-formulas: - description: 'Comma-separated list of Homebrew formulas to track' - required: false - default: '' - # PowerShell Configuration powershell-modules: description: 'Comma-separated list of PowerShell modules to track' required: false default: '' - # Postman Configuration - postman-collections: - description: 'Comma-separated list of Postman collection IDs to track' - required: false - default: '' - - # Go Configuration - go-modules: - description: 'Comma-separated list of Go modules to track' - required: false - default: '' + # Go tracking removed # Output paths json-output-path: description: 'Path for JSON output file' required: false - default: 'stats.json' - - csv-output-path: - description: 'Path for CSV output file' + default: 'stats.json' + readme-path: + description: 'Path to README file to update' required: false - default: '' - - report-output-path: - description: 'Path for human-readable report file' - required: false - default: '' + default: 'README.md' # README update update-readme: @@ -67,50 +45,22 @@ inputs: required: false default: 'true' - readme-path: - description: 'Path to README file to update' - required: false - default: 'README.md' - # GitHub integration github-token: description: 'GitHub token for API access and commits' required: false default: '${{ github.token }}' - # Postman integration - postman-api-key: - description: 'Postman API key for collection statistics' - required: false - # Commit settings commit-message: description: 'Commit message for changes' required: false - default: 'chore: update usage statistics [skip ci]' - - # Preview mode - preview-mode: - description: 'Run in preview mode with mock data (no external API calls)' - required: false - default: 'false' + default: 'chore: update usage statistics' outputs: json-output: description: 'Path to the generated JSON file' - csv-output: - description: 'Path to the generated CSV file' - - report-output: - description: 'Path to the generated report file' - - total-downloads: - description: 'Total downloads across all platforms' - - unique-packages: - description: 'Number of unique packages tracked' - platforms-tracked: description: 'Comma-separated list of platforms tracked' diff --git a/bun.lock b/bun.lock index e53e70f..24a85ea 100644 --- a/bun.lock +++ b/bun.lock @@ -5,11 +5,20 @@ "name": "usage-statistics", "dependencies": { "@actions/core": "1.11.1", + "@actions/github": "6.0.1", + "@google-cloud/bigquery": "^7.0.0", + "@octokit/graphql": "^7.0.0", "@octokit/plugin-retry": "^7.0.0", "@octokit/plugin-throttling": "^7.0.0", "@octokit/rest": "22.0.0", + "chart.js": "^4.5.0", + "chartjs-adapter-moment": "1.0.1", + "fast-xml-parser": "5.2.5", + "moment": "2.30.1", + "skia-canvas": "^2.0.2", }, "devDependencies": { + "@types/bun": "latest", "@types/node": "^20.0.0", "bun-types": "1.2.19", "typescript": "^5.0.0", @@ -21,54 +30,336 @@ "@actions/exec": ["@actions/exec@1.1.1", "", { "dependencies": { "@actions/io": "^1.0.1" } }, "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w=="], + "@actions/github": ["@actions/github@6.0.1", "", { "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", "@octokit/plugin-paginate-rest": "^9.2.2", "@octokit/plugin-rest-endpoint-methods": "^10.4.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "undici": "^5.28.5" } }, "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw=="], + "@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="], "@actions/io": ["@actions/io@1.1.3", "", {}, "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q=="], "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], - "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + "@google-cloud/bigquery": ["@google-cloud/bigquery@7.9.4", "", { "dependencies": { "@google-cloud/common": "^5.0.0", "@google-cloud/paginator": "^5.0.2", "@google-cloud/precise-date": "^4.0.0", "@google-cloud/promisify": "4.0.0", "arrify": "^2.0.1", "big.js": "^6.0.0", "duplexify": "^4.0.0", "extend": "^3.0.2", "is": "^3.3.0", "stream-events": "^1.0.5", "uuid": "^9.0.0" } }, "sha512-C7jeI+9lnCDYK3cRDujcBsPgiwshWKn/f0BiaJmClplfyosCLfWE83iGQ0eKH113UZzjR9c9q7aZQg0nU388sw=="], - "@octokit/core": ["@octokit/core@7.0.3", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="], + "@google-cloud/common": ["@google-cloud/common@5.0.2", "", { "dependencies": { "@google-cloud/projectify": "^4.0.0", "@google-cloud/promisify": "^4.0.0", "arrify": "^2.0.1", "duplexify": "^4.1.1", "extend": "^3.0.2", "google-auth-library": "^9.0.0", "html-entities": "^2.5.2", "retry-request": "^7.0.0", "teeny-request": "^9.0.0" } }, "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA=="], - "@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], + "@google-cloud/paginator": ["@google-cloud/paginator@5.0.2", "", { "dependencies": { "arrify": "^2.0.0", "extend": "^3.0.2" } }, "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg=="], - "@octokit/graphql": ["@octokit/graphql@9.0.1", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="], + "@google-cloud/precise-date": ["@google-cloud/precise-date@4.0.0", "", {}, "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA=="], - "@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], + "@google-cloud/projectify": ["@google-cloud/projectify@4.0.0", "", {}, "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA=="], - "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@13.1.1", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw=="], + "@google-cloud/promisify": ["@google-cloud/promisify@4.0.0", "", {}, "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g=="], + + "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], + + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@kurkle/color": ["@kurkle/color@0.3.4", "", {}, "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w=="], + + "@mapbox/node-pre-gyp": ["@mapbox/node-pre-gyp@1.0.11", "", { "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", "make-dir": "^3.1.0", "node-fetch": "^2.6.7", "nopt": "^5.0.0", "npmlog": "^5.0.1", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.11" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" } }, "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ=="], + + "@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="], + + "@octokit/core": ["@octokit/core@5.2.2", "", { "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg=="], + + "@octokit/endpoint": ["@octokit/endpoint@9.0.6", "", { "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw=="], + + "@octokit/graphql": ["@octokit/graphql@7.1.1", "", { "dependencies": { "@octokit/request": "^8.4.1", "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" } }, "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g=="], + + "@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], + + "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@9.2.2", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ=="], "@octokit/plugin-request-log": ["@octokit/plugin-request-log@6.0.0", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q=="], - "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@16.0.0", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g=="], + "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@10.4.1", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg=="], "@octokit/plugin-retry": ["@octokit/plugin-retry@7.2.1", "", { "dependencies": { "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A=="], "@octokit/plugin-throttling": ["@octokit/plugin-throttling@7.0.0", "", { "dependencies": { "@octokit/types": "^11.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^5.0.0" } }, "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew=="], - "@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], + "@octokit/request": ["@octokit/request@8.4.1", "", { "dependencies": { "@octokit/endpoint": "^9.0.6", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw=="], - "@octokit/request-error": ["@octokit/request-error@6.1.8", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ=="], + "@octokit/request-error": ["@octokit/request-error@5.1.1", "", { "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g=="], "@octokit/rest": ["@octokit/rest@22.0.0", "", { "dependencies": { "@octokit/core": "^7.0.2", "@octokit/plugin-paginate-rest": "^13.0.1", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-rest-endpoint-methods": "^16.0.0" } }, "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA=="], - "@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], + "@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], + + "@tootallnate/once": ["@tootallnate/once@2.0.0", "", {}, "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="], + + "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + + "@types/caseless": ["@types/caseless@0.12.5", "", {}, "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg=="], "@types/node": ["@types/node@20.19.9", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw=="], "@types/react": ["@types/react@19.1.9", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA=="], - "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + "@types/request": ["@types/request@2.48.13", "", { "dependencies": { "@types/caseless": "*", "@types/node": "*", "@types/tough-cookie": "*", "form-data": "^2.5.5" } }, "sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg=="], + + "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], + + "abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], + + "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + + "aproba": ["aproba@2.1.0", "", {}, "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew=="], + + "are-we-there-yet": ["are-we-there-yet@2.0.0", "", { "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" } }, "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw=="], + + "arrify": ["arrify@2.0.1", "", {}, "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="], + + "big.js": ["big.js@6.2.2", "", {}, "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ=="], + + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], + "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "cargo-cp-artifact": ["cargo-cp-artifact@0.1.9", "", { "bin": { "cargo-cp-artifact": "bin/cargo-cp-artifact.js" } }, "sha512-6F+UYzTaGB+awsTXg0uSJA1/b/B3DDJzpKVRu0UmyI7DmNeaAl2RFHuTGIN6fEgpadRxoXGb7gbC1xo4C3IdyA=="], + + "chart.js": ["chart.js@4.5.0", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ=="], + + "chartjs-adapter-moment": ["chartjs-adapter-moment@1.0.1", "", { "peerDependencies": { "chart.js": ">=3.0.0", "moment": "^2.10.2" } }, "sha512-Uz+nTX/GxocuqXpGylxK19YG4R3OSVf8326D+HwSTsNw1LgzyIGRo+Qujwro1wy6X+soNSnfj5t2vZ+r6EaDmA=="], + + "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "console-control-strings": ["console-control-strings@1.1.0", "", {}, "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "delegates": ["delegates@1.0.0", "", {}, "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="], + + "deprecation": ["deprecation@2.3.1", "", {}, "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "duplexify": ["duplexify@4.1.3", "", { "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.2" } }, "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], + "fast-xml-parser": ["fast-xml-parser@5.2.5", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "form-data": ["form-data@2.5.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" } }, "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A=="], + + "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "gauge": ["gauge@3.0.2", "", { "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.1", "object-assign": "^4.1.1", "signal-exit": "^3.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.2" } }, "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q=="], + + "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], + + "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "glob": ["glob@11.0.3", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA=="], + + "google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="], + + "google-logging-utils": ["google-logging-utils@0.0.2", "", {}, "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "has-unicode": ["has-unicode@2.0.1", "", {}, "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "html-entities": ["html-entities@2.6.0", "", {}, "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ=="], + + "http-proxy-agent": ["http-proxy-agent@5.0.0", "", { "dependencies": { "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w=="], + + "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "is": ["is@3.3.2", "", {}, "sha512-a2xr4E3s1PjDS8ORcGgXpWx6V+liNs+O3JRD2mb9aeugD7rtkkZ0zgLdYgw0tWsKhsdiezGYptSiMlVazCBTuQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jackspeak": ["jackspeak@4.1.1", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ=="], + + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + + "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], + + "jws": ["jws@4.0.0", "", { "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg=="], + + "lru-cache": ["lru-cache@11.1.0", "", {}, "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A=="], + + "make-dir": ["make-dir@3.1.0", "", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + + "minimatch": ["minimatch@10.0.3", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], + + "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + + "moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="], + + "npmlog": ["npmlog@5.0.1", "", { "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", "gauge": "^3.0.0", "set-blocking": "^2.0.0" } }, "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "parenthesis": ["parenthesis@3.1.8", "", {}, "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="], + + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-scurry": ["path-scurry@2.0.0", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg=="], + + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "retry-request": ["retry-request@7.0.2", "", { "dependencies": { "@types/request": "^2.48.8", "extend": "^3.0.2", "teeny-request": "^9.0.0" } }, "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w=="], + + "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], + + "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], + + "skia-canvas": ["skia-canvas@2.0.2", "", { "dependencies": { "@mapbox/node-pre-gyp": "^1.0.11", "cargo-cp-artifact": "^0.1", "glob": "^11.0.0", "path-browserify": "^1.0.1", "simple-get": "^4.0.1", "string-split-by": "^1.0.0" } }, "sha512-LUa7P41NRNoCWhvPyX4aKP5SpeWDXmWYbonCt4FfkEdTuSssxpvYiK5Y69B0MudDR6LVNt9RBwpZfuCRpVSbbw=="], + + "stream-events": ["stream-events@1.0.5", "", { "dependencies": { "stubs": "^3.0.0" } }, "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg=="], + + "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="], + + "string-split-by": ["string-split-by@1.0.0", "", { "dependencies": { "parenthesis": "^3.1.5" } }, "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strnum": ["strnum@2.1.1", "", {}, "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw=="], + + "stubs": ["stubs@3.0.0", "", {}, "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw=="], + + "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], + + "teeny-request": ["teeny-request@9.0.0", "", { "dependencies": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.9", "stream-events": "^1.0.5", "uuid": "^9.0.0" } }, "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g=="], + + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], @@ -77,14 +368,148 @@ "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + "universal-user-agent": ["universal-user-agent@6.0.1", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="], - "@octokit/core/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "wide-align": ["wide-align@1.1.5", "", { "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="], + + "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], + + "@octokit/plugin-request-log/@octokit/core": ["@octokit/core@7.0.3", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="], + + "@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], + + "@octokit/plugin-retry/@octokit/core": ["@octokit/core@7.0.3", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="], + + "@octokit/plugin-retry/@octokit/request-error": ["@octokit/request-error@6.1.8", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ=="], + + "@octokit/plugin-retry/@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], "@octokit/plugin-throttling/@octokit/types": ["@octokit/types@11.1.0", "", { "dependencies": { "@octokit/openapi-types": "^18.0.0" } }, "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ=="], - "@octokit/request/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], + "@octokit/rest/@octokit/core": ["@octokit/core@7.0.3", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="], + + "@octokit/rest/@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@13.1.1", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw=="], + + "@octokit/rest/@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@16.0.0", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g=="], + + "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "gauge/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "gaxios/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], + + "wrap-ansi/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="], + + "@octokit/plugin-request-log/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + + "@octokit/plugin-request-log/@octokit/core/@octokit/graphql": ["@octokit/graphql@9.0.1", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="], + + "@octokit/plugin-request-log/@octokit/core/@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], + + "@octokit/plugin-request-log/@octokit/core/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], + + "@octokit/plugin-request-log/@octokit/core/@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], + + "@octokit/plugin-request-log/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + + "@octokit/plugin-request-log/@octokit/core/universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + + "@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="], + + "@octokit/plugin-retry/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + + "@octokit/plugin-retry/@octokit/core/@octokit/graphql": ["@octokit/graphql@9.0.1", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="], + + "@octokit/plugin-retry/@octokit/core/@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], + + "@octokit/plugin-retry/@octokit/core/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], + + "@octokit/plugin-retry/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + + "@octokit/plugin-retry/@octokit/core/universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + + "@octokit/plugin-retry/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], "@octokit/plugin-throttling/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@18.1.1", "", {}, "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw=="], + + "@octokit/rest/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + + "@octokit/rest/@octokit/core/@octokit/graphql": ["@octokit/graphql@9.0.1", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="], + + "@octokit/rest/@octokit/core/@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], + + "@octokit/rest/@octokit/core/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], + + "@octokit/rest/@octokit/core/@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], + + "@octokit/rest/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + + "@octokit/rest/@octokit/core/universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + + "@octokit/rest/@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], + + "@octokit/rest/@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], + + "gaxios/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + + "rimraf/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "@octokit/plugin-request-log/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], + + "@octokit/plugin-request-log/@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], + + "@octokit/plugin-retry/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], + + "@octokit/rest/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], + + "@octokit/rest/@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], + + "@octokit/rest/@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], + + "@octokit/rest/@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], } } diff --git a/bunfig.toml b/bunfig.toml index eeceaf0..07d2f6a 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -1,14 +1,11 @@ +[runtime] +telemetry = false + + [install] # Use exact versions for reproducible builds exact = true -[install.scopes] -# Configure any scoped packages if needed - -[test] -# Test configuration -preload = ["./src/test-setup.ts"] - [run] # Runtime configuration bun = true \ No newline at end of file diff --git a/charts/github/sailpoint-oss-sailpoint-cli-cumulative-release-downloads.svg b/charts/github/sailpoint-oss-sailpoint-cli-cumulative-release-downloads.svg new file mode 100644 index 0000000..50177d4 --- /dev/null +++ b/charts/github/sailpoint-oss-sailpoint-cli-cumulative-release-downloads.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/github/sailpoint-oss-sailpoint-cli-release-downloads.svg b/charts/github/sailpoint-oss-sailpoint-cli-release-downloads.svg new file mode 100644 index 0000000..396c6ea --- /dev/null +++ b/charts/github/sailpoint-oss-sailpoint-cli-release-downloads.svg @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/github/sailpoint-oss-sailpoint-cli-top-release-downloads.svg b/charts/github/sailpoint-oss-sailpoint-cli-top-release-downloads.svg new file mode 100644 index 0000000..05adec9 --- /dev/null +++ b/charts/github/sailpoint-oss-sailpoint-cli-top-release-downloads.svg @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/npm/sailpoint-api-client-cumulative-downloads.svg b/charts/npm/sailpoint-api-client-cumulative-downloads.svg new file mode 100644 index 0000000..c473e0f --- /dev/null +++ b/charts/npm/sailpoint-api-client-cumulative-downloads.svg @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/npm/sailpoint-api-client-new-downloads-by-month.svg b/charts/npm/sailpoint-api-client-new-downloads-by-month.svg new file mode 100644 index 0000000..922a63d --- /dev/null +++ b/charts/npm/sailpoint-api-client-new-downloads-by-month.svg @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/powershell/powershell-combined-downloads.svg b/charts/powershell/powershell-combined-downloads.svg new file mode 100644 index 0000000..baf4a64 --- /dev/null +++ b/charts/powershell/powershell-combined-downloads.svg @@ -0,0 +1,681 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/powershell/powershell-cumulative-downloads.svg b/charts/powershell/powershell-cumulative-downloads.svg new file mode 100644 index 0000000..cd509ac --- /dev/null +++ b/charts/powershell/powershell-cumulative-downloads.svg @@ -0,0 +1,729 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-installer.svg b/charts/pypi/sailpoint-pypi-installer.svg new file mode 100644 index 0000000..107351d --- /dev/null +++ b/charts/pypi/sailpoint-pypi-installer.svg @@ -0,0 +1,1093 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-overall.svg b/charts/pypi/sailpoint-pypi-overall.svg new file mode 100644 index 0000000..1ad7fae --- /dev/null +++ b/charts/pypi/sailpoint-pypi-overall.svg @@ -0,0 +1,509 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-python-major-totals.svg b/charts/pypi/sailpoint-pypi-python-major-totals.svg new file mode 100644 index 0000000..72b97f8 --- /dev/null +++ b/charts/pypi/sailpoint-pypi-python-major-totals.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-python-major.svg b/charts/pypi/sailpoint-pypi-python-major.svg new file mode 100644 index 0000000..74d96da --- /dev/null +++ b/charts/pypi/sailpoint-pypi-python-major.svg @@ -0,0 +1,505 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-python-minor-totals.svg b/charts/pypi/sailpoint-pypi-python-minor-totals.svg new file mode 100644 index 0000000..033ff2a --- /dev/null +++ b/charts/pypi/sailpoint-pypi-python-minor-totals.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-python-minor.svg b/charts/pypi/sailpoint-pypi-python-minor.svg new file mode 100644 index 0000000..0bf6f75 --- /dev/null +++ b/charts/pypi/sailpoint-pypi-python-minor.svg @@ -0,0 +1,1093 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-system-totals.svg b/charts/pypi/sailpoint-pypi-system-totals.svg new file mode 100644 index 0000000..3f3bb47 --- /dev/null +++ b/charts/pypi/sailpoint-pypi-system-totals.svg @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/charts/pypi/sailpoint-pypi-system.svg b/charts/pypi/sailpoint-pypi-system.svg new file mode 100644 index 0000000..a4f500d --- /dev/null +++ b/charts/pypi/sailpoint-pypi-system.svg @@ -0,0 +1,673 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist/action.js b/dist/action.js deleted file mode 100755 index 27d597d..0000000 --- a/dist/action.js +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env bun -// @bun -import{createRequire as iV}from"node:module";var bV=Object.create;var{getPrototypeOf:mV,defineProperty:UI,getOwnPropertyNames:pY,getOwnPropertyDescriptor:cV}=Object,nY=Object.prototype.hasOwnProperty;var rg=(A,Q,B)=>{B=A!=null?bV(mV(A)):{};let E=Q||!A||!A.__esModule?UI(B,"default",{value:A,enumerable:!0}):B;for(let I of pY(A))if(!nY.call(E,I))UI(E,I,{get:()=>A[I],enumerable:!0});return E},lY=new WeakMap,uV=(A)=>{var Q=lY.get(A),B;if(Q)return Q;if(Q=UI({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function")pY(A).map((E)=>!nY.call(Q,E)&&UI(Q,E,{get:()=>A[E],enumerable:!(B=cV(A,E))||B.enumerable}));return lY.set(A,Q),Q},h=(A,Q)=>()=>(Q||A((Q={exports:{}}).exports,Q),Q.exports);var dV=(A,Q)=>{for(var B in Q)UI(A,B,{get:Q[B],enumerable:!0,configurable:!0,set:(E)=>Q[B]=()=>E})};var IB=(A,Q)=>()=>(A&&(Q=A(A=0)),Q);var M=iV(import.meta.url);var GI=h((aY)=>{Object.defineProperty(aY,"__esModule",{value:!0});aY.toCommandProperties=aY.toCommandValue=void 0;function lV(A){if(A===null||A===void 0)return"";else if(typeof A==="string"||A instanceof String)return A;return JSON.stringify(A)}aY.toCommandValue=lV;function pV(A){if(!Object.keys(A).length)return{};return{title:A.title,file:A.file,line:A.startLine,endLine:A.endLine,col:A.startColumn,endColumn:A.endColumn}}aY.toCommandProperties=pV});var tg=h((SQ)=>{var aV=SQ&&SQ.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;var I=Object.getOwnPropertyDescriptor(Q,B);if(!I||("get"in I?!Q.__esModule:I.writable||I.configurable))I={enumerable:!0,get:function(){return Q[B]}};Object.defineProperty(A,E,I)}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),sV=SQ&&SQ.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),oV=SQ&&SQ.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.prototype.hasOwnProperty.call(A,B))aV(Q,A,B)}return sV(Q,A),Q};Object.defineProperty(SQ,"__esModule",{value:!0});SQ.issue=SQ.issueCommand=void 0;var rV=oV(M("os")),rY=GI();function tY(A,Q,B){let E=new eY(A,Q,B);process.stdout.write(E.toString()+rV.EOL)}SQ.issueCommand=tY;function tV(A,Q=""){tY(A,{},Q)}SQ.issue=tV;var oY="::";class eY{constructor(A,Q,B){if(!A)A="missing.command";this.command=A,this.properties=Q,this.message=B}toString(){let A=oY+this.command;if(this.properties&&Object.keys(this.properties).length>0){A+=" ";let Q=!0;for(let B in this.properties)if(this.properties.hasOwnProperty(B)){let E=this.properties[B];if(E){if(Q)Q=!1;else A+=",";A+=`${B}=${AW(E)}`}}}return A+=`${oY}${eV(this.message)}`,A}}function eV(A){return rY.toCommandValue(A).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function AW(A){return rY.toCommandValue(A).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}});var Q0=h((KQ)=>{var QW=KQ&&KQ.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;var I=Object.getOwnPropertyDescriptor(Q,B);if(!I||("get"in I?!Q.__esModule:I.writable||I.configurable))I={enumerable:!0,get:function(){return Q[B]}};Object.defineProperty(A,E,I)}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),BW=KQ&&KQ.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),A0=KQ&&KQ.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.prototype.hasOwnProperty.call(A,B))QW(Q,A,B)}return BW(Q,A),Q};Object.defineProperty(KQ,"__esModule",{value:!0});KQ.prepareKeyValueMessage=KQ.issueFileCommand=void 0;var EW=A0(M("crypto")),AJ=A0(M("fs")),eg=A0(M("os")),QJ=GI();function IW(A,Q){let B=process.env[`GITHUB_${A}`];if(!B)throw new Error(`Unable to find environment variable for file command ${A}`);if(!AJ.existsSync(B))throw new Error(`Missing file at path: ${B}`);AJ.appendFileSync(B,`${QJ.toCommandValue(Q)}${eg.EOL}`,{encoding:"utf8"})}KQ.issueFileCommand=IW;function CW(A,Q){let B=`ghadelimiter_${EW.randomUUID()}`,E=QJ.toCommandValue(Q);if(A.includes(B))throw new Error(`Unexpected input: name should not contain the delimiter "${B}"`);if(E.includes(B))throw new Error(`Unexpected input: value should not contain the delimiter "${B}"`);return`${A}<<${B}${eg.EOL}${E}${eg.EOL}${B}`}KQ.prepareKeyValueMessage=CW});var CJ=h((EJ)=>{Object.defineProperty(EJ,"__esModule",{value:!0});EJ.checkBypass=EJ.getProxyUrl=void 0;function gW(A){let Q=A.protocol==="https:";if(BJ(A))return;let B=(()=>{if(Q)return process.env.https_proxy||process.env.HTTPS_PROXY;else return process.env.http_proxy||process.env.HTTP_PROXY})();if(B)try{return new B0(B)}catch(E){if(!B.startsWith("http://")&&!B.startsWith("https://"))return new B0(`http://${B}`)}else return}EJ.getProxyUrl=gW;function BJ(A){if(!A.hostname)return!1;let Q=A.hostname;if(DW(Q))return!0;let B=process.env.no_proxy||process.env.NO_PROXY||"";if(!B)return!1;let E;if(A.port)E=Number(A.port);else if(A.protocol==="http:")E=80;else if(A.protocol==="https:")E=443;let I=[A.hostname.toUpperCase()];if(typeof E==="number")I.push(`${I[0]}:${E}`);for(let C of B.split(",").map((g)=>g.trim().toUpperCase()).filter((g)=>g))if(C==="*"||I.some((g)=>g===C||g.endsWith(`.${C}`)||C.startsWith(".")&&g.endsWith(`${C}`)))return!0;return!1}EJ.checkBypass=BJ;function DW(A){let Q=A.toLowerCase();return Q==="localhost"||Q.startsWith("127.")||Q.startsWith("[::1]")||Q.startsWith("[0:0:0:0:0:0:0:1]")}class B0 extends URL{constructor(A,Q){super(A,Q);this._decodedUsername=decodeURIComponent(super.username),this._decodedPassword=decodeURIComponent(super.password)}get username(){return this._decodedUsername}get password(){return this._decodedPassword}}});var YJ=h((MW)=>{var Yx=M("net"),YW=M("tls"),E0=M("http"),gJ=M("https"),JW=M("events"),Jx=M("assert"),NW=M("util");MW.httpOverHttp=UW;MW.httpsOverHttp=GW;MW.httpOverHttps=RW;MW.httpsOverHttps=wW;function UW(A){var Q=new CB(A);return Q.request=E0.request,Q}function GW(A){var Q=new CB(A);return Q.request=E0.request,Q.createSocket=DJ,Q.defaultPort=443,Q}function RW(A){var Q=new CB(A);return Q.request=gJ.request,Q}function wW(A){var Q=new CB(A);return Q.request=gJ.request,Q.createSocket=DJ,Q.defaultPort=443,Q}function CB(A){var Q=this;Q.options=A||{},Q.proxyOptions=Q.options.proxy||{},Q.maxSockets=Q.options.maxSockets||E0.Agent.defaultMaxSockets,Q.requests=[],Q.sockets=[],Q.on("free",function B(E,I,C,g){var D=FJ(I,C,g);for(var F=0,J=Q.requests.length;F=this.maxSockets){C.requests.push(g);return}C.createSocket(g,function(D){D.on("free",F),D.on("close",J),D.on("agentRemove",J),Q.onSocket(D);function F(){C.emit("free",D,g)}function J(Y){C.removeSocket(D),D.removeListener("free",F),D.removeListener("close",J),D.removeListener("agentRemove",J)}})};CB.prototype.createSocket=function A(Q,B){var E=this,I={};E.sockets.push(I);var C=I0({},E.proxyOptions,{method:"CONNECT",path:Q.host+":"+Q.port,agent:!1,headers:{host:Q.host+":"+Q.port}});if(Q.localAddress)C.localAddress=Q.localAddress;if(C.proxyAuth)C.headers=C.headers||{},C.headers["Proxy-Authorization"]="Basic "+new Buffer(C.proxyAuth).toString("base64");ZB("making CONNECT request");var g=E.request(C);g.useChunkedEncodingByDefault=!1,g.once("response",D),g.once("upgrade",F),g.once("connect",J),g.once("error",Y),g.end();function D(U){U.upgrade=!0}function F(U,R,w){process.nextTick(function(){J(U,R,w)})}function J(U,R,w){if(g.removeAllListeners(),R.removeAllListeners(),U.statusCode!==200){ZB("tunneling socket could not be established, statusCode=%d",U.statusCode),R.destroy();var W=new Error("tunneling socket could not be established, statusCode="+U.statusCode);W.code="ECONNRESET",Q.request.emit("error",W),E.removeSocket(I);return}if(w.length>0){ZB("got illegal response body from proxy"),R.destroy();var W=new Error("got illegal response body from proxy");W.code="ECONNRESET",Q.request.emit("error",W),E.removeSocket(I);return}return ZB("tunneling connection has established"),E.sockets[E.sockets.indexOf(I)]=R,B(R)}function Y(U){g.removeAllListeners(),ZB(`tunneling socket could not be established, cause=%s -`,U.message,U.stack);var R=new Error("tunneling socket could not be established, cause="+U.message);R.code="ECONNRESET",Q.request.emit("error",R),E.removeSocket(I)}};CB.prototype.removeSocket=function A(Q){var B=this.sockets.indexOf(Q);if(B===-1)return;this.sockets.splice(B,1);var E=this.requests.shift();if(E)this.createSocket(E,function(I){E.request.onSocket(I)})};function DJ(A,Q){var B=this;CB.prototype.createSocket.call(B,A,function(E){var I=A.request.getHeader("host"),C=I0({},B.options,{socket:E,servername:I?I.replace(/:.*$/,""):A.host}),g=YW.connect(0,C);B.sockets[B.sockets.indexOf(E)]=g,Q(g)})}function FJ(A,Q,B){if(typeof A==="string")return{host:A,port:Q,localAddress:B};return A}function I0(A){for(var Q=1,B=arguments.length;Q{JJ.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kHeadersList:Symbol("headers list"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kHTTP2BuildRequest:Symbol("http2 build request"),kHTTP1BuildRequest:Symbol("http1 build request"),kHTTP2CopyHeaders:Symbol("http2 copy headers"),kHTTPConnVersion:Symbol("http connection version"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable")}});var EA=h((Gx,UJ)=>{class zA extends Error{constructor(A){super(A);this.name="UndiciError",this.code="UND_ERR"}}class C0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,C0),this.name="ConnectTimeoutError",this.message=A||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}}class g0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,g0),this.name="HeadersTimeoutError",this.message=A||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}}class D0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,D0),this.name="HeadersOverflowError",this.message=A||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}}class F0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,F0),this.name="BodyTimeoutError",this.message=A||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}}class Y0 extends zA{constructor(A,Q,B,E){super(A);Error.captureStackTrace(this,Y0),this.name="ResponseStatusCodeError",this.message=A||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=E,this.status=Q,this.statusCode=Q,this.headers=B}}class J0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,J0),this.name="InvalidArgumentError",this.message=A||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}}class N0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,N0),this.name="InvalidReturnValueError",this.message=A||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}}class U0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,U0),this.name="AbortError",this.message=A||"Request aborted",this.code="UND_ERR_ABORTED"}}class G0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,G0),this.name="InformationalError",this.message=A||"Request information",this.code="UND_ERR_INFO"}}class R0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,R0),this.name="RequestContentLengthMismatchError",this.message=A||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}}class w0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,w0),this.name="ResponseContentLengthMismatchError",this.message=A||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}}class M0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,M0),this.name="ClientDestroyedError",this.message=A||"The client is destroyed",this.code="UND_ERR_DESTROYED"}}class L0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,L0),this.name="ClientClosedError",this.message=A||"The client is closed",this.code="UND_ERR_CLOSED"}}class V0 extends zA{constructor(A,Q){super(A);Error.captureStackTrace(this,V0),this.name="SocketError",this.message=A||"Socket error",this.code="UND_ERR_SOCKET",this.socket=Q}}class CC extends zA{constructor(A){super(A);Error.captureStackTrace(this,CC),this.name="NotSupportedError",this.message=A||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}}class NJ extends zA{constructor(A){super(A);Error.captureStackTrace(this,CC),this.name="MissingUpstreamError",this.message=A||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}}class W0 extends Error{constructor(A,Q,B){super(A);Error.captureStackTrace(this,W0),this.name="HTTPParserError",this.code=Q?`HPE_${Q}`:void 0,this.data=B?B.toString():void 0}}class Z0 extends zA{constructor(A){super(A);Error.captureStackTrace(this,Z0),this.name="ResponseExceededMaxSizeError",this.message=A||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}}class X0 extends zA{constructor(A,Q,{headers:B,data:E}){super(A);Error.captureStackTrace(this,X0),this.name="RequestRetryError",this.message=A||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=Q,this.data=E,this.headers=B}}UJ.exports={HTTPParserError:W0,UndiciError:zA,HeadersTimeoutError:g0,HeadersOverflowError:D0,BodyTimeoutError:F0,RequestContentLengthMismatchError:R0,ConnectTimeoutError:C0,ResponseStatusCodeError:Y0,InvalidArgumentError:J0,InvalidReturnValueError:N0,RequestAbortedError:U0,ClientDestroyedError:M0,ClientClosedError:L0,InformationalError:G0,SocketError:V0,NotSupportedError:CC,ResponseContentLengthMismatchError:w0,BalancedPoolMissingUpstreamError:NJ,ResponseExceededMaxSizeError:Z0,RequestRetryError:X0}});var RJ=h((Rx,GJ)=>{var gC={},h0=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let A=0;A{var VJ=M("assert"),{kDestroyed:WJ,kBodyUsed:wJ}=JA(),{IncomingMessage:hW}=M("http"),ME=M("stream"),SW=M("net"),{InvalidArgumentError:_A}=EA(),{Blob:MJ}=M("buffer"),DC=M("util"),{stringify:KW}=M("querystring"),{headerNameLowerCasedRecord:zW}=RJ(),[S0,LJ]=process.versions.node.split(".").map((A)=>Number(A));function HW(){}function K0(A){return A&&typeof A==="object"&&typeof A.pipe==="function"&&typeof A.on==="function"}function ZJ(A){return MJ&&A instanceof MJ||A&&typeof A==="object"&&(typeof A.stream==="function"||typeof A.arrayBuffer==="function")&&/^(Blob|File)$/.test(A[Symbol.toStringTag])}function xW(A,Q){if(A.includes("?")||A.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let B=KW(Q);if(B)A+="?"+B;return A}function XJ(A){if(typeof A==="string"){if(A=new URL(A),!/^https?:/.test(A.origin||A.protocol))throw new _A("Invalid URL protocol: the URL must start with `http:` or `https:`.");return A}if(!A||typeof A!=="object")throw new _A("Invalid URL: The URL argument must be a non-null object.");if(!/^https?:/.test(A.origin||A.protocol))throw new _A("Invalid URL protocol: the URL must start with `http:` or `https:`.");if(!(A instanceof URL)){if(A.port!=null&&A.port!==""&&!Number.isFinite(parseInt(A.port)))throw new _A("Invalid URL: port must be a valid integer or a string representation of an integer.");if(A.path!=null&&typeof A.path!=="string")throw new _A("Invalid URL path: the path must be a string or null/undefined.");if(A.pathname!=null&&typeof A.pathname!=="string")throw new _A("Invalid URL pathname: the pathname must be a string or null/undefined.");if(A.hostname!=null&&typeof A.hostname!=="string")throw new _A("Invalid URL hostname: the hostname must be a string or null/undefined.");if(A.origin!=null&&typeof A.origin!=="string")throw new _A("Invalid URL origin: the origin must be a string or null/undefined.");let Q=A.port!=null?A.port:A.protocol==="https:"?443:80,B=A.origin!=null?A.origin:`${A.protocol}//${A.hostname}:${Q}`,E=A.path!=null?A.path:`${A.pathname||""}${A.search||""}`;if(B.endsWith("/"))B=B.substring(0,B.length-1);if(E&&!E.startsWith("/"))E=`/${E}`;A=new URL(B+E)}return A}function $W(A){if(A=XJ(A),A.pathname!=="/"||A.search||A.hash)throw new _A("invalid url");return A}function TW(A){if(A[0]==="["){let B=A.indexOf("]");return VJ(B!==-1),A.substring(1,B)}let Q=A.indexOf(":");if(Q===-1)return A;return A.substring(0,Q)}function jW(A){if(!A)return null;VJ.strictEqual(typeof A,"string");let Q=TW(A);if(SW.isIP(Q))return"";return Q}function yW(A){return JSON.parse(JSON.stringify(A))}function _W(A){return A!=null&&typeof A[Symbol.asyncIterator]==="function"}function OW(A){return A!=null&&(typeof A[Symbol.iterator]==="function"||typeof A[Symbol.asyncIterator]==="function")}function qW(A){if(A==null)return 0;else if(K0(A)){let Q=A._readableState;return Q&&Q.objectMode===!1&&Q.ended===!0&&Number.isFinite(Q.length)?Q.length:null}else if(ZJ(A))return A.size!=null?A.size:null;else if(SJ(A))return A.byteLength;return null}function z0(A){return!A||!!(A.destroyed||A[WJ])}function hJ(A){let Q=A&&A._readableState;return z0(A)&&Q&&!Q.endEmitted}function PW(A,Q){if(A==null||!K0(A)||z0(A))return;if(typeof A.destroy==="function"){if(Object.getPrototypeOf(A).constructor===hW)A.socket=null;A.destroy(Q)}else if(Q)process.nextTick((B,E)=>{B.emit("error",E)},A,Q);if(A.destroyed!==!0)A[WJ]=!0}var fW=/timeout=(\d+)/;function vW(A){let Q=A.toString().match(fW);return Q?parseInt(Q[1],10)*1000:null}function kW(A){return zW[A]||A.toLowerCase()}function bW(A,Q={}){if(!Array.isArray(A))return A;for(let B=0;BC.toString("utf8"));else Q[E]=A[B+1].toString("utf8");else{if(!Array.isArray(I))I=[I],Q[E]=I;I.push(A[B+1].toString("utf8"))}}if("content-length"in Q&&"content-disposition"in Q)Q["content-disposition"]=Buffer.from(Q["content-disposition"]).toString("latin1");return Q}function mW(A){let Q=[],B=!1,E=-1;for(let I=0;I{B.close()});else{let C=Buffer.isBuffer(I)?I:Buffer.from(I);B.enqueue(new Uint8Array(C))}return B.desiredSize>0},async cancel(B){await Q.return()}},0)}function aW(A){return A&&typeof A==="object"&&typeof A.append==="function"&&typeof A.delete==="function"&&typeof A.get==="function"&&typeof A.getAll==="function"&&typeof A.has==="function"&&typeof A.set==="function"&&A[Symbol.toStringTag]==="FormData"}function sW(A){if(!A)return;if(typeof A.throwIfAborted==="function")A.throwIfAborted();else if(A.aborted){let Q=new Error("The operation was aborted");throw Q.name="AbortError",Q}}function oW(A,Q){if("addEventListener"in A)return A.addEventListener("abort",Q,{once:!0}),()=>A.removeEventListener("abort",Q);return A.addListener("abort",Q),()=>A.removeListener("abort",Q)}var rW=!!String.prototype.toWellFormed;function tW(A){if(rW)return`${A}`.toWellFormed();else if(DC.toUSVString)return DC.toUSVString(A);return`${A}`}function eW(A){if(A==null||A==="")return{start:0,end:null,size:null};let Q=A?A.match(/^bytes (\d+)-(\d+)\/(\d+)?$/):null;return Q?{start:parseInt(Q[1]),end:Q[2]?parseInt(Q[2]):null,size:Q[3]?parseInt(Q[3]):null}:null}var KJ=Object.create(null);KJ.enumerable=!0;zJ.exports={kEnumerableProperty:KJ,nop:HW,isDisturbed:uW,isErrored:dW,isReadable:iW,toUSVString:tW,isReadableAborted:hJ,isBlobLike:ZJ,parseOrigin:$W,parseURL:XJ,getServerName:jW,isStream:K0,isIterable:OW,isAsyncIterable:_W,isDestroyed:z0,headerNameToString:kW,parseRawHeaders:mW,parseHeaders:bW,parseKeepAliveTimeout:vW,destroy:PW,bodyLength:qW,deepClone:yW,ReadableStreamFrom:nW,isBuffer:SJ,validateHandler:cW,getSocketInfo:lW,isFormDataLike:aW,buildURL:xW,throwIfAborted:sW,addAbortListener:oW,parseRangeHeader:eW,nodeMajor:S0,nodeMinor:LJ,nodeHasAutoSelectFamily:S0>18||S0===18&&LJ>=13,safeHTTPMethods:["GET","HEAD","OPTIONS","TRACE"]}});var $J=h((Mx,xJ)=>{var H0=Date.now(),XB,hB=[];function AZ(){H0=Date.now();let A=hB.length,Q=0;while(Q0&&H0>=B.state)B.state=-1,B.callback(B.opaque);if(B.state===-1){if(B.state=-2,Q!==A-1)hB[Q]=hB.pop();else hB.pop();A-=1}else Q+=1}if(hB.length>0)HJ()}function HJ(){if(XB&&XB.refresh)XB.refresh();else if(clearTimeout(XB),XB=setTimeout(AZ,1000),XB.unref)XB.unref()}class x0{constructor(A,Q,B){this.callback=A,this.delay=Q,this.opaque=B,this.state=-2,this.refresh()}refresh(){if(this.state===-2){if(hB.push(this),!XB||hB.length===1)HJ()}this.state=0}clear(){this.state=-1}}xJ.exports={setTimeout(A,Q,B){return Q<1000?setTimeout(A,Q,B):new x0(A,Q,B)},clearTimeout(A){if(A instanceof x0)A.clear();else clearTimeout(A)}}});var $0=h((Lx,TJ)=>{var QZ=M("node:events").EventEmitter,BZ=M("node:util").inherits;function cB(A){if(typeof A==="string")A=Buffer.from(A);if(!Buffer.isBuffer(A))throw new TypeError("The needle has to be a String or a Buffer.");let Q=A.length;if(Q===0)throw new Error("The needle cannot be an empty String/Buffer.");if(Q>256)throw new Error("The needle cannot have a length bigger than 256.");this.maxMatches=1/0,this.matches=0,this._occ=new Array(256).fill(Q),this._lookbehind_size=0,this._needle=A,this._bufpos=0,this._lookbehind=Buffer.alloc(Q);for(var B=0;B=0)this.emit("info",!1,this._lookbehind,0,this._lookbehind_size),this._lookbehind_size=0;else{let D=this._lookbehind_size+C;if(D>0)this.emit("info",!1,this._lookbehind,0,D);return this._lookbehind.copy(this._lookbehind,0,D,this._lookbehind_size-D),this._lookbehind_size-=D,A.copy(this._lookbehind,this._lookbehind_size),this._lookbehind_size+=Q,this._bufpos=Q,Q}}if(C+=(C>=0)*this._bufpos,A.indexOf(B,C)!==-1){if(C=A.indexOf(B,C),++this.matches,C>0)this.emit("info",!0,A,this._bufpos,C);else this.emit("info",!0);return this._bufpos=C+E}else C=Q-E;while(C0)this.emit("info",!1,A,this._bufpos,C{var EZ=M("node:util").inherits,jJ=M("node:stream").Readable;function T0(A){jJ.call(this,A)}EZ(T0,jJ);T0.prototype._read=function(A){};yJ.exports=T0});var FC=h((Wx,OJ)=>{OJ.exports=function A(Q,B,E){if(!Q||Q[B]===void 0||Q[B]===null)return E;if(typeof Q[B]!=="number"||isNaN(Q[B]))throw new TypeError("Limit "+B+" is not a valid number");return Q[B]}});var vJ=h((Zx,fJ)=>{var PJ=M("node:events").EventEmitter,IZ=M("node:util").inherits,qJ=FC(),CZ=$0(),gZ=Buffer.from(`\r -\r -`),DZ=/\r\n/g,FZ=/^([^:]+):[ \t]?([\x00-\xFF]+)?$/;function LE(A){PJ.call(this),A=A||{};let Q=this;this.nread=0,this.maxed=!1,this.npairs=0,this.maxHeaderPairs=qJ(A,"maxHeaderPairs",2000),this.maxHeaderSize=qJ(A,"maxHeaderSize",81920),this.buffer="",this.header={},this.finished=!1,this.ss=new CZ(gZ),this.ss.on("info",function(B,E,I,C){if(E&&!Q.maxed){if(Q.nread+C-I>=Q.maxHeaderSize)C=Q.maxHeaderSize-Q.nread+I,Q.nread=Q.maxHeaderSize,Q.maxed=!0;else Q.nread+=C-I;Q.buffer+=E.toString("binary",I,C)}if(B)Q._finish()})}IZ(LE,PJ);LE.prototype.push=function(A){let Q=this.ss.push(A);if(this.finished)return Q};LE.prototype.reset=function(){this.finished=!1,this.buffer="",this.header={},this.ss.reset()};LE.prototype._finish=function(){if(this.buffer)this._parseHeader();this.ss.matches=this.ss.maxMatches;let A=this.header;this.header={},this.buffer="",this.finished=!0,this.nread=this.npairs=0,this.maxed=!1,this.emit("header",A)};LE.prototype._parseHeader=function(){if(this.npairs===this.maxHeaderPairs)return;let A=this.buffer.split(DZ),Q=A.length,B,E;for(var I=0;I{var j0=M("node:stream").Writable,YZ=M("node:util").inherits,JZ=$0(),kJ=_J(),NZ=vJ(),UZ=Buffer.from("-"),GZ=Buffer.from(`\r -`),RZ=function(){};function PQ(A){if(!(this instanceof PQ))return new PQ(A);if(j0.call(this,A),!A||!A.headerFirst&&typeof A.boundary!=="string")throw new TypeError("Boundary required");if(typeof A.boundary==="string")this.setBoundary(A.boundary);else this._bparser=void 0;this._headerFirst=A.headerFirst,this._dashes=0,this._parts=0,this._finished=!1,this._realFinish=!1,this._isPreamble=!0,this._justMatched=!1,this._firstWrite=!0,this._inHeader=!0,this._part=void 0,this._cb=void 0,this._ignoreData=!1,this._partOpts={highWaterMark:A.partHwm},this._pause=!1;let Q=this;this._hparser=new NZ(A),this._hparser.on("header",function(B){Q._inHeader=!1,Q._part.emit("header",B)})}YZ(PQ,j0);PQ.prototype.emit=function(A){if(A==="finish"&&!this._realFinish){if(!this._finished){let Q=this;process.nextTick(function(){if(Q.emit("error",new Error("Unexpected end of multipart data")),Q._part&&!Q._ignoreData){let B=Q._isPreamble?"Preamble":"Part";Q._part.emit("error",new Error(B+" terminated early due to unexpected end of multipart data")),Q._part.push(null),process.nextTick(function(){Q._realFinish=!0,Q.emit("finish"),Q._realFinish=!1});return}Q._realFinish=!0,Q.emit("finish"),Q._realFinish=!1})}}else j0.prototype.emit.apply(this,arguments)};PQ.prototype._write=function(A,Q,B){if(!this._hparser&&!this._bparser)return B();if(this._headerFirst&&this._isPreamble){if(!this._part)if(this._part=new kJ(this._partOpts),this.listenerCount("preamble")!==0)this.emit("preamble",this._part);else this._ignore();let E=this._hparser.push(A);if(!this._inHeader&&E!==void 0&&E{var mJ=new TextDecoder("utf-8"),cJ=new Map([["utf-8",mJ],["utf8",mJ]]);function wZ(A){let Q;while(!0)switch(A){case"utf-8":case"utf8":return wI.utf8;case"latin1":case"ascii":case"us-ascii":case"iso-8859-1":case"iso8859-1":case"iso88591":case"iso_8859-1":case"windows-1252":case"iso_8859-1:1987":case"cp1252":case"x-cp1252":return wI.latin1;case"utf16le":case"utf-16le":case"ucs2":case"ucs-2":return wI.utf16le;case"base64":return wI.base64;default:if(Q===void 0){Q=!0,A=A.toLowerCase();continue}return wI.other.bind(A)}}var wI={utf8:(A,Q)=>{if(A.length===0)return"";if(typeof A==="string")A=Buffer.from(A,Q);return A.utf8Slice(0,A.length)},latin1:(A,Q)=>{if(A.length===0)return"";if(typeof A==="string")return A;return A.latin1Slice(0,A.length)},utf16le:(A,Q)=>{if(A.length===0)return"";if(typeof A==="string")A=Buffer.from(A,Q);return A.ucs2Slice(0,A.length)},base64:(A,Q)=>{if(A.length===0)return"";if(typeof A==="string")A=Buffer.from(A,Q);return A.base64Slice(0,A.length)},other:(A,Q)=>{if(A.length===0)return"";if(typeof A==="string")A=Buffer.from(A,Q);if(cJ.has(_0.toString()))try{return cJ.get(_0).decode(A)}catch{}return typeof A==="string"?A:A.toString()}};function MZ(A,Q,B){if(A)return wZ(B)(A,Q);return A}uJ.exports=MZ});var q0=h((hx,nJ)=>{var JC=YC(),dJ=/%[a-fA-F0-9][a-fA-F0-9]/g,LZ={"%00":"\x00","%01":"\x01","%02":"\x02","%03":"\x03","%04":"\x04","%05":"\x05","%06":"\x06","%07":"\x07","%08":"\b","%09":"\t","%0a":` -`,"%0A":` -`,"%0b":"\v","%0B":"\v","%0c":"\f","%0C":"\f","%0d":"\r","%0D":"\r","%0e":"\x0E","%0E":"\x0E","%0f":"\x0F","%0F":"\x0F","%10":"\x10","%11":"\x11","%12":"\x12","%13":"\x13","%14":"\x14","%15":"\x15","%16":"\x16","%17":"\x17","%18":"\x18","%19":"\x19","%1a":"\x1A","%1A":"\x1A","%1b":"\x1B","%1B":"\x1B","%1c":"\x1C","%1C":"\x1C","%1d":"\x1D","%1D":"\x1D","%1e":"\x1E","%1E":"\x1E","%1f":"\x1F","%1F":"\x1F","%20":" ","%21":"!","%22":'"',"%23":"#","%24":"$","%25":"%","%26":"&","%27":"'","%28":"(","%29":")","%2a":"*","%2A":"*","%2b":"+","%2B":"+","%2c":",","%2C":",","%2d":"-","%2D":"-","%2e":".","%2E":".","%2f":"/","%2F":"/","%30":"0","%31":"1","%32":"2","%33":"3","%34":"4","%35":"5","%36":"6","%37":"7","%38":"8","%39":"9","%3a":":","%3A":":","%3b":";","%3B":";","%3c":"<","%3C":"<","%3d":"=","%3D":"=","%3e":">","%3E":">","%3f":"?","%3F":"?","%40":"@","%41":"A","%42":"B","%43":"C","%44":"D","%45":"E","%46":"F","%47":"G","%48":"H","%49":"I","%4a":"J","%4A":"J","%4b":"K","%4B":"K","%4c":"L","%4C":"L","%4d":"M","%4D":"M","%4e":"N","%4E":"N","%4f":"O","%4F":"O","%50":"P","%51":"Q","%52":"R","%53":"S","%54":"T","%55":"U","%56":"V","%57":"W","%58":"X","%59":"Y","%5a":"Z","%5A":"Z","%5b":"[","%5B":"[","%5c":"\\","%5C":"\\","%5d":"]","%5D":"]","%5e":"^","%5E":"^","%5f":"_","%5F":"_","%60":"`","%61":"a","%62":"b","%63":"c","%64":"d","%65":"e","%66":"f","%67":"g","%68":"h","%69":"i","%6a":"j","%6A":"j","%6b":"k","%6B":"k","%6c":"l","%6C":"l","%6d":"m","%6D":"m","%6e":"n","%6E":"n","%6f":"o","%6F":"o","%70":"p","%71":"q","%72":"r","%73":"s","%74":"t","%75":"u","%76":"v","%77":"w","%78":"x","%79":"y","%7a":"z","%7A":"z","%7b":"{","%7B":"{","%7c":"|","%7C":"|","%7d":"}","%7D":"}","%7e":"~","%7E":"~","%7f":"","%7F":"","%80":"ย€","%81":"ย","%82":"ย‚","%83":"ยƒ","%84":"ย„","%85":"ย…","%86":"ย†","%87":"ย‡","%88":"ยˆ","%89":"ย‰","%8a":"ยŠ","%8A":"ยŠ","%8b":"ย‹","%8B":"ย‹","%8c":"ยŒ","%8C":"ยŒ","%8d":"ย","%8D":"ย","%8e":"ยŽ","%8E":"ยŽ","%8f":"ย","%8F":"ย","%90":"ย","%91":"ย‘","%92":"ย’","%93":"ย“","%94":"ย”","%95":"ย•","%96":"ย–","%97":"ย—","%98":"ย˜","%99":"ย™","%9a":"ยš","%9A":"ยš","%9b":"ย›","%9B":"ย›","%9c":"ยœ","%9C":"ยœ","%9d":"ย","%9D":"ย","%9e":"ยž","%9E":"ยž","%9f":"ยŸ","%9F":"ยŸ","%a0":"ย ","%A0":"ย ","%a1":"ยก","%A1":"ยก","%a2":"ยข","%A2":"ยข","%a3":"ยฃ","%A3":"ยฃ","%a4":"ยค","%A4":"ยค","%a5":"ยฅ","%A5":"ยฅ","%a6":"ยฆ","%A6":"ยฆ","%a7":"ยง","%A7":"ยง","%a8":"ยจ","%A8":"ยจ","%a9":"ยฉ","%A9":"ยฉ","%aa":"ยช","%Aa":"ยช","%aA":"ยช","%AA":"ยช","%ab":"ยซ","%Ab":"ยซ","%aB":"ยซ","%AB":"ยซ","%ac":"ยฌ","%Ac":"ยฌ","%aC":"ยฌ","%AC":"ยฌ","%ad":"ยญ","%Ad":"ยญ","%aD":"ยญ","%AD":"ยญ","%ae":"ยฎ","%Ae":"ยฎ","%aE":"ยฎ","%AE":"ยฎ","%af":"ยฏ","%Af":"ยฏ","%aF":"ยฏ","%AF":"ยฏ","%b0":"ยฐ","%B0":"ยฐ","%b1":"ยฑ","%B1":"ยฑ","%b2":"ยฒ","%B2":"ยฒ","%b3":"ยณ","%B3":"ยณ","%b4":"ยด","%B4":"ยด","%b5":"ยต","%B5":"ยต","%b6":"ยถ","%B6":"ยถ","%b7":"ยท","%B7":"ยท","%b8":"ยธ","%B8":"ยธ","%b9":"ยน","%B9":"ยน","%ba":"ยบ","%Ba":"ยบ","%bA":"ยบ","%BA":"ยบ","%bb":"ยป","%Bb":"ยป","%bB":"ยป","%BB":"ยป","%bc":"ยผ","%Bc":"ยผ","%bC":"ยผ","%BC":"ยผ","%bd":"ยฝ","%Bd":"ยฝ","%bD":"ยฝ","%BD":"ยฝ","%be":"ยพ","%Be":"ยพ","%bE":"ยพ","%BE":"ยพ","%bf":"ยฟ","%Bf":"ยฟ","%bF":"ยฟ","%BF":"ยฟ","%c0":"ร€","%C0":"ร€","%c1":"ร","%C1":"ร","%c2":"ร‚","%C2":"ร‚","%c3":"รƒ","%C3":"รƒ","%c4":"ร„","%C4":"ร„","%c5":"ร…","%C5":"ร…","%c6":"ร†","%C6":"ร†","%c7":"ร‡","%C7":"ร‡","%c8":"รˆ","%C8":"รˆ","%c9":"ร‰","%C9":"ร‰","%ca":"รŠ","%Ca":"รŠ","%cA":"รŠ","%CA":"รŠ","%cb":"ร‹","%Cb":"ร‹","%cB":"ร‹","%CB":"ร‹","%cc":"รŒ","%Cc":"รŒ","%cC":"รŒ","%CC":"รŒ","%cd":"ร","%Cd":"ร","%cD":"ร","%CD":"ร","%ce":"รŽ","%Ce":"รŽ","%cE":"รŽ","%CE":"รŽ","%cf":"ร","%Cf":"ร","%cF":"ร","%CF":"ร","%d0":"ร","%D0":"ร","%d1":"ร‘","%D1":"ร‘","%d2":"ร’","%D2":"ร’","%d3":"ร“","%D3":"ร“","%d4":"ร”","%D4":"ร”","%d5":"ร•","%D5":"ร•","%d6":"ร–","%D6":"ร–","%d7":"ร—","%D7":"ร—","%d8":"ร˜","%D8":"ร˜","%d9":"ร™","%D9":"ร™","%da":"รš","%Da":"รš","%dA":"รš","%DA":"รš","%db":"ร›","%Db":"ร›","%dB":"ร›","%DB":"ร›","%dc":"รœ","%Dc":"รœ","%dC":"รœ","%DC":"รœ","%dd":"ร","%Dd":"ร","%dD":"ร","%DD":"ร","%de":"รž","%De":"รž","%dE":"รž","%DE":"รž","%df":"รŸ","%Df":"รŸ","%dF":"รŸ","%DF":"รŸ","%e0":"ร ","%E0":"ร ","%e1":"รก","%E1":"รก","%e2":"รข","%E2":"รข","%e3":"รฃ","%E3":"รฃ","%e4":"รค","%E4":"รค","%e5":"รฅ","%E5":"รฅ","%e6":"รฆ","%E6":"รฆ","%e7":"รง","%E7":"รง","%e8":"รจ","%E8":"รจ","%e9":"รฉ","%E9":"รฉ","%ea":"รช","%Ea":"รช","%eA":"รช","%EA":"รช","%eb":"รซ","%Eb":"รซ","%eB":"รซ","%EB":"รซ","%ec":"รฌ","%Ec":"รฌ","%eC":"รฌ","%EC":"รฌ","%ed":"รญ","%Ed":"รญ","%eD":"รญ","%ED":"รญ","%ee":"รฎ","%Ee":"รฎ","%eE":"รฎ","%EE":"รฎ","%ef":"รฏ","%Ef":"รฏ","%eF":"รฏ","%EF":"รฏ","%f0":"รฐ","%F0":"รฐ","%f1":"รฑ","%F1":"รฑ","%f2":"รฒ","%F2":"รฒ","%f3":"รณ","%F3":"รณ","%f4":"รด","%F4":"รด","%f5":"รต","%F5":"รต","%f6":"รถ","%F6":"รถ","%f7":"รท","%F7":"รท","%f8":"รธ","%F8":"รธ","%f9":"รน","%F9":"รน","%fa":"รบ","%Fa":"รบ","%fA":"รบ","%FA":"รบ","%fb":"รป","%Fb":"รป","%fB":"รป","%FB":"รป","%fc":"รผ","%Fc":"รผ","%fC":"รผ","%FC":"รผ","%fd":"รฝ","%Fd":"รฝ","%fD":"รฝ","%FD":"รฝ","%fe":"รพ","%Fe":"รพ","%fE":"รพ","%FE":"รพ","%ff":"รฟ","%Ff":"รฟ","%fF":"รฟ","%FF":"รฟ"};function iJ(A){return LZ[A]}var NC=0,lJ=1,O0=2,pJ=3;function VZ(A){let Q=[],B=NC,E="",I=!1,C=!1,g=0,D="",F=A.length;for(var J=0;J{aJ.exports=function A(Q){if(typeof Q!=="string")return"";for(var B=Q.length-1;B>=0;--B)switch(Q.charCodeAt(B)){case 47:case 92:return Q=Q.slice(B+1),Q===".."||Q==="."?"":Q}return Q===".."||Q==="."?"":Q}});var eJ=h((Kx,tJ)=>{var{Readable:rJ}=M("node:stream"),{inherits:WZ}=M("node:util"),ZZ=y0(),oJ=q0(),XZ=YC(),hZ=sJ(),uB=FC(),SZ=/^boundary$/i,KZ=/^form-data$/i,zZ=/^charset$/i,HZ=/^filename$/i,xZ=/^name$/i;UC.detect=/^multipart\/form-data/i;function UC(A,Q){let B,E,I=this,C,g=Q.limits,D=Q.isPartAFile||((vA,e,YA)=>e==="application/octet-stream"||YA!==void 0),F=Q.parsedConType||[],J=Q.defCharset||"utf8",Y=Q.preservePath,U={highWaterMark:Q.fileHwm};for(B=0,E=F.length;B_)return I.parser.removeListener("part",vA),I.parser.on("part",VE),A.hitPartsLimit=!0,A.emit("partsLimit"),VE(e);if(lA){let YA=lA;YA.emit("end"),YA.removeAllListeners("end")}e.on("header",function(YA){let kA,qQ,pA,UE,kB,WB,bB=0;if(YA["content-type"]){if(pA=oJ(YA["content-type"][0]),pA[0]){kA=pA[0].toLowerCase();for(B=0,E=pA.length;BW){let hQ=W-bB+UQ.length;if(hQ>0)hA.push(UQ.slice(0,hQ));hA.truncated=!0,hA.bytesRead=W,e.removeAllListeners("data"),hA.emit("limit");return}else if(!hA.push(UQ))I._pause=!0;hA.bytesRead=bB},RE=function(){RA=void 0,hA.push(null)}}else{if(XA===S){if(!A.hitFieldsLimit)A.hitFieldsLimit=!0,A.emit("fieldsLimit");return VE(e)}++XA,++FA;let hA="",UQ=!1;lA=e,GE=function(hQ){if((bB+=hQ.length)>w){let wE=w-(bB-hQ.length);hA+=hQ.toString("binary",0,wE),UQ=!0,e.removeAllListeners("data")}else hA+=hQ.toString("binary")},RE=function(){if(lA=void 0,hA.length)hA=XZ(hA,"binary",UE);A.emit("field",qQ,hA,!1,UQ,kB,kA),--FA,R()}}e._readableState.sync=!1,e.on("data",GE),e.on("end",RE)}).on("error",function(YA){if(RA)RA.emit("error",YA)})}).on("error",function(vA){A.emit("error",vA)}).on("finish",function(){yA=!0,R()})}UC.prototype.write=function(A,Q){let B=this.parser.write(A);if(B&&!this._pause)Q();else this._needDrain=!B,this._cb=Q};UC.prototype.end=function(){let A=this;if(A.parser.writable)A.parser.end();else if(!A._boy._done)process.nextTick(function(){A._boy._done=!0,A._boy.emit("finish")})};function VE(A){A.resume()}function P0(A){rJ.call(this,A),this.bytesRead=0,this.truncated=!1}WZ(P0,rJ);P0.prototype._read=function(A){};tJ.exports=UC});var QN=h((zx,AN)=>{var $Z=/\+/g,TZ=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function f0(){this.buffer=void 0}f0.prototype.write=function(A){A=A.replace($Z," ");let Q="",B=0,E=0,I=A.length;for(;BE)Q+=A.substring(E,B),E=B;this.buffer="",++E}if(E{var jZ=QN(),WE=YC(),v0=FC(),yZ=/^charset$/i;GC.detect=/^application\/x-www-form-urlencoded/i;function GC(A,Q){let{limits:B,parsedConType:E}=Q;this.boy=A,this.fieldSizeLimit=v0(B,"fieldSize",1048576),this.fieldNameSizeLimit=v0(B,"fieldNameSize",100),this.fieldsLimit=v0(B,"fields",1/0);let I;for(var C=0,g=E.length;CC)this._key+=this.decoder.write(A.toString("binary",C,B));this._state="val",this._hitLimit=!1,this._checkingBytes=!0,this._val="",this._bytesVal=0,this._valTrunc=!1,this.decoder.reset(),C=B+1}else if(E!==void 0){++this._fields;let D,F=this._keyTrunc;if(E>C)D=this._key+=this.decoder.write(A.toString("binary",C,E));else D=this._key;if(this._hitLimit=!1,this._checkingBytes=!0,this._key="",this._bytesKey=0,this._keyTrunc=!1,this.decoder.reset(),D.length)this.boy.emit("field",WE(D,"binary",this.charset),"",F,!1);if(C=E+1,this._fields===this.fieldsLimit)return Q()}else if(this._hitLimit){if(I>C)this._key+=this.decoder.write(A.toString("binary",C,I));if(C=I,(this._bytesKey=this._key.length)===this.fieldNameSizeLimit)this._checkingBytes=!1,this._keyTrunc=!0}else{if(CC)this._val+=this.decoder.write(A.toString("binary",C,E));if(this.boy.emit("field",WE(this._key,"binary",this.charset),WE(this._val,"binary",this.charset),this._keyTrunc,this._valTrunc),this._state="key",this._hitLimit=!1,this._checkingBytes=!0,this._key="",this._bytesKey=0,this._keyTrunc=!1,this.decoder.reset(),C=E+1,this._fields===this.fieldsLimit)return Q()}else if(this._hitLimit){if(I>C)this._val+=this.decoder.write(A.toString("binary",C,I));if(C=I,this._val===""&&this.fieldSizeLimit===0||(this._bytesVal=this._val.length)===this.fieldSizeLimit)this._checkingBytes=!1,this._valTrunc=!0}else{if(C0)this.boy.emit("field",WE(this._key,"binary",this.charset),"",this._keyTrunc,!1);else if(this._state==="val")this.boy.emit("field",WE(this._key,"binary",this.charset),WE(this._val,"binary",this.charset),this._keyTrunc,this._valTrunc);this.boy._done=!0,this.boy.emit("finish")};BN.exports=GC});var gN=h((xx,MI)=>{var k0=M("node:stream").Writable,{inherits:_Z}=M("node:util"),OZ=y0(),IN=eJ(),CN=EN(),qZ=q0();function gB(A){if(!(this instanceof gB))return new gB(A);if(typeof A!=="object")throw new TypeError("Busboy expected an options-Object.");if(typeof A.headers!=="object")throw new TypeError("Busboy expected an options-Object with headers-attribute.");if(typeof A.headers["content-type"]!=="string")throw new TypeError("Missing Content-Type-header.");let{headers:Q,...B}=A;this.opts={autoDestroy:!1,...B},k0.call(this,this.opts),this._done=!1,this._parser=this.getParserByHeaders(Q),this._finished=!1}_Z(gB,k0);gB.prototype.emit=function(A){if(A==="finish"){if(!this._done){this._parser?.end();return}else if(this._finished)return;this._finished=!0}k0.prototype.emit.apply(this,arguments)};gB.prototype.getParserByHeaders=function(A){let Q=qZ(A["content-type"]),B={defCharset:this.opts.defCharset,fileHwm:this.opts.fileHwm,headers:A,highWaterMark:this.opts.highWaterMark,isPartAFile:this.opts.isPartAFile,limits:this.opts.limits,parsedConType:Q,preservePath:this.opts.preservePath};if(IN.detect.test(Q[0]))return new IN(this,B);if(CN.detect.test(Q[0]))return new CN(this,B);throw new Error("Unsupported Content-Type.")};gB.prototype._write=function(A,Q,B){this._parser.write(A,B)};MI.exports=gB;MI.exports.default=gB;MI.exports.Busboy=gB;MI.exports.Dicer=OZ});var SB=h(($x,RN)=>{var{MessageChannel:PZ,receiveMessageOnPort:fZ}=M("worker_threads"),DN=["GET","HEAD","POST"],vZ=new Set(DN),kZ=[101,204,205,304],FN=[301,302,303,307,308],bZ=new Set(FN),YN=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","5060","5061","6000","6566","6665","6666","6667","6668","6669","6697","10080"],mZ=new Set(YN),JN=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],cZ=new Set(JN),uZ=["follow","manual","error"],NN=["GET","HEAD","OPTIONS","TRACE"],dZ=new Set(NN),iZ=["navigate","same-origin","no-cors","cors"],lZ=["omit","same-origin","include"],pZ=["default","no-store","reload","no-cache","force-cache","only-if-cached"],nZ=["content-encoding","content-language","content-location","content-type","content-length"],aZ=["half"],UN=["CONNECT","TRACE","TRACK"],sZ=new Set(UN),GN=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],oZ=new Set(GN),rZ=globalThis.DOMException??(()=>{try{atob("~")}catch(A){return Object.getPrototypeOf(A).constructor}})(),ZE,tZ=globalThis.structuredClone??function A(Q,B=void 0){if(arguments.length===0)throw new TypeError("missing argument");if(!ZE)ZE=new PZ;return ZE.port1.unref(),ZE.port2.unref(),ZE.port1.postMessage(Q,B?.transfer),fZ(ZE.port2).message};RN.exports={DOMException:rZ,structuredClone:tZ,subresource:GN,forbiddenMethods:UN,requestBodyHeader:nZ,referrerPolicy:JN,requestRedirect:uZ,requestMode:iZ,requestCredentials:lZ,requestCache:pZ,redirectStatus:FN,corsSafeListedMethods:DN,nullBodyStatus:kZ,safeMethods:NN,badPorts:YN,requestDuplex:aZ,subresourceSet:oZ,badPortsSet:mZ,redirectStatusSet:bZ,corsSafeListedMethodsSet:vZ,safeMethodsSet:dZ,forbiddenMethodsSet:sZ,referrerPolicySet:cZ}});var XE=h((Tx,wN)=>{var b0=Symbol.for("undici.globalOrigin.1");function eZ(){return globalThis[b0]}function AX(A){if(A===void 0){Object.defineProperty(globalThis,b0,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let Q=new URL(A);if(Q.protocol!=="http:"&&Q.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${Q.protocol}`);Object.defineProperty(globalThis,b0,{value:Q,writable:!0,enumerable:!1,configurable:!1})}wN.exports={getGlobalOrigin:eZ,setGlobalOrigin:AX}});var zQ=h((jx,SN)=>{var{redirectStatusSet:QX,referrerPolicySet:BX,badPortsSet:EX}=SB(),{getGlobalOrigin:IX}=XE(),{performance:CX}=M("perf_hooks"),{isBlobLike:gX,toUSVString:DX,ReadableStreamFrom:FX}=a(),hE=M("assert"),{isUint8Array:YX}=M("util/types"),MN=[],RC;try{RC=M("crypto");let A=["sha256","sha384","sha512"];MN=RC.getHashes().filter((Q)=>A.includes(Q))}catch{}function LN(A){let Q=A.urlList,B=Q.length;return B===0?null:Q[B-1].toString()}function JX(A,Q){if(!QX.has(A.status))return null;let B=A.headersList.get("location");if(B!==null&&WN(B))B=new URL(B,LN(A));if(B&&!B.hash)B.hash=Q;return B}function VI(A){return A.urlList[A.urlList.length-1]}function NX(A){let Q=VI(A);if(hN(Q)&&EX.has(Q.port))return"blocked";return"allowed"}function UX(A){return A instanceof Error||(A?.constructor?.name==="Error"||A?.constructor?.name==="DOMException")}function GX(A){for(let Q=0;Q=32&&B<=126||B>=128&&B<=255))return!1}return!0}function RX(A){switch(A){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return A>=33&&A<=126}}function VN(A){if(A.length===0)return!1;for(let Q=0;Q0)for(let C=E.length;C!==0;C--){let g=E[C-1].trim();if(BX.has(g)){I=g;break}}if(I!=="")A.referrerPolicy=I}function LX(){return"allowed"}function VX(){return"success"}function WX(){return"success"}function ZX(A){let Q=null;Q=A.mode,A.headersList.set("sec-fetch-mode",Q)}function XX(A){let Q=A.origin;if(A.responseTainting==="cors"||A.mode==="websocket"){if(Q)A.headersList.append("origin",Q)}else if(A.method!=="GET"&&A.method!=="HEAD"){switch(A.referrerPolicy){case"no-referrer":Q=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":if(A.origin&&u0(A.origin)&&!u0(VI(A)))Q=null;break;case"same-origin":if(!wC(A,VI(A)))Q=null;break;default:}if(Q)A.headersList.append("origin",Q)}}function hX(A){return CX.now()}function SX(A){return{startTime:A.startTime??0,redirectStartTime:0,redirectEndTime:0,postRedirectStartTime:A.startTime??0,finalServiceWorkerStartTime:0,finalNetworkResponseStartTime:0,finalNetworkRequestStartTime:0,endTime:0,encodedBodySize:0,decodedBodySize:0,finalConnectionTimingInfo:null}}function KX(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function zX(A){return{referrerPolicy:A.referrerPolicy}}function HX(A){let Q=A.referrerPolicy;hE(Q);let B=null;if(A.referrer==="client"){let D=IX();if(!D||D.origin==="null")return"no-referrer";B=new URL(D)}else if(A.referrer instanceof URL)B=A.referrer;let E=m0(B),I=m0(B,!0);if(E.toString().length>4096)E=I;let C=wC(A,E),g=LI(E)&&!LI(A.url);switch(Q){case"origin":return I!=null?I:m0(B,!0);case"unsafe-url":return E;case"same-origin":return C?I:"no-referrer";case"origin-when-cross-origin":return C?E:I;case"strict-origin-when-cross-origin":{let D=VI(A);if(wC(E,D))return E;if(LI(E)&&!LI(D))return"no-referrer";return I}case"strict-origin":case"no-referrer-when-downgrade":default:return g?"no-referrer":I}}function m0(A,Q){if(hE(A instanceof URL),A.protocol==="file:"||A.protocol==="about:"||A.protocol==="blank:")return"no-referrer";if(A.username="",A.password="",A.hash="",Q)A.pathname="",A.search="";return A}function LI(A){if(!(A instanceof URL))return!1;if(A.href==="about:blank"||A.href==="about:srcdoc")return!0;if(A.protocol==="data:")return!0;if(A.protocol==="file:")return!0;return Q(A.origin);function Q(B){if(B==null||B==="null")return!1;let E=new URL(B);if(E.protocol==="https:"||E.protocol==="wss:")return!0;if(/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(E.hostname)||(E.hostname==="localhost"||E.hostname.includes("localhost."))||E.hostname.endsWith(".localhost"))return!0;return!1}}function xX(A,Q){if(RC===void 0)return!0;let B=ZN(Q);if(B==="no metadata")return!0;if(B.length===0)return!0;let E=TX(B),I=jX(B,E);for(let C of I){let{algo:g,hash:D}=C,F=RC.createHash(g).update(A).digest("base64");if(F[F.length-1]==="=")if(F[F.length-2]==="=")F=F.slice(0,-2);else F=F.slice(0,-1);if(yX(F,D))return!0}return!1}var $X=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function ZN(A){let Q=[],B=!0;for(let E of A.split(" ")){B=!1;let I=$X.exec(E);if(I===null||I.groups===void 0||I.groups.algo===void 0)continue;let C=I.groups.algo.toLowerCase();if(MN.includes(C))Q.push(I.groups)}if(B===!0)return"no metadata";return Q}function TX(A){let Q=A[0].algo;if(Q[3]==="5")return Q;for(let B=1;B{A=E,Q=I}),resolve:A,reject:Q}}function qX(A){return A.controller.state==="aborted"}function PX(A){return A.controller.state==="aborted"||A.controller.state==="terminated"}var d0={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT"};Object.setPrototypeOf(d0,null);function fX(A){return d0[A.toLowerCase()]??A}function vX(A){let Q=JSON.stringify(A);if(Q===void 0)throw new TypeError("Value is not JSON serializable");return hE(typeof Q==="string"),Q}var kX=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function bX(A,Q,B){let E={index:0,kind:B,target:A},I={next(){if(Object.getPrototypeOf(this)!==I)throw new TypeError(`'next' called on an object that does not implement interface ${Q} Iterator.`);let{index:C,kind:g,target:D}=E,F=D(),J=F.length;if(C>=J)return{value:void 0,done:!0};let Y=F[C];return E.index=C+1,mX(Y,g)},[Symbol.toStringTag]:`${Q} Iterator`};return Object.setPrototypeOf(I,kX),Object.setPrototypeOf({},I)}function mX(A,Q){let B;switch(Q){case"key":{B=A[0];break}case"value":{B=A[1];break}case"key+value":{B=A;break}}return{value:B,done:!1}}async function cX(A,Q,B){let E=Q,I=B,C;try{C=A.stream.getReader()}catch(g){I(g);return}try{let g=await XN(C);E(g)}catch(g){I(g)}}var c0=globalThis.ReadableStream;function uX(A){if(!c0)c0=M("stream/web").ReadableStream;return A instanceof c0||A[Symbol.toStringTag]==="ReadableStream"&&typeof A.tee==="function"}var dX=65535;function iX(A){if(A.lengthQ+String.fromCharCode(B),"")}function lX(A){try{A.close()}catch(Q){if(!Q.message.includes("Controller is already closed"))throw Q}}function pX(A){for(let Q=0;QObject.prototype.hasOwnProperty.call(A,Q));SN.exports={isAborted:qX,isCancelled:PX,createDeferredPromise:OX,ReadableStreamFrom:FX,toUSVString:DX,tryUpgradeRequestToAPotentiallyTrustworthyURL:_X,coarsenedSharedCurrentTime:hX,determineRequestsReferrer:HX,makePolicyContainer:KX,clonePolicyContainer:zX,appendFetchMetadata:ZX,appendRequestOriginHeader:XX,TAOCheck:WX,corsCheck:VX,crossOriginResourcePolicyCheck:LX,createOpaqueTimingInfo:SX,setRequestReferrerPolicyOnRedirect:MX,isValidHTTPToken:VN,requestBadPort:NX,requestCurrentURL:VI,responseURL:LN,responseLocationURL:JX,isBlobLike:gX,isURLPotentiallyTrustworthy:LI,isValidReasonPhrase:GX,sameOrigin:wC,normalizeMethod:fX,serializeJavascriptValueToJSONString:vX,makeIterator:bX,isValidHeaderName:wX,isValidHeaderValue:WN,hasOwn:aX,isErrorLike:UX,fullyReadBody:cX,bytesMatch:xX,isReadableStreamLike:uX,readableStreamClose:lX,isomorphicEncode:pX,isomorphicDecode:iX,urlIsLocal:nX,urlHasHttpsScheme:u0,urlIsHttpHttpsScheme:hN,readAllBytes:XN,normalizeMethodRecord:d0,parseMetadata:ZN}});var DB=h((yx,KN)=>{KN.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kGuard:Symbol("guard"),kRealm:Symbol("realm")}});var nA=h((_x,HN)=>{var{types:cQ}=M("util"),{hasOwn:zN,toUSVString:sX}=zQ(),K={};K.converters={};K.util={};K.errors={};K.errors.exception=function(A){return new TypeError(`${A.header}: ${A.message}`)};K.errors.conversionFailed=function(A){let Q=A.types.length===1?"":" one of",B=`${A.argument} could not be converted to${Q}: ${A.types.join(", ")}.`;return K.errors.exception({header:A.prefix,message:B})};K.errors.invalidArgument=function(A){return K.errors.exception({header:A.prefix,message:`"${A.value}" is an invalid ${A.type}.`})};K.brandCheck=function(A,Q,B=void 0){if(B?.strict!==!1&&!(A instanceof Q))throw new TypeError("Illegal invocation");else return A?.[Symbol.toStringTag]===Q.prototype[Symbol.toStringTag]};K.argumentLengthCheck=function({length:A},Q,B){if(AI)throw K.errors.exception({header:"Integer conversion",message:`Value must be between ${C}-${I}, got ${g}.`});return g}if(!Number.isNaN(g)&&E.clamp===!0){if(g=Math.min(Math.max(g,C),I),Math.floor(g)%2===0)g=Math.floor(g);else g=Math.ceil(g);return g}if(Number.isNaN(g)||g===0&&Object.is(0,g)||g===Number.POSITIVE_INFINITY||g===Number.NEGATIVE_INFINITY)return 0;if(g=K.util.IntegerPart(g),g=g%Math.pow(2,Q),B==="signed"&&g>=Math.pow(2,Q)-1)return g-Math.pow(2,Q);return g};K.util.IntegerPart=function(A){let Q=Math.floor(Math.abs(A));if(A<0)return-1*Q;return Q};K.sequenceConverter=function(A){return(Q)=>{if(K.util.Type(Q)!=="Object")throw K.errors.exception({header:"Sequence",message:`Value of type ${K.util.Type(Q)} is not an Object.`});let B=Q?.[Symbol.iterator]?.(),E=[];if(B===void 0||typeof B.next!=="function")throw K.errors.exception({header:"Sequence",message:"Object is not an iterator."});while(!0){let{done:I,value:C}=B.next();if(I)break;E.push(A(C))}return E}};K.recordConverter=function(A,Q){return(B)=>{if(K.util.Type(B)!=="Object")throw K.errors.exception({header:"Record",message:`Value of type ${K.util.Type(B)} is not an Object.`});let E={};if(!cQ.isProxy(B)){let C=Object.keys(B);for(let g of C){let D=A(g),F=Q(B[g]);E[D]=F}return E}let I=Reflect.ownKeys(B);for(let C of I)if(Reflect.getOwnPropertyDescriptor(B,C)?.enumerable){let D=A(C),F=Q(B[C]);E[D]=F}return E}};K.interfaceConverter=function(A){return(Q,B={})=>{if(B.strict!==!1&&!(Q instanceof A))throw K.errors.exception({header:A.name,message:`Expected ${Q} to be an instance of ${A.name}.`});return Q}};K.dictionaryConverter=function(A){return(Q)=>{let B=K.util.Type(Q),E={};if(B==="Null"||B==="Undefined")return E;else if(B!=="Object")throw K.errors.exception({header:"Dictionary",message:`Expected ${Q} to be one of: Null, Undefined, Object.`});for(let I of A){let{key:C,defaultValue:g,required:D,converter:F}=I;if(D===!0){if(!zN(Q,C))throw K.errors.exception({header:"Dictionary",message:`Missing required key "${C}".`})}let J=Q[C],Y=zN(I,"defaultValue");if(Y&&J!==null)J=J??g;if(D||Y||J!==void 0){if(J=F(J),I.allowedValues&&!I.allowedValues.includes(J))throw K.errors.exception({header:"Dictionary",message:`${J} is not an accepted type. Expected one of ${I.allowedValues.join(", ")}.`});E[C]=J}}return E}};K.nullableConverter=function(A){return(Q)=>{if(Q===null)return Q;return A(Q)}};K.converters.DOMString=function(A,Q={}){if(A===null&&Q.legacyNullToEmptyString)return"";if(typeof A==="symbol")throw new TypeError("Could not convert argument of type symbol to string.");return String(A)};K.converters.ByteString=function(A){let Q=K.converters.DOMString(A);for(let B=0;B255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${B} has a value of ${Q.charCodeAt(B)} which is greater than 255.`);return Q};K.converters.USVString=sX;K.converters.boolean=function(A){return Boolean(A)};K.converters.any=function(A){return A};K.converters["long long"]=function(A){return K.util.ConvertToInt(A,64,"signed")};K.converters["unsigned long long"]=function(A){return K.util.ConvertToInt(A,64,"unsigned")};K.converters["unsigned long"]=function(A){return K.util.ConvertToInt(A,32,"unsigned")};K.converters["unsigned short"]=function(A,Q){return K.util.ConvertToInt(A,16,"unsigned",Q)};K.converters.ArrayBuffer=function(A,Q={}){if(K.util.Type(A)!=="Object"||!cQ.isAnyArrayBuffer(A))throw K.errors.conversionFailed({prefix:`${A}`,argument:`${A}`,types:["ArrayBuffer"]});if(Q.allowShared===!1&&cQ.isSharedArrayBuffer(A))throw K.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});return A};K.converters.TypedArray=function(A,Q,B={}){if(K.util.Type(A)!=="Object"||!cQ.isTypedArray(A)||A.constructor.name!==Q.name)throw K.errors.conversionFailed({prefix:`${Q.name}`,argument:`${A}`,types:[Q.name]});if(B.allowShared===!1&&cQ.isSharedArrayBuffer(A.buffer))throw K.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});return A};K.converters.DataView=function(A,Q={}){if(K.util.Type(A)!=="Object"||!cQ.isDataView(A))throw K.errors.exception({header:"DataView",message:"Object is not a DataView."});if(Q.allowShared===!1&&cQ.isSharedArrayBuffer(A.buffer))throw K.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});return A};K.converters.BufferSource=function(A,Q={}){if(cQ.isAnyArrayBuffer(A))return K.converters.ArrayBuffer(A,Q);if(cQ.isTypedArray(A))return K.converters.TypedArray(A,A.constructor);if(cQ.isDataView(A))return K.converters.DataView(A,Q);throw new TypeError(`Could not convert ${A} to a BufferSource.`)};K.converters["sequence"]=K.sequenceConverter(K.converters.ByteString);K.converters["sequence>"]=K.sequenceConverter(K.converters["sequence"]);K.converters["record"]=K.recordConverter(K.converters.ByteString,K.converters.ByteString);HN.exports={webidl:K}});var fQ=h((Ox,_N)=>{var LC=M("assert"),{atob:oX}=M("buffer"),{isomorphicDecode:rX}=zQ(),tX=new TextEncoder,MC=/^[!#$%&'*+-.^_|~A-Za-z0-9]+$/,eX=/(\u000A|\u000D|\u0009|\u0020)/,A9=/[\u0009|\u0020-\u007E|\u0080-\u00FF]/;function Q9(A){LC(A.protocol==="data:");let Q=TN(A,!0);Q=Q.slice(5);let B={position:0},E=SE(",",Q,B),I=E.length;if(E=C9(E,!0,!0),B.position>=Q.length)return"failure";B.position++;let C=Q.slice(I+1),g=jN(C);if(/;(\u0020){0,}base64$/i.test(E)){let F=rX(g);if(g=E9(F),g==="failure")return"failure";E=E.slice(0,-6),E=E.replace(/(\u0020)+$/,""),E=E.slice(0,-1)}if(E.startsWith(";"))E="text/plain"+E;let D=l0(E);if(D==="failure")D=l0("text/plain;charset=US-ASCII");return{mimeType:D,body:g}}function TN(A,Q=!1){if(!Q)return A.href;let B=A.href,E=A.hash.length;return E===0?B:B.substring(0,B.length-E)}function VC(A,Q,B){let E="";while(B.positionA.length)return"failure";Q.position++;let E=SE(";",A,Q);if(E=i0(E,!1,!0),E.length===0||!MC.test(E))return"failure";let I=B.toLowerCase(),C=E.toLowerCase(),g={type:I,subtype:C,parameters:new Map,essence:`${I}/${C}`};while(Q.positioneX.test(J),A,Q);let D=VC((J)=>J!==";"&&J!=="=",A,Q);if(D=D.toLowerCase(),Q.positionA.length)break;let F=null;if(A[Q.position]==='"')F=yN(A,Q,!0),SE(";",A,Q);else if(F=SE(";",A,Q),F=i0(F,!1,!0),F.length===0)continue;if(D.length!==0&&MC.test(D)&&(F.length===0||A9.test(F))&&!g.parameters.has(D))g.parameters.set(D,F)}return g}function E9(A){if(A=A.replace(/[\u0009\u000A\u000C\u000D\u0020]/g,""),A.length%4===0)A=A.replace(/=?=$/,"");if(A.length%4===1)return"failure";if(/[^+/0-9A-Za-z]/.test(A))return"failure";let Q=oX(A),B=new Uint8Array(Q.length);for(let E=0;Eg!=='"'&&g!=="\\",A,Q),Q.position>=A.length)break;let C=A[Q.position];if(Q.position++,C==="\\"){if(Q.position>=A.length){I+="\\";break}I+=A[Q.position],Q.position++}else{LC(C==='"');break}}if(B)return I;return A.slice(E,Q.position)}function I9(A){LC(A!=="failure");let{parameters:Q,essence:B}=A,E=B;for(let[I,C]of Q.entries()){if(E+=";",E+=I,E+="=",!MC.test(C))C=C.replace(/(\\|")/g,"\\$1"),C='"'+C,C+='"';E+=C}return E}function xN(A){return A==="\r"||A===` -`||A==="\t"||A===" "}function i0(A,Q=!0,B=!0){let E=0,I=A.length-1;if(Q)for(;E0&&xN(A[I]);I--);return A.slice(E,I+1)}function $N(A){return A==="\r"||A===` -`||A==="\t"||A==="\f"||A===" "}function C9(A,Q=!0,B=!0){let E=0,I=A.length-1;if(Q)for(;E0&&$N(A[I]);I--);return A.slice(E,I+1)}_N.exports={dataURLProcessor:Q9,URLSerializer:TN,collectASequenceOfCodePoints:VC,collectASequenceOfCodePointsFast:SE,stringPercentDecode:jN,parseMIMEType:l0,collectAnHTTPQuotedString:yN,serializeAMimeType:I9}});var WC=h((qx,vN)=>{var{Blob:PN,File:ON}=M("buffer"),{types:p0}=M("util"),{kState:GQ}=DB(),{isBlobLike:fN}=zQ(),{webidl:r}=nA(),{parseMIMEType:g9,serializeAMimeType:D9}=fQ(),{kEnumerableProperty:qN}=a(),F9=new TextEncoder;class dB extends PN{constructor(A,Q,B={}){r.argumentLengthCheck(arguments,2,{header:"File constructor"}),A=r.converters["sequence"](A),Q=r.converters.USVString(Q),B=r.converters.FilePropertyBag(B);let E=Q,I=B.type,C;A:{if(I){if(I=g9(I),I==="failure"){I="";break A}I=D9(I).toLowerCase()}C=B.lastModified}super(Y9(A,B),{type:I});this[GQ]={name:E,lastModified:C,type:I}}get name(){return r.brandCheck(this,dB),this[GQ].name}get lastModified(){return r.brandCheck(this,dB),this[GQ].lastModified}get type(){return r.brandCheck(this,dB),this[GQ].type}}class uQ{constructor(A,Q,B={}){let E=Q,I=B.type,C=B.lastModified??Date.now();this[GQ]={blobLike:A,name:E,type:I,lastModified:C}}stream(...A){return r.brandCheck(this,uQ),this[GQ].blobLike.stream(...A)}arrayBuffer(...A){return r.brandCheck(this,uQ),this[GQ].blobLike.arrayBuffer(...A)}slice(...A){return r.brandCheck(this,uQ),this[GQ].blobLike.slice(...A)}text(...A){return r.brandCheck(this,uQ),this[GQ].blobLike.text(...A)}get size(){return r.brandCheck(this,uQ),this[GQ].blobLike.size}get type(){return r.brandCheck(this,uQ),this[GQ].blobLike.type}get name(){return r.brandCheck(this,uQ),this[GQ].name}get lastModified(){return r.brandCheck(this,uQ),this[GQ].lastModified}get[Symbol.toStringTag](){return"File"}}Object.defineProperties(dB.prototype,{[Symbol.toStringTag]:{value:"File",configurable:!0},name:qN,lastModified:qN});r.converters.Blob=r.interfaceConverter(PN);r.converters.BlobPart=function(A,Q){if(r.util.Type(A)==="Object"){if(fN(A))return r.converters.Blob(A,{strict:!1});if(ArrayBuffer.isView(A)||p0.isAnyArrayBuffer(A))return r.converters.BufferSource(A,Q)}return r.converters.USVString(A,Q)};r.converters["sequence"]=r.sequenceConverter(r.converters.BlobPart);r.converters.FilePropertyBag=r.dictionaryConverter([{key:"lastModified",converter:r.converters["long long"],get defaultValue(){return Date.now()}},{key:"type",converter:r.converters.DOMString,defaultValue:""},{key:"endings",converter:(A)=>{if(A=r.converters.DOMString(A),A=A.toLowerCase(),A!=="native")A="transparent";return A},defaultValue:"transparent"}]);function Y9(A,Q){let B=[];for(let E of A)if(typeof E==="string"){let I=E;if(Q.endings==="native")I=J9(I);B.push(F9.encode(I))}else if(p0.isAnyArrayBuffer(E)||p0.isTypedArray(E))if(!E.buffer)B.push(new Uint8Array(E));else B.push(new Uint8Array(E.buffer,E.byteOffset,E.byteLength));else if(fN(E))B.push(E);return B}function J9(A){let Q=` -`;if(process.platform==="win32")Q=`\r -`;return A.replace(/\r?\n/g,Q)}function N9(A){return ON&&A instanceof ON||A instanceof dB||A&&(typeof A.stream==="function"||typeof A.arrayBuffer==="function")&&A[Symbol.toStringTag]==="File"}vN.exports={File:dB,FileLike:uQ,isFileLike:N9}});var XC=h((Px,uN)=>{var{isBlobLike:ZC,toUSVString:U9,makeIterator:n0}=zQ(),{kState:mA}=DB(),{File:cN,FileLike:kN,isFileLike:G9}=WC(),{webidl:AA}=nA(),{Blob:R9,File:a0}=M("buffer"),bN=a0??cN;class aA{constructor(A){if(A!==void 0)throw AA.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[mA]=[]}append(A,Q,B=void 0){if(AA.brandCheck(this,aA),AA.argumentLengthCheck(arguments,2,{header:"FormData.append"}),arguments.length===3&&!ZC(Q))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");A=AA.converters.USVString(A),Q=ZC(Q)?AA.converters.Blob(Q,{strict:!1}):AA.converters.USVString(Q),B=arguments.length===3?AA.converters.USVString(B):void 0;let E=mN(A,Q,B);this[mA].push(E)}delete(A){AA.brandCheck(this,aA),AA.argumentLengthCheck(arguments,1,{header:"FormData.delete"}),A=AA.converters.USVString(A),this[mA]=this[mA].filter((Q)=>Q.name!==A)}get(A){AA.brandCheck(this,aA),AA.argumentLengthCheck(arguments,1,{header:"FormData.get"}),A=AA.converters.USVString(A);let Q=this[mA].findIndex((B)=>B.name===A);if(Q===-1)return null;return this[mA][Q].value}getAll(A){return AA.brandCheck(this,aA),AA.argumentLengthCheck(arguments,1,{header:"FormData.getAll"}),A=AA.converters.USVString(A),this[mA].filter((Q)=>Q.name===A).map((Q)=>Q.value)}has(A){return AA.brandCheck(this,aA),AA.argumentLengthCheck(arguments,1,{header:"FormData.has"}),A=AA.converters.USVString(A),this[mA].findIndex((Q)=>Q.name===A)!==-1}set(A,Q,B=void 0){if(AA.brandCheck(this,aA),AA.argumentLengthCheck(arguments,2,{header:"FormData.set"}),arguments.length===3&&!ZC(Q))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");A=AA.converters.USVString(A),Q=ZC(Q)?AA.converters.Blob(Q,{strict:!1}):AA.converters.USVString(Q),B=arguments.length===3?U9(B):void 0;let E=mN(A,Q,B),I=this[mA].findIndex((C)=>C.name===A);if(I!==-1)this[mA]=[...this[mA].slice(0,I),E,...this[mA].slice(I+1).filter((C)=>C.name!==A)];else this[mA].push(E)}entries(){return AA.brandCheck(this,aA),n0(()=>this[mA].map((A)=>[A.name,A.value]),"FormData","key+value")}keys(){return AA.brandCheck(this,aA),n0(()=>this[mA].map((A)=>[A.name,A.value]),"FormData","key")}values(){return AA.brandCheck(this,aA),n0(()=>this[mA].map((A)=>[A.name,A.value]),"FormData","value")}forEach(A,Q=globalThis){if(AA.brandCheck(this,aA),AA.argumentLengthCheck(arguments,1,{header:"FormData.forEach"}),typeof A!=="function")throw new TypeError("Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'.");for(let[B,E]of this)A.apply(Q,[E,B,this])}}aA.prototype[Symbol.iterator]=aA.prototype.entries;Object.defineProperties(aA.prototype,{[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function mN(A,Q,B){if(A=Buffer.from(A).toString("utf8"),typeof Q==="string")Q=Buffer.from(Q).toString("utf8");else{if(!G9(Q))Q=Q instanceof R9?new bN([Q],"blob",{type:Q.type}):new kN(Q,"blob",{type:Q.type});if(B!==void 0){let E={type:Q.type,lastModified:Q.lastModified};Q=a0&&Q instanceof a0||Q instanceof cN?new bN([Q],B,E):new kN(Q,B,E)}}return{name:A,value:Q}}uN.exports={FormData:aA}});var WI=h((fx,rN)=>{var w9=gN(),KE=a(),{ReadableStreamFrom:M9,isBlobLike:dN,isReadableStreamLike:L9,readableStreamClose:V9,createDeferredPromise:W9,fullyReadBody:Z9}=zQ(),{FormData:iN}=XC(),{kState:YB}=DB(),{webidl:s0}=nA(),{DOMException:nN,structuredClone:X9}=SB(),{Blob:h9,File:S9}=M("buffer"),{kBodyUsed:K9}=JA(),o0=M("assert"),{isErrored:z9}=a(),{isUint8Array:aN,isArrayBuffer:H9}=M("util/types"),{File:x9}=WC(),{parseMIMEType:$9,serializeAMimeType:T9}=fQ(),r0;try{let A=M("node:crypto");r0=(Q)=>A.randomInt(0,Q)}catch{r0=(A)=>Math.floor(Math.random(A))}var FB=globalThis.ReadableStream,lN=S9??x9,hC=new TextEncoder,j9=new TextDecoder;function sN(A,Q=!1){if(!FB)FB=M("stream/web").ReadableStream;let B=null;if(A instanceof FB)B=A;else if(dN(A))B=A.stream();else B=new FB({async pull(F){F.enqueue(typeof I==="string"?hC.encode(I):I),queueMicrotask(()=>V9(F))},start(){},type:void 0});o0(L9(B));let E=null,I=null,C=null,g=null;if(typeof A==="string")I=A,g="text/plain;charset=UTF-8";else if(A instanceof URLSearchParams)I=A.toString(),g="application/x-www-form-urlencoded;charset=UTF-8";else if(H9(A))I=new Uint8Array(A.slice());else if(ArrayBuffer.isView(A))I=new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength));else if(KE.isFormDataLike(A)){let F=`----formdata-undici-0${`${r0(100000000000)}`.padStart(11,"0")}`,J=`--${F}\r -Content-Disposition: form-data`;/*! formdata-polyfill. MIT License. Jimmy Wรคrting */let Y=(S)=>S.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),U=(S)=>S.replace(/\r?\n|\r/g,`\r -`),R=[],w=new Uint8Array([13,10]);C=0;let W=!1;for(let[S,_]of A)if(typeof _==="string"){let x=hC.encode(J+`; name="${Y(U(S))}"\r -\r -${U(_)}\r -`);R.push(x),C+=x.byteLength}else{let x=hC.encode(`${J}; name="${Y(U(S))}"`+(_.name?`; filename="${Y(_.name)}"`:"")+`\r -Content-Type: ${_.type||"application/octet-stream"}\r -\r -`);if(R.push(x,_,w),typeof _.size==="number")C+=x.byteLength+_.size+w.byteLength;else W=!0}let V=hC.encode(`--${F}--`);if(R.push(V),C+=V.byteLength,W)C=null;I=A,E=async function*(){for(let S of R)if(S.stream)yield*S.stream();else yield S},g="multipart/form-data; boundary="+F}else if(dN(A)){if(I=A,C=A.size,A.type)g=A.type}else if(typeof A[Symbol.asyncIterator]==="function"){if(Q)throw new TypeError("keepalive");if(KE.isDisturbed(A)||A.locked)throw new TypeError("Response body object should not be disturbed or locked");B=A instanceof FB?A:M9(A)}if(typeof I==="string"||KE.isBuffer(I))C=Buffer.byteLength(I);if(E!=null){let F;B=new FB({async start(){F=E(A)[Symbol.asyncIterator]()},async pull(J){let{value:Y,done:U}=await F.next();if(U)queueMicrotask(()=>{J.close()});else if(!z9(B))J.enqueue(new Uint8Array(Y));return J.desiredSize>0},async cancel(J){await F.return()},type:void 0})}return[{stream:B,source:I,length:C},g]}function y9(A,Q=!1){if(!FB)FB=M("stream/web").ReadableStream;if(A instanceof FB)o0(!KE.isDisturbed(A),"The body has already been consumed."),o0(!A.locked,"The stream is locked.");return sN(A,Q)}function _9(A){let[Q,B]=A.stream.tee(),E=X9(B,{transfer:[B]}),[,I]=E.tee();return A.stream=Q,{stream:I,length:A.length,source:A.source}}async function*pN(A){if(A)if(aN(A))yield A;else{let Q=A.stream;if(KE.isDisturbed(Q))throw new TypeError("The body has already been consumed.");if(Q.locked)throw new TypeError("The stream is locked.");Q[K9]=!0,yield*Q}}function t0(A){if(A.aborted)throw new nN("The operation was aborted.","AbortError")}function O9(A){return{blob(){return SC(this,(B)=>{let E=v9(this);if(E==="failure")E="";else if(E)E=T9(E);return new h9([B],{type:E})},A)},arrayBuffer(){return SC(this,(B)=>{return new Uint8Array(B).buffer},A)},text(){return SC(this,oN,A)},json(){return SC(this,f9,A)},async formData(){s0.brandCheck(this,A),t0(this[YB]);let B=this.headers.get("Content-Type");if(/multipart\/form-data/.test(B)){let E={};for(let[D,F]of this.headers)E[D.toLowerCase()]=F;let I=new iN,C;try{C=new w9({headers:E,preservePath:!0})}catch(D){throw new nN(`${D}`,"AbortError")}C.on("field",(D,F)=>{I.append(D,F)}),C.on("file",(D,F,J,Y,U)=>{let R=[];if(Y==="base64"||Y.toLowerCase()==="base64"){let w="";F.on("data",(W)=>{w+=W.toString().replace(/[\r\n]/gm,"");let V=w.length-w.length%4;R.push(Buffer.from(w.slice(0,V),"base64")),w=w.slice(V)}),F.on("end",()=>{R.push(Buffer.from(w,"base64")),I.append(D,new lN(R,J,{type:U}))})}else F.on("data",(w)=>{R.push(w)}),F.on("end",()=>{I.append(D,new lN(R,J,{type:U}))})});let g=new Promise((D,F)=>{C.on("finish",D),C.on("error",(J)=>F(new TypeError(J)))});if(this.body!==null)for await(let D of pN(this[YB].body))C.write(D);return C.end(),await g,I}else if(/application\/x-www-form-urlencoded/.test(B)){let E;try{let C="",g=new TextDecoder("utf-8",{ignoreBOM:!0});for await(let D of pN(this[YB].body)){if(!aN(D))throw new TypeError("Expected Uint8Array chunk");C+=g.decode(D,{stream:!0})}C+=g.decode(),E=new URLSearchParams(C)}catch(C){throw Object.assign(new TypeError,{cause:C})}let I=new iN;for(let[C,g]of E)I.append(C,g);return I}else throw await Promise.resolve(),t0(this[YB]),s0.errors.exception({header:`${A.name}.formData`,message:"Could not parse content as FormData."})}}}function q9(A){Object.assign(A.prototype,O9(A))}async function SC(A,Q,B){if(s0.brandCheck(A,B),t0(A[YB]),P9(A[YB].body))throw new TypeError("Body is unusable");let E=W9(),I=(g)=>E.reject(g),C=(g)=>{try{E.resolve(Q(g))}catch(D){I(D)}};if(A[YB].body==null)return C(new Uint8Array),E.promise;return await Z9(A[YB].body,C,I),E.promise}function P9(A){return A!=null&&(A.stream.locked||KE.isDisturbed(A.stream))}function oN(A){if(A.length===0)return"";if(A[0]===239&&A[1]===187&&A[2]===191)A=A.subarray(3);return j9.decode(A)}function f9(A){return JSON.parse(oN(A))}function v9(A){let{headersList:Q}=A[YB],B=Q.get("content-type");if(B===null)return"failure";return $9(B)}rN.exports={extractBody:sN,safelyExtractBody:y9,cloneBody:_9,mixinBody:q9}});var QU=h((vx,AU)=>{var{InvalidArgumentError:gA,NotSupportedError:k9}=EA(),JB=M("assert"),{kHTTP2BuildRequest:b9,kHTTP2CopyHeaders:m9,kHTTP1BuildRequest:c9}=JA(),QQ=a(),tN=/^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/,eN=/[^\t\x20-\x7e\x80-\xff]/,u9=/[^\u0021-\u00ff]/,vQ=Symbol("handler"),HA={},e0;try{let A=M("diagnostics_channel");HA.create=A.channel("undici:request:create"),HA.bodySent=A.channel("undici:request:bodySent"),HA.headers=A.channel("undici:request:headers"),HA.trailers=A.channel("undici:request:trailers"),HA.error=A.channel("undici:request:error")}catch{HA.create={hasSubscribers:!1},HA.bodySent={hasSubscribers:!1},HA.headers={hasSubscribers:!1},HA.trailers={hasSubscribers:!1},HA.error={hasSubscribers:!1}}class KC{constructor(A,{path:Q,method:B,body:E,headers:I,query:C,idempotent:g,blocking:D,upgrade:F,headersTimeout:J,bodyTimeout:Y,reset:U,throwOnError:R,expectContinue:w},W){if(typeof Q!=="string")throw new gA("path must be a string");else if(Q[0]!=="/"&&!(Q.startsWith("http://")||Q.startsWith("https://"))&&B!=="CONNECT")throw new gA("path must be an absolute URL or start with a slash");else if(u9.exec(Q)!==null)throw new gA("invalid request path");if(typeof B!=="string")throw new gA("method must be a string");else if(tN.exec(B)===null)throw new gA("invalid request method");if(F&&typeof F!=="string")throw new gA("upgrade must be a string");if(J!=null&&(!Number.isFinite(J)||J<0))throw new gA("invalid headersTimeout");if(Y!=null&&(!Number.isFinite(Y)||Y<0))throw new gA("invalid bodyTimeout");if(U!=null&&typeof U!=="boolean")throw new gA("invalid reset");if(w!=null&&typeof w!=="boolean")throw new gA("invalid expectContinue");if(this.headersTimeout=J,this.bodyTimeout=Y,this.throwOnError=R===!0,this.method=B,this.abort=null,E==null)this.body=null;else if(QQ.isStream(E)){this.body=E;let V=this.body._readableState;if(!V||!V.autoDestroy)this.endHandler=function S(){QQ.destroy(this)},this.body.on("end",this.endHandler);this.errorHandler=(S)=>{if(this.abort)this.abort(S);else this.error=S},this.body.on("error",this.errorHandler)}else if(QQ.isBuffer(E))this.body=E.byteLength?E:null;else if(ArrayBuffer.isView(E))this.body=E.buffer.byteLength?Buffer.from(E.buffer,E.byteOffset,E.byteLength):null;else if(E instanceof ArrayBuffer)this.body=E.byteLength?Buffer.from(E):null;else if(typeof E==="string")this.body=E.length?Buffer.from(E):null;else if(QQ.isFormDataLike(E)||QQ.isIterable(E)||QQ.isBlobLike(E))this.body=E;else throw new gA("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=F||null,this.path=C?QQ.buildURL(Q,C):Q,this.origin=A,this.idempotent=g==null?B==="HEAD"||B==="GET":g,this.blocking=D==null?!1:D,this.reset=U==null?null:U,this.host=null,this.contentLength=null,this.contentType=null,this.headers="",this.expectContinue=w!=null?w:!1,Array.isArray(I)){if(I.length%2!==0)throw new gA("headers array must be even");for(let V=0;V{var d9=M("events");class BU extends d9{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}}EU.exports=BU});var hI=h((bx,CU)=>{var i9=zC(),{ClientDestroyedError:AD,ClientClosedError:l9,InvalidArgumentError:zE}=EA(),{kDestroy:p9,kClose:n9,kDispatch:QD,kInterceptors:lB}=JA(),HE=Symbol("destroyed"),XI=Symbol("closed"),NB=Symbol("onDestroyed"),xE=Symbol("onClosed"),HC=Symbol("Intercepted Dispatch");class IU extends i9{constructor(){super();this[HE]=!1,this[NB]=null,this[XI]=!1,this[xE]=[]}get destroyed(){return this[HE]}get closed(){return this[XI]}get interceptors(){return this[lB]}set interceptors(A){if(A){for(let Q=A.length-1;Q>=0;Q--)if(typeof this[lB][Q]!=="function")throw new zE("interceptor must be an function")}this[lB]=A}close(A){if(A===void 0)return new Promise((B,E)=>{this.close((I,C)=>{return I?E(I):B(C)})});if(typeof A!=="function")throw new zE("invalid callback");if(this[HE]){queueMicrotask(()=>A(new AD,null));return}if(this[XI]){if(this[xE])this[xE].push(A);else queueMicrotask(()=>A(null,null));return}this[XI]=!0,this[xE].push(A);let Q=()=>{let B=this[xE];this[xE]=null;for(let E=0;Ethis.destroy()).then(()=>{queueMicrotask(Q)})}destroy(A,Q){if(typeof A==="function")Q=A,A=null;if(Q===void 0)return new Promise((E,I)=>{this.destroy(A,(C,g)=>{return C?I(C):E(g)})});if(typeof Q!=="function")throw new zE("invalid callback");if(this[HE]){if(this[NB])this[NB].push(Q);else queueMicrotask(()=>Q(null,null));return}if(!A)A=new AD;this[HE]=!0,this[NB]=this[NB]||[],this[NB].push(Q);let B=()=>{let E=this[NB];this[NB]=null;for(let I=0;I{queueMicrotask(B)})}[HC](A,Q){if(!this[lB]||this[lB].length===0)return this[HC]=this[QD],this[QD](A,Q);let B=this[QD].bind(this);for(let E=this[lB].length-1;E>=0;E--)B=this[lB][E](B);return this[HC]=B,B(A,Q)}dispatch(A,Q){if(!Q||typeof Q!=="object")throw new zE("handler must be an object");try{if(!A||typeof A!=="object")throw new zE("opts must be an object.");if(this[HE]||this[NB])throw new AD;if(this[XI])throw new l9;return this[HC](A,Q)}catch(B){if(typeof Q.onError!=="function")throw new zE("invalid onError method");return Q.onError(B),!1}}}CU.exports=IU});var SI=h((mx,FU)=>{var a9=M("net"),gU=M("assert"),DU=a(),{InvalidArgumentError:s9,ConnectTimeoutError:o9}=EA(),BD,ED;if(global.FinalizationRegistry&&!process.env.NODE_V8_COVERAGE)ED=class A{constructor(Q){this._maxCachedSessions=Q,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry((B)=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:E}=this._sessionCache.keys().next();this._sessionCache.delete(E)}this._sessionCache.set(Q,B)}};function r9({allowH2:A,maxCachedSessions:Q,socketPath:B,timeout:E,...I}){if(Q!=null&&(!Number.isInteger(Q)||Q<0))throw new s9("maxCachedSessions must be a positive integer or zero");let C={path:B,...I},g=new ED(Q==null?100:Q);return E=E==null?1e4:E,A=A!=null?A:!1,function D({hostname:F,host:J,protocol:Y,port:U,servername:R,localAddress:w,httpSocket:W},V){let S;if(Y==="https:"){if(!BD)BD=M("tls");R=R||C.servername||DU.getServerName(J)||null;let x=R||F,q=g.get(x)||null;gU(x),S=BD.connect({highWaterMark:16384,...C,servername:R,session:q,localAddress:w,ALPNProtocols:A?["http/1.1","h2"]:["http/1.1"],socket:W,port:U||443,host:F}),S.on("session",function(z){g.set(x,z)})}else gU(!W,"httpSocket can only be sent on TLS update"),S=a9.connect({highWaterMark:65536,...C,localAddress:w,port:U||80,host:F});if(C.keepAlive==null||C.keepAlive){let x=C.keepAliveInitialDelay===void 0?60000:C.keepAliveInitialDelay;S.setKeepAlive(!0,x)}let _=t9(()=>e9(S),E);return S.setNoDelay(!0).once(Y==="https:"?"secureConnect":"connect",function(){if(_(),V){let x=V;V=null,x(null,this)}}).on("error",function(x){if(_(),V){let q=V;V=null,q(x)}}),S}}function t9(A,Q){if(!Q)return()=>{};let B=null,E=null,I=setTimeout(()=>{B=setImmediate(()=>{if(process.platform==="win32")E=setImmediate(()=>A());else A()})},Q);return()=>{clearTimeout(I),clearImmediate(B),clearImmediate(E)}}function e9(A){DU.destroy(A,new o9)}FU.exports=r9});var NU=h((YU)=>{Object.defineProperty(YU,"__esModule",{value:!0});YU.enumToMap=void 0;function A1(A){let Q={};return Object.keys(A).forEach((B)=>{let E=A[B];if(typeof E==="number")Q[B]=E}),Q}YU.enumToMap=A1});var $U=h((WU)=>{Object.defineProperty(WU,"__esModule",{value:!0});WU.SPECIAL_HEADERS=WU.HEADER_STATE=WU.MINOR=WU.MAJOR=WU.CONNECTION_TOKEN_CHARS=WU.HEADER_CHARS=WU.TOKEN=WU.STRICT_TOKEN=WU.HEX=WU.URL_CHAR=WU.STRICT_URL_CHAR=WU.USERINFO_CHARS=WU.MARK=WU.ALPHANUM=WU.NUM=WU.HEX_MAP=WU.NUM_MAP=WU.ALPHA=WU.FINISH=WU.H_METHOD_MAP=WU.METHOD_MAP=WU.METHODS_RTSP=WU.METHODS_ICE=WU.METHODS_HTTP=WU.METHODS=WU.LENIENT_FLAGS=WU.FLAGS=WU.TYPE=WU.ERROR=void 0;var Q1=NU(),B1;(function(A){A[A.OK=0]="OK",A[A.INTERNAL=1]="INTERNAL",A[A.STRICT=2]="STRICT",A[A.LF_EXPECTED=3]="LF_EXPECTED",A[A.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",A[A.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",A[A.INVALID_METHOD=6]="INVALID_METHOD",A[A.INVALID_URL=7]="INVALID_URL",A[A.INVALID_CONSTANT=8]="INVALID_CONSTANT",A[A.INVALID_VERSION=9]="INVALID_VERSION",A[A.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",A[A.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",A[A.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",A[A.INVALID_STATUS=13]="INVALID_STATUS",A[A.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",A[A.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",A[A.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",A[A.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",A[A.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",A[A.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",A[A.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",A[A.PAUSED=21]="PAUSED",A[A.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",A[A.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",A[A.USER=24]="USER"})(B1=WU.ERROR||(WU.ERROR={}));var E1;(function(A){A[A.BOTH=0]="BOTH",A[A.REQUEST=1]="REQUEST",A[A.RESPONSE=2]="RESPONSE"})(E1=WU.TYPE||(WU.TYPE={}));var I1;(function(A){A[A.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",A[A.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",A[A.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",A[A.CHUNKED=8]="CHUNKED",A[A.UPGRADE=16]="UPGRADE",A[A.CONTENT_LENGTH=32]="CONTENT_LENGTH",A[A.SKIPBODY=64]="SKIPBODY",A[A.TRAILING=128]="TRAILING",A[A.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(I1=WU.FLAGS||(WU.FLAGS={}));var C1;(function(A){A[A.HEADERS=1]="HEADERS",A[A.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",A[A.KEEP_ALIVE=4]="KEEP_ALIVE"})(C1=WU.LENIENT_FLAGS||(WU.LENIENT_FLAGS={}));var f;(function(A){A[A.DELETE=0]="DELETE",A[A.GET=1]="GET",A[A.HEAD=2]="HEAD",A[A.POST=3]="POST",A[A.PUT=4]="PUT",A[A.CONNECT=5]="CONNECT",A[A.OPTIONS=6]="OPTIONS",A[A.TRACE=7]="TRACE",A[A.COPY=8]="COPY",A[A.LOCK=9]="LOCK",A[A.MKCOL=10]="MKCOL",A[A.MOVE=11]="MOVE",A[A.PROPFIND=12]="PROPFIND",A[A.PROPPATCH=13]="PROPPATCH",A[A.SEARCH=14]="SEARCH",A[A.UNLOCK=15]="UNLOCK",A[A.BIND=16]="BIND",A[A.REBIND=17]="REBIND",A[A.UNBIND=18]="UNBIND",A[A.ACL=19]="ACL",A[A.REPORT=20]="REPORT",A[A.MKACTIVITY=21]="MKACTIVITY",A[A.CHECKOUT=22]="CHECKOUT",A[A.MERGE=23]="MERGE",A[A["M-SEARCH"]=24]="M-SEARCH",A[A.NOTIFY=25]="NOTIFY",A[A.SUBSCRIBE=26]="SUBSCRIBE",A[A.UNSUBSCRIBE=27]="UNSUBSCRIBE",A[A.PATCH=28]="PATCH",A[A.PURGE=29]="PURGE",A[A.MKCALENDAR=30]="MKCALENDAR",A[A.LINK=31]="LINK",A[A.UNLINK=32]="UNLINK",A[A.SOURCE=33]="SOURCE",A[A.PRI=34]="PRI",A[A.DESCRIBE=35]="DESCRIBE",A[A.ANNOUNCE=36]="ANNOUNCE",A[A.SETUP=37]="SETUP",A[A.PLAY=38]="PLAY",A[A.PAUSE=39]="PAUSE",A[A.TEARDOWN=40]="TEARDOWN",A[A.GET_PARAMETER=41]="GET_PARAMETER",A[A.SET_PARAMETER=42]="SET_PARAMETER",A[A.REDIRECT=43]="REDIRECT",A[A.RECORD=44]="RECORD",A[A.FLUSH=45]="FLUSH"})(f=WU.METHODS||(WU.METHODS={}));WU.METHODS_HTTP=[f.DELETE,f.GET,f.HEAD,f.POST,f.PUT,f.CONNECT,f.OPTIONS,f.TRACE,f.COPY,f.LOCK,f.MKCOL,f.MOVE,f.PROPFIND,f.PROPPATCH,f.SEARCH,f.UNLOCK,f.BIND,f.REBIND,f.UNBIND,f.ACL,f.REPORT,f.MKACTIVITY,f.CHECKOUT,f.MERGE,f["M-SEARCH"],f.NOTIFY,f.SUBSCRIBE,f.UNSUBSCRIBE,f.PATCH,f.PURGE,f.MKCALENDAR,f.LINK,f.UNLINK,f.PRI,f.SOURCE];WU.METHODS_ICE=[f.SOURCE];WU.METHODS_RTSP=[f.OPTIONS,f.DESCRIBE,f.ANNOUNCE,f.SETUP,f.PLAY,f.PAUSE,f.TEARDOWN,f.GET_PARAMETER,f.SET_PARAMETER,f.REDIRECT,f.RECORD,f.FLUSH,f.GET,f.POST];WU.METHOD_MAP=Q1.enumToMap(f);WU.H_METHOD_MAP={};Object.keys(WU.METHOD_MAP).forEach((A)=>{if(/^H/.test(A))WU.H_METHOD_MAP[A]=WU.METHOD_MAP[A]});var g1;(function(A){A[A.SAFE=0]="SAFE",A[A.SAFE_WITH_CB=1]="SAFE_WITH_CB",A[A.UNSAFE=2]="UNSAFE"})(g1=WU.FINISH||(WU.FINISH={}));WU.ALPHA=[];for(let A=65;A<=90;A++)WU.ALPHA.push(String.fromCharCode(A)),WU.ALPHA.push(String.fromCharCode(A+32));WU.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};WU.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};WU.NUM=["0","1","2","3","4","5","6","7","8","9"];WU.ALPHANUM=WU.ALPHA.concat(WU.NUM);WU.MARK=["-","_",".","!","~","*","'","(",")"];WU.USERINFO_CHARS=WU.ALPHANUM.concat(WU.MARK).concat(["%",";",":","&","=","+","$",","]);WU.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(WU.ALPHANUM);WU.URL_CHAR=WU.STRICT_URL_CHAR.concat(["\t","\f"]);for(let A=128;A<=255;A++)WU.URL_CHAR.push(A);WU.HEX=WU.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);WU.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(WU.ALPHANUM);WU.TOKEN=WU.STRICT_TOKEN.concat([" "]);WU.HEADER_CHARS=["\t"];for(let A=32;A<=255;A++)if(A!==127)WU.HEADER_CHARS.push(A);WU.CONNECTION_TOKEN_CHARS=WU.HEADER_CHARS.filter((A)=>A!==44);WU.MAJOR=WU.NUM_MAP;WU.MINOR=WU.MAJOR;var $E;(function(A){A[A.GENERAL=0]="GENERAL",A[A.CONNECTION=1]="CONNECTION",A[A.CONTENT_LENGTH=2]="CONTENT_LENGTH",A[A.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",A[A.UPGRADE=4]="UPGRADE",A[A.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",A[A.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",A[A.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",A[A.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})($E=WU.HEADER_STATE||(WU.HEADER_STATE={}));WU.SPECIAL_HEADERS={connection:$E.CONNECTION,"content-length":$E.CONTENT_LENGTH,"proxy-connection":$E.CONNECTION,"transfer-encoding":$E.TRANSFER_ENCODING,upgrade:$E.UPGRADE}});var YD=h((dx,_U)=>{var UB=a(),{kBodyUsed:KI}=JA(),FD=M("assert"),{InvalidArgumentError:M1}=EA(),L1=M("events"),V1=[300,301,302,303,307,308],TU=Symbol("body");class DD{constructor(A){this[TU]=A,this[KI]=!1}async*[Symbol.asyncIterator](){FD(!this[KI],"disturbed"),this[KI]=!0,yield*this[TU]}}class yU{constructor(A,Q,B,E){if(Q!=null&&(!Number.isInteger(Q)||Q<0))throw new M1("maxRedirections must be a positive number");if(UB.validateHandler(E,B.method,B.upgrade),this.dispatch=A,this.location=null,this.abort=null,this.opts={...B,maxRedirections:0},this.maxRedirections=Q,this.handler=E,this.history=[],UB.isStream(this.opts.body)){if(UB.bodyLength(this.opts.body)===0)this.opts.body.on("data",function(){FD(!1)});if(typeof this.opts.body.readableDidRead!=="boolean")this.opts.body[KI]=!1,L1.prototype.on.call(this.opts.body,"data",function(){this[KI]=!0})}else if(this.opts.body&&typeof this.opts.body.pipeTo==="function")this.opts.body=new DD(this.opts.body);else if(this.opts.body&&typeof this.opts.body!=="string"&&!ArrayBuffer.isView(this.opts.body)&&UB.isIterable(this.opts.body))this.opts.body=new DD(this.opts.body)}onConnect(A){this.abort=A,this.handler.onConnect(A,{history:this.history})}onUpgrade(A,Q,B){this.handler.onUpgrade(A,Q,B)}onError(A){this.handler.onError(A)}onHeaders(A,Q,B,E){if(this.location=this.history.length>=this.maxRedirections||UB.isDisturbed(this.opts.body)?null:W1(A,Q),this.opts.origin)this.history.push(new URL(this.opts.path,this.opts.origin));if(!this.location)return this.handler.onHeaders(A,Q,B,E);let{origin:I,pathname:C,search:g}=UB.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),D=g?`${C}${g}`:C;if(this.opts.headers=Z1(this.opts.headers,A===303,this.opts.origin!==I),this.opts.path=D,this.opts.origin=I,this.opts.maxRedirections=0,this.opts.query=null,A===303&&this.opts.method!=="HEAD")this.opts.method="GET",this.opts.body=null}onData(A){if(this.location);else return this.handler.onData(A)}onComplete(A){if(this.location)this.location=null,this.abort=null,this.dispatch(this.opts,this);else this.handler.onComplete(A)}onBodySent(A){if(this.handler.onBodySent)this.handler.onBodySent(A)}}function W1(A,Q){if(V1.indexOf(A)===-1)return null;for(let B=0;B{var X1=YD();function h1({maxRedirections:A}){return(Q)=>{return function B(E,I){let{maxRedirections:C=A}=E;if(!C)return Q(E,I);let g=new X1(Q,C,E,I);return E={...E,maxRedirections:0},Q(E,g)}}}OU.exports=h1});var JD=h((lx,qU)=>{qU.exports="AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8="});var fU=h((px,PU)=>{PU.exports="AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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IAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQID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YWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw=="});var yI=h((nx,EG)=>{var T=M("assert"),bU=M("net"),S1=M("http"),{pipeline:K1}=M("stream"),P=a(),ND=$J(),GD=QU(),z1=hI(),{RequestContentLengthMismatchError:GB,ResponseContentLengthMismatchError:H1,InvalidArgumentError:SA,RequestAbortedError:WD,HeadersTimeoutError:x1,HeadersOverflowError:$1,SocketError:jE,InformationalError:pQ,BodyTimeoutError:T1,HTTPParserError:j1,ResponseExceededMaxSizeError:y1,ClientDestroyedError:_1}=EA(),O1=SI(),{kUrl:OA,kReset:sA,kServerName:KB,kClient:nQ,kBusy:RD,kParser:VA,kConnect:q1,kBlocking:yE,kResuming:pB,kRunning:LA,kPending:aB,kSize:nB,kWriting:RB,kQueue:NA,kConnected:P1,kConnecting:TE,kNeedDrain:HB,kNoRef:zI,kKeepAliveDefaultTimeout:wD,kHostHeader:mU,kPendingIdx:RQ,kRunningIdx:UA,kError:qA,kPipelining:xB,kSocket:WA,kKeepAliveTimeoutValue:$I,kMaxHeadersSize:_C,kKeepAliveMaxTimeout:cU,kKeepAliveTimeoutThreshold:uU,kHeadersTimeout:dU,kBodyTimeout:iU,kStrictContentLength:TI,kConnector:HI,kMaxRedirections:f1,kMaxRequests:jI,kCounter:lU,kClose:v1,kDestroy:k1,kDispatch:b1,kInterceptors:m1,kLocalAddress:xI,kMaxResponseSize:pU,kHTTPConnVersion:aQ,kHost:nU,kHTTP2Session:wQ,kHTTP2SessionState:qC,kHTTP2BuildRequest:c1,kHTTP2CopyHeaders:u1,kHTTP1BuildRequest:d1}=JA(),PC;try{PC=M("http2")}catch{PC={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:i1,HTTP2_HEADER_METHOD:l1,HTTP2_HEADER_PATH:p1,HTTP2_HEADER_SCHEME:n1,HTTP2_HEADER_CONTENT_LENGTH:a1,HTTP2_HEADER_EXPECT:s1,HTTP2_HEADER_STATUS:o1}}=PC,vU=!1,jC=Buffer[Symbol.species],zB=Symbol("kClosedResolve"),cA={};try{let A=M("diagnostics_channel");cA.sendHeaders=A.channel("undici:client:sendHeaders"),cA.beforeConnect=A.channel("undici:client:beforeConnect"),cA.connectError=A.channel("undici:client:connectError"),cA.connected=A.channel("undici:client:connected")}catch{cA.sendHeaders={hasSubscribers:!1},cA.beforeConnect={hasSubscribers:!1},cA.connectError={hasSubscribers:!1},cA.connected={hasSubscribers:!1}}class aU extends z1{constructor(A,{interceptors:Q,maxHeaderSize:B,headersTimeout:E,socketTimeout:I,requestTimeout:C,connectTimeout:g,bodyTimeout:D,idleTimeout:F,keepAlive:J,keepAliveTimeout:Y,maxKeepAliveTimeout:U,keepAliveMaxTimeout:R,keepAliveTimeoutThreshold:w,socketPath:W,pipelining:V,tls:S,strictContentLength:_,maxCachedSessions:x,maxRedirections:q,connect:z,maxRequestsPerClient:XA,localAddress:FA,maxResponseSize:RA,autoSelectFamily:lA,autoSelectFamilyAttemptTimeout:yA,allowH2:fA,maxConcurrentStreams:vA}={}){super();if(J!==void 0)throw new SA("unsupported keepAlive, use pipelining=0 instead");if(I!==void 0)throw new SA("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(C!==void 0)throw new SA("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(F!==void 0)throw new SA("unsupported idleTimeout, use keepAliveTimeout instead");if(U!==void 0)throw new SA("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(B!=null&&!Number.isFinite(B))throw new SA("invalid maxHeaderSize");if(W!=null&&typeof W!=="string")throw new SA("invalid socketPath");if(g!=null&&(!Number.isFinite(g)||g<0))throw new SA("invalid connectTimeout");if(Y!=null&&(!Number.isFinite(Y)||Y<=0))throw new SA("invalid keepAliveTimeout");if(R!=null&&(!Number.isFinite(R)||R<=0))throw new SA("invalid keepAliveMaxTimeout");if(w!=null&&!Number.isFinite(w))throw new SA("invalid keepAliveTimeoutThreshold");if(E!=null&&(!Number.isInteger(E)||E<0))throw new SA("headersTimeout must be a positive integer or zero");if(D!=null&&(!Number.isInteger(D)||D<0))throw new SA("bodyTimeout must be a positive integer or zero");if(z!=null&&typeof z!=="function"&&typeof z!=="object")throw new SA("connect must be a function or an object");if(q!=null&&(!Number.isInteger(q)||q<0))throw new SA("maxRedirections must be a positive number");if(XA!=null&&(!Number.isInteger(XA)||XA<0))throw new SA("maxRequestsPerClient must be a positive number");if(FA!=null&&(typeof FA!=="string"||bU.isIP(FA)===0))throw new SA("localAddress must be valid string IP address");if(RA!=null&&(!Number.isInteger(RA)||RA<-1))throw new SA("maxResponseSize must be a positive number");if(yA!=null&&(!Number.isInteger(yA)||yA<-1))throw new SA("autoSelectFamilyAttemptTimeout must be a positive number");if(fA!=null&&typeof fA!=="boolean")throw new SA("allowH2 must be a valid boolean value");if(vA!=null&&(typeof vA!=="number"||vA<1))throw new SA("maxConcurrentStreams must be a possitive integer, greater than 0");if(typeof z!=="function")z=O1({...S,maxCachedSessions:x,allowH2:fA,socketPath:W,timeout:g,...P.nodeHasAutoSelectFamily&&lA?{autoSelectFamily:lA,autoSelectFamilyAttemptTimeout:yA}:void 0,...z});this[m1]=Q&&Q.Client&&Array.isArray(Q.Client)?Q.Client:[Q4({maxRedirections:q})],this[OA]=P.parseOrigin(A),this[HI]=z,this[WA]=null,this[xB]=V!=null?V:1,this[_C]=B||S1.maxHeaderSize,this[wD]=Y==null?4000:Y,this[cU]=R==null?600000:R,this[uU]=w==null?1000:w,this[$I]=this[wD],this[KB]=null,this[xI]=FA!=null?FA:null,this[pB]=0,this[HB]=0,this[mU]=`host: ${this[OA].hostname}${this[OA].port?`:${this[OA].port}`:""}\r -`,this[iU]=D!=null?D:300000,this[dU]=E!=null?E:300000,this[TI]=_==null?!0:_,this[f1]=q,this[jI]=XA,this[zB]=null,this[pU]=RA>-1?RA:-1,this[aQ]="h1",this[wQ]=null,this[qC]=!fA?null:{openStreams:0,maxConcurrentStreams:vA!=null?vA:100},this[nU]=`${this[OA].hostname}${this[OA].port?`:${this[OA].port}`:""}`,this[NA]=[],this[UA]=0,this[RQ]=0}get pipelining(){return this[xB]}set pipelining(A){this[xB]=A,MQ(this,!0)}get[aB](){return this[NA].length-this[RQ]}get[LA](){return this[RQ]-this[UA]}get[nB](){return this[NA].length-this[UA]}get[P1](){return!!this[WA]&&!this[TE]&&!this[WA].destroyed}get[RD](){let A=this[WA];return A&&(A[sA]||A[RB]||A[yE])||this[nB]>=(this[xB]||1)||this[aB]>0}[q1](A){eU(this),this.once("connect",A)}[b1](A,Q){let B=A.origin||this[OA].origin,E=this[aQ]==="h2"?GD[c1](B,A,Q):GD[d1](B,A,Q);if(this[NA].push(E),this[pB]);else if(P.bodyLength(E.body)==null&&P.isIterable(E.body))this[pB]=1,process.nextTick(MQ,this);else MQ(this,!0);if(this[pB]&&this[HB]!==2&&this[RD])this[HB]=2;return this[HB]<2}async[v1](){return new Promise((A)=>{if(!this[nB])A(null);else this[zB]=A})}async[k1](A){return new Promise((Q)=>{let B=this[NA].splice(this[RQ]);for(let I=0;I{if(this[zB])this[zB](),this[zB]=null;Q()};if(this[wQ]!=null)P.destroy(this[wQ],A),this[wQ]=null,this[qC]=null;if(!this[WA])queueMicrotask(E);else P.destroy(this[WA].on("close",E),A);MQ(this)})}}function r1(A){T(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[WA][qA]=A,vC(this[nQ],A)}function t1(A,Q,B){let E=new pQ(`HTTP/2: "frameError" received - type ${A}, code ${Q}`);if(B===0)this[WA][qA]=E,vC(this[nQ],E)}function e1(){P.destroy(this,new jE("other side closed")),P.destroy(this[WA],new jE("other side closed"))}function A4(A){let Q=this[nQ],B=new pQ(`HTTP/2: "GOAWAY" frame received with code ${A}`);if(Q[WA]=null,Q[wQ]=null,Q.destroyed){T(this[aB]===0);let E=Q[NA].splice(Q[UA]);for(let I=0;I0){let E=Q[NA][Q[UA]];Q[NA][Q[UA]++]=null,oA(Q,E,B)}Q[RQ]=Q[UA],T(Q[LA]===0),Q.emit("disconnect",Q[OA],[Q],B),MQ(Q)}var dQ=$U(),Q4=TC(),B4=Buffer.alloc(0);async function E4(){let A=process.env.JEST_WORKER_ID?JD():void 0,Q;try{Q=await WebAssembly.compile(Buffer.from(fU(),"base64"))}catch(B){Q=await WebAssembly.compile(Buffer.from(A||JD(),"base64"))}return await WebAssembly.instantiate(Q,{env:{wasm_on_url:(B,E,I)=>{return 0},wasm_on_status:(B,E,I)=>{T.strictEqual($A.ptr,B);let C=E-lQ+iQ.byteOffset;return $A.onStatus(new jC(iQ.buffer,C,I))||0},wasm_on_message_begin:(B)=>{return T.strictEqual($A.ptr,B),$A.onMessageBegin()||0},wasm_on_header_field:(B,E,I)=>{T.strictEqual($A.ptr,B);let C=E-lQ+iQ.byteOffset;return $A.onHeaderField(new jC(iQ.buffer,C,I))||0},wasm_on_header_value:(B,E,I)=>{T.strictEqual($A.ptr,B);let C=E-lQ+iQ.byteOffset;return $A.onHeaderValue(new jC(iQ.buffer,C,I))||0},wasm_on_headers_complete:(B,E,I,C)=>{return T.strictEqual($A.ptr,B),$A.onHeadersComplete(E,Boolean(I),Boolean(C))||0},wasm_on_body:(B,E,I)=>{T.strictEqual($A.ptr,B);let C=E-lQ+iQ.byteOffset;return $A.onBody(new jC(iQ.buffer,C,I))||0},wasm_on_message_complete:(B)=>{return T.strictEqual($A.ptr,B),$A.onMessageComplete()||0}}})}var UD=null,MD=E4();MD.catch();var $A=null,iQ=null,yC=0,lQ=null,_E=1,OC=2,LD=3;class sU{constructor(A,Q,{exports:B}){T(Number.isFinite(A[_C])&&A[_C]>0),this.llhttp=B,this.ptr=this.llhttp.llhttp_alloc(dQ.TYPE.RESPONSE),this.client=A,this.socket=Q,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=A[_C],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=A[pU]}setTimeout(A,Q){if(this.timeoutType=Q,A!==this.timeoutValue){if(ND.clearTimeout(this.timeout),A){if(this.timeout=ND.setTimeout(I4,A,this),this.timeout.unref)this.timeout.unref()}else this.timeout=null;this.timeoutValue=A}else if(this.timeout){if(this.timeout.refresh)this.timeout.refresh()}}resume(){if(this.socket.destroyed||!this.paused)return;if(T(this.ptr!=null),T($A==null),this.llhttp.llhttp_resume(this.ptr),T(this.timeoutType===OC),this.timeout){if(this.timeout.refresh)this.timeout.refresh()}this.paused=!1,this.execute(this.socket.read()||B4),this.readMore()}readMore(){while(!this.paused&&this.ptr){let A=this.socket.read();if(A===null)break;this.execute(A)}}execute(A){T(this.ptr!=null),T($A==null),T(!this.paused);let{socket:Q,llhttp:B}=this;if(A.length>yC){if(lQ)B.free(lQ);yC=Math.ceil(A.length/4096)*4096,lQ=B.malloc(yC)}new Uint8Array(B.memory.buffer,lQ,yC).set(A);try{let E;try{iQ=A,$A=this,E=B.llhttp_execute(this.ptr,lQ,A.length)}catch(C){throw C}finally{$A=null,iQ=null}let I=B.llhttp_get_error_pos(this.ptr)-lQ;if(E===dQ.ERROR.PAUSED_UPGRADE)this.onUpgrade(A.slice(I));else if(E===dQ.ERROR.PAUSED)this.paused=!0,Q.unshift(A.slice(I));else if(E!==dQ.ERROR.OK){let C=B.llhttp_get_error_reason(this.ptr),g="";if(C){let D=new Uint8Array(B.memory.buffer,C).indexOf(0);g="Response does not match the HTTP/1.1 protocol ("+Buffer.from(B.memory.buffer,C,D).toString()+")"}throw new j1(g,dQ.ERROR[E],A.slice(I))}}catch(E){P.destroy(Q,E)}}destroy(){T(this.ptr!=null),T($A==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,ND.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(A){this.statusText=A.toString()}onMessageBegin(){let{socket:A,client:Q}=this;if(A.destroyed)return-1;if(!Q[NA][Q[UA]])return-1}onHeaderField(A){let Q=this.headers.length;if((Q&1)===0)this.headers.push(A);else this.headers[Q-1]=Buffer.concat([this.headers[Q-1],A]);this.trackHeader(A.length)}onHeaderValue(A){let Q=this.headers.length;if((Q&1)===1)this.headers.push(A),Q+=1;else this.headers[Q-1]=Buffer.concat([this.headers[Q-1],A]);let B=this.headers[Q-2];if(B.length===10&&B.toString().toLowerCase()==="keep-alive")this.keepAlive+=A.toString();else if(B.length===10&&B.toString().toLowerCase()==="connection")this.connection+=A.toString();else if(B.length===14&&B.toString().toLowerCase()==="content-length")this.contentLength+=A.toString();this.trackHeader(A.length)}trackHeader(A){if(this.headersSize+=A,this.headersSize>=this.headersMaxSize)P.destroy(this.socket,new $1)}onUpgrade(A){let{upgrade:Q,client:B,socket:E,headers:I,statusCode:C}=this;T(Q);let g=B[NA][B[UA]];T(g),T(!E.destroyed),T(E===B[WA]),T(!this.paused),T(g.upgrade||g.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,T(this.headers.length%2===0),this.headers=[],this.headersSize=0,E.unshift(A),E[VA].destroy(),E[VA]=null,E[nQ]=null,E[qA]=null,E.removeListener("error",rU).removeListener("readable",oU).removeListener("end",tU).removeListener("close",VD),B[WA]=null,B[NA][B[UA]++]=null,B.emit("disconnect",B[OA],[B],new pQ("upgrade"));try{g.onUpgrade(C,I,E)}catch(D){P.destroy(E,D)}MQ(B)}onHeadersComplete(A,Q,B){let{client:E,socket:I,headers:C,statusText:g}=this;if(I.destroyed)return-1;let D=E[NA][E[UA]];if(!D)return-1;if(T(!this.upgrade),T(this.statusCode<200),A===100)return P.destroy(I,new jE("bad response",P.getSocketInfo(I))),-1;if(Q&&!D.upgrade)return P.destroy(I,new jE("bad upgrade",P.getSocketInfo(I))),-1;if(T.strictEqual(this.timeoutType,_E),this.statusCode=A,this.shouldKeepAlive=B||D.method==="HEAD"&&!I[sA]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let J=D.bodyTimeout!=null?D.bodyTimeout:E[iU];this.setTimeout(J,OC)}else if(this.timeout){if(this.timeout.refresh)this.timeout.refresh()}if(D.method==="CONNECT")return T(E[LA]===1),this.upgrade=!0,2;if(Q)return T(E[LA]===1),this.upgrade=!0,2;if(T(this.headers.length%2===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&E[xB]){let J=this.keepAlive?P.parseKeepAliveTimeout(this.keepAlive):null;if(J!=null){let Y=Math.min(J-E[uU],E[cU]);if(Y<=0)I[sA]=!0;else E[$I]=Y}else E[$I]=E[wD]}else I[sA]=!0;let F=D.onHeaders(A,C,this.resume,g)===!1;if(D.aborted)return-1;if(D.method==="HEAD")return 1;if(A<200)return 1;if(I[yE])I[yE]=!1,MQ(E);return F?dQ.ERROR.PAUSED:0}onBody(A){let{client:Q,socket:B,statusCode:E,maxResponseSize:I}=this;if(B.destroyed)return-1;let C=Q[NA][Q[UA]];if(T(C),T.strictEqual(this.timeoutType,OC),this.timeout){if(this.timeout.refresh)this.timeout.refresh()}if(T(E>=200),I>-1&&this.bytesRead+A.length>I)return P.destroy(B,new y1),-1;if(this.bytesRead+=A.length,C.onData(A)===!1)return dQ.ERROR.PAUSED}onMessageComplete(){let{client:A,socket:Q,statusCode:B,upgrade:E,headers:I,contentLength:C,bytesRead:g,shouldKeepAlive:D}=this;if(Q.destroyed&&(!B||D))return-1;if(E)return;let F=A[NA][A[UA]];if(T(F),T(B>=100),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",T(this.headers.length%2===0),this.headers=[],this.headersSize=0,B<200)return;if(F.method!=="HEAD"&&C&&g!==parseInt(C,10))return P.destroy(Q,new H1),-1;if(F.onComplete(I),A[NA][A[UA]++]=null,Q[RB])return T.strictEqual(A[LA],0),P.destroy(Q,new pQ("reset")),dQ.ERROR.PAUSED;else if(!D)return P.destroy(Q,new pQ("reset")),dQ.ERROR.PAUSED;else if(Q[sA]&&A[LA]===0)return P.destroy(Q,new pQ("reset")),dQ.ERROR.PAUSED;else if(A[xB]===1)setImmediate(MQ,A);else MQ(A)}}function I4(A){let{socket:Q,timeoutType:B,client:E}=A;if(B===_E){if(!Q[RB]||Q.writableNeedDrain||E[LA]>1)T(!A.paused,"cannot be paused while waiting for headers"),P.destroy(Q,new x1)}else if(B===OC){if(!A.paused)P.destroy(Q,new T1)}else if(B===LD)T(E[LA]===0&&E[$I]),P.destroy(Q,new pQ("socket idle timeout"))}function oU(){let{[VA]:A}=this;if(A)A.readMore()}function rU(A){let{[nQ]:Q,[VA]:B}=this;if(T(A.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),Q[aQ]!=="h2"){if(A.code==="ECONNRESET"&&B.statusCode&&!B.shouldKeepAlive){B.onMessageComplete();return}}this[qA]=A,vC(this[nQ],A)}function vC(A,Q){if(A[LA]===0&&Q.code!=="UND_ERR_INFO"&&Q.code!=="UND_ERR_SOCKET"){T(A[RQ]===A[UA]);let B=A[NA].splice(A[UA]);for(let E=0;E0&&B.code!=="UND_ERR_INFO"){let E=A[NA][A[UA]];A[NA][A[UA]++]=null,oA(A,E,B)}A[RQ]=A[UA],T(A[LA]===0),A.emit("disconnect",A[OA],[A],B),MQ(A)}async function eU(A){T(!A[TE]),T(!A[WA]);let{host:Q,hostname:B,protocol:E,port:I}=A[OA];if(B[0]==="["){let C=B.indexOf("]");T(C!==-1);let g=B.substring(1,C);T(bU.isIP(g)),B=g}if(A[TE]=!0,cA.beforeConnect.hasSubscribers)cA.beforeConnect.publish({connectParams:{host:Q,hostname:B,protocol:E,port:I,servername:A[KB],localAddress:A[xI]},connector:A[HI]});try{let C=await new Promise((D,F)=>{A[HI]({host:Q,hostname:B,protocol:E,port:I,servername:A[KB],localAddress:A[xI]},(J,Y)=>{if(J)F(J);else D(Y)})});if(A.destroyed){P.destroy(C.on("error",()=>{}),new _1);return}if(A[TE]=!1,T(C),C.alpnProtocol==="h2"){if(!vU)vU=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"});let D=PC.connect(A[OA],{createConnection:()=>C,peerMaxConcurrentStreams:A[qC].maxConcurrentStreams});A[aQ]="h2",D[nQ]=A,D[WA]=C,D.on("error",r1),D.on("frameError",t1),D.on("end",e1),D.on("goaway",A4),D.on("close",VD),D.unref(),A[wQ]=D,C[wQ]=D}else{if(!UD)UD=await MD,MD=null;C[zI]=!1,C[RB]=!1,C[sA]=!1,C[yE]=!1,C[VA]=new sU(A,C,UD)}if(C[lU]=0,C[jI]=A[jI],C[nQ]=A,C[qA]=null,C.on("error",rU).on("readable",oU).on("end",tU).on("close",VD),A[WA]=C,cA.connected.hasSubscribers)cA.connected.publish({connectParams:{host:Q,hostname:B,protocol:E,port:I,servername:A[KB],localAddress:A[xI]},connector:A[HI],socket:C});A.emit("connect",A[OA],[A])}catch(C){if(A.destroyed)return;if(A[TE]=!1,cA.connectError.hasSubscribers)cA.connectError.publish({connectParams:{host:Q,hostname:B,protocol:E,port:I,servername:A[KB],localAddress:A[xI]},connector:A[HI],error:C});if(C.code==="ERR_TLS_CERT_ALTNAME_INVALID"){T(A[LA]===0);while(A[aB]>0&&A[NA][A[RQ]].servername===A[KB]){let g=A[NA][A[RQ]++];oA(A,g,C)}}else vC(A,C);A.emit("connectionError",A[OA],[A],C)}MQ(A)}function kU(A){A[HB]=0,A.emit("drain",A[OA],[A])}function MQ(A,Q){if(A[pB]===2)return;if(A[pB]=2,C4(A,Q),A[pB]=0,A[UA]>256)A[NA].splice(0,A[UA]),A[RQ]-=A[UA],A[UA]=0}function C4(A,Q){while(!0){if(A.destroyed){T(A[aB]===0);return}if(A[zB]&&!A[nB]){A[zB](),A[zB]=null;return}let B=A[WA];if(B&&!B.destroyed&&B.alpnProtocol!=="h2"){if(A[nB]===0){if(!B[zI]&&B.unref)B.unref(),B[zI]=!0}else if(B[zI]&&B.ref)B.ref(),B[zI]=!1;if(A[nB]===0){if(B[VA].timeoutType!==LD)B[VA].setTimeout(A[$I],LD)}else if(A[LA]>0&&B[VA].statusCode<200){if(B[VA].timeoutType!==_E){let I=A[NA][A[UA]],C=I.headersTimeout!=null?I.headersTimeout:A[dU];B[VA].setTimeout(C,_E)}}}if(A[RD])A[HB]=2;else if(A[HB]===2){if(Q)A[HB]=1,process.nextTick(kU,A);else kU(A);continue}if(A[aB]===0)return;if(A[LA]>=(A[xB]||1))return;let E=A[NA][A[RQ]];if(A[OA].protocol==="https:"&&A[KB]!==E.servername){if(A[LA]>0)return;if(A[KB]=E.servername,B&&B.servername!==E.servername){P.destroy(B,new pQ("servername changed"));return}}if(A[TE])return;if(!B&&!A[wQ]){eU(A);return}if(B.destroyed||B[RB]||B[sA]||B[yE])return;if(A[LA]>0&&!E.idempotent)return;if(A[LA]>0&&(E.upgrade||E.method==="CONNECT"))return;if(A[LA]>0&&P.bodyLength(E.body)!==0&&(P.isStream(E.body)||P.isAsyncIterable(E.body)))return;if(!E.aborted&&g4(A,E))A[RQ]++;else A[NA].splice(A[RQ],1)}}function AG(A){return A!=="GET"&&A!=="HEAD"&&A!=="OPTIONS"&&A!=="TRACE"&&A!=="CONNECT"}function g4(A,Q){if(A[aQ]==="h2"){D4(A,A[wQ],Q);return}let{body:B,method:E,path:I,host:C,upgrade:g,headers:D,blocking:F,reset:J}=Q,Y=E==="PUT"||E==="POST"||E==="PATCH";if(B&&typeof B.read==="function")B.read(0);let U=P.bodyLength(B),R=U;if(R===null)R=Q.contentLength;if(R===0&&!Y)R=null;if(AG(E)&&R>0&&Q.contentLength!==null&&Q.contentLength!==R){if(A[TI])return oA(A,Q,new GB),!1;process.emitWarning(new GB)}let w=A[WA];try{Q.onConnect((V)=>{if(Q.aborted||Q.completed)return;oA(A,Q,V||new WD),P.destroy(w,new pQ("aborted"))})}catch(V){oA(A,Q,V)}if(Q.aborted)return!1;if(E==="HEAD")w[sA]=!0;if(g||E==="CONNECT")w[sA]=!0;if(J!=null)w[sA]=J;if(A[jI]&&w[lU]++>=A[jI])w[sA]=!0;if(F)w[yE]=!0;let W=`${E} ${I} HTTP/1.1\r -`;if(typeof C==="string")W+=`host: ${C}\r -`;else W+=A[mU];if(g)W+=`connection: upgrade\r -upgrade: ${g}\r -`;else if(A[xB]&&!w[sA])W+=`connection: keep-alive\r -`;else W+=`connection: close\r -`;if(D)W+=D;if(cA.sendHeaders.hasSubscribers)cA.sendHeaders.publish({request:Q,headers:W,socket:w});if(!B||U===0){if(R===0)w.write(`${W}content-length: 0\r -\r -`,"latin1");else T(R===null,"no body must not have content length"),w.write(`${W}\r -`,"latin1");Q.onRequestSent()}else if(P.isBuffer(B)){if(T(R===B.byteLength,"buffer body must have content length"),w.cork(),w.write(`${W}content-length: ${R}\r -\r -`,"latin1"),w.write(B),w.uncork(),Q.onBodySent(B),Q.onRequestSent(),!Y)w[sA]=!0}else if(P.isBlobLike(B))if(typeof B.stream==="function")fC({body:B.stream(),client:A,request:Q,socket:w,contentLength:R,header:W,expectsPayload:Y});else BG({body:B,client:A,request:Q,socket:w,contentLength:R,header:W,expectsPayload:Y});else if(P.isStream(B))QG({body:B,client:A,request:Q,socket:w,contentLength:R,header:W,expectsPayload:Y});else if(P.isIterable(B))fC({body:B,client:A,request:Q,socket:w,contentLength:R,header:W,expectsPayload:Y});else T(!1);return!0}function D4(A,Q,B){let{body:E,method:I,path:C,host:g,upgrade:D,expectContinue:F,signal:J,headers:Y}=B,U;if(typeof Y==="string")U=GD[u1](Y.trim());else U=Y;if(D)return oA(A,B,new Error("Upgrade not supported for H2")),!1;try{B.onConnect((x)=>{if(B.aborted||B.completed)return;oA(A,B,x||new WD)})}catch(x){oA(A,B,x)}if(B.aborted)return!1;let R,w=A[qC];if(U[i1]=g||A[nU],U[l1]=I,I==="CONNECT"){if(Q.ref(),R=Q.request(U,{endStream:!1,signal:J}),R.id&&!R.pending)B.onUpgrade(null,null,R),++w.openStreams;else R.once("ready",()=>{B.onUpgrade(null,null,R),++w.openStreams});return R.once("close",()=>{if(w.openStreams-=1,w.openStreams===0)Q.unref()}),!0}U[p1]=C,U[n1]="https";let W=I==="PUT"||I==="POST"||I==="PATCH";if(E&&typeof E.read==="function")E.read(0);let V=P.bodyLength(E);if(V==null)V=B.contentLength;if(V===0||!W)V=null;if(AG(I)&&V>0&&B.contentLength!=null&&B.contentLength!==V){if(A[TI])return oA(A,B,new GB),!1;process.emitWarning(new GB)}if(V!=null)T(E,"no body must not have content length"),U[a1]=`${V}`;Q.ref();let S=I==="GET"||I==="HEAD";if(F)U[s1]="100-continue",R=Q.request(U,{endStream:S,signal:J}),R.once("continue",_);else R=Q.request(U,{endStream:S,signal:J}),_();return++w.openStreams,R.once("response",(x)=>{let{[o1]:q,...z}=x;if(B.onHeaders(Number(q),z,R.resume.bind(R),"")===!1)R.pause()}),R.once("end",()=>{B.onComplete([])}),R.on("data",(x)=>{if(B.onData(x)===!1)R.pause()}),R.once("close",()=>{if(w.openStreams-=1,w.openStreams===0)Q.unref()}),R.once("error",function(x){if(A[wQ]&&!A[wQ].destroyed&&!this.closed&&!this.destroyed)w.streams-=1,P.destroy(R,x)}),R.once("frameError",(x,q)=>{let z=new pQ(`HTTP/2: "frameError" received - type ${x}, code ${q}`);if(oA(A,B,z),A[wQ]&&!A[wQ].destroyed&&!this.closed&&!this.destroyed)w.streams-=1,P.destroy(R,z)}),!0;function _(){if(!E)B.onRequestSent();else if(P.isBuffer(E))T(V===E.byteLength,"buffer body must have content length"),R.cork(),R.write(E),R.uncork(),R.end(),B.onBodySent(E),B.onRequestSent();else if(P.isBlobLike(E))if(typeof E.stream==="function")fC({client:A,request:B,contentLength:V,h2stream:R,expectsPayload:W,body:E.stream(),socket:A[WA],header:""});else BG({body:E,client:A,request:B,contentLength:V,expectsPayload:W,h2stream:R,header:"",socket:A[WA]});else if(P.isStream(E))QG({body:E,client:A,request:B,contentLength:V,expectsPayload:W,socket:A[WA],h2stream:R,header:""});else if(P.isIterable(E))fC({body:E,client:A,request:B,contentLength:V,expectsPayload:W,header:"",h2stream:R,socket:A[WA]});else T(!1)}}function QG({h2stream:A,body:Q,client:B,request:E,socket:I,contentLength:C,header:g,expectsPayload:D}){if(T(C!==0||B[LA]===0,"stream body cannot be pipelined"),B[aQ]==="h2"){let V=function(S){E.onBodySent(S)},W=K1(Q,A,(S)=>{if(S)P.destroy(Q,S),P.destroy(A,S);else E.onRequestSent()});W.on("data",V),W.once("end",()=>{W.removeListener("data",V),P.destroy(W)});return}let F=!1,J=new ZD({socket:I,request:E,contentLength:C,client:B,expectsPayload:D,header:g}),Y=function(W){if(F)return;try{if(!J.write(W)&&this.pause)this.pause()}catch(V){P.destroy(this,V)}},U=function(){if(F)return;if(Q.resume)Q.resume()},R=function(){if(F)return;let W=new WD;queueMicrotask(()=>w(W))},w=function(W){if(F)return;if(F=!0,T(I.destroyed||I[RB]&&B[LA]<=1),I.off("drain",U).off("error",w),Q.removeListener("data",Y).removeListener("end",w).removeListener("error",w).removeListener("close",R),!W)try{J.end()}catch(V){W=V}if(J.destroy(W),W&&(W.code!=="UND_ERR_INFO"||W.message!=="reset"))P.destroy(Q,W);else P.destroy(Q)};if(Q.on("data",Y).on("end",w).on("error",w).on("close",R),Q.resume)Q.resume();I.on("drain",U).on("error",w)}async function BG({h2stream:A,body:Q,client:B,request:E,socket:I,contentLength:C,header:g,expectsPayload:D}){T(C===Q.size,"blob body must have content length");let F=B[aQ]==="h2";try{if(C!=null&&C!==Q.size)throw new GB;let J=Buffer.from(await Q.arrayBuffer());if(F)A.cork(),A.write(J),A.uncork();else I.cork(),I.write(`${g}content-length: ${C}\r -\r -`,"latin1"),I.write(J),I.uncork();if(E.onBodySent(J),E.onRequestSent(),!D)I[sA]=!0;MQ(B)}catch(J){P.destroy(F?A:I,J)}}async function fC({h2stream:A,body:Q,client:B,request:E,socket:I,contentLength:C,header:g,expectsPayload:D}){T(C!==0||B[LA]===0,"iterator body cannot be pipelined");let F=null;function J(){if(F){let R=F;F=null,R()}}let Y=()=>new Promise((R,w)=>{if(T(F===null),I[qA])w(I[qA]);else F=R});if(B[aQ]==="h2"){A.on("close",J).on("drain",J);try{for await(let R of Q){if(I[qA])throw I[qA];let w=A.write(R);if(E.onBodySent(R),!w)await Y()}}catch(R){A.destroy(R)}finally{E.onRequestSent(),A.end(),A.off("close",J).off("drain",J)}return}I.on("close",J).on("drain",J);let U=new ZD({socket:I,request:E,contentLength:C,client:B,expectsPayload:D,header:g});try{for await(let R of Q){if(I[qA])throw I[qA];if(!U.write(R))await Y()}U.end()}catch(R){U.destroy(R)}finally{I.off("close",J).off("drain",J)}}class ZD{constructor({socket:A,request:Q,contentLength:B,client:E,expectsPayload:I,header:C}){this.socket=A,this.request=Q,this.contentLength=B,this.client=E,this.bytesWritten=0,this.expectsPayload=I,this.header=C,A[RB]=!0}write(A){let{socket:Q,request:B,contentLength:E,client:I,bytesWritten:C,expectsPayload:g,header:D}=this;if(Q[qA])throw Q[qA];if(Q.destroyed)return!1;let F=Buffer.byteLength(A);if(!F)return!0;if(E!==null&&C+F>E){if(I[TI])throw new GB;process.emitWarning(new GB)}if(Q.cork(),C===0){if(!g)Q[sA]=!0;if(E===null)Q.write(`${D}transfer-encoding: chunked\r -`,"latin1");else Q.write(`${D}content-length: ${E}\r -\r -`,"latin1")}if(E===null)Q.write(`\r -${F.toString(16)}\r -`,"latin1");this.bytesWritten+=F;let J=Q.write(A);if(Q.uncork(),B.onBodySent(A),!J){if(Q[VA].timeout&&Q[VA].timeoutType===_E){if(Q[VA].timeout.refresh)Q[VA].timeout.refresh()}}return J}end(){let{socket:A,contentLength:Q,client:B,bytesWritten:E,expectsPayload:I,header:C,request:g}=this;if(g.onRequestSent(),A[RB]=!1,A[qA])throw A[qA];if(A.destroyed)return;if(E===0)if(I)A.write(`${C}content-length: 0\r -\r -`,"latin1");else A.write(`${C}\r -`,"latin1");else if(Q===null)A.write(`\r -0\r -\r -`,"latin1");if(Q!==null&&E!==Q)if(B[TI])throw new GB;else process.emitWarning(new GB);if(A[VA].timeout&&A[VA].timeoutType===_E){if(A[VA].timeout.refresh)A[VA].timeout.refresh()}MQ(B)}destroy(A){let{socket:Q,client:B}=this;if(Q[RB]=!1,A)T(B[LA]<=1,"pipeline should only contain this request"),P.destroy(Q,A)}}function oA(A,Q,B){try{Q.onError(B),T(Q.aborted)}catch(E){A.emit("error",E)}}EG.exports=aU});var CG=h((ax,IG)=>{class XD{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(A){this.list[this.top]=A,this.top=this.top+1&2047}shift(){let A=this.list[this.bottom];if(A===void 0)return null;return this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,A}}IG.exports=class A{constructor(){this.head=this.tail=new XD}isEmpty(){return this.head.isEmpty()}push(Q){if(this.head.isFull())this.head=this.head.next=new XD;this.head.push(Q)}shift(){let Q=this.tail,B=Q.shift();if(Q.isEmpty()&&Q.next!==null)this.tail=Q.next;return B}}});var FG=h((sx,DG)=>{var{kFree:F4,kConnected:Y4,kPending:J4,kQueued:N4,kRunning:U4,kSize:G4}=JA(),sB=Symbol("pool");class gG{constructor(A){this[sB]=A}get connected(){return this[sB][Y4]}get free(){return this[sB][F4]}get pending(){return this[sB][J4]}get queued(){return this[sB][N4]}get running(){return this[sB][U4]}get size(){return this[sB][G4]}}DG.exports=gG});var HD=h((ox,WG)=>{var R4=hI(),w4=CG(),{kConnected:hD,kSize:YG,kRunning:JG,kPending:NG,kQueued:_I,kBusy:M4,kFree:L4,kUrl:V4,kClose:W4,kDestroy:Z4,kDispatch:X4}=JA(),h4=FG(),BQ=Symbol("clients"),rA=Symbol("needDrain"),OI=Symbol("queue"),SD=Symbol("closed resolve"),KD=Symbol("onDrain"),UG=Symbol("onConnect"),GG=Symbol("onDisconnect"),RG=Symbol("onConnectionError"),zD=Symbol("get dispatcher"),MG=Symbol("add client"),LG=Symbol("remove client"),wG=Symbol("stats");class VG extends R4{constructor(){super();this[OI]=new w4,this[BQ]=[],this[_I]=0;let A=this;this[KD]=function Q(B,E){let I=A[OI],C=!1;while(!C){let g=I.shift();if(!g)break;A[_I]--,C=!this.dispatch(g.opts,g.handler)}if(this[rA]=C,!this[rA]&&A[rA])A[rA]=!1,A.emit("drain",B,[A,...E]);if(A[SD]&&I.isEmpty())Promise.all(A[BQ].map((g)=>g.close())).then(A[SD])},this[UG]=(Q,B)=>{A.emit("connect",Q,[A,...B])},this[GG]=(Q,B,E)=>{A.emit("disconnect",Q,[A,...B],E)},this[RG]=(Q,B,E)=>{A.emit("connectionError",Q,[A,...B],E)},this[wG]=new h4(this)}get[M4](){return this[rA]}get[hD](){return this[BQ].filter((A)=>A[hD]).length}get[L4](){return this[BQ].filter((A)=>A[hD]&&!A[rA]).length}get[NG](){let A=this[_I];for(let{[NG]:Q}of this[BQ])A+=Q;return A}get[JG](){let A=0;for(let{[JG]:Q}of this[BQ])A+=Q;return A}get[YG](){let A=this[_I];for(let{[YG]:Q}of this[BQ])A+=Q;return A}get stats(){return this[wG]}async[W4](){if(this[OI].isEmpty())return Promise.all(this[BQ].map((A)=>A.close()));else return new Promise((A)=>{this[SD]=A})}async[Z4](A){while(!0){let Q=this[OI].shift();if(!Q)break;Q.handler.onError(A)}return Promise.all(this[BQ].map((Q)=>Q.destroy(A)))}[X4](A,Q){let B=this[zD]();if(!B)this[rA]=!0,this[OI].push({opts:A,handler:Q}),this[_I]++;else if(!B.dispatch(A,Q))B[rA]=!0,this[rA]=!this[zD]();return!this[rA]}[MG](A){if(A.on("drain",this[KD]).on("connect",this[UG]).on("disconnect",this[GG]).on("connectionError",this[RG]),this[BQ].push(A),this[rA])process.nextTick(()=>{if(this[rA])this[KD](A[V4],[this,A])});return this}[LG](A){A.close(()=>{let Q=this[BQ].indexOf(A);if(Q!==-1)this[BQ].splice(Q,1)}),this[rA]=this[BQ].some((Q)=>!Q[rA]&&Q.closed!==!0&&Q.destroyed!==!0)}}WG.exports={PoolBase:VG,kClients:BQ,kNeedDrain:rA,kAddClient:MG,kRemoveClient:LG,kGetDispatcher:zD}});var OE=h((rx,SG)=>{var{PoolBase:S4,kClients:kC,kNeedDrain:K4,kAddClient:z4,kGetDispatcher:H4}=HD(),x4=yI(),{InvalidArgumentError:xD}=EA(),$D=a(),{kUrl:ZG,kInterceptors:$4}=JA(),T4=SI(),TD=Symbol("options"),jD=Symbol("connections"),XG=Symbol("factory");function j4(A,Q){return new x4(A,Q)}class hG extends S4{constructor(A,{connections:Q,factory:B=j4,connect:E,connectTimeout:I,tls:C,maxCachedSessions:g,socketPath:D,autoSelectFamily:F,autoSelectFamilyAttemptTimeout:J,allowH2:Y,...U}={}){super();if(Q!=null&&(!Number.isFinite(Q)||Q<0))throw new xD("invalid connections");if(typeof B!=="function")throw new xD("factory must be a function.");if(E!=null&&typeof E!=="function"&&typeof E!=="object")throw new xD("connect must be a function or an object");if(typeof E!=="function")E=T4({...C,maxCachedSessions:g,allowH2:Y,socketPath:D,timeout:I,...$D.nodeHasAutoSelectFamily&&F?{autoSelectFamily:F,autoSelectFamilyAttemptTimeout:J}:void 0,...E});this[$4]=U.interceptors&&U.interceptors.Pool&&Array.isArray(U.interceptors.Pool)?U.interceptors.Pool:[],this[jD]=Q||null,this[ZG]=$D.parseOrigin(A),this[TD]={...$D.deepClone(U),connect:E,allowH2:Y},this[TD].interceptors=U.interceptors?{...U.interceptors}:void 0,this[XG]=B,this.on("connectionError",(R,w,W)=>{for(let V of w){let S=this[kC].indexOf(V);if(S!==-1)this[kC].splice(S,1)}})}[H4](){let A=this[kC].find((Q)=>!Q[K4]);if(A)return A;if(!this[jD]||this[kC].length{var{BalancedPoolMissingUpstreamError:y4,InvalidArgumentError:_4}=EA(),{PoolBase:O4,kClients:tA,kNeedDrain:qI,kAddClient:q4,kRemoveClient:P4,kGetDispatcher:f4}=HD(),v4=OE(),{kUrl:yD,kInterceptors:k4}=JA(),{parseOrigin:KG}=a(),zG=Symbol("factory"),bC=Symbol("options"),HG=Symbol("kGreatestCommonDivisor"),oB=Symbol("kCurrentWeight"),rB=Symbol("kIndex"),HQ=Symbol("kWeight"),mC=Symbol("kMaxWeightPerServer"),cC=Symbol("kErrorPenalty");function xG(A,Q){if(Q===0)return A;return xG(Q,A%Q)}function b4(A,Q){return new v4(A,Q)}class $G extends O4{constructor(A=[],{factory:Q=b4,...B}={}){super();if(this[bC]=B,this[rB]=-1,this[oB]=0,this[mC]=this[bC].maxWeightPerServer||100,this[cC]=this[bC].errorPenalty||15,!Array.isArray(A))A=[A];if(typeof Q!=="function")throw new _4("factory must be a function.");this[k4]=B.interceptors&&B.interceptors.BalancedPool&&Array.isArray(B.interceptors.BalancedPool)?B.interceptors.BalancedPool:[],this[zG]=Q;for(let E of A)this.addUpstream(E);this._updateBalancedPoolStats()}addUpstream(A){let Q=KG(A).origin;if(this[tA].find((E)=>E[yD].origin===Q&&E.closed!==!0&&E.destroyed!==!0))return this;let B=this[zG](Q,Object.assign({},this[bC]));this[q4](B),B.on("connect",()=>{B[HQ]=Math.min(this[mC],B[HQ]+this[cC])}),B.on("connectionError",()=>{B[HQ]=Math.max(1,B[HQ]-this[cC]),this._updateBalancedPoolStats()}),B.on("disconnect",(...E)=>{let I=E[2];if(I&&I.code==="UND_ERR_SOCKET")B[HQ]=Math.max(1,B[HQ]-this[cC]),this._updateBalancedPoolStats()});for(let E of this[tA])E[HQ]=this[mC];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){this[HG]=this[tA].map((A)=>A[HQ]).reduce(xG,0)}removeUpstream(A){let Q=KG(A).origin,B=this[tA].find((E)=>E[yD].origin===Q&&E.closed!==!0&&E.destroyed!==!0);if(B)this[P4](B);return this}get upstreams(){return this[tA].filter((A)=>A.closed!==!0&&A.destroyed!==!0).map((A)=>A[yD].origin)}[f4](){if(this[tA].length===0)throw new y4;if(!this[tA].find((I)=>!I[qI]&&I.closed!==!0&&I.destroyed!==!0))return;if(this[tA].map((I)=>I[qI]).reduce((I,C)=>I&&C,!0))return;let B=0,E=this[tA].findIndex((I)=>!I[qI]);while(B++this[tA][E][HQ]&&!I[qI])E=this[rB];if(this[rB]===0){if(this[oB]=this[oB]-this[HG],this[oB]<=0)this[oB]=this[mC]}if(I[HQ]>=this[oB]&&!I[qI])return I}return this[oB]=this[tA][E][HQ],this[rB]=E,this[tA][E]}}TG.exports=$G});var qD=h((ex,OG)=>{var{kConnected:yG,kSize:_G}=JA();class _D{constructor(A){this.value=A}deref(){return this.value[yG]===0&&this.value[_G]===0?void 0:this.value}}class OD{constructor(A){this.finalizer=A}register(A,Q){if(A.on)A.on("disconnect",()=>{if(A[yG]===0&&A[_G]===0)this.finalizer(Q)})}}OG.exports=function(){if(process.env.NODE_V8_COVERAGE)return{WeakRef:_D,FinalizationRegistry:OD};return{WeakRef:global.WeakRef||_D,FinalizationRegistry:global.FinalizationRegistry||OD}}});var PI=h((A7,uG)=>{var{InvalidArgumentError:uC}=EA(),{kClients:$B,kRunning:qG,kClose:m4,kDestroy:c4,kDispatch:u4,kInterceptors:d4}=JA(),i4=hI(),l4=OE(),p4=yI(),n4=a(),a4=TC(),{WeakRef:s4,FinalizationRegistry:o4}=qD()(),PG=Symbol("onConnect"),fG=Symbol("onDisconnect"),vG=Symbol("onConnectionError"),r4=Symbol("maxRedirections"),kG=Symbol("onDrain"),bG=Symbol("factory"),mG=Symbol("finalizer"),PD=Symbol("options");function t4(A,Q){return Q&&Q.connections===1?new p4(A,Q):new l4(A,Q)}class cG extends i4{constructor({factory:A=t4,maxRedirections:Q=0,connect:B,...E}={}){super();if(typeof A!=="function")throw new uC("factory must be a function.");if(B!=null&&typeof B!=="function"&&typeof B!=="object")throw new uC("connect must be a function or an object");if(!Number.isInteger(Q)||Q<0)throw new uC("maxRedirections must be a positive number");if(B&&typeof B!=="function")B={...B};this[d4]=E.interceptors&&E.interceptors.Agent&&Array.isArray(E.interceptors.Agent)?E.interceptors.Agent:[a4({maxRedirections:Q})],this[PD]={...n4.deepClone(E),connect:B},this[PD].interceptors=E.interceptors?{...E.interceptors}:void 0,this[r4]=Q,this[bG]=A,this[$B]=new Map,this[mG]=new o4((C)=>{let g=this[$B].get(C);if(g!==void 0&&g.deref()===void 0)this[$B].delete(C)});let I=this;this[kG]=(C,g)=>{I.emit("drain",C,[I,...g])},this[PG]=(C,g)=>{I.emit("connect",C,[I,...g])},this[fG]=(C,g,D)=>{I.emit("disconnect",C,[I,...g],D)},this[vG]=(C,g,D)=>{I.emit("connectionError",C,[I,...g],D)}}get[qG](){let A=0;for(let Q of this[$B].values()){let B=Q.deref();if(B)A+=B[qG]}return A}[u4](A,Q){let B;if(A.origin&&(typeof A.origin==="string"||A.origin instanceof URL))B=String(A.origin);else throw new uC("opts.origin must be a non-empty string or URL.");let E=this[$B].get(B),I=E?E.deref():null;if(!I)I=this[bG](A.origin,this[PD]).on("drain",this[kG]).on("connect",this[PG]).on("disconnect",this[fG]).on("connectionError",this[vG]),this[$B].set(B,new s4(I)),this[mG].register(I,B);return I.dispatch(A,Q)}async[m4](){let A=[];for(let Q of this[$B].values()){let B=Q.deref();if(B)A.push(B.close())}await Promise.all(A)}async[c4](A){let Q=[];for(let B of this[$B].values()){let E=B.deref();if(E)Q.push(E.destroy(A))}await Promise.all(Q)}}uG.exports=cG});var rG=h((Q7,oG)=>{var pG=M("assert"),{Readable:e4}=M("stream"),{RequestAbortedError:nG,NotSupportedError:Ah,InvalidArgumentError:Qh}=EA(),lC=a(),{ReadableStreamFrom:Bh,toUSVString:Eh}=a(),fD,LQ=Symbol("kConsume"),dC=Symbol("kReading"),TB=Symbol("kBody"),dG=Symbol("abort"),aG=Symbol("kContentType"),iG=()=>{};oG.exports=class A extends e4{constructor({resume:Q,abort:B,contentType:E="",highWaterMark:I=65536}){super({autoDestroy:!0,read:Q,highWaterMark:I});this._readableState.dataEmitted=!1,this[dG]=B,this[LQ]=null,this[TB]=null,this[aG]=E,this[dC]=!1}destroy(Q){if(this.destroyed)return this;if(!Q&&!this._readableState.endEmitted)Q=new nG;if(Q)this[dG]();return super.destroy(Q)}emit(Q,...B){if(Q==="data")this._readableState.dataEmitted=!0;else if(Q==="error")this._readableState.errorEmitted=!0;return super.emit(Q,...B)}on(Q,...B){if(Q==="data"||Q==="readable")this[dC]=!0;return super.on(Q,...B)}addListener(Q,...B){return this.on(Q,...B)}off(Q,...B){let E=super.off(Q,...B);if(Q==="data"||Q==="readable")this[dC]=this.listenerCount("data")>0||this.listenerCount("readable")>0;return E}removeListener(Q,...B){return this.off(Q,...B)}push(Q){if(this[LQ]&&Q!==null&&this.readableLength===0)return sG(this[LQ],Q),this[dC]?super.push(Q):!0;return super.push(Q)}async text(){return iC(this,"text")}async json(){return iC(this,"json")}async blob(){return iC(this,"blob")}async arrayBuffer(){return iC(this,"arrayBuffer")}async formData(){throw new Ah}get bodyUsed(){return lC.isDisturbed(this)}get body(){if(!this[TB]){if(this[TB]=Bh(this),this[LQ])this[TB].getReader(),pG(this[TB].locked)}return this[TB]}dump(Q){let B=Q&&Number.isFinite(Q.limit)?Q.limit:262144,E=Q&&Q.signal;if(E)try{if(typeof E!=="object"||!("aborted"in E))throw new Qh("signal must be an AbortSignal");lC.throwIfAborted(E)}catch(I){return Promise.reject(I)}if(this.closed)return Promise.resolve(null);return new Promise((I,C)=>{let g=E?lC.addAbortListener(E,()=>{this.destroy()}):iG;this.on("close",function(){if(g(),E&&E.aborted)C(E.reason||Object.assign(new Error("The operation was aborted"),{name:"AbortError"}));else I(null)}).on("error",iG).on("data",function(D){if(B-=D.length,B<=0)this.destroy()}).resume()})}};function Ih(A){return A[TB]&&A[TB].locked===!0||A[LQ]}function Ch(A){return lC.isDisturbed(A)||Ih(A)}async function iC(A,Q){if(Ch(A))throw new TypeError("unusable");return pG(!A[LQ]),new Promise((B,E)=>{A[LQ]={type:Q,stream:A,resolve:B,reject:E,length:0,body:[]},A.on("error",function(I){vD(this[LQ],I)}).on("close",function(){if(this[LQ].body!==null)vD(this[LQ],new nG)}),process.nextTick(gh,A[LQ])})}function gh(A){if(A.body===null)return;let{_readableState:Q}=A.stream;for(let B of Q.buffer)sG(A,B);if(Q.endEmitted)lG(this[LQ]);else A.stream.on("end",function(){lG(this[LQ])});A.stream.resume();while(A.stream.read()!=null);}function lG(A){let{type:Q,body:B,resolve:E,stream:I,length:C}=A;try{if(Q==="text")E(Eh(Buffer.concat(B)));else if(Q==="json")E(JSON.parse(Buffer.concat(B)));else if(Q==="arrayBuffer"){let g=new Uint8Array(C),D=0;for(let F of B)g.set(F,D),D+=F.byteLength;E(g.buffer)}else if(Q==="blob"){if(!fD)fD=M("buffer").Blob;E(new fD(B,{type:I[aG]}))}vD(A)}catch(g){I.destroy(g)}}function sG(A,Q){A.length+=Q.length,A.body.push(Q)}function vD(A,Q){if(A.body===null)return;if(Q)A.reject(Q);else A.resolve();A.type=null,A.stream=null,A.resolve=null,A.reject=null,A.length=0,A.body=null}});var kD=h((B7,eG)=>{var Dh=M("assert"),{ResponseStatusCodeError:pC}=EA(),{toUSVString:tG}=a();async function Fh({callback:A,body:Q,contentType:B,statusCode:E,statusMessage:I,headers:C}){Dh(Q);let g=[],D=0;for await(let F of Q)if(g.push(F),D+=F.length,D>131072){g=null;break}if(E===204||!B||!g){process.nextTick(A,new pC(`Response status code ${E}${I?`: ${I}`:""}`,E,C));return}try{if(B.startsWith("application/json")){let F=JSON.parse(tG(Buffer.concat(g)));process.nextTick(A,new pC(`Response status code ${E}${I?`: ${I}`:""}`,E,C,F));return}if(B.startsWith("text/")){let F=tG(Buffer.concat(g));process.nextTick(A,new pC(`Response status code ${E}${I?`: ${I}`:""}`,E,C,F));return}}catch(F){}process.nextTick(A,new pC(`Response status code ${E}${I?`: ${I}`:""}`,E,C))}eG.exports={getResolveErrorBodyCallback:Fh}});var PE=h((E7,QR)=>{var{addAbortListener:Yh}=a(),{RequestAbortedError:Jh}=EA(),qE=Symbol("kListener"),jB=Symbol("kSignal");function AR(A){if(A.abort)A.abort();else A.onError(new Jh)}function Nh(A,Q){if(A[jB]=null,A[qE]=null,!Q)return;if(Q.aborted){AR(A);return}A[jB]=Q,A[qE]=()=>{AR(A)},Yh(A[jB],A[qE])}function Uh(A){if(!A[jB])return;if("removeEventListener"in A[jB])A[jB].removeEventListener("abort",A[qE]);else A[jB].removeListener("abort",A[qE]);A[jB]=null,A[qE]=null}QR.exports={addSignal:Nh,removeSignal:Uh}});var IR=h((I7,mD)=>{var Gh=rG(),{InvalidArgumentError:fE,RequestAbortedError:Rh}=EA(),sQ=a(),{getResolveErrorBodyCallback:wh}=kD(),{AsyncResource:Mh}=M("async_hooks"),{addSignal:Lh,removeSignal:BR}=PE();class bD extends Mh{constructor(A,Q){if(!A||typeof A!=="object")throw new fE("invalid opts");let{signal:B,method:E,opaque:I,body:C,onInfo:g,responseHeaders:D,throwOnError:F,highWaterMark:J}=A;try{if(typeof Q!=="function")throw new fE("invalid callback");if(J&&(typeof J!=="number"||J<0))throw new fE("invalid highWaterMark");if(B&&typeof B.on!=="function"&&typeof B.addEventListener!=="function")throw new fE("signal must be an EventEmitter or EventTarget");if(E==="CONNECT")throw new fE("invalid method");if(g&&typeof g!=="function")throw new fE("invalid onInfo callback");super("UNDICI_REQUEST")}catch(Y){if(sQ.isStream(C))sQ.destroy(C.on("error",sQ.nop),Y);throw Y}if(this.responseHeaders=D||null,this.opaque=I||null,this.callback=Q,this.res=null,this.abort=null,this.body=C,this.trailers={},this.context=null,this.onInfo=g||null,this.throwOnError=F,this.highWaterMark=J,sQ.isStream(C))C.on("error",(Y)=>{this.onError(Y)});Lh(this,B)}onConnect(A,Q){if(!this.callback)throw new Rh;this.abort=A,this.context=Q}onHeaders(A,Q,B,E){let{callback:I,opaque:C,abort:g,context:D,responseHeaders:F,highWaterMark:J}=this,Y=F==="raw"?sQ.parseRawHeaders(Q):sQ.parseHeaders(Q);if(A<200){if(this.onInfo)this.onInfo({statusCode:A,headers:Y});return}let R=(F==="raw"?sQ.parseHeaders(Q):Y)["content-type"],w=new Gh({resume:B,abort:g,contentType:R,highWaterMark:J});if(this.callback=null,this.res=w,I!==null)if(this.throwOnError&&A>=400)this.runInAsyncScope(wh,null,{callback:I,body:w,contentType:R,statusCode:A,statusMessage:E,headers:Y});else this.runInAsyncScope(I,null,null,{statusCode:A,headers:Y,trailers:this.trailers,opaque:C,body:w,context:D})}onData(A){let{res:Q}=this;return Q.push(A)}onComplete(A){let{res:Q}=this;BR(this),sQ.parseHeaders(A,this.trailers),Q.push(null)}onError(A){let{res:Q,callback:B,body:E,opaque:I}=this;if(BR(this),B)this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(B,null,A,{opaque:I})});if(Q)this.res=null,queueMicrotask(()=>{sQ.destroy(Q,A)});if(E)this.body=null,sQ.destroy(E,A)}}function ER(A,Q){if(Q===void 0)return new Promise((B,E)=>{ER.call(this,A,(I,C)=>{return I?E(I):B(C)})});try{this.dispatch(A,new bD(A,Q))}catch(B){if(typeof Q!=="function")throw B;let E=A&&A.opaque;queueMicrotask(()=>Q(B,{opaque:E}))}}mD.exports=ER;mD.exports.RequestHandler=bD});var YR=h((C7,FR)=>{var{finished:Vh,PassThrough:Wh}=M("stream"),{InvalidArgumentError:vE,InvalidReturnValueError:Zh,RequestAbortedError:Xh}=EA(),kQ=a(),{getResolveErrorBodyCallback:hh}=kD(),{AsyncResource:Sh}=M("async_hooks"),{addSignal:Kh,removeSignal:CR}=PE();class gR extends Sh{constructor(A,Q,B){if(!A||typeof A!=="object")throw new vE("invalid opts");let{signal:E,method:I,opaque:C,body:g,onInfo:D,responseHeaders:F,throwOnError:J}=A;try{if(typeof B!=="function")throw new vE("invalid callback");if(typeof Q!=="function")throw new vE("invalid factory");if(E&&typeof E.on!=="function"&&typeof E.addEventListener!=="function")throw new vE("signal must be an EventEmitter or EventTarget");if(I==="CONNECT")throw new vE("invalid method");if(D&&typeof D!=="function")throw new vE("invalid onInfo callback");super("UNDICI_STREAM")}catch(Y){if(kQ.isStream(g))kQ.destroy(g.on("error",kQ.nop),Y);throw Y}if(this.responseHeaders=F||null,this.opaque=C||null,this.factory=Q,this.callback=B,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=g,this.onInfo=D||null,this.throwOnError=J||!1,kQ.isStream(g))g.on("error",(Y)=>{this.onError(Y)});Kh(this,E)}onConnect(A,Q){if(!this.callback)throw new Xh;this.abort=A,this.context=Q}onHeaders(A,Q,B,E){let{factory:I,opaque:C,context:g,callback:D,responseHeaders:F}=this,J=F==="raw"?kQ.parseRawHeaders(Q):kQ.parseHeaders(Q);if(A<200){if(this.onInfo)this.onInfo({statusCode:A,headers:J});return}this.factory=null;let Y;if(this.throwOnError&&A>=400){let w=(F==="raw"?kQ.parseHeaders(Q):J)["content-type"];Y=new Wh,this.callback=null,this.runInAsyncScope(hh,null,{callback:D,body:Y,contentType:w,statusCode:A,statusMessage:E,headers:J})}else{if(I===null)return;if(Y=this.runInAsyncScope(I,null,{statusCode:A,headers:J,opaque:C,context:g}),!Y||typeof Y.write!=="function"||typeof Y.end!=="function"||typeof Y.on!=="function")throw new Zh("expected Writable");Vh(Y,{readable:!1},(R)=>{let{callback:w,res:W,opaque:V,trailers:S,abort:_}=this;if(this.res=null,R||!W.readable)kQ.destroy(W,R);if(this.callback=null,this.runInAsyncScope(w,null,R||null,{opaque:V,trailers:S}),R)_()})}return Y.on("drain",B),this.res=Y,(Y.writableNeedDrain!==void 0?Y.writableNeedDrain:Y._writableState&&Y._writableState.needDrain)!==!0}onData(A){let{res:Q}=this;return Q?Q.write(A):!0}onComplete(A){let{res:Q}=this;if(CR(this),!Q)return;this.trailers=kQ.parseHeaders(A),Q.end()}onError(A){let{res:Q,callback:B,opaque:E,body:I}=this;if(CR(this),this.factory=null,Q)this.res=null,kQ.destroy(Q,A);else if(B)this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(B,null,A,{opaque:E})});if(I)this.body=null,kQ.destroy(I,A)}}function DR(A,Q,B){if(B===void 0)return new Promise((E,I)=>{DR.call(this,A,Q,(C,g)=>{return C?I(C):E(g)})});try{this.dispatch(A,new gR(A,Q,B))}catch(E){if(typeof B!=="function")throw E;let I=A&&A.opaque;queueMicrotask(()=>B(E,{opaque:I}))}}FR.exports=DR});var wR=h((g7,RR)=>{var{Readable:JR,Duplex:zh,PassThrough:Hh}=M("stream"),{InvalidArgumentError:fI,InvalidReturnValueError:xh,RequestAbortedError:nC}=EA(),xQ=a(),{AsyncResource:$h}=M("async_hooks"),{addSignal:Th,removeSignal:jh}=PE(),yh=M("assert"),kE=Symbol("resume");class NR extends JR{constructor(){super({autoDestroy:!0});this[kE]=null}_read(){let{[kE]:A}=this;if(A)this[kE]=null,A()}_destroy(A,Q){this._read(),Q(A)}}class UR extends JR{constructor(A){super({autoDestroy:!0});this[kE]=A}_read(){this[kE]()}_destroy(A,Q){if(!A&&!this._readableState.endEmitted)A=new nC;Q(A)}}class GR extends $h{constructor(A,Q){if(!A||typeof A!=="object")throw new fI("invalid opts");if(typeof Q!=="function")throw new fI("invalid handler");let{signal:B,method:E,opaque:I,onInfo:C,responseHeaders:g}=A;if(B&&typeof B.on!=="function"&&typeof B.addEventListener!=="function")throw new fI("signal must be an EventEmitter or EventTarget");if(E==="CONNECT")throw new fI("invalid method");if(C&&typeof C!=="function")throw new fI("invalid onInfo callback");super("UNDICI_PIPELINE");this.opaque=I||null,this.responseHeaders=g||null,this.handler=Q,this.abort=null,this.context=null,this.onInfo=C||null,this.req=new NR().on("error",xQ.nop),this.ret=new zh({readableObjectMode:A.objectMode,autoDestroy:!0,read:()=>{let{body:D}=this;if(D&&D.resume)D.resume()},write:(D,F,J)=>{let{req:Y}=this;if(Y.push(D,F)||Y._readableState.destroyed)J();else Y[kE]=J},destroy:(D,F)=>{let{body:J,req:Y,res:U,ret:R,abort:w}=this;if(!D&&!R._readableState.endEmitted)D=new nC;if(w&&D)w();xQ.destroy(J,D),xQ.destroy(Y,D),xQ.destroy(U,D),jh(this),F(D)}}).on("prefinish",()=>{let{req:D}=this;D.push(null)}),this.res=null,Th(this,B)}onConnect(A,Q){let{ret:B,res:E}=this;if(yh(!E,"pipeline cannot be retried"),B.destroyed)throw new nC;this.abort=A,this.context=Q}onHeaders(A,Q,B){let{opaque:E,handler:I,context:C}=this;if(A<200){if(this.onInfo){let D=this.responseHeaders==="raw"?xQ.parseRawHeaders(Q):xQ.parseHeaders(Q);this.onInfo({statusCode:A,headers:D})}return}this.res=new UR(B);let g;try{this.handler=null;let D=this.responseHeaders==="raw"?xQ.parseRawHeaders(Q):xQ.parseHeaders(Q);g=this.runInAsyncScope(I,null,{statusCode:A,headers:D,opaque:E,body:this.res,context:C})}catch(D){throw this.res.on("error",xQ.nop),D}if(!g||typeof g.on!=="function")throw new xh("expected Readable");g.on("data",(D)=>{let{ret:F,body:J}=this;if(!F.push(D)&&J.pause)J.pause()}).on("error",(D)=>{let{ret:F}=this;xQ.destroy(F,D)}).on("end",()=>{let{ret:D}=this;D.push(null)}).on("close",()=>{let{ret:D}=this;if(!D._readableState.ended)xQ.destroy(D,new nC)}),this.body=g}onData(A){let{res:Q}=this;return Q.push(A)}onComplete(A){let{res:Q}=this;Q.push(null)}onError(A){let{ret:Q}=this;this.handler=null,xQ.destroy(Q,A)}}function _h(A,Q){try{let B=new GR(A,Q);return this.dispatch({...A,body:B.req},B),B.ret}catch(B){return new Hh().destroy(B)}}RR.exports=_h});var XR=h((D7,ZR)=>{var{InvalidArgumentError:cD,RequestAbortedError:Oh,SocketError:qh}=EA(),{AsyncResource:Ph}=M("async_hooks"),MR=a(),{addSignal:fh,removeSignal:LR}=PE(),vh=M("assert");class VR extends Ph{constructor(A,Q){if(!A||typeof A!=="object")throw new cD("invalid opts");if(typeof Q!=="function")throw new cD("invalid callback");let{signal:B,opaque:E,responseHeaders:I}=A;if(B&&typeof B.on!=="function"&&typeof B.addEventListener!=="function")throw new cD("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE");this.responseHeaders=I||null,this.opaque=E||null,this.callback=Q,this.abort=null,this.context=null,fh(this,B)}onConnect(A,Q){if(!this.callback)throw new Oh;this.abort=A,this.context=null}onHeaders(){throw new qh("bad upgrade",null)}onUpgrade(A,Q,B){let{callback:E,opaque:I,context:C}=this;vh.strictEqual(A,101),LR(this),this.callback=null;let g=this.responseHeaders==="raw"?MR.parseRawHeaders(Q):MR.parseHeaders(Q);this.runInAsyncScope(E,null,null,{headers:g,socket:B,opaque:I,context:C})}onError(A){let{callback:Q,opaque:B}=this;if(LR(this),Q)this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(Q,null,A,{opaque:B})})}}function WR(A,Q){if(Q===void 0)return new Promise((B,E)=>{WR.call(this,A,(I,C)=>{return I?E(I):B(C)})});try{let B=new VR(A,Q);this.dispatch({...A,method:A.method||"GET",upgrade:A.protocol||"Websocket"},B)}catch(B){if(typeof Q!=="function")throw B;let E=A&&A.opaque;queueMicrotask(()=>Q(B,{opaque:E}))}}ZR.exports=WR});var xR=h((F7,HR)=>{var{AsyncResource:kh}=M("async_hooks"),{InvalidArgumentError:uD,RequestAbortedError:bh,SocketError:mh}=EA(),hR=a(),{addSignal:ch,removeSignal:SR}=PE();class KR extends kh{constructor(A,Q){if(!A||typeof A!=="object")throw new uD("invalid opts");if(typeof Q!=="function")throw new uD("invalid callback");let{signal:B,opaque:E,responseHeaders:I}=A;if(B&&typeof B.on!=="function"&&typeof B.addEventListener!=="function")throw new uD("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT");this.opaque=E||null,this.responseHeaders=I||null,this.callback=Q,this.abort=null,ch(this,B)}onConnect(A,Q){if(!this.callback)throw new bh;this.abort=A,this.context=Q}onHeaders(){throw new mh("bad connect",null)}onUpgrade(A,Q,B){let{callback:E,opaque:I,context:C}=this;SR(this),this.callback=null;let g=Q;if(g!=null)g=this.responseHeaders==="raw"?hR.parseRawHeaders(Q):hR.parseHeaders(Q);this.runInAsyncScope(E,null,null,{statusCode:A,headers:g,socket:B,opaque:I,context:C})}onError(A){let{callback:Q,opaque:B}=this;if(SR(this),Q)this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(Q,null,A,{opaque:B})})}}function zR(A,Q){if(Q===void 0)return new Promise((B,E)=>{zR.call(this,A,(I,C)=>{return I?E(I):B(C)})});try{let B=new KR(A,Q);this.dispatch({...A,method:"CONNECT"},B)}catch(B){if(typeof Q!=="function")throw B;let E=A&&A.opaque;queueMicrotask(()=>Q(B,{opaque:E}))}}HR.exports=zR});var $R=h((uh,bE)=>{uh.request=IR();uh.stream=YR();uh.pipeline=wR();uh.upgrade=XR();uh.connect=xR()});var iD=h((Y7,TR)=>{var{UndiciError:ah}=EA();class dD extends ah{constructor(A){super(A);Error.captureStackTrace(this,dD),this.name="MockNotMatchedError",this.message=A||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}}TR.exports={MockNotMatchedError:dD}});var mE=h((J7,jR)=>{jR.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var vI=h((N7,uR)=>{var{MockNotMatchedError:tB}=iD(),{kDispatches:aC,kMockAgent:sh,kOriginalDispatch:oh,kOrigin:rh,kGetNetConnect:th}=mE(),{buildURL:eh,nop:AS}=a(),{STATUS_CODES:QS}=M("http"),{types:{isPromise:BS}}=M("util");function wB(A,Q){if(typeof A==="string")return A===Q;if(A instanceof RegExp)return A.test(Q);if(typeof A==="function")return A(Q)===!0;return!1}function _R(A){return Object.fromEntries(Object.entries(A).map(([Q,B])=>{return[Q.toLocaleLowerCase(),B]}))}function OR(A,Q){if(Array.isArray(A)){for(let B=0;B!C).filter(({path:C})=>wB(yR(C),E));if(I.length===0)throw new tB(`Mock dispatch not matched for path '${E}'`);if(I=I.filter(({method:C})=>wB(C,Q.method)),I.length===0)throw new tB(`Mock dispatch not matched for method '${Q.method}'`);if(I=I.filter(({body:C})=>typeof C!=="undefined"?wB(C,Q.body):!0),I.length===0)throw new tB(`Mock dispatch not matched for body '${Q.body}'`);if(I=I.filter((C)=>PR(C,Q.headers)),I.length===0)throw new tB(`Mock dispatch not matched for headers '${typeof Q.headers==="object"?JSON.stringify(Q.headers):Q.headers}'`);return I[0]}function IS(A,Q,B){let E={timesInvoked:0,times:1,persist:!1,consumed:!1},I=typeof B==="function"?{callback:B}:{...B},C={...E,...Q,pending:!0,data:{error:null,...I}};return A.push(C),C}function lD(A,Q){let B=A.findIndex((E)=>{if(!E.consumed)return!1;return ES(E,Q)});if(B!==-1)A.splice(B,1)}function kR(A){let{path:Q,method:B,body:E,headers:I,query:C}=A;return{path:Q,method:B,body:E,headers:I,query:C}}function pD(A){return Object.entries(A).reduce((Q,[B,E])=>[...Q,Buffer.from(`${B}`),Array.isArray(E)?E.map((I)=>Buffer.from(`${I}`)):Buffer.from(`${E}`)],[])}function bR(A){return QS[A]||"unknown"}async function CS(A){let Q=[];for await(let B of A)Q.push(B);return Buffer.concat(Q).toString("utf8")}function mR(A,Q){let B=kR(A),E=vR(this[aC],B);if(E.timesInvoked++,E.data.callback)E.data={...E.data,...E.data.callback(A)};let{data:{statusCode:I,data:C,headers:g,trailers:D,error:F},delay:J,persist:Y}=E,{timesInvoked:U,times:R}=E;if(E.consumed=!Y&&U>=R,E.pending=U0)setTimeout(()=>{w(this[aC])},J);else w(this[aC]);function w(V,S=C){let _=Array.isArray(A.headers)?qR(A.headers):A.headers,x=typeof S==="function"?S({...A,headers:_}):S;if(BS(x)){x.then((FA)=>w(V,FA));return}let q=fR(x),z=pD(g),XA=pD(D);Q.abort=AS,Q.onHeaders(I,z,W,bR(I)),Q.onData(Buffer.from(q)),Q.onComplete(XA),lD(V,B)}function W(){}return!0}function gS(){let A=this[sh],Q=this[rh],B=this[oh];return function E(I,C){if(A.isMockActive)try{mR.call(this,I,C)}catch(g){if(g instanceof tB){let D=A[th]();if(D===!1)throw new tB(`${g.message}: subsequent request to origin ${Q} was not allowed (net.connect disabled)`);if(cR(D,Q))B.call(this,I,C);else throw new tB(`${g.message}: subsequent request to origin ${Q} was not allowed (net.connect is not enabled for this origin)`)}else throw g}else B.call(this,I,C)}}function cR(A,Q){let B=new URL(Q);if(A===!0)return!0;else if(Array.isArray(A)&&A.some((E)=>wB(E,B.host)))return!0;return!1}function DS(A){if(A){let{agent:Q,...B}=A;return B}}uR.exports={getResponseData:fR,getMockDispatch:vR,addMockDispatch:IS,deleteMockDispatch:lD,buildKey:kR,generateKeyValues:pD,matchValue:wB,getResponse:CS,getStatusText:bR,mockDispatch:mR,buildMockDispatch:gS,checkNetConnect:cR,buildMockOptions:DS,getHeaderByName:OR}});var tD=h((NS,rD)=>{var{getResponseData:FS,buildKey:YS,addMockDispatch:nD}=vI(),{kDispatches:sC,kDispatchKey:oC,kDefaultHeaders:aD,kDefaultTrailers:sD,kContentLength:oD,kMockDispatch:rC}=mE(),{InvalidArgumentError:bQ}=EA(),{buildURL:JS}=a();class kI{constructor(A){this[rC]=A}delay(A){if(typeof A!=="number"||!Number.isInteger(A)||A<=0)throw new bQ("waitInMs must be a valid integer > 0");return this[rC].delay=A,this}persist(){return this[rC].persist=!0,this}times(A){if(typeof A!=="number"||!Number.isInteger(A)||A<=0)throw new bQ("repeatTimes must be a valid integer > 0");return this[rC].times=A,this}}class dR{constructor(A,Q){if(typeof A!=="object")throw new bQ("opts must be an object");if(typeof A.path==="undefined")throw new bQ("opts.path must be defined");if(typeof A.method==="undefined")A.method="GET";if(typeof A.path==="string")if(A.query)A.path=JS(A.path,A.query);else{let B=new URL(A.path,"data://");A.path=B.pathname+B.search}if(typeof A.method==="string")A.method=A.method.toUpperCase();this[oC]=YS(A),this[sC]=Q,this[aD]={},this[sD]={},this[oD]=!1}createMockScopeDispatchData(A,Q,B={}){let E=FS(Q),I=this[oD]?{"content-length":E.length}:{},C={...this[aD],...I,...B.headers},g={...this[sD],...B.trailers};return{statusCode:A,data:Q,headers:C,trailers:g}}validateReplyParameters(A,Q,B){if(typeof A==="undefined")throw new bQ("statusCode must be defined");if(typeof Q==="undefined")throw new bQ("data must be defined");if(typeof B!=="object")throw new bQ("responseOptions must be an object")}reply(A){if(typeof A==="function"){let g=(F)=>{let J=A(F);if(typeof J!=="object")throw new bQ("reply options callback must return an object");let{statusCode:Y,data:U="",responseOptions:R={}}=J;return this.validateReplyParameters(Y,U,R),{...this.createMockScopeDispatchData(Y,U,R)}},D=nD(this[sC],this[oC],g);return new kI(D)}let[Q,B="",E={}]=[...arguments];this.validateReplyParameters(Q,B,E);let I=this.createMockScopeDispatchData(Q,B,E),C=nD(this[sC],this[oC],I);return new kI(C)}replyWithError(A){if(typeof A==="undefined")throw new bQ("error must be defined");let Q=nD(this[sC],this[oC],{error:A});return new kI(Q)}defaultReplyHeaders(A){if(typeof A==="undefined")throw new bQ("headers must be defined");return this[aD]=A,this}defaultReplyTrailers(A){if(typeof A==="undefined")throw new bQ("trailers must be defined");return this[sD]=A,this}replyContentLength(){return this[oD]=!0,this}}NS.MockInterceptor=dR;NS.MockScope=kI});var AF=h((U7,rR)=>{var{promisify:RS}=M("util"),wS=yI(),{buildMockDispatch:MS}=vI(),{kDispatches:iR,kMockAgent:lR,kClose:pR,kOriginalClose:nR,kOrigin:aR,kOriginalDispatch:LS,kConnected:eD}=mE(),{MockInterceptor:VS}=tD(),sR=JA(),{InvalidArgumentError:WS}=EA();class oR extends wS{constructor(A,Q){super(A,Q);if(!Q||!Q.agent||typeof Q.agent.dispatch!=="function")throw new WS("Argument opts.agent must implement Agent");this[lR]=Q.agent,this[aR]=A,this[iR]=[],this[eD]=1,this[LS]=this.dispatch,this[nR]=this.close.bind(this),this.dispatch=MS.call(this),this.close=this[pR]}get[sR.kConnected](){return this[eD]}intercept(A){return new VS(A,this[iR])}async[pR](){await RS(this[nR])(),this[eD]=0,this[lR][sR.kClients].delete(this[aR])}}rR.exports=oR});var BF=h((G7,C2)=>{var{promisify:ZS}=M("util"),XS=OE(),{buildMockDispatch:hS}=vI(),{kDispatches:tR,kMockAgent:eR,kClose:A2,kOriginalClose:Q2,kOrigin:B2,kOriginalDispatch:SS,kConnected:QF}=mE(),{MockInterceptor:KS}=tD(),E2=JA(),{InvalidArgumentError:zS}=EA();class I2 extends XS{constructor(A,Q){super(A,Q);if(!Q||!Q.agent||typeof Q.agent.dispatch!=="function")throw new zS("Argument opts.agent must implement Agent");this[eR]=Q.agent,this[B2]=A,this[tR]=[],this[QF]=1,this[SS]=this.dispatch,this[Q2]=this.close.bind(this),this.dispatch=hS.call(this),this.close=this[A2]}get[E2.kConnected](){return this[QF]}intercept(A){return new KS(A,this[tR])}async[A2](){await ZS(this[Q2])(),this[QF]=0,this[eR][E2.kClients].delete(this[B2])}}C2.exports=I2});var D2=h((R7,g2)=>{var HS={pronoun:"it",is:"is",was:"was",this:"this"},xS={pronoun:"they",is:"are",was:"were",this:"these"};g2.exports=class A{constructor(Q,B){this.singular=Q,this.plural=B}pluralize(Q){let B=Q===1,E=B?HS:xS,I=B?this.singular:this.plural;return{...E,count:Q,noun:I}}}});var Y2=h((w7,F2)=>{var{Transform:$S}=M("stream"),{Console:TS}=M("console");F2.exports=class A{constructor({disableColors:Q}={}){this.transform=new $S({transform(B,E,I){I(null,B)}}),this.logger=new TS({stdout:this.transform,inspectOptions:{colors:!Q&&!process.env.CI}})}format(Q){let B=Q.map(({method:E,path:I,data:{statusCode:C},persist:g,times:D,timesInvoked:F,origin:J})=>({Method:E,Origin:J,Path:I,"Status code":C,Persistent:g?"โœ…":"โŒ",Invocations:F,Remaining:g?1/0:D-F}));return this.logger.table(B),this.transform.read().toString()}}});var w2=h((M7,R2)=>{var{kClients:eB}=JA(),jS=PI(),{kAgent:EF,kMockAgentSet:tC,kMockAgentGet:J2,kDispatches:IF,kIsMockActive:eC,kNetConnect:AE,kGetNetConnect:yS,kOptions:Ag,kFactory:Qg}=mE(),_S=AF(),OS=BF(),{matchValue:qS,buildMockOptions:PS}=vI(),{InvalidArgumentError:N2,UndiciError:fS}=EA(),vS=zC(),kS=D2(),bS=Y2();class U2{constructor(A){this.value=A}deref(){return this.value}}class G2 extends vS{constructor(A){super(A);if(this[AE]=!0,this[eC]=!0,A&&A.agent&&typeof A.agent.dispatch!=="function")throw new N2("Argument opts.agent must implement Agent");let Q=A&&A.agent?A.agent:new jS(A);this[EF]=Q,this[eB]=Q[eB],this[Ag]=PS(A)}get(A){let Q=this[J2](A);if(!Q)Q=this[Qg](A),this[tC](A,Q);return Q}dispatch(A,Q){return this.get(A.origin),this[EF].dispatch(A,Q)}async close(){await this[EF].close(),this[eB].clear()}deactivate(){this[eC]=!1}activate(){this[eC]=!0}enableNetConnect(A){if(typeof A==="string"||typeof A==="function"||A instanceof RegExp)if(Array.isArray(this[AE]))this[AE].push(A);else this[AE]=[A];else if(typeof A==="undefined")this[AE]=!0;else throw new N2("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[AE]=!1}get isMockActive(){return this[eC]}[tC](A,Q){this[eB].set(A,new U2(Q))}[Qg](A){let Q=Object.assign({agent:this},this[Ag]);return this[Ag]&&this[Ag].connections===1?new _S(A,Q):new OS(A,Q)}[J2](A){let Q=this[eB].get(A);if(Q)return Q.deref();if(typeof A!=="string"){let B=this[Qg]("http://localhost:9999");return this[tC](A,B),B}for(let[B,E]of Array.from(this[eB])){let I=E.deref();if(I&&typeof B!=="string"&&qS(B,A)){let C=this[Qg](A);return this[tC](A,C),C[IF]=I[IF],C}}}[yS](){return this[AE]}pendingInterceptors(){let A=this[eB];return Array.from(A.entries()).flatMap(([Q,B])=>B.deref()[IF].map((E)=>({...E,origin:Q}))).filter(({pending:Q})=>Q)}assertNoPendingInterceptors({pendingInterceptorsFormatter:A=new bS}={}){let Q=this.pendingInterceptors();if(Q.length===0)return;let B=new kS("interceptor","interceptors").pluralize(Q.length);throw new fS(` -${B.count} ${B.noun} ${B.is} pending: - -${A.format(Q)} -`.trim())}}R2.exports=G2});var h2=h((L7,X2)=>{var{kProxy:mS,kClose:cS,kDestroy:uS,kInterceptors:dS}=JA(),{URL:M2}=M("url"),L2=PI(),iS=OE(),lS=hI(),{InvalidArgumentError:cI,RequestAbortedError:pS}=EA(),V2=SI(),bI=Symbol("proxy agent"),Bg=Symbol("proxy client"),mI=Symbol("proxy headers"),CF=Symbol("request tls settings"),nS=Symbol("proxy tls settings"),W2=Symbol("connect endpoint function");function aS(A){return A==="https:"?443:80}function sS(A){if(typeof A==="string")A={uri:A};if(!A||!A.uri)throw new cI("Proxy opts.uri is mandatory");return{uri:A.uri,protocol:A.protocol||"https"}}function oS(A,Q){return new iS(A,Q)}class Z2 extends lS{constructor(A){super(A);if(this[mS]=sS(A),this[bI]=new L2(A),this[dS]=A.interceptors&&A.interceptors.ProxyAgent&&Array.isArray(A.interceptors.ProxyAgent)?A.interceptors.ProxyAgent:[],typeof A==="string")A={uri:A};if(!A||!A.uri)throw new cI("Proxy opts.uri is mandatory");let{clientFactory:Q=oS}=A;if(typeof Q!=="function")throw new cI("Proxy opts.clientFactory must be a function.");this[CF]=A.requestTls,this[nS]=A.proxyTls,this[mI]=A.headers||{};let B=new M2(A.uri),{origin:E,port:I,host:C,username:g,password:D}=B;if(A.auth&&A.token)throw new cI("opts.auth cannot be used in combination with opts.token");else if(A.auth)this[mI]["proxy-authorization"]=`Basic ${A.auth}`;else if(A.token)this[mI]["proxy-authorization"]=A.token;else if(g&&D)this[mI]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(g)}:${decodeURIComponent(D)}`).toString("base64")}`;let F=V2({...A.proxyTls});this[W2]=V2({...A.requestTls}),this[Bg]=Q(B,{connect:F}),this[bI]=new L2({...A,connect:async(J,Y)=>{let U=J.host;if(!J.port)U+=`:${aS(J.protocol)}`;try{let{socket:R,statusCode:w}=await this[Bg].connect({origin:E,port:I,path:U,signal:J.signal,headers:{...this[mI],host:C}});if(w!==200)R.on("error",()=>{}).destroy(),Y(new pS(`Proxy response (${w}) !== 200 when HTTP Tunneling`));if(J.protocol!=="https:"){Y(null,R);return}let W;if(this[CF])W=this[CF].servername;else W=J.servername;this[W2]({...J,servername:W,httpSocket:R},Y)}catch(R){Y(R)}}})}dispatch(A,Q){let{host:B}=new M2(A.origin),E=rS(A.headers);return tS(E),this[bI].dispatch({...A,headers:{...E,host:B}},Q)}async[cS](){await this[bI].close(),await this[Bg].close()}async[uS](){await this[bI].destroy(),await this[Bg].destroy()}}function rS(A){if(Array.isArray(A)){let Q={};for(let B=0;BB.toLowerCase()==="proxy-authorization"))throw new cI("Proxy-Authorization should be sent in ProxyAgent constructor")}X2.exports=Z2});var x2=h((V7,H2)=>{var QE=M("assert"),{kRetryHandlerDefaultRetry:S2}=JA(),{RequestRetryError:Eg}=EA(),{isDisturbed:K2,parseHeaders:eS,parseRangeHeader:z2}=a();function AK(A){let Q=Date.now();return new Date(A).getTime()-Q}class gF{constructor(A,Q){let{retryOptions:B,...E}=A,{retry:I,maxRetries:C,maxTimeout:g,minTimeout:D,timeoutFactor:F,methods:J,errorCodes:Y,retryAfter:U,statusCodes:R}=B??{};this.dispatch=Q.dispatch,this.handler=Q.handler,this.opts=E,this.abort=null,this.aborted=!1,this.retryOpts={retry:I??gF[S2],retryAfter:U??!0,maxTimeout:g??30000,timeout:D??500,timeoutFactor:F??2,maxRetries:C??5,methods:J??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:R??[500,502,503,504,429],errorCodes:Y??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE"]},this.retryCount=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect((w)=>{if(this.aborted=!0,this.abort)this.abort(w);else this.reason=w})}onRequestSent(){if(this.handler.onRequestSent)this.handler.onRequestSent()}onUpgrade(A,Q,B){if(this.handler.onUpgrade)this.handler.onUpgrade(A,Q,B)}onConnect(A){if(this.aborted)A(this.reason);else this.abort=A}onBodySent(A){if(this.handler.onBodySent)return this.handler.onBodySent(A)}static[S2](A,{state:Q,opts:B},E){let{statusCode:I,code:C,headers:g}=A,{method:D,retryOptions:F}=B,{maxRetries:J,timeout:Y,maxTimeout:U,timeoutFactor:R,statusCodes:w,errorCodes:W,methods:V}=F,{counter:S,currentTimeout:_}=Q;if(_=_!=null&&_>0?_:Y,C&&C!=="UND_ERR_REQ_RETRY"&&C!=="UND_ERR_SOCKET"&&!W.includes(C)){E(A);return}if(Array.isArray(V)&&!V.includes(D)){E(A);return}if(I!=null&&Array.isArray(w)&&!w.includes(I)){E(A);return}if(S>J){E(A);return}let x=g!=null&&g["retry-after"];if(x)x=Number(x),x=isNaN(x)?AK(x):x*1000;let q=x>0?Math.min(x,U):Math.min(_*R**S,U);Q.currentTimeout=q,setTimeout(()=>E(null),q)}onHeaders(A,Q,B,E){let I=eS(Q);if(this.retryCount+=1,A>=300)return this.abort(new Eg("Request failed",A,{headers:I,count:this.retryCount})),!1;if(this.resume!=null){if(this.resume=null,A!==206)return!0;let g=z2(I["content-range"]);if(!g)return this.abort(new Eg("Content-Range mismatch",A,{headers:I,count:this.retryCount})),!1;if(this.etag!=null&&this.etag!==I.etag)return this.abort(new Eg("ETag mismatch",A,{headers:I,count:this.retryCount})),!1;let{start:D,size:F,end:J=F}=g;return QE(this.start===D,"content-range mismatch"),QE(this.end==null||this.end===J,"content-range mismatch"),this.resume=B,!0}if(this.end==null){if(A===206){let g=z2(I["content-range"]);if(g==null)return this.handler.onHeaders(A,Q,B,E);let{start:D,size:F,end:J=F}=g;QE(D!=null&&Number.isFinite(D)&&this.start!==D,"content-range mismatch"),QE(Number.isFinite(D)),QE(J!=null&&Number.isFinite(J)&&this.end!==J,"invalid content-length"),this.start=D,this.end=J}if(this.end==null){let g=I["content-length"];this.end=g!=null?Number(g):null}return QE(Number.isFinite(this.start)),QE(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=B,this.etag=I.etag!=null?I.etag:null,this.handler.onHeaders(A,Q,B,E)}let C=new Eg("Request failed",A,{headers:I,count:this.retryCount});return this.abort(C),!1}onData(A){return this.start+=A.length,this.handler.onData(A)}onComplete(A){return this.retryCount=0,this.handler.onComplete(A)}onError(A){if(this.aborted||K2(this.opts.body))return this.handler.onError(A);this.retryOpts.retry(A,{state:{counter:this.retryCount++,currentTimeout:this.retryAfter},opts:{retryOptions:this.retryOpts,...this.opts}},Q.bind(this));function Q(B){if(B!=null||this.aborted||K2(this.opts.body))return this.handler.onError(B);if(this.start!==0)this.opts={...this.opts,headers:{...this.opts.headers,range:`bytes=${this.start}-${this.end??""}`}};try{this.dispatch(this.opts,this)}catch(E){this.handler.onError(E)}}}}H2.exports=gF});var cE=h((W7,y2)=>{var $2=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:QK}=EA(),BK=PI();if(j2()===void 0)T2(new BK);function T2(A){if(!A||typeof A.dispatch!=="function")throw new QK("Argument agent must implement Agent");Object.defineProperty(globalThis,$2,{value:A,writable:!0,enumerable:!1,configurable:!1})}function j2(){return globalThis[$2]}y2.exports={setGlobalDispatcher:T2,getGlobalDispatcher:j2}});var O2=h((Z7,_2)=>{_2.exports=class A{constructor(Q){this.handler=Q}onConnect(...Q){return this.handler.onConnect(...Q)}onError(...Q){return this.handler.onError(...Q)}onUpgrade(...Q){return this.handler.onUpgrade(...Q)}onHeaders(...Q){return this.handler.onHeaders(...Q)}onData(...Q){return this.handler.onData(...Q)}onComplete(...Q){return this.handler.onComplete(...Q)}onBodySent(...Q){return this.handler.onBodySent(...Q)}}});var BE=h((X7,k2)=>{var{kHeadersList:IQ,kConstruct:EK}=JA(),{kGuard:rQ}=DB(),{kEnumerableProperty:oQ}=a(),{makeIterator:uE,isValidHeaderName:uI,isValidHeaderValue:P2}=zQ(),IK=M("util"),{webidl:l}=nA(),CK=M("assert"),EQ=Symbol("headers map"),PA=Symbol("headers map sorted");function q2(A){return A===10||A===13||A===9||A===32}function f2(A){let Q=0,B=A.length;while(B>Q&&q2(A.charCodeAt(B-1)))--B;while(B>Q&&q2(A.charCodeAt(Q)))++Q;return Q===0&&B===A.length?A:A.substring(Q,B)}function v2(A,Q){if(Array.isArray(Q))for(let B=0;B>","record"]})}function DF(A,Q,B){if(B=f2(B),!uI(Q))throw l.errors.invalidArgument({prefix:"Headers.append",value:Q,type:"header name"});else if(!P2(B))throw l.errors.invalidArgument({prefix:"Headers.append",value:B,type:"header value"});if(A[rQ]==="immutable")throw new TypeError("immutable");else if(A[rQ]==="request-no-cors");return A[IQ].append(Q,B)}class Ig{cookies=null;constructor(A){if(A instanceof Ig)this[EQ]=new Map(A[EQ]),this[PA]=A[PA],this.cookies=A.cookies===null?null:[...A.cookies];else this[EQ]=new Map(A),this[PA]=null}contains(A){return A=A.toLowerCase(),this[EQ].has(A)}clear(){this[EQ].clear(),this[PA]=null,this.cookies=null}append(A,Q){this[PA]=null;let B=A.toLowerCase(),E=this[EQ].get(B);if(E){let I=B==="cookie"?"; ":", ";this[EQ].set(B,{name:E.name,value:`${E.value}${I}${Q}`})}else this[EQ].set(B,{name:A,value:Q});if(B==="set-cookie")this.cookies??=[],this.cookies.push(Q)}set(A,Q){this[PA]=null;let B=A.toLowerCase();if(B==="set-cookie")this.cookies=[Q];this[EQ].set(B,{name:A,value:Q})}delete(A){if(this[PA]=null,A=A.toLowerCase(),A==="set-cookie")this.cookies=null;this[EQ].delete(A)}get(A){let Q=this[EQ].get(A.toLowerCase());return Q===void 0?null:Q.value}*[Symbol.iterator](){for(let[A,{value:Q}]of this[EQ])yield[A,Q]}get entries(){let A={};if(this[EQ].size)for(let{name:Q,value:B}of this[EQ].values())A[Q]=B;return A}}class uA{constructor(A=void 0){if(A===EK)return;if(this[IQ]=new Ig,this[rQ]="none",A!==void 0)A=l.converters.HeadersInit(A),v2(this,A)}append(A,Q){return l.brandCheck(this,uA),l.argumentLengthCheck(arguments,2,{header:"Headers.append"}),A=l.converters.ByteString(A),Q=l.converters.ByteString(Q),DF(this,A,Q)}delete(A){if(l.brandCheck(this,uA),l.argumentLengthCheck(arguments,1,{header:"Headers.delete"}),A=l.converters.ByteString(A),!uI(A))throw l.errors.invalidArgument({prefix:"Headers.delete",value:A,type:"header name"});if(this[rQ]==="immutable")throw new TypeError("immutable");else if(this[rQ]==="request-no-cors");if(!this[IQ].contains(A))return;this[IQ].delete(A)}get(A){if(l.brandCheck(this,uA),l.argumentLengthCheck(arguments,1,{header:"Headers.get"}),A=l.converters.ByteString(A),!uI(A))throw l.errors.invalidArgument({prefix:"Headers.get",value:A,type:"header name"});return this[IQ].get(A)}has(A){if(l.brandCheck(this,uA),l.argumentLengthCheck(arguments,1,{header:"Headers.has"}),A=l.converters.ByteString(A),!uI(A))throw l.errors.invalidArgument({prefix:"Headers.has",value:A,type:"header name"});return this[IQ].contains(A)}set(A,Q){if(l.brandCheck(this,uA),l.argumentLengthCheck(arguments,2,{header:"Headers.set"}),A=l.converters.ByteString(A),Q=l.converters.ByteString(Q),Q=f2(Q),!uI(A))throw l.errors.invalidArgument({prefix:"Headers.set",value:A,type:"header name"});else if(!P2(Q))throw l.errors.invalidArgument({prefix:"Headers.set",value:Q,type:"header value"});if(this[rQ]==="immutable")throw new TypeError("immutable");else if(this[rQ]==="request-no-cors");this[IQ].set(A,Q)}getSetCookie(){l.brandCheck(this,uA);let A=this[IQ].cookies;if(A)return[...A];return[]}get[PA](){if(this[IQ][PA])return this[IQ][PA];let A=[],Q=[...this[IQ]].sort((E,I)=>E[0]A,"Headers","key")}return uE(()=>[...this[PA].values()],"Headers","key")}values(){if(l.brandCheck(this,uA),this[rQ]==="immutable"){let A=this[PA];return uE(()=>A,"Headers","value")}return uE(()=>[...this[PA].values()],"Headers","value")}entries(){if(l.brandCheck(this,uA),this[rQ]==="immutable"){let A=this[PA];return uE(()=>A,"Headers","key+value")}return uE(()=>[...this[PA].values()],"Headers","key+value")}forEach(A,Q=globalThis){if(l.brandCheck(this,uA),l.argumentLengthCheck(arguments,1,{header:"Headers.forEach"}),typeof A!=="function")throw new TypeError("Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'.");for(let[B,E]of this)A.apply(Q,[E,B,this])}[Symbol.for("nodejs.util.inspect.custom")](){return l.brandCheck(this,uA),this[IQ]}}uA.prototype[Symbol.iterator]=uA.prototype.entries;Object.defineProperties(uA.prototype,{append:oQ,delete:oQ,get:oQ,has:oQ,set:oQ,getSetCookie:oQ,keys:oQ,values:oQ,entries:oQ,forEach:oQ,[Symbol.iterator]:{enumerable:!1},[Symbol.toStringTag]:{value:"Headers",configurable:!0},[IK.inspect.custom]:{enumerable:!1}});l.converters.HeadersInit=function(A){if(l.util.Type(A)==="Object"){if(A[Symbol.iterator])return l.converters["sequence>"](A);return l.converters["record"](A)}throw l.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};k2.exports={fill:v2,Headers:uA,HeadersList:Ig}});var Fg=h((h7,p2)=>{var{Headers:gK,HeadersList:b2,fill:DK}=BE(),{extractBody:m2,cloneBody:FK,mixinBody:YK}=WI(),JF=a(),{kEnumerableProperty:WQ}=JF,{isValidReasonPhrase:JK,isCancelled:NK,isAborted:UK,isBlobLike:GK,serializeJavascriptValueToJSONString:RK,isErrorLike:wK,isomorphicEncode:MK}=zQ(),{redirectStatusSet:LK,nullBodyStatus:VK,DOMException:c2}=SB(),{kState:wA,kHeaders:jA,kGuard:dE,kRealm:VQ}=DB(),{webidl:i}=nA(),{FormData:WK}=XC(),{getGlobalOrigin:ZK}=XE(),{URLSerializer:u2}=fQ(),{kHeadersList:FF,kConstruct:XK}=JA(),NF=M("assert"),{types:YF}=M("util"),i2=globalThis.ReadableStream||M("stream/web").ReadableStream,hK=new TextEncoder("utf-8");class TA{static error(){let A={settingsObject:{}},Q=new TA;return Q[wA]=gg(),Q[VQ]=A,Q[jA][FF]=Q[wA].headersList,Q[jA][dE]="immutable",Q[jA][VQ]=A,Q}static json(A,Q={}){if(i.argumentLengthCheck(arguments,1,{header:"Response.json"}),Q!==null)Q=i.converters.ResponseInit(Q);let B=hK.encode(RK(A)),E=m2(B),I={settingsObject:{}},C=new TA;return C[VQ]=I,C[jA][dE]="response",C[jA][VQ]=I,d2(C,Q,{body:E[0],type:"application/json"}),C}static redirect(A,Q=302){let B={settingsObject:{}};i.argumentLengthCheck(arguments,1,{header:"Response.redirect"}),A=i.converters.USVString(A),Q=i.converters["unsigned short"](Q);let E;try{E=new URL(A,ZK())}catch(g){throw Object.assign(new TypeError("Failed to parse URL from "+A),{cause:g})}if(!LK.has(Q))throw new RangeError("Invalid status code "+Q);let I=new TA;I[VQ]=B,I[jA][dE]="immutable",I[jA][VQ]=B,I[wA].status=Q;let C=MK(u2(E));return I[wA].headersList.append("location",C),I}constructor(A=null,Q={}){if(A!==null)A=i.converters.BodyInit(A);Q=i.converters.ResponseInit(Q),this[VQ]={settingsObject:{}},this[wA]=Dg({}),this[jA]=new gK(XK),this[jA][dE]="response",this[jA][FF]=this[wA].headersList,this[jA][VQ]=this[VQ];let B=null;if(A!=null){let[E,I]=m2(A);B={body:E,type:I}}d2(this,Q,B)}get type(){return i.brandCheck(this,TA),this[wA].type}get url(){i.brandCheck(this,TA);let A=this[wA].urlList,Q=A[A.length-1]??null;if(Q===null)return"";return u2(Q,!0)}get redirected(){return i.brandCheck(this,TA),this[wA].urlList.length>1}get status(){return i.brandCheck(this,TA),this[wA].status}get ok(){return i.brandCheck(this,TA),this[wA].status>=200&&this[wA].status<=299}get statusText(){return i.brandCheck(this,TA),this[wA].statusText}get headers(){return i.brandCheck(this,TA),this[jA]}get body(){return i.brandCheck(this,TA),this[wA].body?this[wA].body.stream:null}get bodyUsed(){return i.brandCheck(this,TA),!!this[wA].body&&JF.isDisturbed(this[wA].body.stream)}clone(){if(i.brandCheck(this,TA),this.bodyUsed||this.body&&this.body.locked)throw i.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let A=UF(this[wA]),Q=new TA;return Q[wA]=A,Q[VQ]=this[VQ],Q[jA][FF]=A.headersList,Q[jA][dE]=this[jA][dE],Q[jA][VQ]=this[jA][VQ],Q}}YK(TA);Object.defineProperties(TA.prototype,{type:WQ,url:WQ,status:WQ,ok:WQ,redirected:WQ,statusText:WQ,headers:WQ,clone:WQ,body:WQ,bodyUsed:WQ,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(TA,{json:WQ,redirect:WQ,error:WQ});function UF(A){if(A.internalResponse)return l2(UF(A.internalResponse),A.type);let Q=Dg({...A,body:null});if(A.body!=null)Q.body=FK(A.body);return Q}function Dg(A){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...A,headersList:A.headersList?new b2(A.headersList):new b2,urlList:A.urlList?[...A.urlList]:[]}}function gg(A){let Q=wK(A);return Dg({type:"error",status:0,error:Q?A:new Error(A?String(A):A),aborted:A&&A.name==="AbortError"})}function Cg(A,Q){return Q={internalResponse:A,...Q},new Proxy(A,{get(B,E){return E in Q?Q[E]:B[E]},set(B,E,I){return NF(!(E in Q)),B[E]=I,!0}})}function l2(A,Q){if(Q==="basic")return Cg(A,{type:"basic",headersList:A.headersList});else if(Q==="cors")return Cg(A,{type:"cors",headersList:A.headersList});else if(Q==="opaque")return Cg(A,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});else if(Q==="opaqueredirect")return Cg(A,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});else NF(!1)}function SK(A,Q=null){return NF(NK(A)),UK(A)?gg(Object.assign(new c2("The operation was aborted.","AbortError"),{cause:Q})):gg(Object.assign(new c2("Request was cancelled."),{cause:Q}))}function d2(A,Q,B){if(Q.status!==null&&(Q.status<200||Q.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in Q&&Q.statusText!=null){if(!JK(String(Q.statusText)))throw new TypeError("Invalid statusText")}if("status"in Q&&Q.status!=null)A[wA].status=Q.status;if("statusText"in Q&&Q.statusText!=null)A[wA].statusText=Q.statusText;if("headers"in Q&&Q.headers!=null)DK(A[jA],Q.headers);if(B){if(VK.includes(A.status))throw i.errors.exception({header:"Response constructor",message:"Invalid response status code "+A.status});if(A[wA].body=B.body,B.type!=null&&!A[wA].headersList.contains("Content-Type"))A[wA].headersList.append("content-type",B.type)}}i.converters.ReadableStream=i.interfaceConverter(i2);i.converters.FormData=i.interfaceConverter(WK);i.converters.URLSearchParams=i.interfaceConverter(URLSearchParams);i.converters.XMLHttpRequestBodyInit=function(A){if(typeof A==="string")return i.converters.USVString(A);if(GK(A))return i.converters.Blob(A,{strict:!1});if(YF.isArrayBuffer(A)||YF.isTypedArray(A)||YF.isDataView(A))return i.converters.BufferSource(A);if(JF.isFormDataLike(A))return i.converters.FormData(A,{strict:!1});if(A instanceof URLSearchParams)return i.converters.URLSearchParams(A);return i.converters.DOMString(A)};i.converters.BodyInit=function(A){if(A instanceof i2)return i.converters.ReadableStream(A);if(A?.[Symbol.asyncIterator])return A;return i.converters.XMLHttpRequestBodyInit(A)};i.converters.ResponseInit=i.dictionaryConverter([{key:"status",converter:i.converters["unsigned short"],defaultValue:200},{key:"statusText",converter:i.converters.ByteString,defaultValue:""},{key:"headers",converter:i.converters.HeadersInit}]);p2.exports={makeNetworkError:gg,makeResponse:Dg,makeAppropriateNetworkError:SK,filterResponse:l2,Response:TA,cloneResponse:UF}});var lI=h((S7,t2)=>{var{extractBody:KK,mixinBody:zK,cloneBody:HK}=WI(),{Headers:n2,fill:xK,HeadersList:Ug}=BE(),{FinalizationRegistry:$K}=qD()(),iI=a(),{isValidHTTPToken:TK,sameOrigin:a2,normalizeMethod:jK,makePolicyContainer:yK,normalizeMethodRecord:_K}=zQ(),{forbiddenMethodsSet:OK,corsSafeListedMethodsSet:qK,referrerPolicy:PK,requestRedirect:fK,requestMode:vK,requestCredentials:kK,requestCache:bK,requestDuplex:mK}=SB(),{kEnumerableProperty:xA}=iI,{kHeaders:dA,kSignal:dI,kState:GA,kGuard:Yg,kRealm:ZQ}=DB(),{webidl:b}=nA(),{getGlobalOrigin:cK}=XE(),{URLSerializer:uK}=fQ(),{kHeadersList:Jg,kConstruct:Ng}=JA(),dK=M("assert"),{getMaxListeners:s2,setMaxListeners:o2,getEventListeners:iK,defaultMaxListeners:r2}=M("events"),GF=globalThis.TransformStream,lK=Symbol("abortController"),pK=new $K(({signal:A,abort:Q})=>{A.removeEventListener("abort",Q)});class IA{constructor(A,Q={}){if(A===Ng)return;b.argumentLengthCheck(arguments,1,{header:"Request constructor"}),A=b.converters.RequestInfo(A),Q=b.converters.RequestInit(Q),this[ZQ]={settingsObject:{baseUrl:cK(),get origin(){return this.baseUrl?.origin},policyContainer:yK()}};let B=null,E=null,I=this[ZQ].settingsObject.baseUrl,C=null;if(typeof A==="string"){let V;try{V=new URL(A,I)}catch(S){throw new TypeError("Failed to parse URL from "+A,{cause:S})}if(V.username||V.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+A);B=Gg({urlList:[V]}),E="cors"}else dK(A instanceof IA),B=A[GA],C=A[dI];let g=this[ZQ].settingsObject.origin,D="client";if(B.window?.constructor?.name==="EnvironmentSettingsObject"&&a2(B.window,g))D=B.window;if(Q.window!=null)throw new TypeError(`'window' option '${D}' must be null`);if("window"in Q)D="no-window";B=Gg({method:B.method,headersList:B.headersList,unsafeRequest:B.unsafeRequest,client:this[ZQ].settingsObject,window:D,priority:B.priority,origin:B.origin,referrer:B.referrer,referrerPolicy:B.referrerPolicy,mode:B.mode,credentials:B.credentials,cache:B.cache,redirect:B.redirect,integrity:B.integrity,keepalive:B.keepalive,reloadNavigation:B.reloadNavigation,historyNavigation:B.historyNavigation,urlList:[...B.urlList]});let F=Object.keys(Q).length!==0;if(F){if(B.mode==="navigate")B.mode="same-origin";B.reloadNavigation=!1,B.historyNavigation=!1,B.origin="client",B.referrer="client",B.referrerPolicy="",B.url=B.urlList[B.urlList.length-1],B.urlList=[B.url]}if(Q.referrer!==void 0){let V=Q.referrer;if(V==="")B.referrer="no-referrer";else{let S;try{S=new URL(V,I)}catch(_){throw new TypeError(`Referrer "${V}" is not a valid URL.`,{cause:_})}if(S.protocol==="about:"&&S.hostname==="client"||g&&!a2(S,this[ZQ].settingsObject.baseUrl))B.referrer="client";else B.referrer=S}}if(Q.referrerPolicy!==void 0)B.referrerPolicy=Q.referrerPolicy;let J;if(Q.mode!==void 0)J=Q.mode;else J=E;if(J==="navigate")throw b.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(J!=null)B.mode=J;if(Q.credentials!==void 0)B.credentials=Q.credentials;if(Q.cache!==void 0)B.cache=Q.cache;if(B.cache==="only-if-cached"&&B.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(Q.redirect!==void 0)B.redirect=Q.redirect;if(Q.integrity!=null)B.integrity=String(Q.integrity);if(Q.keepalive!==void 0)B.keepalive=Boolean(Q.keepalive);if(Q.method!==void 0){let V=Q.method;if(!TK(V))throw new TypeError(`'${V}' is not a valid HTTP method.`);if(OK.has(V.toUpperCase()))throw new TypeError(`'${V}' HTTP method is unsupported.`);V=_K[V]??jK(V),B.method=V}if(Q.signal!==void 0)C=Q.signal;this[GA]=B;let Y=new AbortController;if(this[dI]=Y.signal,this[dI][ZQ]=this[ZQ],C!=null){if(!C||typeof C.aborted!=="boolean"||typeof C.addEventListener!=="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(C.aborted)Y.abort(C.reason);else{this[lK]=Y;let V=new WeakRef(Y),S=function(){let _=V.deref();if(_!==void 0)_.abort(this.reason)};try{if(typeof s2==="function"&&s2(C)===r2)o2(100,C);else if(iK(C,"abort").length>=r2)o2(100,C)}catch{}iI.addAbortListener(C,S),pK.register(Y,{signal:C,abort:S})}}if(this[dA]=new n2(Ng),this[dA][Jg]=B.headersList,this[dA][Yg]="request",this[dA][ZQ]=this[ZQ],J==="no-cors"){if(!qK.has(B.method))throw new TypeError(`'${B.method} is unsupported in no-cors mode.`);this[dA][Yg]="request-no-cors"}if(F){let V=this[dA][Jg],S=Q.headers!==void 0?Q.headers:new Ug(V);if(V.clear(),S instanceof Ug){for(let[_,x]of S)V.append(_,x);V.cookies=S.cookies}else xK(this[dA],S)}let U=A instanceof IA?A[GA].body:null;if((Q.body!=null||U!=null)&&(B.method==="GET"||B.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let R=null;if(Q.body!=null){let[V,S]=KK(Q.body,B.keepalive);if(R=V,S&&!this[dA][Jg].contains("content-type"))this[dA].append("content-type",S)}let w=R??U;if(w!=null&&w.source==null){if(R!=null&&Q.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(B.mode!=="same-origin"&&B.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');B.useCORSPreflightFlag=!0}let W=w;if(R==null&&U!=null){if(iI.isDisturbed(U.stream)||U.stream.locked)throw new TypeError("Cannot construct a Request with a Request object that has already been used.");if(!GF)GF=M("stream/web").TransformStream;let V=new GF;U.stream.pipeThrough(V),W={source:U.source,length:U.length,stream:V.readable}}this[GA].body=W}get method(){return b.brandCheck(this,IA),this[GA].method}get url(){return b.brandCheck(this,IA),uK(this[GA].url)}get headers(){return b.brandCheck(this,IA),this[dA]}get destination(){return b.brandCheck(this,IA),this[GA].destination}get referrer(){if(b.brandCheck(this,IA),this[GA].referrer==="no-referrer")return"";if(this[GA].referrer==="client")return"about:client";return this[GA].referrer.toString()}get referrerPolicy(){return b.brandCheck(this,IA),this[GA].referrerPolicy}get mode(){return b.brandCheck(this,IA),this[GA].mode}get credentials(){return this[GA].credentials}get cache(){return b.brandCheck(this,IA),this[GA].cache}get redirect(){return b.brandCheck(this,IA),this[GA].redirect}get integrity(){return b.brandCheck(this,IA),this[GA].integrity}get keepalive(){return b.brandCheck(this,IA),this[GA].keepalive}get isReloadNavigation(){return b.brandCheck(this,IA),this[GA].reloadNavigation}get isHistoryNavigation(){return b.brandCheck(this,IA),this[GA].historyNavigation}get signal(){return b.brandCheck(this,IA),this[dI]}get body(){return b.brandCheck(this,IA),this[GA].body?this[GA].body.stream:null}get bodyUsed(){return b.brandCheck(this,IA),!!this[GA].body&&iI.isDisturbed(this[GA].body.stream)}get duplex(){return b.brandCheck(this,IA),"half"}clone(){if(b.brandCheck(this,IA),this.bodyUsed||this.body?.locked)throw new TypeError("unusable");let A=nK(this[GA]),Q=new IA(Ng);Q[GA]=A,Q[ZQ]=this[ZQ],Q[dA]=new n2(Ng),Q[dA][Jg]=A.headersList,Q[dA][Yg]=this[dA][Yg],Q[dA][ZQ]=this[dA][ZQ];let B=new AbortController;if(this.signal.aborted)B.abort(this.signal.reason);else iI.addAbortListener(this.signal,()=>{B.abort(this.signal.reason)});return Q[dI]=B.signal,Q}}zK(IA);function Gg(A){let Q={method:"GET",localURLsOnly:!1,unsafeRequest:!1,body:null,client:null,reservedClient:null,replacesClientId:"",window:"client",keepalive:!1,serviceWorkers:"all",initiator:"",destination:"",priority:null,origin:"client",policyContainer:"client",referrer:"client",referrerPolicy:"",mode:"no-cors",useCORSPreflightFlag:!1,credentials:"same-origin",useCredentials:!1,cache:"default",redirect:"follow",integrity:"",cryptoGraphicsNonceMetadata:"",parserMetadata:"",reloadNavigation:!1,historyNavigation:!1,userActivation:!1,taintedOrigin:!1,redirectCount:0,responseTainting:"basic",preventNoCacheCacheControlHeaderModification:!1,done:!1,timingAllowFailed:!1,...A,headersList:A.headersList?new Ug(A.headersList):new Ug};return Q.url=Q.urlList[0],Q}function nK(A){let Q=Gg({...A,body:null});if(A.body!=null)Q.body=HK(A.body);return Q}Object.defineProperties(IA.prototype,{method:xA,url:xA,headers:xA,redirect:xA,clone:xA,signal:xA,duplex:xA,destination:xA,body:xA,bodyUsed:xA,isHistoryNavigation:xA,isReloadNavigation:xA,keepalive:xA,integrity:xA,cache:xA,credentials:xA,attribute:xA,referrerPolicy:xA,referrer:xA,mode:xA,[Symbol.toStringTag]:{value:"Request",configurable:!0}});b.converters.Request=b.interfaceConverter(IA);b.converters.RequestInfo=function(A){if(typeof A==="string")return b.converters.USVString(A);if(A instanceof IA)return b.converters.Request(A);return b.converters.USVString(A)};b.converters.AbortSignal=b.interfaceConverter(AbortSignal);b.converters.RequestInit=b.dictionaryConverter([{key:"method",converter:b.converters.ByteString},{key:"headers",converter:b.converters.HeadersInit},{key:"body",converter:b.nullableConverter(b.converters.BodyInit)},{key:"referrer",converter:b.converters.USVString},{key:"referrerPolicy",converter:b.converters.DOMString,allowedValues:PK},{key:"mode",converter:b.converters.DOMString,allowedValues:vK},{key:"credentials",converter:b.converters.DOMString,allowedValues:kK},{key:"cache",converter:b.converters.DOMString,allowedValues:bK},{key:"redirect",converter:b.converters.DOMString,allowedValues:fK},{key:"integrity",converter:b.converters.DOMString},{key:"keepalive",converter:b.converters.boolean},{key:"signal",converter:b.nullableConverter((A)=>b.converters.AbortSignal(A,{strict:!1}))},{key:"window",converter:b.converters.any},{key:"duplex",converter:b.converters.DOMString,allowedValues:mK}]);t2.exports={Request:IA,makeRequest:Gg}});var Wg=h((K7,Uw)=>{var{Response:aK,makeNetworkError:CA,makeAppropriateNetworkError:Rg,filterResponse:RF,makeResponse:wg}=Fg(),{Headers:e2}=BE(),{Request:sK,makeRequest:oK}=lI(),pI=M("zlib"),{bytesMatch:rK,makePolicyContainer:tK,clonePolicyContainer:eK,requestBadPort:A8,TAOCheck:Q8,appendRequestOriginHeader:B8,responseLocationURL:E8,requestCurrentURL:tQ,setRequestReferrerPolicyOnRedirect:I8,tryUpgradeRequestToAPotentiallyTrustworthyURL:C8,createOpaqueTimingInfo:SF,appendFetchMetadata:g8,corsCheck:D8,crossOriginResourcePolicyCheck:F8,determineRequestsReferrer:Y8,coarsenedSharedCurrentTime:KF,createDeferredPromise:J8,isBlobLike:N8,sameOrigin:ZF,isCancelled:lE,isAborted:Aw,isErrorLike:U8,fullyReadBody:Iw,readableStreamClose:G8,isomorphicEncode:XF,urlIsLocal:R8,urlIsHttpHttpsScheme:zF,urlHasHttpsScheme:w8}=zQ(),{kState:hF,kHeaders:wF,kGuard:M8,kRealm:Qw}=DB(),pE=M("assert"),{safelyExtractBody:Mg}=WI(),{redirectStatusSet:Cw,nullBodyStatus:gw,safeMethodsSet:L8,requestBodyHeader:V8,subresourceSet:W8,DOMException:Lg}=SB(),{kHeadersList:iE}=JA(),Z8=M("events"),{Readable:X8,pipeline:h8}=M("stream"),{addAbortListener:S8,isErrored:K8,isReadable:Vg,nodeMajor:Bw,nodeMinor:z8}=a(),{dataURLProcessor:H8,serializeAMimeType:x8}=fQ(),{TransformStream:$8}=M("stream/web"),{getGlobalDispatcher:T8}=cE(),{webidl:j8}=nA(),{STATUS_CODES:y8}=M("http"),_8=["GET","HEAD"],MF,LF=globalThis.ReadableStream;class HF extends Z8{constructor(A){super();this.dispatcher=A,this.connection=null,this.dump=!1,this.state="ongoing",this.setMaxListeners(21)}terminate(A){if(this.state!=="ongoing")return;this.state="terminated",this.connection?.destroy(A),this.emit("terminated",A)}abort(A){if(this.state!=="ongoing")return;if(this.state="aborted",!A)A=new Lg("The operation was aborted.","AbortError");this.serializedAbortReason=A,this.connection?.destroy(A),this.emit("terminated",A)}}function O8(A,Q={}){j8.argumentLengthCheck(arguments,1,{header:"globalThis.fetch"});let B=J8(),E;try{E=new sK(A,Q)}catch(R){return B.reject(R),B.promise}let I=E[hF];if(E.signal.aborted)return VF(B,I,null,E.signal.reason),B.promise;if(I.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope")I.serviceWorkers="none";let g=null,D=null,F=!1,J=null;return S8(E.signal,()=>{F=!0,pE(J!=null),J.abort(E.signal.reason),VF(B,I,g,E.signal.reason)}),J=Fw({request:I,processResponseEndOfBody:(R)=>Dw(R,"fetch"),processResponse:(R)=>{if(F)return Promise.resolve();if(R.aborted)return VF(B,I,g,J.serializedAbortReason),Promise.resolve();if(R.type==="error")return B.reject(Object.assign(new TypeError("fetch failed"),{cause:R.error})),Promise.resolve();g=new aK,g[hF]=R,g[Qw]=D,g[wF][iE]=R.headersList,g[wF][M8]="immutable",g[wF][Qw]=D,B.resolve(g)},dispatcher:Q.dispatcher??T8()}),B.promise}function Dw(A,Q="other"){if(A.type==="error"&&A.aborted)return;if(!A.urlList?.length)return;let B=A.urlList[0],E=A.timingInfo,I=A.cacheState;if(!zF(B))return;if(E===null)return;if(!A.timingAllowPassed)E=SF({startTime:E.startTime}),I="";E.endTime=KF(),A.timingInfo=E,q8(E,B,Q,globalThis,I)}function q8(A,Q,B,E,I){if(Bw>18||Bw===18&&z8>=2)performance.markResourceTiming(A,Q.href,B,E,I)}function VF(A,Q,B,E){if(!E)E=new Lg("The operation was aborted.","AbortError");if(A.reject(E),Q.body!=null&&Vg(Q.body?.stream))Q.body.stream.cancel(E).catch((C)=>{if(C.code==="ERR_INVALID_STATE")return;throw C});if(B==null)return;let I=B[hF];if(I.body!=null&&Vg(I.body?.stream))I.body.stream.cancel(E).catch((C)=>{if(C.code==="ERR_INVALID_STATE")return;throw C})}function Fw({request:A,processRequestBodyChunkLength:Q,processRequestEndOfBody:B,processResponse:E,processResponseEndOfBody:I,processResponseConsumeBody:C,useParallelQueue:g=!1,dispatcher:D}){let F=null,J=!1;if(A.client!=null)F=A.client.globalObject,J=A.client.crossOriginIsolatedCapability;let Y=KF(J),U=SF({startTime:Y}),R={controller:new HF(D),request:A,timingInfo:U,processRequestBodyChunkLength:Q,processRequestEndOfBody:B,processResponse:E,processResponseConsumeBody:C,processResponseEndOfBody:I,taskDestination:F,crossOriginIsolatedCapability:J};if(pE(!A.body||A.body.stream),A.window==="client")A.window=A.client?.globalObject?.constructor?.name==="Window"?A.client:"no-window";if(A.origin==="client")A.origin=A.client?.origin;if(A.policyContainer==="client")if(A.client!=null)A.policyContainer=eK(A.client.policyContainer);else A.policyContainer=tK();if(!A.headersList.contains("accept"))A.headersList.append("accept","*/*");if(!A.headersList.contains("accept-language"))A.headersList.append("accept-language","*");if(A.priority===null);if(W8.has(A.destination));return Yw(R).catch((w)=>{R.controller.terminate(w)}),R.controller}async function Yw(A,Q=!1){let B=A.request,E=null;if(B.localURLsOnly&&!R8(tQ(B)))E=CA("local URLs only");if(C8(B),A8(B)==="blocked")E=CA("bad port");if(B.referrerPolicy==="")B.referrerPolicy=B.policyContainer.referrerPolicy;if(B.referrer!=="no-referrer")B.referrer=Y8(B);if(E===null)E=await(async()=>{let C=tQ(B);if(ZF(C,B.url)&&B.responseTainting==="basic"||C.protocol==="data:"||(B.mode==="navigate"||B.mode==="websocket"))return B.responseTainting="basic",await Ew(A);if(B.mode==="same-origin")return CA('request mode cannot be "same-origin"');if(B.mode==="no-cors"){if(B.redirect!=="follow")return CA('redirect mode cannot be "follow" for "no-cors" request');return B.responseTainting="opaque",await Ew(A)}if(!zF(tQ(B)))return CA("URL scheme must be a HTTP(S) scheme");return B.responseTainting="cors",await Jw(A)})();if(Q)return E;if(E.status!==0&&!E.internalResponse){if(B.responseTainting==="cors");if(B.responseTainting==="basic")E=RF(E,"basic");else if(B.responseTainting==="cors")E=RF(E,"cors");else if(B.responseTainting==="opaque")E=RF(E,"opaque");else pE(!1)}let I=E.status===0?E:E.internalResponse;if(I.urlList.length===0)I.urlList.push(...B.urlList);if(!B.timingAllowFailed)E.timingAllowPassed=!0;if(E.type==="opaque"&&I.status===206&&I.rangeRequested&&!B.headers.contains("range"))E=I=CA();if(E.status!==0&&(B.method==="HEAD"||B.method==="CONNECT"||gw.includes(I.status)))I.body=null,A.controller.dump=!0;if(B.integrity){let C=(D)=>WF(A,CA(D));if(B.responseTainting==="opaque"||E.body==null){C(E.error);return}let g=(D)=>{if(!rK(D,B.integrity)){C("integrity mismatch");return}E.body=Mg(D)[0],WF(A,E)};await Iw(E.body,g,C)}else WF(A,E)}function Ew(A){if(lE(A)&&A.request.redirectCount===0)return Promise.resolve(Rg(A));let{request:Q}=A,{protocol:B}=tQ(Q);switch(B){case"about:":return Promise.resolve(CA("about scheme is not supported"));case"blob:":{if(!MF)MF=M("buffer").resolveObjectURL;let E=tQ(Q);if(E.search.length!==0)return Promise.resolve(CA("NetworkError when attempting to fetch resource."));let I=MF(E.toString());if(Q.method!=="GET"||!N8(I))return Promise.resolve(CA("invalid method"));let C=Mg(I),g=C[0],D=XF(`${g.length}`),F=C[1]??"",J=wg({statusText:"OK",headersList:[["content-length",{name:"Content-Length",value:D}],["content-type",{name:"Content-Type",value:F}]]});return J.body=g,Promise.resolve(J)}case"data:":{let E=tQ(Q),I=H8(E);if(I==="failure")return Promise.resolve(CA("failed to fetch the data URL"));let C=x8(I.mimeType);return Promise.resolve(wg({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:C}]],body:Mg(I.body)[0]}))}case"file:":return Promise.resolve(CA("not implemented... yet..."));case"http:":case"https:":return Jw(A).catch((E)=>CA(E));default:return Promise.resolve(CA("unknown scheme"))}}function P8(A,Q){if(A.request.done=!0,A.processResponseDone!=null)queueMicrotask(()=>A.processResponseDone(Q))}function WF(A,Q){if(Q.type==="error")Q.urlList=[A.request.urlList[0]],Q.timingInfo=SF({startTime:A.timingInfo.startTime});let B=()=>{if(A.request.done=!0,A.processResponseEndOfBody!=null)queueMicrotask(()=>A.processResponseEndOfBody(Q))};if(A.processResponse!=null)queueMicrotask(()=>A.processResponse(Q));if(Q.body==null)B();else{let I=new $8({start(){},transform:(C,g)=>{g.enqueue(C)},flush:B},{size(){return 1}},{size(){return 1}});Q.body={stream:Q.body.stream.pipeThrough(I)}}if(A.processResponseConsumeBody!=null){let E=(C)=>A.processResponseConsumeBody(Q,C),I=(C)=>A.processResponseConsumeBody(Q,C);if(Q.body==null)queueMicrotask(()=>E(null));else return Iw(Q.body,E,I);return Promise.resolve()}}async function Jw(A){let Q=A.request,B=null,E=null,I=A.timingInfo;if(Q.serviceWorkers==="all");if(B===null){if(Q.redirect==="follow")Q.serviceWorkers="none";if(E=B=await Nw(A),Q.responseTainting==="cors"&&D8(Q,B)==="failure")return CA("cors failure");if(Q8(Q,B)==="failure")Q.timingAllowFailed=!0}if((Q.responseTainting==="opaque"||B.type==="opaque")&&F8(Q.origin,Q.client,Q.destination,E)==="blocked")return CA("blocked");if(Cw.has(E.status)){if(Q.redirect!=="manual")A.controller.connection.destroy();if(Q.redirect==="error")B=CA("unexpected redirect");else if(Q.redirect==="manual")B=E;else if(Q.redirect==="follow")B=await f8(A,B);else pE(!1)}return B.timingInfo=I,B}function f8(A,Q){let B=A.request,E=Q.internalResponse?Q.internalResponse:Q,I;try{if(I=E8(E,tQ(B).hash),I==null)return Q}catch(g){return Promise.resolve(CA(g))}if(!zF(I))return Promise.resolve(CA("URL scheme must be a HTTP(S) scheme"));if(B.redirectCount===20)return Promise.resolve(CA("redirect count exceeded"));if(B.redirectCount+=1,B.mode==="cors"&&(I.username||I.password)&&!ZF(B,I))return Promise.resolve(CA('cross origin not allowed for request mode "cors"'));if(B.responseTainting==="cors"&&(I.username||I.password))return Promise.resolve(CA('URL cannot contain credentials for request mode "cors"'));if(E.status!==303&&B.body!=null&&B.body.source==null)return Promise.resolve(CA());if([301,302].includes(E.status)&&B.method==="POST"||E.status===303&&!_8.includes(B.method)){B.method="GET",B.body=null;for(let g of V8)B.headersList.delete(g)}if(!ZF(tQ(B),I))B.headersList.delete("authorization"),B.headersList.delete("proxy-authorization",!0),B.headersList.delete("cookie"),B.headersList.delete("host");if(B.body!=null)pE(B.body.source!=null),B.body=Mg(B.body.source)[0];let C=A.timingInfo;if(C.redirectEndTime=C.postRedirectStartTime=KF(A.crossOriginIsolatedCapability),C.redirectStartTime===0)C.redirectStartTime=C.startTime;return B.urlList.push(I),I8(B,E),Yw(A,!0)}async function Nw(A,Q=!1,B=!1){let E=A.request,I=null,C=null,g=null,D=null,F=!1;if(E.window==="no-window"&&E.redirect==="error")I=A,C=E;else C=oK(E),I={...A},I.request=C;let J=E.credentials==="include"||E.credentials==="same-origin"&&E.responseTainting==="basic",Y=C.body?C.body.length:null,U=null;if(C.body==null&&["POST","PUT"].includes(C.method))U="0";if(Y!=null)U=XF(`${Y}`);if(U!=null)C.headersList.append("content-length",U);if(Y!=null&&C.keepalive);if(C.referrer instanceof URL)C.headersList.append("referer",XF(C.referrer.href));if(B8(C),g8(C),!C.headersList.contains("user-agent"))C.headersList.append("user-agent",typeof esbuildDetection==="undefined"?"undici":"node");if(C.cache==="default"&&(C.headersList.contains("if-modified-since")||C.headersList.contains("if-none-match")||C.headersList.contains("if-unmodified-since")||C.headersList.contains("if-match")||C.headersList.contains("if-range")))C.cache="no-store";if(C.cache==="no-cache"&&!C.preventNoCacheCacheControlHeaderModification&&!C.headersList.contains("cache-control"))C.headersList.append("cache-control","max-age=0");if(C.cache==="no-store"||C.cache==="reload"){if(!C.headersList.contains("pragma"))C.headersList.append("pragma","no-cache");if(!C.headersList.contains("cache-control"))C.headersList.append("cache-control","no-cache")}if(C.headersList.contains("range"))C.headersList.append("accept-encoding","identity");if(!C.headersList.contains("accept-encoding"))if(w8(tQ(C)))C.headersList.append("accept-encoding","br, gzip, deflate");else C.headersList.append("accept-encoding","gzip, deflate");if(C.headersList.delete("host"),D==null)C.cache="no-store";if(C.mode!=="no-store"&&C.mode!=="reload");if(g==null){if(C.mode==="only-if-cached")return CA("only if cached");let R=await v8(I,J,B);if(!L8.has(C.method)&&R.status>=200&&R.status<=399);if(F&&R.status===304);if(g==null)g=R}if(g.urlList=[...C.urlList],C.headersList.contains("range"))g.rangeRequested=!0;if(g.requestIncludesCredentials=J,g.status===407){if(E.window==="no-window")return CA();if(lE(A))return Rg(A);return CA("proxy authentication required")}if(g.status===421&&!B&&(E.body==null||E.body.source!=null)){if(lE(A))return Rg(A);A.controller.connection.destroy(),g=await Nw(A,Q,!0)}return g}async function v8(A,Q=!1,B=!1){pE(!A.controller.connection||A.controller.connection.destroyed),A.controller.connection={abort:null,destroyed:!1,destroy(W){if(!this.destroyed)this.destroyed=!0,this.abort?.(W??new Lg("The operation was aborted.","AbortError"))}};let E=A.request,I=null,C=A.timingInfo;if(!0)E.cache="no-store";let D=B?"yes":"no";if(E.mode==="websocket");let F=null;if(E.body==null&&A.processRequestEndOfBody)queueMicrotask(()=>A.processRequestEndOfBody());else if(E.body!=null){let W=async function*(_){if(lE(A))return;yield _,A.processRequestBodyChunkLength?.(_.byteLength)},V=()=>{if(lE(A))return;if(A.processRequestEndOfBody)A.processRequestEndOfBody()},S=(_)=>{if(lE(A))return;if(_.name==="AbortError")A.controller.abort();else A.controller.terminate(_)};F=async function*(){try{for await(let _ of E.body.stream)yield*W(_);V()}catch(_){S(_)}}()}try{let{body:W,status:V,statusText:S,headersList:_,socket:x}=await w({body:F});if(x)I=wg({status:V,statusText:S,headersList:_,socket:x});else{let q=W[Symbol.asyncIterator]();A.controller.next=()=>q.next(),I=wg({status:V,statusText:S,headersList:_})}}catch(W){if(W.name==="AbortError")return A.controller.connection.destroy(),Rg(A,W);return CA(W)}let J=()=>{A.controller.resume()},Y=(W)=>{A.controller.abort(W)};if(!LF)LF=M("stream/web").ReadableStream;let U=new LF({async start(W){A.controller.controller=W},async pull(W){await J(W)},async cancel(W){await Y(W)}},{highWaterMark:0,size(){return 1}});I.body={stream:U},A.controller.on("terminated",R),A.controller.resume=async()=>{while(!0){let W,V;try{let{done:S,value:_}=await A.controller.next();if(Aw(A))break;W=S?void 0:_}catch(S){if(A.controller.ended&&!C.encodedBodySize)W=void 0;else W=S,V=!0}if(W===void 0){G8(A.controller.controller),P8(A,I);return}if(C.decodedBodySize+=W?.byteLength??0,V){A.controller.terminate(W);return}if(A.controller.controller.enqueue(new Uint8Array(W)),K8(U)){A.controller.terminate();return}if(!A.controller.controller.desiredSize)return}};function R(W){if(Aw(A)){if(I.aborted=!0,Vg(U))A.controller.controller.error(A.controller.serializedAbortReason)}else if(Vg(U))A.controller.controller.error(new TypeError("terminated",{cause:U8(W)?W:void 0}));A.controller.connection.destroy()}return I;async function w({body:W}){let V=tQ(E),S=A.controller.dispatcher;return new Promise((_,x)=>S.dispatch({path:V.pathname+V.search,origin:V.origin,method:E.method,body:A.controller.dispatcher.isMockActive?E.body&&(E.body.source||E.body.stream):W,headers:E.headersList.entries,maxRedirections:0,upgrade:E.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(q){let{connection:z}=A.controller;if(z.destroyed)q(new Lg("The operation was aborted.","AbortError"));else A.controller.on("terminated",q),this.abort=z.abort=q},onHeaders(q,z,XA,FA){if(q<200)return;let RA=[],lA="",yA=new e2;if(Array.isArray(z))for(let e=0;eqQ.trim());else if(YA.toLowerCase()==="location")lA=kA;yA[iE].append(YA,kA)}else{let e=Object.keys(z);for(let YA of e){let kA=z[YA];if(YA.toLowerCase()==="content-encoding")RA=kA.toLowerCase().split(",").map((qQ)=>qQ.trim()).reverse();else if(YA.toLowerCase()==="location")lA=kA;yA[iE].append(YA,kA)}}this.body=new X8({read:XA});let fA=[],vA=E.redirect==="follow"&&lA&&Cw.has(q);if(E.method!=="HEAD"&&E.method!=="CONNECT"&&!gw.includes(q)&&!vA)for(let e of RA)if(e==="x-gzip"||e==="gzip")fA.push(pI.createGunzip({flush:pI.constants.Z_SYNC_FLUSH,finishFlush:pI.constants.Z_SYNC_FLUSH}));else if(e==="deflate")fA.push(pI.createInflate());else if(e==="br")fA.push(pI.createBrotliDecompress());else{fA.length=0;break}return _({status:q,statusText:FA,headersList:yA[iE],body:fA.length?h8(this.body,...fA,()=>{}):this.body.on("error",()=>{})}),!0},onData(q){if(A.controller.dump)return;let z=q;return C.encodedBodySize+=z.byteLength,this.body.push(z)},onComplete(){if(this.abort)A.controller.off("terminated",this.abort);A.controller.ended=!0,this.body.push(null)},onError(q){if(this.abort)A.controller.off("terminated",this.abort);this.body?.destroy(q),A.controller.terminate(q),x(q)},onUpgrade(q,z,XA){if(q!==101)return;let FA=new e2;for(let RA=0;RA{Gw.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var ww=h((H7,Rw)=>{var{webidl:XQ}=nA(),Zg=Symbol("ProgressEvent state");class nI extends Event{constructor(A,Q={}){A=XQ.converters.DOMString(A),Q=XQ.converters.ProgressEventInit(Q??{});super(A,Q);this[Zg]={lengthComputable:Q.lengthComputable,loaded:Q.loaded,total:Q.total}}get lengthComputable(){return XQ.brandCheck(this,nI),this[Zg].lengthComputable}get loaded(){return XQ.brandCheck(this,nI),this[Zg].loaded}get total(){return XQ.brandCheck(this,nI),this[Zg].total}}XQ.converters.ProgressEventInit=XQ.dictionaryConverter([{key:"lengthComputable",converter:XQ.converters.boolean,defaultValue:!1},{key:"loaded",converter:XQ.converters["unsigned long long"],defaultValue:0},{key:"total",converter:XQ.converters["unsigned long long"],defaultValue:0},{key:"bubbles",converter:XQ.converters.boolean,defaultValue:!1},{key:"cancelable",converter:XQ.converters.boolean,defaultValue:!1},{key:"composed",converter:XQ.converters.boolean,defaultValue:!1}]);Rw.exports={ProgressEvent:nI}});var Lw=h((x7,Mw)=>{function k8(A){if(!A)return"failure";switch(A.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}Mw.exports={getEncoding:k8}});var zw=h(($7,Kw)=>{var{kState:nE,kError:$F,kResult:Vw,kAborted:aI,kLastProgressEventFired:TF}=xF(),{ProgressEvent:b8}=ww(),{getEncoding:Ww}=Lw(),{DOMException:m8}=SB(),{serializeAMimeType:c8,parseMIMEType:Zw}=fQ(),{types:u8}=M("util"),{StringDecoder:Xw}=M("string_decoder"),{btoa:hw}=M("buffer"),d8={enumerable:!0,writable:!1,configurable:!1};function i8(A,Q,B,E){if(A[nE]==="loading")throw new m8("Invalid state","InvalidStateError");A[nE]="loading",A[Vw]=null,A[$F]=null;let C=Q.stream().getReader(),g=[],D=C.read(),F=!0;(async()=>{while(!A[aI])try{let{done:J,value:Y}=await D;if(F&&!A[aI])queueMicrotask(()=>{yB("loadstart",A)});if(F=!1,!J&&u8.isUint8Array(Y)){if(g.push(Y),(A[TF]===void 0||Date.now()-A[TF]>=50)&&!A[aI])A[TF]=Date.now(),queueMicrotask(()=>{yB("progress",A)});D=C.read()}else if(J){queueMicrotask(()=>{A[nE]="done";try{let U=l8(g,B,Q.type,E);if(A[aI])return;A[Vw]=U,yB("load",A)}catch(U){A[$F]=U,yB("error",A)}if(A[nE]!=="loading")yB("loadend",A)});break}}catch(J){if(A[aI])return;queueMicrotask(()=>{if(A[nE]="done",A[$F]=J,yB("error",A),A[nE]!=="loading")yB("loadend",A)});break}})()}function yB(A,Q){let B=new b8(A,{bubbles:!1,cancelable:!1});Q.dispatchEvent(B)}function l8(A,Q,B,E){switch(Q){case"DataURL":{let I="data:",C=Zw(B||"application/octet-stream");if(C!=="failure")I+=c8(C);I+=";base64,";let g=new Xw("latin1");for(let D of A)I+=hw(g.write(D));return I+=hw(g.end()),I}case"Text":{let I="failure";if(E)I=Ww(E);if(I==="failure"&&B){let C=Zw(B);if(C!=="failure")I=Ww(C.parameters.get("charset"))}if(I==="failure")I="UTF-8";return p8(A,I)}case"ArrayBuffer":return Sw(A).buffer;case"BinaryString":{let I="",C=new Xw("latin1");for(let g of A)I+=C.write(g);return I+=C.end(),I}}}function p8(A,Q){let B=Sw(A),E=n8(B),I=0;if(E!==null)Q=E,I=E==="UTF-8"?3:2;let C=B.slice(I);return new TextDecoder(Q).decode(C)}function n8(A){let[Q,B,E]=A;if(Q===239&&B===187&&E===191)return"UTF-8";else if(Q===254&&B===255)return"UTF-16BE";else if(Q===255&&B===254)return"UTF-16LE";return null}function Sw(A){let Q=A.reduce((E,I)=>{return E+I.byteLength},0),B=0;return A.reduce((E,I)=>{return E.set(I,B),B+=I.byteLength,E},new Uint8Array(Q))}Kw.exports={staticPropertyDescriptors:d8,readOperation:i8,fireAProgressEvent:yB}});var Tw=h((T7,$w)=>{var{staticPropertyDescriptors:aE,readOperation:Xg,fireAProgressEvent:Hw}=zw(),{kState:EE,kError:xw,kResult:hg,kEvents:o,kAborted:a8}=xF(),{webidl:BA}=nA(),{kEnumerableProperty:CQ}=a();class QA extends EventTarget{constructor(){super();this[EE]="empty",this[hg]=null,this[xw]=null,this[o]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(A){BA.brandCheck(this,QA),BA.argumentLengthCheck(arguments,1,{header:"FileReader.readAsArrayBuffer"}),A=BA.converters.Blob(A,{strict:!1}),Xg(this,A,"ArrayBuffer")}readAsBinaryString(A){BA.brandCheck(this,QA),BA.argumentLengthCheck(arguments,1,{header:"FileReader.readAsBinaryString"}),A=BA.converters.Blob(A,{strict:!1}),Xg(this,A,"BinaryString")}readAsText(A,Q=void 0){if(BA.brandCheck(this,QA),BA.argumentLengthCheck(arguments,1,{header:"FileReader.readAsText"}),A=BA.converters.Blob(A,{strict:!1}),Q!==void 0)Q=BA.converters.DOMString(Q);Xg(this,A,"Text",Q)}readAsDataURL(A){BA.brandCheck(this,QA),BA.argumentLengthCheck(arguments,1,{header:"FileReader.readAsDataURL"}),A=BA.converters.Blob(A,{strict:!1}),Xg(this,A,"DataURL")}abort(){if(this[EE]==="empty"||this[EE]==="done"){this[hg]=null;return}if(this[EE]==="loading")this[EE]="done",this[hg]=null;if(this[a8]=!0,Hw("abort",this),this[EE]!=="loading")Hw("loadend",this)}get readyState(){switch(BA.brandCheck(this,QA),this[EE]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return BA.brandCheck(this,QA),this[hg]}get error(){return BA.brandCheck(this,QA),this[xw]}get onloadend(){return BA.brandCheck(this,QA),this[o].loadend}set onloadend(A){if(BA.brandCheck(this,QA),this[o].loadend)this.removeEventListener("loadend",this[o].loadend);if(typeof A==="function")this[o].loadend=A,this.addEventListener("loadend",A);else this[o].loadend=null}get onerror(){return BA.brandCheck(this,QA),this[o].error}set onerror(A){if(BA.brandCheck(this,QA),this[o].error)this.removeEventListener("error",this[o].error);if(typeof A==="function")this[o].error=A,this.addEventListener("error",A);else this[o].error=null}get onloadstart(){return BA.brandCheck(this,QA),this[o].loadstart}set onloadstart(A){if(BA.brandCheck(this,QA),this[o].loadstart)this.removeEventListener("loadstart",this[o].loadstart);if(typeof A==="function")this[o].loadstart=A,this.addEventListener("loadstart",A);else this[o].loadstart=null}get onprogress(){return BA.brandCheck(this,QA),this[o].progress}set onprogress(A){if(BA.brandCheck(this,QA),this[o].progress)this.removeEventListener("progress",this[o].progress);if(typeof A==="function")this[o].progress=A,this.addEventListener("progress",A);else this[o].progress=null}get onload(){return BA.brandCheck(this,QA),this[o].load}set onload(A){if(BA.brandCheck(this,QA),this[o].load)this.removeEventListener("load",this[o].load);if(typeof A==="function")this[o].load=A,this.addEventListener("load",A);else this[o].load=null}get onabort(){return BA.brandCheck(this,QA),this[o].abort}set onabort(A){if(BA.brandCheck(this,QA),this[o].abort)this.removeEventListener("abort",this[o].abort);if(typeof A==="function")this[o].abort=A,this.addEventListener("abort",A);else this[o].abort=null}}QA.EMPTY=QA.prototype.EMPTY=0;QA.LOADING=QA.prototype.LOADING=1;QA.DONE=QA.prototype.DONE=2;Object.defineProperties(QA.prototype,{EMPTY:aE,LOADING:aE,DONE:aE,readAsArrayBuffer:CQ,readAsBinaryString:CQ,readAsText:CQ,readAsDataURL:CQ,abort:CQ,readyState:CQ,result:CQ,error:CQ,onloadstart:CQ,onprogress:CQ,onload:CQ,onabort:CQ,onerror:CQ,onloadend:CQ,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(QA,{EMPTY:aE,LOADING:aE,DONE:aE});$w.exports={FileReader:QA}});var Sg=h((j7,jw)=>{jw.exports={kConstruct:JA().kConstruct}});var Ow=h((y7,_w)=>{var s8=M("assert"),{URLSerializer:yw}=fQ(),{isValidHeaderName:o8}=zQ();function r8(A,Q,B=!1){let E=yw(A,B),I=yw(Q,B);return E===I}function t8(A){s8(A!==null);let Q=[];for(let B of A.split(",")){if(B=B.trim(),!B.length)continue;else if(!o8(B))continue;Q.push(B)}return Q}_w.exports={urlEquals:r8,fieldValues:t8}});var bw=h((_7,kw)=>{var{kConstruct:e8}=Sg(),{urlEquals:A5,fieldValues:jF}=Ow(),{kEnumerableProperty:IE,isDisturbed:Q5}=a(),{kHeadersList:qw}=JA(),{webidl:v}=nA(),{Response:fw,cloneResponse:B5}=Fg(),{Request:eQ}=lI(),{kState:eA,kHeaders:Kg,kGuard:Pw,kRealm:E5}=DB(),{fetching:I5}=Wg(),{urlIsHttpHttpsScheme:zg,createDeferredPromise:sE,readAllBytes:C5}=zQ(),yF=M("assert"),{getGlobalDispatcher:g5}=cE();class AB{#A;constructor(){if(arguments[0]!==e8)v.illegalConstructor();this.#A=arguments[1]}async match(A,Q={}){v.brandCheck(this,AB),v.argumentLengthCheck(arguments,1,{header:"Cache.match"}),A=v.converters.RequestInfo(A),Q=v.converters.CacheQueryOptions(Q);let B=await this.matchAll(A,Q);if(B.length===0)return;return B[0]}async matchAll(A=void 0,Q={}){if(v.brandCheck(this,AB),A!==void 0)A=v.converters.RequestInfo(A);Q=v.converters.CacheQueryOptions(Q);let B=null;if(A!==void 0){if(A instanceof eQ){if(B=A[eA],B.method!=="GET"&&!Q.ignoreMethod)return[]}else if(typeof A==="string")B=new eQ(A)[eA]}let E=[];if(A===void 0)for(let C of this.#A)E.push(C[1]);else{let C=this.#E(B,Q);for(let g of C)E.push(g[1])}let I=[];for(let C of E){let g=new fw(C.body?.source??null),D=g[eA].body;g[eA]=C,g[eA].body=D,g[Kg][qw]=C.headersList,g[Kg][Pw]="immutable",I.push(g)}return Object.freeze(I)}async add(A){v.brandCheck(this,AB),v.argumentLengthCheck(arguments,1,{header:"Cache.add"}),A=v.converters.RequestInfo(A);let Q=[A];return await this.addAll(Q)}async addAll(A){v.brandCheck(this,AB),v.argumentLengthCheck(arguments,1,{header:"Cache.addAll"}),A=v.converters["sequence"](A);let Q=[],B=[];for(let Y of A){if(typeof Y==="string")continue;let U=Y[eA];if(!zg(U.url)||U.method!=="GET")throw v.errors.exception({header:"Cache.addAll",message:"Expected http/s scheme when method is not GET."})}let E=[];for(let Y of A){let U=new eQ(Y)[eA];if(!zg(U.url))throw v.errors.exception({header:"Cache.addAll",message:"Expected http/s scheme."});U.initiator="fetch",U.destination="subresource",B.push(U);let R=sE();E.push(I5({request:U,dispatcher:g5(),processResponse(w){if(w.type==="error"||w.status===206||w.status<200||w.status>299)R.reject(v.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(w.headersList.contains("vary")){let W=jF(w.headersList.get("vary"));for(let V of W)if(V==="*"){R.reject(v.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let S of E)S.abort();return}}},processResponseEndOfBody(w){if(w.aborted){R.reject(new DOMException("aborted","AbortError"));return}R.resolve(w)}})),Q.push(R.promise)}let C=await Promise.all(Q),g=[],D=0;for(let Y of C){let U={type:"put",request:B[D],response:Y};g.push(U),D++}let F=sE(),J=null;try{this.#B(g)}catch(Y){J=Y}return queueMicrotask(()=>{if(J===null)F.resolve(void 0);else F.reject(J)}),F.promise}async put(A,Q){v.brandCheck(this,AB),v.argumentLengthCheck(arguments,2,{header:"Cache.put"}),A=v.converters.RequestInfo(A),Q=v.converters.Response(Q);let B=null;if(A instanceof eQ)B=A[eA];else B=new eQ(A)[eA];if(!zg(B.url)||B.method!=="GET")throw v.errors.exception({header:"Cache.put",message:"Expected an http/s scheme when method is not GET"});let E=Q[eA];if(E.status===206)throw v.errors.exception({header:"Cache.put",message:"Got 206 status"});if(E.headersList.contains("vary")){let U=jF(E.headersList.get("vary"));for(let R of U)if(R==="*")throw v.errors.exception({header:"Cache.put",message:"Got * vary field value"})}if(E.body&&(Q5(E.body.stream)||E.body.stream.locked))throw v.errors.exception({header:"Cache.put",message:"Response body is locked or disturbed"});let I=B5(E),C=sE();if(E.body!=null){let R=E.body.stream.getReader();C5(R).then(C.resolve,C.reject)}else C.resolve(void 0);let g=[],D={type:"put",request:B,response:I};g.push(D);let F=await C.promise;if(I.body!=null)I.body.source=F;let J=sE(),Y=null;try{this.#B(g)}catch(U){Y=U}return queueMicrotask(()=>{if(Y===null)J.resolve();else J.reject(Y)}),J.promise}async delete(A,Q={}){v.brandCheck(this,AB),v.argumentLengthCheck(arguments,1,{header:"Cache.delete"}),A=v.converters.RequestInfo(A),Q=v.converters.CacheQueryOptions(Q);let B=null;if(A instanceof eQ){if(B=A[eA],B.method!=="GET"&&!Q.ignoreMethod)return!1}else yF(typeof A==="string"),B=new eQ(A)[eA];let E=[],I={type:"delete",request:B,options:Q};E.push(I);let C=sE(),g=null,D;try{D=this.#B(E)}catch(F){g=F}return queueMicrotask(()=>{if(g===null)C.resolve(!!D?.length);else C.reject(g)}),C.promise}async keys(A=void 0,Q={}){if(v.brandCheck(this,AB),A!==void 0)A=v.converters.RequestInfo(A);Q=v.converters.CacheQueryOptions(Q);let B=null;if(A!==void 0){if(A instanceof eQ){if(B=A[eA],B.method!=="GET"&&!Q.ignoreMethod)return[]}else if(typeof A==="string")B=new eQ(A)[eA]}let E=sE(),I=[];if(A===void 0)for(let C of this.#A)I.push(C[0]);else{let C=this.#E(B,Q);for(let g of C)I.push(g[0])}return queueMicrotask(()=>{let C=[];for(let g of I){let D=new eQ("https://a");D[eA]=g,D[Kg][qw]=g.headersList,D[Kg][Pw]="immutable",D[E5]=g.client,C.push(D)}E.resolve(Object.freeze(C))}),E.promise}#B(A){let Q=this.#A,B=[...Q],E=[],I=[];try{for(let C of A){if(C.type!=="delete"&&C.type!=="put")throw v.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(C.type==="delete"&&C.response!=null)throw v.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#E(C.request,C.options,E).length)throw new DOMException("???","InvalidStateError");let g;if(C.type==="delete"){if(g=this.#E(C.request,C.options),g.length===0)return[];for(let D of g){let F=Q.indexOf(D);yF(F!==-1),Q.splice(F,1)}}else if(C.type==="put"){if(C.response==null)throw v.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let D=C.request;if(!zg(D.url))throw v.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(D.method!=="GET")throw v.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(C.options!=null)throw v.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});g=this.#E(C.request);for(let F of g){let J=Q.indexOf(F);yF(J!==-1),Q.splice(J,1)}Q.push([C.request,C.response]),E.push([C.request,C.response])}I.push([C.request,C.response])}return I}catch(C){throw this.#A.length=0,this.#A=B,C}}#E(A,Q,B){let E=[],I=B??this.#A;for(let C of I){let[g,D]=C;if(this.#Q(A,g,D,Q))E.push(C)}return E}#Q(A,Q,B=null,E){let I=new URL(A.url),C=new URL(Q.url);if(E?.ignoreSearch)C.search="",I.search="";if(!A5(I,C,!0))return!1;if(B==null||E?.ignoreVary||!B.headersList.contains("vary"))return!0;let g=jF(B.headersList.get("vary"));for(let D of g){if(D==="*")return!1;let F=Q.headersList.get(D),J=A.headersList.get(D);if(F!==J)return!1}return!0}}Object.defineProperties(AB.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:IE,matchAll:IE,add:IE,addAll:IE,put:IE,delete:IE,keys:IE});var vw=[{key:"ignoreSearch",converter:v.converters.boolean,defaultValue:!1},{key:"ignoreMethod",converter:v.converters.boolean,defaultValue:!1},{key:"ignoreVary",converter:v.converters.boolean,defaultValue:!1}];v.converters.CacheQueryOptions=v.dictionaryConverter(vw);v.converters.MultiCacheQueryOptions=v.dictionaryConverter([...vw,{key:"cacheName",converter:v.converters.DOMString}]);v.converters.Response=v.interfaceConverter(fw);v.converters["sequence"]=v.sequenceConverter(v.converters.RequestInfo);kw.exports={Cache:AB}});var cw=h((O7,mw)=>{var{kConstruct:sI}=Sg(),{Cache:Hg}=bw(),{webidl:AQ}=nA(),{kEnumerableProperty:oI}=a();class _B{#A=new Map;constructor(){if(arguments[0]!==sI)AQ.illegalConstructor()}async match(A,Q={}){if(AQ.brandCheck(this,_B),AQ.argumentLengthCheck(arguments,1,{header:"CacheStorage.match"}),A=AQ.converters.RequestInfo(A),Q=AQ.converters.MultiCacheQueryOptions(Q),Q.cacheName!=null){if(this.#A.has(Q.cacheName)){let B=this.#A.get(Q.cacheName);return await new Hg(sI,B).match(A,Q)}}else for(let B of this.#A.values()){let I=await new Hg(sI,B).match(A,Q);if(I!==void 0)return I}}async has(A){return AQ.brandCheck(this,_B),AQ.argumentLengthCheck(arguments,1,{header:"CacheStorage.has"}),A=AQ.converters.DOMString(A),this.#A.has(A)}async open(A){if(AQ.brandCheck(this,_B),AQ.argumentLengthCheck(arguments,1,{header:"CacheStorage.open"}),A=AQ.converters.DOMString(A),this.#A.has(A)){let B=this.#A.get(A);return new Hg(sI,B)}let Q=[];return this.#A.set(A,Q),new Hg(sI,Q)}async delete(A){return AQ.brandCheck(this,_B),AQ.argumentLengthCheck(arguments,1,{header:"CacheStorage.delete"}),A=AQ.converters.DOMString(A),this.#A.delete(A)}async keys(){return AQ.brandCheck(this,_B),[...this.#A.keys()]}}Object.defineProperties(_B.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:oI,has:oI,open:oI,delete:oI,keys:oI});mw.exports={CacheStorage:_B}});var dw=h((q7,uw)=>{uw.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var _F=h((P7,aw)=>{function D5(A){if(A.length===0)return!1;for(let Q of A){let B=Q.charCodeAt(0);if(B>=0||B<=8||(B>=10||B<=31)||B===127)return!1}}function iw(A){for(let Q of A){let B=Q.charCodeAt(0);if(B<=32||B>127||Q==="("||Q===")"||Q===">"||Q==="<"||Q==="@"||Q===","||Q===";"||Q===":"||Q==="\\"||Q==='"'||Q==="/"||Q==="["||Q==="]"||Q==="?"||Q==="="||Q==="{"||Q==="}")throw new Error("Invalid cookie name")}}function lw(A){for(let Q of A){let B=Q.charCodeAt(0);if(B<33||B===34||B===44||B===59||B===92||B>126)throw new Error("Invalid header value")}}function pw(A){for(let Q of A)if(Q.charCodeAt(0)<33||Q===";")throw new Error("Invalid cookie path")}function F5(A){if(A.startsWith("-")||A.endsWith(".")||A.endsWith("-"))throw new Error("Invalid cookie domain")}function nw(A){if(typeof A==="number")A=new Date(A);let Q=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],B=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],E=Q[A.getUTCDay()],I=A.getUTCDate().toString().padStart(2,"0"),C=B[A.getUTCMonth()],g=A.getUTCFullYear(),D=A.getUTCHours().toString().padStart(2,"0"),F=A.getUTCMinutes().toString().padStart(2,"0"),J=A.getUTCSeconds().toString().padStart(2,"0");return`${E}, ${I} ${C} ${g} ${D}:${F}:${J} GMT`}function Y5(A){if(A<0)throw new Error("Invalid cookie max-age")}function J5(A){if(A.name.length===0)return null;iw(A.name),lw(A.value);let Q=[`${A.name}=${A.value}`];if(A.name.startsWith("__Secure-"))A.secure=!0;if(A.name.startsWith("__Host-"))A.secure=!0,A.domain=null,A.path="/";if(A.secure)Q.push("Secure");if(A.httpOnly)Q.push("HttpOnly");if(typeof A.maxAge==="number")Y5(A.maxAge),Q.push(`Max-Age=${A.maxAge}`);if(A.domain)F5(A.domain),Q.push(`Domain=${A.domain}`);if(A.path)pw(A.path),Q.push(`Path=${A.path}`);if(A.expires&&A.expires.toString()!=="Invalid Date")Q.push(`Expires=${nw(A.expires)}`);if(A.sameSite)Q.push(`SameSite=${A.sameSite}`);for(let B of A.unparsed){if(!B.includes("="))throw new Error("Invalid unparsed");let[E,...I]=B.split("=");Q.push(`${E.trim()}=${I.join("=")}`)}return Q.join("; ")}aw.exports={isCTLExcludingHtab:D5,validateCookieName:iw,validateCookiePath:pw,validateCookieValue:lw,toIMFDate:nw,stringify:J5}});var ow=h((f7,sw)=>{var{maxNameValuePairSize:N5,maxAttributeValueSize:U5}=dw(),{isCTLExcludingHtab:G5}=_F(),{collectASequenceOfCodePointsFast:xg}=fQ(),R5=M("assert");function w5(A){if(G5(A))return null;let Q="",B="",E="",I="";if(A.includes(";")){let C={position:0};Q=xg(";",A,C),B=A.slice(C.position)}else Q=A;if(!Q.includes("="))I=Q;else{let C={position:0};E=xg("=",Q,C),I=Q.slice(C.position+1)}if(E=E.trim(),I=I.trim(),E.length+I.length>N5)return null;return{name:E,value:I,...oE(B)}}function oE(A,Q={}){if(A.length===0)return Q;R5(A[0]===";"),A=A.slice(1);let B="";if(A.includes(";"))B=xg(";",A,{position:0}),A=A.slice(B.length);else B=A,A="";let E="",I="";if(B.includes("=")){let g={position:0};E=xg("=",B,g),I=B.slice(g.position+1)}else E=B;if(E=E.trim(),I=I.trim(),I.length>U5)return oE(A,Q);let C=E.toLowerCase();if(C==="expires"){let g=new Date(I);Q.expires=g}else if(C==="max-age"){let g=I.charCodeAt(0);if((g<48||g>57)&&I[0]!=="-")return oE(A,Q);if(!/^\d+$/.test(I))return oE(A,Q);let D=Number(I);Q.maxAge=D}else if(C==="domain"){let g=I;if(g[0]===".")g=g.slice(1);g=g.toLowerCase(),Q.domain=g}else if(C==="path"){let g="";if(I.length===0||I[0]!=="/")g="/";else g=I;Q.path=g}else if(C==="secure")Q.secure=!0;else if(C==="httponly")Q.httpOnly=!0;else if(C==="samesite"){let g="Default",D=I.toLowerCase();if(D.includes("none"))g="None";if(D.includes("strict"))g="Strict";if(D.includes("lax"))g="Lax";Q.sameSite=g}else Q.unparsed??=[],Q.unparsed.push(`${E}=${I}`);return oE(A,Q)}sw.exports={parseSetCookie:w5,parseUnparsedAttributes:oE}});var AM=h((v7,ew)=>{var{parseSetCookie:M5}=ow(),{stringify:rw}=_F(),{webidl:p}=nA(),{Headers:$g}=BE();function L5(A){p.argumentLengthCheck(arguments,1,{header:"getCookies"}),p.brandCheck(A,$g,{strict:!1});let Q=A.get("cookie"),B={};if(!Q)return B;for(let E of Q.split(";")){let[I,...C]=E.split("=");B[I.trim()]=C.join("=")}return B}function V5(A,Q,B){p.argumentLengthCheck(arguments,2,{header:"deleteCookie"}),p.brandCheck(A,$g,{strict:!1}),Q=p.converters.DOMString(Q),B=p.converters.DeleteCookieAttributes(B),tw(A,{name:Q,value:"",expires:new Date(0),...B})}function W5(A){p.argumentLengthCheck(arguments,1,{header:"getSetCookies"}),p.brandCheck(A,$g,{strict:!1});let Q=A.getSetCookie();if(!Q)return[];return Q.map((B)=>M5(B))}function tw(A,Q){if(p.argumentLengthCheck(arguments,2,{header:"setCookie"}),p.brandCheck(A,$g,{strict:!1}),Q=p.converters.Cookie(Q),rw(Q))A.append("Set-Cookie",rw(Q))}p.converters.DeleteCookieAttributes=p.dictionaryConverter([{converter:p.nullableConverter(p.converters.DOMString),key:"path",defaultValue:null},{converter:p.nullableConverter(p.converters.DOMString),key:"domain",defaultValue:null}]);p.converters.Cookie=p.dictionaryConverter([{converter:p.converters.DOMString,key:"name"},{converter:p.converters.DOMString,key:"value"},{converter:p.nullableConverter((A)=>{if(typeof A==="number")return p.converters["unsigned long long"](A);return new Date(A)}),key:"expires",defaultValue:null},{converter:p.nullableConverter(p.converters["long long"]),key:"maxAge",defaultValue:null},{converter:p.nullableConverter(p.converters.DOMString),key:"domain",defaultValue:null},{converter:p.nullableConverter(p.converters.DOMString),key:"path",defaultValue:null},{converter:p.nullableConverter(p.converters.boolean),key:"secure",defaultValue:null},{converter:p.nullableConverter(p.converters.boolean),key:"httpOnly",defaultValue:null},{converter:p.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:p.sequenceConverter(p.converters.DOMString),key:"unparsed",defaultValue:[]}]);ew.exports={getCookies:L5,deleteCookie:V5,getSetCookies:W5,setCookie:tw}});var rE=h((k7,QM)=>{var Z5={enumerable:!0,writable:!1,configurable:!1},X5={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},h5={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},S5={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},K5=Buffer.allocUnsafe(0);QM.exports={uid:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",staticPropertyDescriptors:Z5,states:X5,opcodes:h5,maxUnsigned16Bit:65535,parserStates:S5,emptyBuffer:K5}});var rI=h((b7,BM)=>{BM.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var qF=h((m7,EM)=>{var{webidl:k}=nA(),{kEnumerableProperty:gQ}=a(),{MessagePort:z5}=M("worker_threads");class QB extends Event{#A;constructor(A,Q={}){k.argumentLengthCheck(arguments,1,{header:"MessageEvent constructor"}),A=k.converters.DOMString(A),Q=k.converters.MessageEventInit(Q);super(A,Q);this.#A=Q}get data(){return k.brandCheck(this,QB),this.#A.data}get origin(){return k.brandCheck(this,QB),this.#A.origin}get lastEventId(){return k.brandCheck(this,QB),this.#A.lastEventId}get source(){return k.brandCheck(this,QB),this.#A.source}get ports(){if(k.brandCheck(this,QB),!Object.isFrozen(this.#A.ports))Object.freeze(this.#A.ports);return this.#A.ports}initMessageEvent(A,Q=!1,B=!1,E=null,I="",C="",g=null,D=[]){return k.brandCheck(this,QB),k.argumentLengthCheck(arguments,1,{header:"MessageEvent.initMessageEvent"}),new QB(A,{bubbles:Q,cancelable:B,data:E,origin:I,lastEventId:C,source:g,ports:D})}}class tE extends Event{#A;constructor(A,Q={}){k.argumentLengthCheck(arguments,1,{header:"CloseEvent constructor"}),A=k.converters.DOMString(A),Q=k.converters.CloseEventInit(Q);super(A,Q);this.#A=Q}get wasClean(){return k.brandCheck(this,tE),this.#A.wasClean}get code(){return k.brandCheck(this,tE),this.#A.code}get reason(){return k.brandCheck(this,tE),this.#A.reason}}class OB extends Event{#A;constructor(A,Q){k.argumentLengthCheck(arguments,1,{header:"ErrorEvent constructor"});super(A,Q);A=k.converters.DOMString(A),Q=k.converters.ErrorEventInit(Q??{}),this.#A=Q}get message(){return k.brandCheck(this,OB),this.#A.message}get filename(){return k.brandCheck(this,OB),this.#A.filename}get lineno(){return k.brandCheck(this,OB),this.#A.lineno}get colno(){return k.brandCheck(this,OB),this.#A.colno}get error(){return k.brandCheck(this,OB),this.#A.error}}Object.defineProperties(QB.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:gQ,origin:gQ,lastEventId:gQ,source:gQ,ports:gQ,initMessageEvent:gQ});Object.defineProperties(tE.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:gQ,code:gQ,wasClean:gQ});Object.defineProperties(OB.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:gQ,filename:gQ,lineno:gQ,colno:gQ,error:gQ});k.converters.MessagePort=k.interfaceConverter(z5);k.converters["sequence"]=k.sequenceConverter(k.converters.MessagePort);var OF=[{key:"bubbles",converter:k.converters.boolean,defaultValue:!1},{key:"cancelable",converter:k.converters.boolean,defaultValue:!1},{key:"composed",converter:k.converters.boolean,defaultValue:!1}];k.converters.MessageEventInit=k.dictionaryConverter([...OF,{key:"data",converter:k.converters.any,defaultValue:null},{key:"origin",converter:k.converters.USVString,defaultValue:""},{key:"lastEventId",converter:k.converters.DOMString,defaultValue:""},{key:"source",converter:k.nullableConverter(k.converters.MessagePort),defaultValue:null},{key:"ports",converter:k.converters["sequence"],get defaultValue(){return[]}}]);k.converters.CloseEventInit=k.dictionaryConverter([...OF,{key:"wasClean",converter:k.converters.boolean,defaultValue:!1},{key:"code",converter:k.converters["unsigned short"],defaultValue:0},{key:"reason",converter:k.converters.USVString,defaultValue:""}]);k.converters.ErrorEventInit=k.dictionaryConverter([...OF,{key:"message",converter:k.converters.DOMString,defaultValue:""},{key:"filename",converter:k.converters.USVString,defaultValue:""},{key:"lineno",converter:k.converters["unsigned long"],defaultValue:0},{key:"colno",converter:k.converters["unsigned long"],defaultValue:0},{key:"error",converter:k.converters.any}]);EM.exports={MessageEvent:QB,CloseEvent:tE,ErrorEvent:OB}});var yg=h((c7,gM)=>{var{kReadyState:Tg,kController:H5,kResponse:x5,kBinaryType:$5,kWebSocketURL:T5}=rI(),{states:jg,opcodes:IM}=rE(),{MessageEvent:j5,ErrorEvent:y5}=qF();function _5(A){return A[Tg]===jg.OPEN}function O5(A){return A[Tg]===jg.CLOSING}function q5(A){return A[Tg]===jg.CLOSED}function PF(A,Q,B=Event,E){let I=new B(A,E);Q.dispatchEvent(I)}function P5(A,Q,B){if(A[Tg]!==jg.OPEN)return;let E;if(Q===IM.TEXT)try{E=new TextDecoder("utf-8",{fatal:!0}).decode(B)}catch{CM(A,"Received invalid UTF-8 in text frame.");return}else if(Q===IM.BINARY)if(A[$5]==="blob")E=new Blob([B]);else E=new Uint8Array(B).buffer;PF("message",A,j5,{origin:A[T5].origin,data:E})}function f5(A){if(A.length===0)return!1;for(let Q of A){let B=Q.charCodeAt(0);if(B<33||B>126||Q==="("||Q===")"||Q==="<"||Q===">"||Q==="@"||Q===","||Q===";"||Q===":"||Q==="\\"||Q==='"'||Q==="/"||Q==="["||Q==="]"||Q==="?"||Q==="="||Q==="{"||Q==="}"||B===32||B===9)return!1}return!0}function v5(A){if(A>=1000&&A<1015)return A!==1004&&A!==1005&&A!==1006;return A>=3000&&A<=4999}function CM(A,Q){let{[H5]:B,[x5]:E}=A;if(B.abort(),E?.socket&&!E.socket.destroyed)E.socket.destroy();if(Q)PF("error",A,y5,{error:new Error(Q)})}gM.exports={isEstablished:_5,isClosing:O5,isClosed:q5,fireEvent:PF,isValidSubprotocol:f5,isValidStatusCode:v5,failWebsocketConnection:CM,websocketMessageReceived:P5}});var UM=h((u7,NM)=>{var vF=M("diagnostics_channel"),{uid:k5,states:FM}=rE(),{kReadyState:YM,kSentClose:DM,kByteParser:JM,kReceivedClose:b5}=rI(),{fireEvent:m5,failWebsocketConnection:CE}=yg(),{CloseEvent:c5}=qF(),{makeRequest:u5}=lI(),{fetching:d5}=Wg(),{Headers:i5}=BE(),{getGlobalDispatcher:l5}=cE(),{kHeadersList:p5}=JA(),MB={};MB.open=vF.channel("undici:websocket:open");MB.close=vF.channel("undici:websocket:close");MB.socketError=vF.channel("undici:websocket:socket_error");var fF;try{fF=M("crypto")}catch{}function n5(A,Q,B,E,I){let C=A;C.protocol=A.protocol==="ws:"?"http:":"https:";let g=u5({urlList:[C],serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(I.headers){let Y=new i5(I.headers)[p5];g.headersList=Y}let D=fF.randomBytes(16).toString("base64");g.headersList.append("sec-websocket-key",D),g.headersList.append("sec-websocket-version","13");for(let Y of Q)g.headersList.append("sec-websocket-protocol",Y);let F="";return d5({request:g,useParallelQueue:!0,dispatcher:I.dispatcher??l5(),processResponse(Y){if(Y.type==="error"||Y.status!==101){CE(B,"Received network error or non-101 status code.");return}if(Q.length!==0&&!Y.headersList.get("Sec-WebSocket-Protocol")){CE(B,"Server did not respond with sent protocols.");return}if(Y.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){CE(B,'Server did not set Upgrade header to "websocket".');return}if(Y.headersList.get("Connection")?.toLowerCase()!=="upgrade"){CE(B,'Server did not set Connection header to "upgrade".');return}let U=Y.headersList.get("Sec-WebSocket-Accept"),R=fF.createHash("sha1").update(D+k5).digest("base64");if(U!==R){CE(B,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let w=Y.headersList.get("Sec-WebSocket-Extensions");if(w!==null&&w!==F){CE(B,"Received different permessage-deflate than the one set.");return}let W=Y.headersList.get("Sec-WebSocket-Protocol");if(W!==null&&W!==g.headersList.get("Sec-WebSocket-Protocol")){CE(B,"Protocol was not set in the opening handshake.");return}if(Y.socket.on("data",a5),Y.socket.on("close",s5),Y.socket.on("error",o5),MB.open.hasSubscribers)MB.open.publish({address:Y.socket.address(),protocol:W,extensions:w});E(Y)}})}function a5(A){if(!this.ws[JM].write(A))this.pause()}function s5(){let{ws:A}=this,Q=A[DM]&&A[b5],B=1005,E="",I=A[JM].closingInfo;if(I)B=I.code??1005,E=I.reason;else if(!A[DM])B=1006;if(A[YM]=FM.CLOSED,m5("close",A,c5,{wasClean:Q,code:B,reason:E}),MB.close.hasSubscribers)MB.close.publish({websocket:A,code:B,reason:E})}function o5(A){let{ws:Q}=this;if(Q[YM]=FM.CLOSING,MB.socketError.hasSubscribers)MB.socketError.publish(A);this.destroy()}NM.exports={establishWebSocketConnection:n5}});var kF=h((d7,wM)=>{var{maxUnsigned16Bit:r5}=rE(),GM;try{GM=M("crypto")}catch{}class RM{constructor(A){this.frameData=A,this.maskKey=GM.randomBytes(4)}createFrame(A){let Q=this.frameData?.byteLength??0,B=Q,E=6;if(Q>r5)E+=8,B=127;else if(Q>125)E+=2,B=126;let I=Buffer.allocUnsafe(Q+E);I[0]=I[1]=0,I[0]|=128,I[0]=(I[0]&240)+A;/*! ws. MIT License. Einar Otto Stangvik */if(I[E-4]=this.maskKey[0],I[E-3]=this.maskKey[1],I[E-2]=this.maskKey[2],I[E-1]=this.maskKey[3],I[1]=B,B===126)I.writeUInt16BE(Q,2);else if(B===127)I[2]=I[3]=0,I.writeUIntBE(Q,4,6);I[1]|=128;for(let C=0;C{var{Writable:t5}=M("stream"),XM=M("diagnostics_channel"),{parserStates:$Q,opcodes:TQ,states:e5,emptyBuffer:Az}=rE(),{kReadyState:Qz,kSentClose:MM,kResponse:LM,kReceivedClose:VM}=rI(),{isValidStatusCode:WM,failWebsocketConnection:tI,websocketMessageReceived:Bz}=yg(),{WebsocketFrameSend:ZM}=kF(),eE={};eE.ping=XM.channel("undici:websocket:ping");eE.pong=XM.channel("undici:websocket:pong");class hM extends t5{#A=[];#B=0;#E=$Q.INFO;#Q={};#I=[];constructor(A){super();this.ws=A}_write(A,Q,B){this.#A.push(A),this.#B+=A.length,this.run(B)}run(A){while(!0){if(this.#E===$Q.INFO){if(this.#B<2)return A();let Q=this.consume(2);if(this.#Q.fin=(Q[0]&128)!==0,this.#Q.opcode=Q[0]&15,this.#Q.originalOpcode??=this.#Q.opcode,this.#Q.fragmented=!this.#Q.fin&&this.#Q.opcode!==TQ.CONTINUATION,this.#Q.fragmented&&this.#Q.opcode!==TQ.BINARY&&this.#Q.opcode!==TQ.TEXT){tI(this.ws,"Invalid frame type was fragmented.");return}let B=Q[1]&127;if(B<=125)this.#Q.payloadLength=B,this.#E=$Q.READ_DATA;else if(B===126)this.#E=$Q.PAYLOADLENGTH_16;else if(B===127)this.#E=$Q.PAYLOADLENGTH_64;if(this.#Q.fragmented&&B>125){tI(this.ws,"Fragmented frame exceeded 125 bytes.");return}else if((this.#Q.opcode===TQ.PING||this.#Q.opcode===TQ.PONG||this.#Q.opcode===TQ.CLOSE)&&B>125){tI(this.ws,"Payload length for control frame exceeded 125 bytes.");return}else if(this.#Q.opcode===TQ.CLOSE){if(B===1){tI(this.ws,"Received close frame with a 1-byte body.");return}let E=this.consume(B);if(this.#Q.closeInfo=this.parseCloseBody(!1,E),!this.ws[MM]){let I=Buffer.allocUnsafe(2);I.writeUInt16BE(this.#Q.closeInfo.code,0);let C=new ZM(I);this.ws[LM].socket.write(C.createFrame(TQ.CLOSE),(g)=>{if(!g)this.ws[MM]=!0})}this.ws[Qz]=e5.CLOSING,this.ws[VM]=!0,this.end();return}else if(this.#Q.opcode===TQ.PING){let E=this.consume(B);if(!this.ws[VM]){let I=new ZM(E);if(this.ws[LM].socket.write(I.createFrame(TQ.PONG)),eE.ping.hasSubscribers)eE.ping.publish({payload:E})}if(this.#E=$Q.INFO,this.#B>0)continue;else{A();return}}else if(this.#Q.opcode===TQ.PONG){let E=this.consume(B);if(eE.pong.hasSubscribers)eE.pong.publish({payload:E});if(this.#B>0)continue;else{A();return}}}else if(this.#E===$Q.PAYLOADLENGTH_16){if(this.#B<2)return A();let Q=this.consume(2);this.#Q.payloadLength=Q.readUInt16BE(0),this.#E=$Q.READ_DATA}else if(this.#E===$Q.PAYLOADLENGTH_64){if(this.#B<8)return A();let Q=this.consume(8),B=Q.readUInt32BE(0);if(B>2147483647){tI(this.ws,"Received payload length > 2^31 bytes.");return}let E=Q.readUInt32BE(4);this.#Q.payloadLength=(B<<8)+E,this.#E=$Q.READ_DATA}else if(this.#E===$Q.READ_DATA){if(this.#B=this.#Q.payloadLength){let Q=this.consume(this.#Q.payloadLength);if(this.#I.push(Q),!this.#Q.fragmented||this.#Q.fin&&this.#Q.opcode===TQ.CONTINUATION){let B=Buffer.concat(this.#I);Bz(this.ws,this.#Q.originalOpcode,B),this.#Q={},this.#I.length=0}this.#E=$Q.INFO}}if(this.#B>0)continue;else{A();break}}}consume(A){if(A>this.#B)return null;else if(A===0)return Az;if(this.#A[0].length===A)return this.#B-=this.#A[0].length,this.#A.shift();let Q=Buffer.allocUnsafe(A),B=0;while(B!==A){let E=this.#A[0],{length:I}=E;if(I+B===A){Q.set(this.#A.shift(),B);break}else if(I+B>A){Q.set(E.subarray(0,A-B),B),this.#A[0]=E.subarray(A-B);break}else Q.set(this.#A.shift(),B),B+=E.length}return this.#B-=A,Q}parseCloseBody(A,Q){let B;if(Q.length>=2)B=Q.readUInt16BE(0);if(A){if(!WM(B))return null;return{code:B}}let E=Q.subarray(2);if(E[0]===239&&E[1]===187&&E[2]===191)E=E.subarray(3);if(B!==void 0&&!WM(B))return null;try{E=new TextDecoder("utf-8",{fatal:!0}).decode(E)}catch{return null}return{code:B,reason:E}}get closingInfo(){return this.#Q.closeInfo}}SM.exports={ByteParser:hM}});var _M=h((l7,yM)=>{var{webidl:m}=nA(),{DOMException:qB}=SB(),{URLSerializer:Ez}=fQ(),{getGlobalOrigin:Iz}=XE(),{staticPropertyDescriptors:PB,states:AI,opcodes:eI,emptyBuffer:Cz}=rE(),{kWebSocketURL:zM,kReadyState:LB,kController:gz,kBinaryType:_g,kResponse:Og,kSentClose:Dz,kByteParser:Fz}=rI(),{isEstablished:HM,isClosing:xM,isValidSubprotocol:Yz,failWebsocketConnection:Jz,fireEvent:Nz}=yg(),{establishWebSocketConnection:Uz}=UM(),{WebsocketFrameSend:AC}=kF(),{ByteParser:Gz}=KM(),{kEnumerableProperty:jQ,isBlobLike:TM}=a(),{getGlobalDispatcher:Rz}=cE(),{types:jM}=M("util"),$M=!1;class n extends EventTarget{#A={open:null,error:null,close:null,message:null};#B=0;#E="";#Q="";constructor(A,Q=[]){super();if(m.argumentLengthCheck(arguments,1,{header:"WebSocket constructor"}),!$M)$M=!0,process.emitWarning("WebSockets are experimental, expect them to change at any time.",{code:"UNDICI-WS"});let B=m.converters["DOMString or sequence or WebSocketInit"](Q);A=m.converters.USVString(A),Q=B.protocols;let E=Iz(),I;try{I=new URL(A,E)}catch(C){throw new qB(C,"SyntaxError")}if(I.protocol==="http:")I.protocol="ws:";else if(I.protocol==="https:")I.protocol="wss:";if(I.protocol!=="ws:"&&I.protocol!=="wss:")throw new qB(`Expected a ws: or wss: protocol, got ${I.protocol}`,"SyntaxError");if(I.hash||I.href.endsWith("#"))throw new qB("Got fragment","SyntaxError");if(typeof Q==="string")Q=[Q];if(Q.length!==new Set(Q.map((C)=>C.toLowerCase())).size)throw new qB("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(Q.length>0&&!Q.every((C)=>Yz(C)))throw new qB("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[zM]=new URL(I.href),this[gz]=Uz(I,Q,this,(C)=>this.#I(C),B),this[LB]=n.CONNECTING,this[_g]="blob"}close(A=void 0,Q=void 0){if(m.brandCheck(this,n),A!==void 0)A=m.converters["unsigned short"](A,{clamp:!0});if(Q!==void 0)Q=m.converters.USVString(Q);if(A!==void 0){if(A!==1000&&(A<3000||A>4999))throw new qB("invalid code","InvalidAccessError")}let B=0;if(Q!==void 0){if(B=Buffer.byteLength(Q),B>123)throw new qB(`Reason must be less than 123 bytes; received ${B}`,"SyntaxError")}if(this[LB]===n.CLOSING||this[LB]===n.CLOSED);else if(!HM(this))Jz(this,"Connection was closed before it was established."),this[LB]=n.CLOSING;else if(!xM(this)){let E=new AC;if(A!==void 0&&Q===void 0)E.frameData=Buffer.allocUnsafe(2),E.frameData.writeUInt16BE(A,0);else if(A!==void 0&&Q!==void 0)E.frameData=Buffer.allocUnsafe(2+B),E.frameData.writeUInt16BE(A,0),E.frameData.write(Q,2,"utf-8");else E.frameData=Cz;this[Og].socket.write(E.createFrame(eI.CLOSE),(C)=>{if(!C)this[Dz]=!0}),this[LB]=AI.CLOSING}else this[LB]=n.CLOSING}send(A){if(m.brandCheck(this,n),m.argumentLengthCheck(arguments,1,{header:"WebSocket.send"}),A=m.converters.WebSocketSendData(A),this[LB]===n.CONNECTING)throw new qB("Sent before connected.","InvalidStateError");if(!HM(this)||xM(this))return;let Q=this[Og].socket;if(typeof A==="string"){let B=Buffer.from(A),I=new AC(B).createFrame(eI.TEXT);this.#B+=B.byteLength,Q.write(I,()=>{this.#B-=B.byteLength})}else if(jM.isArrayBuffer(A)){let B=Buffer.from(A),I=new AC(B).createFrame(eI.BINARY);this.#B+=B.byteLength,Q.write(I,()=>{this.#B-=B.byteLength})}else if(ArrayBuffer.isView(A)){let B=Buffer.from(A,A.byteOffset,A.byteLength),I=new AC(B).createFrame(eI.BINARY);this.#B+=B.byteLength,Q.write(I,()=>{this.#B-=B.byteLength})}else if(TM(A)){let B=new AC;A.arrayBuffer().then((E)=>{let I=Buffer.from(E);B.frameData=I;let C=B.createFrame(eI.BINARY);this.#B+=I.byteLength,Q.write(C,()=>{this.#B-=I.byteLength})})}}get readyState(){return m.brandCheck(this,n),this[LB]}get bufferedAmount(){return m.brandCheck(this,n),this.#B}get url(){return m.brandCheck(this,n),Ez(this[zM])}get extensions(){return m.brandCheck(this,n),this.#Q}get protocol(){return m.brandCheck(this,n),this.#E}get onopen(){return m.brandCheck(this,n),this.#A.open}set onopen(A){if(m.brandCheck(this,n),this.#A.open)this.removeEventListener("open",this.#A.open);if(typeof A==="function")this.#A.open=A,this.addEventListener("open",A);else this.#A.open=null}get onerror(){return m.brandCheck(this,n),this.#A.error}set onerror(A){if(m.brandCheck(this,n),this.#A.error)this.removeEventListener("error",this.#A.error);if(typeof A==="function")this.#A.error=A,this.addEventListener("error",A);else this.#A.error=null}get onclose(){return m.brandCheck(this,n),this.#A.close}set onclose(A){if(m.brandCheck(this,n),this.#A.close)this.removeEventListener("close",this.#A.close);if(typeof A==="function")this.#A.close=A,this.addEventListener("close",A);else this.#A.close=null}get onmessage(){return m.brandCheck(this,n),this.#A.message}set onmessage(A){if(m.brandCheck(this,n),this.#A.message)this.removeEventListener("message",this.#A.message);if(typeof A==="function")this.#A.message=A,this.addEventListener("message",A);else this.#A.message=null}get binaryType(){return m.brandCheck(this,n),this[_g]}set binaryType(A){if(m.brandCheck(this,n),A!=="blob"&&A!=="arraybuffer")this[_g]="blob";else this[_g]=A}#I(A){this[Og]=A;let Q=new Gz(this);Q.on("drain",function I(){this.ws[Og].socket.resume()}),A.socket.ws=this,this[Fz]=Q,this[LB]=AI.OPEN;let B=A.headersList.get("sec-websocket-extensions");if(B!==null)this.#Q=B;let E=A.headersList.get("sec-websocket-protocol");if(E!==null)this.#E=E;Nz("open",this)}}n.CONNECTING=n.prototype.CONNECTING=AI.CONNECTING;n.OPEN=n.prototype.OPEN=AI.OPEN;n.CLOSING=n.prototype.CLOSING=AI.CLOSING;n.CLOSED=n.prototype.CLOSED=AI.CLOSED;Object.defineProperties(n.prototype,{CONNECTING:PB,OPEN:PB,CLOSING:PB,CLOSED:PB,url:jQ,readyState:jQ,bufferedAmount:jQ,onopen:jQ,onerror:jQ,onclose:jQ,close:jQ,onmessage:jQ,binaryType:jQ,send:jQ,extensions:jQ,protocol:jQ,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(n,{CONNECTING:PB,OPEN:PB,CLOSING:PB,CLOSED:PB});m.converters["sequence"]=m.sequenceConverter(m.converters.DOMString);m.converters["DOMString or sequence"]=function(A){if(m.util.Type(A)==="Object"&&Symbol.iterator in A)return m.converters["sequence"](A);return m.converters.DOMString(A)};m.converters.WebSocketInit=m.dictionaryConverter([{key:"protocols",converter:m.converters["DOMString or sequence"],get defaultValue(){return[]}},{key:"dispatcher",converter:(A)=>A,get defaultValue(){return Rz()}},{key:"headers",converter:m.nullableConverter(m.converters.HeadersInit)}]);m.converters["DOMString or sequence or WebSocketInit"]=function(A){if(m.util.Type(A)==="Object"&&!(Symbol.iterator in A))return m.converters.WebSocketInit(A);return{protocols:m.converters["DOMString or sequence"](A)}};m.converters.WebSocketSendData=function(A){if(m.util.Type(A)==="Object"){if(TM(A))return m.converters.Blob(A,{strict:!1});if(ArrayBuffer.isView(A)||jM.isAnyArrayBuffer(A))return m.converters.BufferSource(A)}return m.converters.USVString(A)};yM.exports={WebSocket:n}});var fM=h((jz,u)=>{var wz=yI(),OM=zC(),qM=EA(),Mz=OE(),Lz=jG(),Vz=PI(),gE=a(),{InvalidArgumentError:qg}=qM,QI=$R(),Wz=SI(),Zz=AF(),Xz=w2(),hz=BF(),Sz=iD(),Kz=h2(),zz=x2(),{getGlobalDispatcher:PM,setGlobalDispatcher:Hz}=cE(),xz=O2(),$z=YD(),Tz=TC(),bF;try{M("crypto"),bF=!0}catch{bF=!1}Object.assign(OM.prototype,QI);jz.Dispatcher=OM;jz.Client=wz;jz.Pool=Mz;jz.BalancedPool=Lz;jz.Agent=Vz;jz.ProxyAgent=Kz;jz.RetryHandler=zz;jz.DecoratorHandler=xz;jz.RedirectHandler=$z;jz.createRedirectInterceptor=Tz;jz.buildConnector=Wz;jz.errors=qM;function QC(A){return(Q,B,E)=>{if(typeof B==="function")E=B,B=null;if(!Q||typeof Q!=="string"&&typeof Q!=="object"&&!(Q instanceof URL))throw new qg("invalid url");if(B!=null&&typeof B!=="object")throw new qg("invalid opts");if(B&&B.path!=null){if(typeof B.path!=="string")throw new qg("invalid opts.path");let g=B.path;if(!B.path.startsWith("/"))g=`/${g}`;Q=new URL(gE.parseOrigin(Q).origin+g)}else{if(!B)B=typeof Q==="object"?Q:{};Q=gE.parseURL(Q)}let{agent:I,dispatcher:C=PM()}=B;if(I)throw new qg("unsupported opts.agent. Did you mean opts.client?");return A.call(C,{...B,origin:Q.origin,path:Q.search?`${Q.pathname}${Q.search}`:Q.pathname,method:B.method||(B.body?"PUT":"GET")},E)}}jz.setGlobalDispatcher=Hz;jz.getGlobalDispatcher=PM;if(gE.nodeMajor>16||gE.nodeMajor===16&&gE.nodeMinor>=8){let A=null;jz.fetch=async function C(g){if(!A)A=Wg().fetch;try{return await A(...arguments)}catch(D){if(typeof D==="object")Error.captureStackTrace(D,this);throw D}},jz.Headers=BE().Headers,jz.Response=Fg().Response,jz.Request=lI().Request,jz.FormData=XC().FormData,jz.File=WC().File,jz.FileReader=Tw().FileReader;let{setGlobalOrigin:Q,getGlobalOrigin:B}=XE();jz.setGlobalOrigin=Q,jz.getGlobalOrigin=B;let{CacheStorage:E}=cw(),{kConstruct:I}=Sg();jz.caches=new E(I)}if(gE.nodeMajor>=16){let{deleteCookie:A,getCookies:Q,getSetCookies:B,setCookie:E}=AM();jz.deleteCookie=A,jz.getCookies=Q,jz.getSetCookies=B,jz.setCookie=E;let{parseMIMEType:I,serializeAMimeType:C}=fQ();jz.parseMIMEType=I,jz.serializeAMimeType=C}if(gE.nodeMajor>=18&&bF){let{WebSocket:A}=_M();jz.WebSocket=A}jz.request=QC(QI.request);jz.stream=QC(QI.stream);jz.pipeline=QC(QI.pipeline);jz.connect=QC(QI.connect);jz.upgrade=QC(QI.upgrade);jz.MockClient=Zz;jz.MockPool=hz;jz.MockAgent=Xz;jz.mockErrors=Sz});var bM=h((DA)=>{var AH=DA&&DA.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;var I=Object.getOwnPropertyDescriptor(Q,B);if(!I||("get"in I?!Q.__esModule:I.writable||I.configurable))I={enumerable:!0,get:function(){return Q[B]}};Object.defineProperty(A,E,I)}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),QH=DA&&DA.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),vg=DA&&DA.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.prototype.hasOwnProperty.call(A,B))AH(Q,A,B)}return QH(Q,A),Q},KA=DA&&DA.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(DA,"__esModule",{value:!0});DA.HttpClient=DA.isHttps=DA.HttpClientResponse=DA.HttpClientError=DA.getProxyUrl=DA.MediaTypes=DA.Headers=DA.HttpCodes=void 0;var mF=vg(M("http")),vM=vg(M("https")),cF=vg(CJ()),Pg=vg(YJ()),BH=fM(),yQ;(function(A){A[A.OK=200]="OK",A[A.MultipleChoices=300]="MultipleChoices",A[A.MovedPermanently=301]="MovedPermanently",A[A.ResourceMoved=302]="ResourceMoved",A[A.SeeOther=303]="SeeOther",A[A.NotModified=304]="NotModified",A[A.UseProxy=305]="UseProxy",A[A.SwitchProxy=306]="SwitchProxy",A[A.TemporaryRedirect=307]="TemporaryRedirect",A[A.PermanentRedirect=308]="PermanentRedirect",A[A.BadRequest=400]="BadRequest",A[A.Unauthorized=401]="Unauthorized",A[A.PaymentRequired=402]="PaymentRequired",A[A.Forbidden=403]="Forbidden",A[A.NotFound=404]="NotFound",A[A.MethodNotAllowed=405]="MethodNotAllowed",A[A.NotAcceptable=406]="NotAcceptable",A[A.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",A[A.RequestTimeout=408]="RequestTimeout",A[A.Conflict=409]="Conflict",A[A.Gone=410]="Gone",A[A.TooManyRequests=429]="TooManyRequests",A[A.InternalServerError=500]="InternalServerError",A[A.NotImplemented=501]="NotImplemented",A[A.BadGateway=502]="BadGateway",A[A.ServiceUnavailable=503]="ServiceUnavailable",A[A.GatewayTimeout=504]="GatewayTimeout"})(yQ||(DA.HttpCodes=yQ={}));var iA;(function(A){A.Accept="accept",A.ContentType="content-type"})(iA||(DA.Headers=iA={}));var VB;(function(A){A.ApplicationJson="application/json"})(VB||(DA.MediaTypes=VB={}));function EH(A){let Q=cF.getProxyUrl(new URL(A));return Q?Q.href:""}DA.getProxyUrl=EH;var IH=[yQ.MovedPermanently,yQ.ResourceMoved,yQ.SeeOther,yQ.TemporaryRedirect,yQ.PermanentRedirect],CH=[yQ.BadGateway,yQ.ServiceUnavailable,yQ.GatewayTimeout],gH=["OPTIONS","GET","DELETE","HEAD"],DH=10,FH=5;class kg extends Error{constructor(A,Q){super(A);this.name="HttpClientError",this.statusCode=Q,Object.setPrototypeOf(this,kg.prototype)}}DA.HttpClientError=kg;class uF{constructor(A){this.message=A}readBody(){return KA(this,void 0,void 0,function*(){return new Promise((A)=>KA(this,void 0,void 0,function*(){let Q=Buffer.alloc(0);this.message.on("data",(B)=>{Q=Buffer.concat([Q,B])}),this.message.on("end",()=>{A(Q.toString())})}))})}readBodyBuffer(){return KA(this,void 0,void 0,function*(){return new Promise((A)=>KA(this,void 0,void 0,function*(){let Q=[];this.message.on("data",(B)=>{Q.push(B)}),this.message.on("end",()=>{A(Buffer.concat(Q))})}))})}}DA.HttpClientResponse=uF;function YH(A){return new URL(A).protocol==="https:"}DA.isHttps=YH;class kM{constructor(A,Q,B){if(this._ignoreSslError=!1,this._allowRedirects=!0,this._allowRedirectDowngrade=!1,this._maxRedirects=50,this._allowRetries=!1,this._maxRetries=1,this._keepAlive=!1,this._disposed=!1,this.userAgent=A,this.handlers=Q||[],this.requestOptions=B,B){if(B.ignoreSslError!=null)this._ignoreSslError=B.ignoreSslError;if(this._socketTimeout=B.socketTimeout,B.allowRedirects!=null)this._allowRedirects=B.allowRedirects;if(B.allowRedirectDowngrade!=null)this._allowRedirectDowngrade=B.allowRedirectDowngrade;if(B.maxRedirects!=null)this._maxRedirects=Math.max(B.maxRedirects,0);if(B.keepAlive!=null)this._keepAlive=B.keepAlive;if(B.allowRetries!=null)this._allowRetries=B.allowRetries;if(B.maxRetries!=null)this._maxRetries=B.maxRetries}}options(A,Q){return KA(this,void 0,void 0,function*(){return this.request("OPTIONS",A,null,Q||{})})}get(A,Q){return KA(this,void 0,void 0,function*(){return this.request("GET",A,null,Q||{})})}del(A,Q){return KA(this,void 0,void 0,function*(){return this.request("DELETE",A,null,Q||{})})}post(A,Q,B){return KA(this,void 0,void 0,function*(){return this.request("POST",A,Q,B||{})})}patch(A,Q,B){return KA(this,void 0,void 0,function*(){return this.request("PATCH",A,Q,B||{})})}put(A,Q,B){return KA(this,void 0,void 0,function*(){return this.request("PUT",A,Q,B||{})})}head(A,Q){return KA(this,void 0,void 0,function*(){return this.request("HEAD",A,null,Q||{})})}sendStream(A,Q,B,E){return KA(this,void 0,void 0,function*(){return this.request(A,Q,B,E)})}getJson(A,Q={}){return KA(this,void 0,void 0,function*(){Q[iA.Accept]=this._getExistingOrDefaultHeader(Q,iA.Accept,VB.ApplicationJson);let B=yield this.get(A,Q);return this._processResponse(B,this.requestOptions)})}postJson(A,Q,B={}){return KA(this,void 0,void 0,function*(){let E=JSON.stringify(Q,null,2);B[iA.Accept]=this._getExistingOrDefaultHeader(B,iA.Accept,VB.ApplicationJson),B[iA.ContentType]=this._getExistingOrDefaultHeader(B,iA.ContentType,VB.ApplicationJson);let I=yield this.post(A,E,B);return this._processResponse(I,this.requestOptions)})}putJson(A,Q,B={}){return KA(this,void 0,void 0,function*(){let E=JSON.stringify(Q,null,2);B[iA.Accept]=this._getExistingOrDefaultHeader(B,iA.Accept,VB.ApplicationJson),B[iA.ContentType]=this._getExistingOrDefaultHeader(B,iA.ContentType,VB.ApplicationJson);let I=yield this.put(A,E,B);return this._processResponse(I,this.requestOptions)})}patchJson(A,Q,B={}){return KA(this,void 0,void 0,function*(){let E=JSON.stringify(Q,null,2);B[iA.Accept]=this._getExistingOrDefaultHeader(B,iA.Accept,VB.ApplicationJson),B[iA.ContentType]=this._getExistingOrDefaultHeader(B,iA.ContentType,VB.ApplicationJson);let I=yield this.patch(A,E,B);return this._processResponse(I,this.requestOptions)})}request(A,Q,B,E){return KA(this,void 0,void 0,function*(){if(this._disposed)throw new Error("Client has already been disposed.");let I=new URL(Q),C=this._prepareRequest(A,I,E),g=this._allowRetries&&gH.includes(A)?this._maxRetries+1:1,D=0,F;do{if(F=yield this.requestRaw(C,B),F&&F.message&&F.message.statusCode===yQ.Unauthorized){let Y;for(let U of this.handlers)if(U.canHandleAuthentication(F)){Y=U;break}if(Y)return Y.handleAuthentication(this,C,B);else return F}let J=this._maxRedirects;while(F.message.statusCode&&IH.includes(F.message.statusCode)&&this._allowRedirects&&J>0){let Y=F.message.headers.location;if(!Y)break;let U=new URL(Y);if(I.protocol==="https:"&&I.protocol!==U.protocol&&!this._allowRedirectDowngrade)throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");if(yield F.readBody(),U.hostname!==I.hostname){for(let R in E)if(R.toLowerCase()==="authorization")delete E[R]}C=this._prepareRequest(A,U,E),F=yield this.requestRaw(C,B),J--}if(!F.message.statusCode||!CH.includes(F.message.statusCode))return F;if(D+=1,D{function I(C,g){if(C)E(C);else if(!g)E(new Error("Unknown error"));else B(g)}this.requestRawWithCallback(A,Q,I)})})}requestRawWithCallback(A,Q,B){if(typeof Q==="string"){if(!A.options.headers)A.options.headers={};A.options.headers["Content-Length"]=Buffer.byteLength(Q,"utf8")}let E=!1;function I(D,F){if(!E)E=!0,B(D,F)}let C=A.httpModule.request(A.options,(D)=>{let F=new uF(D);I(void 0,F)}),g;if(C.on("socket",(D)=>{g=D}),C.setTimeout(this._socketTimeout||180000,()=>{if(g)g.end();I(new Error(`Request timeout: ${A.options.path}`))}),C.on("error",function(D){I(D)}),Q&&typeof Q==="string")C.write(Q,"utf8");if(Q&&typeof Q!=="string")Q.on("close",function(){C.end()}),Q.pipe(C);else C.end()}getAgent(A){let Q=new URL(A);return this._getAgent(Q)}getAgentDispatcher(A){let Q=new URL(A),B=cF.getProxyUrl(Q);if(!(B&&B.hostname))return;return this._getProxyAgentDispatcher(Q,B)}_prepareRequest(A,Q,B){let E={};E.parsedUrl=Q;let I=E.parsedUrl.protocol==="https:";E.httpModule=I?vM:mF;let C=I?443:80;if(E.options={},E.options.host=E.parsedUrl.hostname,E.options.port=E.parsedUrl.port?parseInt(E.parsedUrl.port):C,E.options.path=(E.parsedUrl.pathname||"")+(E.parsedUrl.search||""),E.options.method=A,E.options.headers=this._mergeHeaders(B),this.userAgent!=null)E.options.headers["user-agent"]=this.userAgent;if(E.options.agent=this._getAgent(E.parsedUrl),this.handlers)for(let g of this.handlers)g.prepareRequest(E.options);return E}_mergeHeaders(A){if(this.requestOptions&&this.requestOptions.headers)return Object.assign({},fg(this.requestOptions.headers),fg(A||{}));return fg(A||{})}_getExistingOrDefaultHeader(A,Q,B){let E;if(this.requestOptions&&this.requestOptions.headers)E=fg(this.requestOptions.headers)[Q];return A[Q]||E||B}_getAgent(A){let Q,B=cF.getProxyUrl(A),E=B&&B.hostname;if(this._keepAlive&&E)Q=this._proxyAgent;if(!E)Q=this._agent;if(Q)return Q;let I=A.protocol==="https:",C=100;if(this.requestOptions)C=this.requestOptions.maxSockets||mF.globalAgent.maxSockets;if(B&&B.hostname){let g={maxSockets:C,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(B.username||B.password)&&{proxyAuth:`${B.username}:${B.password}`}),{host:B.hostname,port:B.port})},D,F=B.protocol==="https:";if(I)D=F?Pg.httpsOverHttps:Pg.httpsOverHttp;else D=F?Pg.httpOverHttps:Pg.httpOverHttp;Q=D(g),this._proxyAgent=Q}if(!Q){let g={keepAlive:this._keepAlive,maxSockets:C};Q=I?new vM.Agent(g):new mF.Agent(g),this._agent=Q}if(I&&this._ignoreSslError)Q.options=Object.assign(Q.options||{},{rejectUnauthorized:!1});return Q}_getProxyAgentDispatcher(A,Q){let B;if(this._keepAlive)B=this._proxyAgentDispatcher;if(B)return B;let E=A.protocol==="https:";if(B=new BH.ProxyAgent(Object.assign({uri:Q.href,pipelining:!this._keepAlive?0:1},(Q.username||Q.password)&&{token:`Basic ${Buffer.from(`${Q.username}:${Q.password}`).toString("base64")}`})),this._proxyAgentDispatcher=B,E&&this._ignoreSslError)B.options=Object.assign(B.options.requestTls||{},{rejectUnauthorized:!1});return B}_performExponentialBackoff(A){return KA(this,void 0,void 0,function*(){A=Math.min(DH,A);let Q=FH*Math.pow(2,A);return new Promise((B)=>setTimeout(()=>B(),Q))})}_processResponse(A,Q){return KA(this,void 0,void 0,function*(){return new Promise((B,E)=>KA(this,void 0,void 0,function*(){let I=A.message.statusCode||0,C={statusCode:I,result:null,headers:{}};if(I===yQ.NotFound)B(C);function g(J,Y){if(typeof Y==="string"){let U=new Date(Y);if(!isNaN(U.valueOf()))return U}return Y}let D,F;try{if(F=yield A.readBody(),F&&F.length>0){if(Q&&Q.deserializeDates)D=JSON.parse(F,g);else D=JSON.parse(F);C.result=D}C.headers=A.message.headers}catch(J){}if(I>299){let J;if(D&&D.message)J=D.message;else if(F&&F.length>0)J=F;else J=`Failed request: (${I})`;let Y=new kg(J,I);Y.result=C.result,E(Y)}else B(C)}))})}}DA.HttpClient=kM;var fg=(A)=>Object.keys(A).reduce((Q,B)=>(Q[B.toLowerCase()]=A[B],Q),{})});var dM=h((BB)=>{var dF=BB&&BB.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(BB,"__esModule",{value:!0});BB.PersonalAccessTokenCredentialHandler=BB.BearerCredentialHandler=BB.BasicCredentialHandler=void 0;class mM{constructor(A,Q){this.username=A,this.password=Q}prepareRequest(A){if(!A.headers)throw Error("The request has no headers");A.headers.Authorization=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`}canHandleAuthentication(){return!1}handleAuthentication(){return dF(this,void 0,void 0,function*(){throw new Error("not implemented")})}}BB.BasicCredentialHandler=mM;class cM{constructor(A){this.token=A}prepareRequest(A){if(!A.headers)throw Error("The request has no headers");A.headers.Authorization=`Bearer ${this.token}`}canHandleAuthentication(){return!1}handleAuthentication(){return dF(this,void 0,void 0,function*(){throw new Error("not implemented")})}}BB.BearerCredentialHandler=cM;class uM{constructor(A){this.token=A}prepareRequest(A){if(!A.headers)throw Error("The request has no headers");A.headers.Authorization=`Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`}canHandleAuthentication(){return!1}handleAuthentication(){return dF(this,void 0,void 0,function*(){throw new Error("not implemented")})}}BB.PersonalAccessTokenCredentialHandler=uM});var BC=h((DQ)=>{var iF=DQ&&DQ.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(DQ,"__esModule",{value:!0});DQ.summary=DQ.markdownSummary=DQ.SUMMARY_DOCS_URL=DQ.SUMMARY_ENV_VAR=void 0;var JH=M("os"),lF=M("fs"),{access:NH,appendFile:UH,writeFile:GH}=lF.promises;DQ.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY";DQ.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";class iM{constructor(){this._buffer=""}filePath(){return iF(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let A=process.env[DQ.SUMMARY_ENV_VAR];if(!A)throw new Error(`Unable to find environment variable for $${DQ.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);try{yield NH(A,lF.constants.R_OK|lF.constants.W_OK)}catch(Q){throw new Error(`Unable to access summary file: '${A}'. Check if the file has correct read/write permissions.`)}return this._filePath=A,this._filePath})}wrap(A,Q,B={}){let E=Object.entries(B).map(([I,C])=>` ${I}="${C}"`).join("");if(!Q)return`<${A}${E}>`;return`<${A}${E}>${Q}`}write(A){return iF(this,void 0,void 0,function*(){let Q=!!(A===null||A===void 0?void 0:A.overwrite),B=yield this.filePath();return yield(Q?GH:UH)(B,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return iF(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(A,Q=!1){return this._buffer+=A,Q?this.addEOL():this}addEOL(){return this.addRaw(JH.EOL)}addCodeBlock(A,Q){let B=Object.assign({},Q&&{lang:Q}),E=this.wrap("pre",this.wrap("code",A),B);return this.addRaw(E).addEOL()}addList(A,Q=!1){let B=Q?"ol":"ul",E=A.map((C)=>this.wrap("li",C)).join(""),I=this.wrap(B,E);return this.addRaw(I).addEOL()}addTable(A){let Q=A.map((E)=>{let I=E.map((C)=>{if(typeof C==="string")return this.wrap("td",C);let{header:g,data:D,colspan:F,rowspan:J}=C,Y=g?"th":"td",U=Object.assign(Object.assign({},F&&{colspan:F}),J&&{rowspan:J});return this.wrap(Y,D,U)}).join("");return this.wrap("tr",I)}).join(""),B=this.wrap("table",Q);return this.addRaw(B).addEOL()}addDetails(A,Q){let B=this.wrap("details",this.wrap("summary",A)+Q);return this.addRaw(B).addEOL()}addImage(A,Q,B){let{width:E,height:I}=B||{},C=Object.assign(Object.assign({},E&&{width:E}),I&&{height:I}),g=this.wrap("img",null,Object.assign({src:A,alt:Q},C));return this.addRaw(g).addEOL()}addHeading(A,Q){let B=`h${Q}`,E=["h1","h2","h3","h4","h5","h6"].includes(B)?B:"h1",I=this.wrap(E,A);return this.addRaw(I).addEOL()}addSeparator(){let A=this.wrap("hr",null);return this.addRaw(A).addEOL()}addBreak(){let A=this.wrap("br",null);return this.addRaw(A).addEOL()}addQuote(A,Q){let B=Object.assign({},Q&&{cite:Q}),E=this.wrap("blockquote",A,B);return this.addRaw(E).addEOL()}addLink(A,Q){let B=this.wrap("a",A,{href:Q});return this.addRaw(B).addEOL()}}var lM=new iM;DQ.markdownSummary=lM;DQ.summary=lM});var pF=h((FQ)=>{var RH=FQ&&FQ.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;var I=Object.getOwnPropertyDescriptor(Q,B);if(!I||("get"in I?!Q.__esModule:I.writable||I.configurable))I={enumerable:!0,get:function(){return Q[B]}};Object.defineProperty(A,E,I)}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),wH=FQ&&FQ.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),MH=FQ&&FQ.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.prototype.hasOwnProperty.call(A,B))RH(Q,A,B)}return wH(Q,A),Q};Object.defineProperty(FQ,"__esModule",{value:!0});FQ.toPlatformPath=FQ.toWin32Path=FQ.toPosixPath=void 0;var LH=MH(M("path"));function VH(A){return A.replace(/[\\]/g,"/")}FQ.toPosixPath=VH;function WH(A){return A.replace(/[/]/g,"\\")}FQ.toWin32Path=WH;function ZH(A){return A.replace(/[/\\]/g,LH.sep)}FQ.toPlatformPath=ZH});var aF=h((O)=>{var XH=O&&O.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;Object.defineProperty(A,E,{enumerable:!0,get:function(){return Q[B]}})}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),hH=O&&O.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),nM=O&&O.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.hasOwnProperty.call(A,B))XH(Q,A,B)}return hH(Q,A),Q},nF=O&&O.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})},YQ;Object.defineProperty(O,"__esModule",{value:!0});O.getCmdPath=O.tryGetExecutablePath=O.isRooted=O.isDirectory=O.exists=O.READONLY=O.UV_FS_O_EXLOCK=O.IS_WINDOWS=O.unlink=O.symlink=O.stat=O.rmdir=O.rm=O.rename=O.readlink=O.readdir=O.open=O.mkdir=O.lstat=O.copyFile=O.chmod=void 0;var aM=nM(M("fs")),bg=nM(M("path"));YQ=aM.promises,O.chmod=YQ.chmod,O.copyFile=YQ.copyFile,O.lstat=YQ.lstat,O.mkdir=YQ.mkdir,O.open=YQ.open,O.readdir=YQ.readdir,O.readlink=YQ.readlink,O.rename=YQ.rename,O.rm=YQ.rm,O.rmdir=YQ.rmdir,O.stat=YQ.stat,O.symlink=YQ.symlink,O.unlink=YQ.unlink;O.IS_WINDOWS=process.platform==="win32";O.UV_FS_O_EXLOCK=268435456;O.READONLY=aM.constants.O_RDONLY;function SH(A){return nF(this,void 0,void 0,function*(){try{yield O.stat(A)}catch(Q){if(Q.code==="ENOENT")return!1;throw Q}return!0})}O.exists=SH;function KH(A,Q=!1){return nF(this,void 0,void 0,function*(){return(Q?yield O.stat(A):yield O.lstat(A)).isDirectory()})}O.isDirectory=KH;function zH(A){if(A=xH(A),!A)throw new Error('isRooted() parameter "p" cannot be empty');if(O.IS_WINDOWS)return A.startsWith("\\")||/^[A-Z]:/i.test(A);return A.startsWith("/")}O.isRooted=zH;function HH(A,Q){return nF(this,void 0,void 0,function*(){let B=void 0;try{B=yield O.stat(A)}catch(I){if(I.code!=="ENOENT")console.log(`Unexpected error attempting to determine if executable file exists '${A}': ${I}`)}if(B&&B.isFile()){if(O.IS_WINDOWS){let I=bg.extname(A).toUpperCase();if(Q.some((C)=>C.toUpperCase()===I))return A}else if(pM(B))return A}let E=A;for(let I of Q){A=E+I,B=void 0;try{B=yield O.stat(A)}catch(C){if(C.code!=="ENOENT")console.log(`Unexpected error attempting to determine if executable file exists '${A}': ${C}`)}if(B&&B.isFile()){if(O.IS_WINDOWS){try{let C=bg.dirname(A),g=bg.basename(A).toUpperCase();for(let D of yield O.readdir(C))if(g===D.toUpperCase()){A=bg.join(C,D);break}}catch(C){console.log(`Unexpected error attempting to determine the actual case of the file '${A}': ${C}`)}return A}else if(pM(B))return A}}return""})}O.tryGetExecutablePath=HH;function xH(A){if(A=A||"",O.IS_WINDOWS)return A=A.replace(/\//g,"\\"),A.replace(/\\\\+/g,"\\");return A.replace(/\/\/+/g,"/")}function pM(A){return(A.mode&1)>0||(A.mode&8)>0&&A.gid===process.getgid()||(A.mode&64)>0&&A.uid===process.getuid()}function $H(){var A;return(A=process.env.COMSPEC)!==null&&A!==void 0?A:"cmd.exe"}O.getCmdPath=$H});var QL=h((ZA)=>{var TH=ZA&&ZA.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;Object.defineProperty(A,E,{enumerable:!0,get:function(){return Q[B]}})}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),jH=ZA&&ZA.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),sM=ZA&&ZA.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.hasOwnProperty.call(A,B))TH(Q,A,B)}return jH(Q,A),Q},fB=ZA&&ZA.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(ZA,"__esModule",{value:!0});ZA.findInPath=ZA.which=ZA.mkdirP=ZA.rmRF=ZA.mv=ZA.cp=void 0;var yH=M("assert"),EB=sM(M("path")),t=sM(aF());function _H(A,Q,B={}){return fB(this,void 0,void 0,function*(){let{force:E,recursive:I,copySourceDirectory:C}=qH(B),g=(yield t.exists(Q))?yield t.stat(Q):null;if(g&&g.isFile()&&!E)return;let D=g&&g.isDirectory()&&C?EB.join(Q,EB.basename(A)):Q;if(!(yield t.exists(A)))throw new Error(`no such file or directory: ${A}`);if((yield t.stat(A)).isDirectory())if(!I)throw new Error(`Failed to copy. ${A} is a directory, but tried to copy without recursive flag.`);else yield eM(A,D,0,E);else{if(EB.relative(A,D)==="")throw new Error(`'${D}' and '${A}' are the same file`);yield AL(A,D,E)}})}ZA.cp=_H;function OH(A,Q,B={}){return fB(this,void 0,void 0,function*(){if(yield t.exists(Q)){let E=!0;if(yield t.isDirectory(Q))Q=EB.join(Q,EB.basename(A)),E=yield t.exists(Q);if(E)if(B.force==null||B.force)yield oM(Q);else throw new Error("Destination already exists")}yield sF(EB.dirname(Q)),yield t.rename(A,Q)})}ZA.mv=OH;function oM(A){return fB(this,void 0,void 0,function*(){if(t.IS_WINDOWS){if(/[*"<>|]/.test(A))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows')}try{yield t.rm(A,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(Q){throw new Error(`File was unable to be removed ${Q}`)}})}ZA.rmRF=oM;function sF(A){return fB(this,void 0,void 0,function*(){yH.ok(A,"a path argument must be provided"),yield t.mkdir(A,{recursive:!0})})}ZA.mkdirP=sF;function rM(A,Q){return fB(this,void 0,void 0,function*(){if(!A)throw new Error("parameter 'tool' is required");if(Q){let E=yield rM(A,!1);if(!E)if(t.IS_WINDOWS)throw new Error(`Unable to locate executable file: ${A}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);else throw new Error(`Unable to locate executable file: ${A}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);return E}let B=yield tM(A);if(B&&B.length>0)return B[0];return""})}ZA.which=rM;function tM(A){return fB(this,void 0,void 0,function*(){if(!A)throw new Error("parameter 'tool' is required");let Q=[];if(t.IS_WINDOWS&&process.env.PATHEXT){for(let I of process.env.PATHEXT.split(EB.delimiter))if(I)Q.push(I)}if(t.isRooted(A)){let I=yield t.tryGetExecutablePath(A,Q);if(I)return[I];return[]}if(A.includes(EB.sep))return[];let B=[];if(process.env.PATH){for(let I of process.env.PATH.split(EB.delimiter))if(I)B.push(I)}let E=[];for(let I of B){let C=yield t.tryGetExecutablePath(EB.join(I,A),Q);if(C)E.push(C)}return E})}ZA.findInPath=tM;function qH(A){let Q=A.force==null?!0:A.force,B=Boolean(A.recursive),E=A.copySourceDirectory==null?!0:Boolean(A.copySourceDirectory);return{force:Q,recursive:B,copySourceDirectory:E}}function eM(A,Q,B,E){return fB(this,void 0,void 0,function*(){if(B>=255)return;B++,yield sF(Q);let I=yield t.readdir(A);for(let C of I){let g=`${A}/${C}`,D=`${Q}/${C}`;if((yield t.lstat(g)).isDirectory())yield eM(g,D,B,E);else yield AL(g,D,E)}yield t.chmod(Q,(yield t.stat(A)).mode)})}function AL(A,Q,B){return fB(this,void 0,void 0,function*(){if((yield t.lstat(A)).isSymbolicLink()){try{yield t.lstat(Q),yield t.unlink(Q)}catch(I){if(I.code==="EPERM")yield t.chmod(Q,"0666"),yield t.unlink(Q)}let E=yield t.readlink(A);yield t.symlink(E,Q,t.IS_WINDOWS?"junction":null)}else if(!(yield t.exists(Q))||B)yield t.copyFile(A,Q)})}});var gL=h((JQ)=>{var PH=JQ&&JQ.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;Object.defineProperty(A,E,{enumerable:!0,get:function(){return Q[B]}})}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),fH=JQ&&JQ.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),BI=JQ&&JQ.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.hasOwnProperty.call(A,B))PH(Q,A,B)}return fH(Q,A),Q},BL=JQ&&JQ.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(JQ,"__esModule",{value:!0});JQ.argStringToArray=JQ.ToolRunner=void 0;var mg=BI(M("os")),IL=BI(M("events")),vH=BI(M("child_process")),kH=BI(M("path")),bH=BI(QL()),EL=BI(aF()),mH=M("timers"),cg=process.platform==="win32";class CL extends IL.EventEmitter{constructor(A,Q,B){super();if(!A)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=A,this.args=Q||[],this.options=B||{}}_debug(A){if(this.options.listeners&&this.options.listeners.debug)this.options.listeners.debug(A)}_getCommandString(A,Q){let B=this._getSpawnFileName(),E=this._getSpawnArgs(A),I=Q?"":"[command]";if(cg)if(this._isCmdFile()){I+=B;for(let C of E)I+=` ${C}`}else if(A.windowsVerbatimArguments){I+=`"${B}"`;for(let C of E)I+=` ${C}`}else{I+=this._windowsQuoteCmdArg(B);for(let C of E)I+=` ${this._windowsQuoteCmdArg(C)}`}else{I+=B;for(let C of E)I+=` ${C}`}return I}_processLineBuffer(A,Q,B){try{let E=Q+A.toString(),I=E.indexOf(mg.EOL);while(I>-1){let C=E.substring(0,I);B(C),E=E.substring(I+mg.EOL.length),I=E.indexOf(mg.EOL)}return E}catch(E){return this._debug(`error processing line. Failed with error ${E}`),""}}_getSpawnFileName(){if(cg){if(this._isCmdFile())return process.env.COMSPEC||"cmd.exe"}return this.toolPath}_getSpawnArgs(A){if(cg){if(this._isCmdFile()){let Q=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let B of this.args)Q+=" ",Q+=A.windowsVerbatimArguments?B:this._windowsQuoteCmdArg(B);return Q+='"',[Q]}}return this.args}_endsWith(A,Q){return A.endsWith(Q)}_isCmdFile(){let A=this.toolPath.toUpperCase();return this._endsWith(A,".CMD")||this._endsWith(A,".BAT")}_windowsQuoteCmdArg(A){if(!this._isCmdFile())return this._uvQuoteCmdArg(A);if(!A)return'""';let Q=[" ","\t","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],B=!1;for(let C of A)if(Q.some((g)=>g===C)){B=!0;break}if(!B)return A;let E='"',I=!0;for(let C=A.length;C>0;C--)if(E+=A[C-1],I&&A[C-1]==="\\")E+="\\";else if(A[C-1]==='"')I=!0,E+='"';else I=!1;return E+='"',E.split("").reverse().join("")}_uvQuoteCmdArg(A){if(!A)return'""';if(!A.includes(" ")&&!A.includes("\t")&&!A.includes('"'))return A;if(!A.includes('"')&&!A.includes("\\"))return`"${A}"`;let Q='"',B=!0;for(let E=A.length;E>0;E--)if(Q+=A[E-1],B&&A[E-1]==="\\")Q+="\\";else if(A[E-1]==='"')B=!0,Q+="\\";else B=!1;return Q+='"',Q.split("").reverse().join("")}_cloneExecOptions(A){A=A||{};let Q={cwd:A.cwd||process.cwd(),env:A.env||process.env,silent:A.silent||!1,windowsVerbatimArguments:A.windowsVerbatimArguments||!1,failOnStdErr:A.failOnStdErr||!1,ignoreReturnCode:A.ignoreReturnCode||!1,delay:A.delay||1e4};return Q.outStream=A.outStream||process.stdout,Q.errStream=A.errStream||process.stderr,Q}_getSpawnOptions(A,Q){A=A||{};let B={};if(B.cwd=A.cwd,B.env=A.env,B.windowsVerbatimArguments=A.windowsVerbatimArguments||this._isCmdFile(),A.windowsVerbatimArguments)B.argv0=`"${Q}"`;return B}exec(){return BL(this,void 0,void 0,function*(){if(!EL.isRooted(this.toolPath)&&(this.toolPath.includes("/")||cg&&this.toolPath.includes("\\")))this.toolPath=kH.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath);return this.toolPath=yield bH.which(this.toolPath,!0),new Promise((A,Q)=>BL(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let F of this.args)this._debug(` ${F}`);let B=this._cloneExecOptions(this.options);if(!B.silent&&B.outStream)B.outStream.write(this._getCommandString(B)+mg.EOL);let E=new oF(B,this.toolPath);if(E.on("debug",(F)=>{this._debug(F)}),this.options.cwd&&!(yield EL.exists(this.options.cwd)))return Q(new Error(`The cwd: ${this.options.cwd} does not exist!`));let I=this._getSpawnFileName(),C=vH.spawn(I,this._getSpawnArgs(B),this._getSpawnOptions(this.options,I)),g="";if(C.stdout)C.stdout.on("data",(F)=>{if(this.options.listeners&&this.options.listeners.stdout)this.options.listeners.stdout(F);if(!B.silent&&B.outStream)B.outStream.write(F);g=this._processLineBuffer(F,g,(J)=>{if(this.options.listeners&&this.options.listeners.stdline)this.options.listeners.stdline(J)})});let D="";if(C.stderr)C.stderr.on("data",(F)=>{if(E.processStderr=!0,this.options.listeners&&this.options.listeners.stderr)this.options.listeners.stderr(F);if(!B.silent&&B.errStream&&B.outStream)(B.failOnStdErr?B.errStream:B.outStream).write(F);D=this._processLineBuffer(F,D,(J)=>{if(this.options.listeners&&this.options.listeners.errline)this.options.listeners.errline(J)})});if(C.on("error",(F)=>{E.processError=F.message,E.processExited=!0,E.processClosed=!0,E.CheckComplete()}),C.on("exit",(F)=>{E.processExitCode=F,E.processExited=!0,this._debug(`Exit code ${F} received from tool '${this.toolPath}'`),E.CheckComplete()}),C.on("close",(F)=>{E.processExitCode=F,E.processExited=!0,E.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),E.CheckComplete()}),E.on("done",(F,J)=>{if(g.length>0)this.emit("stdline",g);if(D.length>0)this.emit("errline",D);if(C.removeAllListeners(),F)Q(F);else A(J)}),this.options.input){if(!C.stdin)throw new Error("child process missing stdin");C.stdin.end(this.options.input)}}))})}}JQ.ToolRunner=CL;function cH(A){let Q=[],B=!1,E=!1,I="";function C(g){if(E&&g!=='"')I+="\\";I+=g,E=!1}for(let g=0;g0)Q.push(I),I="";continue}C(D)}if(I.length>0)Q.push(I.trim());return Q}JQ.argStringToArray=cH;class oF extends IL.EventEmitter{constructor(A,Q){super();if(this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!Q)throw new Error("toolPath must not be empty");if(this.options=A,this.toolPath=Q,A.delay)this.delay=A.delay}CheckComplete(){if(this.done)return;if(this.processClosed)this._setResult();else if(this.processExited)this.timeout=mH.setTimeout(oF.HandleTimeout,this.delay,this)}_debug(A){this.emit("debug",A)}_setResult(){let A;if(this.processExited){if(this.processError)A=new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);else if(this.processExitCode!==0&&!this.options.ignoreReturnCode)A=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);else if(this.processStderr&&this.options.failOnStdErr)A=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`)}if(this.timeout)clearTimeout(this.timeout),this.timeout=null;this.done=!0,this.emit("done",A,this.processExitCode)}static HandleTimeout(A){if(A.done)return;if(!A.processClosed&&A.processExited){let Q=`The STDIO streams did not close within ${A.delay/1000} seconds of the exit event from process '${A.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;A._debug(Q)}A._setResult()}}});var NL=h((NQ)=>{var uH=NQ&&NQ.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;Object.defineProperty(A,E,{enumerable:!0,get:function(){return Q[B]}})}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),dH=NQ&&NQ.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),iH=NQ&&NQ.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.hasOwnProperty.call(A,B))uH(Q,A,B)}return dH(Q,A),Q},YL=NQ&&NQ.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(NQ,"__esModule",{value:!0});NQ.getExecOutput=NQ.exec=void 0;var DL=M("string_decoder"),FL=iH(gL());function JL(A,Q,B){return YL(this,void 0,void 0,function*(){let E=FL.argStringToArray(A);if(E.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let I=E[0];return Q=E.slice(1).concat(Q||[]),new FL.ToolRunner(I,Q,B).exec()})}NQ.exec=JL;function lH(A,Q,B){var E,I;return YL(this,void 0,void 0,function*(){let C="",g="",D=new DL.StringDecoder("utf8"),F=new DL.StringDecoder("utf8"),J=(E=B===null||B===void 0?void 0:B.listeners)===null||E===void 0?void 0:E.stdout,Y=(I=B===null||B===void 0?void 0:B.listeners)===null||I===void 0?void 0:I.stderr,U=(V)=>{if(g+=F.write(V),Y)Y(V)},R=(V)=>{if(C+=D.write(V),J)J(V)},w=Object.assign(Object.assign({},B===null||B===void 0?void 0:B.listeners),{stdout:R,stderr:U}),W=yield JL(A,Q,Object.assign(Object.assign({},B),{listeners:w}));return C+=D.end(),g+=F.end(),{exitCode:W,stdout:C,stderr:g}})}NQ.getExecOutput=lH});var rF=h((s)=>{var pH=s&&s.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;var I=Object.getOwnPropertyDescriptor(Q,B);if(!I||("get"in I?!Q.__esModule:I.writable||I.configurable))I={enumerable:!0,get:function(){return Q[B]}};Object.defineProperty(A,E,I)}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),nH=s&&s.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),aH=s&&s.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.prototype.hasOwnProperty.call(A,B))pH(Q,A,B)}return nH(Q,A),Q},dg=s&&s.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})},sH=s&&s.__importDefault||function(A){return A&&A.__esModule?A:{default:A}};Object.defineProperty(s,"__esModule",{value:!0});s.getDetails=s.isLinux=s.isMacOS=s.isWindows=s.arch=s.platform=void 0;var UL=sH(M("os")),ug=aH(NL()),oH=()=>dg(void 0,void 0,void 0,function*(){let{stdout:A}=yield ug.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"',void 0,{silent:!0}),{stdout:Q}=yield ug.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"',void 0,{silent:!0});return{name:Q.trim(),version:A.trim()}}),rH=()=>dg(void 0,void 0,void 0,function*(){var A,Q,B,E;let{stdout:I}=yield ug.getExecOutput("sw_vers",void 0,{silent:!0}),C=(Q=(A=I.match(/ProductVersion:\s*(.+)/))===null||A===void 0?void 0:A[1])!==null&&Q!==void 0?Q:"";return{name:(E=(B=I.match(/ProductName:\s*(.+)/))===null||B===void 0?void 0:B[1])!==null&&E!==void 0?E:"",version:C}}),tH=()=>dg(void 0,void 0,void 0,function*(){let{stdout:A}=yield ug.getExecOutput("lsb_release",["-i","-r","-s"],{silent:!0}),[Q,B]=A.trim().split(` -`);return{name:Q,version:B}});s.platform=UL.default.platform();s.arch=UL.default.arch();s.isWindows=s.platform==="win32";s.isMacOS=s.platform==="darwin";s.isLinux=s.platform==="linux";function eH(){return dg(this,void 0,void 0,function*(){return Object.assign(Object.assign({},yield s.isWindows?oH():s.isMacOS?rH():tH()),{platform:s.platform,arch:s.arch,isWindows:s.isWindows,isMacOS:s.isMacOS,isLinux:s.isLinux})})}s.getDetails=eH});var VL=h((j)=>{var A3=j&&j.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;var I=Object.getOwnPropertyDescriptor(Q,B);if(!I||("get"in I?!Q.__esModule:I.writable||I.configurable))I={enumerable:!0,get:function(){return Q[B]}};Object.defineProperty(A,E,I)}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),Q3=j&&j.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),eF=j&&j.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.prototype.hasOwnProperty.call(A,B))A3(Q,A,B)}return Q3(Q,A),Q},GL=j&&j.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(j,"__esModule",{value:!0});j.platform=j.toPlatformPath=j.toWin32Path=j.toPosixPath=j.markdownSummary=j.summary=j.getIDToken=j.getState=j.saveState=j.group=j.endGroup=j.startGroup=j.info=j.notice=j.warning=j.error=j.debug=j.isDebug=j.setFailed=j.setCommandEcho=j.setOutput=j.getBooleanInput=j.getMultilineInput=j.getInput=j.addPath=j.setSecret=j.exportVariable=j.ExitCode=void 0;var _Q=tg(),DE=Q0(),EI=GI(),RL=eF(M("os")),B3=eF(M("path")),E3=BY(),tF;(function(A){A[A.Success=0]="Success",A[A.Failure=1]="Failure"})(tF||(j.ExitCode=tF={}));function I3(A,Q){let B=EI.toCommandValue(Q);if(process.env[A]=B,process.env.GITHUB_ENV||"")return DE.issueFileCommand("ENV",DE.prepareKeyValueMessage(A,Q));_Q.issueCommand("set-env",{name:A},B)}j.exportVariable=I3;function C3(A){_Q.issueCommand("add-mask",{},A)}j.setSecret=C3;function g3(A){if(process.env.GITHUB_PATH||"")DE.issueFileCommand("PATH",A);else _Q.issueCommand("add-path",{},A);process.env.PATH=`${A}${B3.delimiter}${process.env.PATH}`}j.addPath=g3;function AY(A,Q){let B=process.env[`INPUT_${A.replace(/ /g,"_").toUpperCase()}`]||"";if(Q&&Q.required&&!B)throw new Error(`Input required and not supplied: ${A}`);if(Q&&Q.trimWhitespace===!1)return B;return B.trim()}j.getInput=AY;function D3(A,Q){let B=AY(A,Q).split(` -`).filter((E)=>E!=="");if(Q&&Q.trimWhitespace===!1)return B;return B.map((E)=>E.trim())}j.getMultilineInput=D3;function F3(A,Q){let B=["true","True","TRUE"],E=["false","False","FALSE"],I=AY(A,Q);if(B.includes(I))return!0;if(E.includes(I))return!1;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${A} -Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}j.getBooleanInput=F3;function Y3(A,Q){if(process.env.GITHUB_OUTPUT||"")return DE.issueFileCommand("OUTPUT",DE.prepareKeyValueMessage(A,Q));process.stdout.write(RL.EOL),_Q.issueCommand("set-output",{name:A},EI.toCommandValue(Q))}j.setOutput=Y3;function J3(A){_Q.issue("echo",A?"on":"off")}j.setCommandEcho=J3;function N3(A){process.exitCode=tF.Failure,wL(A)}j.setFailed=N3;function U3(){return process.env.RUNNER_DEBUG==="1"}j.isDebug=U3;function G3(A){_Q.issueCommand("debug",{},A)}j.debug=G3;function wL(A,Q={}){_Q.issueCommand("error",EI.toCommandProperties(Q),A instanceof Error?A.toString():A)}j.error=wL;function R3(A,Q={}){_Q.issueCommand("warning",EI.toCommandProperties(Q),A instanceof Error?A.toString():A)}j.warning=R3;function w3(A,Q={}){_Q.issueCommand("notice",EI.toCommandProperties(Q),A instanceof Error?A.toString():A)}j.notice=w3;function M3(A){process.stdout.write(A+RL.EOL)}j.info=M3;function ML(A){_Q.issue("group",A)}j.startGroup=ML;function LL(){_Q.issue("endgroup")}j.endGroup=LL;function L3(A,Q){return GL(this,void 0,void 0,function*(){ML(A);let B;try{B=yield Q()}finally{LL()}return B})}j.group=L3;function V3(A,Q){if(process.env.GITHUB_STATE||"")return DE.issueFileCommand("STATE",DE.prepareKeyValueMessage(A,Q));_Q.issueCommand("save-state",{name:A},EI.toCommandValue(Q))}j.saveState=V3;function W3(A){return process.env[`STATE_${A}`]||""}j.getState=W3;function Z3(A){return GL(this,void 0,void 0,function*(){return yield E3.OidcClient.getIDToken(A)})}j.getIDToken=Z3;var X3=BC();Object.defineProperty(j,"summary",{enumerable:!0,get:function(){return X3.summary}});var h3=BC();Object.defineProperty(j,"markdownSummary",{enumerable:!0,get:function(){return h3.markdownSummary}});var QY=pF();Object.defineProperty(j,"toPosixPath",{enumerable:!0,get:function(){return QY.toPosixPath}});Object.defineProperty(j,"toWin32Path",{enumerable:!0,get:function(){return QY.toWin32Path}});Object.defineProperty(j,"toPlatformPath",{enumerable:!0,get:function(){return QY.toPlatformPath}});j.platform=eF(rF())});var BY=h((CI)=>{var WL=CI&&CI.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(CI,"__esModule",{value:!0});CI.OidcClient=void 0;var S3=bM(),K3=dM(),ZL=VL();class II{static createHttpClient(A=!0,Q=10){let B={allowRetries:A,maxRetries:Q};return new S3.HttpClient("actions/oidc-client",[new K3.BearerCredentialHandler(II.getRequestToken())],B)}static getRequestToken(){let A=process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!A)throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable");return A}static getIDTokenUrl(){let A=process.env.ACTIONS_ID_TOKEN_REQUEST_URL;if(!A)throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable");return A}static getCall(A){var Q;return WL(this,void 0,void 0,function*(){let I=(Q=(yield II.createHttpClient().getJson(A).catch((C)=>{throw new Error(`Failed to get ID Token. - - Error Code : ${C.statusCode} - - Error Message: ${C.message}`)})).result)===null||Q===void 0?void 0:Q.value;if(!I)throw new Error("Response json body do not have ID Token field");return I})}static getIDToken(A){return WL(this,void 0,void 0,function*(){try{let Q=II.getIDTokenUrl();if(A){let E=encodeURIComponent(A);Q=`${Q}&audience=${E}`}ZL.debug(`ID token url is ${Q}`);let B=yield II.getCall(Q);return ZL.setSecret(B),B}catch(Q){throw new Error(`Error message: ${Q.message}`)}})}}CI.OidcClient=II});var HL=h((y)=>{var z3=y&&y.__createBinding||(Object.create?function(A,Q,B,E){if(E===void 0)E=B;var I=Object.getOwnPropertyDescriptor(Q,B);if(!I||("get"in I?!Q.__esModule:I.writable||I.configurable))I={enumerable:!0,get:function(){return Q[B]}};Object.defineProperty(A,E,I)}:function(A,Q,B,E){if(E===void 0)E=B;A[E]=Q[B]}),H3=y&&y.__setModuleDefault||(Object.create?function(A,Q){Object.defineProperty(A,"default",{enumerable:!0,value:Q})}:function(A,Q){A.default=Q}),IY=y&&y.__importStar||function(A){if(A&&A.__esModule)return A;var Q={};if(A!=null){for(var B in A)if(B!=="default"&&Object.prototype.hasOwnProperty.call(A,B))z3(Q,A,B)}return H3(Q,A),Q},XL=y&&y.__awaiter||function(A,Q,B,E){function I(C){return C instanceof B?C:new B(function(g){g(C)})}return new(B||(B=Promise))(function(C,g){function D(Y){try{J(E.next(Y))}catch(U){g(U)}}function F(Y){try{J(E.throw(Y))}catch(U){g(U)}}function J(Y){Y.done?C(Y.value):I(Y.value).then(D,F)}J((E=E.apply(A,Q||[])).next())})};Object.defineProperty(y,"__esModule",{value:!0});y.platform=y.toPlatformPath=y.toWin32Path=y.toPosixPath=y.markdownSummary=y.summary=y.getIDToken=y.getState=y.saveState=y.group=y.endGroup=y.startGroup=y.info=y.notice=y.warning=y.error=y.debug=y.isDebug=y.setFailed=y.setCommandEcho=y.setOutput=y.getBooleanInput=y.getMultilineInput=y.getInput=y.addPath=y.setSecret=y.exportVariable=y.ExitCode=void 0;var OQ=tg(),FE=Q0(),gI=GI(),hL=IY(M("os")),x3=IY(M("path")),$3=BY(),EY;(function(A){A[A.Success=0]="Success",A[A.Failure=1]="Failure"})(EY||(y.ExitCode=EY={}));function T3(A,Q){let B=gI.toCommandValue(Q);if(process.env[A]=B,process.env.GITHUB_ENV||"")return FE.issueFileCommand("ENV",FE.prepareKeyValueMessage(A,Q));OQ.issueCommand("set-env",{name:A},B)}y.exportVariable=T3;function j3(A){OQ.issueCommand("add-mask",{},A)}y.setSecret=j3;function y3(A){if(process.env.GITHUB_PATH||"")FE.issueFileCommand("PATH",A);else OQ.issueCommand("add-path",{},A);process.env.PATH=`${A}${x3.delimiter}${process.env.PATH}`}y.addPath=y3;function CY(A,Q){let B=process.env[`INPUT_${A.replace(/ /g,"_").toUpperCase()}`]||"";if(Q&&Q.required&&!B)throw new Error(`Input required and not supplied: ${A}`);if(Q&&Q.trimWhitespace===!1)return B;return B.trim()}y.getInput=CY;function _3(A,Q){let B=CY(A,Q).split(` -`).filter((E)=>E!=="");if(Q&&Q.trimWhitespace===!1)return B;return B.map((E)=>E.trim())}y.getMultilineInput=_3;function O3(A,Q){let B=["true","True","TRUE"],E=["false","False","FALSE"],I=CY(A,Q);if(B.includes(I))return!0;if(E.includes(I))return!1;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${A} -Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}y.getBooleanInput=O3;function q3(A,Q){if(process.env.GITHUB_OUTPUT||"")return FE.issueFileCommand("OUTPUT",FE.prepareKeyValueMessage(A,Q));process.stdout.write(hL.EOL),OQ.issueCommand("set-output",{name:A},gI.toCommandValue(Q))}y.setOutput=q3;function P3(A){OQ.issue("echo",A?"on":"off")}y.setCommandEcho=P3;function f3(A){process.exitCode=EY.Failure,SL(A)}y.setFailed=f3;function v3(){return process.env.RUNNER_DEBUG==="1"}y.isDebug=v3;function k3(A){OQ.issueCommand("debug",{},A)}y.debug=k3;function SL(A,Q={}){OQ.issueCommand("error",gI.toCommandProperties(Q),A instanceof Error?A.toString():A)}y.error=SL;function b3(A,Q={}){OQ.issueCommand("warning",gI.toCommandProperties(Q),A instanceof Error?A.toString():A)}y.warning=b3;function m3(A,Q={}){OQ.issueCommand("notice",gI.toCommandProperties(Q),A instanceof Error?A.toString():A)}y.notice=m3;function c3(A){process.stdout.write(A+hL.EOL)}y.info=c3;function KL(A){OQ.issue("group",A)}y.startGroup=KL;function zL(){OQ.issue("endgroup")}y.endGroup=zL;function u3(A,Q){return XL(this,void 0,void 0,function*(){KL(A);let B;try{B=yield Q()}finally{zL()}return B})}y.group=u3;function d3(A,Q){if(process.env.GITHUB_STATE||"")return FE.issueFileCommand("STATE",FE.prepareKeyValueMessage(A,Q));OQ.issueCommand("save-state",{name:A},gI.toCommandValue(Q))}y.saveState=d3;function i3(A){return process.env[`STATE_${A}`]||""}y.getState=i3;function l3(A){return XL(this,void 0,void 0,function*(){return yield $3.OidcClient.getIDToken(A)})}y.getIDToken=l3;var p3=BC();Object.defineProperty(y,"summary",{enumerable:!0,get:function(){return p3.summary}});var n3=BC();Object.defineProperty(y,"markdownSummary",{enumerable:!0,get:function(){return n3.markdownSummary}});var gY=pF();Object.defineProperty(y,"toPosixPath",{enumerable:!0,get:function(){return gY.toPosixPath}});Object.defineProperty(y,"toWin32Path",{enumerable:!0,get:function(){return gY.toWin32Path}});Object.defineProperty(y,"toPlatformPath",{enumerable:!0,get:function(){return gY.toPlatformPath}});y.platform=IY(rF())});function vB(){if(typeof navigator==="object"&&"userAgent"in navigator)return navigator.userAgent;if(typeof process==="object"&&process.version!==void 0)return`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;return""}function ig(A,Q,B,E){if(typeof B!=="function")throw new Error("method for before hook must be a function");if(!E)E={};if(Array.isArray(Q))return Q.reverse().reduce((I,C)=>{return ig.bind(null,A,C,I,E)},B)();return Promise.resolve().then(()=>{if(!A.registry[Q])return B(E);return A.registry[Q].reduce((I,C)=>{return C.hook.bind(null,I,E)},B)()})}function TL(A,Q,B,E){let I=E;if(!A.registry[B])A.registry[B]=[];if(Q==="before")E=(C,g)=>{return Promise.resolve().then(I.bind(null,g)).then(C.bind(null,g))};if(Q==="after")E=(C,g)=>{let D;return Promise.resolve().then(C.bind(null,g)).then((F)=>{return D=F,I(D,g)}).then(()=>{return D})};if(Q==="error")E=(C,g)=>{return Promise.resolve().then(C.bind(null,g)).catch((D)=>{return I(D,g)})};A.registry[B].push({hook:E,orig:I})}function jL(A,Q,B){if(!A.registry[Q])return;let E=A.registry[Q].map((I)=>{return I.orig}).indexOf(B);if(E===-1)return;A.registry[Q].splice(E,1)}function OL(A,Q,B){let E=_L(jL,null).apply(null,B?[Q,B]:[Q]);A.api={remove:E},A.remove=E,["before","error","after","wrap"].forEach((I)=>{let C=B?[Q,I,B]:[Q,I];A[I]=A.api[I]=_L(TL,null).apply(null,C)})}function a3(){let A=Symbol("Singular"),Q={registry:{}},B=ig.bind(null,Q,A);return OL(B,Q,A),B}function s3(){let A={registry:{}},Q=ig.bind(null,A);return OL(Q,A),Q}var yL,_L,qL;var PL=IB(()=>{yL=Function.bind,_L=yL.bind(yL);qL={Singular:a3,Collection:s3}});function e3(A){if(!A)return{};return Object.keys(A).reduce((Q,B)=>{return Q[B.toLowerCase()]=A[B],Q},{})}function A6(A){if(typeof A!=="object"||A===null)return!1;if(Object.prototype.toString.call(A)!=="[object Object]")return!1;let Q=Object.getPrototypeOf(A);if(Q===null)return!0;let B=Object.prototype.hasOwnProperty.call(Q,"constructor")&&Q.constructor;return typeof B==="function"&&B instanceof B&&Function.prototype.call(B)===Function.prototype.call(A)}function kL(A,Q){let B=Object.assign({},A);return Object.keys(Q).forEach((E)=>{if(A6(Q[E]))if(!(E in A))Object.assign(B,{[E]:Q[E]});else B[E]=kL(A[E],Q[E]);else Object.assign(B,{[E]:Q[E]})}),B}function fL(A){for(let Q in A)if(A[Q]===void 0)delete A[Q];return A}function FY(A,Q,B){if(typeof Q==="string"){let[I,C]=Q.split(" ");B=Object.assign(C?{method:I,url:C}:{url:I},B)}else B=Object.assign({},Q);B.headers=e3(B.headers),fL(B),fL(B.headers);let E=kL(A||{},B);if(B.url==="/graphql"){if(A&&A.mediaType.previews?.length)E.mediaType.previews=A.mediaType.previews.filter((I)=>!E.mediaType.previews.includes(I)).concat(E.mediaType.previews);E.mediaType.previews=(E.mediaType.previews||[]).map((I)=>I.replace(/-preview/,""))}return E}function Q6(A,Q){let B=/\?/.test(A)?"&":"?",E=Object.keys(Q);if(E.length===0)return A;return A+B+E.map((I)=>{if(I==="q")return"q="+Q.q.split("+").map(encodeURIComponent).join("+");return`${I}=${encodeURIComponent(Q[I])}`}).join("&")}function E6(A){return A.replace(/(?:^\W+)|(?:(?B.concat(E),[])}function vL(A,Q){let B={__proto__:null};for(let E of Object.keys(A))if(Q.indexOf(E)===-1)B[E]=A[E];return B}function bL(A){return A.split(/(%[0-9A-Fa-f]{2})/g).map(function(Q){if(!/%[0-9A-Fa-f]/.test(Q))Q=encodeURI(Q).replace(/%5B/g,"[").replace(/%5D/g,"]");return Q}).join("")}function FI(A){return encodeURIComponent(A).replace(/[!'()*]/g,function(Q){return"%"+Q.charCodeAt(0).toString(16).toUpperCase()})}function EC(A,Q,B){if(Q=A==="+"||A==="#"?bL(Q):FI(Q),B)return FI(B)+"="+Q;else return Q}function DI(A){return A!==void 0&&A!==null}function DY(A){return A===";"||A==="&"||A==="?"}function C6(A,Q,B,E){var I=A[B],C=[];if(DI(I)&&I!=="")if(typeof I==="string"||typeof I==="number"||typeof I==="boolean"){if(I=I.toString(),E&&E!=="*")I=I.substring(0,parseInt(E,10));C.push(EC(Q,I,DY(Q)?B:""))}else if(E==="*")if(Array.isArray(I))I.filter(DI).forEach(function(g){C.push(EC(Q,g,DY(Q)?B:""))});else Object.keys(I).forEach(function(g){if(DI(I[g]))C.push(EC(Q,I[g],g))});else{let g=[];if(Array.isArray(I))I.filter(DI).forEach(function(D){g.push(EC(Q,D))});else Object.keys(I).forEach(function(D){if(DI(I[D]))g.push(FI(D)),g.push(EC(Q,I[D].toString()))});if(DY(Q))C.push(FI(B)+"="+g.join(","));else if(g.length!==0)C.push(g.join(","))}else if(Q===";"){if(DI(I))C.push(FI(B))}else if(I===""&&(Q==="&"||Q==="?"))C.push(FI(B)+"=");else if(I==="")C.push("");return C}function g6(A){return{expand:D6.bind(null,A)}}function D6(A,Q){var B=["+","#",".","/",";","?","&"];if(A=A.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(E,I,C){if(I){let D="",F=[];if(B.indexOf(I.charAt(0))!==-1)D=I.charAt(0),I=I.substr(1);if(I.split(/,/g).forEach(function(J){var Y=/([^:\*]*)(?::(\d+)|(\*))?/.exec(J);F.push(C6(Q,D,Y[1],Y[2]||Y[3]))}),D&&D!=="+"){var g=",";if(D==="?")g="&";else if(D!=="#")g=D;return(F.length!==0?D:"")+F.join(g)}else return F.join(",")}else return bL(C)}),A==="/")return A;else return A.replace(/\/$/,"")}function mL(A){let Q=A.method.toUpperCase(),B=(A.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),E=Object.assign({},A.headers),I,C=vL(A,["method","baseUrl","url","headers","request","mediaType"]),g=I6(B);if(B=g6(B).expand(C),!/^http/.test(B))B=A.baseUrl+B;let D=Object.keys(A).filter((Y)=>g.includes(Y)).concat("baseUrl"),F=vL(C,D);if(!/application\/octet-stream/i.test(E.accept)){if(A.mediaType.format)E.accept=E.accept.split(/,/).map((Y)=>Y.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${A.mediaType.format}`)).join(",");if(B.endsWith("/graphql")){if(A.mediaType.previews?.length){let Y=E.accept.match(/(?{let R=A.mediaType.format?`.${A.mediaType.format}`:"+json";return`application/vnd.github.${U}-preview${R}`}).join(",")}}}if(["GET","HEAD"].includes(Q))B=Q6(B,F);else if("data"in F)I=F.data;else if(Object.keys(F).length)I=F;if(!E["content-type"]&&typeof I!=="undefined")E["content-type"]="application/json; charset=utf-8";if(["PATCH","PUT"].includes(Q)&&typeof I==="undefined")I="";return Object.assign({method:Q,url:B,headers:E},typeof I!=="undefined"?{body:I}:null,A.request?{request:A.request}:null)}function F6(A,Q,B){return mL(FY(A,Q,B))}function cL(A,Q){let B=FY(A,Q),E=F6.bind(null,B);return Object.assign(E,{DEFAULTS:B,defaults:cL.bind(null,B),merge:FY.bind(null,B),parse:mL})}var o3="0.0.0-development",r3,t3,B6,uL;var dL=IB(()=>{r3=`octokit-endpoint.js/${o3} ${vB()}`,t3={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":r3},mediaType:{format:""}};B6=/\{[^{}}]+\}/g;uL=cL(null,t3)});function J6(A){if(typeof A!=="string")return YI;let Q=A.indexOf(";"),B=Q!==-1?A.slice(0,Q).trim():A.trim();if(Y6.test(B)===!1)return YI;let E={type:B.toLowerCase(),parameters:new YY};if(Q===-1)return E;let I,C,g;iL.lastIndex=Q;while(C=iL.exec(A)){if(C.index!==Q)return YI;if(Q+=C[0].length,I=C[1].toLowerCase(),g=C[2],g[0]==='"')g=g.slice(1,g.length-1),lL.test(g)&&(g=g.replace(lL,"$1"));E.parameters[I]=g}if(Q!==A.length)return YI;return E}var YY=function A(){},iL,lL,Y6,YI,JY;var pL=IB(()=>{YY.prototype=Object.create(null);iL=/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu,lL=/\\([\v\u0020-\u00ff])/gu,Y6=/^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u,YI={type:"",parameters:new YY};Object.freeze(YI.parameters);Object.freeze(YI);JY=J6});var JI;var nL=IB(()=>{JI=class JI extends Error{name;status;request;response;constructor(A,Q,B){super(A);if(this.name="HttpError",this.status=Number.parseInt(Q),Number.isNaN(this.status))this.status=0;if("response"in B)this.response=B.response;let E=Object.assign({},B.request);if(B.request.headers.authorization)E.headers=Object.assign({},B.request.headers,{authorization:B.request.headers.authorization.replace(/(?[U,String(R)])),g;try{g=await Q(A.url,{method:A.method,body:I,redirect:A.request?.redirect,headers:C,signal:A.request?.signal,...A.body&&{duplex:"half"}})}catch(U){let R="Unknown Error";if(U instanceof Error){if(U.name==="AbortError")throw U.status=500,U;if(R=U.message,U.name==="TypeError"&&"cause"in U){if(U.cause instanceof Error)R=U.cause.message;else if(typeof U.cause==="string")R=U.cause}}let w=new JI(R,500,{request:A});throw w.cause=U,w}let{status:D,url:F}=g,J={};for(let[U,R]of g.headers)J[U]=R;let Y={url:F,status:D,headers:J,data:""};if("deprecation"in J){let U=J.link&&J.link.match(/<([^<>]+)>; rel="deprecation"/),R=U&&U.pop();B.warn(`[@octokit/request] "${A.method} ${A.url}" is deprecated. It is scheduled to be removed on ${J.sunset}${R?`. See ${R}`:""}`)}if(D===204||D===205)return Y;if(A.method==="HEAD"){if(D<400)return Y;throw new JI(g.statusText,D,{response:Y,request:A})}if(D===304)throw Y.data=await NY(g),new JI("Not modified",D,{response:Y,request:A});if(D>=400)throw Y.data=await NY(g),new JI(M6(Y.data),D,{response:Y,request:A});return Y.data=E?await NY(g):g.body,Y}async function NY(A){let Q=A.headers.get("content-type");if(!Q)return A.text().catch(()=>"");let B=JY(Q);if(w6(B)){let E="";try{return E=await A.text(),JSON.parse(E)}catch(I){return E}}else if(B.type.startsWith("text/")||B.parameters.charset?.toLowerCase()==="utf-8")return A.text().catch(()=>"");else return A.arrayBuffer().catch(()=>new ArrayBuffer(0))}function w6(A){return A.type==="application/json"||A.type==="application/scim+json"}function M6(A){if(typeof A==="string")return A;if(A instanceof ArrayBuffer)return"Unknown error";if("message"in A){let Q="documentation_url"in A?` - ${A.documentation_url}`:"";return Array.isArray(A.errors)?`${A.message}: ${A.errors.map((B)=>JSON.stringify(B)).join(", ")}${Q}`:`${A.message}${Q}`}return`Unknown error: ${JSON.stringify(A)}`}function UY(A,Q){let B=A.defaults(Q);return Object.assign(function(I,C){let g=B.merge(I,C);if(!g.request||!g.request.hook)return aL(B.parse(g));let D=(F,J)=>{return aL(B.parse(B.merge(F,J)))};return Object.assign(D,{endpoint:B,defaults:UY.bind(null,B)}),g.request.hook(D,g)},{endpoint:B,defaults:UY.bind(null,B)})}var U6="10.0.3",G6,IC;var GY=IB(()=>{dL();pL();nL();G6={headers:{"user-agent":`octokit-request.js/${U6} ${vB()}`}};IC=UY(uL,G6)});function V6(A){return`Request failed due to following response errors: -`+A.errors.map((Q)=>` - ${Q.message}`).join(` -`)}function h6(A,Q,B){if(B){if(typeof Q==="string"&&"query"in B)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let g in B){if(!X6.includes(g))continue;return Promise.reject(new Error(`[@octokit/graphql] "${g}" cannot be used as variable name`))}}let E=typeof Q==="string"?Object.assign({query:Q},B):Q,I=Object.keys(E).reduce((g,D)=>{if(Z6.includes(D))return g[D]=E[D],g;if(!g.variables)g.variables={};return g.variables[D]=E[D],g},{}),C=E.baseUrl||A.endpoint.DEFAULTS.baseUrl;if(sL.test(C))I.url=C.replace(sL,"/api/graphql");return A(I).then((g)=>{if(g.data.errors){let D={};for(let F of Object.keys(g.headers))D[F]=g.headers[F];throw new W6(I,D,g.data)}return g.data.data})}function RY(A,Q){let B=A.defaults(Q);return Object.assign((I,C)=>{return h6(B,I,C)},{defaults:RY.bind(null,B),endpoint:B.endpoint})}function oL(A){return RY(A,{method:"POST",url:"/graphql"})}var L6="0.0.0-development",W6,Z6,X6,sL,c$;var rL=IB(()=>{GY();W6=class extends Error{constructor(A,Q,B){super(V6(B));if(this.request=A,this.headers=Q,this.response=B,this.errors=B.errors,this.data=B.data,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},Z6=["method","baseUrl","url","headers","request","query","mediaType","operationName"],X6=["query","method","url"],sL=/\/api\/v3\/?$/;c$=RY(IC,{headers:{"user-agent":`octokit-graphql.js/${L6} ${vB()}`},method:"POST",url:"/graphql"})});async function K6(A){let Q=S6(A),B=A.startsWith("v1.")||A.startsWith("ghs_"),E=A.startsWith("ghu_");return{type:"token",token:A,tokenType:Q?"app":B?"installation":E?"user-to-server":"oauth"}}function z6(A){if(A.split(/\./).length===3)return`bearer ${A}`;return`token ${A}`}async function H6(A,Q,B,E){let I=Q.endpoint.merge(B,E);return I.headers.authorization=z6(A),Q(I)}var wY="(?:[a-zA-Z0-9_-]+)",tL="\\.",eL,S6,AV=function A(Q){if(!Q)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof Q!=="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return Q=Q.replace(/^(token|bearer) +/i,""),Object.assign(K6.bind(null,Q),{hook:H6.bind(null,Q)})};var QV=IB(()=>{eL=new RegExp(`^${wY}${tL}${wY}${tL}${wY}$`),S6=eL.test.bind(eL)});var MY="7.0.3";var BV=()=>{};var CV={};dV(CV,{Octokit:()=>lg});function T6(A={}){if(typeof A.debug!=="function")A.debug=EV;if(typeof A.info!=="function")A.info=EV;if(typeof A.warn!=="function")A.warn=x6;if(typeof A.error!=="function")A.error=$6;return A}var EV=()=>{},x6,$6,IV,lg;var LY=IB(()=>{PL();GY();rL();QV();BV();x6=console.warn.bind(console),$6=console.error.bind(console);IV=`octokit-core.js/${MY} ${vB()}`;lg=class lg{static VERSION=MY;static defaults(A){return class extends this{constructor(...B){let E=B[0]||{};if(typeof A==="function"){super(A(E));return}super(Object.assign({},A,E,E.userAgent&&A.userAgent?{userAgent:`${E.userAgent} ${A.userAgent}`}:null))}}}static plugins=[];static plugin(...A){let Q=this.plugins;return class extends this{static plugins=Q.concat(A.filter((E)=>!Q.includes(E)))}}constructor(A={}){let Q=new qL.Collection,B={baseUrl:IC.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},A.request,{hook:Q.bind(null,"request")}),mediaType:{previews:[],format:""}};if(B.headers["user-agent"]=A.userAgent?`${A.userAgent} ${IV}`:IV,A.baseUrl)B.baseUrl=A.baseUrl;if(A.previews)B.mediaType.previews=A.previews;if(A.timeZone)B.headers["time-zone"]=A.timeZone;if(this.request=IC.defaults(B),this.graphql=oL(this.request).defaults(B),this.log=T6(A.log),this.hook=Q,!A.authStrategy)if(!A.auth)this.auth=async()=>({type:"unauthenticated"});else{let I=AV(A.auth);Q.wrap("request",I.hook),this.auth=I}else{let{authStrategy:I,...C}=A,g=I(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:C},A.auth));Q.wrap("request",g.hook),this.auth=g}let E=this.constructor;for(let I=0;I{(function(A,Q){typeof KY==="object"&&typeof zY!=="undefined"?zY.exports=Q():typeof define==="function"&&define.amd?define(Q):A.Bottleneck=Q()})(KY,function(){var A=typeof globalThis!=="undefined"?globalThis:typeof window!=="undefined"?window:typeof global!=="undefined"?global:typeof self!=="undefined"?self:{};function Q(H){return H&&H.default||H}var B=function(H,N,G={}){var L,X,Z;for(L in N)Z=N[L],G[L]=(X=H[L])!=null?X:Z;return G},E=function(H,N,G={}){var L,X;for(L in H)if(X=H[L],N[L]!==void 0)G[L]=X;return G},I={load:B,overwrite:E},C;C=class H{constructor(N,G){this.incr=N,this.decr=G,this._first=null,this._last=null,this.length=0}push(N){var G;if(this.length++,typeof this.incr==="function")this.incr();if(G={value:N,prev:this._last,next:null},this._last!=null)this._last.next=G,this._last=G;else this._first=this._last=G;return}shift(){var N;if(this._first==null)return;else if(this.length--,typeof this.decr==="function")this.decr();if(N=this._first.value,(this._first=this._first.next)!=null)this._first.prev=null;else this._last=null;return N}first(){if(this._first!=null)return this._first.value}getArray(){var N,G,L;N=this._first,L=[];while(N!=null)L.push((G=N,N=N.next,G.value));return L}forEachShift(N){var G=this.shift();while(G!=null)N(G),G=this.shift();return}debug(){var N,G,L,X,Z;N=this._first,Z=[];while(N!=null)Z.push((G=N,N=N.next,{value:G.value,prev:(L=G.prev)!=null?L.value:void 0,next:(X=G.next)!=null?X.value:void 0}));return Z}};var g=C,D;D=class H{constructor(N){if(this.instance=N,this._events={},this.instance.on!=null||this.instance.once!=null||this.instance.removeAllListeners!=null)throw new Error("An Emitter already exists for this object");this.instance.on=(G,L)=>{return this._addListener(G,"many",L)},this.instance.once=(G,L)=>{return this._addListener(G,"once",L)},this.instance.removeAllListeners=(G=null)=>{if(G!=null)return delete this._events[G];else return this._events={}}}_addListener(N,G,L){var X;if((X=this._events)[N]==null)X[N]=[];return this._events[N].push({cb:L,status:G}),this.instance}listenerCount(N){if(this._events[N]!=null)return this._events[N].length;else return 0}async trigger(N,...G){var L,X;try{if(N!=="debug")this.trigger("debug",`Event triggered: ${N}`,G);if(this._events[N]==null)return;return this._events[N]=this._events[N].filter(function(Z){return Z.status!=="none"}),X=this._events[N].map(async(Z)=>{var $,c;if(Z.status==="none")return;if(Z.status==="once")Z.status="none";try{if(c=typeof Z.cb==="function"?Z.cb(...G):void 0,typeof(c!=null?c.then:void 0)==="function")return await c;else return c}catch(MA){return $=MA,this.trigger("error",$),null}}),(await Promise.all(X)).find(function(Z){return Z!=null})}catch(Z){return L=Z,this.trigger("error",L),null}}};var F=D,J,Y,U;J=g,Y=F,U=class H{constructor(N){var G;this.Events=new Y(this),this._length=0,this._lists=function(){var L,X,Z;Z=[];for(G=L=1,X=N;1<=X?L<=X:L>=X;G=1<=X?++L:--L)Z.push(new J(()=>{return this.incr()},()=>{return this.decr()}));return Z}.call(this)}incr(){if(this._length++===0)return this.Events.trigger("leftzero")}decr(){if(--this._length===0)return this.Events.trigger("zero")}push(N){return this._lists[N.options.priority].push(N)}queued(N){if(N!=null)return this._lists[N].length;else return this._length}shiftAll(N){return this._lists.forEach(function(G){return G.forEachShift(N)})}getFirst(N=this._lists){var G,L,X;for(G=0,L=N.length;G0)return X;return[]}shiftLastFrom(N){return this.getFirst(this._lists.slice(N).reverse()).shift()}};var R=U,w;w=class H extends Error{};var W=w,V,S,_,x,q;x=10,S=5,q=I,V=W,_=class H{constructor(N,G,L,X,Z,$,c,MA){if(this.task=N,this.args=G,this.rejectOnDrop=Z,this.Events=$,this._states=c,this.Promise=MA,this.options=q.load(L,X),this.options.priority=this._sanitizePriority(this.options.priority),this.options.id===X.id)this.options.id=`${this.options.id}-${this._randomIndex()}`;this.promise=new this.Promise((bA,mB)=>{this._resolve=bA,this._reject=mB}),this.retryCount=0}_sanitizePriority(N){var G=~~N!==N?S:N;if(G<0)return 0;else if(G>x-1)return x-1;else return G}_randomIndex(){return Math.random().toString(36).slice(2)}doDrop({error:N,message:G="This job has been dropped by Bottleneck"}={}){if(this._states.remove(this.options.id)){if(this.rejectOnDrop)this._reject(N!=null?N:new V(G));return this.Events.trigger("dropped",{args:this.args,options:this.options,task:this.task,promise:this.promise}),!0}else return!1}_assertStatus(N){var G=this._states.jobStatus(this.options.id);if(!(G===N||N==="DONE"&&G===null))throw new V(`Invalid job status ${G}, expected ${N}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`)}doReceive(){return this._states.start(this.options.id),this.Events.trigger("received",{args:this.args,options:this.options})}doQueue(N,G){return this._assertStatus("RECEIVED"),this._states.next(this.options.id),this.Events.trigger("queued",{args:this.args,options:this.options,reachedHWM:N,blocked:G})}doRun(){if(this.retryCount===0)this._assertStatus("QUEUED"),this._states.next(this.options.id);else this._assertStatus("EXECUTING");return this.Events.trigger("scheduled",{args:this.args,options:this.options})}async doExecute(N,G,L,X){var Z,$,c;if(this.retryCount===0)this._assertStatus("RUNNING"),this._states.next(this.options.id);else this._assertStatus("EXECUTING");$={args:this.args,options:this.options,retryCount:this.retryCount},this.Events.trigger("executing",$);try{if(c=await(N!=null?N.schedule(this.options,this.task,...this.args):this.task(...this.args)),G())return this.doDone($),await X(this.options,$),this._assertStatus("DONE"),this._resolve(c)}catch(MA){return Z=MA,this._onFailure(Z,$,G,L,X)}}doExpire(N,G,L){var X,Z;if(this._states.jobStatus(this.options.id==="RUNNING"))this._states.next(this.options.id);return this._assertStatus("EXECUTING"),Z={args:this.args,options:this.options,retryCount:this.retryCount},X=new V(`This job timed out after ${this.options.expiration} ms.`),this._onFailure(X,Z,N,G,L)}async _onFailure(N,G,L,X,Z){var $,c;if(L())if($=await this.Events.trigger("failed",N,G),$!=null)return c=~~$,this.Events.trigger("retry",`Retrying ${this.options.id} after ${c} ms`,G),this.retryCount++,X(c);else return this.doDone(G),await Z(this.options,G),this._assertStatus("DONE"),this._reject(N)}doDone(N){return this._assertStatus("EXECUTING"),this._states.next(this.options.id),this.Events.trigger("done",N)}};var z=_,XA,FA,RA;RA=I,XA=W,FA=class H{constructor(N,G,L){this.instance=N,this.storeOptions=G,this.clientId=this.instance._randomIndex(),RA.load(L,L,this),this._nextRequest=this._lastReservoirRefresh=this._lastReservoirIncrease=Date.now(),this._running=0,this._done=0,this._unblockTime=0,this.ready=this.Promise.resolve(),this.clients={},this._startHeartbeat()}_startHeartbeat(){var N;if(this.heartbeat==null&&(this.storeOptions.reservoirRefreshInterval!=null&&this.storeOptions.reservoirRefreshAmount!=null||this.storeOptions.reservoirIncreaseInterval!=null&&this.storeOptions.reservoirIncreaseAmount!=null))return typeof(N=this.heartbeat=setInterval(()=>{var G,L,X,Z,$;if(Z=Date.now(),this.storeOptions.reservoirRefreshInterval!=null&&Z>=this._lastReservoirRefresh+this.storeOptions.reservoirRefreshInterval)this._lastReservoirRefresh=Z,this.storeOptions.reservoir=this.storeOptions.reservoirRefreshAmount,this.instance._drainAll(this.computeCapacity());if(this.storeOptions.reservoirIncreaseInterval!=null&&Z>=this._lastReservoirIncrease+this.storeOptions.reservoirIncreaseInterval){if({reservoirIncreaseAmount:G,reservoirIncreaseMaximum:X,reservoir:$}=this.storeOptions,this._lastReservoirIncrease=Z,L=X!=null?Math.min(G,X-$):G,L>0)return this.storeOptions.reservoir+=L,this.instance._drainAll(this.computeCapacity())}},this.heartbeatInterval)).unref==="function"?N.unref():void 0;else return clearInterval(this.heartbeat)}async __publish__(N){return await this.yieldLoop(),this.instance.Events.trigger("message",N.toString())}async __disconnect__(N){return await this.yieldLoop(),clearInterval(this.heartbeat),this.Promise.resolve()}yieldLoop(N=0){return new this.Promise(function(G,L){return setTimeout(G,N)})}computePenalty(){var N;return(N=this.storeOptions.penalty)!=null?N:15*this.storeOptions.minTime||5000}async __updateSettings__(N){return await this.yieldLoop(),RA.overwrite(N,N,this.storeOptions),this._startHeartbeat(),this.instance._drainAll(this.computeCapacity()),!0}async __running__(){return await this.yieldLoop(),this._running}async __queued__(){return await this.yieldLoop(),this.instance.queued()}async __done__(){return await this.yieldLoop(),this._done}async __groupCheck__(N){return await this.yieldLoop(),this._nextRequest+this.timeout=N}check(N,G){return this.conditionsCheck(N)&&this._nextRequest-G<=0}async __check__(N){var G;return await this.yieldLoop(),G=Date.now(),this.check(N,G)}async __register__(N,G,L){var X,Z;if(await this.yieldLoop(),X=Date.now(),this.conditionsCheck(G)){if(this._running+=G,this.storeOptions.reservoir!=null)this.storeOptions.reservoir-=G;return Z=Math.max(this._nextRequest-X,0),this._nextRequest=X+Z+this.storeOptions.minTime,{success:!0,wait:Z,reservoir:this.storeOptions.reservoir}}else return{success:!1}}strategyIsBlock(){return this.storeOptions.strategy===3}async __submit__(N,G){var L,X,Z;if(await this.yieldLoop(),this.storeOptions.maxConcurrent!=null&&G>this.storeOptions.maxConcurrent)throw new XA(`Impossible to add a job having a weight of ${G} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);if(X=Date.now(),Z=this.storeOptions.highWater!=null&&N===this.storeOptions.highWater&&!this.check(G,X),L=this.strategyIsBlock()&&(Z||this.isBlocked(X)),L)this._unblockTime=X+this.computePenalty(),this._nextRequest=this._unblockTime+this.storeOptions.minTime,this.instance._dropAllQueued();return{reachedHWM:Z,blocked:L,strategy:this.storeOptions.strategy}}async __free__(N,G){return await this.yieldLoop(),this._running-=G,this._done+=G,this.instance._drainAll(this.computeCapacity()),{running:this._running}}};var lA=FA,yA,fA;yA=W,fA=class H{constructor(N){this.status=N,this._jobs={},this.counts=this.status.map(function(){return 0})}next(N){var G,L;if(G=this._jobs[N],L=G+1,G!=null&&L{return N[this.status[L]]=G,N},{})}};var vA=fA,e,YA;e=g,YA=class H{constructor(N,G){this.schedule=this.schedule.bind(this),this.name=N,this.Promise=G,this._running=0,this._queue=new e}isEmpty(){return this._queue.length===0}async _tryToRun(){var N,G,L,X,Z,$,c;if(this._running<1&&this._queue.length>0)return this._running++,{task:c,args:N,resolve:Z,reject:X}=this._queue.shift(),G=await async function(){try{return $=await c(...N),function(){return Z($)}}catch(MA){return L=MA,function(){return X(L)}}}(),this._running--,this._tryToRun(),G()}schedule(N,...G){var L,X,Z;return Z=X=null,L=new this.Promise(function($,c){return Z=$,X=c}),this._queue.push({task:N,args:G,resolve:Z,reject:X}),this._tryToRun(),L}};var kA=YA,qQ="2.19.5",pA={version:qQ},UE=Object.freeze({version:qQ,default:pA}),kB=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),WB=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),bB=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),GE,RE,hA,UQ,hQ,wE;wE=I,GE=F,UQ=kB,hA=WB,hQ=bB,RE=function(){class H{constructor(N={}){if(this.deleteKey=this.deleteKey.bind(this),this.limiterOptions=N,wE.load(this.limiterOptions,this.defaults,this),this.Events=new GE(this),this.instances={},this.Bottleneck=dY,this._startAutoCleanup(),this.sharedConnection=this.connection!=null,this.connection==null){if(this.limiterOptions.datastore==="redis")this.connection=new UQ(Object.assign({},this.limiterOptions,{Events:this.Events}));else if(this.limiterOptions.datastore==="ioredis")this.connection=new hA(Object.assign({},this.limiterOptions,{Events:this.Events}))}}key(N=""){var G;return(G=this.instances[N])!=null?G:(()=>{var L=this.instances[N]=new this.Bottleneck(Object.assign(this.limiterOptions,{id:`${this.id}-${N}`,timeout:this.timeout,connection:this.connection}));return this.Events.trigger("created",L,N),L})()}async deleteKey(N=""){var G,L;if(L=this.instances[N],this.connection)G=await this.connection.__runCommand__(["del",...hQ.allKeys(`${this.id}-${N}`)]);if(L!=null)delete this.instances[N],await L.disconnect();return L!=null||G>0}limiters(){var N,G,L,X;G=this.instances,L=[];for(N in G)X=G[N],L.push({key:N,limiter:X});return L}keys(){return Object.keys(this.instances)}async clusterKeys(){var N,G,L,X,Z,$,c,MA,bA;if(this.connection==null)return this.Promise.resolve(this.keys());$=[],N=null,bA=`b_${this.id}-`.length,G=9;while(N!==0){[MA,L]=await this.connection.__runCommand__(["scan",N!=null?N:0,"match",`b_${this.id}-*_settings`,"count",1e4]),N=~~MA;for(X=0,c=L.length;X{var G,L,X,Z,$,c;$=Date.now(),X=this.instances,Z=[];for(L in X){c=X[L];try{if(await c._store.__groupCheck__($))Z.push(this.deleteKey(L));else Z.push(void 0)}catch(MA){G=MA,Z.push(c.Events.trigger("error",G))}}return Z},this.timeout/2)).unref==="function"?N.unref():void 0}updateSettings(N={}){if(wE.overwrite(N,this.defaults,this),wE.overwrite(N,N,this.limiterOptions),N.timeout!=null)return this._startAutoCleanup()}disconnect(N=!0){var G;if(!this.sharedConnection)return(G=this.connection)!=null?G.disconnect(N):void 0}}return H.prototype.defaults={timeout:300000,connection:null,Promise,id:"group-key"},H}.call(A);var OV=RE,OY,qY,PY;PY=I,qY=F,OY=function(){class H{constructor(N={}){this.options=N,PY.load(this.options,this.defaults,this),this.Events=new qY(this),this._arr=[],this._resetPromise(),this._lastFlush=Date.now()}_resetPromise(){return this._promise=new this.Promise((N,G)=>{return this._resolve=N})}_flush(){return clearTimeout(this._timeout),this._lastFlush=Date.now(),this._resolve(),this.Events.trigger("batch",this._arr),this._arr=[],this._resetPromise()}add(N){var G;if(this._arr.push(N),G=this._promise,this._arr.length===this.maxSize)this._flush();else if(this.maxTime!=null&&this._arr.length===1)this._timeout=setTimeout(()=>{return this._flush()},this.maxTime);return G}}return H.prototype.defaults={maxTime:null,maxSize:null,Promise},H}.call(A);var qV=OY,PV=()=>console.log("You must import the full version of Bottleneck in order to use this feature."),fV=Q(UE),fY,vY,ng,ag,kY,sg,bY,mY,cY,og,mQ,uY=[].splice;sg=10,vY=5,mQ=I,bY=R,ag=z,kY=lA,mY=PV,ng=F,cY=vA,og=kA,fY=function(){class H{constructor(N={},...G){var L,X;this._addToQueue=this._addToQueue.bind(this),this._validateOptions(N,G),mQ.load(N,this.instanceDefaults,this),this._queues=new bY(sg),this._scheduled={},this._states=new cY(["RECEIVED","QUEUED","RUNNING","EXECUTING"].concat(this.trackDoneStatus?["DONE"]:[])),this._limiter=null,this.Events=new ng(this),this._submitLock=new og("submit",this.Promise),this._registerLock=new og("register",this.Promise),X=mQ.load(N,this.storeDefaults,{}),this._store=function(){if(this.datastore==="redis"||this.datastore==="ioredis"||this.connection!=null)return L=mQ.load(N,this.redisStoreDefaults,{}),new mY(this,X,L);else if(this.datastore==="local")return L=mQ.load(N,this.localStoreDefaults,{}),new kY(this,X,L);else throw new H.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`)}.call(this),this._queues.on("leftzero",()=>{var Z;return(Z=this._store.heartbeat)!=null?typeof Z.ref==="function"?Z.ref():void 0:void 0}),this._queues.on("zero",()=>{var Z;return(Z=this._store.heartbeat)!=null?typeof Z.unref==="function"?Z.unref():void 0:void 0})}_validateOptions(N,G){if(!(N!=null&&typeof N==="object"&&G.length===0))throw new H.prototype.BottleneckError("Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.")}ready(){return this._store.ready}clients(){return this._store.clients}channel(){return`b_${this.id}`}channel_client(){return`b_${this.id}_${this._store.clientId}`}publish(N){return this._store.__publish__(N)}disconnect(N=!0){return this._store.__disconnect__(N)}chain(N){return this._limiter=N,this}queued(N){return this._queues.queued(N)}clusterQueued(){return this._store.__queued__()}empty(){return this.queued()===0&&this._submitLock.isEmpty()}running(){return this._store.__running__()}done(){return this._store.__done__()}jobStatus(N){return this._states.jobStatus(N)}jobs(N){return this._states.statusJobs(N)}counts(){return this._states.statusCounts()}_randomIndex(){return Math.random().toString(36).slice(2)}check(N=1){return this._store.__check__(N)}_clearGlobalState(N){if(this._scheduled[N]!=null)return clearTimeout(this._scheduled[N].expiration),delete this._scheduled[N],!0;else return!1}async _free(N,G,L,X){var Z,$;try{if({running:$}=await this._store.__free__(N,L.weight),this.Events.trigger("debug",`Freed ${L.id}`,X),$===0&&this.empty())return this.Events.trigger("idle")}catch(c){return Z=c,this.Events.trigger("error",Z)}}_run(N,G,L){var X,Z,$;return G.doRun(),X=this._clearGlobalState.bind(this,N),$=this._run.bind(this,N,G),Z=this._free.bind(this,N,G),this._scheduled[N]={timeout:setTimeout(()=>{return G.doExecute(this._limiter,X,$,Z)},L),expiration:G.options.expiration!=null?setTimeout(function(){return G.doExpire(X,$,Z)},L+G.options.expiration):void 0,job:G}}_drainOne(N){return this._registerLock.schedule(()=>{var G,L,X,Z,$;if(this.queued()===0)return this.Promise.resolve(null);if($=this._queues.getFirst(),{options:Z,args:G}=X=$.first(),N!=null&&Z.weight>N)return this.Promise.resolve(null);return this.Events.trigger("debug",`Draining ${Z.id}`,{args:G,options:Z}),L=this._randomIndex(),this._store.__register__(L,Z.weight,Z.expiration).then(({success:c,wait:MA,reservoir:bA})=>{var mB;if(this.Events.trigger("debug",`Drained ${Z.id}`,{success:c,args:G,options:Z}),c){if($.shift(),mB=this.empty(),mB)this.Events.trigger("empty");if(bA===0)this.Events.trigger("depleted",mB);return this._run(L,X,MA),this.Promise.resolve(Z.weight)}else return this.Promise.resolve(null)})})}_drainAll(N,G=0){return this._drainOne(N).then((L)=>{var X;if(L!=null)return X=N!=null?N-L:N,this._drainAll(X,G+L);else return this.Promise.resolve(G)}).catch((L)=>{return this.Events.trigger("error",L)})}_dropAllQueued(N){return this._queues.shiftAll(function(G){return G.doDrop({message:N})})}stop(N={}){var G,L;return N=mQ.load(N,this.stopDefaults),L=(X)=>{var Z=()=>{var $=this._states.counts;return $[0]+$[1]+$[2]+$[3]===X};return new this.Promise(($,c)=>{if(Z())return $();else return this.on("done",()=>{if(Z())return this.removeAllListeners("done"),$()})})},G=N.dropWaitingJobs?(this._run=function(X,Z){return Z.doDrop({message:N.dropErrorMessage})},this._drainOne=()=>{return this.Promise.resolve(null)},this._registerLock.schedule(()=>{return this._submitLock.schedule(()=>{var X,Z,$;Z=this._scheduled;for(X in Z)if($=Z[X],this.jobStatus($.job.options.id)==="RUNNING")clearTimeout($.timeout),clearTimeout($.expiration),$.job.doDrop({message:N.dropErrorMessage});return this._dropAllQueued(N.dropErrorMessage),L(0)})})):this.schedule({priority:sg-1,weight:0},()=>{return L(1)}),this._receive=function(X){return X._reject(new H.prototype.BottleneckError(N.enqueueErrorMessage))},this.stop=()=>{return this.Promise.reject(new H.prototype.BottleneckError("stop() has already been called"))},G}async _addToQueue(N){var G,L,X,Z,$,c,MA;({args:G,options:Z}=N);try{({reachedHWM:$,blocked:L,strategy:MA}=await this._store.__submit__(this.queued(),Z.weight))}catch(bA){return X=bA,this.Events.trigger("debug",`Could not queue ${Z.id}`,{args:G,options:Z,error:X}),N.doDrop({error:X}),!1}if(L)return N.doDrop(),!0;else if($){if(c=MA===H.prototype.strategy.LEAK?this._queues.shiftLastFrom(Z.priority):MA===H.prototype.strategy.OVERFLOW_PRIORITY?this._queues.shiftLastFrom(Z.priority+1):MA===H.prototype.strategy.OVERFLOW?N:void 0,c!=null)c.doDrop();if(c==null||MA===H.prototype.strategy.OVERFLOW){if(c==null)N.doDrop();return $}}return N.doQueue($,L),this._queues.push(N),await this._drainAll(),$}_receive(N){if(this._states.jobStatus(N.options.id)!=null)return N._reject(new H.prototype.BottleneckError(`A job with the same id already exists (id=${N.options.id})`)),!1;else return N.doReceive(),this._submitLock.schedule(this._addToQueue,N)}submit(...N){var G,L,X,Z,$,c,MA;if(typeof N[0]==="function")$=N,[L,...N]=$,[G]=uY.call(N,-1),Z=mQ.load({},this.jobDefaults);else c=N,[Z,L,...N]=c,[G]=uY.call(N,-1),Z=mQ.load(Z,this.jobDefaults);return MA=(...bA)=>{return new this.Promise(function(mB,kV){return L(...bA,function(...iY){return(iY[0]!=null?kV:mB)(iY)})})},X=new ag(MA,N,Z,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),X.promise.then(function(bA){return typeof G==="function"?G(...bA):void 0}).catch(function(bA){if(Array.isArray(bA))return typeof G==="function"?G(...bA):void 0;else return typeof G==="function"?G(bA):void 0}),this._receive(X)}schedule(...N){var G,L,X;if(typeof N[0]==="function")[X,...N]=N,L={};else[L,X,...N]=N;return G=new ag(X,N,L,this.jobDefaults,this.rejectOnDrop,this.Events,this._states,this.Promise),this._receive(G),G.promise}wrap(N){var G,L;return G=this.schedule.bind(this),L=function(...X){return G(N.bind(this),...X)},L.withOptions=function(X,...Z){return G(X,N,...Z)},L}async updateSettings(N={}){return await this._store.__updateSettings__(mQ.overwrite(N,this.storeDefaults)),mQ.overwrite(N,this.instanceDefaults,this),this}currentReservoir(){return this._store.__currentReservoir__()}incrementReservoir(N=0){return this._store.__incrementReservoir__(N)}}return H.default=H,H.Events=ng,H.version=H.prototype.version=fV.version,H.strategy=H.prototype.strategy={LEAK:1,OVERFLOW:2,OVERFLOW_PRIORITY:4,BLOCK:3},H.BottleneckError=H.prototype.BottleneckError=W,H.Group=H.prototype.Group=OV,H.RedisConnection=H.prototype.RedisConnection=kB,H.IORedisConnection=H.prototype.IORedisConnection=WB,H.Batcher=H.prototype.Batcher=qV,H.prototype.jobDefaults={priority:vY,weight:1,expiration:null,id:""},H.prototype.storeDefaults={maxConcurrent:null,minTime:0,highWater:null,strategy:H.prototype.strategy.LEAK,penalty:null,reservoir:null,reservoirRefreshInterval:null,reservoirRefreshAmount:null,reservoirIncreaseInterval:null,reservoirIncreaseAmount:null,reservoirIncreaseMaximum:null},H.prototype.localStoreDefaults={Promise,timeout:null,heartbeatInterval:250},H.prototype.redisStoreDefaults={Promise,timeout:null,heartbeatInterval:5000,clientTimeout:1e4,Redis:null,clientOptions:{},clusterNodes:null,clearDatastore:!1,connection:null},H.prototype.instanceDefaults={datastore:"local",connection:null,id:"",rejectOnDrop:!0,trackDoneStatus:!1,Promise},H.prototype.stopDefaults={enqueueErrorMessage:"This limiter has been stopped and cannot accept new jobs.",dropWaitingJobs:!0,dropErrorMessage:"This limiter has been stopped."},H}.call(A);var dY=fY,vV=dY;return vV})});var WV=h((ST,VV)=>{var{create:b6,defineProperty:pg,getOwnPropertyDescriptor:m6,getOwnPropertyNames:c6,getPrototypeOf:u6}=Object,d6=Object.prototype.hasOwnProperty,i6=(A,Q)=>{for(var B in Q)pg(A,B,{get:Q[B],enumerable:!0})},wV=(A,Q,B,E)=>{if(Q&&typeof Q==="object"||typeof Q==="function"){for(let I of c6(Q))if(!d6.call(A,I)&&I!==B)pg(A,I,{get:()=>Q[I],enumerable:!(E=m6(Q,I))||E.enumerable})}return A},l6=(A,Q,B)=>(B=A!=null?b6(u6(A)):{},wV(Q||!A||!A.__esModule?pg(B,"default",{value:A,enumerable:!0}):B,A)),p6=(A)=>wV(pg({},"__esModule",{value:!0}),A),MV={};i6(MV,{throttling:()=>jY});VV.exports=p6(MV);var n6=l6(HY()),hT=(LY(),uV(CV)),a6="7.0.0",TY=()=>Promise.resolve();function s6(A,Q,B){return A.retryLimiter.schedule(o6,A,Q,B)}async function o6(A,Q,B){let E=B.method!=="GET"&&B.method!=="HEAD",{pathname:I}=new URL(B.url,"http://github.test"),C=B.method==="GET"&&I.startsWith("/search/"),g=I.startsWith("/graphql"),F=~~Q.retryCount>0?{priority:0,weight:0}:{};if(A.clustering)F.expiration=60000;if(E||g)await A.write.key(A.id).schedule(F,TY);if(E&&A.triggersNotification(I))await A.notifications.key(A.id).schedule(F,TY);if(C)await A.search.key(A.id).schedule(F,TY);let J=A.global.key(A.id).schedule(F,Q,B);if(g){let Y=await J;if(Y.data.errors!=null&&Y.data.errors.some((U)=>U.type==="RATE_LIMITED"))throw Object.assign(new Error("GraphQL Rate Limit Exceeded"),{response:Y,data:Y.data})}return J}var r6=["/orgs/{org}/invitations","/orgs/{org}/invitations/{invitation_id}","/orgs/{org}/teams/{team_slug}/discussions","/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments","/repos/{owner}/{repo}/collaborators/{username}","/repos/{owner}/{repo}/commits/{commit_sha}/comments","/repos/{owner}/{repo}/issues","/repos/{owner}/{repo}/issues/{issue_number}/comments","/repos/{owner}/{repo}/pulls","/repos/{owner}/{repo}/pulls/{pull_number}/comments","/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies","/repos/{owner}/{repo}/pulls/{pull_number}/merge","/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","/repos/{owner}/{repo}/pulls/{pull_number}/reviews","/repos/{owner}/{repo}/releases","/teams/{team_id}/discussions","/teams/{team_id}/discussions/{discussion_number}/comments"];function t6(A){let B=`^(?:${A.map((E)=>E.split("/").map((I)=>I.startsWith("{")?"(?:.+?)":I).join("/")).map((E)=>`(?:${E})`).join("|")})[^/]*$`;return new RegExp(B,"i")}var RV=t6(r6),LV=RV.test.bind(RV),NI={},e6=function(A,Q){NI.global=new A.Group({id:"octokit-global",maxConcurrent:10,...Q}),NI.search=new A.Group({id:"octokit-search",maxConcurrent:1,minTime:2000,...Q}),NI.write=new A.Group({id:"octokit-write",maxConcurrent:1,minTime:1000,...Q}),NI.notifications=new A.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3000,...Q})};function jY(A,Q){let{enabled:B=!0,Bottleneck:E=n6.default,id:I="no-id",timeout:C=120000,connection:g}=Q.throttle||{};if(!B)return{};let D={connection:g,timeout:C};if(NI.global==null)e6(E,D);let F=Object.assign({clustering:g!=null,triggersNotification:LV,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1000,retryLimiter:new E,id:I,...NI},Q.throttle);if(typeof F.onSecondaryRateLimit!=="function"||typeof F.onRateLimit!=="function")throw new Error(`octokit/plugin-throttling error: - You must pass the onSecondaryRateLimit and onRateLimit error handlers. - See https://octokit.github.io/rest.js/#throttling - - const octokit = new Octokit({ - throttle: { - onSecondaryRateLimit: (retryAfter, options) => {/* ... */}, - onRateLimit: (retryAfter, options) => {/* ... */} - } - }) - `);let J={},Y=new E.Events(J);return J.on("secondary-limit",F.onSecondaryRateLimit),J.on("rate-limit",F.onRateLimit),J.on("error",(U)=>A.log.warn("Error in throttling-plugin limit handler",U)),F.retryLimiter.on("failed",async function(U,R){let[w,W,V]=R.args,{pathname:S}=new URL(V.url,"http://github.test");if(!(S.startsWith("/graphql")&&U.status!==401||U.status===403))return;let x=~~W.retryCount;W.retryCount=x,V.request.retryCount=x;let{wantRetry:q,retryAfter:z=0}=await async function(){if(/\bsecondary rate\b/i.test(U.message)){let XA=Number(U.response.headers["retry-after"])||w.fallbackSecondaryRateRetryAfter;return{wantRetry:await Y.trigger("secondary-limit",XA,V,A,x),retryAfter:XA}}if(U.response.headers!=null&&U.response.headers["x-ratelimit-remaining"]==="0"){let XA=new Date(~~U.response.headers["x-ratelimit-reset"]*1000).getTime(),FA=Math.max(Math.ceil((XA-Date.now())/1000),0);return{wantRetry:await Y.trigger("rate-limit",FA,V,A,x),retryAfter:FA}}return{}}();if(q)return W.retryCount++,z*w.retryAfterBaseValue}),A.hook.wrap("request",s6.bind(null,F)),{}}jY.VERSION=a6;jY.triggersNotification=LV});var d=rg(HL(),1);import*as NE from"fs/promises";class xL{name="npm";baseUrl="https://registry.npmjs.org";async getDownloadStats(A,Q){try{let B=await this.getPackageInfo(A);return(await this.fetchDownloadStats(A,Q)).map((I)=>({...I,platform:"npm",registry:this.baseUrl,distTags:B.distTags,dependencies:B.versions[B.distTags?.latest]?.dependencies}))}catch(B){return console.error(`Error fetching NPM stats for ${A}:`,B),[]}}async getLatestVersion(A){try{return(await this.getPackageInfo(A)).distTags?.latest||null}catch(Q){return console.error(`Error fetching latest version for ${A}:`,Q),null}}async getPackageInfo(A){let Q=await fetch(`${this.baseUrl}/${A}`);if(!Q.ok)throw new Error(`Failed to fetch package info for ${A}`);return Q.json()}async fetchDownloadStats(A,Q){let B=new Date,E=[];for(let I=0;I<30;I++){let C=new Date(B);C.setDate(C.getDate()-I),E.push({platform:"npm",packageName:A,downloadCount:Math.floor(Math.random()*1000)+100,registry:this.baseUrl,metadata:{source:"npm-registry",simulated:!0}})}return E}}var $L=xL;LY();var gV="6.0.0";function VY(A){A.hook.wrap("request",(Q,B)=>{A.log.debug("request",B);let E=Date.now(),I=A.request.endpoint.parse(B),C=I.url.replace(B.baseUrl,"");return Q(B).then((g)=>{let D=g.headers["x-github-request-id"];return A.log.info(`${I.method} ${C} - ${g.status} with id ${D} in ${Date.now()-E}ms`),g}).catch((g)=>{let D=g.response?.headers["x-github-request-id"]||"UNKNOWN";throw A.log.error(`${I.method} ${C} - ${g.status} with id ${D} in ${Date.now()-E}ms`),g})})}VY.VERSION=gV;var j6="0.0.0-development";function y6(A){if(!A.data)return{...A,data:[]};if(!((("total_count"in A.data)||("total_commits"in A.data))&&!("url"in A.data)))return A;let B=A.data.incomplete_results,E=A.data.repository_selection,I=A.data.total_count,C=A.data.total_commits;delete A.data.incomplete_results,delete A.data.repository_selection,delete A.data.total_count,delete A.data.total_commits;let g=Object.keys(A.data)[0],D=A.data[g];if(A.data=D,typeof B!=="undefined")A.data.incomplete_results=B;if(typeof E!=="undefined")A.data.repository_selection=E;return A.data.total_count=I,A.data.total_commits=C,A}function WY(A,Q,B){let E=typeof Q==="function"?Q.endpoint(B):A.request.endpoint(Q,B),I=typeof Q==="function"?Q:A.request,C=E.method,g=E.headers,D=E.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!D)return{done:!0};try{let F=await I({method:C,url:D,headers:g}),J=y6(F);if(D=((J.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!D&&"total_commits"in J.data){let Y=new URL(J.url),U=Y.searchParams,R=parseInt(U.get("page")||"1",10),w=parseInt(U.get("per_page")||"250",10);if(R*w{if(I.done)return Q;let C=!1;function g(){C=!0}if(Q=Q.concat(E?E(I.value,g):I.value.data),C)return Q;return FV(A,Q,B,E)})}var ET=Object.assign(DV,{iterator:WY});function ZY(A){return{paginate:Object.assign(DV.bind(null,A),{iterator:WY.bind(null,A)})}}ZY.VERSION=j6;var XY="16.0.0";var _6={actions:{addCustomLabelsToSelfHostedRunnerForOrg:["POST /orgs/{org}/actions/runners/{runner_id}/labels"],addCustomLabelsToSelfHostedRunnerForRepo:["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],addRepoAccessToSelfHostedRunnerGroupInOrg:["PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],approveWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],cancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],createEnvironmentVariable:["POST /repos/{owner}/{repo}/environments/{environment_name}/variables"],createHostedRunnerForOrg:["POST /orgs/{org}/actions/hosted-runners"],createOrUpdateEnvironmentSecret:["PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],createOrgVariable:["POST /orgs/{org}/actions/variables"],createRegistrationTokenForOrg:["POST /orgs/{org}/actions/runners/registration-token"],createRegistrationTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/registration-token"],createRemoveTokenForOrg:["POST /orgs/{org}/actions/runners/remove-token"],createRemoveTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/remove-token"],createRepoVariable:["POST /repos/{owner}/{repo}/actions/variables"],createWorkflowDispatch:["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],deleteActionsCacheById:["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],deleteActionsCacheByKey:["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],deleteArtifact:["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],deleteEnvironmentSecret:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],deleteEnvironmentVariable:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],deleteHostedRunnerForOrg:["DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],deleteOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}"],deleteOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],deleteRepoVariable:["DELETE /repos/{owner}/{repo}/actions/variables/{name}"],deleteSelfHostedRunnerFromOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}"],deleteSelfHostedRunnerFromRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],deleteWorkflowRun:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],deleteWorkflowRunLogs:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],disableSelectedRepositoryGithubActionsOrganization:["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],disableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],downloadArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],downloadJobLogsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],downloadWorkflowRunAttemptLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"],downloadWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],enableSelectedRepositoryGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],enableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],forceCancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel"],generateRunnerJitconfigForOrg:["POST /orgs/{org}/actions/runners/generate-jitconfig"],generateRunnerJitconfigForRepo:["POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"],getActionsCacheList:["GET /repos/{owner}/{repo}/actions/caches"],getActionsCacheUsage:["GET /repos/{owner}/{repo}/actions/cache/usage"],getActionsCacheUsageByRepoForOrg:["GET /orgs/{org}/actions/cache/usage-by-repository"],getActionsCacheUsageForOrg:["GET /orgs/{org}/actions/cache/usage"],getAllowedActionsOrganization:["GET /orgs/{org}/actions/permissions/selected-actions"],getAllowedActionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],getArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],getCustomOidcSubClaimForRepo:["GET /repos/{owner}/{repo}/actions/oidc/customization/sub"],getEnvironmentPublicKey:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key"],getEnvironmentSecret:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],getEnvironmentVariable:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],getGithubActionsDefaultWorkflowPermissionsOrganization:["GET /orgs/{org}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/workflow"],getGithubActionsPermissionsOrganization:["GET /orgs/{org}/actions/permissions"],getGithubActionsPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions"],getHostedRunnerForOrg:["GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],getHostedRunnersGithubOwnedImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/github-owned"],getHostedRunnersLimitsForOrg:["GET /orgs/{org}/actions/hosted-runners/limits"],getHostedRunnersMachineSpecsForOrg:["GET /orgs/{org}/actions/hosted-runners/machine-sizes"],getHostedRunnersPartnerImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/partner"],getHostedRunnersPlatformsForOrg:["GET /orgs/{org}/actions/hosted-runners/platforms"],getJobForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],getOrgPublicKey:["GET /orgs/{org}/actions/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}"],getOrgVariable:["GET /orgs/{org}/actions/variables/{name}"],getPendingDeploymentsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],getRepoPermissions:["GET /repos/{owner}/{repo}/actions/permissions",{},{renamed:["actions","getGithubActionsPermissionsRepository"]}],getRepoPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],getRepoVariable:["GET /repos/{owner}/{repo}/actions/variables/{name}"],getReviewsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],getSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}"],getSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],getWorkflow:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],getWorkflowAccessToRepository:["GET /repos/{owner}/{repo}/actions/permissions/access"],getWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],getWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],getWorkflowRunUsage:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],getWorkflowUsage:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],listArtifactsForRepo:["GET /repos/{owner}/{repo}/actions/artifacts"],listEnvironmentSecrets:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets"],listEnvironmentVariables:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables"],listGithubHostedRunnersInGroupForOrg:["GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners"],listHostedRunnersForOrg:["GET /orgs/{org}/actions/hosted-runners"],listJobsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],listJobsForWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],listLabelsForSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}/labels"],listLabelsForSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],listOrgSecrets:["GET /orgs/{org}/actions/secrets"],listOrgVariables:["GET /orgs/{org}/actions/variables"],listRepoOrganizationSecrets:["GET /repos/{owner}/{repo}/actions/organization-secrets"],listRepoOrganizationVariables:["GET /repos/{owner}/{repo}/actions/organization-variables"],listRepoSecrets:["GET /repos/{owner}/{repo}/actions/secrets"],listRepoVariables:["GET /repos/{owner}/{repo}/actions/variables"],listRepoWorkflows:["GET /repos/{owner}/{repo}/actions/workflows"],listRunnerApplicationsForOrg:["GET /orgs/{org}/actions/runners/downloads"],listRunnerApplicationsForRepo:["GET /repos/{owner}/{repo}/actions/runners/downloads"],listSelectedReposForOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],listSelectedReposForOrgVariable:["GET /orgs/{org}/actions/variables/{name}/repositories"],listSelectedRepositoriesEnabledGithubActionsOrganization:["GET /orgs/{org}/actions/permissions/repositories"],listSelfHostedRunnersForOrg:["GET /orgs/{org}/actions/runners"],listSelfHostedRunnersForRepo:["GET /repos/{owner}/{repo}/actions/runners"],listWorkflowRunArtifacts:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],listWorkflowRuns:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],listWorkflowRunsForRepo:["GET /repos/{owner}/{repo}/actions/runs"],reRunJobForWorkflowRun:["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],reRunWorkflow:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],reRunWorkflowFailedJobs:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],removeAllCustomLabelsFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],removeAllCustomLabelsFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],removeCustomLabelFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],reviewCustomGatesForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"],reviewPendingDeploymentsForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],setAllowedActionsOrganization:["PUT /orgs/{org}/actions/permissions/selected-actions"],setAllowedActionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForOrg:["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],setCustomLabelsForSelfHostedRunnerForRepo:["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],setCustomOidcSubClaimForRepo:["PUT /repos/{owner}/{repo}/actions/oidc/customization/sub"],setGithubActionsDefaultWorkflowPermissionsOrganization:["PUT /orgs/{org}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],setGithubActionsPermissionsOrganization:["PUT /orgs/{org}/actions/permissions"],setGithubActionsPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],setSelectedReposForOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories"],setSelectedRepositoriesEnabledGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories"],setWorkflowAccessToRepository:["PUT /repos/{owner}/{repo}/actions/permissions/access"],updateEnvironmentVariable:["PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],updateHostedRunnerForOrg:["PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],updateOrgVariable:["PATCH /orgs/{org}/actions/variables/{name}"],updateRepoVariable:["PATCH /repos/{owner}/{repo}/actions/variables/{name}"]},activity:{checkRepoIsStarredByAuthenticatedUser:["GET /user/starred/{owner}/{repo}"],deleteRepoSubscription:["DELETE /repos/{owner}/{repo}/subscription"],deleteThreadSubscription:["DELETE /notifications/threads/{thread_id}/subscription"],getFeeds:["GET /feeds"],getRepoSubscription:["GET /repos/{owner}/{repo}/subscription"],getThread:["GET /notifications/threads/{thread_id}"],getThreadSubscriptionForAuthenticatedUser:["GET /notifications/threads/{thread_id}/subscription"],listEventsForAuthenticatedUser:["GET /users/{username}/events"],listNotificationsForAuthenticatedUser:["GET /notifications"],listOrgEventsForAuthenticatedUser:["GET /users/{username}/events/orgs/{org}"],listPublicEvents:["GET /events"],listPublicEventsForRepoNetwork:["GET /networks/{owner}/{repo}/events"],listPublicEventsForUser:["GET /users/{username}/events/public"],listPublicOrgEvents:["GET /orgs/{org}/events"],listReceivedEventsForUser:["GET /users/{username}/received_events"],listReceivedPublicEventsForUser:["GET /users/{username}/received_events/public"],listRepoEvents:["GET /repos/{owner}/{repo}/events"],listRepoNotificationsForAuthenticatedUser:["GET /repos/{owner}/{repo}/notifications"],listReposStarredByAuthenticatedUser:["GET /user/starred"],listReposStarredByUser:["GET /users/{username}/starred"],listReposWatchedByUser:["GET /users/{username}/subscriptions"],listStargazersForRepo:["GET /repos/{owner}/{repo}/stargazers"],listWatchedReposForAuthenticatedUser:["GET /user/subscriptions"],listWatchersForRepo:["GET /repos/{owner}/{repo}/subscribers"],markNotificationsAsRead:["PUT /notifications"],markRepoNotificationsAsRead:["PUT /repos/{owner}/{repo}/notifications"],markThreadAsDone:["DELETE /notifications/threads/{thread_id}"],markThreadAsRead:["PATCH /notifications/threads/{thread_id}"],setRepoSubscription:["PUT /repos/{owner}/{repo}/subscription"],setThreadSubscription:["PUT /notifications/threads/{thread_id}/subscription"],starRepoForAuthenticatedUser:["PUT /user/starred/{owner}/{repo}"],unstarRepoForAuthenticatedUser:["DELETE /user/starred/{owner}/{repo}"]},apps:{addRepoToInstallation:["PUT /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","addRepoToInstallationForAuthenticatedUser"]}],addRepoToInstallationForAuthenticatedUser:["PUT /user/installations/{installation_id}/repositories/{repository_id}"],checkToken:["POST /applications/{client_id}/token"],createFromManifest:["POST /app-manifests/{code}/conversions"],createInstallationAccessToken:["POST /app/installations/{installation_id}/access_tokens"],deleteAuthorization:["DELETE /applications/{client_id}/grant"],deleteInstallation:["DELETE /app/installations/{installation_id}"],deleteToken:["DELETE /applications/{client_id}/token"],getAuthenticated:["GET /app"],getBySlug:["GET /apps/{app_slug}"],getInstallation:["GET /app/installations/{installation_id}"],getOrgInstallation:["GET /orgs/{org}/installation"],getRepoInstallation:["GET /repos/{owner}/{repo}/installation"],getSubscriptionPlanForAccount:["GET /marketplace_listing/accounts/{account_id}"],getSubscriptionPlanForAccountStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}"],getUserInstallation:["GET /users/{username}/installation"],getWebhookConfigForApp:["GET /app/hook/config"],getWebhookDelivery:["GET /app/hook/deliveries/{delivery_id}"],listAccountsForPlan:["GET /marketplace_listing/plans/{plan_id}/accounts"],listAccountsForPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],listInstallationReposForAuthenticatedUser:["GET /user/installations/{installation_id}/repositories"],listInstallationRequestsForAuthenticatedApp:["GET /app/installation-requests"],listInstallations:["GET /app/installations"],listInstallationsForAuthenticatedUser:["GET /user/installations"],listPlans:["GET /marketplace_listing/plans"],listPlansStubbed:["GET /marketplace_listing/stubbed/plans"],listReposAccessibleToInstallation:["GET /installation/repositories"],listSubscriptionsForAuthenticatedUser:["GET /user/marketplace_purchases"],listSubscriptionsForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed"],listWebhookDeliveries:["GET /app/hook/deliveries"],redeliverWebhookDelivery:["POST /app/hook/deliveries/{delivery_id}/attempts"],removeRepoFromInstallation:["DELETE /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","removeRepoFromInstallationForAuthenticatedUser"]}],removeRepoFromInstallationForAuthenticatedUser:["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],resetToken:["PATCH /applications/{client_id}/token"],revokeInstallationAccessToken:["DELETE /installation/token"],scopeToken:["POST /applications/{client_id}/token/scoped"],suspendInstallation:["PUT /app/installations/{installation_id}/suspended"],unsuspendInstallation:["DELETE /app/installations/{installation_id}/suspended"],updateWebhookConfigForApp:["PATCH /app/hook/config"]},billing:{getGithubActionsBillingOrg:["GET /orgs/{org}/settings/billing/actions"],getGithubActionsBillingUser:["GET /users/{username}/settings/billing/actions"],getGithubBillingUsageReportOrg:["GET /organizations/{org}/settings/billing/usage"],getGithubBillingUsageReportUser:["GET /users/{username}/settings/billing/usage"],getGithubPackagesBillingOrg:["GET /orgs/{org}/settings/billing/packages"],getGithubPackagesBillingUser:["GET /users/{username}/settings/billing/packages"],getSharedStorageBillingOrg:["GET /orgs/{org}/settings/billing/shared-storage"],getSharedStorageBillingUser:["GET /users/{username}/settings/billing/shared-storage"]},campaigns:{createCampaign:["POST /orgs/{org}/campaigns"],deleteCampaign:["DELETE /orgs/{org}/campaigns/{campaign_number}"],getCampaignSummary:["GET /orgs/{org}/campaigns/{campaign_number}"],listOrgCampaigns:["GET /orgs/{org}/campaigns"],updateCampaign:["PATCH /orgs/{org}/campaigns/{campaign_number}"]},checks:{create:["POST /repos/{owner}/{repo}/check-runs"],createSuite:["POST /repos/{owner}/{repo}/check-suites"],get:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],getSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],listAnnotations:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],listForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],listForSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],listSuitesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],rerequestRun:["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],rerequestSuite:["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],setSuitesPreferences:["PATCH /repos/{owner}/{repo}/check-suites/preferences"],update:["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]},codeScanning:{commitAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits"],createAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],createVariantAnalysis:["POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses"],deleteAnalysis:["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],deleteCodeqlDatabase:["DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getAlert:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",{},{renamedParameters:{alert_id:"alert_number"}}],getAnalysis:["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],getAutofix:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],getCodeqlDatabase:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getDefaultSetup:["GET /repos/{owner}/{repo}/code-scanning/default-setup"],getSarif:["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],getVariantAnalysis:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}"],getVariantAnalysisRepoTask:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}"],listAlertInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],listAlertsForOrg:["GET /orgs/{org}/code-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/code-scanning/alerts"],listAlertsInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",{},{renamed:["codeScanning","listAlertInstances"]}],listCodeqlDatabases:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases"],listRecentAnalyses:["GET /repos/{owner}/{repo}/code-scanning/analyses"],updateAlert:["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],updateDefaultSetup:["PATCH /repos/{owner}/{repo}/code-scanning/default-setup"],uploadSarif:["POST /repos/{owner}/{repo}/code-scanning/sarifs"]},codeSecurity:{attachConfiguration:["POST /orgs/{org}/code-security/configurations/{configuration_id}/attach"],attachEnterpriseConfiguration:["POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach"],createConfiguration:["POST /orgs/{org}/code-security/configurations"],createConfigurationForEnterprise:["POST /enterprises/{enterprise}/code-security/configurations"],deleteConfiguration:["DELETE /orgs/{org}/code-security/configurations/{configuration_id}"],deleteConfigurationForEnterprise:["DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],detachConfiguration:["DELETE /orgs/{org}/code-security/configurations/detach"],getConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}"],getConfigurationForRepository:["GET /repos/{owner}/{repo}/code-security-configuration"],getConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations"],getConfigurationsForOrg:["GET /orgs/{org}/code-security/configurations"],getDefaultConfigurations:["GET /orgs/{org}/code-security/configurations/defaults"],getDefaultConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/defaults"],getRepositoriesForConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories"],getRepositoriesForEnterpriseConfiguration:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories"],getSingleConfigurationForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],setConfigurationAsDefault:["PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults"],setConfigurationAsDefaultForEnterprise:["PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults"],updateConfiguration:["PATCH /orgs/{org}/code-security/configurations/{configuration_id}"],updateEnterpriseConfiguration:["PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}"]},codesOfConduct:{getAllCodesOfConduct:["GET /codes_of_conduct"],getConductCode:["GET /codes_of_conduct/{key}"]},codespaces:{addRepositoryForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],checkPermissionsForDevcontainer:["GET /repos/{owner}/{repo}/codespaces/permissions_check"],codespaceMachinesForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/machines"],createForAuthenticatedUser:["POST /user/codespaces"],createOrUpdateOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],createOrUpdateSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}"],createWithPrForAuthenticatedUser:["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],createWithRepoForAuthenticatedUser:["POST /repos/{owner}/{repo}/codespaces"],deleteForAuthenticatedUser:["DELETE /user/codespaces/{codespace_name}"],deleteFromOrganization:["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],deleteOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],deleteSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}"],exportForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/exports"],getCodespacesForUserInOrg:["GET /orgs/{org}/members/{username}/codespaces"],getExportDetailsForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/exports/{export_id}"],getForAuthenticatedUser:["GET /user/codespaces/{codespace_name}"],getOrgPublicKey:["GET /orgs/{org}/codespaces/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}"],getPublicKeyForAuthenticatedUser:["GET /user/codespaces/secrets/public-key"],getRepoPublicKey:["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],getSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}"],listDevcontainersInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/devcontainers"],listForAuthenticatedUser:["GET /user/codespaces"],listInOrganization:["GET /orgs/{org}/codespaces",{},{renamedParameters:{org_id:"org"}}],listInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces"],listOrgSecrets:["GET /orgs/{org}/codespaces/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/codespaces/secrets"],listRepositoriesForSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}/repositories"],listSecretsForAuthenticatedUser:["GET /user/codespaces/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],preFlightWithRepoForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/new"],publishForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/publish"],removeRepositoryForSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],repoMachinesForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/machines"],setRepositoriesForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],startForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/start"],stopForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/stop"],stopInOrganization:["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],updateForAuthenticatedUser:["PATCH /user/codespaces/{codespace_name}"]},copilot:{addCopilotSeatsForTeams:["POST /orgs/{org}/copilot/billing/selected_teams"],addCopilotSeatsForUsers:["POST /orgs/{org}/copilot/billing/selected_users"],cancelCopilotSeatAssignmentForTeams:["DELETE /orgs/{org}/copilot/billing/selected_teams"],cancelCopilotSeatAssignmentForUsers:["DELETE /orgs/{org}/copilot/billing/selected_users"],copilotMetricsForOrganization:["GET /orgs/{org}/copilot/metrics"],copilotMetricsForTeam:["GET /orgs/{org}/team/{team_slug}/copilot/metrics"],getCopilotOrganizationDetails:["GET /orgs/{org}/copilot/billing"],getCopilotSeatDetailsForUser:["GET /orgs/{org}/members/{username}/copilot"],listCopilotSeats:["GET /orgs/{org}/copilot/billing/seats"]},credentials:{revoke:["POST /credentials/revoke"]},dependabot:{addSelectedRepoToOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],getAlert:["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],getOrgPublicKey:["GET /orgs/{org}/dependabot/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}"],getRepoPublicKey:["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/dependabot/alerts"],listAlertsForOrg:["GET /orgs/{org}/dependabot/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/dependabot/alerts"],listOrgSecrets:["GET /orgs/{org}/dependabot/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/dependabot/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],updateAlert:["PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"]},dependencyGraph:{createRepositorySnapshot:["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],diffRange:["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"],exportSbom:["GET /repos/{owner}/{repo}/dependency-graph/sbom"]},emojis:{get:["GET /emojis"]},gists:{checkIsStarred:["GET /gists/{gist_id}/star"],create:["POST /gists"],createComment:["POST /gists/{gist_id}/comments"],delete:["DELETE /gists/{gist_id}"],deleteComment:["DELETE /gists/{gist_id}/comments/{comment_id}"],fork:["POST /gists/{gist_id}/forks"],get:["GET /gists/{gist_id}"],getComment:["GET /gists/{gist_id}/comments/{comment_id}"],getRevision:["GET /gists/{gist_id}/{sha}"],list:["GET /gists"],listComments:["GET /gists/{gist_id}/comments"],listCommits:["GET /gists/{gist_id}/commits"],listForUser:["GET /users/{username}/gists"],listForks:["GET /gists/{gist_id}/forks"],listPublic:["GET /gists/public"],listStarred:["GET /gists/starred"],star:["PUT /gists/{gist_id}/star"],unstar:["DELETE /gists/{gist_id}/star"],update:["PATCH /gists/{gist_id}"],updateComment:["PATCH /gists/{gist_id}/comments/{comment_id}"]},git:{createBlob:["POST /repos/{owner}/{repo}/git/blobs"],createCommit:["POST /repos/{owner}/{repo}/git/commits"],createRef:["POST /repos/{owner}/{repo}/git/refs"],createTag:["POST /repos/{owner}/{repo}/git/tags"],createTree:["POST /repos/{owner}/{repo}/git/trees"],deleteRef:["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],getBlob:["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],getCommit:["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],getRef:["GET /repos/{owner}/{repo}/git/ref/{ref}"],getTag:["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],getTree:["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],listMatchingRefs:["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],updateRef:["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]},gitignore:{getAllTemplates:["GET /gitignore/templates"],getTemplate:["GET /gitignore/templates/{name}"]},hostedCompute:{createNetworkConfigurationForOrg:["POST /orgs/{org}/settings/network-configurations"],deleteNetworkConfigurationFromOrg:["DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkConfigurationForOrg:["GET /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkSettingsForOrg:["GET /orgs/{org}/settings/network-settings/{network_settings_id}"],listNetworkConfigurationsForOrg:["GET /orgs/{org}/settings/network-configurations"],updateNetworkConfigurationForOrg:["PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}"]},interactions:{getRestrictionsForAuthenticatedUser:["GET /user/interaction-limits"],getRestrictionsForOrg:["GET /orgs/{org}/interaction-limits"],getRestrictionsForRepo:["GET /repos/{owner}/{repo}/interaction-limits"],getRestrictionsForYourPublicRepos:["GET /user/interaction-limits",{},{renamed:["interactions","getRestrictionsForAuthenticatedUser"]}],removeRestrictionsForAuthenticatedUser:["DELETE /user/interaction-limits"],removeRestrictionsForOrg:["DELETE /orgs/{org}/interaction-limits"],removeRestrictionsForRepo:["DELETE /repos/{owner}/{repo}/interaction-limits"],removeRestrictionsForYourPublicRepos:["DELETE /user/interaction-limits",{},{renamed:["interactions","removeRestrictionsForAuthenticatedUser"]}],setRestrictionsForAuthenticatedUser:["PUT /user/interaction-limits"],setRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits"],setRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits"],setRestrictionsForYourPublicRepos:["PUT /user/interaction-limits",{},{renamed:["interactions","setRestrictionsForAuthenticatedUser"]}]},issues:{addAssignees:["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],addLabels:["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],addSubIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],checkUserCanBeAssigned:["GET /repos/{owner}/{repo}/assignees/{assignee}"],checkUserCanBeAssignedToIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"],create:["POST /repos/{owner}/{repo}/issues"],createComment:["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],createLabel:["POST /repos/{owner}/{repo}/labels"],createMilestone:["POST /repos/{owner}/{repo}/milestones"],deleteComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],deleteLabel:["DELETE /repos/{owner}/{repo}/labels/{name}"],deleteMilestone:["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],get:["GET /repos/{owner}/{repo}/issues/{issue_number}"],getComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],getEvent:["GET /repos/{owner}/{repo}/issues/events/{event_id}"],getLabel:["GET /repos/{owner}/{repo}/labels/{name}"],getMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],list:["GET /issues"],listAssignees:["GET /repos/{owner}/{repo}/assignees"],listComments:["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],listCommentsForRepo:["GET /repos/{owner}/{repo}/issues/comments"],listEvents:["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],listEventsForRepo:["GET /repos/{owner}/{repo}/issues/events"],listEventsForTimeline:["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"],listForAuthenticatedUser:["GET /user/issues"],listForOrg:["GET /orgs/{org}/issues"],listForRepo:["GET /repos/{owner}/{repo}/issues"],listLabelsForMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],listLabelsForRepo:["GET /repos/{owner}/{repo}/labels"],listLabelsOnIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],listMilestones:["GET /repos/{owner}/{repo}/milestones"],listSubIssues:["GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],lock:["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],removeAllLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],removeAssignees:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],removeLabel:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],removeSubIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue"],reprioritizeSubIssue:["PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority"],setLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],unlock:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],update:["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],updateComment:["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],updateLabel:["PATCH /repos/{owner}/{repo}/labels/{name}"],updateMilestone:["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]},licenses:{get:["GET /licenses/{license}"],getAllCommonlyUsed:["GET /licenses"],getForRepo:["GET /repos/{owner}/{repo}/license"]},markdown:{render:["POST /markdown"],renderRaw:["POST /markdown/raw",{headers:{"content-type":"text/plain; charset=utf-8"}}]},meta:{get:["GET /meta"],getAllVersions:["GET /versions"],getOctocat:["GET /octocat"],getZen:["GET /zen"],root:["GET /"]},migrations:{deleteArchiveForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/archive"],deleteArchiveForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/archive"],downloadArchiveForOrg:["GET /orgs/{org}/migrations/{migration_id}/archive"],getArchiveForAuthenticatedUser:["GET /user/migrations/{migration_id}/archive"],getStatusForAuthenticatedUser:["GET /user/migrations/{migration_id}"],getStatusForOrg:["GET /orgs/{org}/migrations/{migration_id}"],listForAuthenticatedUser:["GET /user/migrations"],listForOrg:["GET /orgs/{org}/migrations"],listReposForAuthenticatedUser:["GET /user/migrations/{migration_id}/repositories"],listReposForOrg:["GET /orgs/{org}/migrations/{migration_id}/repositories"],listReposForUser:["GET /user/migrations/{migration_id}/repositories",{},{renamed:["migrations","listReposForAuthenticatedUser"]}],startForAuthenticatedUser:["POST /user/migrations"],startForOrg:["POST /orgs/{org}/migrations"],unlockRepoForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"],unlockRepoForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"]},oidc:{getOidcCustomSubTemplateForOrg:["GET /orgs/{org}/actions/oidc/customization/sub"],updateOidcCustomSubTemplateForOrg:["PUT /orgs/{org}/actions/oidc/customization/sub"]},orgs:{addSecurityManagerTeam:["PUT /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team"}],assignTeamToOrgRole:["PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],assignUserToOrgRole:["PUT /orgs/{org}/organization-roles/users/{username}/{role_id}"],blockUser:["PUT /orgs/{org}/blocks/{username}"],cancelInvitation:["DELETE /orgs/{org}/invitations/{invitation_id}"],checkBlockedUser:["GET /orgs/{org}/blocks/{username}"],checkMembershipForUser:["GET /orgs/{org}/members/{username}"],checkPublicMembershipForUser:["GET /orgs/{org}/public_members/{username}"],convertMemberToOutsideCollaborator:["PUT /orgs/{org}/outside_collaborators/{username}"],createInvitation:["POST /orgs/{org}/invitations"],createIssueType:["POST /orgs/{org}/issue-types"],createOrUpdateCustomProperties:["PATCH /orgs/{org}/properties/schema"],createOrUpdateCustomPropertiesValuesForRepos:["PATCH /orgs/{org}/properties/values"],createOrUpdateCustomProperty:["PUT /orgs/{org}/properties/schema/{custom_property_name}"],createWebhook:["POST /orgs/{org}/hooks"],delete:["DELETE /orgs/{org}"],deleteIssueType:["DELETE /orgs/{org}/issue-types/{issue_type_id}"],deleteWebhook:["DELETE /orgs/{org}/hooks/{hook_id}"],enableOrDisableSecurityProductOnAllOrgRepos:["POST /orgs/{org}/{security_product}/{enablement}",{},{deprecated:"octokit.rest.orgs.enableOrDisableSecurityProductOnAllOrgRepos() is deprecated, see https://docs.github.com/rest/orgs/orgs#enable-or-disable-a-security-feature-for-an-organization"}],get:["GET /orgs/{org}"],getAllCustomProperties:["GET /orgs/{org}/properties/schema"],getCustomProperty:["GET /orgs/{org}/properties/schema/{custom_property_name}"],getMembershipForAuthenticatedUser:["GET /user/memberships/orgs/{org}"],getMembershipForUser:["GET /orgs/{org}/memberships/{username}"],getOrgRole:["GET /orgs/{org}/organization-roles/{role_id}"],getOrgRulesetHistory:["GET /orgs/{org}/rulesets/{ruleset_id}/history"],getOrgRulesetVersion:["GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}"],getWebhook:["GET /orgs/{org}/hooks/{hook_id}"],getWebhookConfigForOrg:["GET /orgs/{org}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],list:["GET /organizations"],listAppInstallations:["GET /orgs/{org}/installations"],listAttestations:["GET /orgs/{org}/attestations/{subject_digest}"],listBlockedUsers:["GET /orgs/{org}/blocks"],listCustomPropertiesValuesForRepos:["GET /orgs/{org}/properties/values"],listFailedInvitations:["GET /orgs/{org}/failed_invitations"],listForAuthenticatedUser:["GET /user/orgs"],listForUser:["GET /users/{username}/orgs"],listInvitationTeams:["GET /orgs/{org}/invitations/{invitation_id}/teams"],listIssueTypes:["GET /orgs/{org}/issue-types"],listMembers:["GET /orgs/{org}/members"],listMembershipsForAuthenticatedUser:["GET /user/memberships/orgs"],listOrgRoleTeams:["GET /orgs/{org}/organization-roles/{role_id}/teams"],listOrgRoleUsers:["GET /orgs/{org}/organization-roles/{role_id}/users"],listOrgRoles:["GET /orgs/{org}/organization-roles"],listOrganizationFineGrainedPermissions:["GET /orgs/{org}/organization-fine-grained-permissions"],listOutsideCollaborators:["GET /orgs/{org}/outside_collaborators"],listPatGrantRepositories:["GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"],listPatGrantRequestRepositories:["GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"],listPatGrantRequests:["GET /orgs/{org}/personal-access-token-requests"],listPatGrants:["GET /orgs/{org}/personal-access-tokens"],listPendingInvitations:["GET /orgs/{org}/invitations"],listPublicMembers:["GET /orgs/{org}/public_members"],listSecurityManagerTeams:["GET /orgs/{org}/security-managers",{},{deprecated:"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams"}],listWebhookDeliveries:["GET /orgs/{org}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /orgs/{org}/hooks"],pingWebhook:["POST /orgs/{org}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeCustomProperty:["DELETE /orgs/{org}/properties/schema/{custom_property_name}"],removeMember:["DELETE /orgs/{org}/members/{username}"],removeMembershipForUser:["DELETE /orgs/{org}/memberships/{username}"],removeOutsideCollaborator:["DELETE /orgs/{org}/outside_collaborators/{username}"],removePublicMembershipForAuthenticatedUser:["DELETE /orgs/{org}/public_members/{username}"],removeSecurityManagerTeam:["DELETE /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team"}],reviewPatGrantRequest:["POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"],reviewPatGrantRequestsInBulk:["POST /orgs/{org}/personal-access-token-requests"],revokeAllOrgRolesTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}"],revokeAllOrgRolesUser:["DELETE /orgs/{org}/organization-roles/users/{username}"],revokeOrgRoleTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],revokeOrgRoleUser:["DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}"],setMembershipForUser:["PUT /orgs/{org}/memberships/{username}"],setPublicMembershipForAuthenticatedUser:["PUT /orgs/{org}/public_members/{username}"],unblockUser:["DELETE /orgs/{org}/blocks/{username}"],update:["PATCH /orgs/{org}"],updateIssueType:["PUT /orgs/{org}/issue-types/{issue_type_id}"],updateMembershipForAuthenticatedUser:["PATCH /user/memberships/orgs/{org}"],updatePatAccess:["POST /orgs/{org}/personal-access-tokens/{pat_id}"],updatePatAccesses:["POST /orgs/{org}/personal-access-tokens"],updateWebhook:["PATCH /orgs/{org}/hooks/{hook_id}"],updateWebhookConfigForOrg:["PATCH /orgs/{org}/hooks/{hook_id}/config"]},packages:{deletePackageForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}"],deletePackageForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],deletePackageForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}"],deletePackageVersionForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getAllPackageVersionsForAPackageOwnedByAnOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByOrg"]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions"],getPackageForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}"],getPackageForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}"],getPackageForUser:["GET /users/{username}/packages/{package_type}/{package_name}"],getPackageVersionForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],listDockerMigrationConflictingPackagesForAuthenticatedUser:["GET /user/docker/conflicts"],listDockerMigrationConflictingPackagesForOrganization:["GET /orgs/{org}/docker/conflicts"],listDockerMigrationConflictingPackagesForUser:["GET /users/{username}/docker/conflicts"],listPackagesForAuthenticatedUser:["GET /user/packages"],listPackagesForOrganization:["GET /orgs/{org}/packages"],listPackagesForUser:["GET /users/{username}/packages"],restorePackageForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForUser:["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageVersionForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForUser:["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]},privateRegistries:{createOrgPrivateRegistry:["POST /orgs/{org}/private-registries"],deleteOrgPrivateRegistry:["DELETE /orgs/{org}/private-registries/{secret_name}"],getOrgPrivateRegistry:["GET /orgs/{org}/private-registries/{secret_name}"],getOrgPublicKey:["GET /orgs/{org}/private-registries/public-key"],listOrgPrivateRegistries:["GET /orgs/{org}/private-registries"],updateOrgPrivateRegistry:["PATCH /orgs/{org}/private-registries/{secret_name}"]},pulls:{checkIfMerged:["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],create:["POST /repos/{owner}/{repo}/pulls"],createReplyForReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],createReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],createReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],deletePendingReview:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],deleteReviewComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],dismissReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],get:["GET /repos/{owner}/{repo}/pulls/{pull_number}"],getReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],getReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],list:["GET /repos/{owner}/{repo}/pulls"],listCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],listCommits:["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],listFiles:["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],listRequestedReviewers:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],listReviewComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],listReviewCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments"],listReviews:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],merge:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],removeRequestedReviewers:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],requestReviewers:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],submitReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],update:["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],updateBranch:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"],updateReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],updateReviewComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]},rateLimit:{get:["GET /rate_limit"]},reactions:{createForCommitComment:["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"],createForIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],createForIssueComment:["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],createForPullRequestReviewComment:["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],createForRelease:["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],createForTeamDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],createForTeamDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],deleteForCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],deleteForIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],deleteForIssueComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],deleteForPullRequestComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],deleteForRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],deleteForTeamDiscussion:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],deleteForTeamDiscussionComment:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],listForCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],listForIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],listForIssueComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],listForPullRequestReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],listForRelease:["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],listForTeamDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],listForTeamDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]},repos:{acceptInvitation:["PATCH /user/repository_invitations/{invitation_id}",{},{renamed:["repos","acceptInvitationForAuthenticatedUser"]}],acceptInvitationForAuthenticatedUser:["PATCH /user/repository_invitations/{invitation_id}"],addAppAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],addCollaborator:["PUT /repos/{owner}/{repo}/collaborators/{username}"],addStatusCheckContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],addTeamAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],addUserAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],cancelPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel"],checkAutomatedSecurityFixes:["GET /repos/{owner}/{repo}/automated-security-fixes"],checkCollaborator:["GET /repos/{owner}/{repo}/collaborators/{username}"],checkPrivateVulnerabilityReporting:["GET /repos/{owner}/{repo}/private-vulnerability-reporting"],checkVulnerabilityAlerts:["GET /repos/{owner}/{repo}/vulnerability-alerts"],codeownersErrors:["GET /repos/{owner}/{repo}/codeowners/errors"],compareCommits:["GET /repos/{owner}/{repo}/compare/{base}...{head}"],compareCommitsWithBasehead:["GET /repos/{owner}/{repo}/compare/{basehead}"],createAttestation:["POST /repos/{owner}/{repo}/attestations"],createAutolink:["POST /repos/{owner}/{repo}/autolinks"],createCommitComment:["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],createCommitSignatureProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],createCommitStatus:["POST /repos/{owner}/{repo}/statuses/{sha}"],createDeployKey:["POST /repos/{owner}/{repo}/keys"],createDeployment:["POST /repos/{owner}/{repo}/deployments"],createDeploymentBranchPolicy:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],createDeploymentProtectionRule:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],createDeploymentStatus:["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],createDispatchEvent:["POST /repos/{owner}/{repo}/dispatches"],createForAuthenticatedUser:["POST /user/repos"],createFork:["POST /repos/{owner}/{repo}/forks"],createInOrg:["POST /orgs/{org}/repos"],createOrUpdateCustomPropertiesValues:["PATCH /repos/{owner}/{repo}/properties/values"],createOrUpdateEnvironment:["PUT /repos/{owner}/{repo}/environments/{environment_name}"],createOrUpdateFileContents:["PUT /repos/{owner}/{repo}/contents/{path}"],createOrgRuleset:["POST /orgs/{org}/rulesets"],createPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments"],createPagesSite:["POST /repos/{owner}/{repo}/pages"],createRelease:["POST /repos/{owner}/{repo}/releases"],createRepoRuleset:["POST /repos/{owner}/{repo}/rulesets"],createUsingTemplate:["POST /repos/{template_owner}/{template_repo}/generate"],createWebhook:["POST /repos/{owner}/{repo}/hooks"],declineInvitation:["DELETE /user/repository_invitations/{invitation_id}",{},{renamed:["repos","declineInvitationForAuthenticatedUser"]}],declineInvitationForAuthenticatedUser:["DELETE /user/repository_invitations/{invitation_id}"],delete:["DELETE /repos/{owner}/{repo}"],deleteAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],deleteAdminBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],deleteAnEnvironment:["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],deleteAutolink:["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],deleteBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],deleteCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],deleteCommitSignatureProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],deleteDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}"],deleteDeployment:["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],deleteDeploymentBranchPolicy:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],deleteFile:["DELETE /repos/{owner}/{repo}/contents/{path}"],deleteInvitation:["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],deleteOrgRuleset:["DELETE /orgs/{org}/rulesets/{ruleset_id}"],deletePagesSite:["DELETE /repos/{owner}/{repo}/pages"],deletePullRequestReviewProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],deleteRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}"],deleteReleaseAsset:["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],deleteRepoRuleset:["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],deleteWebhook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],disableAutomatedSecurityFixes:["DELETE /repos/{owner}/{repo}/automated-security-fixes"],disableDeploymentProtectionRule:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],disablePrivateVulnerabilityReporting:["DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"],disableVulnerabilityAlerts:["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],downloadArchive:["GET /repos/{owner}/{repo}/zipball/{ref}",{},{renamed:["repos","downloadZipballArchive"]}],downloadTarballArchive:["GET /repos/{owner}/{repo}/tarball/{ref}"],downloadZipballArchive:["GET /repos/{owner}/{repo}/zipball/{ref}"],enableAutomatedSecurityFixes:["PUT /repos/{owner}/{repo}/automated-security-fixes"],enablePrivateVulnerabilityReporting:["PUT /repos/{owner}/{repo}/private-vulnerability-reporting"],enableVulnerabilityAlerts:["PUT /repos/{owner}/{repo}/vulnerability-alerts"],generateReleaseNotes:["POST /repos/{owner}/{repo}/releases/generate-notes"],get:["GET /repos/{owner}/{repo}"],getAccessRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],getAdminBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],getAllDeploymentProtectionRules:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],getAllEnvironments:["GET /repos/{owner}/{repo}/environments"],getAllStatusCheckContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],getAllTopics:["GET /repos/{owner}/{repo}/topics"],getAppsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],getAutolink:["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],getBranch:["GET /repos/{owner}/{repo}/branches/{branch}"],getBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection"],getBranchRules:["GET /repos/{owner}/{repo}/rules/branches/{branch}"],getClones:["GET /repos/{owner}/{repo}/traffic/clones"],getCodeFrequencyStats:["GET /repos/{owner}/{repo}/stats/code_frequency"],getCollaboratorPermissionLevel:["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],getCombinedStatusForRef:["GET /repos/{owner}/{repo}/commits/{ref}/status"],getCommit:["GET /repos/{owner}/{repo}/commits/{ref}"],getCommitActivityStats:["GET /repos/{owner}/{repo}/stats/commit_activity"],getCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}"],getCommitSignatureProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],getCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile"],getContent:["GET /repos/{owner}/{repo}/contents/{path}"],getContributorsStats:["GET /repos/{owner}/{repo}/stats/contributors"],getCustomDeploymentProtectionRule:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],getCustomPropertiesValues:["GET /repos/{owner}/{repo}/properties/values"],getDeployKey:["GET /repos/{owner}/{repo}/keys/{key_id}"],getDeployment:["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],getDeploymentBranchPolicy:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],getDeploymentStatus:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],getEnvironment:["GET /repos/{owner}/{repo}/environments/{environment_name}"],getLatestPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/latest"],getLatestRelease:["GET /repos/{owner}/{repo}/releases/latest"],getOrgRuleSuite:["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"],getOrgRuleSuites:["GET /orgs/{org}/rulesets/rule-suites"],getOrgRuleset:["GET /orgs/{org}/rulesets/{ruleset_id}"],getOrgRulesets:["GET /orgs/{org}/rulesets"],getPages:["GET /repos/{owner}/{repo}/pages"],getPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],getPagesDeployment:["GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}"],getPagesHealthCheck:["GET /repos/{owner}/{repo}/pages/health"],getParticipationStats:["GET /repos/{owner}/{repo}/stats/participation"],getPullRequestReviewProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],getPunchCardStats:["GET /repos/{owner}/{repo}/stats/punch_card"],getReadme:["GET /repos/{owner}/{repo}/readme"],getReadmeInDirectory:["GET /repos/{owner}/{repo}/readme/{dir}"],getRelease:["GET /repos/{owner}/{repo}/releases/{release_id}"],getReleaseAsset:["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],getReleaseByTag:["GET /repos/{owner}/{repo}/releases/tags/{tag}"],getRepoRuleSuite:["GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}"],getRepoRuleSuites:["GET /repos/{owner}/{repo}/rulesets/rule-suites"],getRepoRuleset:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],getRepoRulesetHistory:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history"],getRepoRulesetVersion:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}"],getRepoRulesets:["GET /repos/{owner}/{repo}/rulesets"],getStatusChecksProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],getTeamsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],getTopPaths:["GET /repos/{owner}/{repo}/traffic/popular/paths"],getTopReferrers:["GET /repos/{owner}/{repo}/traffic/popular/referrers"],getUsersWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],getViews:["GET /repos/{owner}/{repo}/traffic/views"],getWebhook:["GET /repos/{owner}/{repo}/hooks/{hook_id}"],getWebhookConfigForRepo:["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],listActivities:["GET /repos/{owner}/{repo}/activity"],listAttestations:["GET /repos/{owner}/{repo}/attestations/{subject_digest}"],listAutolinks:["GET /repos/{owner}/{repo}/autolinks"],listBranches:["GET /repos/{owner}/{repo}/branches"],listBranchesForHeadCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],listCollaborators:["GET /repos/{owner}/{repo}/collaborators"],listCommentsForCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],listCommitCommentsForRepo:["GET /repos/{owner}/{repo}/comments"],listCommitStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],listCommits:["GET /repos/{owner}/{repo}/commits"],listContributors:["GET /repos/{owner}/{repo}/contributors"],listCustomDeploymentRuleIntegrations:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"],listDeployKeys:["GET /repos/{owner}/{repo}/keys"],listDeploymentBranchPolicies:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],listDeploymentStatuses:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],listDeployments:["GET /repos/{owner}/{repo}/deployments"],listForAuthenticatedUser:["GET /user/repos"],listForOrg:["GET /orgs/{org}/repos"],listForUser:["GET /users/{username}/repos"],listForks:["GET /repos/{owner}/{repo}/forks"],listInvitations:["GET /repos/{owner}/{repo}/invitations"],listInvitationsForAuthenticatedUser:["GET /user/repository_invitations"],listLanguages:["GET /repos/{owner}/{repo}/languages"],listPagesBuilds:["GET /repos/{owner}/{repo}/pages/builds"],listPublic:["GET /repositories"],listPullRequestsAssociatedWithCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"],listReleaseAssets:["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],listReleases:["GET /repos/{owner}/{repo}/releases"],listTags:["GET /repos/{owner}/{repo}/tags"],listTeams:["GET /repos/{owner}/{repo}/teams"],listWebhookDeliveries:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /repos/{owner}/{repo}/hooks"],merge:["POST /repos/{owner}/{repo}/merges"],mergeUpstream:["POST /repos/{owner}/{repo}/merge-upstream"],pingWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeAppAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],removeCollaborator:["DELETE /repos/{owner}/{repo}/collaborators/{username}"],removeStatusCheckContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],removeStatusCheckProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],removeTeamAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],removeUserAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],renameBranch:["POST /repos/{owner}/{repo}/branches/{branch}/rename"],replaceAllTopics:["PUT /repos/{owner}/{repo}/topics"],requestPagesBuild:["POST /repos/{owner}/{repo}/pages/builds"],setAdminBranchProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],setAppAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],setStatusCheckContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],setTeamAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],setUserAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],testPushWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],transfer:["POST /repos/{owner}/{repo}/transfer"],update:["PATCH /repos/{owner}/{repo}"],updateBranchProtection:["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],updateCommitComment:["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],updateDeploymentBranchPolicy:["PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],updateInformationAboutPagesSite:["PUT /repos/{owner}/{repo}/pages"],updateInvitation:["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],updateOrgRuleset:["PUT /orgs/{org}/rulesets/{ruleset_id}"],updatePullRequestReviewProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],updateRelease:["PATCH /repos/{owner}/{repo}/releases/{release_id}"],updateReleaseAsset:["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],updateRepoRuleset:["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],updateStatusCheckPotection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","updateStatusCheckProtection"]}],updateStatusCheckProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],updateWebhook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],updateWebhookConfigForRepo:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],uploadReleaseAsset:["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",{baseUrl:"https://uploads.github.com"}]},search:{code:["GET /search/code"],commits:["GET /search/commits"],issuesAndPullRequests:["GET /search/issues",{},{deprecated:"octokit.rest.search.issuesAndPullRequests() is deprecated, see https://docs.github.com/rest/search/search#search-issues-and-pull-requests"}],labels:["GET /search/labels"],repos:["GET /search/repositories"],topics:["GET /search/topics"],users:["GET /search/users"]},secretScanning:{createPushProtectionBypass:["POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses"],getAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],getScanHistory:["GET /repos/{owner}/{repo}/secret-scanning/scan-history"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/secret-scanning/alerts"],listAlertsForOrg:["GET /orgs/{org}/secret-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/secret-scanning/alerts"],listLocationsForAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],updateAlert:["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]},securityAdvisories:{createFork:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks"],createPrivateVulnerabilityReport:["POST /repos/{owner}/{repo}/security-advisories/reports"],createRepositoryAdvisory:["POST /repos/{owner}/{repo}/security-advisories"],createRepositoryAdvisoryCveRequest:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"],getGlobalAdvisory:["GET /advisories/{ghsa_id}"],getRepositoryAdvisory:["GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"],listGlobalAdvisories:["GET /advisories"],listOrgRepositoryAdvisories:["GET /orgs/{org}/security-advisories"],listRepositoryAdvisories:["GET /repos/{owner}/{repo}/security-advisories"],updateRepositoryAdvisory:["PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"]},teams:{addOrUpdateMembershipForUserInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],addOrUpdateRepoPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],checkPermissionsForRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],create:["POST /orgs/{org}/teams"],createDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],createDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions"],deleteDiscussionCommentInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],deleteDiscussionInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],deleteInOrg:["DELETE /orgs/{org}/teams/{team_slug}"],getByName:["GET /orgs/{org}/teams/{team_slug}"],getDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],getDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],getMembershipForUserInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],list:["GET /orgs/{org}/teams"],listChildInOrg:["GET /orgs/{org}/teams/{team_slug}/teams"],listDiscussionCommentsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],listDiscussionsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions"],listForAuthenticatedUser:["GET /user/teams"],listMembersInOrg:["GET /orgs/{org}/teams/{team_slug}/members"],listPendingInvitationsInOrg:["GET /orgs/{org}/teams/{team_slug}/invitations"],listReposInOrg:["GET /orgs/{org}/teams/{team_slug}/repos"],removeMembershipForUserInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],removeRepoInOrg:["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],updateDiscussionCommentInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],updateDiscussionInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],updateInOrg:["PATCH /orgs/{org}/teams/{team_slug}"]},users:{addEmailForAuthenticated:["POST /user/emails",{},{renamed:["users","addEmailForAuthenticatedUser"]}],addEmailForAuthenticatedUser:["POST /user/emails"],addSocialAccountForAuthenticatedUser:["POST /user/social_accounts"],block:["PUT /user/blocks/{username}"],checkBlocked:["GET /user/blocks/{username}"],checkFollowingForUser:["GET /users/{username}/following/{target_user}"],checkPersonIsFollowedByAuthenticated:["GET /user/following/{username}"],createGpgKeyForAuthenticated:["POST /user/gpg_keys",{},{renamed:["users","createGpgKeyForAuthenticatedUser"]}],createGpgKeyForAuthenticatedUser:["POST /user/gpg_keys"],createPublicSshKeyForAuthenticated:["POST /user/keys",{},{renamed:["users","createPublicSshKeyForAuthenticatedUser"]}],createPublicSshKeyForAuthenticatedUser:["POST /user/keys"],createSshSigningKeyForAuthenticatedUser:["POST /user/ssh_signing_keys"],deleteEmailForAuthenticated:["DELETE /user/emails",{},{renamed:["users","deleteEmailForAuthenticatedUser"]}],deleteEmailForAuthenticatedUser:["DELETE /user/emails"],deleteGpgKeyForAuthenticated:["DELETE /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","deleteGpgKeyForAuthenticatedUser"]}],deleteGpgKeyForAuthenticatedUser:["DELETE /user/gpg_keys/{gpg_key_id}"],deletePublicSshKeyForAuthenticated:["DELETE /user/keys/{key_id}",{},{renamed:["users","deletePublicSshKeyForAuthenticatedUser"]}],deletePublicSshKeyForAuthenticatedUser:["DELETE /user/keys/{key_id}"],deleteSocialAccountForAuthenticatedUser:["DELETE /user/social_accounts"],deleteSshSigningKeyForAuthenticatedUser:["DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"],follow:["PUT /user/following/{username}"],getAuthenticated:["GET /user"],getById:["GET /user/{account_id}"],getByUsername:["GET /users/{username}"],getContextForUser:["GET /users/{username}/hovercard"],getGpgKeyForAuthenticated:["GET /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","getGpgKeyForAuthenticatedUser"]}],getGpgKeyForAuthenticatedUser:["GET /user/gpg_keys/{gpg_key_id}"],getPublicSshKeyForAuthenticated:["GET /user/keys/{key_id}",{},{renamed:["users","getPublicSshKeyForAuthenticatedUser"]}],getPublicSshKeyForAuthenticatedUser:["GET /user/keys/{key_id}"],getSshSigningKeyForAuthenticatedUser:["GET /user/ssh_signing_keys/{ssh_signing_key_id}"],list:["GET /users"],listAttestations:["GET /users/{username}/attestations/{subject_digest}"],listBlockedByAuthenticated:["GET /user/blocks",{},{renamed:["users","listBlockedByAuthenticatedUser"]}],listBlockedByAuthenticatedUser:["GET /user/blocks"],listEmailsForAuthenticated:["GET /user/emails",{},{renamed:["users","listEmailsForAuthenticatedUser"]}],listEmailsForAuthenticatedUser:["GET /user/emails"],listFollowedByAuthenticated:["GET /user/following",{},{renamed:["users","listFollowedByAuthenticatedUser"]}],listFollowedByAuthenticatedUser:["GET /user/following"],listFollowersForAuthenticatedUser:["GET /user/followers"],listFollowersForUser:["GET /users/{username}/followers"],listFollowingForUser:["GET /users/{username}/following"],listGpgKeysForAuthenticated:["GET /user/gpg_keys",{},{renamed:["users","listGpgKeysForAuthenticatedUser"]}],listGpgKeysForAuthenticatedUser:["GET /user/gpg_keys"],listGpgKeysForUser:["GET /users/{username}/gpg_keys"],listPublicEmailsForAuthenticated:["GET /user/public_emails",{},{renamed:["users","listPublicEmailsForAuthenticatedUser"]}],listPublicEmailsForAuthenticatedUser:["GET /user/public_emails"],listPublicKeysForUser:["GET /users/{username}/keys"],listPublicSshKeysForAuthenticated:["GET /user/keys",{},{renamed:["users","listPublicSshKeysForAuthenticatedUser"]}],listPublicSshKeysForAuthenticatedUser:["GET /user/keys"],listSocialAccountsForAuthenticatedUser:["GET /user/social_accounts"],listSocialAccountsForUser:["GET /users/{username}/social_accounts"],listSshSigningKeysForAuthenticatedUser:["GET /user/ssh_signing_keys"],listSshSigningKeysForUser:["GET /users/{username}/ssh_signing_keys"],setPrimaryEmailVisibilityForAuthenticated:["PATCH /user/email/visibility",{},{renamed:["users","setPrimaryEmailVisibilityForAuthenticatedUser"]}],setPrimaryEmailVisibilityForAuthenticatedUser:["PATCH /user/email/visibility"],unblock:["DELETE /user/blocks/{username}"],unfollow:["DELETE /user/following/{username}"],updateAuthenticated:["PATCH /user"]}},YV=_6;var JE=new Map;for(let[A,Q]of Object.entries(YV))for(let[B,E]of Object.entries(Q)){let[I,C,g]=E,[D,F]=I.split(/ /),J=Object.assign({method:D,url:F},C);if(!JE.has(A))JE.set(A,new Map);JE.get(A).set(B,{scope:A,methodName:B,endpointDefaults:J,decorations:g})}var O6={has({scope:A},Q){return JE.get(A).has(Q)},getOwnPropertyDescriptor(A,Q){return{value:this.get(A,Q),configurable:!0,writable:!0,enumerable:!0}},defineProperty(A,Q,B){return Object.defineProperty(A.cache,Q,B),!0},deleteProperty(A,Q){return delete A.cache[Q],!0},ownKeys({scope:A}){return[...JE.get(A).keys()]},set(A,Q,B){return A.cache[Q]=B},get({octokit:A,scope:Q,cache:B},E){if(B[E])return B[E];let I=JE.get(Q).get(E);if(!I)return;let{endpointDefaults:C,decorations:g}=I;if(g)B[E]=q6(A,Q,E,C,g);else B[E]=A.request.defaults(C);return B[E]}};function hY(A){let Q={};for(let B of JE.keys())Q[B]=new Proxy({octokit:A,scope:B,cache:{}},O6);return Q}function q6(A,Q,B,E,I){let C=A.request.defaults(E);function g(...D){let F=C.endpoint.merge(...D);if(I.mapToData)return F=Object.assign({},F,{data:F[I.mapToData],[I.mapToData]:void 0}),C(F);if(I.renamed){let[J,Y]=I.renamed;A.log.warn(`octokit.${Q}.${B}() has been renamed to octokit.${J}.${Y}()`)}if(I.deprecated)A.log.warn(I.deprecated);if(I.renamedParameters){let J=C.endpoint.merge(...D);for(let[Y,U]of Object.entries(I.renamedParameters))if(Y in J){if(A.log.warn(`"${Y}" parameter is deprecated for "octokit.${Q}.${B}()". Use "${U}" instead`),!(U in J))J[U]=J[Y];delete J[Y]}return C(J)}return C(...D)}return Object.assign(g,C)}function P6(A){return{rest:hY(A)}}P6.VERSION=XY;function SY(A){let Q=hY(A);return{...Q,rest:Q}}SY.VERSION=XY;var JV="22.0.0";var NV=lg.plugin(VY,SY,ZY).defaults({userAgent:`octokit-rest.js/${JV}`});var GV=rg(HY(),1);class xY extends Error{name;status;request;response;constructor(A,Q,B){super(A);if(this.name="HttpError",this.status=Number.parseInt(Q),Number.isNaN(this.status))this.status=0;if("response"in B)this.response=B.response;let E=Object.assign({},B.request);if(B.request.headers.authorization)E.headers=Object.assign({},B.request.headers,{authorization:B.request.headers.authorization.replace(/(?=400&&!A.doNotRetry.includes(B.status)){let I=E.request.retries!=null?E.request.retries:A.retries,C=Math.pow((E.request.retryCount||0)+1,2);throw Q.retry.retryRequest(B,I,C)}throw B}async function v6(A,Q,B,E){let I=new GV.default;return I.on("failed",function(C,g){let D=~~C.request.request.retries,F=~~C.request.request.retryAfter;if(E.request.retryCount=g.retryCount+1,D>g.retryCount)return F*A.retryAfterBaseValue}),I.schedule(k6.bind(null,A,Q,B),E)}async function k6(A,Q,B,E){let I=await B(B,E);if(I.data&&I.data.errors&&I.data.errors.length>0&&/Something went wrong while executing your query/.test(I.data.errors[0].message)){let C=new xY(I.data.errors[0].message,500,{request:E,response:I});return UV(A,Q,C,E)}return I}function $Y(A,Q){let B=Object.assign({enabled:!0,retryAfterBaseValue:1000,doNotRetry:[400,401,403,404,410,422,451],retries:3},Q.retry);if(B.enabled)A.hook.error("request",UV.bind(null,B,A)),A.hook.wrap("request",v6.bind(null,B,A));return{retry:{retryRequest:(E,I,C)=>{return E.request.request=Object.assign({},E.request.request,{retries:I,retryAfter:C}),E}}}}$Y.VERSION=f6;var ZV=rg(WV(),1);class XV{name="github";token;octokit=null;constructor(A){this.token=A||process.env.GITHUB_TOKEN,this.initializeOctokit()}async initializeOctokit(){let A=NV.plugin($Y,ZV.throttling);this.octokit=new A({auth:this.token,userAgent:"usage-statistics-tracker",timeZone:"UTC",baseUrl:"https://api.github.com",log:{debug:()=>{},info:()=>{},warn:console.warn,error:console.error},throttle:{onRateLimit:(Q,B)=>{return console.warn(`Rate limit hit for ${B.request.url}, retrying after ${Q} seconds`),!0},onSecondaryRateLimit:(Q,B)=>{return console.warn(`Secondary rate limit hit for ${B.request.url}, retrying after ${Q} seconds`),!0}},retry:{doNotRetry:[400,401,403,404,422],enabled:!0}})}async getDownloadStats(A,Q){try{let[B,E]=A.split("/");if(!B||!E)throw new Error(`Invalid repository format: ${A}. Expected format: owner/repo`);let I=await this.getReleases(B,E),C=[];for(let g of I){if(Q?.releaseTag&&g.tag_name!==Q.releaseTag)continue;for(let D of g.assets){if(Q?.assetName&&D.name!==Q.assetName)continue;C.push({platform:"github",packageName:A,repository:A,releaseId:g.id,releaseName:g.name||"Unknown",releaseTag:g.tag_name,assetName:D.name,assetId:D.id,downloadCount:D.download_count,metadata:{assetSize:D.size,contentType:D.content_type,isDraft:g.draft,isPrerelease:g.prerelease}})}}return C}catch(B){return console.error(`Error fetching GitHub stats for ${A}:`,B),[]}}async getLatestVersion(A){try{let[Q,B]=A.split("/");return(await this.getReleases(Q,B)).find((C)=>!C.draft&&!C.prerelease)?.tag_name||null}catch(Q){return console.error(`Error fetching latest version for ${A}:`,Q),null}}async getPackageInfo(A){let[Q,B]=A.split("/");if(!this.octokit)throw new Error("Octokit not initialized");try{return(await this.octokit.repos.get({owner:Q,repo:B})).data}catch(E){throw console.error(`Error fetching repository info for ${A}:`,E),E}}async getReleases(A,Q){if(!this.octokit)throw new Error("Octokit not initialized");try{return(await this.octokit.repos.listReleases({owner:A,repo:Q,per_page:100})).data}catch(B){throw console.error(`Error fetching releases for ${A}/${Q}:`,B),B}}}var hV=XV;class SV{name="pypi";baseUrl="https://pypi.org/pypi";async getDownloadStats(A,Q){try{let B=await this.getPackageInfo(A),E=[];for(let[I,C]of Object.entries(B.releases)){if(Q?.version&&I!==Q.version)continue;for(let g of C){if(Q?.fileType&&g.file_type!==Q.fileType)continue;let D=new Date(g.upload_time);if(Q?.startDate&&DQ.endDate)continue;E.push({platform:"pypi",packageName:A,version:I,fileType:g.file_type,pythonVersion:g.python_version,uploadTime:D,downloadCount:g.download_count||0,metadata:{filename:g.filename,fileSize:g.size,url:g.url}})}}return E}catch(B){return console.error(`Error fetching PyPI stats for ${A}:`,B),[]}}async getLatestVersion(A){try{return(await this.getPackageInfo(A)).info.version||null}catch(Q){return console.error(`Error fetching latest version for ${A}:`,Q),null}}async getPackageInfo(A){let Q=await fetch(`${this.baseUrl}/${A}/json`);if(!Q.ok)throw new Error(`Failed to fetch package info for ${A}`);return Q.json()}async getDownloadCounts(A,Q="month"){try{let B=await fetch(`https://pypi.org/pypi/${A}/stats/${Q}`);if(!B.ok)throw new Error(`Failed to fetch download stats for ${A}`);return(await B.json()).data||[]}catch(B){return console.error(`Error fetching download counts for ${A}:`,B),[]}}}var KV=SV;class zV{name="homebrew";baseUrl="https://formulae.brew.sh/api";githubToken;constructor(A){this.githubToken=A}async getDownloadStats(A,Q){try{let B=await this.getPackageInfo(A),E=[];if(B.analytics?.install){let I=Q?.period||"30d",C=B.analytics.install[I];if(C){let g=Object.values(C).reduce((D,F)=>D+F,0);E.push({platform:"homebrew",packageName:A,formulaName:A,tapName:this.getTapName(A),version:B.version,installCount:g,downloadCount:g,metadata:{analyticsPeriod:I,analyticsData:C,dependencies:B.dependencies,conflicts:B.conflicts}})}}if(E.length===0)E.push({platform:"homebrew",packageName:A,formulaName:A,tapName:this.getTapName(A),version:B.version,installCount:B.installed.length,downloadCount:B.installed.length,metadata:{installedVersions:B.installed,dependencies:B.dependencies,conflicts:B.conflicts}});return E}catch(B){return console.error(`Error fetching Homebrew stats for ${A}:`,B),[]}}async getLatestVersion(A){try{return(await this.getPackageInfo(A)).version||null}catch(Q){return console.error(`Error fetching latest version for ${A}:`,Q),null}}async getPackageInfo(A){let Q=await fetch(`${this.baseUrl}/formula/${A}.json`);if(!Q.ok)throw new Error(`Failed to fetch formula info for ${A}`);return Q.json()}async getTapInfo(A){let Q=await fetch(`https://api.github.com/repos/Homebrew/${A}`,{headers:this.githubToken?{Authorization:`token ${this.githubToken}`,Accept:"application/vnd.github.v3+json"}:{Accept:"application/vnd.github.v3+json"}});if(!Q.ok)throw new Error(`Failed to fetch tap info for ${A}`);return Q.json()}async getAllFormulae(){try{let A=await fetch(`${this.baseUrl}/formula.json`);if(!A.ok)throw new Error("Failed to fetch all formulae");return(await A.json()).map((B)=>B.name)}catch(A){return console.error("Error fetching all formulae:",A),[]}}async getAnalytics(A,Q="30d"){try{let B=await fetch(`${this.baseUrl}/analytics/install/${Q}/${A}.json`);if(!B.ok)throw new Error(`Failed to fetch analytics for ${A}`);return(await B.json()).analytics||[]}catch(B){return console.error(`Error fetching analytics for ${A}:`,B),[]}}getTapName(A){return"homebrew/core"}}var HV=zV;class xV{name="powershell";baseUrl="https://www.powershellgallery.com/api/v2";async getDownloadStats(A,Q){try{let B=await this.getPackageInfo(A),E=[],I=await this.getAllVersions(A);for(let C of I){if(Q?.version&&C.Version!==Q.version)continue;let g=new Date(C.PublishedDate);if(Q?.startDate&&gQ.endDate)continue;E.push({platform:"powershell",packageName:A,moduleName:A,version:C.Version,author:C.Author,description:C.Description,tags:C.Tags,downloadCount:C.DownloadCount,publishedDate:g,metadata:{isLatestVersion:C.IsLatestVersion,dependencies:C.Dependencies,powershellVersion:C.PowerShellVersion,projectUri:C.ProjectUri,licenseUri:C.LicenseUri,releaseNotes:C.ReleaseNotes}})}return E}catch(B){return console.error(`Error fetching PowerShell stats for ${A}:`,B),[]}}async getLatestVersion(A){try{return(await this.getPackageInfo(A)).Version||null}catch(Q){return console.error(`Error fetching latest version for ${A}:`,Q),null}}async getPackageInfo(A){let Q=await fetch(`${this.baseUrl}/package/${A}`);if(!Q.ok)throw new Error(`Failed to fetch module info for ${A}`);return Q.json()}async getAllVersions(A){try{let Q=await fetch(`${this.baseUrl}/package/${A}/versions`);if(!Q.ok)throw new Error(`Failed to fetch versions for ${A}`);return Q.json()}catch(Q){return console.error(`Error fetching versions for ${A}:`,Q),[]}}async searchModules(A,Q){let B=new URLSearchParams({$filter:"IsLatestVersion eq true",$orderby:"DownloadCount desc",$skip:(Q?.skip||0).toString(),$top:(Q?.take||50).toString()});if(A)B.set("$filter",`${B.get("$filter")} and substringof('${A}', Id)`);let E=await fetch(`${this.baseUrl}/search?${B}`);if(!E.ok)throw new Error("Failed to search modules");return E.json()}async getPopularModules(A=50){try{return(await this.searchModules("",{take:A})).Results}catch(Q){return console.error("Error fetching popular modules:",Q),[]}}async getModuleAnalytics(A){try{let Q=await this.getAllVersions(A),B={},E=0;for(let C of Q)B[C.Version]=C.DownloadCount,E+=C.DownloadCount;let I=Q.map((C)=>({date:C.PublishedDate,downloads:C.DownloadCount}));return{totalDownloads:E,downloadsByVersion:B,downloadsByDate:I}}catch(Q){return console.error(`Error fetching analytics for ${A}:`,Q),{totalDownloads:0,downloadsByVersion:{},downloadsByDate:[]}}}}var $V=xV;class TV{name="postman";baseUrl="https://api.getpostman.com";apiKey;constructor(A){this.apiKey=A}async getDownloadStats(A,Q){try{let B=await this.getPackageInfo(A),E=[],I=await this.getCollectionVersions(A);for(let C of I){if(Q?.version&&C.version!==Q.version)continue;let g=new Date(C.publishedAt);if(Q?.startDate&&gQ.endDate)continue;E.push({platform:"postman",packageName:A,collectionId:A,collectionName:C.name,version:C.version,forkCount:C.forkCount||0,downloadCount:C.downloadCount||0,viewCount:C.viewCount||0,author:C.author?.name||"Unknown",publishedDate:g,metadata:{authorId:C.author?.id,authorUsername:C.author?.username,schema:C.schema,itemCount:C.item?.length||0}})}return E}catch(B){return console.error(`Error fetching Postman stats for ${A}:`,B),[]}}async getLatestVersion(A){try{return(await this.getPackageInfo(A)).version||null}catch(Q){return console.error(`Error fetching latest version for ${A}:`,Q),null}}async getPackageInfo(A){let Q={Accept:"application/json"};if(this.apiKey)Q["X-API-Key"]=this.apiKey;let B=await fetch(`${this.baseUrl}/collections/${A}`,{headers:Q});if(!B.ok)throw new Error(`Failed to fetch collection info for ${A}`);return B.json()}async getCollectionVersions(A){try{let Q={Accept:"application/json"};if(this.apiKey)Q["X-API-Key"]=this.apiKey;let B=await fetch(`${this.baseUrl}/collections/${A}/versions`,{headers:Q});if(!B.ok)throw new Error(`Failed to fetch versions for ${A}`);return B.json()}catch(Q){return console.error(`Error fetching versions for ${A}:`,Q),[]}}async searchCollections(A,Q){try{let B={Accept:"application/json"};if(this.apiKey)B["X-API-Key"]=this.apiKey;let E=new URLSearchParams({q:A,limit:(Q?.limit||50).toString(),offset:(Q?.offset||0).toString()});if(Q?.workspaceId)E.set("workspace",Q.workspaceId);let I=await fetch(`${this.baseUrl}/search?${E}`,{headers:B});if(!I.ok)throw new Error("Failed to search collections");return I.json()}catch(B){return console.error("Error searching collections:",B),{collections:[],totalCount:0}}}async getWorkspaceCollections(A){try{let Q={Accept:"application/json"};if(this.apiKey)Q["X-API-Key"]=this.apiKey;let B=await fetch(`${this.baseUrl}/workspaces/${A}/collections`,{headers:Q});if(!B.ok)throw new Error(`Failed to fetch workspace collections for ${A}`);return B.json()}catch(Q){return console.error(`Error fetching workspace collections for ${A}:`,Q),[]}}async getCollectionAnalytics(A){try{let Q=await this.getCollectionVersions(A),B={},E={},I=0,C=0,g=0;for(let D of Q)B[D.version]=D.downloadCount||0,E[D.version]=D.forkCount||0,I+=D.downloadCount||0,C+=D.forkCount||0,g+=D.viewCount||0;return{totalDownloads:I,totalForks:C,totalViews:g,downloadsByVersion:B,forksByVersion:E}}catch(Q){return console.error(`Error fetching analytics for ${A}:`,Q),{totalDownloads:0,totalForks:0,totalViews:0,downloadsByVersion:{},forksByVersion:{}}}}}var jV=TV;class yV{name="go";proxyUrl="https://proxy.golang.org";githubToken;constructor(A){this.githubToken=A}async getDownloadStats(A,Q){try{let B=await this.getModuleVersions(A),E=[];for(let I of B.Versions){if(Q?.version&&I!==Q.version)continue;let C=await this.getModuleInfo(A,I),g=new Date(C.Time);if(Q?.startDate&&gQ.endDate)continue;let D=await this.getEstimatedDownloads(A,I);E.push({platform:"go",packageName:A,moduleName:A,version:I,goVersion:C.GoVersion,downloadCount:D,publishedDate:g,goModHash:C.GoMod,metadata:{isMain:C.Main,isRetracted:C.Retracted,retractedReason:C.RetractedReason,goModHash:C.GoMod}})}return E}catch(B){return console.error(`Error fetching Go stats for ${A}:`,B),[]}}async getLatestVersion(A){try{let Q=await this.getModuleVersions(A);return Q.Versions[Q.Versions.length-1]||null}catch(Q){return console.error(`Error fetching latest version for ${A}:`,Q),null}}async getPackageInfo(A){let Q=await this.getLatestVersion(A);if(!Q)throw new Error(`No versions found for module ${A}`);return this.getModuleInfo(A,Q)}async getModuleVersions(A){let Q=await fetch(`${this.proxyUrl}/${A}/@v/list`);if(!Q.ok)throw new Error(`Failed to fetch versions for ${A}`);let E=(await Q.text()).trim().split(` -`).filter((C)=>C),I={};for(let C of E){let g=await fetch(`${this.proxyUrl}/${A}/@v/${C}.info`);if(g.ok){let D=await g.json();I[C]=D.Time}}return{Path:A,Versions:E,Time:I,Origin:{}}}async getModuleInfo(A,Q){let B=await fetch(`${this.proxyUrl}/${A}/@v/${Q}.info`);if(!B.ok)throw new Error(`Failed to fetch module info for ${A}@${Q}`);return B.json()}async getModuleZip(A,Q){let B=await fetch(`${this.proxyUrl}/${A}/@v/${Q}.zip`);if(!B.ok)throw new Error(`Failed to fetch module zip for ${A}@${Q}`);let E=await this.getModuleInfo(A,Q);return{Path:A,Version:Q,Mod:E,Zip:{Hash:"",Size:parseInt(B.headers.get("content-length")||"0")}}}async getEstimatedDownloads(A,Q){try{if(A.includes("github.com")){let I=A.replace("github.com/",""),C=await fetch(`https://api.github.com/repos/${I}`,{headers:this.githubToken?{Authorization:`token ${this.githubToken}`,Accept:"application/vnd.github.v3+json"}:{Accept:"application/vnd.github.v3+json"}});if(C.ok){let g=await C.json();return(g.stargazers_count||0)+(g.forks_count||0)}}let B=await this.getModuleInfo(A,Q),E=(Date.now()-new Date(B.Time).getTime())/86400000;return Math.max(1,Math.floor(100/(E+1)))}catch(B){return console.error(`Error estimating downloads for ${A}@${Q}:`,B),1}}async searchModules(A){try{let Q=await fetch(`https://api.github.com/search/repositories?q=${A}+language:go&sort=stars&order=desc`,{headers:this.githubToken?{Authorization:`token ${this.githubToken}`,Accept:"application/vnd.github.v3+json"}:{Accept:"application/vnd.github.v3+json"}});if(!Q.ok)throw new Error("Failed to search Go modules");return{modules:(await Q.json()).items.map((E)=>({path:`github.com/${E.full_name}`,version:"latest",time:E.created_at}))}}catch(Q){return console.error("Error searching Go modules:",Q),{modules:[]}}}async getModuleAnalytics(A){try{let Q=await this.getModuleVersions(A),B=Q.Versions[Q.Versions.length-1],E=new Date,I=new Date(0),C=0;for(let g of Q.Versions){let D=await this.getModuleInfo(A,g),F=new Date(D.Time);if(FI)I=F;C+=await this.getEstimatedDownloads(A,g)}return{totalVersions:Q.Versions.length,latestVersion:B||"",firstPublished:E,lastPublished:I,estimatedTotalDownloads:C}}catch(Q){return console.error(`Error fetching analytics for ${A}:`,Q),{totalVersions:0,latestVersion:"",firstPublished:new Date,lastPublished:new Date,estimatedTotalDownloads:0}}}}var _V=yV;class yY{trackers=new Map;config;constructor(A){this.config=A,this.initializeTrackers()}initializeTrackers(){this.trackers.set("npm",new $L),this.trackers.set("github",new hV(process.env.GITHUB_TOKEN)),this.trackers.set("pypi",new KV),this.trackers.set("homebrew",new HV(process.env.GITHUB_TOKEN)),this.trackers.set("powershell",new $V),this.trackers.set("postman",new jV(process.env.POSTMAN_API_KEY)),this.trackers.set("go",new _V(process.env.GITHUB_TOKEN))}async aggregateStats(A){let Q={},B=new Map,E=0,I=0,C=new Set;for(let D of A){E+=D.downloadCount,C.add(D.platform);let F=`${D.platform}:${D.packageName}`,J=B.get(F);if(J)J.downloads+=D.downloadCount;else B.set(F,{downloads:D.downloadCount,platform:D.platform}),I++;if(!Q[D.platform])Q[D.platform]={totalDownloads:0,uniquePackages:0,packages:[]};if(Q[D.platform].totalDownloads+=D.downloadCount,!Q[D.platform].packages.includes(D.packageName))Q[D.platform].packages.push(D.packageName),Q[D.platform].uniquePackages++}let g=Array.from(B.entries()).map(([D,F])=>({name:D.split(":")[1],platform:F.platform,downloads:F.downloads})).sort((D,F)=>F.downloads-D.downloads);return{totalDownloads:E,uniquePackages:I,platforms:Array.from(C),platformBreakdown:Q,topPackages:g}}async collectAllStats(){let A=[];if(this.config.npmPackages){let Q=this.config.npmPackages.map(async(E)=>{try{return await this.trackers.get("npm").getDownloadStats(E)}catch(I){return console.error(`Error collecting NPM stats for ${E}:`,I),[]}});(await Promise.all(Q)).forEach((E)=>A.push(...E))}if(this.config.githubRepos){let Q=this.config.githubRepos.map(async(E)=>{try{return await this.trackers.get("github").getDownloadStats(E)}catch(I){return console.error(`Error collecting GitHub stats for ${E}:`,I),[]}});(await Promise.all(Q)).forEach((E)=>A.push(...E))}if(this.config.pythonPackages){let Q=this.config.pythonPackages.map(async(E)=>{try{return await this.trackers.get("pypi").getDownloadStats(E)}catch(I){return console.error(`Error collecting PyPI stats for ${E}:`,I),[]}});(await Promise.all(Q)).forEach((E)=>A.push(...E))}if(this.config.homebrewPackages){let Q=this.config.homebrewPackages.map(async(E)=>{try{return await this.trackers.get("homebrew").getDownloadStats(E)}catch(I){return console.error(`Error collecting Homebrew stats for ${E}:`,I),[]}});(await Promise.all(Q)).forEach((E)=>A.push(...E))}if(this.config.powershellModules){let Q=this.config.powershellModules.map(async(E)=>{try{return await this.trackers.get("powershell").getDownloadStats(E)}catch(I){return console.error(`Error collecting PowerShell stats for ${E}:`,I),[]}});(await Promise.all(Q)).forEach((E)=>A.push(...E))}if(this.config.postmanCollections){let Q=this.config.postmanCollections.map(async(E)=>{try{return await this.trackers.get("postman").getDownloadStats(E)}catch(I){return console.error(`Error collecting Postman stats for ${E}:`,I),[]}});(await Promise.all(Q)).forEach((E)=>A.push(...E))}if(this.config.goModules){let Q=this.config.goModules.map(async(E)=>{try{return await this.trackers.get("go").getDownloadStats(E)}catch(I){return console.error(`Error collecting Go stats for ${E}:`,I),[]}});(await Promise.all(Q)).forEach((E)=>A.push(...E))}return A}async generateReport(){let A=await this.collectAllStats();return this.aggregateStats(A)}async getPlatformStats(A){let Q=this.trackers.get(A);if(!Q)throw new Error(`Unknown platform: ${A}`);let B=[],I=this.getPackagesForPlatform(A).map(async(g)=>{try{return await Q.getDownloadStats(g)}catch(D){return console.error(`Error collecting ${A} stats for ${g}:`,D),[]}});return(await Promise.all(I)).forEach((g)=>B.push(...g)),B}getPackagesForPlatform(A){switch(A){case"npm":return this.config.npmPackages||[];case"github":return this.config.githubRepos||[];case"pypi":return this.config.pythonPackages||[];case"homebrew":return this.config.homebrewPackages||[];case"powershell":return this.config.powershellModules||[];case"postman":return this.config.postmanCollections||[];case"go":return this.config.goModules||[];default:return[]}}}class _Y{aggregator;lastUpdateTime=null;constructor(A){this.aggregator=new yY(A)}async generateComprehensiveReport(){console.log(`\uD83D\uDCCA Generating comprehensive usage statistics report... -`);let A=await this.aggregator.collectAllStats(),Q=this.aggregator.aggregateStats(A);return this.lastUpdateTime=new Date,Q}async getPlatformReport(A){console.log(`\uD83D\uDCCA Generating ${A} platform report... -`);let Q=await this.aggregator.getPlatformStats(A),B=this.aggregator.aggregateStats(Q);return this.lastUpdateTime=new Date,B}async exportReport(A="json"){let Q=await this.generateComprehensiveReport();if(A==="csv")return`Platform,Package,Downloads -`+Q.topPackages.map((I)=>`${I.platform},${I.name},${I.downloads}`).join(` -`);return JSON.stringify(Q,null,2)}getLastUpdateTime(){return this.lastUpdateTime}async displayReport(A){console.log("\uD83D\uDCCA Usage Statistics Summary"),console.log(`================================================== -`),console.log("\uD83D\uDCC8 Overall Summary:"),console.log(`Total Downloads: ${A.totalDownloads.toLocaleString()}`),console.log(`Unique Packages: ${A.uniquePackages}`),console.log(`Platforms Tracked: ${A.platforms.join(", ")} -`),console.log("\uD83C\uDFD7๏ธ Platform Totals:");for(let[Q,B]of Object.entries(A.platformBreakdown))console.log(` ${Q.toUpperCase()}: ${B.totalDownloads.toLocaleString()} downloads (${B.uniquePackages} packages)`);console.log(""),console.log("\uD83C\uDFC6 Package Rankings:"),A.topPackages.forEach((Q,B)=>{console.log(` ${B+1}. ${Q.name} (${Q.platform}) - ${Q.downloads.toLocaleString()} downloads`)}),console.log("==================================================")}async generatePreviewReport(){console.log(`\uD83C\uDFAD Generating preview report with mock data... -`);let A=[{platform:"npm",packageName:"lodash",downloadCount:1500000,metadata:{version:"4.17.21"}},{platform:"npm",packageName:"axios",downloadCount:800000,metadata:{version:"1.6.0"}},{platform:"github",packageName:"microsoft/vscode",downloadCount:500000,metadata:{release:"v1.85.0"}},{platform:"pypi",packageName:"requests",downloadCount:300000,metadata:{version:"2.31.0"}},{platform:"homebrew",packageName:"git",downloadCount:250000,metadata:{version:"2.43.0"}},{platform:"powershell",packageName:"PowerShellGet",downloadCount:120000,metadata:{version:"2.2.5"}},{platform:"postman",packageName:"Postman Collection",downloadCount:75000,metadata:{collectionId:"12345"}},{platform:"go",packageName:"github.com/gin-gonic/gin",downloadCount:45000,metadata:{version:"v1.9.1"}}],Q=this.aggregator.aggregateStats(A);return this.lastUpdateTime=new Date,Q}}async function Ax(){try{let A=d.getInput("npm-packages"),Q=d.getInput("github-repositories"),B=d.getInput("pypi-packages"),E=d.getInput("homebrew-formulas"),I=d.getInput("powershell-modules"),C=d.getInput("postman-collections"),g=d.getInput("go-modules"),D=d.getInput("json-output-path"),F=d.getInput("csv-output-path"),J=d.getInput("report-output-path"),Y=d.getInput("update-readme")==="true",U=d.getInput("readme-path"),R=d.getInput("github-token"),w=d.getInput("postman-api-key"),W=d.getInput("commit-message"),V=d.getInput("preview-mode")==="true";if(R)process.env.GITHUB_TOKEN=R,d.info("\u2705 Using custom GitHub token for authentication");else if(process.env.GITHUB_TOKEN)d.info("\u2705 Using default GitHub token from environment");else d.warning("\u26A0\uFE0F No GitHub token provided. Some API calls may be rate limited.");if(w)process.env.POSTMAN_API_KEY=w;let S={enableLogging:!0,updateInterval:3600000,npmPackages:A?A.split(",").map((z)=>z.trim()).filter((z)=>z):[],githubRepos:Q?Q.split(",").map((z)=>z.trim()).filter((z)=>z):[],pythonPackages:B?B.split(",").map((z)=>z.trim()).filter((z)=>z):[],homebrewPackages:E?E.split(",").map((z)=>z.trim()).filter((z)=>z):[],powershellModules:I?I.split(",").map((z)=>z.trim()).filter((z)=>z):[],postmanCollections:C?C.split(",").map((z)=>z.trim()).filter((z)=>z):[],goModules:g?g.split(",").map((z)=>z.trim()).filter((z)=>z):[]};if((S.npmPackages?.length||0)+(S.githubRepos?.length||0)+(S.pythonPackages?.length||0)+(S.homebrewPackages?.length||0)+(S.powershellModules?.length||0)+(S.postmanCollections?.length||0)+(S.goModules?.length||0)===0&&!V)d.warning("No packages configured for tracking. Consider adding packages to track or enabling preview mode.");let x=new _Y(S),q;if(V)d.info("\uD83C\uDFAD Running in preview mode with mock data..."),q=await x.generatePreviewReport();else d.info("\uD83D\uDCCA Generating comprehensive usage statistics report..."),q=await x.generateComprehensiveReport();if(await x.displayReport(q),D){let z=JSON.stringify(q,null,2);await NE.writeFile(D,z),d.info(`\uD83D\uDCC4 JSON report written to ${D}`),d.setOutput("json-output",D)}if(F){let z=await x.exportReport("csv");await NE.writeFile(F,z),d.info(`\uD83D\uDCCA CSV report written to ${F}`),d.setOutput("csv-output",F)}if(J){let z=await Qx(q);await NE.writeFile(J,z),d.info(`\uD83D\uDCCB Human-readable report written to ${J}`),d.setOutput("report-output",J)}if(Y&&U)try{await Bx(q,U),d.info(`\uD83D\uDCDD README updated at ${U}`)}catch(z){d.warning(`Failed to update README: ${z}`)}d.setOutput("total-downloads",q.totalDownloads.toString()),d.setOutput("unique-packages",q.uniquePackages.toString()),d.setOutput("platforms-tracked",q.platforms.join(",")),d.info("\u2705 Usage Statistics Tracker completed successfully!")}catch(A){d.setFailed(`Action failed: ${A}`)}}async function Qx(A){let Q=`# Usage Statistics Summary - -`;Q+=`Generated on: ${new Date().toISOString()} - -`,Q+=`## Overall Summary - -`,Q+=`- **Total Downloads**: ${A.totalDownloads.toLocaleString()} -`,Q+=`- **Unique Packages**: ${A.uniquePackages} -`,Q+=`- **Platforms Tracked**: ${A.platforms.join(", ")} - -`,Q+=`## Platform Totals - -`;for(let[B,E]of Object.entries(A.platformBreakdown))Q+=`### ${B.toUpperCase()} -`,Q+=`- **Downloads**: ${E.totalDownloads.toLocaleString()} -`,Q+=`- **Packages**: ${E.uniquePackages} - -`;return Q+=`## Package Rankings - -`,A.topPackages.forEach((B,E)=>{Q+=`${E+1}. **${B.name}** (${B.platform}) - ${B.downloads.toLocaleString()} downloads -`}),Q}async function Bx(A,Q){try{let I=await NE.readFile(Q,"utf-8"),C=` -## \uD83D\uDCCA Usage Statistics - -Last updated: ${new Date().toISOString()} - -### Summary -- **Total Downloads**: ${A.totalDownloads.toLocaleString()} -- **Unique Packages**: ${A.uniquePackages} -- **Platforms Tracked**: ${A.platforms.join(", ")} - -### Platform Totals -${Object.entries(A.platformBreakdown).map(([F,J])=>`- **${F.toUpperCase()}**: ${J.totalDownloads.toLocaleString()} downloads (${J.uniquePackages} packages)`).join(` -`)} - -### Top Packages -${A.topPackages.map((F,J)=>`${J+1}. **${F.name}** (${F.platform}) - ${F.downloads.toLocaleString()} downloads`).join(` -`)} -`,g=I.indexOf(""),D=I.indexOf("");if(g!==-1&&D!==-1){let F=I.substring(0,g+26),J=I.substring(D),Y=F+C+J;await NE.writeFile(Q,Y)}else d.warning("Stats markers not found in README. Please add and markers.")}catch(I){throw new Error(`Failed to update README: ${I}`)}}if(M.main==M.module)Ax(); diff --git a/dist/index.js b/dist/index.js deleted file mode 100755 index fe48306..0000000 --- a/dist/index.js +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bun -// @bun - -// src/index.ts -class UsageStatistics { - data = []; - addUsage(userId, action, metadata) { - const record = { - timestamp: new Date, - userId, - action, - metadata - }; - this.data.push(record); - } - getAllData() { - return [...this.data]; - } - getUserData(userId) { - return this.data.filter((record) => record.userId === userId); - } - getActionData(action) { - return this.data.filter((record) => record.action === action); - } - getStatistics() { - if (this.data.length === 0) { - return { - totalRecords: 0, - uniqueUsers: 0, - uniqueActions: 0, - timeRange: null - }; - } - const uniqueUsers = new Set(this.data.map((record) => record.userId)).size; - const uniqueActions = new Set(this.data.map((record) => record.action)).size; - const timestamps = this.data.map((record) => record.timestamp); - const start = new Date(Math.min(...timestamps.map((t) => t.getTime()))); - const end = new Date(Math.max(...timestamps.map((t) => t.getTime()))); - return { - totalRecords: this.data.length, - uniqueUsers, - uniqueActions, - timeRange: { start, end } - }; - } -} -async function main() { - console.log(`\uD83D\uDE80 Usage Statistics Script Starting... -`); - const stats = new UsageStatistics; - stats.addUsage("user1", "login", { browser: "chrome" }); - stats.addUsage("user2", "login", { browser: "firefox" }); - stats.addUsage("user1", "view_page", { page: "/dashboard" }); - stats.addUsage("user3", "login", { browser: "safari" }); - stats.addUsage("user2", "logout"); - const summary = stats.getStatistics(); - console.log("\uD83D\uDCCA Usage Statistics Summary:"); - console.log(`Total Records: ${summary.totalRecords}`); - console.log(`Unique Users: ${summary.uniqueUsers}`); - console.log(`Unique Actions: ${summary.uniqueActions}`); - if (summary.timeRange) { - console.log(`Time Range: ${summary.timeRange.start.toISOString()} to ${summary.timeRange.end.toISOString()}`); - } - console.log(` -\uD83D\uDC65 User Data:`); - const userData = stats.getUserData("user1"); - console.log(`User1 actions: ${userData.map((d) => d.action).join(", ")}`); - console.log(` -\uD83C\uDFAF Action Data:`); - const loginData = stats.getActionData("login"); - console.log(`Login events: ${loginData.length}`); - console.log(` -\u2705 Script completed successfully!`); -} -if (import.meta.main) { - main().catch(console.error); -} -export { - UsageStatistics -}; diff --git a/examples/basic-usage.yml b/examples/basic-usage.yml deleted file mode 100644 index 2258134..0000000 --- a/examples/basic-usage.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Update Usage Statistics - -on: - schedule: - - cron: '0 0 * * *' # Daily at midnight - workflow_dispatch: # Allow manual triggering - -jobs: - update-stats: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Usage Statistics Tracker - uses: LukeHagar/usage-statistics@v1 - with: - npm-packages: 'lodash,axios' - github-repositories: 'microsoft/vscode,facebook/react' - pypi-packages: 'requests,numpy' - homebrew-formulas: 'git,node' - powershell-modules: 'PowerShellGet,PSReadLine' - postman-collections: '12345,67890' - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' - json-output-path: 'stats.json' - csv-output-path: 'stats.csv' - report-output-path: 'docs/usage-report.md' - update-readme: 'true' - readme-path: 'README.md' - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Commit and push changes - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git add stats.json stats.csv docs/usage-report.md README.md - git commit -m "chore: update usage statistics [skip ci]" || echo "No changes to commit" - git push \ No newline at end of file diff --git a/examples/input-based-config.yml b/examples/input-based-config.yml deleted file mode 100644 index e1892b6..0000000 --- a/examples/input-based-config.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Usage Statistics with Input-Based Configuration - -on: - schedule: - - cron: '0 0 * * *' # Daily at midnight - workflow_dispatch: - -jobs: - update-stats: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Usage Statistics Tracker - uses: LukeHagar/usage-statistics@v1 - with: - # NPM packages to track - npm-packages: 'lodash,axios,react,vue' - - # GitHub repositories to track - github-repositories: 'microsoft/vscode,facebook/react,vercel/next.js' - - # PyPI packages to track - pypi-packages: 'requests,numpy,pandas' - - # Homebrew formulas to track - homebrew-formulas: 'git,node,postgresql' - - # PowerShell modules to track - powershell-modules: 'PowerShellGet,PSReadLine' - - # Go modules to track - go-modules: 'github.com/gin-gonic/gin,github.com/go-chi/chi' - - # Output configuration - json-output-path: 'data/stats.json' - csv-output-path: 'data/stats.csv' - report-output-path: 'docs/usage-report.md' - - # README integration - update-readme: 'true' - readme-path: 'README.md' - - # API tokens - github-token: ${{ secrets.GITHUB_TOKEN }} - postman-api-key: ${{ secrets.POSTMAN_API_KEY }} - - # Commit settings - commit-message: 'feat: update usage statistics with detailed report' - - - name: Commit and push changes - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git add data/stats.json data/stats.csv docs/usage-report.md README.md - git commit -m "chore: update usage statistics [skip ci]" || echo "No changes to commit" - git push \ No newline at end of file diff --git a/package.json b/package.json index b3c3135..0ae44ed 100644 --- a/package.json +++ b/package.json @@ -9,24 +9,29 @@ "homepage": "https://github.com/LukeHagar/usage-statistics#readme", "main": "src/index.ts", "scripts": { - "start": "bun run src/index.ts", - "preview": "bun run src/index.ts --preview", - "dev": "bun --watch src/index.ts", - "build": "bun build src/index.ts --outdir dist", - "test": "bun test", - "action:build": "bun build src/action.ts --outdir dist --target node --minify", - "action:test": "bun test && bun run action:build" + "dev": "bun --watch --env-file=.dev.env --env-file=.env run src/action.ts", + "test:pypi": "bun run test-pypi-bigquery.ts", + "test:pypi-detailed": "bun run test-pypi-detailed.ts" }, "devDependencies": { + "@types/bun": "latest", "@types/node": "^20.0.0", "bun-types": "1.2.19", "typescript": "^5.0.0" }, "dependencies": { "@actions/core": "1.11.1", - "@octokit/rest": "22.0.0", + "@actions/github": "6.0.1", + "@google-cloud/bigquery": "^7.0.0", + "@octokit/graphql": "^7.0.0", "@octokit/plugin-retry": "^7.0.0", - "@octokit/plugin-throttling": "^7.0.0" + "@octokit/plugin-throttling": "^7.0.0", + "@octokit/rest": "22.0.0", + "chart.js": "^4.5.0", + "chartjs-adapter-moment": "1.0.1", + "fast-xml-parser": "5.2.5", + "moment": "2.30.1", + "skia-canvas": "^2.0.2" }, "engines": { "bun": ">=1.0.0" @@ -47,5 +52,6 @@ "usage" ], "author": "LukeHagar", - "license": "MIT" -} \ No newline at end of file + "license": "MIT", + "private": true +} diff --git a/src/action.ts b/src/action.ts index 91f3f4b..c996214 100644 --- a/src/action.ts +++ b/src/action.ts @@ -1,206 +1,112 @@ -#!/usr/bin/env bun -import * as core from '@actions/core'; -import * as fs from 'fs/promises'; -import * as path from 'path'; -import { UsageStatisticsManager } from './index'; -import type { TrackingConfig } from './types'; +import * as core from '@actions/core' +import { collectNpmBatch } from './collectors/npm' +import { collectGithubBatch } from './collectors/github' +import { collectPowerShellBatch } from './collectors/powershell' +import { collectPypiBatch } from './collectors/pypi' +import type { MetricResult } from './collectors/types' +import { getInputs, updateRepositoryReadme } from './utils' +import { writeFile } from 'fs/promises' -async function run() { - try { - // Get inputs - const npmPackages = core.getInput('npm-packages'); - const githubRepositories = core.getInput('github-repositories'); - const pypiPackages = core.getInput('pypi-packages'); - const homebrewFormulas = core.getInput('homebrew-formulas'); - const powershellModules = core.getInput('powershell-modules'); - const postmanCollections = core.getInput('postman-collections'); - const goModules = core.getInput('go-modules'); - - const jsonOutputPath = core.getInput('json-output-path'); - const csvOutputPath = core.getInput('csv-output-path'); - const reportOutputPath = core.getInput('report-output-path'); - const updateReadme = core.getInput('update-readme') === 'true'; - const readmePath = core.getInput('readme-path'); - const githubToken = core.getInput('github-token'); - const postmanApiKey = core.getInput('postman-api-key'); - const commitMessage = core.getInput('commit-message'); - const previewMode = core.getInput('preview-mode') === 'true'; +try { + const { + npmPackages, + githubRepositories, + pypiPackages, + powershellModules, + jsonOutputPath, + updateReadme, + commitMessage, + readmePath, + } = getInputs() - // Set environment variables - if (githubToken) { - process.env.GITHUB_TOKEN = githubToken; - core.info('โœ… Using custom GitHub token for authentication'); - } else if (process.env.GITHUB_TOKEN) { - // Use the default GitHub token if no custom token provided - core.info('โœ… Using default GitHub token from environment'); - } else { - core.warning('โš ๏ธ No GitHub token provided. Some API calls may be rate limited.'); - } - - if (postmanApiKey) { - process.env.POSTMAN_API_KEY = postmanApiKey; + // Debug logs are only output if the `ACTIONS_STEP_DEBUG` secret is true + core.debug(`NPM Packages: ${npmPackages.join(', ')}`) + core.debug(`GitHub Repositories: ${githubRepositories.join(', ')}`) + core.debug(`PyPI Packages: ${pypiPackages.join(', ')}`) + core.debug(`PowerShell Modules: ${powershellModules.join(', ')}`) + core.debug(``) + core.debug(`JSON Output Path: ${jsonOutputPath}`) + core.debug(`Update README: ${updateReadme}`) + core.debug(`Commit Message: ${commitMessage}`) + + // Track which platforms are being used + const platformsTracked: string[] = [] + if (npmPackages.length > 0) platformsTracked.push('NPM') + if (githubRepositories.length > 0) platformsTracked.push('GitHub') + if (pypiPackages.length > 0) platformsTracked.push('PyPI') + if (powershellModules.length > 0) platformsTracked.push('PowerShell') + + core.debug(`Platforms to track: ${platformsTracked.join(', ')}`) + + core.info(`Successfully configured usage statistics tracker for ${platformsTracked.length} platforms`) + + const metricPromises: Promise[] = [] + const metrics: MetricResult[] = [] + + for (const platform of platformsTracked) { + core.info(`Collecting ${platform} metrics...`) + switch (platform) { + case 'NPM': + console.log(`Collecting NPM metrics for ${npmPackages.join(', ')}`) + console.time(`Collecting NPM metrics`) + metricPromises.push(collectNpmBatch(npmPackages).then(results => { + console.timeEnd(`Collecting NPM metrics`) + return results + })) + break + case 'GitHub': + console.log(`Collecting GitHub metrics for ${githubRepositories.join(', ')}`) + console.time(`Collecting GitHub metrics`) + metricPromises.push(collectGithubBatch(githubRepositories).then(results => { + console.timeEnd(`Collecting GitHub metrics`) + return results + })) + break + case 'PyPI': + console.log(`Collecting PyPI metrics for ${pypiPackages.join(', ')}`) + console.time(`Collecting PyPI metrics`) + metricPromises.push(collectPypiBatch(pypiPackages).then(results => { + console.timeEnd(`Collecting PyPI metrics`) + return results + })) + break + case 'PowerShell': + console.log(`Collecting PowerShell metrics for ${powershellModules.join(', ')}`) + console.time(`Collecting PowerShell metrics`) + metricPromises.push(collectPowerShellBatch(powershellModules).then(results => { + console.timeEnd(`Collecting PowerShell metrics`) + return results + })) + break + } } - // Build configuration from inputs - const trackingConfig: TrackingConfig = { - enableLogging: true, - updateInterval: 60 * 60 * 1000, // 1 hour - npmPackages: npmPackages ? npmPackages.split(',').map(p => p.trim()).filter(p => p) : [], - githubRepos: githubRepositories ? githubRepositories.split(',').map(r => r.trim()).filter(r => r) : [], - pythonPackages: pypiPackages ? pypiPackages.split(',').map(p => p.trim()).filter(p => p) : [], - homebrewPackages: homebrewFormulas ? homebrewFormulas.split(',').map(f => f.trim()).filter(f => f) : [], - powershellModules: powershellModules ? powershellModules.split(',').map(m => m.trim()).filter(m => m) : [], - postmanCollections: postmanCollections ? postmanCollections.split(',').map(c => c.trim()).filter(c => c) : [], - goModules: goModules ? goModules.split(',').map(m => m.trim()).filter(m => m) : [] - }; + console.log('All metrics collecting started') - // Validate that at least one platform has packages configured - const totalPackages = (trackingConfig.npmPackages?.length || 0) + - (trackingConfig.githubRepos?.length || 0) + - (trackingConfig.pythonPackages?.length || 0) + - (trackingConfig.homebrewPackages?.length || 0) + - (trackingConfig.powershellModules?.length || 0) + - (trackingConfig.postmanCollections?.length || 0) + - (trackingConfig.goModules?.length || 0); + const metricResults = await Promise.all(metricPromises) + metrics.push(...metricResults.flat()) - if (totalPackages === 0 && !previewMode) { - core.warning('No packages configured for tracking. Consider adding packages to track or enabling preview mode.'); + console.log('All metrics collecting completed') + + if (updateReadme) { + console.log('Updating repository readme...') + await updateRepositoryReadme(metrics, readmePath) } - // Create manager - const manager = new UsageStatisticsManager(trackingConfig); - - // Generate report - let report; - if (previewMode) { - core.info('๐ŸŽญ Running in preview mode with mock data...'); - report = await manager.generatePreviewReport(); - } else { - core.info('๐Ÿ“Š Generating comprehensive usage statistics report...'); - report = await manager.generateComprehensiveReport(); - } - - // Display report - await manager.displayReport(report); - - // Write JSON output - if (jsonOutputPath) { - const jsonContent = JSON.stringify(report, null, 2); - await fs.writeFile(jsonOutputPath, jsonContent); - core.info(`๐Ÿ“„ JSON report written to ${jsonOutputPath}`); - core.setOutput('json-output', jsonOutputPath); + console.log('Repository readme updated') + + // Persist full result set to JSON for downstream consumption + try { + await writeFile(jsonOutputPath, JSON.stringify(metrics, null, 2), 'utf8') + core.setOutput('json-output', jsonOutputPath) + console.log(`Wrote metrics JSON to ${jsonOutputPath}`) + } catch (writeErr) { + console.warn(`Failed to write metrics JSON to ${jsonOutputPath}:`, writeErr) } - // Write CSV output - if (csvOutputPath) { - const csvReport = await manager.exportReport('csv'); - await fs.writeFile(csvOutputPath, csvReport); - core.info(`๐Ÿ“Š CSV report written to ${csvOutputPath}`); - core.setOutput('csv-output', csvOutputPath); - } - - // Write human-readable report - if (reportOutputPath) { - const reportContent = await generateHumanReadableReport(report); - await fs.writeFile(reportOutputPath, reportContent); - core.info(`๐Ÿ“‹ Human-readable report written to ${reportOutputPath}`); - core.setOutput('report-output', reportOutputPath); - } - - // Update README if requested - if (updateReadme && readmePath) { - try { - await updateReadmeWithStats(report, readmePath); - core.info(`๐Ÿ“ README updated at ${readmePath}`); - } catch (error) { - core.warning(`Failed to update README: ${error}`); - } - } - - // Set outputs - core.setOutput('total-downloads', report.totalDownloads.toString()); - core.setOutput('unique-packages', report.uniquePackages.toString()); - core.setOutput('platforms-tracked', report.platforms.join(',')); - - core.info('โœ… Usage Statistics Tracker completed successfully!'); - - } catch (error) { - core.setFailed(`Action failed: ${error}`); - } + core.setOutput('commit-message', commitMessage) +} catch (error) { + // Fail the workflow run if an error occurs + if (error instanceof Error) core.setFailed(error.message) } -async function generateHumanReadableReport(report: any): Promise { - let content = '# Usage Statistics Summary\n\n'; - content += `Generated on: ${new Date().toISOString()}\n\n`; - - // Overall Summary - content += '## Overall Summary\n\n'; - content += `- **Total Downloads**: ${report.totalDownloads.toLocaleString()}\n`; - content += `- **Unique Packages**: ${report.uniquePackages}\n`; - content += `- **Platforms Tracked**: ${report.platforms.join(', ')}\n\n`; - - // Platform Totals - content += '## Platform Totals\n\n'; - for (const [platform, data] of Object.entries(report.platformBreakdown)) { - content += `### ${platform.toUpperCase()}\n`; - content += `- **Downloads**: ${data.totalDownloads.toLocaleString()}\n`; - content += `- **Packages**: ${data.uniquePackages}\n\n`; - } - - // Package Rankings - content += '## Package Rankings\n\n'; - report.topPackages.forEach((pkg: any, index: number) => { - content += `${index + 1}. **${pkg.name}** (${pkg.platform}) - ${pkg.downloads.toLocaleString()} downloads\n`; - }); - - return content; -} - -async function updateReadmeWithStats(report: any, readmePath: string) { - const STATS_MARKER_START = ''; - const STATS_MARKER_END = ''; - - try { - const readmeContent = await fs.readFile(readmePath, 'utf-8'); - - const statsSection = ` -## ๐Ÿ“Š Usage Statistics - -Last updated: ${new Date().toISOString()} - -### Summary -- **Total Downloads**: ${report.totalDownloads.toLocaleString()} -- **Unique Packages**: ${report.uniquePackages} -- **Platforms Tracked**: ${report.platforms.join(', ')} - -### Platform Totals -${Object.entries(report.platformBreakdown).map(([platform, data]: [string, any]) => - `- **${platform.toUpperCase()}**: ${data.totalDownloads.toLocaleString()} downloads (${data.uniquePackages} packages)` -).join('\n')} - -### Top Packages -${report.topPackages.map((pkg: any, index: number) => - `${index + 1}. **${pkg.name}** (${pkg.platform}) - ${pkg.downloads.toLocaleString()} downloads` -).join('\n')} -`; - - const startMarker = readmeContent.indexOf(STATS_MARKER_START); - const endMarker = readmeContent.indexOf(STATS_MARKER_END); - - if (startMarker !== -1 && endMarker !== -1) { - const beforeStats = readmeContent.substring(0, startMarker + STATS_MARKER_START.length); - const afterStats = readmeContent.substring(endMarker); - const updatedContent = beforeStats + statsSection + afterStats; - await fs.writeFile(readmePath, updatedContent); - } else { - core.warning(`Stats markers not found in README. Please add ${STATS_MARKER_START} and ${STATS_MARKER_END} markers.`); - } - } catch (error) { - throw new Error(`Failed to update README: ${error}`); - } -} - -// Run the action -if (import.meta.main) { - run(); -} \ No newline at end of file diff --git a/src/aggregator.ts b/src/aggregator.ts deleted file mode 100644 index b347435..0000000 --- a/src/aggregator.ts +++ /dev/null @@ -1,289 +0,0 @@ -/** - * Download Statistics Aggregator - * Combines and analyzes statistics from all platform trackers - */ - -import type { BaseDownloadStats, TrackingConfig } from './types'; -import NpmTracker from './trackers/npm'; -import GitHubTracker from './trackers/github'; -import PyPiTracker from './trackers/pypi'; -import HomebrewTracker from './trackers/homebrew'; -import PowerShellTracker from './trackers/powershell'; -import PostmanTracker from './trackers/postman'; -import GoTracker from './trackers/go'; - -export interface AggregatedStats { - totalDownloads: number; - uniquePackages: number; - platforms: string[]; - platformBreakdown: Record; - topPackages: Array<{ - name: string; - platform: string; - downloads: number; - }>; -} - -export class DownloadStatsAggregator { - private trackers: Map = new Map(); - private config: TrackingConfig; - - constructor(config: TrackingConfig) { - this.config = config; - this.initializeTrackers(); - } - - private initializeTrackers() { - // Initialize all trackers - this.trackers.set('npm', new NpmTracker()); - this.trackers.set('github', new GitHubTracker(process.env.GITHUB_TOKEN)); - this.trackers.set('pypi', new PyPiTracker()); - this.trackers.set('homebrew', new HomebrewTracker(process.env.GITHUB_TOKEN)); - this.trackers.set('powershell', new PowerShellTracker()); - this.trackers.set('postman', new PostmanTracker(process.env.POSTMAN_API_KEY)); - this.trackers.set('go', new GoTracker(process.env.GITHUB_TOKEN)); - } - - async aggregateStats(stats: BaseDownloadStats[]): Promise { - const platformBreakdown: Record = {}; - - const packageMap = new Map(); - - let totalDownloads = 0; - let uniquePackages = 0; - const platforms = new Set(); - - // Process each stat - for (const stat of stats) { - totalDownloads += stat.downloadCount; - platforms.add(stat.platform); - - // Track package downloads - const packageKey = `${stat.platform}:${stat.packageName}`; - const existing = packageMap.get(packageKey); - if (existing) { - existing.downloads += stat.downloadCount; - } else { - packageMap.set(packageKey, { downloads: stat.downloadCount, platform: stat.platform }); - uniquePackages++; - } - - // Update platform breakdown - if (!platformBreakdown[stat.platform]) { - platformBreakdown[stat.platform] = { - totalDownloads: 0, - uniquePackages: 0, - packages: [] - }; - } - platformBreakdown[stat.platform].totalDownloads += stat.downloadCount; - if (!platformBreakdown[stat.platform].packages.includes(stat.packageName)) { - platformBreakdown[stat.platform].packages.push(stat.packageName); - platformBreakdown[stat.platform].uniquePackages++; - } - } - - // Get top packages - const topPackages = Array.from(packageMap.entries()) - .map(([key, data]) => ({ - name: key.split(':')[1], - platform: data.platform, - downloads: data.downloads - })) - .sort((a, b) => b.downloads - a.downloads); - - return { - totalDownloads, - uniquePackages, - platforms: Array.from(platforms), - platformBreakdown, - topPackages - }; - } - - async collectAllStats(): Promise { - const allStats: BaseDownloadStats[] = []; - - // Collect NPM stats - if (this.config.npmPackages) { - const npmPromises = this.config.npmPackages.map(async packageName => { - try { - const npmTracker = this.trackers.get('npm'); - const stats = await npmTracker.getDownloadStats(packageName); - return stats; - } catch (error) { - console.error(`Error collecting NPM stats for ${packageName}:`, error); - return []; - } - }); - - const npmResults = await Promise.all(npmPromises); - npmResults.forEach(stats => allStats.push(...stats)); - } - - // Collect GitHub stats (Octokit plugins handle rate limiting) - if (this.config.githubRepos) { - const githubPromises = this.config.githubRepos.map(async repo => { - try { - const githubTracker = this.trackers.get('github'); - const stats = await githubTracker.getDownloadStats(repo); - return stats; - } catch (error) { - console.error(`Error collecting GitHub stats for ${repo}:`, error); - return []; - } - }); - - const githubResults = await Promise.all(githubPromises); - githubResults.forEach(stats => allStats.push(...stats)); - } - - // Collect PyPI stats - if (this.config.pythonPackages) { - const pypiPromises = this.config.pythonPackages.map(async packageName => { - try { - const pypiTracker = this.trackers.get('pypi'); - const stats = await pypiTracker.getDownloadStats(packageName); - return stats; - } catch (error) { - console.error(`Error collecting PyPI stats for ${packageName}:`, error); - return []; - } - }); - - const pypiResults = await Promise.all(pypiPromises); - pypiResults.forEach(stats => allStats.push(...stats)); - } - - // Collect Homebrew stats - if (this.config.homebrewPackages) { - const homebrewPromises = this.config.homebrewPackages.map(async packageName => { - try { - const homebrewTracker = this.trackers.get('homebrew'); - const stats = await homebrewTracker.getDownloadStats(packageName); - return stats; - } catch (error) { - console.error(`Error collecting Homebrew stats for ${packageName}:`, error); - return []; - } - }); - - const homebrewResults = await Promise.all(homebrewPromises); - homebrewResults.forEach(stats => allStats.push(...stats)); - } - - // Collect PowerShell stats - if (this.config.powershellModules) { - const powershellPromises = this.config.powershellModules.map(async moduleName => { - try { - const powershellTracker = this.trackers.get('powershell'); - const stats = await powershellTracker.getDownloadStats(moduleName); - return stats; - } catch (error) { - console.error(`Error collecting PowerShell stats for ${moduleName}:`, error); - return []; - } - }); - - const powershellResults = await Promise.all(powershellPromises); - powershellResults.forEach(stats => allStats.push(...stats)); - } - - // Collect Postman stats - if (this.config.postmanCollections) { - const postmanPromises = this.config.postmanCollections.map(async collectionId => { - try { - const postmanTracker = this.trackers.get('postman'); - const stats = await postmanTracker.getDownloadStats(collectionId); - return stats; - } catch (error) { - console.error(`Error collecting Postman stats for ${collectionId}:`, error); - return []; - } - }); - - const postmanResults = await Promise.all(postmanPromises); - postmanResults.forEach(stats => allStats.push(...stats)); - } - - // Collect Go stats - if (this.config.goModules) { - const goPromises = this.config.goModules.map(async moduleName => { - try { - const goTracker = this.trackers.get('go'); - const stats = await goTracker.getDownloadStats(moduleName); - return stats; - } catch (error) { - console.error(`Error collecting Go stats for ${moduleName}:`, error); - return []; - } - }); - - const goResults = await Promise.all(goPromises); - goResults.forEach(stats => allStats.push(...stats)); - } - - return allStats; - } - - async generateReport(): Promise { - const allStats = await this.collectAllStats(); - return this.aggregateStats(allStats); - } - - async getPlatformStats(platform: string): Promise { - const tracker = this.trackers.get(platform); - if (!tracker) { - throw new Error(`Unknown platform: ${platform}`); - } - - const allStats: BaseDownloadStats[] = []; - const packages = this.getPackagesForPlatform(platform); - - const promises = packages.map(async packageName => { - try { - const stats = await tracker.getDownloadStats(packageName); - return stats; - } catch (error) { - console.error(`Error collecting ${platform} stats for ${packageName}:`, error); - return []; - } - }); - - const results = await Promise.all(promises); - results.forEach(stats => allStats.push(...stats)); - - return allStats; - } - - private getPackagesForPlatform(platform: string): string[] { - switch (platform) { - case 'npm': - return this.config.npmPackages || []; - case 'github': - return this.config.githubRepos || []; - case 'pypi': - return this.config.pythonPackages || []; - case 'homebrew': - return this.config.homebrewPackages || []; - case 'powershell': - return this.config.powershellModules || []; - case 'postman': - return this.config.postmanCollections || []; - case 'go': - return this.config.goModules || []; - default: - return []; - } - } -} - -export default DownloadStatsAggregator; \ No newline at end of file diff --git a/src/collectors/github.ts b/src/collectors/github.ts new file mode 100644 index 0000000..bcaa35f --- /dev/null +++ b/src/collectors/github.ts @@ -0,0 +1,366 @@ +/** + * GitHub repository statistics collector with enhanced metrics using Octokit SDK and GraphQL + */ + +import { Octokit } from '@octokit/rest'; +import { graphql } from '@octokit/graphql'; +import type { MetricResult } from './types'; + +const PlatformSettings = { + name: 'GitHub', +} + +// GraphQL query for basic repository data (without releases) +const REPOSITORY_BASIC_QUERY = ` + query RepositoryBasicData($owner: String!, $name: String!) { + repository(owner: $owner, name: $name) { + id + name + description + homepageUrl + stargazerCount + forkCount + watchers { + totalCount + } + openIssues: issues(states: OPEN) { + totalCount + } + closedIssues: issues(states: CLOSED) { + totalCount + } + primaryLanguage { + name + } + diskUsage + createdAt + updatedAt + pushedAt + defaultBranchRef { + name + } + repositoryTopics(first: 10) { + nodes { + topic { + name + } + } + } + licenseInfo { + name + spdxId + } + } + } +`; + +// GraphQL query for releases with download data +const RELEASES_QUERY = ` + query RepositoryReleases($owner: String!, $name: String!, $first: Int!) { + repository(owner: $owner, name: $name) { + releases(first: $first, orderBy: {field: CREATED_AT, direction: DESC}) { + nodes { + id + tagName + name + description + createdAt + publishedAt + releaseAssets(first: 100) { + nodes { + id + name + size + downloadCount + downloadUrl + } + } + } + } + } + } +`; + +// Interface for basic repository data +interface GraphQLRepositoryBasicResponse { + repository: { + id: string; + name: string; + description: string | null; + homepageUrl: string | null; + stargazerCount: number; + forkCount: number; + watchers: { + totalCount: number; + }; + openIssues: { + totalCount: number; + }; + closedIssues: { + totalCount: number; + }; + primaryLanguage: { + name: string; + } | null; + diskUsage: number; + createdAt: string; + updatedAt: string; + pushedAt: string; + defaultBranchRef: { + name: string; + } | null; + repositoryTopics: { + nodes: Array<{ + topic: { + name: string; + }; + }>; + }; + licenseInfo: { + name: string; + spdxId: string; + } | null; + } | null; +} + +// Interface for releases data +interface GraphQLReleasesResponse { + repository: { + releases: { + nodes: Array<{ + id: string; + tagName: string; + name: string | null; + description: string | null; + createdAt: string; + publishedAt: string | null; + releaseAssets: { + nodes: Array<{ + id: string; + name: string; + size: number; + downloadCount: number; + downloadUrl: string; + } | null>; + }; + } | null>; + }; + } | null; +} + + + export async function collectGithub(repository: string): Promise { + try { + const [owner, repo] = repository.split('/'); + + if (!owner || !repo) { + throw new Error(`Invalid repository format: ${repository}. Expected "owner/repo"`); + } + + // Initialize Octokit for REST API calls + const token = process.env.GITHUB_TOKEN || process.env.INPUT_GITHUB_TOKEN || ''; + const octokit = new Octokit({ + auth: token, + userAgent: 'usage-statistics-tracker' + }); + + if (!token) { + console.warn('No GitHub token provided. Using unauthenticated requests (rate limited).'); + } + + // Step 1: Fetch basic repository data using GraphQL + let graphqlData: any = null; + + try { + const graphqlClient = graphql.defaults({ + headers: { + authorization: token ? `token ${token}` : undefined, + }, + }); + + // Fetch basic repository data (without releases) + const basicResponse = await graphqlClient(REPOSITORY_BASIC_QUERY, { + owner, + name: repo + }); + + if (basicResponse.repository) { + graphqlData = basicResponse.repository; + } + } catch (error) { + console.warn(`Could not fetch GitHub GraphQL basic data for ${repository}:`, error); + } + + // Step 2: Fetch releases data separately using GraphQL + let totalReleaseDownloads = 0; + let latestReleaseDownloads = 0; + let releaseCount = 0; + let downloadRange = []; + let latestRelease = null; + + try { + const graphqlClient = graphql.defaults({ + headers: { + authorization: token ? `token ${token}` : undefined, + }, + }); + + // Fetch releases data + const releasesResponse = await graphqlClient(RELEASES_QUERY, { + owner, + name: repo, + first: 100 + }); + + if (releasesResponse.repository?.releases?.nodes) { + const releases = releasesResponse.repository.releases.nodes.filter(Boolean); + releaseCount = releases.length; + + for (const release of releases) { + let releaseDownloads = 0; + if (release?.releaseAssets?.nodes) { + for (const asset of release.releaseAssets.nodes) { + if (asset) { + releaseDownloads += asset.downloadCount || 0; + } + } + } + totalReleaseDownloads += releaseDownloads; + + // Latest release is the first one in the list + if (release && release === releases[0]) { + latestReleaseDownloads = releaseDownloads; + latestRelease = release.tagName; + } + + // Add to download range with proper date format for charts + if (release?.publishedAt) { + downloadRange.push({ + day: release.publishedAt, + downloads: releaseDownloads, + tagName: release.tagName + }); + } + } + } + } catch (error) { + console.warn(`Could not fetch GitHub GraphQL releases data for ${repository}:`, error); + } + + // Fallback to REST API if GraphQL fails or for additional data + let restData: any = null; + + try { + const { data: repoData } = await octokit.repos.get({ + owner, + repo + }); + restData = repoData; + } catch (error) { + console.warn(`Could not fetch GitHub REST data for ${repository}:`, error); + } + + // Use the best available data (GraphQL preferred, REST as fallback) + const finalData = graphqlData || restData; + + if (!finalData) { + throw new Error('Could not fetch repository data from either GraphQL or REST API'); + } + + // Get traffic statistics using REST API (requires authentication) + let viewsCount = 0; + let uniqueVisitors = 0; + let clonesCount = 0; + + if (token) { + try { + // Get views data + const { data: viewsData } = await octokit.repos.getViews({ + owner, + repo + }); + + if (viewsData) { + viewsCount = viewsData.count || 0; + uniqueVisitors = viewsData.uniques || 0; + } + + // Get clones data + const { data: clonesData } = await octokit.repos.getClones({ + owner, + repo + }); + + if (clonesData) { + clonesCount = clonesData.count || 0; + } + } catch (error) { + console.warn(`Could not fetch GitHub traffic data for ${repository}:`, error); + } + } + + // Calculate repository age + let repositoryAge = 0; + if (finalData.createdAt) { + const created = new Date(finalData.createdAt); + const now = new Date(); + repositoryAge = Math.floor((now.getTime() - created.getTime()) / (1000 * 60 * 60 * 24)); // days + } + + // Calculate activity metrics + let lastActivity = 0; + if (finalData.pushedAt) { + const pushed = new Date(finalData.pushedAt); + const now = new Date(); + lastActivity = Math.floor((now.getTime() - pushed.getTime()) / (1000 * 60 * 60 * 24)); // days + } + + return { + platform: PlatformSettings.name, + name: repository, + timestamp: new Date().toISOString(), + metrics: { + stars: finalData.stargazerCount || finalData.stargazers_count || 0, + forks: finalData.forkCount || finalData.forks_count || 0, + watchers: finalData.watchers?.totalCount || finalData.watchers_count || 0, + totalIssues: finalData.openIssues?.totalCount + finalData.closedIssues?.totalCount || 0, + openIssues: finalData.openIssues?.totalCount || 0, + closedIssues: finalData.closedIssues?.totalCount || 0, + language: finalData.primaryLanguage?.name || finalData.language || null, + size: finalData.diskUsage || finalData.size || null, + repositoryAge, + lastActivity, + releaseCount, + totalReleaseDownloads, + latestReleaseDownloads, + viewsCount, + uniqueVisitors, + latestRelease, + clonesCount, + topics: finalData.repositoryTopics?.nodes?.length || finalData.topics?.length || 0, + license: finalData.licenseInfo?.name || finalData.license?.name || null, + defaultBranch: finalData.defaultBranchRef?.name || finalData.default_branch || null, + downloadsTotal: totalReleaseDownloads || 0, + downloadRange, + } + }; + } catch (error) { + return { + platform: PlatformSettings.name, + name: repository, + timestamp: new Date().toISOString(), + metrics: {}, + error: error instanceof Error ? error.message : String(error) + }; + } + } + + export async function collectGithubBatch(repositories: string[]): Promise { + const results: Promise[] = []; + + for (const repo of repositories) { + results.push(collectGithub(repo)); + } + + return Promise.all(results); + } diff --git a/src/collectors/npm.ts b/src/collectors/npm.ts new file mode 100644 index 0000000..0ef4bd1 --- /dev/null +++ b/src/collectors/npm.ts @@ -0,0 +1,154 @@ +/** + * NPM package statistics collector with enhanced metrics + */ + +import type { MetricResult } from './types'; + +const PlatformSettings = { + name: 'NPM', +} + +interface NpmPackageInfo { + name: string; + version: string; + description?: string; + homepage?: string; + repository?: { url: string }; + maintainers?: Array<{ name: string; email: string }>; + 'dist-tags'?: Record; + dependencies?: Record; + devDependencies?: Record; + peerDependencies?: Record; + time?: Record; + versions?: Record; +} + +interface NpmDownloadStats { + downloads: number; + start: string; + end: string; + package: string; +} + +const BASE_URL = 'https://api.npmjs.org/downloads/range'; +const CHUNK_DAYS = 540; // 18 months max per request +const START_DATE = new Date('2015-01-10'); // Earliest NPM data + +function formatDate(date: Date): string { + return date.toISOString().split('T')[0]; +} + +function addDays(date: Date, days: number): Date { + const result = new Date(date); + result.setDate(result.getDate() + days); + return result; +} + +async function fetchChunk(start: Date, end: Date, packageName: string): Promise<{ day: string; downloads: number }[]> { + const url = `${BASE_URL}/${formatDate(start)}:${formatDate(end)}/${packageName}`; + const res = await fetch(url); + if (!res.ok) { + throw new Error(`Failed to fetch data: ${res.status} ${res.statusText}`); + } + const json = await res.json(); + return json.downloads; +} + +async function getFullDownloadHistory(packageName: string, startDate: Date): Promise<{ day: string; downloads: number }[]> { + const today = new Date(); + let currentStart = new Date(startDate); + let allDownloads: { day: string; downloads: number }[] = []; + + while (currentStart < today) { + const currentEnd = addDays(currentStart, CHUNK_DAYS - 1); + const end = currentEnd > today ? today : currentEnd; + + console.log(`Fetching ${formatDate(currentStart)} to ${formatDate(end)}...`); + + const chunk = await fetchChunk(currentStart, end, packageName); + allDownloads = allDownloads.concat(chunk); + + currentStart = addDays(end, 1); // move to next chunk + } + + return Array.from(new Set(allDownloads)); +} + + +export async function collectNpm(packageName: string): Promise { + try { + // Get package info from npm registry + const packageUrl = `https://registry.npmjs.org/${packageName}`; + const packageResponse = await fetch(packageUrl); + const packageData: NpmPackageInfo = await packageResponse.json(); + + // Get download statistics + let downloadsMonthly + let downloadsWeekly + let downloadsDaily + + try { + // Monthly downloads + const monthlyUrl = `https://api.npmjs.org/downloads/point/last-month/${packageName}`; + const monthlyResponse = await fetch(monthlyUrl); + const monthlyData: NpmDownloadStats = await monthlyResponse.json(); + downloadsMonthly = monthlyData.downloads || null; + } catch (error) { + console.warn(`Could not fetch NPM monthly downloads for ${packageName}:`, error); + } + + try { + // Weekly downloads + const weeklyUrl = `https://api.npmjs.org/downloads/point/last-week/${packageName}`; + const weeklyResponse = await fetch(weeklyUrl); + const weeklyData: NpmDownloadStats = await weeklyResponse.json(); + downloadsWeekly = weeklyData.downloads || null; + } catch (error) { + console.warn(`Could not fetch NPM weekly downloads for ${packageName}:`, error); + } + + try { + // Daily downloads + const dailyUrl = `https://api.npmjs.org/downloads/point/last-day/${packageName}`; + const dailyResponse = await fetch(dailyUrl); + const dailyData: NpmDownloadStats = await dailyResponse.json(); + downloadsDaily = dailyData.downloads || null; + } catch (error) { + console.warn(`Could not fetch NPM daily downloads for ${packageName}:`, error); + } + + const downloadsRange = await getFullDownloadHistory(packageName, new Date(packageData.time?.created || START_DATE)) + + const downloadsTotal = downloadsRange.reduce((acc, curr) => acc + curr.downloads, 0) + + return { + platform: PlatformSettings.name, + name: packageName, + timestamp: new Date().toISOString(), + metrics: { + downloadsTotal, + downloadsMonthly, + downloadsWeekly, + downloadsDaily, + downloadsRange, + } + }; + } catch (error) { + return { + platform: PlatformSettings.name, + name: packageName, + timestamp: new Date().toISOString(), + metrics: {}, + error: error instanceof Error ? error.message : String(error) + }; + } +} + + +export async function collectNpmBatch(packageNames: string[]): Promise { + const resultPromises: Promise[] = [] + for (const packageName of packageNames) { + resultPromises.push(collectNpm(packageName)) + } + return Promise.all(resultPromises) +} \ No newline at end of file diff --git a/src/collectors/powershell.ts b/src/collectors/powershell.ts new file mode 100644 index 0000000..a120026 --- /dev/null +++ b/src/collectors/powershell.ts @@ -0,0 +1,363 @@ +/** + * PowerShell Gallery module statistics collector with enhanced metrics + */ + +import type { MetricResult } from './types'; +import { XMLParser } from 'fast-xml-parser'; + +const PlatformSettings = { + name: 'PowerShell', +} + +const BASE_URL = 'https://www.powershellgallery.com/api/v2/'; +const parser = new XMLParser({ + ignoreAttributes: false, + attributeNamePrefix: '', +}); + +export interface PowerShellGalleryEntryArray { + "?xml": { + version: string; + encoding: string; + }; + feed: { + id: string; + title: string; + updated: string; + link: { + rel: string; + href: string; + }; + entry: Entry[]; + }; +} + +export interface PowerShellGalleryEntry { + '?xml': { + version: string; + encoding: string; + }; + entry: Entry; +} + +export interface Entry { + id: string; + category: { + term: string; + scheme: string; + }; + link: Array<{ + rel: string; + href: string; + }>; + title: { + '#text': string; + type: string; + }; + updated: string; + author: { + name: string; + }; + content: { + type: string; + src: string; + }; + 'm:properties': MProperties; + + // Namespace declarations + 'xml:base': string; + xmlns: string; + 'xmlns:d': string; + 'xmlns:m': string; + 'xmlns:georss': string; + 'xmlns:gml': string; +} + +export interface MProperties { + 'd:Id': string; + 'd:Version': string; + 'd:NormalizedVersion': string; + 'd:Authors': string; + 'd:Copyright': string; + 'd:Created': EdmDateTime; + 'd:Dependencies': string; + 'd:Description': string; + 'd:DownloadCount': EdmInt32; + 'd:GalleryDetailsUrl': string; + 'd:IconUrl'?: EdmNull; + 'd:IsLatestVersion': EdmBoolean; + 'd:IsAbsoluteLatestVersion': EdmBoolean; + 'd:IsPrerelease': EdmBoolean; + 'd:Language'?: EdmNull; + 'd:LastUpdated': EdmDateTime; + 'd:Published': EdmDateTime; + 'd:PackageHash': string; + 'd:PackageHashAlgorithm': string; + 'd:PackageSize': EdmInt64; + 'd:ProjectUrl'?: EdmNull; + 'd:ReportAbuseUrl': string; + 'd:ReleaseNotes'?: EdmNull; + 'd:RequireLicenseAcceptance': EdmBoolean; + 'd:Summary'?: EdmNull; + 'd:Tags': string; + 'd:Title'?: EdmNull; + 'd:VersionDownloadCount': EdmInt32; + 'd:MinClientVersion'?: EdmNull; + 'd:LastEdited'?: EdmNull; + 'd:LicenseUrl'?: EdmNull; + 'd:LicenseNames'?: EdmNull; + 'd:LicenseReportUrl'?: EdmNull; + 'd:ItemType': string; + 'd:FileList': string; + 'd:GUID': string; + 'd:PowerShellVersion': number; + 'd:PowerShellHostVersion'?: EdmNull; + 'd:DotNetFrameworkVersion'?: EdmNull; + 'd:CLRVersion'?: EdmNull; + 'd:ProcessorArchitecture'?: EdmNull; + 'd:CompanyName': string; + 'd:Owners': string; +} + +export interface EdmDateTime { + '#text': string; + 'm:type': 'Edm.DateTime'; +} + +export interface EdmInt32 { + '#text': number; + 'm:type': 'Edm.Int32'; +} + +export interface EdmInt64 { + '#text': number; + 'm:type': 'Edm.Int64'; +} + +export interface EdmBoolean { + '#text': boolean; + 'm:type': 'Edm.Boolean'; +} + +export interface EdmNull { + 'm:null': 'true'; +} + +type ParsedModuleEntry = { + id: string; + name: string; + version: string; + normalizedVersion: string; + authors: string; + description: string; + downloadCount: number; + versionDownloadCount: number; + published: Date; + lastUpdated: Date; + created: Date; + isLatest: boolean; + isPrerelease: boolean; + projectUrl?: string | null; + reportAbuseUrl: string; + galleryDetailsUrl: string; + packageSize: number; + companyName: string; + owners: string; +}; + +function parsePowerShellGalleryEntry(entry: Entry): ParsedModuleEntry { + const props = entry["m:properties"] + + const getText = (field: any): string => + field?.["#text"]; + + const isTrue = (field: any): boolean => + field?.["#text"] === true; + + const getNumber = (field: any): number => field?.["#text"] + + const getDate = (field: any): Date => { + const dateText = getText(field); + if (!dateText || dateText === '') { + return new Date(0); // Return epoch date for invalid dates + } + return new Date(dateText); + }; + + return { + id: entry.id, + name: props["d:Id"], + version: props["d:Version"], + normalizedVersion: props["d:NormalizedVersion"], + authors: props["d:Authors"], + description: props["d:Description"], + downloadCount: getNumber(props["d:DownloadCount"]), + versionDownloadCount: getNumber(props["d:VersionDownloadCount"]), + published: getDate(props["d:Published"]), + lastUpdated: getDate(props["d:LastUpdated"]), + created: getDate(props["d:Created"]), + isLatest: isTrue(props["d:IsLatestVersion"]), + isPrerelease: isTrue(props["d:IsPrerelease"]), + projectUrl: getText(props["d:ProjectUrl"]) ?? undefined, + reportAbuseUrl: props["d:ReportAbuseUrl"], + galleryDetailsUrl: props["d:GalleryDetailsUrl"], + packageSize: getNumber(props["d:PackageSize"]), + companyName: props["d:CompanyName"], + owners: props["d:Owners"], + }; +} + +/** + * Fetches all versions of a package. + * Equivalent to: FindPackagesById()?id='PackageName' + */ +export async function findPackagesById(id: string) { + const url = `${BASE_URL}FindPackagesById()?id='${encodeURIComponent(id)}'`; + const res = await fetch(url); + const xml = await res.text(); + const json = parser.parse(xml) as PowerShellGalleryEntryArray; + return json.feed.entry ?? []; +} + +/** + * Fetches metadata for a specific version of a package. + * Equivalent to: Packages(Id='Name',Version='x.y.z') + */ +export async function getPackageVersionInfo(id: string, version: string) { + const url = `${BASE_URL}Packages(Id='${encodeURIComponent(id)}',Version='${encodeURIComponent(version)}')`; + const res = await fetch(url); + const xml = await res.text(); + const json = parser.parse(xml) as PowerShellGalleryEntry; + return json.entry +} + +/** + * Searches the PowerShell Gallery with a search term. + * Equivalent to: Search()?searchTerm='term'&includePrerelease=false + */ +export async function searchPackages(searchTerm: string, includePrerelease = false) { + const url = `${BASE_URL}Search()?searchTerm='${encodeURIComponent( + searchTerm + )}'&includePrerelease=${includePrerelease.toString()}`; + const res = await fetch(url); + const xml = await res.text(); + const json = parser.parse(xml); + return json.feed?.entry ?? []; +} + +/** + * Sum total download count for all versions of a package. + */ +export async function getTotalDownloadCount(id: string): Promise { + const entries = await findPackagesById(id); + const versions = Array.isArray(entries) ? entries : [entries]; + + return versions.reduce((sum, entry) => { + const count = (entry as any)['m:properties']?.['d:DownloadCount']?.['#text'] + return sum + count; + }, 0); +} + +export async function collectPowerShell(moduleName: string): Promise { + try { + // Get all versions of the package + const allVersions = await findPackagesById(moduleName); + if (!allVersions || allVersions.length === 0) { + throw new Error(`Module ${moduleName} not found`); + } + + const versions: ParsedModuleEntry[] = [] + + for (const version of allVersions) { + const parsedVersion = parsePowerShellGalleryEntry(version) + versions.push(parsedVersion) + } + + // Sort versions by published date (newest first) + const sortedVersions = versions.sort((a, b) => b.published.getTime() - a.published.getTime()) + + let downloadsTotal = 0; + let latestVersionDownloads = 0; + let downloadRange: Array<{day: string, downloads: number, version: string}> = []; + let latestVersion = ''; + let latestVersionDate = ''; + + // Process each version + for (const version of sortedVersions) { + // Use Created date if Published date is invalid (1900-01-01) + const effectiveDate = version.published.getTime() === new Date('1900-01-01T00:00:00').getTime() + ? version.created + : version.published; + + // Skip versions with invalid dates + if (effectiveDate.getTime() === 0) { + continue; + } + + downloadsTotal += version.versionDownloadCount; + + // Track latest version downloads + if (version.isLatest) { + latestVersionDownloads = version.versionDownloadCount; + latestVersion = version.version; + latestVersionDate = effectiveDate.toISOString(); + } + + const rangeEntry = { + day: effectiveDate.toISOString(), + downloads: version.versionDownloadCount, + version: version.version + } + + // Add to download range for charts + downloadRange.push(rangeEntry); + } + + // Get latest version metadata + const latestModuleData = sortedVersions[0]; + + const result: MetricResult = { + platform: PlatformSettings.name, + name: moduleName, + timestamp: new Date().toISOString(), + metrics: { + downloadsTotal, + downloadsRange: downloadRange, + latestVersionDownloads, + latestVersion, + latestVersionDate, + versionCount: versions.length, + lastUpdated: latestModuleData.lastUpdated.toISOString(), + + // Additional metadata + authors: latestModuleData.authors, + description: latestModuleData.description, + projectUrl: latestModuleData.projectUrl, + packageSize: latestModuleData.packageSize, + companyName: latestModuleData.companyName, + owners: latestModuleData.owners, + } + }; + + return result; + + } catch (error) { + console.warn('Error collecting PowerShell module:', error); + return { + platform: PlatformSettings.name, + name: moduleName, + timestamp: new Date().toISOString(), + error: error instanceof Error ? error.message : String(error), + }; + } +} + +export async function collectPowerShellBatch(moduleNames: string[]): Promise { + const resultPromises: Promise[] = [] + + for (const moduleName of moduleNames) { + resultPromises.push(collectPowerShell(moduleName)) + } + + return Promise.all(resultPromises) +} \ No newline at end of file diff --git a/src/collectors/pypi.ts b/src/collectors/pypi.ts new file mode 100644 index 0000000..f2e710e --- /dev/null +++ b/src/collectors/pypi.ts @@ -0,0 +1,193 @@ +/** + * PyPI package statistics collector using external PyPI Stats API + */ + +import type { MetricResult } from './types'; + +const PlatformSettings = { + name: 'PyPI', +} + +interface PyPIPackageInfo { + info: { + name: string; + version: string; + summary?: string; + description?: string; + home_page?: string; + author?: string; + author_email?: string; + license?: string; + requires_python?: string; + project_urls?: Record; + }; + releases: Record>; +} + +// (no BigQuery historical metrics; all data comes from the external API) + +// External PyPI Stats API base URL +const PYPI_STATS_BASE_URL = process.env.PYPI_STATS_BASE_URL || 'https://pypistats.dev' + +function normalizePackageName(name: string) { + return name.replace(/[._]/g, '-').toLowerCase() +} + +async function fetchJson(url: string): Promise { + const res = await fetch(url) + if (!res.ok) throw new Error(`Request failed ${res.status}: ${url}`) + return res.json() as Promise +} + +export async function collectPypi(packageName: string): Promise { + const normalized = normalizePackageName(packageName) + try { + // Package metadata + const packageDataPromise = fetchJson(`https://pypi.org/pypi/${normalized}/json`) + + // External API calls + type RecentResp = { package: string; type: string; data: { last_day?: number; last_week?: number; last_month?: number } } + type SeriesResp = { package: string; type: string; data: { date: string; category: string; downloads: number }[] } + type SummaryResp = { package: string; type: string; totals: { overall: number; system?: Record; python_major?: Record; python_minor?: Record } } + + const recentPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/recent`) + const summaryPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/summary`) + const overallPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/overall`) + const pythonMajorPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/python_major`) + const pythonMinorPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/python_minor`) + const systemPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/system`) + const installerPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/installer`) + + type ChartResp = { package: string; type: string; chartType: string; title: string; labels: string[]; datasets: Array<{ label: string; data: number[] }> } + const overallChartPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/chart/overall?format=json`) + const pythonMajorChartPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/chart/python_major?format=json`) + const pythonMinorChartPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/chart/python_minor?format=json`) + const systemChartPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/chart/system?format=json`) + const installerChartPromise = fetchJson(`${PYPI_STATS_BASE_URL}/api/packages/${normalized}/chart/installer?format=json`) + + const [packageData, recent, summary, overall, pythonMajor, pythonMinor, system, installer, overallChart, pythonMajorChart, pythonMinorChart, systemChart, installerChart] = await Promise.all([ + packageDataPromise, + recentPromise, + summaryPromise, + overallPromise, + pythonMajorPromise, + pythonMinorPromise, + systemPromise, + installerPromise, + overallChartPromise, + pythonMajorChartPromise, + pythonMinorChartPromise, + systemChartPromise, + installerChartPromise, + ]) + + // All time-series and breakdowns are provided by the external API + + const overallSeries = (overall.data || []).filter(p => p.category === 'without_mirrors') + + const systemBreakdown = summary.totals?.system || null + const pythonVersionBreakdown = summary.totals?.python_major + ? Object.fromEntries(Object.entries(summary.totals.python_major).filter(([k]) => /^\d+$/.test(k)).map(([k, v]) => [`python${k}`, v as number])) + : null + const pythonMinorBreakdown = summary.totals?.python_minor + ? Object.fromEntries(Object.entries(summary.totals.python_minor).filter(([k]) => /^\d+(?:\.\d+)?$/.test(k)).map(([k, v]) => [`python${k}`, v as number])) + : null + + // Derive popular system and installer from totals/series + let popularSystem: string | undefined + if (systemBreakdown && Object.keys(systemBreakdown).length > 0) { + popularSystem = Object.entries(systemBreakdown).sort((a, b) => (b[1] as number) - (a[1] as number))[0]?.[0] + } else if (system.data && system.data.length > 0) { + const totals: Record = {} + for (const p of system.data) totals[p.category] = (totals[p.category] || 0) + p.downloads + popularSystem = Object.entries(totals).sort((a, b) => b[1] - a[1])[0]?.[0] + } + + let popularInstaller: string | undefined + if (installer.data && installer.data.length > 0) { + const totals: Record = {} + for (const p of installer.data) totals[p.category] = (totals[p.category] || 0) + p.downloads + popularInstaller = Object.entries(totals).sort((a, b) => b[1] - a[1])[0]?.[0] + } + + // Latest release date for current version + let latestReleaseDate: string | undefined + try { + const currentVersion = packageData.info?.version + const files = currentVersion ? (packageData.releases?.[currentVersion] || []) : [] + const latestUpload = files.reduce((max, f) => { + const t = f.upload_time + if (!t) return max + if (!max) return t + return new Date(t) > new Date(max) ? t : max + }, undefined) + if (latestUpload) { + const d = new Date(latestUpload) + if (!isNaN(d.getTime())) latestReleaseDate = d.toISOString().slice(0, 10) + } + } catch {} + + return { + platform: PlatformSettings.name, + name: packageName, + timestamp: new Date().toISOString(), + metrics: { + downloadsTotal: summary.totals?.overall, + downloadsMonthly: recent.data?.last_month, + downloadsWeekly: recent.data?.last_week, + downloadsDaily: recent.data?.last_day, + version: packageData.info?.version, + latestReleaseDate, + description: packageData.info?.summary, + homepage: packageData.info?.home_page, + author: packageData.info?.author, + license: packageData.info?.license, + requiresPython: packageData.info?.requires_python, + releases: Object.keys(packageData.releases || {}).length, + downloadsRange: overallSeries.map(p => ({ day: p.date, downloads: p.downloads })), + overallSeries, + pythonMajorSeries: (pythonMajor.data || []).filter(p => p.category?.toLowerCase?.() !== 'unknown'), + pythonMinorSeries: (pythonMinor.data || []).filter(p => p.category?.toLowerCase?.() !== 'unknown'), + systemSeries: system.data || [], + installerSeries: installer.data || [], + popularSystem, + popularInstaller, + + // Server-prepared chart JSON (preferred for rendering) + overallChart, + pythonMajorChart: { ...pythonMajorChart, datasets: (pythonMajorChart.datasets || []).filter(ds => !/unknown/i.test(ds.label)) }, + pythonMinorChart: { ...pythonMinorChart, datasets: (pythonMinorChart.datasets || []).filter(ds => !/unknown/i.test(ds.label)) }, + systemChart, + installerChart, + pythonVersionBreakdown, + pythonMinorBreakdown, + systemBreakdown, + } + }; + } catch (error) { + return { + platform: PlatformSettings.name, + name: packageName, + timestamp: new Date().toISOString(), + metrics: {}, + error: error instanceof Error ? error.message : String(error) + }; + } +} + +export async function collectPypiBatch(packageNames: string[]): Promise { + const results: Promise[] = [] + + for (const packageName of packageNames) { + results.push(collectPypi(packageName)) + } + + return Promise.all(results) +} \ No newline at end of file diff --git a/src/collectors/types.ts b/src/collectors/types.ts new file mode 100644 index 0000000..02035ec --- /dev/null +++ b/src/collectors/types.ts @@ -0,0 +1,44 @@ +/** + * Core types for the simplified usage statistics system + */ + +export interface MetricResult { + platform: string; + name: string; + timestamp: string; + metrics?: { + stars?: number; + forks?: number; + watchers?: number; + openIssues?: number; + totalReleaseDownloads?: number; + downloadsTotal?: number; + downloadsRange?: { + day: string; + downloads: number; + }[]; + } & Record; + error?: string; +} + +export interface MetricCollector { + collect(source: string): Promise; + collectBatch?(sources: string[]): Promise; +} + +export interface CollectorConfig { + collect: MetricCollector; + batched?: boolean; +} + +export interface SourceConfig { + platform: string; + name: string; + options?: Record; +} + +export interface CollectionResult { + results: MetricResult[]; + summary: string; + timestamp: string; +} \ No newline at end of file diff --git a/src/github-tracker.test.ts b/src/github-tracker.test.ts deleted file mode 100644 index b2905d8..0000000 --- a/src/github-tracker.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { describe, it, expect, beforeEach } from "bun:test"; -import GitHubTracker from "./trackers/github"; - -describe("GitHubTracker", () => { - let tracker: GitHubTracker; - - beforeEach(() => { - // Use a test token or no token for testing - tracker = new GitHubTracker(process.env.GITHUB_TOKEN || undefined); - }); - - describe("Rate Limiting", () => { - it("should handle rate limiting gracefully", async () => { - // Test with a popular repository that might hit rate limits - const stats = await tracker.getDownloadStats('microsoft/vscode'); - - // Should return an array (even if empty due to rate limiting) - expect(Array.isArray(stats)).toBe(true); - }, 15000); // 15 second timeout for rate limit handling - - it("should get package info", async () => { - try { - const info = await tracker.getPackageInfo('microsoft/vscode'); - expect(info).toBeDefined(); - expect(info.name).toBe('vscode'); - expect(info.full_name).toBe('microsoft/vscode'); - } catch (error) { - // If rate limited, that's expected behavior - console.log('Rate limited during test (expected):', error); - expect(error).toBeDefined(); - } - }, 15000); - - it("should get latest version", async () => { - try { - const version = await tracker.getLatestVersion('microsoft/vscode'); - // Should return a version string or null - expect(version === null || typeof version === 'string').toBe(true); - } catch (error) { - // If rate limited, that's expected behavior - console.log('Rate limited during test (expected):', error); - expect(error).toBeDefined(); - } - }, 15000); - }); - - describe("Configuration", () => { - it("should have correct name", () => { - expect(tracker.name).toBe('github'); - }); - }); -}); \ No newline at end of file diff --git a/src/index.test.ts b/src/index.test.ts deleted file mode 100644 index 8c42472..0000000 --- a/src/index.test.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { describe, it, expect, beforeEach } from "bun:test"; -import { UsageStatisticsManager } from "./index"; -import type { TrackingConfig } from "./types"; - -describe("UsageStatisticsManager", () => { - let manager: UsageStatisticsManager; - - beforeEach(() => { - const config: TrackingConfig = { - enableLogging: false, // Disable logging for tests - updateInterval: 60 * 60 * 1000, - npmPackages: ['lodash'], // Reduce to single package for faster tests - githubRepos: ['microsoft/vscode'], // Reduce to single repo - pythonPackages: ['requests'], // Reduce to single package - homebrewPackages: ['git'], // Reduce to single package - powershellModules: ['PowerShellGet'], - postmanCollections: [], - goModules: ['github.com/go-chi/chi'] // Reduce to single module - }; - manager = new UsageStatisticsManager(config); - }); - - describe("generateComprehensiveReport", () => { - it("should generate a report with aggregated stats", async () => { - const report = await manager.generateComprehensiveReport(); - - expect(report).toBeDefined(); - expect(report.totalDownloads).toBeGreaterThanOrEqual(0); - expect(report.uniquePackages).toBeGreaterThanOrEqual(0); - expect(Array.isArray(report.platforms)).toBe(true); - expect(Array.isArray(report.topPackages)).toBe(true); - expect(report.topPackages.length).toBeGreaterThan(0); - expect(typeof report.platformBreakdown).toBe('object'); - }, 10000); // 10 second timeout - }); - - describe("getPlatformReport", () => { - it("should generate a report for a specific platform", async () => { - const report = await manager.getPlatformReport('npm'); - - expect(report).toBeDefined(); - expect(report.totalDownloads).toBeGreaterThanOrEqual(0); - expect(Array.isArray(report.platforms)).toBe(true); - }); - }); - - describe("exportReport", () => { - it("should export JSON report", async () => { - const jsonReport = await manager.exportReport('json'); - - expect(jsonReport).toBeDefined(); - expect(typeof jsonReport).toBe('string'); - - // Should be valid JSON - const parsed = JSON.parse(jsonReport); - expect(parsed).toBeDefined(); - }, 10000); // 10 second timeout - - it("should export CSV report", async () => { - const csvReport = await manager.exportReport('csv'); - - expect(csvReport).toBeDefined(); - expect(typeof csvReport).toBe('string'); - expect(csvReport.includes('Platform,Package,Downloads')).toBe(true); - }, 10000); // 10 second timeout - }); - - describe("getLastUpdateTime", () => { - it("should return null initially", () => { - const lastUpdate = manager.getLastUpdateTime(); - expect(lastUpdate).toBeNull(); - }); - - it("should return update time after generating report", async () => { - await manager.generateComprehensiveReport(); - const lastUpdate = manager.getLastUpdateTime(); - - expect(lastUpdate).not.toBeNull(); - expect(lastUpdate).toBeInstanceOf(Date); - }); - }); -}); - -describe("Configuration", () => { - it("should create valid config", () => { - const config: TrackingConfig = { - enableLogging: true, - updateInterval: 60 * 60 * 1000, - npmPackages: ['lodash', 'axios'], - githubRepos: ['microsoft/vscode'], - pythonPackages: ['requests'], - homebrewPackages: ['git'], - powershellModules: ['PowerShellGet'], - postmanCollections: [], - goModules: ['github.com/gin-gonic/gin'] - }; - - expect(config).toBeDefined(); - expect(config.enableLogging).toBe(true); - expect(config.updateInterval).toBe(60 * 60 * 1000); // 1 hour - expect(config.npmPackages).toContain('lodash'); - expect(config.githubRepos).toContain('microsoft/vscode'); - }); -}); \ No newline at end of file diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 138288f..0000000 --- a/src/index.ts +++ /dev/null @@ -1,262 +0,0 @@ -#!/usr/bin/env bun -import type { TrackingConfig } from './types'; -import { DownloadStatsAggregator } from './aggregator'; -import type { AggregatedStats } from './aggregator'; -import { promises as fs } from 'fs'; -import path from 'path'; -import { execSync } from 'node:child_process'; - -/** - * Usage Statistics Tracker - * - * Tracks download statistics across multiple platforms: - * - NPM packages - * - PyPI packages - * - Homebrew formulas - * - PowerShell modules - * - Postman collections - * - Go modules - * - GitHub releases - */ - -const STATS_FILE = 'stats.json'; -const README_FILE = 'README.md'; -const STATS_MARKER_START = ''; -const STATS_MARKER_END = ''; - -async function writeStatsFile(stats: AggregatedStats, filePath = STATS_FILE) { - await fs.writeFile(filePath, JSON.stringify(stats, null, 2)); - console.log(`๐Ÿ“„ Stats written to ${filePath}`); -} - -async function updateReadmeWithStats(stats: AggregatedStats, readmePath = README_FILE) { - try { - const readmeContent = await fs.readFile(readmePath, 'utf-8'); - - const statsSection = ` -## ๐Ÿ“Š Usage Statistics - -Last updated: ${new Date().toISOString()} - -### Summary -- **Total Downloads**: ${stats.totalDownloads.toLocaleString()} -- **Unique Packages**: ${stats.uniquePackages} -- **Platforms Tracked**: ${stats.platforms.join(', ')} - -### Top Packages -${stats.topPackages.map((pkg, index) => - `${index + 1}. **${pkg.name}** (${pkg.platform}) - ${pkg.downloads.toLocaleString()} downloads` -).join('\n')} -`; - - const startMarker = readmeContent.indexOf(STATS_MARKER_START); - const endMarker = readmeContent.indexOf(STATS_MARKER_END); - - if (startMarker !== -1 && endMarker !== -1) { - const beforeStats = readmeContent.substring(0, startMarker + STATS_MARKER_START.length); - const afterStats = readmeContent.substring(endMarker); - const updatedContent = beforeStats + statsSection + afterStats; - await fs.writeFile(readmePath, updatedContent); - console.log(`๐Ÿ“ README updated with stats`); - } else { - console.warn(`โš ๏ธ Stats markers not found in README. Please add ${STATS_MARKER_START} and ${STATS_MARKER_END} markers.`); - } - } catch (error) { - console.error('โŒ Error updating README:', error); - } -} - -async function gitCommitAndPush(files: string[], message: string) { - execSync(`git config user.name "github-actions[bot]"`); - execSync(`git config user.email "github-actions[bot]@users.noreply.github.com"`); - execSync(`git add ${files.join(' ')}`); - execSync(`git commit -m "${message}" || echo 'No changes to commit.'`); - execSync(`git push`); -} - -class UsageStatisticsManager { - private aggregator: DownloadStatsAggregator; - private lastUpdateTime: Date | null = null; - - constructor(config: TrackingConfig) { - this.aggregator = new DownloadStatsAggregator(config); - } - - async generateComprehensiveReport(): Promise { - console.log('๐Ÿ“Š Generating comprehensive usage statistics report...\n'); - const stats = await this.aggregator.collectAllStats(); - const report = this.aggregator.aggregateStats(stats); - this.lastUpdateTime = new Date(); - return report; - } - - async getPlatformReport(platform: string): Promise { - console.log(`๐Ÿ“Š Generating ${platform} platform report...\n`); - const stats = await this.aggregator.getPlatformStats(platform); - const report = this.aggregator.aggregateStats(stats); - this.lastUpdateTime = new Date(); - return report; - } - - async exportReport(format: 'json' | 'csv' = 'json'): Promise { - const report = await this.generateComprehensiveReport(); - - if (format === 'csv') { - const csvHeader = 'Platform,Package,Downloads\n'; - const csvRows = report.topPackages.map(pkg => - `${pkg.platform},${pkg.name},${pkg.downloads}` - ).join('\n'); - return csvHeader + csvRows; - } - - return JSON.stringify(report, null, 2); - } - - getLastUpdateTime(): Date | null { - return this.lastUpdateTime; - } - - async displayReport(report: AggregatedStats) { - console.log('๐Ÿ“Š Usage Statistics Summary'); - console.log('==================================================\n'); - - // Overall Summary - console.log('๐Ÿ“ˆ Overall Summary:'); - console.log(`Total Downloads: ${report.totalDownloads.toLocaleString()}`); - console.log(`Unique Packages: ${report.uniquePackages}`); - console.log(`Platforms Tracked: ${report.platforms.join(', ')}\n`); - - // Platform Totals - console.log('๐Ÿ—๏ธ Platform Totals:'); - for (const [platform, data] of Object.entries(report.platformBreakdown)) { - console.log(` ${platform.toUpperCase()}: ${data.totalDownloads.toLocaleString()} downloads (${data.uniquePackages} packages)`); - } - console.log(''); - - // Package Rankings - console.log('๐Ÿ† Package Rankings:'); - report.topPackages.forEach((pkg, index) => { - console.log(` ${index + 1}. ${pkg.name} (${pkg.platform}) - ${pkg.downloads.toLocaleString()} downloads`); - }); - console.log('=================================================='); - } - - async generatePreviewReport(): Promise { - console.log('๐ŸŽญ Generating preview report with mock data...\n'); - - // Create mock data for preview - const mockStats = [ - { - platform: 'npm', - packageName: 'lodash', - downloadCount: 1500000, - metadata: { version: '4.17.21' } - }, - { - platform: 'npm', - packageName: 'axios', - downloadCount: 800000, - metadata: { version: '1.6.0' } - }, - { - platform: 'github', - packageName: 'microsoft/vscode', - downloadCount: 500000, - metadata: { release: 'v1.85.0' } - }, - { - platform: 'pypi', - packageName: 'requests', - downloadCount: 300000, - metadata: { version: '2.31.0' } - }, - { - platform: 'homebrew', - packageName: 'git', - downloadCount: 250000, - metadata: { version: '2.43.0' } - }, - { - platform: 'powershell', - packageName: 'PowerShellGet', - downloadCount: 120000, - metadata: { version: '2.2.5' } - }, - { - platform: 'postman', - packageName: 'Postman Collection', - downloadCount: 75000, - metadata: { collectionId: '12345' } - }, - { - platform: 'go', - packageName: 'github.com/gin-gonic/gin', - downloadCount: 45000, - metadata: { version: 'v1.9.1' } - } - ]; - - const report = this.aggregator.aggregateStats(mockStats); - this.lastUpdateTime = new Date(); - return report; - } -} - -async function main() { - console.log('๐Ÿš€ Usage Statistics Tracker Starting...\n'); - - // Create a default configuration for CLI usage - const defaultConfig: TrackingConfig = { - enableLogging: true, - updateInterval: 60 * 60 * 1000, // 1 hour - npmPackages: ['lodash', 'axios'], - githubRepos: ['microsoft/vscode', 'facebook/react'], - pythonPackages: ['requests', 'numpy'], - homebrewPackages: ['git', 'node'], - powershellModules: ['PowerShellGet'], - postmanCollections: [], - goModules: ['github.com/gin-gonic/gin', 'github.com/go-chi/chi'] - }; - - const manager = new UsageStatisticsManager(defaultConfig); - - try { - // Check for preview mode - const isPreview = process.argv.includes('--preview') || process.argv.includes('-p'); - - let report: AggregatedStats; - if (isPreview) { - report = await manager.generatePreviewReport(); - } else { - report = await manager.generateComprehensiveReport(); - } - - await manager.displayReport(report); - - const jsonReport = await manager.exportReport('json'); - console.log('\n๐Ÿ“„ JSON Report:'); - console.log(jsonReport); - - // Only write files and commit if not in preview mode and running in GitHub Actions - if (!isPreview && (process.env.GITHUB_ACTIONS === 'true' || process.argv.includes('--action'))) { - await writeStatsFile(report); - await updateReadmeWithStats(report); - await gitCommitAndPush([STATS_FILE, README_FILE], 'chore: update usage statistics [skip ci]'); - console.log('โœ… Stats written, README updated, and changes pushed.'); - } else if (isPreview) { - console.log('\n๐ŸŽญ Preview mode - no files written or commits made'); - } - - console.log('\nโœ… Script completed successfully!'); - } catch (error) { - console.error('โŒ Error during execution:', error); - process.exit(1); - } -} - -// Run the main function if this file is executed directly -if (import.meta.main) { - main(); -} - -export { UsageStatisticsManager }; \ No newline at end of file diff --git a/src/summaries/github.ts b/src/summaries/github.ts new file mode 100644 index 0000000..270271f --- /dev/null +++ b/src/summaries/github.ts @@ -0,0 +1,321 @@ +import { mkdirSync, writeFileSync } from "fs" +import type { MetricResult } from "../collectors/types" +import { Chart, registerables } from 'chart.js'; +import { Canvas } from 'skia-canvas'; +import { semver } from "bun"; + +// Register all Chart.js controllers +Chart.register(...registerables); + +export function formatGitHubSummary(summary: string, platformMetrics: MetricResult[]): string { + let totalStars = 0 + let totalForks = 0 + let totalWatchers = 0 + let totalIssues = 0 + let totalOpenIssues = 0 + let totalClosedIssues = 0 + let totalDownloads = 0 + let totalReleases = 0 + + summary += `| Repository | Stars | Forks | Watchers | Open Issues | Closed Issues | Total Issues | Release Downloads | Releases | Latest Release | Language |\n` + summary += `| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n` + for (const metric of platformMetrics) { + const stars = metric.metrics?.stars || 0 + const forks = metric.metrics?.forks || 0 + const watchers = metric.metrics?.watchers || 0 + const issues = metric.metrics?.totalIssues || 0 + const openIssues = metric.metrics?.openIssues || 0 + const closedIssues = metric.metrics?.closedIssues || 0 + const downloads = metric.metrics?.totalReleaseDownloads || 0 + const releases = metric.metrics?.releaseCount || 0 + + const latestRelease = metric.metrics?.latestRelease || 'N/A' + const language = metric.metrics?.language || 'N/A' + + totalStars += stars + totalForks += forks + totalWatchers += watchers + totalIssues += issues + totalOpenIssues += openIssues + totalClosedIssues += closedIssues + totalDownloads += downloads + totalReleases += releases + + summary += `| ${metric.name} | ${stars.toLocaleString()} | ${forks.toLocaleString()} | ${watchers.toLocaleString()} | ${openIssues.toLocaleString()} | ${closedIssues.toLocaleString()} | ${issues.toLocaleString()} | ${downloads.toLocaleString()} | ${releases.toLocaleString()} | ${latestRelease} | ${language} |\n` + } + summary += `| **Total** | **${totalStars.toLocaleString()}** | **${totalForks.toLocaleString()}** | **${totalWatchers.toLocaleString()}** | **${totalOpenIssues.toLocaleString()}** | **${totalClosedIssues.toLocaleString()}** | **${totalIssues.toLocaleString()}** | **${totalDownloads.toLocaleString()}** | **${totalReleases.toLocaleString()}** | | |\n` + + return summary +} + +export async function addRepoDetails(summary: string, metrics: MetricResult[]) { + + summary += `#### Repository Details:\n\n` + + for (const metric of metrics) { + summary += `**${metric.name}**:\n` + summary += `- Last Activity: ${metric.metrics?.lastActivity?.toLocaleString() || 0} days ago\n` + summary += `- Repository Age: ${metric.metrics?.repositoryAge?.toLocaleString() || 0} days\n` + summary += `- Release Count: ${metric.metrics?.releaseCount?.toLocaleString() || 0}\n` + summary += `- Total Release Downloads: ${metric.metrics?.totalReleaseDownloads?.toLocaleString() || 0}\n` + summary += `- Latest Release: ${metric.metrics?.latestRelease || 'N/A'}\n` + summary += `- Latest Release Downloads: ${metric.metrics?.latestReleaseDownloads?.toLocaleString() || 0}\n` + summary += `- Views: ${metric.metrics?.viewsCount?.toLocaleString() || 0}\n` + summary += `- Unique Visitors: ${metric.metrics?.uniqueVisitors?.toLocaleString() || 0}\n` + summary += `- Clones: ${metric.metrics?.clonesCount?.toLocaleString() || 0}\n` + summary += `\n` + } + + summary += `\n\n` + + const chatOutputPath = './charts/github' + mkdirSync(chatOutputPath, { recursive: true }) + const svgOutputPathList = await createGitHubReleaseChart(metrics, chatOutputPath) + for (const svgOutputPath of svgOutputPathList) { + summary += `![${svgOutputPath}](${svgOutputPath})\n` + } + return summary +} + +export async function createGitHubReleaseChart(platformMetrics: MetricResult[], outputPath: string) { + const svgOutputPathList = [] + for (const metric of platformMetrics) { + // Only create charts if there's download data + if (metric.metrics?.downloadRange && metric.metrics.downloadRange.length > 0) { + const svgOutputPath = await createDownloadsPerReleaseChart(metric, outputPath) + svgOutputPathList.push(svgOutputPath) + const svgOutputPathCumulative = await createCumulativeDownloadsChart(metric, outputPath) + svgOutputPathList.push(svgOutputPathCumulative) + const svgOutputPathReleases = await createReleaseDownloadsChart(metric, outputPath) + svgOutputPathList.push(svgOutputPathReleases) + } + } + + return svgOutputPathList +} + +function groupByReleaseCumulative(releaseRange: { day: string, downloads: number, tagName?: string }[]){ + const releases: Record = {} + for (const release of releaseRange.sort((a, b) => { + return semver.order(a.tagName || '0.0.0', b.tagName || '0.0.0') + })) { + if (!release.tagName) { + continue + } + if (!releases[release.tagName]) { + releases[release.tagName] = {downloads: release.downloads, tagName: release.tagName || ''} + } else { + releases[release.tagName].downloads += release.downloads + } + } + + let cumulativeDownloads = 0 + + for (const release of Object.keys(releases).sort((a, b) => { + return semver.order(a, b) + })) { + cumulativeDownloads += releases[release].downloads + releases[release].downloads = cumulativeDownloads + } + + return releases +} + +export async function createDownloadsPerReleaseChart(metric: MetricResult, outputPath: string): Promise { + const downloadsRange = metric.metrics?.downloadRange || [] + const svgOutputPath = `${outputPath}/${metric.name.replace('/', '-')}-release-downloads.svg` + + const sortedReleases = downloadsRange.sort((a: { tagName?: string }, b: { tagName?: string }) => { + return semver.order(a.tagName || '0.0.0', b.tagName || '0.0.0') + }) + + const canvas = new Canvas(1000, 800); + const chart = new Chart( + canvas as any, + { + type: 'bar', + data: { + labels: sortedReleases.map((release: { tagName?: string }) => release.tagName), + datasets: [{ + label: `${metric.name} Release Downloads`, + data: sortedReleases.map((release: { downloads: number }) => release.downloads), + backgroundColor: 'rgba(54, 162, 235, 0.8)', + borderColor: 'rgba(54, 162, 235, 1)', + borderWidth: 1, + }] + }, + options: { + responsive: true, + plugins: { + title: { + display: true, + text: `${metric.name} - Release Downloads`, + font: { + size: 16 + } + }, + legend: { + display: true + } + }, + scales: { + x: { + title: { + display: true, + text: 'Release' + } + }, + y: { + title: { + display: true, + text: 'Downloads' + }, + beginAtZero: true + } + } + } + } + ); + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }); + writeFileSync(svgOutputPath, svgBuffer); + chart.destroy(); + + return svgOutputPath +} + +export async function createCumulativeDownloadsChart(metric: MetricResult, outputPath: string): Promise { + const downloadsRange = metric.metrics?.downloadRange || [] + const svgOutputPath = `${outputPath}/${metric.name.replace('/', '-')}-cumulative-release-downloads.svg` + + const groupedDownloads = groupByReleaseCumulative(downloadsRange) + + // Sort months chronologically + const semVerSortedReleases = Object.keys(groupedDownloads).sort((a, b) => { + return semver.order(a, b) + }) + + const canvas = new Canvas(1000, 800); + const chart = new Chart( + canvas as any, + { + type: 'line', + data: { + labels: semVerSortedReleases, + datasets: [{ + label: `${metric.name} Cumulative Downloads`, + data: semVerSortedReleases.map(release => groupedDownloads[release].downloads), + backgroundColor: 'rgba(75, 192, 192, 0.2)', + borderColor: 'rgba(75, 192, 192, 1)', + borderWidth: 3, + fill: true, + tension: 0.1 + }] + }, + options: { + responsive: true, + plugins: { + title: { + display: true, + text: `${metric.name} - Cumulative Release Downloads`, + font: { + size: 16 + } + }, + legend: { + display: true + } + }, + scales: { + x: { + title: { + display: true, + text: 'Release' + } + }, + y: { + title: { + display: true, + text: 'Downloads' + }, + beginAtZero: true + } + } + } + } + ); + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }); + writeFileSync(svgOutputPath, svgBuffer); + chart.destroy(); + + return svgOutputPath +} + +export async function createReleaseDownloadsChart(metric: MetricResult, outputPath: string): Promise { + const downloadsRange = metric.metrics?.downloadRange || [] + const svgOutputPath = `${outputPath}/${metric.name.replace('/', '-')}-top-release-downloads.svg` + + // Sort releases by date (newest first for display) + const sortedReleases = downloadsRange + .filter((release: { tagName?: string; downloads: number; day: string }) => release.tagName && release.downloads > 0) + .sort((a: { downloads: number }, b: { downloads: number }) => b.downloads - a.downloads) + .slice(0, 10) // Show top 10 releases + .sort((a: { tagName?: string }, b: { tagName?: string }) => semver.order(a.tagName || '0.0.0', b.tagName || '0.0.0')) + + if (sortedReleases.length === 0) { + // Return empty chart if no releases + return svgOutputPath + } + + const canvas = new Canvas(1200, 800); + const chart = new Chart( + canvas as any, + { + type: 'bar', + data: { + labels: sortedReleases.map((release: { tagName?: string }) => release.tagName), + datasets: [{ + label: `${metric.name} Release Downloads`, + data: sortedReleases.map((release: { downloads: number }) => release.downloads), + backgroundColor: 'rgba(255, 99, 132, 0.8)', + borderColor: 'rgba(255, 99, 132, 1)', + borderWidth: 1, + }] + }, + options: { + responsive: true, + plugins: { + title: { + display: true, + text: `${metric.name} - Top Release Downloads`, + font: { + size: 16 + } + }, + legend: { + display: true + } + }, + scales: { + x: { + title: { + display: true, + text: 'Release Tag' + } + }, + y: { + title: { + display: true, + text: 'Downloads' + }, + beginAtZero: true + } + } + } + } + ); + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }); + writeFileSync(svgOutputPath, svgBuffer); + chart.destroy(); + + return svgOutputPath +} diff --git a/src/summaries/npm.ts b/src/summaries/npm.ts new file mode 100644 index 0000000..f6fc34a --- /dev/null +++ b/src/summaries/npm.ts @@ -0,0 +1,201 @@ +import { mkdirSync, writeFileSync } from 'node:fs'; +import type { MetricResult } from "../collectors/types"; +import { Chart, registerables } from 'chart.js'; +import { Canvas } from 'skia-canvas'; + +// Register all Chart.js controllers +Chart.register(...registerables); + +export function formatNpmSummary(summary: string, platformMetrics: MetricResult[]): string { + let totalDownloads = 0 + let totalMonthlyDownloads = 0 + let totalWeeklyDownloads = 0 + let totalDailyDownloads = 0 + + summary += `| Package | Downloads | Monthly Downloads | Weekly Downloads | Daily Downloads |\n` + summary += `| --- | --- | --- | --- | --- |\n` + for (const metric of platformMetrics) { + const downloads = metric.metrics?.downloadsTotal || 0 + const monthlyDownloads = metric.metrics?.downloadsMonthly || 0 + const weeklyDownloads = metric.metrics?.downloadsWeekly || 0 + const dailyDownloads = metric.metrics?.downloadsDaily || 0 + + totalDownloads += downloads + totalMonthlyDownloads += monthlyDownloads + totalWeeklyDownloads += weeklyDownloads + totalDailyDownloads += dailyDownloads + + summary += `| ${metric.name} | ${downloads.toLocaleString()} | ${monthlyDownloads.toLocaleString()} | ${weeklyDownloads.toLocaleString()} | ${dailyDownloads.toLocaleString()} |\n` + } + summary += `| **Total** | **${totalDownloads.toLocaleString()}** | **${totalMonthlyDownloads.toLocaleString()}** | **${totalWeeklyDownloads.toLocaleString()}** | **${totalDailyDownloads.toLocaleString()}** | | | | |\n` + return summary +} + +// Convert a list of dates into a list of Months +function groupByMonth(dateRange: { day: string, downloads: number }[]) { + const months: Record = {} + + for (const range of dateRange) { + const month = new Date(range.day).toLocaleDateString('en-US', { month: 'short', year: '2-digit' }) + if (!months[month]) { + months[month] = range.downloads + } else { + months[month] += range.downloads + } + } + + return months +} + +function groupByMonthCumulative(dateRange: { day: string, downloads: number }[]){ + const months: Record = {} + + for (const range of dateRange) { + const month = new Date(range.day).toLocaleDateString('en-US', { month: 'short', year: '2-digit' }) + + if (!months[month]) { + months[month] = range.downloads + } else { + months[month] += range.downloads + } + } + + let cumulativeDownloads = 0 + for (const month in months) { + cumulativeDownloads += months[month] + months[month] = cumulativeDownloads + } + + return months +} + +export async function createDownloadsPerMonthChart(metric: MetricResult, outputPath: string): Promise { + const downloadsRange = metric.metrics?.downloadsRange || [] + const svgOutputPath = `${outputPath}/${metric.name}-new-downloads-by-month.svg` + const groupedDownloads = groupByMonth(downloadsRange) + + const canvas = new Canvas(1000, 800); + const chart = new Chart( + canvas as any, + { + type: 'line', + data: { + labels: Object.keys(groupedDownloads), + datasets: [{ + label: metric.name, + data: Object.values(groupedDownloads), + backgroundColor: 'rgba(75, 192, 192, 0.2)', + borderColor: 'rgba(75, 192, 192, 1)', + borderWidth: 3, + fill: true, + tension: 0.1 + }] + }, + options: { + scales: { + x: { + time: { + unit: 'month', + displayFormats: { + month: 'MMM DD' + } + }, + title: { + display: true, + text: 'Date' + } + }, + y: { + title: { + display: true, + text: 'Downloads per month' + }, + } + } + } + } + ); + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }); + writeFileSync(svgOutputPath, svgBuffer); + chart.destroy(); + + return svgOutputPath +} + +export async function createCumulativeDownloadsChart(metric: MetricResult, outputPath: string): Promise { + const downloadsRange = metric.metrics?.downloadsRange || [] + const svgOutputPath = `${outputPath}/${metric.name}-cumulative-downloads.svg` + + const groupedDownloads = groupByMonthCumulative(downloadsRange) + + const canvas = new Canvas(1000, 800); + const chart = new Chart( + canvas as any, + { + type: 'line', + data: { + labels: Object.keys(groupedDownloads), + datasets: [{ + label: metric.name, + data: Object.values(groupedDownloads), + backgroundColor: 'rgba(75, 192, 192, 0.2)', + borderColor: 'rgba(75, 192, 192, 1)', + borderWidth: 3, + fill: true, + tension: 0.1 + }] + }, + options: { + scales: { + x: { + time: { + unit: 'month', + displayFormats: { + month: 'MMM DD' + } + }, + title: { + display: true, + text: 'Date' + } + }, + y: { + title: { + display: true, + text: 'Downloads per month' + }, + } + } + } + } + ); + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }); + writeFileSync(svgOutputPath, svgBuffer); + chart.destroy(); + + return svgOutputPath +} + + + +export async function createNpmChart(platformMetrics: MetricResult[], outputPath: string) { + const svgOutputPathList = [] + for (const metric of platformMetrics) { + const svgOutputPath = await createDownloadsPerMonthChart(metric, outputPath) + svgOutputPathList.push(svgOutputPath) + const svgOutputPathCumulative = await createCumulativeDownloadsChart(metric, outputPath) + svgOutputPathList.push(svgOutputPathCumulative) + } + + return svgOutputPathList +} + +export async function addNpmDetails(summary: string, platformMetrics: MetricResult[]): Promise { + const outputPath = './charts/npm' + mkdirSync(outputPath, { recursive: true }) + const svgOutputPathList = await createNpmChart(platformMetrics, outputPath) + for (const svgOutputPath of svgOutputPathList) { + summary += `![${svgOutputPath}](${svgOutputPath})\n` + } + return summary +} \ No newline at end of file diff --git a/src/summaries/powershell.ts b/src/summaries/powershell.ts new file mode 100644 index 0000000..590d62c --- /dev/null +++ b/src/summaries/powershell.ts @@ -0,0 +1,288 @@ +import { mkdirSync, writeFileSync } from "fs" +import type { MetricResult } from "../collectors/types" +import { Chart, registerables } from 'chart.js'; +import { Canvas } from 'skia-canvas'; + +// Register all Chart.js controllers +Chart.register(...registerables); + +export function formatPowerShellSummary(summary: string, platformMetrics: MetricResult[]): string { + let platformDownloadTotal = 0 + let totalVersions = 0 + + summary += `| Module | Total Downloads | Latest Version | Version Downloads | Versions | Last Updated |\n` + summary += `| --- | --- | --- | --- | --- | --- |\n` + for (const metric of platformMetrics) { + const lastUpdated = metric.metrics?.lastUpdated ? new Date(metric.metrics.lastUpdated).toLocaleDateString() : 'N/A' + const latestVersion = metric.metrics?.latestVersion || 'N/A' + const latestVersionDownloads = metric.metrics?.latestVersionDownloads || 0 + const versionCount = metric.metrics?.versionCount || 0 + + summary += `| ${metric.name} | ${metric.metrics?.downloadsTotal?.toLocaleString() || 0} | ${latestVersion} | ${latestVersionDownloads.toLocaleString()} | ${versionCount} | ${lastUpdated} |\n` + platformDownloadTotal += metric.metrics?.downloadsTotal || 0 + totalVersions += versionCount + } + summary += `| **Total** | **${platformDownloadTotal.toLocaleString()}** | | | **${totalVersions}** | |\n` + + return summary +} + +export async function addPowerShellDetails(summary: string, platformMetrics: MetricResult[]): Promise { + summary += `#### PowerShell Module Details:\n\n` + + for (const metric of platformMetrics) { + summary += `**${metric.name}**:\n` + summary += `- Total Downloads: ${metric.metrics?.downloadsTotal?.toLocaleString() || 0}\n` + summary += `- Latest Version: ${metric.metrics?.latestVersion || 'N/A'}\n` + summary += `- Latest Version Downloads: ${metric.metrics?.latestVersionDownloads?.toLocaleString() || 0}\n` + summary += `- Version Count: ${metric.metrics?.versionCount || 0}\n` + summary += `- Last Updated: ${metric.metrics?.lastUpdated ? new Date(metric.metrics.lastUpdated).toLocaleDateString() : 'N/A'}\n` + summary += `- Package Size: ${metric.metrics?.packageSize ? `${Math.round(metric.metrics.packageSize / 1024)} KB` : 'N/A'}\n` + summary += `\n` + } + + summary += `\n\n` + + const chartOutputPath = './charts/powershell' + mkdirSync(chartOutputPath, { recursive: true }) + const svgOutputPathList = await createPowerShellCharts(platformMetrics, chartOutputPath) + for (const svgOutputPath of svgOutputPathList) { + summary += `![${svgOutputPath}](${svgOutputPath})\n` + } + return summary +} + +export async function createPowerShellCharts(platformMetrics: MetricResult[], outputPath: string) { + const svgOutputPathList = [] + + // Only create charts if there's download data + const metricsWithData = platformMetrics.filter(metric => + metric.metrics?.downloadsRange && metric.metrics.downloadsRange.length > 0 + ); + + if (metricsWithData.length > 0) { + const svgOutputPath = await createCombinedDownloadsChart(metricsWithData, outputPath) + svgOutputPathList.push(svgOutputPath) + + const svgOutputPathCumulative = await createCombinedCumulativeDownloadsChart(metricsWithData, outputPath) + svgOutputPathList.push(svgOutputPathCumulative) + } + + return svgOutputPathList +} + +// Color palette for different modules +const colors = [ + 'rgba(54, 162, 235, 0.8)', + 'rgba(255, 99, 132, 0.8)', + 'rgba(75, 192, 192, 0.8)', + 'rgba(255, 205, 86, 0.8)', + 'rgba(153, 102, 255, 0.8)', + 'rgba(255, 159, 64, 0.8)', + 'rgba(199, 199, 199, 0.8)', + 'rgba(83, 102, 255, 0.8)', + 'rgba(255, 99, 132, 0.8)', + 'rgba(54, 162, 235, 0.8)' +]; + +const borderColors = [ + 'rgba(54, 162, 235, 1)', + 'rgba(255, 99, 132, 1)', + 'rgba(75, 192, 192, 1)', + 'rgba(255, 205, 86, 1)', + 'rgba(153, 102, 255, 1)', + 'rgba(255, 159, 64, 1)', + 'rgba(199, 199, 199, 1)', + 'rgba(83, 102, 255, 1)', + 'rgba(255, 99, 132, 1)', + 'rgba(54, 162, 235, 1)' +]; + +export async function createCombinedDownloadsChart(metrics: MetricResult[], outputPath: string): Promise { + const svgOutputPath = `${outputPath}/powershell-combined-downloads.svg` + + // Get all unique dates across all modules for the x-axis + const allDates = new Set(); + for (const metric of metrics) { + const downloadsRange = metric.metrics?.downloadsRange || []; + for (const download of downloadsRange) { + allDates.add(download.day); + } + } + + // Sort all dates chronologically + const sortedAllDates = Array.from(allDates).sort((a, b) => + new Date(a).getTime() - new Date(b).getTime() + ); + + // Create datasets for each module (one line per module) + const data = [] + for (const metric of metrics) { + const downloadsRange = metric.metrics?.downloadsRange || []; + for (const date of sortedAllDates) { + const downloads = downloadsRange.filter(d => d.day === date).reduce((sum, d) => sum + d.downloads, 0); + data.push(downloads); + } + } + + const labels = sortedAllDates.map(date => + new Date(date).toLocaleDateString('en-US', { + month: 'short', + year: '2-digit', + day: 'numeric' + }) + ); + + const canvas = new Canvas(1200, 800); + const chart = new Chart( + canvas as any, + { + type: 'line', + data: { + labels: labels, + datasets: [{ + data, + backgroundColor: 'rgba(54, 162, 235, 0.2)', + borderColor: 'rgba(54, 162, 235, 1)', + borderWidth: 3, + fill: true, + tension: 0.1 + + }] + }, + options: { + responsive: true, + plugins: { + title: { + display: true, + text: 'PowerShell Modules - Downloads Over Time', + font: { + size: 16 + } + }, + legend: { + display: true + } + }, + scales: { + x: { + title: { + display: true, + text: 'Release Date' + } + }, + y: { + type: 'linear', + title: { + display: true, + text: 'Downloads' + }, + beginAtZero: true, + ticks: { + stepSize: 1000 + } + } + } + } + } + ); + + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }); + writeFileSync(svgOutputPath, svgBuffer); + chart.destroy(); + + return svgOutputPath +} + +export async function createCombinedCumulativeDownloadsChart(metrics: MetricResult[], outputPath: string): Promise { + const svgOutputPath = `${outputPath}/powershell-cumulative-downloads.svg` + + // Get all unique dates across all modules for the x-axis + const allDates = new Set(); + for (const metric of metrics) { + const downloadsRange = metric.metrics?.downloadsRange || []; + for (const download of downloadsRange) { + allDates.add(download.day); + } + } + + // Sort all dates chronologically + const sortedAllDates = Array.from(allDates).sort((a, b) => + new Date(a).getTime() - new Date(b).getTime() + ); + + const labels = sortedAllDates.map(date => + new Date(date).toLocaleDateString('en-US', { + month: 'short', + year: '2-digit', + day: 'numeric' + }) + ); + + const data = [] + let runningTotal = 0 + for (const date of sortedAllDates) { + const downloads = metrics.reduce((sum, metric) => sum + (metric.metrics?.downloadsRange?.find(d => d.day === date)?.downloads || 0), 0); + runningTotal += downloads + data.push(runningTotal); + } + + const canvas = new Canvas(1200, 800); + const chart = new Chart( + canvas as any, + { + type: 'line', + data: { + labels: labels, + datasets: [{ + label: 'Cumulative Downloads', + data, + backgroundColor: 'rgba(54, 162, 235, 0.2)', + borderColor: 'rgba(54, 162, 235, 1)', + borderWidth: 3, + fill: true, + tension: 0.1 + }] + }, + options: { + responsive: true, + plugins: { + title: { + display: true, + text: 'PowerShell Modules - Cumulative Downloads', + font: { + size: 16 + } + }, + legend: { + display: true + } + }, + scales: { + x: { + title: { + display: true, + text: 'Release Date' + } + }, + y: { + title: { + display: true, + text: 'Cumulative Downloads' + }, + beginAtZero: true, + ticks: { + stepSize: 5000 + } + } + } + } + } + ); + + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }); + writeFileSync(svgOutputPath, svgBuffer); + chart.destroy(); + + return svgOutputPath +} \ No newline at end of file diff --git a/src/summaries/pypi.ts b/src/summaries/pypi.ts new file mode 100644 index 0000000..b1875b2 --- /dev/null +++ b/src/summaries/pypi.ts @@ -0,0 +1,397 @@ +import { mkdirSync, writeFileSync } from 'node:fs' +import type { MetricResult } from "../collectors/types" +import { Chart, registerables } from 'chart.js' +import { Canvas } from 'skia-canvas' + +Chart.register(...registerables) + +export function formatPypiSummary(summary: string, platformMetrics: MetricResult[]): string { + summary += `| Package | Total Downloads | Monthly Downloads | Weekly Downloads | Daily Downloads | Version |\n` + summary += `| --- | --- | --- | --- | --- | --- |\n` + for (const metric of platformMetrics) { + summary += `| ${metric.name} | ${metric.metrics?.downloadsTotal?.toLocaleString() || 0} | ${metric.metrics?.downloadsMonthly?.toLocaleString() || 0} | ${metric.metrics?.downloadsWeekly?.toLocaleString() || 0} | ${metric.metrics?.downloadsDaily?.toLocaleString() || 0} | ${metric.metrics?.version || 'N/A'} |\n` + } + summary += `| **Total** | **${platformMetrics.reduce((sum, m) => sum + (m.metrics?.downloadsTotal || 0), 0).toLocaleString()}** | **${platformMetrics.reduce((sum, m) => sum + (m.metrics?.downloadsMonthly || 0), 0).toLocaleString()}** | **${platformMetrics.reduce((sum, m) => sum + (m.metrics?.downloadsWeekly || 0), 0).toLocaleString()}** | **${platformMetrics.reduce((sum, m) => sum + (m.metrics?.downloadsDaily || 0), 0).toLocaleString()}** | | |\n` + return summary +} + +function toIsoMonth(dateStr: string) { + // input expected YYYY-MM-DD; fallback to Date parse if needed + const iso = dateStr?.slice(0, 7) + if (iso && /\d{4}-\d{2}/.test(iso)) return iso + const d = new Date(dateStr) + const y = d.getFullYear() + const m = String(d.getMonth() + 1).padStart(2, '0') + return `${y}-${m}` +} + +function displayMonthLabel(isoMonth: string) { + const [y, m] = isoMonth.split('-') + const d = new Date(Number(y), Number(m) - 1, 1) + return d.toLocaleDateString('en-US', { month: 'short', year: '2-digit' }) +} + +function aggregateMonthlyTotals(points: { date: string, downloads: number }[]) { + const totals: Record = {} + for (const p of points) { + const iso = toIsoMonth(p.date) + totals[iso] = (totals[iso] || 0) + p.downloads + } + const labelsIso = Object.keys(totals).sort() + const labels = labelsIso.map(displayMonthLabel) + const data = labelsIso.map(l => totals[l]) + return { labels, data } +} + +function aggregateMonthlyByCategory(points: { date: string, category: string, downloads: number }[]) { + const labelIsoSet = new Set() + const categoryMap: Record> = {} + for (const p of points) { + const iso = toIsoMonth(p.date) + labelIsoSet.add(iso) + if (!categoryMap[p.category]) categoryMap[p.category] = {} + categoryMap[p.category][iso] = (categoryMap[p.category][iso] || 0) + p.downloads + } + const labelsIso = Array.from(labelIsoSet).sort() + const labels = labelsIso.map(displayMonthLabel) + return { labelsIso, labels, categoryMap } +} + +async function createOverallDownloadsChart(metric: MetricResult, outputPath: string) { + // Prefer server-prepared chart JSON if present + const server = metric.metrics?.overallChart as { labels?: string[], datasets?: { label: string, data: number[] }[] } | undefined + let labels: string[] + let datasets: { label: string, data: number[], borderColor?: string, backgroundColor?: string, borderWidth?: number, fill?: boolean, tension?: number }[] + if (server && server.labels && server.labels.length && server.datasets && server.datasets.length) { + labels = server.labels + const colorFor = (label?: string, idx?: number) => { + const l = (label || '').toLowerCase() + if (l.includes('without')) return { stroke: '#2563eb', fill: '#2563eb33' } // blue + if (l.includes('with')) return { stroke: '#64748b', fill: '#64748b33' } // slate + const palette = ['#2563eb', '#16a34a', '#f59e0b', '#ef4444', '#7c3aed'] + const i = idx ?? 0 + return { stroke: palette[i % palette.length], fill: palette[i % palette.length] + '33' } + } + datasets = server.datasets.map((ds, i) => { + const c = colorFor(ds.label, i) + return { + ...ds, + borderColor: c.stroke, + backgroundColor: c.fill, + borderWidth: 3, + fill: true, + tension: 0.1, + } + }) + } else { + const series = (metric.metrics?.overallSeries as { date: string, category: string, downloads: number }[] | undefined) || [] + const agg = aggregateMonthlyTotals(series.map(p => ({ date: p.date, downloads: p.downloads }))) + labels = agg.labels + datasets = [{ + label: `${metric.name} downloads per month`, + data: agg.data, + backgroundColor: 'rgba(54, 162, 235, 0.2)', + borderColor: 'rgba(54, 162, 235, 1)', + borderWidth: 3, + fill: true, + tension: 0.1 + }] + } + + const canvas = new Canvas(1000, 800) + const chart = new Chart(canvas as any, { + type: 'line', + data: { labels, datasets }, + options: { + plugins: { + legend: { display: true, position: 'bottom' }, + title: { display: true, text: `${metric.name} overall downloads` } + }, + scales: { + x: { title: { display: true, text: 'Month' } }, + y: { title: { display: true, text: 'Downloads' } } + } + } + }) + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }) + const svgPath = `${outputPath}/${metric.name}-pypi-overall.svg` + writeFileSync(svgPath, svgBuffer) + chart.destroy() + return svgPath +} + +// Time-series: Python major over time (line) +async function createPythonMajorChart(metric: MetricResult, outputPath: string) { + // Prefer server chart JSON if present + const server = metric.metrics?.pythonMajorChart as { labels?: string[], datasets?: { label: string, data: number[] }[] } | undefined + let labels: string[] + let datasets: { label: string, data: number[], borderColor?: string, backgroundColor?: string, borderWidth?: number, fill?: boolean }[] + if (server && server.labels && server.labels.length && server.datasets && server.datasets.length) { + const palette = ['#2563eb', '#16a34a', '#f59e0b', '#ef4444', '#7c3aed', '#0891b2', '#dc2626', '#0ea5e9'] + labels = server.labels + datasets = server.datasets + .filter(ds => !/unknown/i.test(ds.label)) + .map((ds, idx) => ({ + ...ds, + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } else { + const points = (metric.metrics?.pythonMajorSeries as { date: string, category: string, downloads: number }[] | undefined) || [] + const { labelsIso, labels: lbls, categoryMap } = aggregateMonthlyByCategory(points) + labels = lbls + const sortedCategories = Object.keys(categoryMap).filter(k => !/unknown/i.test(k)).sort((a, b) => Number(a) - Number(b)) + const palette = ['#2563eb', '#16a34a', '#f59e0b', '#ef4444', '#7c3aed', '#0891b2', '#dc2626', '#0ea5e9'] + datasets = sortedCategories.map((category, idx) => ({ + label: `Python ${category}`, + data: labelsIso.map(l => categoryMap[category][l] || 0), + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } + + const canvas = new Canvas(1000, 800) + const chart = new Chart(canvas as any, { + type: 'line', + data: { labels, datasets }, + options: { + plugins: { + legend: { position: 'bottom' }, + title: { display: true, text: `${metric.name} downloads by Python major version` } + }, + scales: { + x: { title: { display: true, text: 'Month' } }, + y: { title: { display: true, text: 'Downloads' } } + } + } + }) + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }) + const svgPath = `${outputPath}/${metric.name}-pypi-python-major.svg` + writeFileSync(svgPath, svgBuffer) + chart.destroy() + return svgPath +} + +// Time-series: Python minor over time (line) +async function createPythonMinorChart(metric: MetricResult, outputPath: string) { + // Prefer server chart JSON if present + const server = metric.metrics?.pythonMinorChart as { labels?: string[], datasets?: { label: string, data: number[] }[] } | undefined + let labels: string[] + let datasets: { label: string, data: number[], borderColor?: string, backgroundColor?: string, borderWidth?: number, fill?: boolean }[] + if (server && server.labels && server.labels.length && server.datasets && server.datasets.length) { + const palette = ['#1d4ed8', '#059669', '#d97706', '#dc2626', '#6d28d9', '#0e7490', '#b91c1c', '#0284c7'] + labels = server.labels + datasets = server.datasets + .filter(ds => !/unknown/i.test(ds.label)) + .map((ds, idx) => ({ + ...ds, + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } else { + const points = (metric.metrics?.pythonMinorSeries as { date: string, category: string, downloads: number }[] | undefined) || [] + const { labelsIso, labels: lbls, categoryMap } = aggregateMonthlyByCategory(points) + labels = lbls + const sortedCategories = Object.keys(categoryMap).filter(k => !/unknown/i.test(k)).sort((a, b) => a.localeCompare(b, undefined, { numeric: true })) + const palette = ['#1d4ed8', '#059669', '#d97706', '#dc2626', '#6d28d9', '#0e7490', '#b91c1c', '#0284c7'] + datasets = sortedCategories.map((category, idx) => ({ + label: `Python ${category}`, + data: labelsIso.map(l => categoryMap[category][l] || 0), + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } + + const canvas = new Canvas(1000, 800) + const chart = new Chart(canvas as any, { + type: 'line', + data: { labels, datasets }, + options: { + plugins: { + legend: { position: 'bottom' }, + title: { display: true, text: `${metric.name} downloads by Python minor version` } + }, + scales: { + x: { title: { display: true, text: 'Month' } }, + y: { title: { display: true, text: 'Downloads' } } + } + } + }) + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }) + const svgPath = `${outputPath}/${metric.name}-pypi-python-minor.svg` + writeFileSync(svgPath, svgBuffer) + chart.destroy() + return svgPath +} + +// Time-series: Installer over time (line) - prefer server JSON +async function createInstallerChart(metric: MetricResult, outputPath: string) { + const server = metric.metrics?.installerChart as { labels?: string[], datasets?: { label: string, data: number[] }[] } | undefined + let labels: string[] + let datasets: { label: string, data: number[], borderColor?: string, backgroundColor?: string, borderWidth?: number, fill?: boolean }[] + if (server && server.labels && server.labels.length && server.datasets && server.datasets.length) { + const palette = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#a78bfa', '#22d3ee'] + labels = server.labels + datasets = server.datasets.map((ds, idx) => ({ + ...ds, + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } else { + const points = (metric.metrics?.installerSeries as { date: string, category: string, downloads: number }[] | undefined) || [] + const { labelsIso, labels: lbls, categoryMap } = aggregateMonthlyByCategory(points) + labels = lbls + const categories = Object.keys(categoryMap) + const palette = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#a78bfa', '#22d3ee'] + datasets = categories.map((category, idx) => ({ + label: category, + data: labelsIso.map(l => categoryMap[category][l] || 0), + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } + + const canvas = new Canvas(1000, 800) + const chart = new Chart(canvas as any, { + type: 'line', + data: { labels, datasets }, + options: { + plugins: { + legend: { position: 'bottom' }, + title: { display: true, text: `${metric.name} downloads by installer` } + }, + scales: { + x: { title: { display: true, text: 'Month' } }, + y: { title: { display: true, text: 'Downloads' } } + } + } + }) + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }) + const svgPath = `${outputPath}/${metric.name}-pypi-installer.svg` + writeFileSync(svgPath, svgBuffer) + chart.destroy() + return svgPath +} + +// Time-series: System over time (line) - prefer server JSON +async function createSystemChart(metric: MetricResult, outputPath: string) { + const server = metric.metrics?.systemChart as { labels?: string[], datasets?: { label: string, data: number[] }[] } | undefined + let labels: string[] + let datasets: { label: string, data: number[], borderColor?: string, backgroundColor?: string, borderWidth?: number, fill?: boolean }[] + if (server && server.labels && server.labels.length && server.datasets && server.datasets.length) { + const palette = ['#0ea5e9', '#22c55e', '#f97316', '#e11d48', '#8b5cf6', '#06b6d4'] + labels = server.labels + datasets = server.datasets.map((ds, idx) => ({ + ...ds, + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } else { + const points = (metric.metrics?.systemSeries as { date: string, category: string, downloads: number }[] | undefined) || [] + const { labelsIso, labels: lbls, categoryMap } = aggregateMonthlyByCategory(points) + labels = lbls + const sortedCategories = Object.keys(categoryMap).sort() + const palette = ['#0ea5e9', '#22c55e', '#f97316', '#e11d48', '#8b5cf6', '#06b6d4'] + datasets = sortedCategories.map((category, idx) => ({ + label: category, + data: labelsIso.map(l => categoryMap[category][l] || 0), + borderColor: palette[idx % palette.length], + backgroundColor: palette[idx % palette.length] + '33', + borderWidth: 2, + fill: false, + })) + } + + const canvas = new Canvas(1000, 800) + const chart = new Chart(canvas as any, { + type: 'line', + data: { labels, datasets }, + options: { + plugins: { + legend: { position: 'bottom' }, + title: { display: true, text: `${metric.name} downloads by OS` } + }, + scales: { + x: { title: { display: true, text: 'Month' } }, + y: { title: { display: true, text: 'Downloads' } } + } + } + }) + const svgBuffer = await canvas.toBuffer('svg', { matte: 'white' }) + const svgPath = `${outputPath}/${metric.name}-pypi-system.svg` + writeFileSync(svgPath, svgBuffer) + chart.destroy() + return svgPath +} + +// Removed static bar chart generators per request + +async function createPypiCharts(metrics: MetricResult[], basePath: string) { + const outputPaths: string[] = [] + for (const metric of metrics) { + const packagePath = `${basePath}` + mkdirSync(packagePath, { recursive: true }) + const overall = await createOverallDownloadsChart(metric, packagePath) + outputPaths.push(overall) + const pythonMajor = await createPythonMajorChart(metric, packagePath) + outputPaths.push(pythonMajor) + const pythonMinor = await createPythonMinorChart(metric, packagePath) + outputPaths.push(pythonMinor) + const installer = await createInstallerChart(metric, packagePath) + outputPaths.push(installer) + const system = await createSystemChart(metric, packagePath) + outputPaths.push(system) + // static bar charts removed + } + return outputPaths +} + +export function addPypiDetails(summary: string, metrics: MetricResult[]): string { + summary += `#### Package Details:\n\n` + for (const metric of metrics) { + summary += `**${metric.name}**:\n` + summary += `- Version: ${metric.metrics?.version || 'N/A'}\n` + if (metric.metrics?.latestReleaseDate) summary += `- Released: ${metric.metrics.latestReleaseDate}\n` + if (metric.metrics?.popularSystem) summary += `- Popular system: ${metric.metrics.popularSystem}\n` + if (metric.metrics?.popularInstaller) summary += `- Popular installer: ${metric.metrics.popularInstaller}\n` + summary += `- Releases: ${metric.metrics?.releases || 0}\n` + if (metric.metrics?.systemBreakdown) { + summary += `- OS Usage Breakdown \n` + for (const [key, value] of Object.entries(metric.metrics?.systemBreakdown)) { + summary += ` - ${key}: ${value}\n` + } + } + if (metric.metrics?.pythonVersionBreakdown) { + summary += `- Python Version Breakdown \n` + for (const [key, value] of Object.entries(metric.metrics?.pythonVersionBreakdown)) { + summary += ` - ${key}: ${value}\n` + } + } + } + return summary +} + +export async function addPypiCharts(summary: string, platformMetrics: MetricResult[]): Promise { + const outputPath = './charts/pypi' + mkdirSync(outputPath, { recursive: true }) + summary += `\n\n` + const svgPaths = await createPypiCharts(platformMetrics, outputPath) + for (const p of svgPaths) { + summary += `![${p}](${p})\n` + } + return summary +} \ No newline at end of file diff --git a/src/test-setup.ts b/src/test-setup.ts deleted file mode 100644 index 9e0be8f..0000000 --- a/src/test-setup.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Test setup file for Bun - * This file is preloaded before running tests - */ - -// Global test utilities can be defined here -(globalThis as any).testUtils = { - createMockUsageData: (userId: string, action: string) => ({ - timestamp: new Date(), - userId, - action, - metadata: { test: true } - }) -}; - -// Extend global types -declare global { - var testUtils: { - createMockUsageData: (userId: string, action: string) => { - timestamp: Date; - userId: string; - action: string; - metadata: { test: boolean }; - }; - }; -} - -// Export to make this a module -export {}; \ No newline at end of file diff --git a/src/trackers/github.ts b/src/trackers/github.ts deleted file mode 100644 index f2d3543..0000000 --- a/src/trackers/github.ts +++ /dev/null @@ -1,201 +0,0 @@ -/** - * GitHub Release Download Tracker - * Uses GitHub API with Octokit to fetch release download statistics - */ - -import type { BaseDownloadStats, PlatformTracker } from '../types'; -import { Octokit } from '@octokit/rest'; -import { retry } from '@octokit/plugin-retry'; -import { throttling } from '@octokit/plugin-throttling'; - -export interface GitHubDownloadStats extends BaseDownloadStats { - platform: 'github'; - repository: string; - releaseId: number; - releaseName: string; - releaseTag: string; - assetName?: string; - assetId?: number; -} - -export interface GitHubReleaseInfo { - id: number; - name: string | null; - tag_name: string; - published_at: string | null; - assets: Array<{ - id: number; - name: string; - download_count: number; - size: number; - content_type: string; - }>; - body?: string | null; - draft: boolean; - prerelease: boolean; -} - -export interface GitHubRepositoryInfo { - id: number; - name: string; - full_name: string; - description?: string | null; - html_url: string; - stargazers_count: number; - forks_count: number; - language?: string | null; - created_at: string; - updated_at: string; -} - -export class GitHubTracker implements PlatformTracker { - name = 'github'; - private token?: string; - private octokit: Octokit | null = null; - - constructor(token?: string) { - this.token = token || process.env.GITHUB_TOKEN; - this.initializeOctokit(); - } - - private async initializeOctokit() { - // Create Octokit with retry and throttling plugins - const MyOctokit = Octokit.plugin(retry, throttling); - - this.octokit = new MyOctokit({ - auth: this.token, - userAgent: 'usage-statistics-tracker', - timeZone: 'UTC', - baseUrl: 'https://api.github.com', - log: { - debug: () => {}, - info: () => {}, - warn: console.warn, - error: console.error - }, - throttle: { - onRateLimit: (retryAfter: number, options: any) => { - console.warn(`Rate limit hit for ${options.request.url}, retrying after ${retryAfter} seconds`); - return true; // Retry after the specified time - }, - onSecondaryRateLimit: (retryAfter: number, options: any) => { - console.warn(`Secondary rate limit hit for ${options.request.url}, retrying after ${retryAfter} seconds`); - return true; // Retry after the specified time - } - }, - retry: { - doNotRetry: [400, 401, 403, 404, 422], // Don't retry on these status codes - enabled: true - } - }); - } - - async getDownloadStats(repository: string, options?: { - releaseTag?: string; - assetName?: string; - startDate?: Date; - endDate?: Date; - }): Promise { - try { - const [owner, repo] = repository.split('/'); - if (!owner || !repo) { - throw new Error(`Invalid repository format: ${repository}. Expected format: owner/repo`); - } - - const releases = await this.getReleases(owner, repo); - const stats: GitHubDownloadStats[] = []; - - for (const release of releases) { - // Filter by release tag if specified - if (options?.releaseTag && release.tag_name !== options.releaseTag) { - continue; - } - - for (const asset of release.assets) { - // Filter by asset name if specified - if (options?.assetName && asset.name !== options.assetName) { - continue; - } - - stats.push({ - platform: 'github', - packageName: repository, - repository, - releaseId: release.id, - releaseName: release.name || 'Unknown', - releaseTag: release.tag_name, - assetName: asset.name, - assetId: asset.id, - downloadCount: asset.download_count, - metadata: { - assetSize: asset.size, - contentType: asset.content_type, - isDraft: release.draft, - isPrerelease: release.prerelease - } - }); - } - } - - return stats; - } catch (error) { - console.error(`Error fetching GitHub stats for ${repository}:`, error); - return []; - } - } - - async getLatestVersion(repository: string): Promise { - try { - const [owner, repo] = repository.split('/'); - const releases = await this.getReleases(owner, repo); - - // Get the latest non-draft, non-prerelease - const latestRelease = releases.find(r => !r.draft && !r.prerelease); - return latestRelease?.tag_name || null; - } catch (error) { - console.error(`Error fetching latest version for ${repository}:`, error); - return null; - } - } - - async getPackageInfo(repository: string): Promise { - const [owner, repo] = repository.split('/'); - - if (!this.octokit) { - throw new Error('Octokit not initialized'); - } - - try { - const response = await this.octokit.repos.get({ - owner, - repo - }); - return response.data; - } catch (error: any) { - console.error(`Error fetching repository info for ${repository}:`, error); - throw error; - } - } - - private async getReleases(owner: string, repo: string): Promise { - if (!this.octokit) { - throw new Error('Octokit not initialized'); - } - - try { - const response = await this.octokit.repos.listReleases({ - owner, - repo, - per_page: 100 - }); - return response.data; - } catch (error: any) { - console.error(`Error fetching releases for ${owner}/${repo}:`, error); - throw error; - } - } - - -} - -export default GitHubTracker; \ No newline at end of file diff --git a/src/trackers/go.ts b/src/trackers/go.ts deleted file mode 100644 index 64af28b..0000000 --- a/src/trackers/go.ts +++ /dev/null @@ -1,298 +0,0 @@ -/** - * Go Module Download Tracker - * Uses Go module proxy and GitHub API to fetch download statistics - */ - -import type { BaseDownloadStats, PlatformTracker } from '../types'; - -export interface GoDownloadStats extends BaseDownloadStats { - platform: 'go'; - moduleName: string; - version: string; - goVersion: string; - downloadCount: number; - publishedDate: Date; - goModHash: string; -} - -export interface GoModuleInfo { - Path: string; - Version: string; - Time: string; - Main: boolean; - GoMod: string; - GoVersion: string; - Retracted: boolean; - RetractedReason?: string; -} - -export interface GoModuleVersions { - Path: string; - Versions: string[]; - Time: Record; - Origin: Record; -} - -export interface GoModuleZipInfo { - Path: string; - Version: string; - Mod: GoModuleInfo; - Zip: { - Hash: string; - Size: number; - }; -} - -export class GoTracker implements PlatformTracker { - name = 'go'; - private proxyUrl = 'https://proxy.golang.org'; - private githubToken?: string; - - constructor(githubToken?: string) { - this.githubToken = githubToken; - } - - async getDownloadStats(moduleName: string, options?: { - version?: string; - startDate?: Date; - endDate?: Date; - }): Promise { - try { - const versions = await this.getModuleVersions(moduleName); - const stats: GoDownloadStats[] = []; - - for (const version of versions.Versions) { - if (options?.version && version !== options.version) { - continue; - } - - const moduleInfo = await this.getModuleInfo(moduleName, version); - const publishedDate = new Date(moduleInfo.Time); - - // Filter by date range if specified - if (options?.startDate && publishedDate < options.startDate) { - continue; - } - if (options?.endDate && publishedDate > options.endDate) { - continue; - } - - // Get download count (Go doesn't provide direct download stats) - // We'll use GitHub stars/forks as a proxy for popularity - const downloadCount = await this.getEstimatedDownloads(moduleName, version); - - stats.push({ - platform: 'go', - packageName: moduleName, - moduleName, - version, - goVersion: moduleInfo.GoVersion, - downloadCount, - publishedDate, - goModHash: moduleInfo.GoMod, - metadata: { - isMain: moduleInfo.Main, - isRetracted: moduleInfo.Retracted, - retractedReason: moduleInfo.RetractedReason, - goModHash: moduleInfo.GoMod - } - }); - } - - return stats; - } catch (error) { - console.error(`Error fetching Go stats for ${moduleName}:`, error); - return []; - } - } - - async getLatestVersion(moduleName: string): Promise { - try { - const versions = await this.getModuleVersions(moduleName); - return versions.Versions[versions.Versions.length - 1] || null; - } catch (error) { - console.error(`Error fetching latest version for ${moduleName}:`, error); - return null; - } - } - - async getPackageInfo(moduleName: string): Promise { - const latestVersion = await this.getLatestVersion(moduleName); - if (!latestVersion) { - throw new Error(`No versions found for module ${moduleName}`); - } - return this.getModuleInfo(moduleName, latestVersion); - } - - async getModuleVersions(moduleName: string): Promise { - const response = await fetch(`${this.proxyUrl}/${moduleName}/@v/list`); - if (!response.ok) { - throw new Error(`Failed to fetch versions for ${moduleName}`); - } - - const versions = await response.text(); - const versionList = versions.trim().split('\n').filter(v => v); - - // Get time information for each version - const timeInfo: Record = {}; - for (const version of versionList) { - const timeResponse = await fetch(`${this.proxyUrl}/${moduleName}/@v/${version}.info`); - if (timeResponse.ok) { - const timeData = await timeResponse.json(); - timeInfo[version] = timeData.Time; - } - } - - return { - Path: moduleName, - Versions: versionList, - Time: timeInfo, - Origin: {} - }; - } - - async getModuleInfo(moduleName: string, version: string): Promise { - const response = await fetch(`${this.proxyUrl}/${moduleName}/@v/${version}.info`); - if (!response.ok) { - throw new Error(`Failed to fetch module info for ${moduleName}@${version}`); - } - return response.json(); - } - - async getModuleZip(moduleName: string, version: string): Promise { - const response = await fetch(`${this.proxyUrl}/${moduleName}/@v/${version}.zip`); - if (!response.ok) { - throw new Error(`Failed to fetch module zip for ${moduleName}@${version}`); - } - - // Get the mod info - const modInfo = await this.getModuleInfo(moduleName, version); - - return { - Path: moduleName, - Version: version, - Mod: modInfo, - Zip: { - Hash: '', // Would need to calculate hash from response - Size: parseInt(response.headers.get('content-length') || '0') - } - }; - } - - private async getEstimatedDownloads(moduleName: string, version: string): Promise { - try { - // Try to get GitHub repository info if it's a GitHub module - if (moduleName.includes('github.com')) { - const repoPath = moduleName.replace('github.com/', ''); - const response = await fetch(`https://api.github.com/repos/${repoPath}`, { - headers: this.githubToken ? { - 'Authorization': `token ${this.githubToken}`, - 'Accept': 'application/vnd.github.v3+json' - } : { - 'Accept': 'application/vnd.github.v3+json' - } - }); - - if (response.ok) { - const repoData = await response.json(); - // Use stars + forks as a rough estimate of popularity - return (repoData.stargazers_count || 0) + (repoData.forks_count || 0); - } - } - - // Fallback: use a simple heuristic based on version age - const moduleInfo = await this.getModuleInfo(moduleName, version); - const ageInDays = (Date.now() - new Date(moduleInfo.Time).getTime()) / (1000 * 60 * 60 * 24); - return Math.max(1, Math.floor(100 / (ageInDays + 1))); // More downloads for newer versions - } catch (error) { - console.error(`Error estimating downloads for ${moduleName}@${version}:`, error); - return 1; - } - } - - async searchModules(query: string): Promise<{ - modules: Array<{ - path: string; - version: string; - time: string; - }>; - }> { - try { - // Go doesn't have a built-in search API, but we can search GitHub for Go modules - const response = await fetch(`https://api.github.com/search/repositories?q=${query}+language:go&sort=stars&order=desc`, { - headers: this.githubToken ? { - 'Authorization': `token ${this.githubToken}`, - 'Accept': 'application/vnd.github.v3+json' - } : { - 'Accept': 'application/vnd.github.v3+json' - } - }); - - if (!response.ok) { - throw new Error('Failed to search Go modules'); - } - - const data = await response.json(); - return { - modules: data.items.map((repo: any) => ({ - path: `github.com/${repo.full_name}`, - version: 'latest', - time: repo.created_at - })) - }; - } catch (error) { - console.error('Error searching Go modules:', error); - return { modules: [] }; - } - } - - async getModuleAnalytics(moduleName: string): Promise<{ - totalVersions: number; - latestVersion: string; - firstPublished: Date; - lastPublished: Date; - estimatedTotalDownloads: number; - }> { - try { - const versions = await this.getModuleVersions(moduleName); - const latestVersion = versions.Versions[versions.Versions.length - 1]; - - let firstPublished = new Date(); - let lastPublished = new Date(0); - let totalDownloads = 0; - - for (const version of versions.Versions) { - const moduleInfo = await this.getModuleInfo(moduleName, version); - const publishedDate = new Date(moduleInfo.Time); - - if (publishedDate < firstPublished) { - firstPublished = publishedDate; - } - if (publishedDate > lastPublished) { - lastPublished = publishedDate; - } - - totalDownloads += await this.getEstimatedDownloads(moduleName, version); - } - - return { - totalVersions: versions.Versions.length, - latestVersion: latestVersion || '', - firstPublished, - lastPublished, - estimatedTotalDownloads: totalDownloads - }; - } catch (error) { - console.error(`Error fetching analytics for ${moduleName}:`, error); - return { - totalVersions: 0, - latestVersion: '', - firstPublished: new Date(), - lastPublished: new Date(), - estimatedTotalDownloads: 0 - }; - } - } -} - -export default GoTracker; \ No newline at end of file diff --git a/src/trackers/homebrew.ts b/src/trackers/homebrew.ts deleted file mode 100644 index c49b9e3..0000000 --- a/src/trackers/homebrew.ts +++ /dev/null @@ -1,199 +0,0 @@ -/** - * Homebrew Package Download Tracker - * Uses Homebrew API and GitHub API to fetch download statistics - */ - -import type { BaseDownloadStats, PlatformTracker } from '../types'; - -export interface HomebrewDownloadStats extends BaseDownloadStats { - platform: 'homebrew'; - formulaName: string; - tapName: string; - version: string; - installCount: number; - analyticsData?: { - installEvents: number; - buildErrors: number; - osVersion: string; - rubyVersion: string; - }; -} - -export interface HomebrewFormulaInfo { - name: string; - full_name: string; - desc?: string; - homepage?: string; - version: string; - installed: number[]; - dependencies: string[]; - conflicts: string[]; - caveats?: string; - analytics?: { - install: { - '30d': Record; - '90d': Record; - '365d': Record; - }; - }; -} - -export interface HomebrewTapInfo { - name: string; - full_name: string; - description?: string; - homepage?: string; - url: string; - clone_url: string; - default_branch: string; - stargazers_count: number; - forks_count: number; -} - -export class HomebrewTracker implements PlatformTracker { - name = 'homebrew'; - private baseUrl = 'https://formulae.brew.sh/api'; - private githubToken?: string; - - constructor(githubToken?: string) { - this.githubToken = githubToken; - } - - async getDownloadStats(formulaName: string, options?: { - tapName?: string; - period?: '30d' | '90d' | '365d'; - startDate?: Date; - endDate?: Date; - }): Promise { - try { - const formulaInfo = await this.getPackageInfo(formulaName); - const stats: HomebrewDownloadStats[] = []; - - // Get analytics data if available - if (formulaInfo.analytics?.install) { - const period = options?.period || '30d'; - const analytics = formulaInfo.analytics.install[period]; - - if (analytics) { - const totalInstalls = Object.values(analytics).reduce((sum, count) => sum + count, 0); - - stats.push({ - platform: 'homebrew', - packageName: formulaName, - formulaName, - tapName: this.getTapName(formulaName), - version: formulaInfo.version, - installCount: totalInstalls, - downloadCount: totalInstalls, // For compatibility with BaseDownloadStats - metadata: { - analyticsPeriod: period, - analyticsData: analytics, - dependencies: formulaInfo.dependencies, - conflicts: formulaInfo.conflicts - } - }); - } - } - - // If no analytics available, create a basic stat entry - if (stats.length === 0) { - stats.push({ - platform: 'homebrew', - packageName: formulaName, - formulaName, - tapName: this.getTapName(formulaName), - version: formulaInfo.version, - installCount: formulaInfo.installed.length, - downloadCount: formulaInfo.installed.length, - metadata: { - installedVersions: formulaInfo.installed, - dependencies: formulaInfo.dependencies, - conflicts: formulaInfo.conflicts - } - }); - } - - return stats; - } catch (error) { - console.error(`Error fetching Homebrew stats for ${formulaName}:`, error); - return []; - } - } - - async getLatestVersion(formulaName: string): Promise { - try { - const formulaInfo = await this.getPackageInfo(formulaName); - return formulaInfo.version || null; - } catch (error) { - console.error(`Error fetching latest version for ${formulaName}:`, error); - return null; - } - } - - async getPackageInfo(formulaName: string): Promise { - const response = await fetch(`${this.baseUrl}/formula/${formulaName}.json`); - if (!response.ok) { - throw new Error(`Failed to fetch formula info for ${formulaName}`); - } - return response.json(); - } - - async getTapInfo(tapName: string): Promise { - // Homebrew taps are GitHub repositories - const response = await fetch(`https://api.github.com/repos/Homebrew/${tapName}`, { - headers: this.githubToken ? { - 'Authorization': `token ${this.githubToken}`, - 'Accept': 'application/vnd.github.v3+json' - } : { - 'Accept': 'application/vnd.github.v3+json' - } - }); - - if (!response.ok) { - throw new Error(`Failed to fetch tap info for ${tapName}`); - } - - return response.json(); - } - - async getAllFormulae(): Promise { - try { - const response = await fetch(`${this.baseUrl}/formula.json`); - if (!response.ok) { - throw new Error('Failed to fetch all formulae'); - } - - const formulae = await response.json(); - return formulae.map((formula: any) => formula.name); - } catch (error) { - console.error('Error fetching all formulae:', error); - return []; - } - } - - async getAnalytics(formulaName: string, period: '30d' | '90d' | '365d' = '30d'): Promise<{ - date: string; - installs: number; - }[]> { - try { - const response = await fetch(`${this.baseUrl}/analytics/install/${period}/${formulaName}.json`); - if (!response.ok) { - throw new Error(`Failed to fetch analytics for ${formulaName}`); - } - - const data = await response.json(); - return data.analytics || []; - } catch (error) { - console.error(`Error fetching analytics for ${formulaName}:`, error); - return []; - } - } - - private getTapName(formulaName: string): string { - // Most formulae are in the homebrew/core tap - // This is a simplified implementation - return 'homebrew/core'; - } -} - -export default HomebrewTracker; \ No newline at end of file diff --git a/src/trackers/npm.ts b/src/trackers/npm.ts deleted file mode 100644 index 1451a57..0000000 --- a/src/trackers/npm.ts +++ /dev/null @@ -1,109 +0,0 @@ -/** - * NPM Package Download Tracker - * Uses the npm registry API to fetch download statistics - */ - -import type { BaseDownloadStats, PlatformTracker } from '../types'; - -export interface NpmDownloadStats extends BaseDownloadStats { - platform: 'npm'; - registry: string; - distTags?: Record; - dependencies?: Record; -} - -export interface NpmPackageInfo { - name: string; - version: string; - description?: string; - homepage?: string; - repository?: { - type: string; - url: string; - }; - distTags: Record; - time: Record; - versions: Record; -} - -export class NpmTracker implements PlatformTracker { - name = 'npm'; - private baseUrl = 'https://registry.npmjs.org'; - - async getDownloadStats(packageName: string, options?: { - period?: 'daily' | 'weekly' | 'monthly' | 'total'; - startDate?: Date; - endDate?: Date; - }): Promise { - try { - // Get package info - const packageInfo = await this.getPackageInfo(packageName); - - // Get download stats from npm registry - const stats = await this.fetchDownloadStats(packageName, options); - - return stats.map(stat => ({ - ...stat, - platform: 'npm' as const, - registry: this.baseUrl, - distTags: packageInfo.distTags, - dependencies: packageInfo.versions[packageInfo.distTags?.latest]?.dependencies - })); - } catch (error) { - console.error(`Error fetching NPM stats for ${packageName}:`, error); - return []; - } - } - - async getLatestVersion(packageName: string): Promise { - try { - const packageInfo = await this.getPackageInfo(packageName); - return packageInfo.distTags?.latest || null; - } catch (error) { - console.error(`Error fetching latest version for ${packageName}:`, error); - return null; - } - } - - async getPackageInfo(packageName: string): Promise { - const response = await fetch(`${this.baseUrl}/${packageName}`); - if (!response.ok) { - throw new Error(`Failed to fetch package info for ${packageName}`); - } - return response.json(); - } - - private async fetchDownloadStats(packageName: string, options?: { - period?: 'daily' | 'weekly' | 'monthly' | 'total'; - startDate?: Date; - endDate?: Date; - }): Promise { - // Note: NPM registry doesn't provide direct download stats via API - // This would typically require using npm-stat.com or similar services - // For now, we'll return a placeholder structure - - const now = new Date(); - const stats: NpmDownloadStats[] = []; - - // Simulate daily stats for the last 30 days - for (let i = 0; i < 30; i++) { - const date = new Date(now); - date.setDate(date.getDate() - i); - - stats.push({ - platform: 'npm', - packageName, - downloadCount: Math.floor(Math.random() * 1000) + 100, // Simulated data - registry: this.baseUrl, - metadata: { - source: 'npm-registry', - simulated: true - } - }); - } - - return stats; - } -} - -export default NpmTracker; \ No newline at end of file diff --git a/src/trackers/postman.ts b/src/trackers/postman.ts deleted file mode 100644 index 0121023..0000000 --- a/src/trackers/postman.ts +++ /dev/null @@ -1,286 +0,0 @@ -/** - * Postman Collection Download/Fork Tracker - * Uses Postman API to fetch collection statistics - */ - -import type { BaseDownloadStats, PlatformTracker } from '../types'; - -export interface PostmanDownloadStats extends BaseDownloadStats { - platform: 'postman'; - collectionId: string; - collectionName: string; - version: string; - forkCount: number; - downloadCount: number; - viewCount: number; - author: string; - publishedDate: Date; -} - -export interface PostmanCollectionInfo { - id: string; - name: string; - description?: string; - version: string; - author: { - id: string; - name: string; - username: string; - }; - publishedAt: string; - updatedAt: string; - forkCount: number; - downloadCount: number; - viewCount: number; - schema: string; - info: { - name: string; - description?: string; - version: string; - schema: string; - }; - item: any[]; - variable: any[]; -} - -export interface PostmanWorkspaceInfo { - id: string; - name: string; - type: 'personal' | 'team' | 'private'; - description?: string; - collections: PostmanCollectionInfo[]; -} - -export class PostmanTracker implements PlatformTracker { - name = 'postman'; - private baseUrl = 'https://api.getpostman.com'; - private apiKey?: string; - - constructor(apiKey?: string) { - this.apiKey = apiKey; - } - - async getDownloadStats(collectionId: string, options?: { - version?: string; - startDate?: Date; - endDate?: Date; - }): Promise { - try { - const collectionInfo = await this.getPackageInfo(collectionId); - const stats: PostmanDownloadStats[] = []; - - // Get collection versions if available - const versions = await this.getCollectionVersions(collectionId); - - for (const version of versions) { - if (options?.version && version.version !== options.version) { - continue; - } - - const publishedDate = new Date(version.publishedAt); - - // Filter by date range if specified - if (options?.startDate && publishedDate < options.startDate) { - continue; - } - if (options?.endDate && publishedDate > options.endDate) { - continue; - } - - stats.push({ - platform: 'postman', - packageName: collectionId, - collectionId, - collectionName: version.name, - version: version.version, - forkCount: version.forkCount || 0, - downloadCount: version.downloadCount || 0, - viewCount: version.viewCount || 0, - author: version.author?.name || 'Unknown', - publishedDate, - metadata: { - authorId: version.author?.id, - authorUsername: version.author?.username, - schema: version.schema, - itemCount: version.item?.length || 0 - } - }); - } - - return stats; - } catch (error) { - console.error(`Error fetching Postman stats for ${collectionId}:`, error); - return []; - } - } - - async getLatestVersion(collectionId: string): Promise { - try { - const collectionInfo = await this.getPackageInfo(collectionId); - return collectionInfo.version || null; - } catch (error) { - console.error(`Error fetching latest version for ${collectionId}:`, error); - return null; - } - } - - async getPackageInfo(collectionId: string): Promise { - const headers: Record = { - 'Accept': 'application/json' - }; - - if (this.apiKey) { - headers['X-API-Key'] = this.apiKey; - } - - const response = await fetch(`${this.baseUrl}/collections/${collectionId}`, { - headers - }); - - if (!response.ok) { - throw new Error(`Failed to fetch collection info for ${collectionId}`); - } - - return response.json(); - } - - async getCollectionVersions(collectionId: string): Promise { - try { - const headers: Record = { - 'Accept': 'application/json' - }; - - if (this.apiKey) { - headers['X-API-Key'] = this.apiKey; - } - - const response = await fetch(`${this.baseUrl}/collections/${collectionId}/versions`, { - headers - }); - - if (!response.ok) { - throw new Error(`Failed to fetch versions for ${collectionId}`); - } - - return response.json(); - } catch (error) { - console.error(`Error fetching versions for ${collectionId}:`, error); - return []; - } - } - - async searchCollections(query: string, options?: { - workspaceId?: string; - limit?: number; - offset?: number; - }): Promise<{ - collections: PostmanCollectionInfo[]; - totalCount: number; - }> { - try { - const headers: Record = { - 'Accept': 'application/json' - }; - - if (this.apiKey) { - headers['X-API-Key'] = this.apiKey; - } - - const params = new URLSearchParams({ - q: query, - limit: (options?.limit || 50).toString(), - offset: (options?.offset || 0).toString() - }); - - if (options?.workspaceId) { - params.set('workspace', options.workspaceId); - } - - const response = await fetch(`${this.baseUrl}/search?${params}`, { - headers - }); - - if (!response.ok) { - throw new Error('Failed to search collections'); - } - - return response.json(); - } catch (error) { - console.error('Error searching collections:', error); - return { - collections: [], - totalCount: 0 - }; - } - } - - async getWorkspaceCollections(workspaceId: string): Promise { - try { - const headers: Record = { - 'Accept': 'application/json' - }; - - if (this.apiKey) { - headers['X-API-Key'] = this.apiKey; - } - - const response = await fetch(`${this.baseUrl}/workspaces/${workspaceId}/collections`, { - headers - }); - - if (!response.ok) { - throw new Error(`Failed to fetch workspace collections for ${workspaceId}`); - } - - return response.json(); - } catch (error) { - console.error(`Error fetching workspace collections for ${workspaceId}:`, error); - return []; - } - } - - async getCollectionAnalytics(collectionId: string): Promise<{ - totalDownloads: number; - totalForks: number; - totalViews: number; - downloadsByVersion: Record; - forksByVersion: Record; - }> { - try { - const versions = await this.getCollectionVersions(collectionId); - - const downloadsByVersion: Record = {}; - const forksByVersion: Record = {}; - let totalDownloads = 0; - let totalForks = 0; - let totalViews = 0; - - for (const version of versions) { - downloadsByVersion[version.version] = version.downloadCount || 0; - forksByVersion[version.version] = version.forkCount || 0; - totalDownloads += version.downloadCount || 0; - totalForks += version.forkCount || 0; - totalViews += version.viewCount || 0; - } - - return { - totalDownloads, - totalForks, - totalViews, - downloadsByVersion, - forksByVersion - }; - } catch (error) { - console.error(`Error fetching analytics for ${collectionId}:`, error); - return { - totalDownloads: 0, - totalForks: 0, - totalViews: 0, - downloadsByVersion: {}, - forksByVersion: {} - }; - } - } -} - -export default PostmanTracker; \ No newline at end of file diff --git a/src/trackers/powershell.ts b/src/trackers/powershell.ts deleted file mode 100644 index 73014c1..0000000 --- a/src/trackers/powershell.ts +++ /dev/null @@ -1,212 +0,0 @@ -/** - * PowerShell Gallery Module Download Tracker - * Uses PowerShell Gallery API to fetch download statistics - */ - -import type { BaseDownloadStats, PlatformTracker } from '../types'; - -export interface PowerShellDownloadStats extends BaseDownloadStats { - platform: 'powershell'; - moduleName: string; - version: string; - author: string; - description?: string; - tags: string[]; - downloadCount: number; - publishedDate: Date; -} - -export interface PowerShellModuleInfo { - Id: string; - Version: string; - Title: string; - Author: string; - Description: string; - Tags: string[]; - PublishedDate: string; - UpdatedDate: string; - DownloadCount: number; - IsLatestVersion: boolean; - Dependencies: Array<{ - id: string; - version: string; - }>; - PowerShellVersion: string; - ProjectUri?: string; - LicenseUri?: string; - IconUri?: string; - ReleaseNotes?: string; -} - -export interface PowerShellSearchResult { - TotalCount: number; - Results: PowerShellModuleInfo[]; -} - -export class PowerShellTracker implements PlatformTracker { - name = 'powershell'; - private baseUrl = 'https://www.powershellgallery.com/api/v2'; - - async getDownloadStats(moduleName: string, options?: { - version?: string; - startDate?: Date; - endDate?: Date; - }): Promise { - try { - const moduleInfo = await this.getPackageInfo(moduleName); - const stats: PowerShellDownloadStats[] = []; - - // Get all versions of the module - const allVersions = await this.getAllVersions(moduleName); - - for (const version of allVersions) { - if (options?.version && version.Version !== options.version) { - continue; - } - - const publishedDate = new Date(version.PublishedDate); - - // Filter by date range if specified - if (options?.startDate && publishedDate < options.startDate) { - continue; - } - if (options?.endDate && publishedDate > options.endDate) { - continue; - } - - stats.push({ - platform: 'powershell', - packageName: moduleName, - moduleName, - version: version.Version, - author: version.Author, - description: version.Description, - tags: version.Tags, - downloadCount: version.DownloadCount, - publishedDate, - metadata: { - isLatestVersion: version.IsLatestVersion, - dependencies: version.Dependencies, - powershellVersion: version.PowerShellVersion, - projectUri: version.ProjectUri, - licenseUri: version.LicenseUri, - releaseNotes: version.ReleaseNotes - } - }); - } - - return stats; - } catch (error) { - console.error(`Error fetching PowerShell stats for ${moduleName}:`, error); - return []; - } - } - - async getLatestVersion(moduleName: string): Promise { - try { - const moduleInfo = await this.getPackageInfo(moduleName); - return moduleInfo.Version || null; - } catch (error) { - console.error(`Error fetching latest version for ${moduleName}:`, error); - return null; - } - } - - async getPackageInfo(moduleName: string): Promise { - const response = await fetch(`${this.baseUrl}/package/${moduleName}`); - if (!response.ok) { - throw new Error(`Failed to fetch module info for ${moduleName}`); - } - return response.json(); - } - - async getAllVersions(moduleName: string): Promise { - try { - const response = await fetch(`${this.baseUrl}/package/${moduleName}/versions`); - if (!response.ok) { - throw new Error(`Failed to fetch versions for ${moduleName}`); - } - return response.json(); - } catch (error) { - console.error(`Error fetching versions for ${moduleName}:`, error); - return []; - } - } - - async searchModules(query: string, options?: { - includePrerelease?: boolean; - skip?: number; - take?: number; - }): Promise { - const params = new URLSearchParams({ - $filter: `IsLatestVersion eq true`, - $orderby: 'DownloadCount desc', - $skip: (options?.skip || 0).toString(), - $top: (options?.take || 50).toString() - }); - - if (query) { - params.set('$filter', `${params.get('$filter')} and substringof('${query}', Id)`); - } - - const response = await fetch(`${this.baseUrl}/search?${params}`); - if (!response.ok) { - throw new Error('Failed to search modules'); - } - - return response.json(); - } - - async getPopularModules(limit: number = 50): Promise { - try { - const searchResult = await this.searchModules('', { take: limit }); - return searchResult.Results; - } catch (error) { - console.error('Error fetching popular modules:', error); - return []; - } - } - - async getModuleAnalytics(moduleName: string): Promise<{ - totalDownloads: number; - downloadsByVersion: Record; - downloadsByDate: Array<{ - date: string; - downloads: number; - }>; - }> { - try { - const allVersions = await this.getAllVersions(moduleName); - - const downloadsByVersion: Record = {}; - let totalDownloads = 0; - - for (const version of allVersions) { - downloadsByVersion[version.Version] = version.DownloadCount; - totalDownloads += version.DownloadCount; - } - - // Note: PowerShell Gallery doesn't provide detailed time-based analytics - // This is a simplified implementation - const downloadsByDate = allVersions.map(version => ({ - date: version.PublishedDate, - downloads: version.DownloadCount - })); - - return { - totalDownloads, - downloadsByVersion, - downloadsByDate - }; - } catch (error) { - console.error(`Error fetching analytics for ${moduleName}:`, error); - return { - totalDownloads: 0, - downloadsByVersion: {}, - downloadsByDate: [] - }; - } - } -} - -export default PowerShellTracker; \ No newline at end of file diff --git a/src/trackers/pypi.ts b/src/trackers/pypi.ts deleted file mode 100644 index 11fd9c5..0000000 --- a/src/trackers/pypi.ts +++ /dev/null @@ -1,146 +0,0 @@ -/** - * PyPI Package Download Tracker - * Uses PyPI JSON API to fetch download statistics - */ - -import type { BaseDownloadStats, PlatformTracker } from '../types'; - -export interface PyPiDownloadStats extends BaseDownloadStats { - platform: 'pypi'; - packageName: string; - version: string; - fileType: string; - pythonVersion?: string; - uploadTime: Date; -} - -export interface PyPiPackageInfo { - info: { - name: string; - version: string; - summary?: string; - description?: string; - home_page?: string; - author?: string; - author_email?: string; - license?: string; - requires_python?: string; - project_urls?: Record; - }; - releases: Record>; - urls: Array<{ - filename: string; - url: string; - size: number; - upload_time: string; - file_type: string; - python_version?: string; - download_count?: number; - }>; -} - -export class PyPiTracker implements PlatformTracker { - name = 'pypi'; - private baseUrl = 'https://pypi.org/pypi'; - - async getDownloadStats(packageName: string, options?: { - version?: string; - fileType?: string; - startDate?: Date; - endDate?: Date; - }): Promise { - try { - const packageInfo = await this.getPackageInfo(packageName); - const stats: PyPiDownloadStats[] = []; - - // Process releases - for (const [version, files] of Object.entries(packageInfo.releases)) { - if (options?.version && version !== options.version) { - continue; - } - - for (const file of files) { - if (options?.fileType && file.file_type !== options.fileType) { - continue; - } - - // Filter by date range if specified - const uploadTime = new Date(file.upload_time); - if (options?.startDate && uploadTime < options.startDate) { - continue; - } - if (options?.endDate && uploadTime > options.endDate) { - continue; - } - - stats.push({ - platform: 'pypi', - packageName, - version, - fileType: file.file_type, - pythonVersion: file.python_version, - uploadTime, - downloadCount: file.download_count || 0, - metadata: { - filename: file.filename, - fileSize: file.size, - url: file.url - } - }); - } - } - - return stats; - } catch (error) { - console.error(`Error fetching PyPI stats for ${packageName}:`, error); - return []; - } - } - - async getLatestVersion(packageName: string): Promise { - try { - const packageInfo = await this.getPackageInfo(packageName); - return packageInfo.info.version || null; - } catch (error) { - console.error(`Error fetching latest version for ${packageName}:`, error); - return null; - } - } - - async getPackageInfo(packageName: string): Promise { - const response = await fetch(`${this.baseUrl}/${packageName}/json`); - if (!response.ok) { - throw new Error(`Failed to fetch package info for ${packageName}`); - } - return response.json(); - } - - async getDownloadCounts(packageName: string, period: 'day' | 'week' | 'month' = 'month'): Promise<{ - date: string; - downloads: number; - }[]> { - try { - // PyPI provides download stats via a separate endpoint - const response = await fetch(`https://pypi.org/pypi/${packageName}/stats/${period}`); - if (!response.ok) { - throw new Error(`Failed to fetch download stats for ${packageName}`); - } - - const data = await response.json(); - return data.data || []; - } catch (error) { - console.error(`Error fetching download counts for ${packageName}:`, error); - return []; - } - } -} - -export default PyPiTracker; \ No newline at end of file diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index 84c6e19..0000000 --- a/src/types/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Shared types for usage statistics tracking across all platforms - */ - -export interface BaseDownloadStats { - platform: string; - packageName: string; - version?: string; - downloadCount: number; - metadata?: Record; -} - -export interface PlatformTracker { - name: string; - getDownloadStats(packageName: string, options?: any): Promise; - getLatestVersion(packageName: string): Promise; - getPackageInfo(packageName: string): Promise; -} - -export interface TrackingConfig { - npmPackages?: string[]; - goModules?: string[]; - pythonPackages?: string[]; - powershellModules?: string[]; - homebrewPackages?: string[]; - githubRepos?: string[]; - postmanCollections?: string[]; - updateInterval?: number; // in milliseconds - enableLogging?: boolean; -} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..afdae40 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,148 @@ +import * as core from '@actions/core'; +import { CategoryScale, Chart, LinearScale, LineController, LineElement, PointElement, BarController, BarElement } from 'chart.js'; +import { readFile, writeFile } from 'fs/promises'; +import { writeFileSync } from 'node:fs'; +import { Canvas } from 'skia-canvas'; +import type { MetricResult } from "./collectors/types"; +import { addRepoDetails, formatGitHubSummary } from './summaries/github'; +import { addNpmDetails, formatNpmSummary } from './summaries/npm'; +import { formatPowerShellSummary, addPowerShellDetails } from './summaries/powershell'; +import { addPypiDetails, addPypiCharts, formatPypiSummary } from './summaries/pypi'; + +Chart.register([ + CategoryScale, + LineController, + LineElement, + LinearScale, + PointElement, + BarController, + BarElement +]); + +/** + * Parse comma-separated inputs into arrays + * @param input - The input string to parse + * @returns An array of trimmed, non-empty items + */ +function parseCommaSeparatedInputs(input: string) { + return input ? input.split(',').map(item => item.trim()).filter(item => item) : [] +} + +export function getInputs() { + // Get all inputs from action.yml + const npmPackages = core.getInput('npm-packages') + const githubRepositories = core.getInput('github-repositories') + const pypiPackages = core.getInput('pypi-packages') + const powershellModules = core.getInput('powershell-modules') + const jsonOutputPath = core.getInput('json-output-path') + const updateReadme = core.getBooleanInput('update-readme') + const commitMessage = core.getInput('commit-message') + const readmePath = core.getInput('readme-path') + + return { + npmPackages: parseCommaSeparatedInputs(npmPackages), + githubRepositories: parseCommaSeparatedInputs(githubRepositories), + pypiPackages: parseCommaSeparatedInputs(pypiPackages), + powershellModules: parseCommaSeparatedInputs(powershellModules), + jsonOutputPath, + updateReadme, + commitMessage, + readmePath, + } +} + +const MetricsPlaceHolderRegex = /[\s\S]*/ + +function formatSummary(summary: string) { + return `\n${summary}\n` +} + +const PlatformMap = { + "NPM": "JavaScript/TypeScript", + "PyPI": "Python", + "PowerShell Gallery": undefined, + "GitHub": undefined, +} + +export async function createSummary(metrics: MetricResult[]) { + const platforms = metrics.map(metric => metric.platform).filter((value, index, self) => self.indexOf(value) === index) + console.log(platforms) + + console.log(metrics) + + let summary = `# Usage Statistics + +Last updated: ${new Date().toLocaleString()} + +Below are stats from artifacts tracked across ${platforms.slice(0, -1).join(', ')} and ${platforms.slice(-1)}. + +` + + for (const platform of platforms) { + + const platformMetrics = metrics.filter(metric => metric.platform === platform) + const platformLanguage = PlatformMap[platform as keyof typeof PlatformMap] + + summary += `### ${platform}${platformLanguage ? ` (${platformLanguage})` : ''}: \n\n` + + switch (platform) { + case "NPM": + summary = formatNpmSummary(summary, platformMetrics) + break; + case "GitHub": + summary = formatGitHubSummary(summary, platformMetrics) + break; + case "PyPI": + summary = formatPypiSummary(summary, platformMetrics) + break; + case "PowerShell": + summary = formatPowerShellSummary(summary, platformMetrics) + break; + default: + let platformDownloadTotal = 0 + summary += `| Package | Downloads |\n` + summary += `| --- | --- |\n` + for (const metric of platformMetrics) { + summary += `| ${metric.name} | ${metric.metrics?.downloadCount?.toLocaleString() || 0} |\n` + platformDownloadTotal += metric.metrics?.downloadCount || 0 + } + summary += `| **Total** | **${platformDownloadTotal.toLocaleString()}** |\n` + break; + } + + summary += `\n` + + // Add detailed information for each platform + switch (platform) { + case "GitHub": + summary = await addRepoDetails(summary, platformMetrics) + break; + case "PyPI": + summary = addPypiDetails(summary, platformMetrics) + summary = await addPypiCharts(summary, platformMetrics) + break; + case "NPM": + summary = await addNpmDetails(summary, platformMetrics) + break; + case "PowerShell": + summary = await addPowerShellDetails(summary, platformMetrics) + break; + default: + break; + } + + summary += '\n' + } + + return summary +} + +export async function updateRepositoryReadme(metrics: MetricResult[], readmePath: string) { + const currentReadme = await readFile(readmePath, 'utf8') + + const summary = await createSummary(metrics) + + const updatedReadme = currentReadme.replace(MetricsPlaceHolderRegex, formatSummary(summary)) + + await writeFile(readmePath, updatedReadme) +} \ No newline at end of file diff --git a/stats.json b/stats.json new file mode 100644 index 0000000..7a74100 --- /dev/null +++ b/stats.json @@ -0,0 +1,8028 @@ +[ + { + "platform": "NPM", + "name": "sailpoint-api-client", + "timestamp": "2025-08-15T02:11:27.288Z", + "metrics": { + "downloadsTotal": 16740, + "downloadsMonthly": 1308, + "downloadsWeekly": 272, + "downloadsDaily": 39, + "downloadsRange": [ + { + "downloads": 0, + "day": "2023-03-01" + }, + { + "downloads": 0, + "day": "2023-03-02" + }, + { + "downloads": 0, + "day": "2023-03-03" + }, + { + "downloads": 0, + "day": "2023-03-04" + }, + { + "downloads": 0, + "day": "2023-03-05" + }, + { + "downloads": 0, + "day": "2023-03-06" + }, + { + "downloads": 0, + "day": "2023-03-07" + }, + { + "downloads": 0, + "day": "2023-03-08" + }, + { + "downloads": 0, + "day": "2023-03-09" + }, + { + "downloads": 0, + "day": "2023-03-10" + }, + { + "downloads": 0, + "day": "2023-03-11" + }, + { + "downloads": 0, + "day": "2023-03-12" + }, + { + "downloads": 0, + "day": "2023-03-13" + }, + { + "downloads": 0, + "day": "2023-03-14" + }, + { + "downloads": 0, + "day": "2023-03-15" + }, + { + "downloads": 0, + "day": "2023-03-16" + }, + { + "downloads": 0, + "day": "2023-03-17" + }, + { + "downloads": 0, + "day": "2023-03-18" + }, + { + "downloads": 0, + "day": "2023-03-19" + }, + { + "downloads": 0, + "day": "2023-03-20" + }, + { + "downloads": 0, + "day": "2023-03-21" + }, + { + "downloads": 0, + "day": "2023-03-22" + }, + { + "downloads": 0, + "day": "2023-03-23" + }, + { + "downloads": 0, + "day": "2023-03-24" + }, + { + "downloads": 0, + "day": "2023-03-25" + }, + { + "downloads": 0, + "day": "2023-03-26" + }, + { + "downloads": 0, + "day": "2023-03-27" + }, + { + "downloads": 0, + "day": "2023-03-28" + }, + { + "downloads": 0, + "day": "2023-03-29" + }, + { + "downloads": 2, + "day": "2023-03-30" + }, + { + "downloads": 0, + "day": "2023-03-31" + }, + { + "downloads": 0, + "day": "2023-04-01" + }, + { + "downloads": 0, + "day": "2023-04-02" + }, + { + "downloads": 0, + "day": "2023-04-03" + }, + { + "downloads": 0, + "day": "2023-04-04" + }, + { + "downloads": 0, + "day": "2023-04-05" + }, + { + "downloads": 2, + "day": "2023-04-06" + }, + { + "downloads": 0, + "day": "2023-04-07" + }, + { + "downloads": 0, + "day": "2023-04-08" + }, + { + "downloads": 0, + "day": "2023-04-09" + }, + { + "downloads": 2, + "day": "2023-04-10" + }, + { + "downloads": 0, + "day": "2023-04-11" + }, + { + "downloads": 1, + "day": "2023-04-12" + }, + { + "downloads": 2, + "day": "2023-04-13" + }, + { + "downloads": 2, + "day": "2023-04-14" + }, + { + "downloads": 0, + "day": "2023-04-15" + }, + { + "downloads": 0, + "day": "2023-04-16" + }, + { + "downloads": 0, + "day": "2023-04-17" + }, + { + "downloads": 2, + "day": "2023-04-18" + }, + { + "downloads": 2, + "day": "2023-04-19" + }, + { + "downloads": 46, + "day": "2023-04-20" + }, + { + "downloads": 14, + "day": "2023-04-21" + }, + { + "downloads": 9, + "day": "2023-04-22" + }, + { + "downloads": 2, + "day": "2023-04-23" + }, + { + "downloads": 2, + "day": "2023-04-24" + }, + { + "downloads": 1, + "day": "2023-04-25" + }, + { + "downloads": 5, + "day": "2023-04-26" + }, + { + "downloads": 1, + "day": "2023-04-27" + }, + { + "downloads": 1, + "day": "2023-04-28" + }, + { + "downloads": 0, + "day": "2023-04-29" + }, + { + "downloads": 0, + "day": "2023-04-30" + }, + { + "downloads": 1, + "day": "2023-05-01" + }, + { + "downloads": 0, + "day": "2023-05-02" + }, + { + "downloads": 19, + "day": "2023-05-03" + }, + { + "downloads": 0, + "day": "2023-05-04" + }, + { + "downloads": 0, + "day": "2023-05-05" + }, + { + "downloads": 0, + "day": "2023-05-06" + }, + { + "downloads": 0, + "day": "2023-05-07" + }, + { + "downloads": 0, + "day": "2023-05-08" + }, + { + "downloads": 49, + "day": "2023-05-09" + }, + { + "downloads": 10, + "day": "2023-05-10" + }, + { + "downloads": 3, + "day": "2023-05-11" + }, + { + "downloads": 2, + "day": "2023-05-12" + }, + { + "downloads": 2, + "day": "2023-05-13" + }, + { + "downloads": 2, + "day": "2023-05-14" + }, + { + "downloads": 1, + "day": "2023-05-15" + }, + { + "downloads": 2, + "day": "2023-05-16" + }, + { + "downloads": 8, + "day": "2023-05-17" + }, + { + "downloads": 3, + "day": "2023-05-18" + }, + { + "downloads": 10, + "day": "2023-05-19" + }, + { + "downloads": 0, + "day": "2023-05-20" + }, + { + "downloads": 1, + "day": "2023-05-21" + }, + { + "downloads": 4, + "day": "2023-05-22" + }, + { + "downloads": 2, + "day": "2023-05-23" + }, + { + "downloads": 1, + "day": "2023-05-24" + }, + { + "downloads": 0, + "day": "2023-05-25" + }, + { + "downloads": 1, + "day": "2023-05-26" + }, + { + "downloads": 2, + "day": "2023-05-27" + }, + { + "downloads": 1, + "day": "2023-05-28" + }, + { + "downloads": 0, + "day": "2023-05-29" + }, + { + "downloads": 0, + "day": "2023-05-30" + }, + { + "downloads": 1, + "day": "2023-05-31" + }, + { + "downloads": 1, + "day": "2023-06-01" + }, + { + "downloads": 0, + "day": "2023-06-02" + }, + { + "downloads": 1, + "day": "2023-06-03" + }, + { + "downloads": 0, + "day": "2023-06-04" + }, + { + "downloads": 0, + "day": "2023-06-05" + }, + { + "downloads": 2, + "day": "2023-06-06" + }, + { + "downloads": 0, + "day": "2023-06-07" + }, + { + "downloads": 2, + "day": "2023-06-08" + }, + { + "downloads": 5, + "day": "2023-06-09" + }, + { + "downloads": 2, + "day": "2023-06-10" + }, + { + "downloads": 4, + "day": "2023-06-11" + }, + { + "downloads": 1, + "day": "2023-06-12" + }, + { + "downloads": 1, + "day": "2023-06-13" + }, + { + "downloads": 0, + "day": "2023-06-14" + }, + { + "downloads": 0, + "day": "2023-06-15" + }, + { + "downloads": 1, + "day": "2023-06-16" + }, + { + "downloads": 0, + "day": "2023-06-17" + }, + { + "downloads": 0, + "day": "2023-06-18" + }, + { + "downloads": 1, + "day": "2023-06-19" + }, + { + "downloads": 1, + "day": "2023-06-20" + }, + { + "downloads": 0, + "day": "2023-06-21" + }, + { + "downloads": 2, + "day": "2023-06-22" + }, + { + "downloads": 2, + "day": "2023-06-23" + }, + { + "downloads": 2, + "day": "2023-06-24" + }, + { + "downloads": 1, + "day": "2023-06-25" + }, + { + "downloads": 0, + "day": "2023-06-26" + }, + { + "downloads": 2, + "day": "2023-06-27" + }, + { + "downloads": 2, + "day": "2023-06-28" + }, + { + "downloads": 5, + "day": "2023-06-29" + }, + { + "downloads": 8, + "day": "2023-06-30" + }, + { + "downloads": 1, + "day": "2023-07-01" + }, + { + "downloads": 34, + "day": "2023-07-02" + }, + { + "downloads": 20, + "day": "2023-07-03" + }, + { + "downloads": 1, + "day": "2023-07-04" + }, + { + "downloads": 3, + "day": "2023-07-05" + }, + { + "downloads": 0, + "day": "2023-07-06" + }, + { + "downloads": 1, + "day": "2023-07-07" + }, + { + "downloads": 0, + "day": "2023-07-08" + }, + { + "downloads": 0, + "day": "2023-07-09" + }, + { + "downloads": 3, + "day": "2023-07-10" + }, + { + "downloads": 0, + "day": "2023-07-11" + }, + { + "downloads": 4, + "day": "2023-07-12" + }, + { + "downloads": 0, + "day": "2023-07-13" + }, + { + "downloads": 7, + "day": "2023-07-14" + }, + { + "downloads": 3, + "day": "2023-07-15" + }, + { + "downloads": 0, + "day": "2023-07-16" + }, + { + "downloads": 1, + "day": "2023-07-17" + }, + { + "downloads": 2, + "day": "2023-07-18" + }, + { + "downloads": 0, + "day": "2023-07-19" + }, + { + "downloads": 8, + "day": "2023-07-20" + }, + { + "downloads": 2, + "day": "2023-07-21" + }, + { + "downloads": 0, + "day": "2023-07-22" + }, + { + "downloads": 2, + "day": "2023-07-23" + }, + { + "downloads": 2, + "day": "2023-07-24" + }, + { + "downloads": 0, + "day": "2023-07-25" + }, + { + "downloads": 0, + "day": "2023-07-26" + }, + { + "downloads": 0, + "day": "2023-07-27" + }, + { + "downloads": 2, + "day": "2023-07-28" + }, + { + "downloads": 0, + "day": "2023-07-29" + }, + { + "downloads": 0, + "day": "2023-07-30" + }, + { + "downloads": 0, + "day": "2023-07-31" + }, + { + "downloads": 0, + "day": "2023-08-01" + }, + { + "downloads": 5, + "day": "2023-08-02" + }, + { + "downloads": 3, + "day": "2023-08-03" + }, + { + "downloads": 1, + "day": "2023-08-04" + }, + { + "downloads": 0, + "day": "2023-08-05" + }, + { + "downloads": 1, + "day": "2023-08-06" + }, + { + "downloads": 5, + "day": "2023-08-07" + }, + { + "downloads": 0, + "day": "2023-08-08" + }, + { + "downloads": 2, + "day": "2023-08-09" + }, + { + "downloads": 0, + "day": "2023-08-10" + }, + { + "downloads": 2, + "day": "2023-08-11" + }, + { + "downloads": 0, + "day": "2023-08-12" + }, + { + "downloads": 2, + "day": "2023-08-13" + }, + { + "downloads": 1, + "day": "2023-08-14" + }, + { + "downloads": 0, + "day": "2023-08-15" + }, + { + "downloads": 2, + "day": "2023-08-16" + }, + { + "downloads": 0, + "day": "2023-08-17" + }, + { + "downloads": 4, + "day": "2023-08-18" + }, + { + "downloads": 1, + "day": "2023-08-19" + }, + { + "downloads": 5, + "day": "2023-08-20" + }, + { + "downloads": 1, + "day": "2023-08-21" + }, + { + "downloads": 2, + "day": "2023-08-22" + }, + { + "downloads": 0, + "day": "2023-08-23" + }, + { + "downloads": 2, + "day": "2023-08-24" + }, + { + "downloads": 0, + "day": "2023-08-25" + }, + { + "downloads": 1, + "day": "2023-08-26" + }, + { + "downloads": 0, + "day": "2023-08-27" + }, + { + "downloads": 0, + "day": "2023-08-28" + }, + { + "downloads": 2, + "day": "2023-08-29" + }, + { + "downloads": 1, + "day": "2023-08-30" + }, + { + "downloads": 2, + "day": "2023-08-31" + }, + { + "downloads": 5, + "day": "2023-09-01" + }, + { + "downloads": 0, + "day": "2023-09-02" + }, + { + "downloads": 0, + "day": "2023-09-03" + }, + { + "downloads": 0, + "day": "2023-09-04" + }, + { + "downloads": 0, + "day": "2023-09-05" + }, + { + "downloads": 0, + "day": "2023-09-06" + }, + { + "downloads": 0, + "day": "2023-09-07" + }, + { + "downloads": 0, + "day": "2023-09-08" + }, + { + "downloads": 0, + "day": "2023-09-09" + }, + { + "downloads": 0, + "day": "2023-09-10" + }, + { + "downloads": 1, + "day": "2023-09-11" + }, + { + "downloads": 4, + "day": "2023-09-12" + }, + { + "downloads": 3, + "day": "2023-09-13" + }, + { + "downloads": 50, + "day": "2023-09-14" + }, + { + "downloads": 15, + "day": "2023-09-15" + }, + { + "downloads": 5, + "day": "2023-09-16" + }, + { + "downloads": 8, + "day": "2023-09-17" + }, + { + "downloads": 44, + "day": "2023-09-18" + }, + { + "downloads": 65, + "day": "2023-09-19" + }, + { + "downloads": 12, + "day": "2023-09-20" + }, + { + "downloads": 0, + "day": "2023-09-21" + }, + { + "downloads": 2, + "day": "2023-09-22" + }, + { + "downloads": 2, + "day": "2023-09-23" + }, + { + "downloads": 7, + "day": "2023-09-24" + }, + { + "downloads": 4, + "day": "2023-09-25" + }, + { + "downloads": 0, + "day": "2023-09-26" + }, + { + "downloads": 4, + "day": "2023-09-27" + }, + { + "downloads": 19, + "day": "2023-09-28" + }, + { + "downloads": 12, + "day": "2023-09-29" + }, + { + "downloads": 1, + "day": "2023-09-30" + }, + { + "downloads": 0, + "day": "2023-10-01" + }, + { + "downloads": 13, + "day": "2023-10-02" + }, + { + "downloads": 80, + "day": "2023-10-03" + }, + { + "downloads": 21, + "day": "2023-10-04" + }, + { + "downloads": 27, + "day": "2023-10-05" + }, + { + "downloads": 18, + "day": "2023-10-06" + }, + { + "downloads": 2, + "day": "2023-10-07" + }, + { + "downloads": 7, + "day": "2023-10-08" + }, + { + "downloads": 5, + "day": "2023-10-09" + }, + { + "downloads": 5, + "day": "2023-10-10" + }, + { + "downloads": 24, + "day": "2023-10-11" + }, + { + "downloads": 33, + "day": "2023-10-12" + }, + { + "downloads": 6, + "day": "2023-10-13" + }, + { + "downloads": 2, + "day": "2023-10-14" + }, + { + "downloads": 0, + "day": "2023-10-15" + }, + { + "downloads": 8, + "day": "2023-10-16" + }, + { + "downloads": 10, + "day": "2023-10-17" + }, + { + "downloads": 2, + "day": "2023-10-18" + }, + { + "downloads": 14, + "day": "2023-10-19" + }, + { + "downloads": 1, + "day": "2023-10-20" + }, + { + "downloads": 0, + "day": "2023-10-21" + }, + { + "downloads": 1, + "day": "2023-10-22" + }, + { + "downloads": 21, + "day": "2023-10-23" + }, + { + "downloads": 3, + "day": "2023-10-24" + }, + { + "downloads": 11, + "day": "2023-10-25" + }, + { + "downloads": 6, + "day": "2023-10-26" + }, + { + "downloads": 5, + "day": "2023-10-27" + }, + { + "downloads": 1, + "day": "2023-10-28" + }, + { + "downloads": 1, + "day": "2023-10-29" + }, + { + "downloads": 6, + "day": "2023-10-30" + }, + { + "downloads": 7, + "day": "2023-10-31" + }, + { + "downloads": 0, + "day": "2023-11-01" + }, + { + "downloads": 0, + "day": "2023-11-02" + }, + { + "downloads": 0, + "day": "2023-11-03" + }, + { + "downloads": 0, + "day": "2023-11-04" + }, + { + "downloads": 0, + "day": "2023-11-05" + }, + { + "downloads": 99, + "day": "2023-11-06" + }, + { + "downloads": 18, + "day": "2023-11-07" + }, + { + "downloads": 17, + "day": "2023-11-08" + }, + { + "downloads": 6, + "day": "2023-11-09" + }, + { + "downloads": 4, + "day": "2023-11-10" + }, + { + "downloads": 20, + "day": "2023-11-11" + }, + { + "downloads": 1, + "day": "2023-11-12" + }, + { + "downloads": 22, + "day": "2023-11-13" + }, + { + "downloads": 10, + "day": "2023-11-14" + }, + { + "downloads": 4, + "day": "2023-11-15" + }, + { + "downloads": 4, + "day": "2023-11-16" + }, + { + "downloads": 2, + "day": "2023-11-17" + }, + { + "downloads": 0, + "day": "2023-11-18" + }, + { + "downloads": 6, + "day": "2023-11-19" + }, + { + "downloads": 16, + "day": "2023-11-20" + }, + { + "downloads": 88, + "day": "2023-11-21" + }, + { + "downloads": 9, + "day": "2023-11-22" + }, + { + "downloads": 1, + "day": "2023-11-23" + }, + { + "downloads": 1, + "day": "2023-11-24" + }, + { + "downloads": 0, + "day": "2023-11-25" + }, + { + "downloads": 2, + "day": "2023-11-26" + }, + { + "downloads": 30, + "day": "2023-11-27" + }, + { + "downloads": 16, + "day": "2023-11-28" + }, + { + "downloads": 5, + "day": "2023-11-29" + }, + { + "downloads": 6, + "day": "2023-11-30" + }, + { + "downloads": 6, + "day": "2023-12-01" + }, + { + "downloads": 0, + "day": "2023-12-02" + }, + { + "downloads": 6, + "day": "2023-12-03" + }, + { + "downloads": 5, + "day": "2023-12-04" + }, + { + "downloads": 3, + "day": "2023-12-05" + }, + { + "downloads": 0, + "day": "2023-12-06" + }, + { + "downloads": 2, + "day": "2023-12-07" + }, + { + "downloads": 2, + "day": "2023-12-08" + }, + { + "downloads": 0, + "day": "2023-12-09" + }, + { + "downloads": 1, + "day": "2023-12-10" + }, + { + "downloads": 4, + "day": "2023-12-11" + }, + { + "downloads": 1, + "day": "2023-12-12" + }, + { + "downloads": 2, + "day": "2023-12-13" + }, + { + "downloads": 4, + "day": "2023-12-14" + }, + { + "downloads": 7, + "day": "2023-12-15" + }, + { + "downloads": 1, + "day": "2023-12-16" + }, + { + "downloads": 0, + "day": "2023-12-17" + }, + { + "downloads": 1, + "day": "2023-12-18" + }, + { + "downloads": 5, + "day": "2023-12-19" + }, + { + "downloads": 2, + "day": "2023-12-20" + }, + { + "downloads": 1, + "day": "2023-12-21" + }, + { + "downloads": 1, + "day": "2023-12-22" + }, + { + "downloads": 0, + "day": "2023-12-23" + }, + { + "downloads": 0, + "day": "2023-12-24" + }, + { + "downloads": 0, + "day": "2023-12-25" + }, + { + "downloads": 1, + "day": "2023-12-26" + }, + { + "downloads": 9, + "day": "2023-12-27" + }, + { + "downloads": 0, + "day": "2023-12-28" + }, + { + "downloads": 0, + "day": "2023-12-29" + }, + { + "downloads": 9, + "day": "2023-12-30" + }, + { + "downloads": 1, + "day": "2023-12-31" + }, + { + "downloads": 1, + "day": "2024-01-01" + }, + { + "downloads": 4, + "day": "2024-01-02" + }, + { + "downloads": 3, + "day": "2024-01-03" + }, + { + "downloads": 0, + "day": "2024-01-04" + }, + { + "downloads": 6, + "day": "2024-01-05" + }, + { + "downloads": 12, + "day": "2024-01-06" + }, + { + "downloads": 0, + "day": "2024-01-07" + }, + { + "downloads": 4, + "day": "2024-01-08" + }, + { + "downloads": 20, + "day": "2024-01-09" + }, + { + "downloads": 10, + "day": "2024-01-10" + }, + { + "downloads": 29, + "day": "2024-01-11" + }, + { + "downloads": 12, + "day": "2024-01-12" + }, + { + "downloads": 11, + "day": "2024-01-13" + }, + { + "downloads": 19, + "day": "2024-01-14" + }, + { + "downloads": 29, + "day": "2024-01-15" + }, + { + "downloads": 19, + "day": "2024-01-16" + }, + { + "downloads": 15, + "day": "2024-01-17" + }, + { + "downloads": 28, + "day": "2024-01-18" + }, + { + "downloads": 10, + "day": "2024-01-19" + }, + { + "downloads": 27, + "day": "2024-01-20" + }, + { + "downloads": 34, + "day": "2024-01-21" + }, + { + "downloads": 14, + "day": "2024-01-22" + }, + { + "downloads": 30, + "day": "2024-01-23" + }, + { + "downloads": 42, + "day": "2024-01-24" + }, + { + "downloads": 30, + "day": "2024-01-25" + }, + { + "downloads": 27, + "day": "2024-01-26" + }, + { + "downloads": 3, + "day": "2024-01-27" + }, + { + "downloads": 6, + "day": "2024-01-28" + }, + { + "downloads": 3, + "day": "2024-01-29" + }, + { + "downloads": 2, + "day": "2024-01-30" + }, + { + "downloads": 5, + "day": "2024-01-31" + }, + { + "downloads": 2, + "day": "2024-02-01" + }, + { + "downloads": 18, + "day": "2024-02-02" + }, + { + "downloads": 9, + "day": "2024-02-03" + }, + { + "downloads": 10, + "day": "2024-02-04" + }, + { + "downloads": 16, + "day": "2024-02-05" + }, + { + "downloads": 16, + "day": "2024-02-06" + }, + { + "downloads": 9, + "day": "2024-02-07" + }, + { + "downloads": 49, + "day": "2024-02-08" + }, + { + "downloads": 13, + "day": "2024-02-09" + }, + { + "downloads": 9, + "day": "2024-02-10" + }, + { + "downloads": 22, + "day": "2024-02-11" + }, + { + "downloads": 12, + "day": "2024-02-12" + }, + { + "downloads": 5, + "day": "2024-02-13" + }, + { + "downloads": 14, + "day": "2024-02-14" + }, + { + "downloads": 21, + "day": "2024-02-15" + }, + { + "downloads": 26, + "day": "2024-02-16" + }, + { + "downloads": 9, + "day": "2024-02-17" + }, + { + "downloads": 10, + "day": "2024-02-18" + }, + { + "downloads": 24, + "day": "2024-02-19" + }, + { + "downloads": 2, + "day": "2024-02-20" + }, + { + "downloads": 12, + "day": "2024-02-21" + }, + { + "downloads": 76, + "day": "2024-02-22" + }, + { + "downloads": 15, + "day": "2024-02-23" + }, + { + "downloads": 12, + "day": "2024-02-24" + }, + { + "downloads": 3, + "day": "2024-02-25" + }, + { + "downloads": 18, + "day": "2024-02-26" + }, + { + "downloads": 4, + "day": "2024-02-27" + }, + { + "downloads": 15, + "day": "2024-02-28" + }, + { + "downloads": 6, + "day": "2024-02-29" + }, + { + "downloads": 21, + "day": "2024-03-01" + }, + { + "downloads": 11, + "day": "2024-03-02" + }, + { + "downloads": 15, + "day": "2024-03-03" + }, + { + "downloads": 4, + "day": "2024-03-04" + }, + { + "downloads": 35, + "day": "2024-03-05" + }, + { + "downloads": 25, + "day": "2024-03-06" + }, + { + "downloads": 13, + "day": "2024-03-07" + }, + { + "downloads": 26, + "day": "2024-03-08" + }, + { + "downloads": 22, + "day": "2024-03-09" + }, + { + "downloads": 13, + "day": "2024-03-10" + }, + { + "downloads": 63, + "day": "2024-03-11" + }, + { + "downloads": 18, + "day": "2024-03-12" + }, + { + "downloads": 18, + "day": "2024-03-13" + }, + { + "downloads": 18, + "day": "2024-03-14" + }, + { + "downloads": 4, + "day": "2024-03-15" + }, + { + "downloads": 1, + "day": "2024-03-16" + }, + { + "downloads": 12, + "day": "2024-03-17" + }, + { + "downloads": 27, + "day": "2024-03-18" + }, + { + "downloads": 12, + "day": "2024-03-19" + }, + { + "downloads": 27, + "day": "2024-03-20" + }, + { + "downloads": 3, + "day": "2024-03-21" + }, + { + "downloads": 22, + "day": "2024-03-22" + }, + { + "downloads": 11, + "day": "2024-03-23" + }, + { + "downloads": 24, + "day": "2024-03-24" + }, + { + "downloads": 13, + "day": "2024-03-25" + }, + { + "downloads": 12, + "day": "2024-03-26" + }, + { + "downloads": 14, + "day": "2024-03-27" + }, + { + "downloads": 12, + "day": "2024-03-28" + }, + { + "downloads": 14, + "day": "2024-03-29" + }, + { + "downloads": 23, + "day": "2024-03-30" + }, + { + "downloads": 24, + "day": "2024-03-31" + }, + { + "downloads": 12, + "day": "2024-04-01" + }, + { + "downloads": 21, + "day": "2024-04-02" + }, + { + "downloads": 34, + "day": "2024-04-03" + }, + { + "downloads": 27, + "day": "2024-04-04" + }, + { + "downloads": 31, + "day": "2024-04-05" + }, + { + "downloads": 15, + "day": "2024-04-06" + }, + { + "downloads": 20, + "day": "2024-04-07" + }, + { + "downloads": 18, + "day": "2024-04-08" + }, + { + "downloads": 63, + "day": "2024-04-09" + }, + { + "downloads": 25, + "day": "2024-04-10" + }, + { + "downloads": 6, + "day": "2024-04-11" + }, + { + "downloads": 11, + "day": "2024-04-12" + }, + { + "downloads": 14, + "day": "2024-04-13" + }, + { + "downloads": 16, + "day": "2024-04-14" + }, + { + "downloads": 22, + "day": "2024-04-15" + }, + { + "downloads": 9, + "day": "2024-04-16" + }, + { + "downloads": 16, + "day": "2024-04-17" + }, + { + "downloads": 25, + "day": "2024-04-18" + }, + { + "downloads": 15, + "day": "2024-04-19" + }, + { + "downloads": 2, + "day": "2024-04-20" + }, + { + "downloads": 15, + "day": "2024-04-21" + }, + { + "downloads": 18, + "day": "2024-04-22" + }, + { + "downloads": 17, + "day": "2024-04-23" + }, + { + "downloads": 27, + "day": "2024-04-24" + }, + { + "downloads": 33, + "day": "2024-04-25" + }, + { + "downloads": 16, + "day": "2024-04-26" + }, + { + "downloads": 12, + "day": "2024-04-27" + }, + { + "downloads": 14, + "day": "2024-04-28" + }, + { + "downloads": 18, + "day": "2024-04-29" + }, + { + "downloads": 5, + "day": "2024-04-30" + }, + { + "downloads": 1, + "day": "2024-05-01" + }, + { + "downloads": 41, + "day": "2024-05-02" + }, + { + "downloads": 5, + "day": "2024-05-03" + }, + { + "downloads": 3, + "day": "2024-05-04" + }, + { + "downloads": 5, + "day": "2024-05-05" + }, + { + "downloads": 10, + "day": "2024-05-06" + }, + { + "downloads": 4, + "day": "2024-05-07" + }, + { + "downloads": 24, + "day": "2024-05-08" + }, + { + "downloads": 29, + "day": "2024-05-09" + }, + { + "downloads": 16, + "day": "2024-05-10" + }, + { + "downloads": 13, + "day": "2024-05-11" + }, + { + "downloads": 18, + "day": "2024-05-12" + }, + { + "downloads": 3, + "day": "2024-05-13" + }, + { + "downloads": 20, + "day": "2024-05-14" + }, + { + "downloads": 28, + "day": "2024-05-15" + }, + { + "downloads": 29, + "day": "2024-05-16" + }, + { + "downloads": 24, + "day": "2024-05-17" + }, + { + "downloads": 24, + "day": "2024-05-18" + }, + { + "downloads": 50, + "day": "2024-05-19" + }, + { + "downloads": 21, + "day": "2024-05-20" + }, + { + "downloads": 36, + "day": "2024-05-21" + }, + { + "downloads": 41, + "day": "2024-05-22" + }, + { + "downloads": 36, + "day": "2024-05-23" + }, + { + "downloads": 15, + "day": "2024-05-24" + }, + { + "downloads": 24, + "day": "2024-05-25" + }, + { + "downloads": 24, + "day": "2024-05-26" + }, + { + "downloads": 30, + "day": "2024-05-27" + }, + { + "downloads": 187, + "day": "2024-05-28" + }, + { + "downloads": 22, + "day": "2024-05-29" + }, + { + "downloads": 28, + "day": "2024-05-30" + }, + { + "downloads": 38, + "day": "2024-05-31" + }, + { + "downloads": 37, + "day": "2024-06-01" + }, + { + "downloads": 24, + "day": "2024-06-02" + }, + { + "downloads": 31, + "day": "2024-06-03" + }, + { + "downloads": 48, + "day": "2024-06-04" + }, + { + "downloads": 63, + "day": "2024-06-05" + }, + { + "downloads": 34, + "day": "2024-06-06" + }, + { + "downloads": 47, + "day": "2024-06-07" + }, + { + "downloads": 44, + "day": "2024-06-08" + }, + { + "downloads": 16, + "day": "2024-06-09" + }, + { + "downloads": 47, + "day": "2024-06-10" + }, + { + "downloads": 15, + "day": "2024-06-11" + }, + { + "downloads": 66, + "day": "2024-06-12" + }, + { + "downloads": 69, + "day": "2024-06-13" + }, + { + "downloads": 42, + "day": "2024-06-14" + }, + { + "downloads": 15, + "day": "2024-06-15" + }, + { + "downloads": 41, + "day": "2024-06-16" + }, + { + "downloads": 44, + "day": "2024-06-17" + }, + { + "downloads": 4, + "day": "2024-06-18" + }, + { + "downloads": 14, + "day": "2024-06-19" + }, + { + "downloads": 34, + "day": "2024-06-20" + }, + { + "downloads": 55, + "day": "2024-06-21" + }, + { + "downloads": 43, + "day": "2024-06-22" + }, + { + "downloads": 32, + "day": "2024-06-23" + }, + { + "downloads": 29, + "day": "2024-06-24" + }, + { + "downloads": 16, + "day": "2024-06-25" + }, + { + "downloads": 16, + "day": "2024-06-26" + }, + { + "downloads": 27, + "day": "2024-06-27" + }, + { + "downloads": 43, + "day": "2024-06-28" + }, + { + "downloads": 58, + "day": "2024-06-29" + }, + { + "downloads": 44, + "day": "2024-06-30" + }, + { + "downloads": 33, + "day": "2024-07-01" + }, + { + "downloads": 19, + "day": "2024-07-02" + }, + { + "downloads": 103, + "day": "2024-07-03" + }, + { + "downloads": 41, + "day": "2024-07-04" + }, + { + "downloads": 34, + "day": "2024-07-05" + }, + { + "downloads": 47, + "day": "2024-07-06" + }, + { + "downloads": 15, + "day": "2024-07-07" + }, + { + "downloads": 29, + "day": "2024-07-08" + }, + { + "downloads": 62, + "day": "2024-07-09" + }, + { + "downloads": 41, + "day": "2024-07-10" + }, + { + "downloads": 43, + "day": "2024-07-11" + }, + { + "downloads": 37, + "day": "2024-07-12" + }, + { + "downloads": 2, + "day": "2024-07-13" + }, + { + "downloads": 18, + "day": "2024-07-14" + }, + { + "downloads": 49, + "day": "2024-07-15" + }, + { + "downloads": 37, + "day": "2024-07-16" + }, + { + "downloads": 37, + "day": "2024-07-17" + }, + { + "downloads": 33, + "day": "2024-07-18" + }, + { + "downloads": 49, + "day": "2024-07-19" + }, + { + "downloads": 46, + "day": "2024-07-20" + }, + { + "downloads": 19, + "day": "2024-07-21" + }, + { + "downloads": 14, + "day": "2024-07-22" + }, + { + "downloads": 45, + "day": "2024-07-23" + }, + { + "downloads": 41, + "day": "2024-07-24" + }, + { + "downloads": 19, + "day": "2024-07-25" + }, + { + "downloads": 15, + "day": "2024-07-26" + }, + { + "downloads": 61, + "day": "2024-07-27" + }, + { + "downloads": 34, + "day": "2024-07-28" + }, + { + "downloads": 40, + "day": "2024-07-29" + }, + { + "downloads": 44, + "day": "2024-07-30" + }, + { + "downloads": 40, + "day": "2024-07-31" + }, + { + "downloads": 27, + "day": "2024-08-01" + }, + { + "downloads": 75, + "day": "2024-08-02" + }, + { + "downloads": 17, + "day": "2024-08-03" + }, + { + "downloads": 33, + "day": "2024-08-04" + }, + { + "downloads": 117, + "day": "2024-08-05" + }, + { + "downloads": 133, + "day": "2024-08-06" + }, + { + "downloads": 52, + "day": "2024-08-07" + }, + { + "downloads": 74, + "day": "2024-08-08" + }, + { + "downloads": 9, + "day": "2024-08-09" + }, + { + "downloads": 67, + "day": "2024-08-10" + }, + { + "downloads": 72, + "day": "2024-08-11" + }, + { + "downloads": 22, + "day": "2024-08-12" + }, + { + "downloads": 32, + "day": "2024-08-13" + }, + { + "downloads": 84, + "day": "2024-08-14" + }, + { + "downloads": 68, + "day": "2024-08-15" + }, + { + "downloads": 67, + "day": "2024-08-16" + }, + { + "downloads": 49, + "day": "2024-08-17" + }, + { + "downloads": 39, + "day": "2024-08-18" + }, + { + "downloads": 50, + "day": "2024-08-19" + }, + { + "downloads": 57, + "day": "2024-08-20" + }, + { + "downloads": 42, + "day": "2024-08-21" + }, + { + "downloads": 96, + "day": "2024-08-22" + }, + { + "downloads": 49, + "day": "2024-08-23" + }, + { + "downloads": 21, + "day": "2024-08-24" + }, + { + "downloads": 16, + "day": "2024-08-25" + }, + { + "downloads": 28, + "day": "2024-08-26" + }, + { + "downloads": 2, + "day": "2024-08-27" + }, + { + "downloads": 20, + "day": "2024-08-28" + }, + { + "downloads": 36, + "day": "2024-08-29" + }, + { + "downloads": 38, + "day": "2024-08-30" + }, + { + "downloads": 34, + "day": "2024-08-31" + }, + { + "downloads": 47, + "day": "2024-09-01" + }, + { + "downloads": 68, + "day": "2024-09-02" + }, + { + "downloads": 39, + "day": "2024-09-03" + }, + { + "downloads": 63, + "day": "2024-09-04" + }, + { + "downloads": 60, + "day": "2024-09-05" + }, + { + "downloads": 52, + "day": "2024-09-06" + }, + { + "downloads": 48, + "day": "2024-09-07" + }, + { + "downloads": 48, + "day": "2024-09-08" + }, + { + "downloads": 49, + "day": "2024-09-09" + }, + { + "downloads": 19, + "day": "2024-09-10" + }, + { + "downloads": 19, + "day": "2024-09-11" + }, + { + "downloads": 32, + "day": "2024-09-12" + }, + { + "downloads": 33, + "day": "2024-09-13" + }, + { + "downloads": 18, + "day": "2024-09-14" + }, + { + "downloads": 33, + "day": "2024-09-15" + }, + { + "downloads": 37, + "day": "2024-09-16" + }, + { + "downloads": 36, + "day": "2024-09-17" + }, + { + "downloads": 51, + "day": "2024-09-18" + }, + { + "downloads": 95, + "day": "2024-09-19" + }, + { + "downloads": 39, + "day": "2024-09-20" + }, + { + "downloads": 17, + "day": "2024-09-21" + }, + { + "downloads": 16, + "day": "2024-09-22" + }, + { + "downloads": 41, + "day": "2024-09-23" + }, + { + "downloads": 39, + "day": "2024-09-24" + }, + { + "downloads": 21, + "day": "2024-09-25" + }, + { + "downloads": 35, + "day": "2024-09-26" + }, + { + "downloads": 177, + "day": "2024-09-27" + }, + { + "downloads": 87, + "day": "2024-09-28" + }, + { + "downloads": 75, + "day": "2024-09-29" + }, + { + "downloads": 48, + "day": "2024-09-30" + }, + { + "downloads": 14, + "day": "2024-10-01" + }, + { + "downloads": 24, + "day": "2024-10-02" + }, + { + "downloads": 20, + "day": "2024-10-03" + }, + { + "downloads": 19, + "day": "2024-10-04" + }, + { + "downloads": 14, + "day": "2024-10-05" + }, + { + "downloads": 10, + "day": "2024-10-06" + }, + { + "downloads": 16, + "day": "2024-10-07" + }, + { + "downloads": 11, + "day": "2024-10-08" + }, + { + "downloads": 10, + "day": "2024-10-09" + }, + { + "downloads": 12, + "day": "2024-10-10" + }, + { + "downloads": 8, + "day": "2024-10-11" + }, + { + "downloads": 5, + "day": "2024-10-12" + }, + { + "downloads": 3, + "day": "2024-10-13" + }, + { + "downloads": 15, + "day": "2024-10-14" + }, + { + "downloads": 12, + "day": "2024-10-15" + }, + { + "downloads": 22, + "day": "2024-10-16" + }, + { + "downloads": 11, + "day": "2024-10-17" + }, + { + "downloads": 7, + "day": "2024-10-18" + }, + { + "downloads": 10, + "day": "2024-10-19" + }, + { + "downloads": 5, + "day": "2024-10-20" + }, + { + "downloads": 19, + "day": "2024-10-21" + }, + { + "downloads": 5, + "day": "2024-10-22" + }, + { + "downloads": 7, + "day": "2024-10-23" + }, + { + "downloads": 7, + "day": "2024-10-24" + }, + { + "downloads": 4, + "day": "2024-10-25" + }, + { + "downloads": 2, + "day": "2024-10-26" + }, + { + "downloads": 2, + "day": "2024-10-27" + }, + { + "downloads": 10, + "day": "2024-10-28" + }, + { + "downloads": 7, + "day": "2024-10-29" + }, + { + "downloads": 23, + "day": "2024-10-30" + }, + { + "downloads": 2, + "day": "2024-10-31" + }, + { + "downloads": 30, + "day": "2024-11-01" + }, + { + "downloads": 6, + "day": "2024-11-02" + }, + { + "downloads": 0, + "day": "2024-11-03" + }, + { + "downloads": 5, + "day": "2024-11-04" + }, + { + "downloads": 1, + "day": "2024-11-05" + }, + { + "downloads": 1, + "day": "2024-11-06" + }, + { + "downloads": 36, + "day": "2024-11-07" + }, + { + "downloads": 1, + "day": "2024-11-08" + }, + { + "downloads": 5, + "day": "2024-11-09" + }, + { + "downloads": 16, + "day": "2024-11-10" + }, + { + "downloads": 5, + "day": "2024-11-11" + }, + { + "downloads": 9, + "day": "2024-11-12" + }, + { + "downloads": 17, + "day": "2024-11-13" + }, + { + "downloads": 7, + "day": "2024-11-14" + }, + { + "downloads": 0, + "day": "2024-11-15" + }, + { + "downloads": 1, + "day": "2024-11-16" + }, + { + "downloads": 0, + "day": "2024-11-17" + }, + { + "downloads": 29, + "day": "2024-11-18" + }, + { + "downloads": 6, + "day": "2024-11-19" + }, + { + "downloads": 0, + "day": "2024-11-20" + }, + { + "downloads": 3, + "day": "2024-11-21" + }, + { + "downloads": 19, + "day": "2024-11-22" + }, + { + "downloads": 2, + "day": "2024-11-23" + }, + { + "downloads": 50, + "day": "2024-11-24" + }, + { + "downloads": 58, + "day": "2024-11-25" + }, + { + "downloads": 23, + "day": "2024-11-26" + }, + { + "downloads": 4, + "day": "2024-11-27" + }, + { + "downloads": 3, + "day": "2024-11-28" + }, + { + "downloads": 3, + "day": "2024-11-29" + }, + { + "downloads": 0, + "day": "2024-11-30" + }, + { + "downloads": 0, + "day": "2024-12-01" + }, + { + "downloads": 54, + "day": "2024-12-02" + }, + { + "downloads": 4, + "day": "2024-12-03" + }, + { + "downloads": 5, + "day": "2024-12-04" + }, + { + "downloads": 14, + "day": "2024-12-05" + }, + { + "downloads": 3, + "day": "2024-12-06" + }, + { + "downloads": 8, + "day": "2024-12-07" + }, + { + "downloads": 13, + "day": "2024-12-08" + }, + { + "downloads": 13, + "day": "2024-12-09" + }, + { + "downloads": 11, + "day": "2024-12-10" + }, + { + "downloads": 54, + "day": "2024-12-11" + }, + { + "downloads": 54, + "day": "2024-12-12" + }, + { + "downloads": 21, + "day": "2024-12-13" + }, + { + "downloads": 5, + "day": "2024-12-14" + }, + { + "downloads": 5, + "day": "2024-12-15" + }, + { + "downloads": 15, + "day": "2024-12-16" + }, + { + "downloads": 7, + "day": "2024-12-17" + }, + { + "downloads": 2, + "day": "2024-12-18" + }, + { + "downloads": 10, + "day": "2024-12-19" + }, + { + "downloads": 27, + "day": "2024-12-20" + }, + { + "downloads": 5, + "day": "2024-12-21" + }, + { + "downloads": 2, + "day": "2024-12-22" + }, + { + "downloads": 7, + "day": "2024-12-23" + }, + { + "downloads": 0, + "day": "2024-12-24" + }, + { + "downloads": 1, + "day": "2024-12-25" + }, + { + "downloads": 6, + "day": "2024-12-26" + }, + { + "downloads": 3, + "day": "2024-12-27" + }, + { + "downloads": 4, + "day": "2024-12-28" + }, + { + "downloads": 2, + "day": "2024-12-29" + }, + { + "downloads": 19, + "day": "2024-12-30" + }, + { + "downloads": 14, + "day": "2024-12-31" + }, + { + "downloads": 1, + "day": "2025-01-01" + }, + { + "downloads": 6, + "day": "2025-01-02" + }, + { + "downloads": 6, + "day": "2025-01-03" + }, + { + "downloads": 4, + "day": "2025-01-04" + }, + { + "downloads": 2, + "day": "2025-01-05" + }, + { + "downloads": 42, + "day": "2025-01-06" + }, + { + "downloads": 8, + "day": "2025-01-07" + }, + { + "downloads": 8, + "day": "2025-01-08" + }, + { + "downloads": 6, + "day": "2025-01-09" + }, + { + "downloads": 9, + "day": "2025-01-10" + }, + { + "downloads": 3, + "day": "2025-01-11" + }, + { + "downloads": 2, + "day": "2025-01-12" + }, + { + "downloads": 19, + "day": "2025-01-13" + }, + { + "downloads": 3, + "day": "2025-01-14" + }, + { + "downloads": 22, + "day": "2025-01-15" + }, + { + "downloads": 4, + "day": "2025-01-16" + }, + { + "downloads": 13, + "day": "2025-01-17" + }, + { + "downloads": 1, + "day": "2025-01-18" + }, + { + "downloads": 0, + "day": "2025-01-19" + }, + { + "downloads": 18, + "day": "2025-01-20" + }, + { + "downloads": 8, + "day": "2025-01-21" + }, + { + "downloads": 1, + "day": "2025-01-22" + }, + { + "downloads": 84, + "day": "2025-01-23" + }, + { + "downloads": 13, + "day": "2025-01-24" + }, + { + "downloads": 30, + "day": "2025-01-25" + }, + { + "downloads": 15, + "day": "2025-01-26" + }, + { + "downloads": 18, + "day": "2025-01-27" + }, + { + "downloads": 54, + "day": "2025-01-28" + }, + { + "downloads": 22, + "day": "2025-01-29" + }, + { + "downloads": 33, + "day": "2025-01-30" + }, + { + "downloads": 59, + "day": "2025-01-31" + }, + { + "downloads": 19, + "day": "2025-02-01" + }, + { + "downloads": 4, + "day": "2025-02-02" + }, + { + "downloads": 19, + "day": "2025-02-03" + }, + { + "downloads": 9, + "day": "2025-02-04" + }, + { + "downloads": 11, + "day": "2025-02-05" + }, + { + "downloads": 55, + "day": "2025-02-06" + }, + { + "downloads": 35, + "day": "2025-02-07" + }, + { + "downloads": 12, + "day": "2025-02-08" + }, + { + "downloads": 5, + "day": "2025-02-09" + }, + { + "downloads": 23, + "day": "2025-02-10" + }, + { + "downloads": 30, + "day": "2025-02-11" + }, + { + "downloads": 13, + "day": "2025-02-12" + }, + { + "downloads": 9, + "day": "2025-02-13" + }, + { + "downloads": 40, + "day": "2025-02-14" + }, + { + "downloads": 5, + "day": "2025-02-15" + }, + { + "downloads": 16, + "day": "2025-02-16" + }, + { + "downloads": 3, + "day": "2025-02-17" + }, + { + "downloads": 8, + "day": "2025-02-18" + }, + { + "downloads": 15, + "day": "2025-02-19" + }, + { + "downloads": 15, + "day": "2025-02-20" + }, + { + "downloads": 49, + "day": "2025-02-21" + }, + { + "downloads": 5, + "day": "2025-02-22" + }, + { + "downloads": 4, + "day": "2025-02-23" + }, + { + "downloads": 28, + "day": "2025-02-24" + }, + { + "downloads": 6, + "day": "2025-02-25" + }, + { + "downloads": 12, + "day": "2025-02-26" + }, + { + "downloads": 24, + "day": "2025-02-27" + }, + { + "downloads": 22, + "day": "2025-02-28" + }, + { + "downloads": 1, + "day": "2025-03-01" + }, + { + "downloads": 20, + "day": "2025-03-02" + }, + { + "downloads": 32, + "day": "2025-03-03" + }, + { + "downloads": 4, + "day": "2025-03-04" + }, + { + "downloads": 73, + "day": "2025-03-05" + }, + { + "downloads": 38, + "day": "2025-03-06" + }, + { + "downloads": 9, + "day": "2025-03-07" + }, + { + "downloads": 1, + "day": "2025-03-08" + }, + { + "downloads": 2, + "day": "2025-03-09" + }, + { + "downloads": 15, + "day": "2025-03-10" + }, + { + "downloads": 76, + "day": "2025-03-11" + }, + { + "downloads": 12, + "day": "2025-03-12" + }, + { + "downloads": 31, + "day": "2025-03-13" + }, + { + "downloads": 19, + "day": "2025-03-14" + }, + { + "downloads": 5, + "day": "2025-03-15" + }, + { + "downloads": 3, + "day": "2025-03-16" + }, + { + "downloads": 14, + "day": "2025-03-17" + }, + { + "downloads": 49, + "day": "2025-03-18" + }, + { + "downloads": 82, + "day": "2025-03-19" + }, + { + "downloads": 8, + "day": "2025-03-20" + }, + { + "downloads": 7, + "day": "2025-03-21" + }, + { + "downloads": 1, + "day": "2025-03-22" + }, + { + "downloads": 1, + "day": "2025-03-23" + }, + { + "downloads": 49, + "day": "2025-03-24" + }, + { + "downloads": 44, + "day": "2025-03-25" + }, + { + "downloads": 13, + "day": "2025-03-26" + }, + { + "downloads": 10, + "day": "2025-03-27" + }, + { + "downloads": 39, + "day": "2025-03-28" + }, + { + "downloads": 6, + "day": "2025-03-29" + }, + { + "downloads": 8, + "day": "2025-03-30" + }, + { + "downloads": 1, + "day": "2025-03-31" + }, + { + "downloads": 9, + "day": "2025-04-01" + }, + { + "downloads": 48, + "day": "2025-04-02" + }, + { + "downloads": 8, + "day": "2025-04-03" + }, + { + "downloads": 24, + "day": "2025-04-04" + }, + { + "downloads": 7, + "day": "2025-04-05" + }, + { + "downloads": 8, + "day": "2025-04-06" + }, + { + "downloads": 10, + "day": "2025-04-07" + }, + { + "downloads": 8, + "day": "2025-04-08" + }, + { + "downloads": 15, + "day": "2025-04-09" + }, + { + "downloads": 11, + "day": "2025-04-10" + }, + { + "downloads": 6, + "day": "2025-04-11" + }, + { + "downloads": 7, + "day": "2025-04-12" + }, + { + "downloads": 3, + "day": "2025-04-13" + }, + { + "downloads": 46, + "day": "2025-04-14" + }, + { + "downloads": 15, + "day": "2025-04-15" + }, + { + "downloads": 21, + "day": "2025-04-16" + }, + { + "downloads": 6, + "day": "2025-04-17" + }, + { + "downloads": 14, + "day": "2025-04-18" + }, + { + "downloads": 6, + "day": "2025-04-19" + }, + { + "downloads": 5, + "day": "2025-04-20" + }, + { + "downloads": 15, + "day": "2025-04-21" + }, + { + "downloads": 4, + "day": "2025-04-22" + }, + { + "downloads": 7, + "day": "2025-04-23" + }, + { + "downloads": 39, + "day": "2025-04-24" + }, + { + "downloads": 14, + "day": "2025-04-25" + }, + { + "downloads": 5, + "day": "2025-04-26" + }, + { + "downloads": 36, + "day": "2025-04-27" + }, + { + "downloads": 16, + "day": "2025-04-28" + }, + { + "downloads": 34, + "day": "2025-04-29" + }, + { + "downloads": 30, + "day": "2025-04-30" + }, + { + "downloads": 16, + "day": "2025-05-01" + }, + { + "downloads": 9, + "day": "2025-05-02" + }, + { + "downloads": 3, + "day": "2025-05-03" + }, + { + "downloads": 3, + "day": "2025-05-04" + }, + { + "downloads": 94, + "day": "2025-05-05" + }, + { + "downloads": 32, + "day": "2025-05-06" + }, + { + "downloads": 64, + "day": "2025-05-07" + }, + { + "downloads": 16, + "day": "2025-05-08" + }, + { + "downloads": 27, + "day": "2025-05-09" + }, + { + "downloads": 3, + "day": "2025-05-10" + }, + { + "downloads": 3, + "day": "2025-05-11" + }, + { + "downloads": 6, + "day": "2025-05-12" + }, + { + "downloads": 22, + "day": "2025-05-13" + }, + { + "downloads": 20, + "day": "2025-05-14" + }, + { + "downloads": 31, + "day": "2025-05-15" + }, + { + "downloads": 14, + "day": "2025-05-16" + }, + { + "downloads": 214, + "day": "2025-05-17" + }, + { + "downloads": 12, + "day": "2025-05-18" + }, + { + "downloads": 30, + "day": "2025-05-19" + }, + { + "downloads": 49, + "day": "2025-05-20" + }, + { + "downloads": 26, + "day": "2025-05-21" + }, + { + "downloads": 26, + "day": "2025-05-22" + }, + { + "downloads": 10, + "day": "2025-05-23" + }, + { + "downloads": 2, + "day": "2025-05-24" + }, + { + "downloads": 0, + "day": "2025-05-25" + }, + { + "downloads": 6, + "day": "2025-05-26" + }, + { + "downloads": 6, + "day": "2025-05-27" + }, + { + "downloads": 42, + "day": "2025-05-28" + }, + { + "downloads": 27, + "day": "2025-05-29" + }, + { + "downloads": 21, + "day": "2025-05-30" + }, + { + "downloads": 4, + "day": "2025-05-31" + }, + { + "downloads": 24, + "day": "2025-06-01" + }, + { + "downloads": 94, + "day": "2025-06-02" + }, + { + "downloads": 36, + "day": "2025-06-03" + }, + { + "downloads": 13, + "day": "2025-06-04" + }, + { + "downloads": 43, + "day": "2025-06-05" + }, + { + "downloads": 14, + "day": "2025-06-06" + }, + { + "downloads": 3, + "day": "2025-06-07" + }, + { + "downloads": 12, + "day": "2025-06-08" + }, + { + "downloads": 32, + "day": "2025-06-09" + }, + { + "downloads": 17, + "day": "2025-06-10" + }, + { + "downloads": 85, + "day": "2025-06-11" + }, + { + "downloads": 60, + "day": "2025-06-12" + }, + { + "downloads": 22, + "day": "2025-06-13" + }, + { + "downloads": 17, + "day": "2025-06-14" + }, + { + "downloads": 13, + "day": "2025-06-15" + }, + { + "downloads": 60, + "day": "2025-06-16" + }, + { + "downloads": 18, + "day": "2025-06-17" + }, + { + "downloads": 39, + "day": "2025-06-18" + }, + { + "downloads": 62, + "day": "2025-06-19" + }, + { + "downloads": 31, + "day": "2025-06-20" + }, + { + "downloads": 6, + "day": "2025-06-21" + }, + { + "downloads": 5, + "day": "2025-06-22" + }, + { + "downloads": 37, + "day": "2025-06-23" + }, + { + "downloads": 29, + "day": "2025-06-24" + }, + { + "downloads": 26, + "day": "2025-06-25" + }, + { + "downloads": 16, + "day": "2025-06-26" + }, + { + "downloads": 71, + "day": "2025-06-27" + }, + { + "downloads": 8, + "day": "2025-06-28" + }, + { + "downloads": 9, + "day": "2025-06-29" + }, + { + "downloads": 87, + "day": "2025-06-30" + }, + { + "downloads": 43, + "day": "2025-07-01" + }, + { + "downloads": 51, + "day": "2025-07-02" + }, + { + "downloads": 47, + "day": "2025-07-03" + }, + { + "downloads": 23, + "day": "2025-07-04" + }, + { + "downloads": 6, + "day": "2025-07-05" + }, + { + "downloads": 15, + "day": "2025-07-06" + }, + { + "downloads": 33, + "day": "2025-07-07" + }, + { + "downloads": 72, + "day": "2025-07-08" + }, + { + "downloads": 100, + "day": "2025-07-09" + }, + { + "downloads": 126, + "day": "2025-07-10" + }, + { + "downloads": 50, + "day": "2025-07-11" + }, + { + "downloads": 28, + "day": "2025-07-12" + }, + { + "downloads": 11, + "day": "2025-07-13" + }, + { + "downloads": 196, + "day": "2025-07-14" + }, + { + "downloads": 153, + "day": "2025-07-15" + }, + { + "downloads": 24, + "day": "2025-07-16" + }, + { + "downloads": 26, + "day": "2025-07-17" + }, + { + "downloads": 48, + "day": "2025-07-18" + }, + { + "downloads": 6, + "day": "2025-07-19" + }, + { + "downloads": 6, + "day": "2025-07-20" + }, + { + "downloads": 69, + "day": "2025-07-21" + }, + { + "downloads": 51, + "day": "2025-07-22" + }, + { + "downloads": 49, + "day": "2025-07-23" + }, + { + "downloads": 38, + "day": "2025-07-24" + }, + { + "downloads": 58, + "day": "2025-07-25" + }, + { + "downloads": 2, + "day": "2025-07-26" + }, + { + "downloads": 0, + "day": "2025-07-27" + }, + { + "downloads": 67, + "day": "2025-07-28" + }, + { + "downloads": 132, + "day": "2025-07-29" + }, + { + "downloads": 98, + "day": "2025-07-30" + }, + { + "downloads": 60, + "day": "2025-07-31" + }, + { + "downloads": 49, + "day": "2025-08-01" + }, + { + "downloads": 13, + "day": "2025-08-02" + }, + { + "downloads": 9, + "day": "2025-08-03" + }, + { + "downloads": 28, + "day": "2025-08-04" + }, + { + "downloads": 29, + "day": "2025-08-05" + }, + { + "downloads": 21, + "day": "2025-08-06" + }, + { + "downloads": 62, + "day": "2025-08-07" + }, + { + "downloads": 47, + "day": "2025-08-08" + }, + { + "downloads": 8, + "day": "2025-08-09" + }, + { + "downloads": 25, + "day": "2025-08-10" + }, + { + "downloads": 48, + "day": "2025-08-11" + }, + { + "downloads": 43, + "day": "2025-08-12" + }, + { + "downloads": 39, + "day": "2025-08-13" + }, + { + "downloads": 0, + "day": "2025-08-14" + }, + { + "downloads": 0, + "day": "2025-08-15" + } + ] + } + }, + { + "platform": "GitHub", + "name": "sailpoint-oss/sailpoint-cli", + "timestamp": "2025-08-15T02:11:29.099Z", + "metrics": { + "stars": 35, + "forks": 24, + "watchers": 9, + "totalIssues": 40, + "openIssues": 5, + "closedIssues": 35, + "language": "Go", + "size": 89031, + "repositoryAge": 1120, + "lastActivity": 34, + "releaseCount": 31, + "totalReleaseDownloads": 10013, + "latestReleaseDownloads": 746, + "viewsCount": 484, + "uniqueVisitors": 160, + "latestRelease": "2.2.5", + "clonesCount": 18, + "topics": 6, + "license": "MIT License", + "defaultBranch": "main", + "downloadsTotal": 10013, + "downloadRange": [ + { + "day": "2022-08-19T20:12:00Z", + "downloads": 67, + "tagName": "0.0.2" + }, + { + "day": "2022-10-20T18:13:15Z", + "downloads": 57, + "tagName": "0.1.2" + }, + { + "day": "2022-10-27T15:50:59Z", + "downloads": 46, + "tagName": "0.2.1" + }, + { + "day": "2022-11-09T13:33:03Z", + "downloads": 68, + "tagName": "0.2.2" + }, + { + "day": "2023-01-06T14:50:24Z", + "downloads": 33, + "tagName": "0.3.0" + }, + { + "day": "2023-01-06T15:27:28Z", + "downloads": 43, + "tagName": "0.3.1" + }, + { + "day": "2023-01-06T15:37:38Z", + "downloads": 44, + "tagName": "0.3.2" + }, + { + "day": "2023-01-06T16:22:01Z", + "downloads": 68, + "tagName": "0.4.0" + }, + { + "day": "2023-02-07T19:08:48Z", + "downloads": 61, + "tagName": "0.4.1" + }, + { + "day": "2023-02-27T19:31:53Z", + "downloads": 131, + "tagName": "0.5.0" + }, + { + "day": "2023-03-13T14:35:02Z", + "downloads": 72, + "tagName": "0.5.1" + }, + { + "day": "2023-03-21T19:41:09Z", + "downloads": 157, + "tagName": "1.0.0" + }, + { + "day": "2023-04-13T19:45:17Z", + "downloads": 0, + "tagName": "1.1.0" + }, + { + "day": "2023-04-14T21:41:23Z", + "downloads": 136, + "tagName": "1.1.16" + }, + { + "day": "2023-04-14T21:57:54Z", + "downloads": 632, + "tagName": "1.2.0" + }, + { + "day": "2023-10-05T02:29:23Z", + "downloads": 243, + "tagName": "2.0.1" + }, + { + "day": "2023-10-11T20:58:03Z", + "downloads": 346, + "tagName": "2.0.2" + }, + { + "day": "2023-11-16T17:17:14Z", + "downloads": 507, + "tagName": "2.0.3" + }, + { + "day": "2024-01-29T15:09:32Z", + "downloads": 459, + "tagName": "2.0.4" + }, + { + "day": "2023-09-28T15:32:02Z", + "downloads": 233, + "tagName": "2.0" + }, + { + "day": "2024-03-13T17:46:06Z", + "downloads": 783, + "tagName": "2.1.4" + }, + { + "day": "2024-05-15T15:32:09Z", + "downloads": 1271, + "tagName": "2.1.5" + }, + { + "day": "2024-09-16T16:47:46Z", + "downloads": 187, + "tagName": "2.1.6" + }, + { + "day": "2024-10-01T15:24:59Z", + "downloads": 149, + "tagName": "2.1.7" + }, + { + "day": "2024-10-10T12:47:09Z", + "downloads": 670, + "tagName": "2.1.8" + }, + { + "day": "2024-11-14T00:58:21Z", + "downloads": 1508, + "tagName": "2.1.9" + }, + { + "day": "2025-04-02T19:24:30Z", + "downloads": 325, + "tagName": "2.1.10" + }, + { + "day": "2025-04-16T16:25:17Z", + "downloads": 115, + "tagName": "2.2.2" + }, + { + "day": "2025-04-21T10:31:57Z", + "downloads": 439, + "tagName": "2.2.3" + }, + { + "day": "2025-05-14T15:28:58Z", + "downloads": 417, + "tagName": "2.2.4" + }, + { + "day": "2025-06-03T14:37:59Z", + "downloads": 746, + "tagName": "2.2.5" + } + ] + } + }, + { + "platform": "PyPI", + "name": "sailpoint", + "timestamp": "2025-08-15T02:11:25.888Z", + "metrics": { + "downloadsTotal": 21614, + "downloadsMonthly": 10108, + "downloadsWeekly": 2894, + "downloadsDaily": 468, + "version": "1.3.8", + "latestReleaseDate": "2025-07-29", + "description": "The SailPoint API SDK for Python", + "homepage": "https://developer.sailpoint.com/", + "author": "SailPoint Developer Relations", + "license": "MIT", + "requiresPython": null, + "releases": 29, + "downloadsRange": [ + { + "day": "2025-07-16T00:00:00.000Z", + "downloads": 336 + }, + { + "day": "2025-07-17T00:00:00.000Z", + "downloads": 371 + }, + { + "day": "2025-07-18T00:00:00.000Z", + "downloads": 332 + }, + { + "day": "2025-07-19T00:00:00.000Z", + "downloads": 263 + }, + { + "day": "2025-07-20T00:00:00.000Z", + "downloads": 248 + }, + { + "day": "2025-07-21T00:00:00.000Z", + "downloads": 305 + }, + { + "day": "2025-07-22T00:00:00.000Z", + "downloads": 378 + }, + { + "day": "2025-07-23T00:00:00.000Z", + "downloads": 371 + }, + { + "day": "2025-07-24T00:00:00.000Z", + "downloads": 410 + }, + { + "day": "2025-07-25T00:00:00.000Z", + "downloads": 320 + }, + { + "day": "2025-07-26T00:00:00.000Z", + "downloads": 273 + }, + { + "day": "2025-07-27T00:00:00.000Z", + "downloads": 272 + }, + { + "day": "2025-07-28T00:00:00.000Z", + "downloads": 347 + }, + { + "day": "2025-07-29T00:00:00.000Z", + "downloads": 384 + }, + { + "day": "2025-07-30T00:00:00.000Z", + "downloads": 400 + }, + { + "day": "2025-07-31T00:00:00.000Z", + "downloads": 348 + }, + { + "day": "2025-08-01T00:00:00.000Z", + "downloads": 373 + }, + { + "day": "2025-08-02T00:00:00.000Z", + "downloads": 279 + }, + { + "day": "2025-08-03T00:00:00.000Z", + "downloads": 292 + }, + { + "day": "2025-08-04T00:00:00.000Z", + "downloads": 324 + }, + { + "day": "2025-08-05T00:00:00.000Z", + "downloads": 283 + }, + { + "day": "2025-08-06T00:00:00.000Z", + "downloads": 305 + }, + { + "day": "2025-08-07T00:00:00.000Z", + "downloads": 385 + }, + { + "day": "2025-08-08T00:00:00.000Z", + "downloads": 361 + }, + { + "day": "2025-08-09T00:00:00.000Z", + "downloads": 280 + }, + { + "day": "2025-08-10T00:00:00.000Z", + "downloads": 274 + }, + { + "day": "2025-08-11T00:00:00.000Z", + "downloads": 341 + }, + { + "day": "2025-08-12T00:00:00.000Z", + "downloads": 429 + }, + { + "day": "2025-08-13T00:00:00.000Z", + "downloads": 356 + }, + { + "day": "2025-08-14T00:00:00.000Z", + "downloads": 468 + } + ], + "overallSeries": [ + { + "date": "2025-07-16T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 336 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 371 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 332 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 263 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 248 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 305 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 378 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 371 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 410 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 320 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 273 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 272 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 347 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 384 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 400 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 348 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 373 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 279 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 292 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 324 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 283 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 305 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 385 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 361 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 280 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 274 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 341 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 429 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 356 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "without_mirrors", + "downloads": 468 + } + ], + "pythonMajorSeries": [ + { + "date": "2025-07-16T00:00:00.000Z", + "category": "3", + "downloads": 287 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "3", + "downloads": 363 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "3", + "downloads": 325 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "3", + "downloads": 248 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "3", + "downloads": 248 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "3", + "downloads": 304 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "3", + "downloads": 374 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "3", + "downloads": 333 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "2", + "downloads": 1 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "3", + "downloads": 350 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "3", + "downloads": 306 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "3", + "downloads": 266 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "3", + "downloads": 268 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "3", + "downloads": 338 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "3", + "downloads": 318 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "3", + "downloads": 382 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "3", + "downloads": 347 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "3", + "downloads": 358 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "3", + "downloads": 270 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "3", + "downloads": 268 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3", + "downloads": 323 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "3", + "downloads": 283 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "3", + "downloads": 305 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "3", + "downloads": 339 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "3", + "downloads": 359 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "3", + "downloads": 278 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "3", + "downloads": 271 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "3", + "downloads": 339 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "3", + "downloads": 421 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "3", + "downloads": 352 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "3", + "downloads": 467 + } + ], + "pythonMinorSeries": [ + { + "date": "2025-07-16T00:00:00.000Z", + "category": "3.7", + "downloads": 2 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "3.11", + "downloads": 102 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "3.10", + "downloads": 118 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "3.12", + "downloads": 10 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "3.8", + "downloads": 1 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "3.13", + "downloads": 54 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "3.12", + "downloads": 68 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "3.13", + "downloads": 54 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "3.10", + "downloads": 132 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "3.11", + "downloads": 108 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "3.12", + "downloads": 2 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "3.13", + "downloads": 54 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "3.7", + "downloads": 2 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "3.9", + "downloads": 3 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "3.10", + "downloads": 140 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "3.11", + "downloads": 124 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "3.10", + "downloads": 120 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "3.13", + "downloads": 54 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "3.6", + "downloads": 1 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "3.13", + "downloads": 52 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "3.10", + "downloads": 121 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "3.11", + "downloads": 74 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "3.11", + "downloads": 106 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "3.13", + "downloads": 54 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "3.12", + "downloads": 11 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "3.10", + "downloads": 132 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "3.10", + "downloads": 150 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "3.13", + "downloads": 60 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "3.12", + "downloads": 79 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "3.11", + "downloads": 84 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "3.10", + "downloads": 139 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "3.12", + "downloads": 54 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "3.13", + "downloads": 63 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "3.11", + "downloads": 76 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "3.10", + "downloads": 149 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "3.8", + "downloads": 2 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "2.7", + "downloads": 1 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "3.7", + "downloads": 6 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "3.13", + "downloads": 59 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "3.11", + "downloads": 88 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "3.12", + "downloads": 46 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "3.9", + "downloads": 1 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "3.11", + "downloads": 78 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "3.12", + "downloads": 26 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "3.13", + "downloads": 57 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "3.10", + "downloads": 143 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "3.10", + "downloads": 142 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "3.13", + "downloads": 51 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "3.10", + "downloads": 143 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "3.13", + "downloads": 52 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "3.10", + "downloads": 142 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "3.11", + "downloads": 74 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "3.13", + "downloads": 67 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "3.12", + "downloads": 54 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "3.12", + "downloads": 30 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "3.13", + "downloads": 52 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "3.11", + "downloads": 80 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "3.10", + "downloads": 150 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "3.7", + "downloads": 5 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "3.8", + "downloads": 1 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "3.11", + "downloads": 75 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "3.12", + "downloads": 104 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "3.10", + "downloads": 140 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "3.13", + "downloads": 61 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "3.7", + "downloads": 2 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "3.7", + "downloads": 2 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "3.10", + "downloads": 152 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "3.11", + "downloads": 76 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "3.13", + "downloads": 55 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "3.12", + "downloads": 62 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "3.13", + "downloads": 53 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "3.12", + "downloads": 78 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "3.11", + "downloads": 80 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "3.10", + "downloads": 145 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "3.9", + "downloads": 1 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "3.7", + "downloads": 3 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "3.10", + "downloads": 142 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "3.13", + "downloads": 53 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "3.11", + "downloads": 74 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "3.10", + "downloads": 141 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "3.13", + "downloads": 52 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3.13", + "downloads": 53 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3.7", + "downloads": 3 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3.8", + "downloads": 2 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3.10", + "downloads": 137 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3.9", + "downloads": 2 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "3.12", + "downloads": 54 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "3.9", + "downloads": 1 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "3.12", + "downloads": 7 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "3.13", + "downloads": 59 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "3.11", + "downloads": 78 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "3.10", + "downloads": 135 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "3.7", + "downloads": 3 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "3.13", + "downloads": 57 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "3.11", + "downloads": 80 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "3.8", + "downloads": 8 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "3.12", + "downloads": 19 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "3.9", + "downloads": 2 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "3.10", + "downloads": 139 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "3.7", + "downloads": 4 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "3.10", + "downloads": 136 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "3.12", + "downloads": 72 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "3.13", + "downloads": 53 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "3.11", + "downloads": 74 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "3.10", + "downloads": 145 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "3.13", + "downloads": 99 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "3.12", + "downloads": 41 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "3.8", + "downloads": 1 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "3.12", + "downloads": 3 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "3.11", + "downloads": 75 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "3.7", + "downloads": 2 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "3.10", + "downloads": 145 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "3.13", + "downloads": 53 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "3.7", + "downloads": 2 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "3.13", + "downloads": 52 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "3.10", + "downloads": 145 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "3.12", + "downloads": 53 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "3.13", + "downloads": 51 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "3.9", + "downloads": 8 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "3.11", + "downloads": 73 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "3.7", + "downloads": 3 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "3.10", + "downloads": 151 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "3.12", + "downloads": 150 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "3.11", + "downloads": 78 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "3.10", + "downloads": 132 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "3.13", + "downloads": 59 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "3.7", + "downloads": 1 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "3.8", + "downloads": 1 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "3.13", + "downloads": 63 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "3.10", + "downloads": 133 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "3.12", + "downloads": 81 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "3.7", + "downloads": 3 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "3.12", + "downloads": 191 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "3.10", + "downloads": 143 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "3.13", + "downloads": 55 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "3.11", + "downloads": 72 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "3.7", + "downloads": 3 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "3.9", + "downloads": 3 + } + ], + "systemSeries": [ + { + "date": "2025-07-16T00:00:00.000Z", + "category": "other", + "downloads": 78 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "Windows", + "downloads": 7 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "Linux", + "downloads": 281 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "Windows", + "downloads": 4 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "Linux", + "downloads": 365 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "other", + "downloads": 21 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "other", + "downloads": 55 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "Linux", + "downloads": 316 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "Darwin", + "downloads": 5 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "Windows", + "downloads": 4 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "Linux", + "downloads": 244 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "other", + "downloads": 96 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "Darwin", + "downloads": 4 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "Windows", + "downloads": 2 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "Linux", + "downloads": 246 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "Linux", + "downloads": 303 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "other", + "downloads": 8 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "other", + "downloads": 6 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "Darwin", + "downloads": 4 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "Linux", + "downloads": 370 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "Windows", + "downloads": 2 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "Linux", + "downloads": 331 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "other", + "downloads": 38 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "Darwin", + "downloads": 5 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "other", + "downloads": 277 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "Windows", + "downloads": 8 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "Linux", + "downloads": 341 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "Windows", + "downloads": 4 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "Darwin", + "downloads": 5 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "other", + "downloads": 66 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "Linux", + "downloads": 297 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "Linux", + "downloads": 266 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "other", + "downloads": 79 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "other", + "downloads": 16 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "Linux", + "downloads": 266 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "Windows", + "downloads": 2 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "Windows", + "downloads": 8 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "other", + "downloads": 24 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "Linux", + "downloads": 328 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "other", + "downloads": 148 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "Linux", + "downloads": 314 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "Windows", + "downloads": 6 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "Darwin", + "downloads": 4 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "Linux", + "downloads": 377 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "Windows", + "downloads": 6 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "other", + "downloads": 76 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "Windows", + "downloads": 2 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "other", + "downloads": 10 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "Linux", + "downloads": 345 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "other", + "downloads": 88 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "Darwin", + "downloads": 6 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "Linux", + "downloads": 350 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "Windows", + "downloads": 2 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "Linux", + "downloads": 268 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "other", + "downloads": 75 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "Windows", + "downloads": 4 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "Linux", + "downloads": 264 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "other", + "downloads": 31 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "Darwin", + "downloads": 4 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "Windows", + "downloads": 6 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "other", + "downloads": 35 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "Linux", + "downloads": 313 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "Linux", + "downloads": 272 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "Windows", + "downloads": 6 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "Darwin", + "downloads": 5 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "other", + "downloads": 23 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "Linux", + "downloads": 295 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "other", + "downloads": 132 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "Windows", + "downloads": 8 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "Linux", + "downloads": 341 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "other", + "downloads": 50 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "Linux", + "downloads": 355 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "other", + "downloads": 2 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "Darwin", + "downloads": 4 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "other", + "downloads": 66 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "Linux", + "downloads": 278 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "other", + "downloads": 14 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "Linux", + "downloads": 271 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "other", + "downloads": 64 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "Linux", + "downloads": 339 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "Linux", + "downloads": 420 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "other", + "downloads": 124 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "Windows", + "downloads": 2 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "Darwin", + "downloads": 2 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "Linux", + "downloads": 350 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "other", + "downloads": 61 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "Windows", + "downloads": 4 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "Linux", + "downloads": 464 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "other", + "downloads": 19 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "Darwin", + "downloads": 3 + } + ], + "installerSeries": [ + { + "date": "2025-07-16T00:00:00.000Z", + "category": "unknown", + "downloads": 8 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "pip", + "downloads": 283 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 24 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "poetry", + "downloads": 3 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "Browser", + "downloads": 44 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "requests", + "downloads": 1 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "Nexus", + "downloads": 1 + }, + { + "date": "2025-07-16T00:00:00.000Z", + "category": "uv", + "downloads": 4 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "unknown", + "downloads": 17 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 2 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "Browser", + "downloads": 2 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "poetry", + "downloads": 6 + }, + { + "date": "2025-07-17T00:00:00.000Z", + "category": "pip", + "downloads": 363 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 14 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "unknown", + "downloads": 34 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "pip", + "downloads": 325 + }, + { + "date": "2025-07-18T00:00:00.000Z", + "category": "requests", + "downloads": 7 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "Browser", + "downloads": 14 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 80 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "requests", + "downloads": 1 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "unknown", + "downloads": 1 + }, + { + "date": "2025-07-19T00:00:00.000Z", + "category": "pip", + "downloads": 248 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "uv", + "downloads": 2 + }, + { + "date": "2025-07-20T00:00:00.000Z", + "category": "pip", + "downloads": 246 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 8 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "poetry", + "downloads": 1 + }, + { + "date": "2025-07-21T00:00:00.000Z", + "category": "pip", + "downloads": 304 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 4 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "pip", + "downloads": 370 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "Browser", + "downloads": 2 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "uv", + "downloads": 4 + }, + { + "date": "2025-07-22T00:00:00.000Z", + "category": "poetry", + "downloads": 2 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "Browser", + "downloads": 38 + }, + { + "date": "2025-07-23T00:00:00.000Z", + "category": "pip", + "downloads": 333 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "unknown", + "downloads": 47 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "Browser", + "downloads": 28 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 174 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "poetry", + "downloads": 4 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "pip", + "downloads": 350 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "Nexus", + "downloads": 1 + }, + { + "date": "2025-07-24T00:00:00.000Z", + "category": "requests", + "downloads": 27 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 36 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "requests", + "downloads": 3 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "unknown", + "downloads": 16 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "pip", + "downloads": 306 + }, + { + "date": "2025-07-25T00:00:00.000Z", + "category": "Browser", + "downloads": 11 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "Browser", + "downloads": 7 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "unknown", + "downloads": 2 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "pip", + "downloads": 266 + }, + { + "date": "2025-07-26T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 70 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 12 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "pip", + "downloads": 268 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "Nexus", + "downloads": 1 + }, + { + "date": "2025-07-27T00:00:00.000Z", + "category": "Browser", + "downloads": 3 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "requests", + "downloads": 8 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "uv", + "downloads": 4 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "Browser", + "downloads": 1 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 14 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "unknown", + "downloads": 1 + }, + { + "date": "2025-07-28T00:00:00.000Z", + "category": "pip", + "downloads": 334 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "unknown", + "downloads": 65 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "Browser", + "downloads": 36 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "poetry", + "downloads": 7 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "pip", + "downloads": 317 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "Nexus", + "downloads": 1 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "requests", + "downloads": 23 + }, + { + "date": "2025-07-29T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 23 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "pip", + "downloads": 380 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "unknown", + "downloads": 16 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "requests", + "downloads": 4 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "poetry", + "downloads": 3 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "Browser", + "downloads": 11 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 45 + }, + { + "date": "2025-07-30T00:00:00.000Z", + "category": "uv", + "downloads": 2 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 4 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "pip", + "downloads": 347 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "unknown", + "downloads": 5 + }, + { + "date": "2025-07-31T00:00:00.000Z", + "category": "Browser", + "downloads": 1 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "uv", + "downloads": 5 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "pip", + "downloads": 353 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "unknown", + "downloads": 3 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "Browser", + "downloads": 15 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 66 + }, + { + "date": "2025-08-01T00:00:00.000Z", + "category": "Artifactory", + "downloads": 4 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "unknown", + "downloads": 2 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "pip", + "downloads": 268 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "Browser", + "downloads": 7 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "requests", + "downloads": 2 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 64 + }, + { + "date": "2025-08-02T00:00:00.000Z", + "category": "uv", + "downloads": 2 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "Browser", + "downloads": 24 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 6 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "unknown", + "downloads": 1 + }, + { + "date": "2025-08-03T00:00:00.000Z", + "category": "pip", + "downloads": 268 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "Browser", + "downloads": 1 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "pip", + "downloads": 323 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "unknown", + "downloads": 30 + }, + { + "date": "2025-08-04T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 4 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 22 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "pip", + "downloads": 281 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "unknown", + "downloads": 1 + }, + { + "date": "2025-08-05T00:00:00.000Z", + "category": "uv", + "downloads": 2 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "unknown", + "downloads": 10 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 122 + }, + { + "date": "2025-08-06T00:00:00.000Z", + "category": "pip", + "downloads": 305 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "poetry", + "downloads": 4 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "uv", + "downloads": 2 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "pip", + "downloads": 337 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 2 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "Browser", + "downloads": 42 + }, + { + "date": "2025-08-07T00:00:00.000Z", + "category": "unknown", + "downloads": 6 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "pip", + "downloads": 359 + }, + { + "date": "2025-08-08T00:00:00.000Z", + "category": "Browser", + "downloads": 2 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 64 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "requests", + "downloads": 2 + }, + { + "date": "2025-08-09T00:00:00.000Z", + "category": "pip", + "downloads": 278 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "unknown", + "downloads": 1 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 10 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "Browser", + "downloads": 1 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "requests", + "downloads": 2 + }, + { + "date": "2025-08-10T00:00:00.000Z", + "category": "pip", + "downloads": 271 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 62 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "Browser", + "downloads": 2 + }, + { + "date": "2025-08-11T00:00:00.000Z", + "category": "pip", + "downloads": 339 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "unknown", + "downloads": 1 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "pip", + "downloads": 421 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "Browser", + "downloads": 5 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "poetry", + "downloads": 3 + }, + { + "date": "2025-08-12T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 118 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 58 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "poetry", + "downloads": 2 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "requests", + "downloads": 1 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "pip", + "downloads": 352 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "unknown", + "downloads": 1 + }, + { + "date": "2025-08-13T00:00:00.000Z", + "category": "Nexus", + "downloads": 1 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "pip", + "downloads": 467 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "Browser", + "downloads": 1 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "unknown", + "downloads": 2 + }, + { + "date": "2025-08-14T00:00:00.000Z", + "category": "bandersnatch", + "downloads": 16 + } + ], + "popularSystem": "Linux", + "popularInstaller": "pip", + "overallChart": { + "package": "sailpoint", + "type": "overall", + "chartType": "line", + "title": "sailpoint โ€” Overall downloads (with/without mirrors)", + "labels": [ + "2025-07-16", + "2025-07-17", + "2025-07-18", + "2025-07-19", + "2025-07-20", + "2025-07-21", + "2025-07-22", + "2025-07-23", + "2025-07-24", + "2025-07-25", + "2025-07-26", + "2025-07-27", + "2025-07-28", + "2025-07-29", + "2025-07-30", + "2025-07-31", + "2025-08-01", + "2025-08-02", + "2025-08-03", + "2025-08-04", + "2025-08-05", + "2025-08-06", + "2025-08-07", + "2025-08-08", + "2025-08-09", + "2025-08-10", + "2025-08-11", + "2025-08-12", + "2025-08-13", + "2025-08-14" + ], + "datasets": [ + { + "label": "without_mirrors", + "data": [ + 336, + 371, + 332, + 263, + 248, + 305, + 378, + 371, + 410, + 320, + 273, + 272, + 347, + 384, + 400, + 348, + 373, + 279, + 292, + 324, + 283, + 305, + 385, + 361, + 280, + 274, + 341, + 429, + 356, + 468 + ], + "borderColor": "#2563eb", + "backgroundColor": "#2563eb33", + "fill": true + }, + { + "label": "with_mirrors", + "data": [ + 368, + 390, + 380, + 344, + 248, + 313, + 382, + 371, + 631, + 372, + 345, + 284, + 362, + 472, + 461, + 357, + 446, + 345, + 299, + 358, + 306, + 437, + 393, + 361, + 344, + 285, + 403, + 548, + 415, + 486 + ], + "borderColor": "#16a34a", + "backgroundColor": "#16a34a33", + "fill": true + } + ] + }, + "pythonMajorChart": { + "package": "sailpoint", + "type": "python_major", + "chartType": "line", + "title": "sailpoint โ€” Downloads by Python major version", + "labels": [ + "2025-07-16", + "2025-07-17", + "2025-07-18", + "2025-07-19", + "2025-07-20", + "2025-07-21", + "2025-07-22", + "2025-07-23", + "2025-07-24", + "2025-07-25", + "2025-07-26", + "2025-07-27", + "2025-07-28", + "2025-07-29", + "2025-07-30", + "2025-07-31", + "2025-08-01", + "2025-08-02", + "2025-08-03", + "2025-08-04", + "2025-08-05", + "2025-08-06", + "2025-08-07", + "2025-08-08", + "2025-08-09", + "2025-08-10", + "2025-08-11", + "2025-08-12", + "2025-08-13", + "2025-08-14" + ], + "datasets": [ + { + "label": "3", + "data": [ + 287, + 363, + 325, + 248, + 248, + 304, + 374, + 333, + 350, + 306, + 266, + 268, + 338, + 318, + 382, + 347, + 358, + 270, + 268, + 323, + 283, + 305, + 339, + 359, + 278, + 271, + 339, + 421, + 352, + 467 + ], + "borderColor": "#16a34a", + "backgroundColor": "#16a34a33", + "fill": true + }, + { + "label": "2", + "data": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "borderColor": "#dc2626", + "backgroundColor": "#dc262633", + "fill": true + } + ] + }, + "pythonMinorChart": { + "package": "sailpoint", + "type": "python_minor", + "chartType": "line", + "title": "sailpoint โ€” Downloads by Python minor version", + "labels": [ + "2025-07-16", + "2025-07-17", + "2025-07-18", + "2025-07-19", + "2025-07-20", + "2025-07-21", + "2025-07-22", + "2025-07-23", + "2025-07-24", + "2025-07-25", + "2025-07-26", + "2025-07-27", + "2025-07-28", + "2025-07-29", + "2025-07-30", + "2025-07-31", + "2025-08-01", + "2025-08-02", + "2025-08-03", + "2025-08-04", + "2025-08-05", + "2025-08-06", + "2025-08-07", + "2025-08-08", + "2025-08-09", + "2025-08-10", + "2025-08-11", + "2025-08-12", + "2025-08-13", + "2025-08-14" + ], + "datasets": [ + { + "label": "3.7", + "data": [ + 2, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 6, + 1, + 1, + 1, + 1, + 5, + 2, + 2, + 1, + 3, + 1, + 3, + 3, + 0, + 4, + 1, + 2, + 2, + 3, + 1, + 3, + 3 + ], + "borderColor": "#2563eb", + "backgroundColor": "#2563eb33", + "fill": true + }, + { + "label": "3.11", + "data": [ + 102, + 108, + 124, + 72, + 74, + 106, + 84, + 76, + 88, + 78, + 72, + 72, + 74, + 80, + 75, + 76, + 80, + 72, + 74, + 72, + 78, + 80, + 74, + 72, + 75, + 72, + 73, + 78, + 72, + 72 + ], + "borderColor": "#16a34a", + "backgroundColor": "#16a34a33", + "fill": true + }, + { + "label": "3.10", + "data": [ + 118, + 132, + 140, + 120, + 121, + 132, + 150, + 139, + 149, + 143, + 142, + 143, + 142, + 150, + 140, + 152, + 145, + 142, + 141, + 137, + 135, + 139, + 136, + 145, + 145, + 145, + 151, + 132, + 133, + 143 + ], + "borderColor": "#dc2626", + "backgroundColor": "#dc262633", + "fill": true + }, + { + "label": "3.12", + "data": [ + 10, + 68, + 2, + 0, + 0, + 11, + 79, + 54, + 46, + 26, + 0, + 0, + 54, + 30, + 104, + 62, + 78, + 0, + 0, + 54, + 7, + 19, + 72, + 41, + 3, + 0, + 53, + 150, + 81, + 191 + ], + "borderColor": "#7c3aed", + "backgroundColor": "#7c3aed33", + "fill": true + }, + { + "label": "3.8", + "data": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 8, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + "borderColor": "#ea580c", + "backgroundColor": "#ea580c33", + "fill": true + }, + { + "label": "3.13", + "data": [ + 54, + 54, + 54, + 54, + 52, + 54, + 60, + 63, + 59, + 57, + 51, + 52, + 67, + 52, + 61, + 55, + 53, + 53, + 52, + 53, + 59, + 57, + 53, + 99, + 53, + 52, + 51, + 59, + 63, + 55 + ], + "borderColor": "#ca8a04", + "backgroundColor": "#ca8a0433", + "fill": true + }, + { + "label": "3.9", + "data": [ + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 1, + 2, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 3 + ], + "borderColor": "#4b5563", + "backgroundColor": "#4b556333", + "fill": true + }, + { + "label": "3.6", + "data": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "borderColor": "#2563eb", + "backgroundColor": "#2563eb33", + "fill": true + }, + { + "label": "2.7", + "data": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "borderColor": "#16a34a", + "backgroundColor": "#16a34a33", + "fill": true + } + ] + }, + "systemChart": { + "package": "sailpoint", + "type": "system", + "chartType": "line", + "title": "sailpoint โ€” Downloads by operating system", + "labels": [ + "2025-07-16", + "2025-07-17", + "2025-07-18", + "2025-07-19", + "2025-07-20", + "2025-07-21", + "2025-07-22", + "2025-07-23", + "2025-07-24", + "2025-07-25", + "2025-07-26", + "2025-07-27", + "2025-07-28", + "2025-07-29", + "2025-07-30", + "2025-07-31", + "2025-08-01", + "2025-08-02", + "2025-08-03", + "2025-08-04", + "2025-08-05", + "2025-08-06", + "2025-08-07", + "2025-08-08", + "2025-08-09", + "2025-08-10", + "2025-08-11", + "2025-08-12", + "2025-08-13", + "2025-08-14" + ], + "datasets": [ + { + "label": "other", + "data": [ + 78, + 21, + 55, + 96, + 0, + 8, + 6, + 38, + 277, + 66, + 79, + 16, + 24, + 148, + 76, + 10, + 88, + 75, + 31, + 35, + 23, + 132, + 50, + 2, + 66, + 14, + 64, + 124, + 61, + 19 + ], + "borderColor": "#2563eb", + "backgroundColor": "#2563eb33", + "fill": true + }, + { + "label": "Windows", + "data": [ + 7, + 4, + 4, + 0, + 2, + 0, + 2, + 0, + 8, + 4, + 0, + 2, + 8, + 6, + 6, + 2, + 2, + 0, + 4, + 6, + 6, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 4, + 0 + ], + "borderColor": "#16a34a", + "backgroundColor": "#16a34a33", + "fill": true + }, + { + "label": "Linux", + "data": [ + 281, + 365, + 316, + 244, + 246, + 303, + 370, + 331, + 341, + 297, + 266, + 266, + 328, + 314, + 377, + 345, + 350, + 268, + 264, + 313, + 272, + 295, + 341, + 355, + 278, + 271, + 339, + 420, + 350, + 464 + ], + "borderColor": "#dc2626", + "backgroundColor": "#dc262633", + "fill": true + }, + { + "label": "Darwin", + "data": [ + 2, + 0, + 5, + 4, + 0, + 2, + 4, + 2, + 5, + 5, + 0, + 0, + 2, + 4, + 2, + 0, + 6, + 2, + 0, + 4, + 5, + 2, + 2, + 4, + 0, + 0, + 0, + 2, + 0, + 3 + ], + "borderColor": "#7c3aed", + "backgroundColor": "#7c3aed33", + "fill": true + } + ] + }, + "installerChart": { + "package": "sailpoint", + "type": "installer", + "chartType": "line", + "title": "sailpoint โ€” Downloads by installer", + "labels": [ + "2025-07-16", + "2025-07-17", + "2025-07-18", + "2025-07-19", + "2025-07-20", + "2025-07-21", + "2025-07-22", + "2025-07-23", + "2025-07-24", + "2025-07-25", + "2025-07-26", + "2025-07-27", + "2025-07-28", + "2025-07-29", + "2025-07-30", + "2025-07-31", + "2025-08-01", + "2025-08-02", + "2025-08-03", + "2025-08-04", + "2025-08-05", + "2025-08-06", + "2025-08-07", + "2025-08-08", + "2025-08-09", + "2025-08-10", + "2025-08-11", + "2025-08-12", + "2025-08-13", + "2025-08-14" + ], + "datasets": [ + { + "label": "unknown", + "data": [ + 8, + 17, + 34, + 1, + 0, + 0, + 0, + 0, + 47, + 16, + 2, + 0, + 1, + 65, + 16, + 5, + 3, + 2, + 1, + 30, + 1, + 10, + 6, + 0, + 0, + 1, + 0, + 1, + 1, + 2 + ], + "borderColor": "#2563eb", + "backgroundColor": "#2563eb33", + "fill": true + }, + { + "label": "pip", + "data": [ + 283, + 363, + 325, + 248, + 246, + 304, + 370, + 333, + 350, + 306, + 266, + 268, + 334, + 317, + 380, + 347, + 353, + 268, + 268, + 323, + 281, + 305, + 337, + 359, + 278, + 271, + 339, + 421, + 352, + 467 + ], + "borderColor": "#16a34a", + "backgroundColor": "#16a34a33", + "fill": true + }, + { + "label": "bandersnatch", + "data": [ + 24, + 2, + 14, + 80, + 0, + 8, + 4, + 0, + 174, + 36, + 70, + 12, + 14, + 23, + 45, + 4, + 66, + 64, + 6, + 4, + 22, + 122, + 2, + 0, + 64, + 10, + 62, + 118, + 58, + 16 + ], + "borderColor": "#dc2626", + "backgroundColor": "#dc262633", + "fill": true + }, + { + "label": "poetry", + "data": [ + 3, + 6, + 0, + 0, + 0, + 1, + 2, + 0, + 4, + 0, + 0, + 0, + 0, + 7, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 3, + 2, + 0 + ], + "borderColor": "#7c3aed", + "backgroundColor": "#7c3aed33", + "fill": true + }, + { + "label": "Browser", + "data": [ + 44, + 2, + 0, + 14, + 0, + 0, + 2, + 38, + 28, + 11, + 7, + 3, + 1, + 36, + 11, + 1, + 15, + 7, + 24, + 1, + 0, + 0, + 42, + 2, + 0, + 1, + 2, + 5, + 0, + 1 + ], + "borderColor": "#ea580c", + "backgroundColor": "#ea580c33", + "fill": true + }, + { + "label": "requests", + "data": [ + 1, + 0, + 7, + 1, + 0, + 0, + 0, + 0, + 27, + 3, + 0, + 0, + 8, + 23, + 4, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 0, + 0, + 1, + 0 + ], + "borderColor": "#0891b2", + "backgroundColor": "#0891b233", + "fill": true + }, + { + "label": "Nexus", + "data": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + "borderColor": "#ca8a04", + "backgroundColor": "#ca8a0433", + "fill": true + }, + { + "label": "uv", + "data": [ + 4, + 0, + 0, + 0, + 2, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 2, + 0, + 5, + 2, + 0, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "borderColor": "#4b5563", + "backgroundColor": "#4b556333", + "fill": true + }, + { + "label": "Artifactory", + "data": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "borderColor": "#2563eb", + "backgroundColor": "#2563eb33", + "fill": true + } + ] + }, + "pythonVersionBreakdown": { + "python2": 1, + "python3": 9690 + }, + "pythonMinorBreakdown": { + "python3.7": 59, + "python3.13": 1711, + "python3.6": 1, + "python3.11": 2405, + "python3.12": 1295, + "python3.10": 4182, + "python3.8": 16, + "python2.7": 1, + "python3.9": 21 + }, + "systemBreakdown": { + "other": 1782, + "Darwin": 67, + "Windows": 87, + "Linux": 9570 + } + } + }, + { + "platform": "PowerShell", + "name": "PSSailPoint", + "timestamp": "2025-08-15T02:11:28.449Z", + "metrics": { + "downloadsTotal": 20447, + "downloadsRange": [ + { + "day": "2025-07-29T20:00:10.787Z", + "downloads": 111, + "version": "1.6.6" + }, + { + "day": "2025-07-14T18:54:25.960Z", + "downloads": 99, + "version": "1.6.5" + }, + { + "day": "2025-06-30T19:06:51.843Z", + "downloads": 91, + "version": "1.6.4" + }, + { + "day": "2025-06-16T18:44:02.887Z", + "downloads": 119, + "version": "1.6.3" + }, + { + "day": "2025-06-02T19:12:49.237Z", + "downloads": 87, + "version": "1.6.2" + }, + { + "day": "2025-05-05T20:01:58.453Z", + "downloads": 236, + "version": "1.6.1" + }, + { + "day": "2025-04-14T23:32:44.193Z", + "downloads": 190, + "version": "1.6.0" + }, + { + "day": "2025-04-02T18:27:54.783Z", + "downloads": 70, + "version": "1.5.0" + }, + { + "day": "2025-03-24T23:32:36.103Z", + "downloads": 121, + "version": "1.4.13" + }, + { + "day": "2025-03-11T20:02:16.837Z", + "downloads": 110, + "version": "1.4.12" + }, + { + "day": "2025-03-05T21:03:53.207Z", + "downloads": 56, + "version": "1.4.11" + }, + { + "day": "2025-03-04T22:48:18.143Z", + "downloads": 11, + "version": "1.4.9" + }, + { + "day": "2025-01-23T22:53:44.573Z", + "downloads": 3898, + "version": "1.4.8" + }, + { + "day": "2024-12-13T00:27:44.017Z", + "downloads": 5470, + "version": "1.4.7" + }, + { + "day": "2024-12-06T07:39:49.940Z", + "downloads": 330, + "version": "1.4.6" + }, + { + "day": "2024-12-02T20:58:24.970Z", + "downloads": 115, + "version": "1.4.5" + }, + { + "day": "2024-11-04T21:27:05.063Z", + "downloads": 1138, + "version": "1.4.4" + }, + { + "day": "2024-09-23T18:17:04.723Z", + "downloads": 1341, + "version": "1.4.3" + }, + { + "day": "2024-07-15T17:48:38.457Z", + "downloads": 2712, + "version": "1.3.2" + }, + { + "day": "2024-04-18T16:29:16.037Z", + "downloads": 1377, + "version": "1.3.0" + }, + { + "day": "2024-04-04T21:04:41.110Z", + "downloads": 282, + "version": "1.2.4" + }, + { + "day": "2024-03-05T03:03:36.330Z", + "downloads": 452, + "version": "1.2.3" + }, + { + "day": "2024-02-22T23:18:16.843Z", + "downloads": 154, + "version": "1.2.2" + }, + { + "day": "2023-11-09T21:42:03.983Z", + "downloads": 1126, + "version": "1.2.1" + }, + { + "day": "2023-11-06T21:18:46.877Z", + "downloads": 23, + "version": "1.2.0" + }, + { + "day": "2023-10-16T20:18:29.630Z", + "downloads": 108, + "version": "1.1.3" + }, + { + "day": "2023-07-01T02:10:39.597Z", + "downloads": 280, + "version": "1.1.1" + }, + { + "day": "2023-06-30T02:12:08.087Z", + "downloads": 15, + "version": "1.1.0" + }, + { + "day": "2023-04-21T02:11:05.610Z", + "downloads": 150, + "version": "1.0.3" + }, + { + "day": "2023-03-04T04:36:47.537Z", + "downloads": 143, + "version": "1.0.2" + }, + { + "day": "2023-03-04T03:25:17.493Z", + "downloads": 16, + "version": "1.0.1" + }, + { + "day": "2023-03-03T03:24:01.177Z", + "downloads": 16, + "version": "1.0.0" + } + ], + "latestVersionDownloads": 111, + "latestVersion": "1.6.6", + "latestVersionDate": "2025-07-29T20:00:10.787Z", + "versionCount": 32, + "lastUpdated": "2025-08-15T01:50:00.340Z", + "authors": "Sailpoint Developer Relations", + "description": "PSSailpoint - the PowerShell module for IdentityNow", + "packageSize": 13944563, + "companyName": "SailPoint Technologies", + "owners": "SailPoint" + } + }, + { + "platform": "PowerShell", + "name": "PSSailpoint.V3", + "timestamp": "2025-08-15T02:11:26.467Z", + "metrics": { + "downloadsTotal": 11721, + "downloadsRange": [ + { + "day": "2025-07-29T19:56:06.410Z", + "downloads": 111, + "version": "1.6.6" + }, + { + "day": "2025-07-14T18:52:36.560Z", + "downloads": 99, + "version": "1.6.5" + }, + { + "day": "2025-06-30T19:05:04.390Z", + "downloads": 101, + "version": "1.6.4" + }, + { + "day": "2025-06-16T18:42:18.000Z", + "downloads": 121, + "version": "1.6.3" + }, + { + "day": "2025-06-02T19:11:05.660Z", + "downloads": 95, + "version": "1.6.2" + }, + { + "day": "2025-05-05T20:00:09.047Z", + "downloads": 253, + "version": "1.6.1" + }, + { + "day": "2025-04-14T23:30:59.397Z", + "downloads": 211, + "version": "1.6.0" + }, + { + "day": "2025-04-02T18:26:16.130Z", + "downloads": 95, + "version": "1.5.0" + }, + { + "day": "2025-03-24T23:31:08.923Z", + "downloads": 122, + "version": "1.4.13" + }, + { + "day": "2025-03-11T20:00:40.613Z", + "downloads": 114, + "version": "1.4.12" + }, + { + "day": "2025-03-05T21:02:16.773Z", + "downloads": 55, + "version": "1.4.11" + }, + { + "day": "2025-03-05T19:13:13.363Z", + "downloads": 5, + "version": "1.4.10" + }, + { + "day": "2025-03-04T22:46:38.217Z", + "downloads": 11, + "version": "1.4.9" + }, + { + "day": "2025-01-23T22:52:17.487Z", + "downloads": 3730, + "version": "1.4.8" + }, + { + "day": "2024-12-13T00:26:18.013Z", + "downloads": 5127, + "version": "1.4.7" + }, + { + "day": "2024-12-06T07:38:24.800Z", + "downloads": 223, + "version": "1.4.6" + }, + { + "day": "2024-12-02T20:56:28.073Z", + "downloads": 79, + "version": "1.4.5" + }, + { + "day": "2024-11-04T21:25:35.403Z", + "downloads": 540, + "version": "1.4.4" + }, + { + "day": "2024-09-23T18:09:26.183Z", + "downloads": 629, + "version": "1.4.3" + } + ], + "latestVersionDownloads": 111, + "latestVersion": "1.6.6", + "latestVersionDate": "2025-07-29T19:56:06.410Z", + "versionCount": 19, + "lastUpdated": "2025-08-15T01:50:00.340Z", + "authors": "OpenAPI Generator Team", + "description": "PSSailpoint.V3 - the PowerShell module for Identity Security Cloud V3 API", + "packageSize": 1047127, + "companyName": "SailPoint Technologies", + "owners": "SailPoint" + } + }, + { + "platform": "PowerShell", + "name": "PSSailpoint.Beta", + "timestamp": "2025-08-15T02:11:27.208Z", + "metrics": { + "downloadsTotal": 12049, + "downloadsRange": [ + { + "day": "2025-07-29T19:55:41.073Z", + "downloads": 110, + "version": "1.6.6" + }, + { + "day": "2025-07-14T18:52:30.133Z", + "downloads": 98, + "version": "1.6.5" + }, + { + "day": "2025-06-30T19:04:58.057Z", + "downloads": 101, + "version": "1.6.4" + }, + { + "day": "2025-06-16T18:42:13.030Z", + "downloads": 135, + "version": "1.6.3" + }, + { + "day": "2025-06-02T19:11:00.080Z", + "downloads": 119, + "version": "1.6.2" + }, + { + "day": "2025-05-05T20:00:01.960Z", + "downloads": 326, + "version": "1.6.1" + }, + { + "day": "2025-04-14T23:30:51.580Z", + "downloads": 271, + "version": "1.6.0" + }, + { + "day": "2025-04-02T18:26:11.390Z", + "downloads": 114, + "version": "1.5.0" + }, + { + "day": "2025-03-24T23:31:03.680Z", + "downloads": 125, + "version": "1.4.13" + }, + { + "day": "2025-03-11T20:00:34.563Z", + "downloads": 139, + "version": "1.4.12" + }, + { + "day": "2025-03-05T21:01:48.710Z", + "downloads": 71, + "version": "1.4.11" + }, + { + "day": "2025-03-05T19:12:41.443Z", + "downloads": 6, + "version": "1.4.10" + }, + { + "day": "2025-03-04T22:46:27.390Z", + "downloads": 12, + "version": "1.4.9" + }, + { + "day": "2025-01-23T22:52:12.817Z", + "downloads": 3778, + "version": "1.4.8" + }, + { + "day": "2024-12-13T00:26:12.730Z", + "downloads": 5139, + "version": "1.4.7" + }, + { + "day": "2024-12-06T07:38:18.587Z", + "downloads": 226, + "version": "1.4.6" + }, + { + "day": "2024-12-02T20:56:22.817Z", + "downloads": 82, + "version": "1.4.5" + }, + { + "day": "2024-11-04T21:25:29.737Z", + "downloads": 537, + "version": "1.4.4" + }, + { + "day": "2024-09-23T18:09:21.307Z", + "downloads": 660, + "version": "1.4.3" + } + ], + "latestVersionDownloads": 110, + "latestVersion": "1.6.6", + "latestVersionDate": "2025-07-29T19:55:41.073Z", + "versionCount": 19, + "lastUpdated": "2025-08-15T01:50:00.340Z", + "authors": "OpenAPI Generator Team", + "description": "PSSailpoint.Beta - the PowerShell module for Identity Security Cloud Beta API", + "packageSize": 1562121, + "companyName": "SailPoint Technologies", + "owners": "SailPoint" + } + }, + { + "platform": "PowerShell", + "name": "PSSailpoint.V2024", + "timestamp": "2025-08-15T02:11:26.888Z", + "metrics": { + "downloadsTotal": 11716, + "downloadsRange": [ + { + "day": "2025-07-29T19:56:45.697Z", + "downloads": 106, + "version": "1.6.6" + }, + { + "day": "2025-07-14T18:52:44.530Z", + "downloads": 97, + "version": "1.6.5" + }, + { + "day": "2025-06-30T19:05:11.443Z", + "downloads": 99, + "version": "1.6.4" + }, + { + "day": "2025-06-16T18:42:23.600Z", + "downloads": 119, + "version": "1.6.3" + }, + { + "day": "2025-06-02T19:11:13.610Z", + "downloads": 95, + "version": "1.6.2" + }, + { + "day": "2025-05-05T20:00:17.990Z", + "downloads": 256, + "version": "1.6.1" + }, + { + "day": "2025-04-14T23:31:05.197Z", + "downloads": 206, + "version": "1.6.0" + }, + { + "day": "2025-04-02T18:26:22.033Z", + "downloads": 82, + "version": "1.5.0" + }, + { + "day": "2025-03-24T23:31:14.223Z", + "downloads": 121, + "version": "1.4.13" + }, + { + "day": "2025-03-11T20:00:49.460Z", + "downloads": 111, + "version": "1.4.12" + }, + { + "day": "2025-03-05T21:02:24.843Z", + "downloads": 53, + "version": "1.4.11" + }, + { + "day": "2025-03-05T19:14:14.593Z", + "downloads": 5, + "version": "1.4.10" + }, + { + "day": "2025-03-04T22:46:46.900Z", + "downloads": 11, + "version": "1.4.9" + }, + { + "day": "2025-01-23T22:52:22.280Z", + "downloads": 3753, + "version": "1.4.8" + }, + { + "day": "2024-12-13T00:26:23.443Z", + "downloads": 5130, + "version": "1.4.7" + }, + { + "day": "2024-12-06T07:38:30.597Z", + "downloads": 224, + "version": "1.4.6" + }, + { + "day": "2024-12-02T20:56:34.120Z", + "downloads": 81, + "version": "1.4.5" + }, + { + "day": "2024-11-04T21:25:41.407Z", + "downloads": 535, + "version": "1.4.4" + }, + { + "day": "2024-09-23T18:09:31.540Z", + "downloads": 632, + "version": "1.4.3" + } + ], + "latestVersionDownloads": 106, + "latestVersion": "1.6.6", + "latestVersionDate": "2025-07-29T19:56:45.697Z", + "versionCount": 19, + "lastUpdated": "2025-08-15T01:50:00.340Z", + "authors": "OpenAPI Generator Team", + "description": "PSSailpoint.V2024 - the PowerShell module for Identity Security Cloud V2024 API", + "packageSize": 1926341, + "companyName": "SailPoint Technologies", + "owners": "SailPoint" + } + }, + { + "platform": "PowerShell", + "name": "PSSailpoint.V2025", + "timestamp": "2025-08-15T02:11:26.285Z", + "metrics": { + "downloadsTotal": 1009, + "downloadsRange": [ + { + "day": "2025-07-29T19:57:25.877Z", + "downloads": 102, + "version": "1.6.6" + }, + { + "day": "2025-07-14T18:52:50.380Z", + "downloads": 93, + "version": "1.6.5" + }, + { + "day": "2025-06-30T19:05:16.820Z", + "downloads": 93, + "version": "1.6.4" + }, + { + "day": "2025-06-16T18:42:29.450Z", + "downloads": 120, + "version": "1.6.3" + }, + { + "day": "2025-06-02T19:11:18.017Z", + "downloads": 95, + "version": "1.6.2" + }, + { + "day": "2025-05-05T20:00:25.287Z", + "downloads": 238, + "version": "1.6.1" + }, + { + "day": "2025-04-14T23:31:10.817Z", + "downloads": 198, + "version": "1.6.0" + }, + { + "day": "2025-04-02T18:26:26.283Z", + "downloads": 70, + "version": "1.5.0" + } + ], + "latestVersionDownloads": 102, + "latestVersion": "1.6.6", + "latestVersionDate": "2025-07-29T19:57:25.877Z", + "versionCount": 8, + "lastUpdated": "2025-08-15T01:50:00.340Z", + "authors": "OpenAPI Generator Team", + "description": "PSSailpoint.V2025 - the PowerShell module for Identity Security Cloud V2025 API", + "packageSize": 1968958, + "companyName": "SailPoint Technologies", + "owners": "SailPoint" + } + } +] \ No newline at end of file diff --git a/summary.md b/summary.md new file mode 100644 index 0000000..70688d1 --- /dev/null +++ b/summary.md @@ -0,0 +1,83 @@ +## ๐Ÿ“Š Usage Statistics + +Last updated: 2025-07-31T16:09:10.951Z + +**Summary:** +- **Total Sources**: 26 +- **Platforms**: npm, github, pypi, powershell, go +- **Total Monthly Downloads**: 4640.4M +- **Total Stars**: 1103.1K +- **Total Forks**: 234.0K + +## ๐Ÿ“ฆ Package Statistics + +| Platform | Name | Downloads (Monthly) | Downloads (Total) | Stars | Forks | Enhanced Metrics | +|---|---|---|---|---|---|---| +| NPM | express | 196.7M | 1884.3M | โ€” | โ€” | Bundle: 568.4KB, Age: 5327 days, Versions: 283 | +| NPM | react | 179.1M | 1632.6M | โ€” | โ€” | Bundle: 7.4KB, Age: 5026 days, Versions: 2423 | +| NPM | lodash | 347.7M | 3194.1M | โ€” | โ€” | Bundle: 69.8KB, Age: 4846 days, Versions: 114 | +| NPM | axios | 286.2M | 2968.9M | โ€” | โ€” | Bundle: 36.0KB, Age: 3988 days, Versions: 116 | +| NPM | moment | 108.3M | 1154.0M | โ€” | โ€” | Bundle: 294.9KB, Age: 5035 days, Versions: 76 | +| NPM | vue | 28.8M | 304.2M | โ€” | โ€” | Bundle: 126.0KB, Age: 4254 days, Versions: 538 | +| GitHub | facebook/react | โ€” | โ€” | 237.7K | 49.0K | Watchers: 237.7K, Releases: 30 | +| GitHub | microsoft/vscode | โ€” | โ€” | 175.2K | 34.1K | Watchers: 175.2K, Releases: 30 | +| GitHub | vercel/next.js | โ€” | โ€” | 133.5K | 29.0K | Watchers: 133.5K, Releases: 30 | +| GitHub | vuejs/vue | โ€” | โ€” | 209.2K | 33.7K | Watchers: 209.2K, Releases: 30 | +| GitHub | tensorflow/tensorflow | โ€” | โ€” | 191.0K | 74.8K | Watchers: 191.0K, Releases: 30 | +| PyPI | requests | 1423.9M | 716.0M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | numpy | 899.7M | 451.0M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | django | 48.9M | 24.5M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | flask | 226.5M | 113.2M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | pandas | 709.0M | 356.4M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PyPI | matplotlib | 185.3M | 92.8M | โ€” | โ€” | Python breakdown, Platform breakdown | +| PowerShell | PowerShellGet | โ€” | โ€” | โ€” | โ€” | Versions: 81 | +| PowerShell | PSReadLine | โ€” | โ€” | โ€” | โ€” | Versions: 46 | +| PowerShell | Pester | โ€” | โ€” | โ€” | โ€” | Versions: 100 | +| PowerShell | PSScriptAnalyzer | โ€” | โ€” | โ€” | โ€” | Versions: 37 | +| PowerShell | dbatools | โ€” | โ€” | โ€” | โ€” | Versions: 100 | +| Go | github.com/gin-gonic/gin | โ€” | โ€” | 83.4K | 8.3K | Versions: 26, Watchers: 83.4K, Releases: 27 | +| Go | github.com/go-chi/chi | โ€” | โ€” | 20.2K | 1.0K | Versions: 33, Watchers: 20.2K, Releases: 30 | +| Go | github.com/gorilla/mux | โ€” | โ€” | 21.5K | 1.9K | Versions: 14, Watchers: 21.5K, Releases: 15 | +| Go | github.com/labstack/echo | โ€” | โ€” | 31.3K | 2.3K | Versions: 62, Watchers: 31.3K, Releases: 30 | + +## ๐Ÿš€ Platform Summaries + +### NPM Enhanced Metrics +- **Total Monthly Downloads**: 1146.9M +- **Total Stars**: 0 +- **Total Forks**: 0 + +**Recent Test Results (6 packages):** +- **Enhanced Metrics**: 3 types available + +### GITHUB Enhanced Metrics +- **Total Monthly Downloads**: 0 +- **Total Stars**: 946.6K +- **Total Forks**: 220.6K + +**Recent Test Results (5 packages):** +- **Enhanced Metrics**: 4 types available + +### PYPI Enhanced Metrics +- **Total Monthly Downloads**: 3493.4M +- **Total Stars**: 0 +- **Total Forks**: 0 + +**Recent Test Results (6 packages):** +- **Enhanced Metrics**: 2 types available + +### POWERSHELL Enhanced Metrics +- **Total Monthly Downloads**: 0 +- **Total Stars**: 0 +- **Total Forks**: 0 + +**Recent Test Results (5 packages):** +- **Enhanced Metrics**: 1 types available + +### GO Enhanced Metrics +- **Total Monthly Downloads**: 0 +- **Total Stars**: 156.5K +- **Total Forks**: 13.5K + +**Recent Test Results (4 packages):** +- **Enhanced Metrics**: 5 types available diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..653d862 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1029 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@actions/core@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.11.1.tgz#ae683aac5112438021588030efb53b1adb86f172" + integrity sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A== + dependencies: + "@actions/exec" "^1.1.1" + "@actions/http-client" "^2.0.1" + +"@actions/exec@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.1.1.tgz#2e43f28c54022537172819a7cf886c844221a611" + integrity sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w== + dependencies: + "@actions/io" "^1.0.1" + +"@actions/github@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@actions/github/-/github-6.0.1.tgz#76e5f96df062c90635a7181ef45ff1c4ac21306e" + integrity sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw== + dependencies: + "@actions/http-client" "^2.2.0" + "@octokit/core" "^5.0.1" + "@octokit/plugin-paginate-rest" "^9.2.2" + "@octokit/plugin-rest-endpoint-methods" "^10.4.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + undici "^5.28.5" + +"@actions/http-client@^2.0.1", "@actions/http-client@^2.2.0": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.3.tgz#31fc0b25c0e665754ed39a9f19a8611fc6dab674" + integrity sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA== + dependencies: + tunnel "^0.0.6" + undici "^5.25.4" + +"@actions/io@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.1.3.tgz#4cdb6254da7962b07473ff5c335f3da485d94d71" + integrity sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q== + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@kurkle/color@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.4.tgz#4d4ff677e1609214fc71c580125ddddd86abcabf" + integrity sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w== + +"@mapbox/node-pre-gyp@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + +"@octokit/auth-token@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-6.0.0.tgz#b02e9c08a2d8937df09a2a981f226ad219174c53" + integrity sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w== + +"@octokit/core@^5.0.1": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.2.tgz#252805732de9b4e8e4f658d34b80c4c9b2534761" + integrity sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/core@^7.0.2": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-7.0.3.tgz#0b5288995fed66920128d41cfeea34979d48a360" + integrity sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ== + dependencies: + "@octokit/auth-token" "^6.0.0" + "@octokit/graphql" "^9.0.1" + "@octokit/request" "^10.0.2" + "@octokit/request-error" "^7.0.0" + "@octokit/types" "^14.0.0" + before-after-hook "^4.0.0" + universal-user-agent "^7.0.0" + +"@octokit/endpoint@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-11.0.0.tgz#189fcc022721b4c49d0307eea6be3de1cfb53026" + integrity sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ== + dependencies: + "@octokit/types" "^14.0.0" + universal-user-agent "^7.0.2" + +"@octokit/endpoint@^9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0" + integrity sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw== + dependencies: + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^7.0.0", "@octokit/graphql@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.1.tgz#79d9f3d0c96a8fd13d64186fe5c33606d48b79cc" + integrity sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g== + dependencies: + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-9.0.1.tgz#eb258fc9981403d2d751720832652c385b6c1613" + integrity sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg== + dependencies: + "@octokit/request" "^10.0.2" + "@octokit/types" "^14.0.0" + universal-user-agent "^7.0.0" + +"@octokit/openapi-types@^18.0.0": + version "18.1.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" + integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== + +"@octokit/openapi-types@^20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz#9ec2daa0090eeb865ee147636e0c00f73790c6e5" + integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA== + +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" + integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== + +"@octokit/openapi-types@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-25.1.0.tgz#5a72a9dfaaba72b5b7db375fd05e90ca90dc9682" + integrity sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA== + +"@octokit/plugin-paginate-rest@^13.0.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.1.1.tgz#ca5bb1c7b85a583691263c1f788f607e9bcb74b3" + integrity sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw== + dependencies: + "@octokit/types" "^14.1.0" + +"@octokit/plugin-paginate-rest@^9.2.2": + version "9.2.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz#c516bc498736bcdaa9095b9a1d10d9d0501ae831" + integrity sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ== + dependencies: + "@octokit/types" "^12.6.0" + +"@octokit/plugin-request-log@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz#de1c1e557df6c08adb631bf78264fa741e01b317" + integrity sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q== + +"@octokit/plugin-rest-endpoint-methods@^10.4.0": + version "10.4.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz#41ba478a558b9f554793075b2e20cd2ef973be17" + integrity sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg== + dependencies: + "@octokit/types" "^12.6.0" + +"@octokit/plugin-rest-endpoint-methods@^16.0.0": + version "16.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.0.0.tgz#ba30ca387fc2ac8bd93cf9f951174736babebd97" + integrity sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g== + dependencies: + "@octokit/types" "^14.1.0" + +"@octokit/plugin-retry@^7.0.0": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-7.2.1.tgz#3ec7065ad451c7e6bd64c4fb16c98006a5ff2f66" + integrity sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A== + dependencies: + "@octokit/request-error" "^6.1.8" + "@octokit/types" "^14.0.0" + bottleneck "^2.15.3" + +"@octokit/plugin-throttling@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz#89f2580b43cfd5ec17f19e3939d8af549f573b0b" + integrity sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew== + dependencies: + "@octokit/types" "^11.0.0" + bottleneck "^2.15.3" + +"@octokit/request-error@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805" + integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== + dependencies: + "@octokit/types" "^13.1.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^6.1.8": + version "6.1.8" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.8.tgz#3c7ce1ca6721eabd43dbddc76b44860de1fdea75" + integrity sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ== + dependencies: + "@octokit/types" "^14.0.0" + +"@octokit/request-error@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-7.0.0.tgz#48ae2cd79008315605d00e83664891a10a5ddb97" + integrity sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg== + dependencies: + "@octokit/types" "^14.0.0" + +"@octokit/request@^10.0.2": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-10.0.3.tgz#2ffdb88105ce20d25dcab8a592a7040ea48306c7" + integrity sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA== + dependencies: + "@octokit/endpoint" "^11.0.0" + "@octokit/request-error" "^7.0.0" + "@octokit/types" "^14.0.0" + fast-content-type-parse "^3.0.0" + universal-user-agent "^7.0.2" + +"@octokit/request@^8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486" + integrity sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw== + dependencies: + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@22.0.0": + version "22.0.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-22.0.0.tgz#9026f47dacba9c605da3d43cce9432c4c532dc5a" + integrity sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA== + dependencies: + "@octokit/core" "^7.0.2" + "@octokit/plugin-paginate-rest" "^13.0.1" + "@octokit/plugin-request-log" "^6.0.0" + "@octokit/plugin-rest-endpoint-methods" "^16.0.0" + +"@octokit/types@^11.0.0": + version "11.1.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-11.1.0.tgz#9e5db741d582b05718a4d91bac8cc987def235ea" + integrity sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^12.6.0": + version "12.6.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.6.0.tgz#8100fb9eeedfe083aae66473bd97b15b62aedcb2" + integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw== + dependencies: + "@octokit/openapi-types" "^20.0.0" + +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0": + version "13.10.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" + integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== + dependencies: + "@octokit/openapi-types" "^24.2.0" + +"@octokit/types@^14.0.0", "@octokit/types@^14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-14.1.0.tgz#3bf9b3a3e3b5270964a57cc9d98592ed44f840f2" + integrity sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g== + dependencies: + "@octokit/openapi-types" "^25.1.0" + +"@types/bun@latest": + version "1.2.19" + resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.2.19.tgz#3fb37a59e56d5dd2276653db5b6a022989b6e465" + integrity sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg== + dependencies: + bun-types "1.2.19" + +"@types/node@*": + version "24.1.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.1.0.tgz#0993f7dc31ab5cc402d112315b463e383d68a49c" + integrity sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w== + dependencies: + undici-types "~7.8.0" + +"@types/node@^20.0.0": + version "20.19.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.9.tgz#ca9a58193fec361cc6e859d88b52261853f1f0d3" + integrity sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw== + dependencies: + undici-types "~6.21.0" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +"aproba@^1.0.3 || ^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" + integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +before-after-hook@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-4.0.0.tgz#cf1447ab9160df6a40f3621da64d6ffc36050cb9" + integrity sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ== + +bottleneck@^2.15.3: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +bun-types@1.2.19: + version "1.2.19" + resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.2.19.tgz#0cecd78ed08bae389cc902ae3a5617c390b0fab6" + integrity sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ== + dependencies: + "@types/node" "*" + +cargo-cp-artifact@^0.1: + version "0.1.9" + resolved "https://registry.yarnpkg.com/cargo-cp-artifact/-/cargo-cp-artifact-0.1.9.tgz#32264a0a48109e26c48da334daff9a1da9d9b7c8" + integrity sha512-6F+UYzTaGB+awsTXg0uSJA1/b/B3DDJzpKVRu0UmyI7DmNeaAl2RFHuTGIN6fEgpadRxoXGb7gbC1xo4C3IdyA== + +chart.js@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.5.0.tgz#11a1ef6c4befc514b1b0b613ebac226c4ad2740b" + integrity sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ== + dependencies: + "@kurkle/color" "^0.3.0" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +detect-libc@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +fast-content-type-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz#5590b6c807cc598be125e6740a9fde589d2b7afb" + integrity sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg== + +fast-xml-parser@5.2.5: + version "5.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz#4809fdfb1310494e341098c25cb1341a01a9144a" + integrity sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ== + dependencies: + strnum "^2.1.0" + +foreground-child@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +glob@^11.0.0: + version "11.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.3.tgz#9d8087e6d72ddb3c4707b1d2778f80ea3eaefcd6" + integrity sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA== + dependencies: + foreground-child "^3.3.1" + jackspeak "^4.1.1" + minimatch "^10.0.3" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.1.tgz#96876030f450502047fc7e8c7fcf8ce8124e43ae" + integrity sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + +lru-cache@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.1.0.tgz#afafb060607108132dbc1cf8ae661afb69486117" + integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A== + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" + integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +parenthesis@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.8.tgz#3457fccb8f05db27572b841dad9d2630b912f125" + integrity sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw== + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +semver@^6.0.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +skia-canvas@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/skia-canvas/-/skia-canvas-2.0.2.tgz#22f1bac9dbddc356ceb617656f3bcb1736d98f79" + integrity sha512-LUa7P41NRNoCWhvPyX4aKP5SpeWDXmWYbonCt4FfkEdTuSssxpvYiK5Y69B0MudDR6LVNt9RBwpZfuCRpVSbbw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.11" + cargo-cp-artifact "^0.1" + glob "^11.0.0" + path-browserify "^1.0.1" + simple-get "^4.0.1" + string-split-by "^1.0.0" + +string-split-by@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812" + integrity sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A== + dependencies: + parenthesis "^3.1.5" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strnum@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.1.tgz#cf2a6e0cf903728b8b2c4b971b7e36b4e82d46ab" + integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw== + +tar@^6.1.11: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +typescript@^5.0.0: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici-types@~7.8.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" + integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== + +undici@^5.25.4, undici@^5.28.5: + version "5.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" + integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== + dependencies: + "@fastify/busboy" "^2.0.0" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.3.tgz#c05870a58125a2dc00431f2df815a77fe69736be" + integrity sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==