diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml new file mode 100644 index 00000000..33594227 --- /dev/null +++ b/.github/workflows/claude.yml @@ -0,0 +1,71 @@ +# Claude Code Assistant Workflow +# This GitHub Actions workflow uses the Claude Code Action to review pull requests. +name: Claude Code Assistant + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + claude-assistant: + # Only run on PR-related events that contain @claude + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + + permissions: + contents: read + pull-requests: write + issues: write + id-token: write + actions: read + + # Cancel older runs when new commits arrive on the same PR + concurrency: + group: pr-${{ github.event.pull_request.number }} + cancel-in-progress: true + + steps: + - name: Verify user + uses: 'deriv-com/shared-actions/.github/actions/verify_user_in_organization@v3' + with: + username: ${{ github.event.pull_request.user.login }} + token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + + # Ensure we have a real git repo at the PR HEAD (works for forks) + - name: Checkout PR head + uses: actions/checkout@v4 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 20 + token: ${{ secrets.GITHUB_TOKEN }} + + # Sanity check (helps diagnose if anything goes wrong) + - name: Verify git workspace + run: | + pwd + git rev-parse --is-inside-work-tree + git log -1 --oneline + + - name: Run Claude Code Action + uses: anthropics/claude-code-action@v1 + timeout-minutes: 60 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + track_progress: true + prompt: | + REPO: ${{ github.repository }} + PR NUMBER: ${{ github.event.pull_request.number }} + + Please review this pull request with a focus on: + - Correctness, regressions, and edge cases + - Code quality & readability (React + TypeScript best practices) + - Performance (render cost, memoization, effects) + - Security (XSS, auth flows, secrets) + - Tests (coverage for new logic) + + Output: + - Inline comments for specific issues + - A summary comment with high/medium/low priority items + - Concrete fix suggestions and quick patches where safe diff --git a/.github/workflows/security-nclc-review.yml b/.github/workflows/security-nclc-review.yml new file mode 100644 index 00000000..8bbfba7c --- /dev/null +++ b/.github/workflows/security-nclc-review.yml @@ -0,0 +1,207 @@ +name: Security NCLC Review +permissions: + pull-requests: write # Needed for leaving PR comments + contents: read +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +jobs: + security: + runs-on: ubuntu-latest + timeout-minutes: 10 + if: github.event.pull_request.draft == false + env: + SLACK_WEBHOOK_URL: ${{ secrets.SAST_SECURITY_SLACK_WEBHOOK }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + PR_URL: ${{ github.event.pull_request.html_url }} + PR_CREATOR: ${{ github.event.pull_request.user.login }} + PR_HEAD_COMMIT_URL: ${{ github.event.pull_request.html_url }}/commits/${{ github.event.pull_request.head.sha }} + WORKFLOW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GITHUB_SENDER: ${{ github.event.sender.login }} + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 2 + - name: Generate Custom Instruction File + run: | + cat < custom_instruction.md + You are a Principal Application Security Engineer performing a security-focused code review. Analyze all changes in this PR for security vulnerabilities and provide actionable feedback. + ## Review Scope & Priority + ### CRITICAL - Block PR if found: + - Hardcoded secrets, API keys, passwords, tokens + - SQL injection vulnerabilities + - Remote Code Execution (RCE) risks + - Path traversal vulnerabilities + - Unsafe deserialization + - Missing authentication/authorization on sensitive endpoints + - Exposed sensitive data in logs/responses + ### HIGH - Require immediate fix: + - Cross-Site Scripting (XSS) vulnerabilities + - Server-Side Request Forgery (SSRF) + - Insecure Direct Object References (IDOR) + - Cross-Site Request Forgery (CSRF) missing protections + - XML External Entity (XXE) injection + - Weak cryptography or hashing algorithms + - Race conditions in security controls + ### MEDIUM - Fix before production: + - Missing input validation/sanitization + - Overly permissive CORS policies + - Missing security headers + - Insufficient logging for security events + - Missing rate limiting + - Dependency vulnerabilities (outdated packages) + ## Technology-Specific Checks + ### JavaScript/TypeScript Frontend: + ```javascript + // DOM Manipulation & XSS Prevention: + - innerHTML/outerHTML/document.write() with user input + - dangerouslySetInnerHTML with unsanitized user input + - html-react-parser() without DOMPurify or sanitization + - $.html(), $.append(), $.after() with unsanitized data + - Unescaped user data in JSX expressions + - template literals with user input in HTML context + + // Code Execution Risks: + - eval(), new Function(), setTimeout/setInterval with string arguments + - Dynamic imports from untrusted sources + - postMessage without targetOrigin validation + - window.open() with user-controlled URLs + + // React-Specific Security: + - dangerouslySetInnerHTML usage (always requires justification) + - Props spreading (...props) potentially exposing sensitive attributes + - useEffect/useState with untrusted external data + - Component injection via dynamic imports without validation + - Context API exposing sensitive data (tokens, credentials) + - Ref manipulation allowing XSS + + // Data Storage & Exposure: + - localStorage/sessionStorage storing tokens, passwords, PII + - Sensitive data in console.log/console.error/console.debug + - API keys, secrets, or credentials in frontend code + - Tokens or sensitive data in URL query parameters + - Session data persisting after logout + + // Cryptography & Encoding: + - crypto-js using weak algorithms (MD5, SHA1 for passwords) + - Hardcoded encryption keys or initialization vectors + - Base64 encoding used as security measure + - Math.random() for security-sensitive operations + - Client-side-only password validation + + // API & WebSocket Security: + - API responses used without validation/sanitization + - Credentials transmitted over unencrypted WebSocket + + // Navigation & Redirects: + - window.location/location.href with user input + - history.pushState/replaceState with untrusted data + - Open redirects (redirect parameter not validated) + - with javascript: protocol + - target="_blank" without rel="noopener noreferrer" + + // Configuration & Build: + - .env files committed to repository + - Webpack exposing sensitive environment variables to frontend + - Debug/development mode enabled in production + - Source maps exposed in production builds + - Missing Subresource Integrity (SRI) on CDN resources + - CSP headers missing or overly permissive + + // Deserialization & Parsing: + - JSON.parse() without try-catch or validation + - js-yaml.load() without safeLoad (allows code execution) + - XML parsing without XXE protection + - User-controlled data in eval-like functions + + // Additional Frontend Risks: + - CORS policies too permissive (allowing * origin) + - Clickjacking (missing X-Frame-Options/CSP frame-ancestors) + - MIME type sniffing (missing X-Content-Type-Options) + - Reflected XSS in error messages + - DOM-based XSS via URL fragments (#) + - Prototype pollution via Object.assign, merge functions + - ReDoS (Regex Denial of Service) patterns + - Missing CSRF tokens on state-changing operations + ``` + ## Review Output Format + For each finding, provide: + ``` + :red_circle: CRITICAL | :large_yellow_circle: HIGH | :large_orange_circle: MEDIUM | :large_blue_circle: LOW + **Issue:** [Vulnerability type] + **Location:** [File:Line] + **Risk:** [Brief explanation of potential exploit] + **Fix:** + ```[Secure code example]``` + **Reference:** [OWASP/CWE ID if applicable] + ``` + ## Additional Checks + 1. **Dependencies:** + - Run security audit on package.json + - Check for known CVEs in dependencies + - Verify dependency sources are trusted + 2. **Secrets Detection:** + - Scan for patterns: API keys, passwords, tokens, certificates + - Check .env files are gitignored + - Verify no sensitive data in comments + 3. **Configuration:** + - Ensure secure defaults (fail closed) + - Verify least privilege principle + - Check for defense-in-depth implementation + 4. **Data Flow:** + - Trace user input from entry to processing + - Verify all boundaries have validation + - Ensure proper encoding at each layer + ## Summary Requirements + At the end of review, provide: + 1. Security score: PASS :white_check_mark: | FAIL :x: + 2. Count by severity: Critical(X), High(X), Medium(X), Low(X) + 3. Must-fix items before merge + 4. Recommended improvements + 5. Positive security practices observed + ## Review Principles + - Assume all input is malicious + - Verify trust boundaries + - Check fail-safe defaults + - Validate defense-in-depth + - Ensure least privilege + - Confirm secure communication + - Verify proper error handling + - Check audit logging presence + Focus only on security. Do not comment on code style, performance, or non-security bugs unless they have security implications. + EOF + - uses: anthropics/claude-code-security-review@68982a6bf10d545e94dd0390af08306d94ef684c + with: + comment-pr: true + claude-api-key: ${{ secrets.ANTHROPIC_API_KEY }} + run-every-commit: true + custom-security-scan-instructions: custom_instruction.md + claude-model: ${{ vars.CLAUDE_MODEL || 'claude-opus-4-5-20251101' }} + - name: Send Failure Notification to Slack + if: failure() + uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 + with: + # For posting a rich message using Block Kit + payload: | + { + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": ":red-alert: *Security NCLC Review Checks Failed*" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "`Workflow Run:` ${{ env.WORKFLOW_RUN_URL }}\n\n`Pull Request:` ${{ env.PR_URL }}\n\n`Head Commit:` ${{ env.PR_HEAD_COMMIT_URL }}\n\n`PR Creator:` *${{ env.PR_CREATOR }}*\n\n`Latest Committer:` *${{ env.GITHUB_SENDER }}*\n\n" + } + } + ] + } diff --git a/.gitignore b/.gitignore index 4f0f23a0..6f5a9b40 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,11 @@ yarn-error.log* .vscode .vscode* .vercel + +# AI Tool Configuration Files +.cursorrules +.clinerules +.roo-config.json +.chatgpt-instructions.md +.claude-instructions.md +.ai-rules.md \ No newline at end of file diff --git a/.husky/pre-push b/.husky/pre-push index 94b7f060..45fe87d9 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,22 +1,6 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" - -# ShiftAI Pre-push Hook - Intercept push for AI analysis and PR management -# Git pre-push hook passes: $1=remote_name, $2=remote_url - -# 🗑️ EARLY EXIT: Check for delete operations at shell level -if ps aux | grep -v grep | grep -q "git.*push.*--delete"; then - exit 0 -fi - + fi # Check command line arguments in current process tree -if pgrep -f "git.*push.*--delete" > /dev/null 2>&1; then - exit 0 -fi - -export GIT_PUSH_REMOTE_NAME="$1" -export GIT_PUSH_REMOTE_URL="$2" - -npx @deriv-com/shiftai-cli hook pre-push - + fi exit $? \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..04b5f707 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,211 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Commands + +### Development + +```bash +npm run bootstrap # Initial setup: install dependencies and build +npm run dev # Start development server +npm run build # Production build +npm run serve # Serve production build locally +``` + +### Testing + +```bash +npm test # Run all tests with coverage +npm run typecheck # Run TypeScript type checking +``` + +### Code Quality + +```bash +npm run lint # Lint JS/JSX/TS/TSX files +npm run lint:fix # Auto-fix linting issues +npm run format # Format code with Prettier +``` + +### Docusaurus + +```bash +npm run clear # Clear Docusaurus cache +npm run swizzle # Customize Docusaurus theme components +``` + +## Architecture Overview + +This is a **Docusaurus 3** application for Deriv's API documentation, featuring interactive API testing and token management. The backend team manages `/config/v3` via workflow (API schemas) — the frontend team should **not** modify this folder. + +### Key Features + +1. **API Explorer** (`/src/features/Apiexplorer/`) + + - Interactive playground for testing API endpoints in real-time + - Dynamically imports JSON schemas from `/config/v3/{endpoint}/` (send.json, receive.json, example.json) + - URL hash-based navigation for endpoint selection + - Uses `useDynamicImportJSON` hook for loading schemas and examples + +2. **Dashboard** (`/src/features/dashboard/`) + + - Tab-based interface for managing API tokens and applications + - Five tabs: MANAGE_TOKENS, REGISTER_APP, MANAGE_APPS, UPDATE_APP, REGISTER_TOKENS + - Token scopes management (read, trade, payments, trading_information, admin) + +3. **Authentication Flow** + + - OAuth2 integration via `@deriv-com/auth-client` + - Login → OAuth redirect → Callback page → Auto-authorize token + - Alternative: URL parameter authentication (`?acct1=xxx&token1=yyy`) + - Session storage for account persistence + +4. **WebSocket Layer** + - Singleton `ApiManager` wraps `@deriv/deriv-api` (DerivAPIBasic) + - Ping/pong keep-alive (12s interval) + - Auto-reconnect with exponential backoff (10 attempts) + - Typed requests/responses via `@deriv/api-types` + +### Context Hierarchy + +All contexts are nested in `/src/theme/Root.tsx`: + +``` +Root +├─ OfficialContentsProvider # Domain validation (official Deriv domains only) +├─ AuthProvider # User auth state, WebSocket connection, session storage +├─ PlaygroundProvider # API request/response history (max 5 items, FIFO) +├─ ApiTokenProvider # User's API tokens (watches is_authorized) +└─ AppManagerContextProvider # Registered applications, dashboard tabs +``` + +**Context Interdependencies:** + +- `ApiTokenProvider` and `AppManagerContextProvider` auto-fetch data when `AuthProvider.is_authorized` becomes true +- `PlaygroundProvider` stores responses from API requests (stateless history) + +### WebSocket Hooks + +**useWS** - For one-off API requests: + +- Returns: `{ send, data, full_response, is_loading, error, clear }` +- Auto-injects endpoint name into payload (unless `disableApiNameOnRequest` is true) +- Uses `apiManager.augmentedSend()` + +**useSubscription** - For streaming endpoints: + +- Returns: `{ subscribe, unsubscribe, is_subscribed, data, full_response }` +- Uses RxJS Observable pattern via `apiManager.augmentedSubscribe()` +- Manages subscription lifecycle + +### Environment Configuration + +**App IDs:** + +- Localhost: `35074` (default WebSocket: `ws.derivws.com`) +- Staging domains: `app_id=35075` +- Production domains: `app_id=35074` + +**Environment Handling:** + +- Multi-domain support: deriv.com, deriv.me, deriv.be (with staging variants) +- `getAppId()` and `getServerConfig()` utilities handle environment detection +- LocalStorage can override WebSocket/OAuth server URLs for testing + +## AI Code Generation Rules + +**CRITICAL:** All AI-generated code must be wrapped with `[AI]` and `[/AI]` markers using the appropriate comment syntax for the language. This is enforced by the ShiftAI pre-commit hook (`@deriv-com/shiftai-cli`). + +**JavaScript/TypeScript:** + +```javascript +function exampleFunction() { + return 'AI generated code'; +} +``` + +**HTML:** + +```html + +
AI generated HTML
+``` + +**CSS/SCSS:** + +```css +.ai-generated { + color: blue; +} +``` + +**Anti-patterns (NEVER do these):** + +- ❌ Do NOT nest `[AI]` markers inside existing AI blocks +- ❌ Do NOT add comments on the same line as markers: `// [AI] Updated Dashboard` +- ❌ Do NOT add AI markers to deleted/commented-out code + +The pre-commit hook automatically strips these markers before commit. See [.cursorrules](.cursorrules) for full details. + +## Testing + +**Test Environment:** `jsdom` with `ts-jest` + +**Custom Test Render:** + +```typescript +import { render } from '@site/src/test-utils'; // Wraps with all providers + router +``` + +**Coverage Exclusions:** + +- `src/configs/**` (WebSocket config) +- `src/pages/**` (Docusaurus pages - module naming issues) +- `src/theme/**` (Docusaurus theme - module naming issues) + +**Test File Locations:** + +- Adjacent `__tests__/` directories +- `*.test.tsx` files + +**Mocked Globals:** + +- `localStorage` / `sessionStorage` (jest-localstorage-mock) +- `window.location` (jest-location-mock) +- `ResizeObserver` (for Radix UI components) +- `window.matchMedia` (for responsive hooks) +- YAML parser (returns hardcoded endpoint list) + +## Git Hooks + +**Pre-commit:** + +1. Runs `lint-staged` (ESLint auto-fix on staged JS files) +2. Runs ShiftAI hook to detect and strip `[AI]` markers + +**Pre-push:** + +- Custom validation (incomplete script in repo) + +**Commit Messages:** + +- Enforced by `commitlint` (conventional commits format) + +## Key Utilities + +- **getAppId()**: Environment-based app ID selection +- **getServerConfig()**: WebSocket/OAuth server URLs (with LocalStorage override) +- **getAccountsFromSearchParams()**: Parses OAuth callback parameters +- **scopesObjectToArray() / scopesArrayToObject()**: Token scope conversion +- **formatTokenScope()**: Human-readable scope formatting +- **getTmbConfigUrl()**: Firebase remote config URL (production vs staging) + +## Important Notes + +- The `/config/v3` folder is managed by the backend team via CI/CD workflow — do not manually edit +- Each endpoint directory contains: `send.json` (request schema), `receive.json` (response schema), `example.json` (sample payload) +- Session storage keys: `login-accounts`, `current-login-account`, `user`, `user-accounts` +- TypeScript types are generated from `@deriv/api-types` package +- Docusaurus version: 3.3.2 (do not use Docusaurus v2 syntax) + diff --git a/package-lock.json b/package-lock.json index 34759a94..a649f522 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3764,7 +3764,6 @@ "resolved": "https://registry.npmjs.org/@deriv-com/shiftai-cli/-/shiftai-cli-1.0.12.tgz", "integrity": "sha512-OIG8sgZS5faqzbyPgBTR9bRpLV2HznRlF2CUutbHs25554pS+QM1I4dtOZV+sPbV20or53ecvrmw+AcMIfgSXA==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/rest": "^20.0.0", "boxen": "^5.1.2", @@ -3796,7 +3795,6 @@ "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -3819,7 +3817,6 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -3832,7 +3829,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -3841,15 +3837,13 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@deriv-com/shiftai-cli/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3870,7 +3864,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -3880,7 +3873,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3896,7 +3888,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3911,7 +3902,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3924,7 +3914,6 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -3937,7 +3926,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5322,14 +5310,13 @@ "license": "BSD-3-Clause" }, "node_modules/@inquirer/external-editor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", - "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, - "license": "MIT", "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.6.3" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { "node": ">=18" @@ -5344,16 +5331,19 @@ } }, "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/@isaacs/cliui": { @@ -5992,7 +5982,6 @@ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1" } @@ -6001,8 +5990,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", @@ -6795,7 +6783,6 @@ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/core": "^5.0.2", "@octokit/plugin-paginate-rest": "11.4.4-cjs.2", @@ -6811,7 +6798,6 @@ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 18" } @@ -6821,7 +6807,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -6840,7 +6825,6 @@ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" @@ -6854,7 +6838,6 @@ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/request": "^8.4.1", "@octokit/types": "^13.0.0", @@ -6868,15 +6851,13 @@ "version": "24.2.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@octokit/rest/node_modules/@octokit/plugin-paginate-rest": { "version": "11.4.4-cjs.2", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/types": "^13.7.0" }, @@ -6892,7 +6873,6 @@ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 18" }, @@ -6905,7 +6885,6 @@ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/types": "^13.8.0" }, @@ -6921,7 +6900,6 @@ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/endpoint": "^9.0.6", "@octokit/request-error": "^5.1.1", @@ -6937,7 +6915,6 @@ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", @@ -6952,7 +6929,6 @@ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, - "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" } @@ -6961,15 +6937,13 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/@octokit/rest/node_modules/universal-user-agent": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/@octokit/types": { "version": "14.1.0", @@ -10191,8 +10165,7 @@ "version": "1.4.6", "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/tough-cookie": { "version": "4.0.5", @@ -11028,8 +11001,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/arg": { "version": "5.0.2", @@ -11571,8 +11543,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/batch": { "version": "0.6.1", @@ -11612,7 +11583,6 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -11624,7 +11594,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11819,7 +11788,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -12139,11 +12107,10 @@ } }, "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", - "dev": true, - "license": "MIT" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true }, "node_modules/cheerio": { "version": "1.0.0-rc.12", @@ -12443,7 +12410,6 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -12517,7 +12483,6 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, - "license": "ISC", "engines": { "node": ">= 10" } @@ -12533,7 +12498,6 @@ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "dev": true, - "license": "MIT", "dependencies": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -12548,7 +12512,6 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -12567,7 +12530,6 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -12580,7 +12542,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12590,7 +12551,6 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -12603,7 +12563,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -12673,7 +12632,6 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } @@ -14210,7 +14168,6 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -14293,8 +14250,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/dequal": { "version": "2.0.3", @@ -14629,7 +14585,6 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -14757,7 +14712,6 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -16101,16 +16055,27 @@ } }, "node_modules/figlet": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.8.2.tgz", - "integrity": "sha512-iPCpE9B/rOcjewIzDnagP9F2eySzGeHReX8WlrZQJkqFBk2wvq8gY0c6U6Hd2y9HnX1LQcYSeP7aEHoPt6sVKQ==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.9.4.tgz", + "integrity": "sha512-uN6QE+TrzTAHC1IWTyrc4FfGo2KH/82J8Jl1tyKB7+z5DBit/m3D++Iu5lg91qJMnQQ3vpJrj5gxcK/pk4R9tQ==", "dev": true, - "license": "MIT", + "dependencies": { + "commander": "^14.0.0" + }, "bin": { "figlet": "bin/index.js" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 17.0.0" + } + }, + "node_modules/figlet/node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "dev": true, + "engines": { + "node": ">=20" } }, "node_modules/figures": { @@ -17086,7 +17051,6 @@ "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-2.0.2.tgz", "integrity": "sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "tinygradient": "^1.1.5" @@ -17952,8 +17916,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.2", @@ -18201,7 +18164,6 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", @@ -18228,7 +18190,6 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -18240,15 +18201,13 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/inquirer/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -18258,7 +18217,6 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -18274,7 +18232,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -18284,7 +18241,6 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -18298,7 +18254,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -18313,7 +18268,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -18786,7 +18740,6 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -21223,7 +21176,6 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -21240,7 +21192,6 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -24104,8 +24055,7 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/mz": { "version": "2.7.0", @@ -24213,7 +24163,6 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -24233,22 +24182,19 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" + "dev": true }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -26642,7 +26588,6 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -26666,7 +26611,6 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -26679,7 +26623,6 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -26692,7 +26635,6 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -29032,7 +28974,6 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -29129,7 +29070,6 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -30691,7 +30631,6 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -32123,11 +32062,10 @@ } }, "node_modules/simple-git": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz", - "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==", + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", "dev": true, - "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -32810,7 +32748,6 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -33397,15 +33334,13 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/tinygradient": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", "dev": true, - "license": "MIT", "dependencies": { "@types/tinycolor2": "^1.4.0", "tinycolor2": "^1.0.0" @@ -34632,7 +34567,6 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "dependencies": { "defaults": "^1.0.3" }