├── .adr-dir ├── .editorconfig ├── .gitattributes ├── .github ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── dependabot.yml ├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── LICENSE ├── README.md └── infra ├── .gitignore ├── Pulumi.yaml ├── kind-config.yaml ├── package.json ├── src ├── config.ts ├── index.ts ├── modules │ ├── 00-primitives │ │ └── mod.ts │ ├── 01-load-balancer │ │ ├── metallb-manifest.yaml │ │ └── mod.ts │ ├── 02-istio │ │ ├── istio-manifest.yaml │ │ └── mod.ts │ ├── 03-gateway │ │ ├── gateway-api-crds-manifest.yaml │ │ └── mod.ts │ ├── 04-argowf │ │ └── mod.ts │ ├── 05-argocd │ │ └── mod.ts │ └── 06-monitoring │ │ └── mod.ts └── targets.ts ├── tsconfig.json └── yarn.lock /.adr-dir: -------------------------------------------------------------------------------- 1 | docs/adr 2 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | # editorconfig-tools is unable to ignore longs strings or urls 14 | max_line_length = off 15 | 16 | [{*.md,*.mdx,*.mdoc}] 17 | trim_trailing_whitespace = false 18 | 19 | [{Makefile,go.mod,go.sum,*.go,.gitmodules}] 20 | indent_style = tab 21 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior as unix line endings for all text files, 2 | # in case people don't have core.autocrlf set. 3 | * text=auto eol=lf 4 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @eser 2 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | See [cool/directives](https://github.com/eser/cool/tree/dev/directives) for our 4 | sets of rules and recommendations we follow. 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: Bug report 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug**\ 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce**\ 14 | Steps to reproduce the behavior: 15 | 16 | 1. Go to '...' 17 | 2. Click on '....' 18 | 3. Scroll down to '....' 19 | 4. See error 20 | 21 | **Expected behavior**\ 22 | A clear and concise description of what you expected to happen. 23 | 24 | **Screenshots**\ 25 | If applicable, add screenshots to help explain your problem. 26 | 27 | **Desktop (please complete the following information):** 28 | 29 | - OS: [e.g. iOS] 30 | - Browser [e.g. chrome, safari] 31 | - Version [e.g. 22] 32 | 33 | **Smartphone (please complete the following information):** 34 | 35 | - Device: [e.g. iPhone6] 36 | - OS: [e.g. iOS8.1] 37 | - Browser [e.g. stock browser, safari] 38 | - Version [e.g. 22] 39 | 40 | **Additional context**\ 41 | Add any other context about the problem here. 42 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea or voice a concern 4 | title: 'Feature request: ' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.**\ 11 | A clear and concise description of what the problem is. Ex. I'm always 12 | frustrated when [...] 13 | 14 | **Describe the solution you'd like**\ 15 | A clear and concise description of what you want to happen. 16 | 17 | **Describe alternatives you've considered**\ 18 | A clear and concise description of any alternative solutions or features you've 19 | considered. 20 | 21 | **Additional context**\ 22 | Add any other context or screenshots about the feature request here. 23 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | - [x] My submissions follows the **Submission Rules** 2 | - [x] I have read and accepted the **Terms and Conditions** 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | # Check for updates to GitHub Actions every week 8 | interval: "weekly" 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # OS-specific files 4 | .DS_Store 5 | Thumbs.db 6 | 7 | # Editor metadata 8 | .vscode/* 9 | !.vscode/extensions.json 10 | !.vscode/launch.json 11 | !.vscode/settings.json 12 | .idea/* 13 | 14 | # local API keys and secrets 15 | .env.local 16 | .env.*.local 17 | 18 | # sensitive files 19 | *.key 20 | *.pem 21 | *.swp 22 | 23 | # Binaries for programs and plugins 24 | *.exe 25 | *.exe~ 26 | *.dll 27 | *.so 28 | *.dylib 29 | 30 | # Test binaries, coverage and testing tool outputs 31 | *.test 32 | *.out 33 | cov_profile.lcov 34 | 35 | # Dependency directories (remove the comment below to include it) 36 | # vendor/ 37 | 38 | # Build output and temporary files 39 | __debug_bin* 40 | build-errors.log 41 | tmp/* 42 | !tmp/.gitkeep 43 | 44 | # Todos 45 | TODOS 46 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "chdsbd.github-code-owners" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "yaml.schemas": { 3 | "https://json.schemastore.org/github-workflow.json": "./.github/workflows/*.yml" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2023-present Eser Ozvataf and other contributors. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Project KuberNeXT 2 | 3 | KuberNeXT is a powerful tool designed to deploy a meticulously crafted DevOps stack in minutes, whether on a remote server or your local development environment. This stack includes fully-featured tools for GitOps, monitoring, metrics, and workflows—just like the robust infrastructure you'd find in a leading software company. 4 | 5 | ## Infrastructure 6 | 7 | This project uses [Infrastructure as Code](./infra/) with Pulumi. Current stack consists of: 8 | 9 | - [Kubernetes](https://kubernetes.io/) for container orchestration 10 | - [kind](https://kind.sigs.k8s.io/) for creating local Kubernetes cluster(s) 11 | - [Pulumi](https://www.pulumi.com/) for infrastructure provisioning 12 | - [Argo Workflows](https://argoproj.github.io/workflows) for worker tasks 13 | - [ArgoCD](https://argoproj.github.io/cd) for GitOps 14 | - [Prometheus](https://prometheus.io/) for metrics 15 | - [Grafana](https://grafana.com/) for monitoring 16 | - [Istio](https://istio.io/) for service mesh 17 | - [MetalLB](https://metallb.universe.tf/) for load balancer 18 | 19 | ## Deployment 20 | 21 | To deploy your infrastructure, follow the steps below. 22 | 23 | ### Prerequisites 24 | 25 | 1. [Install kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation) for local Kubernetes cluster 26 | 2. [Install Pulumi](https://www.pulumi.com/docs/get-started/install/) 27 | 3. Install NPM Dependencies 28 | 4. [Install `kubectl`](https://kubernetes.io/docs/tasks/tools/install-kubectl/) 29 | 30 | ### Steps 31 | 32 | After cloning this repo, run these commands from the working directory: 33 | 34 | 35 | #### kind 36 | 37 | ```bash 38 | $ kind create cluster --name local --config kind-config.yaml 39 | ``` 40 | 41 | #### Pulumi 42 | 43 | 1. Login to pulumi: 44 | 45 | ```bash 46 | $ pulumi login --local 47 | ``` 48 | 49 | 2. Create a new stack: 50 | 51 | ```bash 52 | $ pulumi stack init production 53 | ``` 54 | 55 | 2. Execute the Pulumi program to create or update your infra: 56 | 57 | ```bash 58 | $ pulumi up --stack production 59 | ``` 60 | 61 | #### Argo CD 62 | 63 | 1. Visit `http://localhost` 64 | 2. Get password with 65 | `kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d` 66 | command 67 | 3. Login as admin with the password 68 | 69 | #### Argo Workflow 70 | 71 | 1. Argo port forward 72 | 73 | ```bash 74 | $ kubectl -n argowf port-forward deployment/argo-server 2746:2746 75 | ``` 76 | 77 | ### License 78 | 79 | This project is licensed under the Apache 2.0 License. For further details, 80 | please see the [LICENSE](LICENSE) file. 81 | 82 | ### To support the project... 83 | 84 | [Visit my GitHub Sponsors profile at github.com/sponsors/eser](https://github.com/sponsors/eser) 85 | -------------------------------------------------------------------------------- /infra/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # Dependency directories 4 | /node_modules/ 5 | 6 | # Pulumi 7 | .pulumi/* 8 | Pulumi.*.yaml 9 | -------------------------------------------------------------------------------- /infra/Pulumi.yaml: -------------------------------------------------------------------------------- 1 | name: kubernext 2 | runtime: nodejs 3 | description: Next generation of our infrastructure 4 | 5 | config: 6 | kubernext:installLoadBalancer: "true" 7 | kubernext:loadBalancerAddressPool: "192.168.1.240-192.168.1.250" 8 | kubernext:domain: "eser.land" 9 | kubernext:privateKey: "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2QUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktZd2dnU2lBZ0VBQW9JQkFRQ2NjNy8wZ3kxa1JDWjcKWEpoRmIzcUpWSHRwZjErWTNsL3RxL1BRRC9ITUt5bEdMZW5OOXZUK25SRmNXdnZGVW1NWGhvOXBOYUhvZWtrSApnbEN4RmF5aXZaQkRhVThqeVhnaC9US09qaHY0NEdQMEN2UE9LcnlPSU1hYWw4ZUJXc0lwZ0swVHljVWRUYlMvCmcwOHRUK2NnWUlYS255dCtqOHVwK05hNW9Zdkc5QTV5ZWNwM2s0MExvSGRsVzZXQ1phdGxyTjRhZ2lGeWtuYTQKZTNKUkF4WVpudHpjV2tvZS90UHN6Q1FwMjlXbFhrZDJXUHRtV0hzdDZKTUJJdDI4Z0FtWDRMbXRmRTd0WDZFcQpxNVNDUnF4OElUUXo3VUxlYXVlcGdOUkRxcjhmTE9YcnRmZ1pZWW5rWUc5MS9PM1NLVjdNZ3lNdCs4OUpTMGRRCnpkN1RHN0hYQWdNQkFBRUNnZ0VBUjlWRGhOWTM0S29EeXk5RUFObUM5d3Z4a0FvNkQ5dkdTcjloTmg0a0JIeXEKdWp5NWRXWldyWkxiVmo2MkM2N2NyWUFNVjUrVzQ4RkZ4NnRYTmo5LzRNYk50bzNqRnNqWm5pMTlhWU9wSnplTAozUkNzU1hSSTE2OEgwUkl3T1YyOCtVWko4V1I2V3c2REYwMkliSU1iMlR0SUlyUzdTU1JudS9aelRJNzJPUlc4Cmo2U0pSeGlhVWZmMXFVakJhUFBEZHlmdUczNU03Q2tSZ1g4RGVnN1gycGFKSTJaVk16V1NDbmpaTE55cDBSbXEKZUFtRlloekQ4c2E5YjJvSkNEYzRWNytldDd3Z21wSTJZNk9lZ2dJMEc4blR6UFdpNFplbXB0RnQwV0pUTDVNYwpYZEJ2VXlMRDdWYzBzUkJLTHdFY1JvbmRrUzc4Mkd6aWhaQllZYVFwYlFLQmdRRFNJVTMzK3J4YTlmNG1FUlJnCjg3WCs4WVh5a3ZUV1dtK3UwZWpMYWp0QVBjSUNnVUw0Rnk4OHNpa09XOHpsMmRadEhPcS8yQ3RxVlBDenllS3gKQjRramsxWHBVZ21peDA2OEFoKzJUbkRuNEZXUFRQa01TNVNRbFJKTHFLWDkxeHl3MmxLZUUzZS9nTytGSXRFNgpMcFRielloR0JwcFZucTgrOGp2WCtaSHA0d0tCZ1FDK21zTDl6SkFQT2wwUWJTZlFOR2p0eDlFOHNHWGxJVlV0CnlzN1RzWm5IcGJtZ0Fhdm0yYjFVeG5scTZOcklmZHNXVFJnMVFScVM2WlB2VDU4RHF3TTRxNFhIRTVzek9qNVYKdnZIaDFxTFBjWEw0NHk1c2kxWmxQK1dTWHFOd2YyN1ZsMXdyaFFOR1Z3dFZYK1RpMHdNYTBYOHFiYmFUeE1vMgpkL20yNVJIcWZRS0JnR3hFT3E4RllwMGZWK1ozTUYvUDBqcmNhSjZXZDA0bVpKclhqckdZTjVVZS9PSmJoWXpjCkxUdUJ0RU93cXY3VzRYTnd6Y2N3OHhXalZDM2VYRTNJU3pHb1RVQ2RRMWU2aDJlNVZHdVRPUHRRQytWOHpHazQKWEFDdXZqRjdZS05NZlh6bDBHR2dPRGZVa0JTeDNzbXlqSUpBQVBITG55TjBVbWtGV0M0c2FiRHZBb0dBSEtRMAoyTjU4WjAxbDNxb0lhWWoybTRTRE5KTnRQRmtkNjV1bUtMbHZXa2pVOCs1TVhvd3BueXVUNHpUS2E0WTkvY1BuCjkxaXBIWnByMkhJbWV1NmZ0VXhROWZGRVNSWmZkNU1SMWRYaThUa2pCYk5kcm9IaG9hVlFZZ1pHbVFrTkpwdHcKQmpvZW05dElvTE9nT1ZWc0NnT2hFRWNjUUdnNTJxVjhxTGNUVWlFQ2dZQWUrWllpTHo3Szd2enNUanpwQm5QbQpJQ3JTR0MrMWlaeHBtQUxLaTB1TjMyaUFJdCtBRVI2S1JzazVsT0U2OG4velUwamZnRk9KYXloN09Da0R4eVYzCkdzblZXa0t6QzZjL0U4ZU5ISWxWTHhVZisvT2JJaThPUEhUUFFLcEdPYVJqYk5udThzLzAvTUdERkNhVFJGRHQKbFZxU2hxdUxESVgvc2pzRFlMeU9HQT09Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K" 10 | kubernext:publicKey: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURSekNDQWkrZ0F3SUJBZ0lVSEl2UExucHFtbkk4aHhDWHhrNmtXYmhsTkZZd0RRWUpLb1pJaHZjTkFRRUwKQlFBd016RVhNQlVHQTFVRUNnd09TM1ZpWlhKT1pWaFVJRWx1WXk0eEdEQVdCZ05WQkFNTUQydDFZbVZ5Ym1WNApkQzVzYjJOaGJEQWVGdzB5TXpFeU1qWXhOakF4TkRWYUZ3MHlOREV5TWpVeE5qQXhORFZhTURNeEZ6QVZCZ05WCkJBb01Ea3QxWW1WeVRtVllWQ0JKYm1NdU1SZ3dGZ1lEVlFRRERBOXJkV0psY201bGVIUXViRzlqWVd3d2dnRWkKTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDY2M3LzBneTFrUkNaN1hKaEZiM3FKVkh0cApmMStZM2wvdHEvUFFEL0hNS3lsR0xlbk45dlQrblJGY1d2dkZVbU1YaG85cE5hSG9la2tIZ2xDeEZheWl2WkJECmFVOGp5WGdoL1RLT2podjQ0R1AwQ3ZQT0tyeU9JTWFhbDhlQldzSXBnSzBUeWNVZFRiUy9nMDh0VCtjZ1lJWEsKbnl0K2o4dXArTmE1b1l2RzlBNXllY3AzazQwTG9IZGxXNldDWmF0bHJONGFnaUZ5a25hNGUzSlJBeFlabnR6YwpXa29lL3RQc3pDUXAyOVdsWGtkMldQdG1XSHN0NkpNQkl0MjhnQW1YNExtdGZFN3RYNkVxcTVTQ1JxeDhJVFF6CjdVTGVhdWVwZ05SRHFyOGZMT1hydGZnWllZbmtZRzkxL08zU0tWN01neU10Kzg5SlMwZFF6ZDdURzdIWEFnTUIKQUFHalV6QlJNQjBHQTFVZERnUVdCQlFOa2dPMzNFeWVwQ0dZT2loYW0wbDZmNXZCYkRBZkJnTlZIU01FR0RBVwpnQlFOa2dPMzNFeWVwQ0dZT2loYW0wbDZmNXZCYkRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUEwR0NTcUdTSWIzCkRRRUJDd1VBQTRJQkFRQW91MVVIeWpjQjgxaWJ1ajdRSWdyRUMxbTJNR2hvSTJEZlB1OTU0MktsK0xLUWNhNEUKekNLOGY3MmNDeW9EWFcvOXBVNkROQWFpSFZ6bEJxUFhpS2EvbzYzdzJQa2M4dnF5ZGRSdlc5Mi9aUEQzRTJFaApLQUFzTmRMS0tDWDBxSmJnSmxWaERpY0s4a0pIUVFtSnlCSVl4cXpwOUYwS3AydjZYTXpFY2c0amtkVkR0Q3VDCkovOFlTZjF5N1ova20rZmhrRlQ3SFl4dlZjQjByUWUwVjlGSlA1eWVsMGVBMHcxVmhCOEJMMGFReXBJOS8xZVAKQVZDU1ZCdWl0WjRaaGFOU3dCQ3RYK3FkdlF0Q1picUZHSEpTMTdzdGhjWmFMSjU5M3lPNlJmMEw1K1dTQVoxaQovVU9OM1lLS1RQWE5OYnk5WlpxS1YrV3lNbzZrTEFqNGdhZXIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" 11 | 12 | kubernext:grafanaUsername: "grafana" 13 | kubernext:grafanaPassword: "grafana" 14 | -------------------------------------------------------------------------------- /infra/kind-config.yaml: -------------------------------------------------------------------------------- 1 | kind: Cluster 2 | apiVersion: kind.x-k8s.io/v1alpha4 3 | networking: 4 | podSubnet: "10.244.0.0/16" 5 | serviceSubnet: "10.96.0.0/16" 6 | nodes: 7 | - role: control-plane 8 | extraPortMappings: 9 | - containerPort: 80 10 | hostPort: 80 11 | protocol: TCP 12 | - containerPort: 443 13 | hostPort: 443 14 | protocol: TCP 15 | -------------------------------------------------------------------------------- /infra/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kubernext-infra", 3 | "main": "./src/index.ts", 4 | "devDependencies": { 5 | "@types/node": "^22.10.7" 6 | }, 7 | "dependencies": { 8 | "@pulumi/kubernetes": "^4.21.0", 9 | "@pulumi/pulumi": "^3.146.0", 10 | "@pulumi/tls": "^5.1.0" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /infra/src/config.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as pulumi from "@pulumi/pulumi"; 3 | 4 | export const cwd = process.cwd(); 5 | 6 | export const instance = new pulumi.Config(); 7 | 8 | export const installLoadBalancer = instance.getBoolean("installLoadBalancer"); 9 | export const loadBalancerAddressPool = instance.get("loadBalancerAddressPool"); 10 | 11 | export const domain = instance.require("domain"); 12 | 13 | // grafana 14 | 15 | export const grafanaUsername = instance.require("grafanaUsername"); 16 | export const grafanaPassword = instance.require("grafanaPassword"); 17 | 18 | // keys 19 | 20 | export const privateKey = instance.get("privateKey"); 21 | export const publicKey = instance.get("publicKey"); 22 | -------------------------------------------------------------------------------- /infra/src/index.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import "./modules/00-primitives/mod"; 3 | import "./modules/01-load-balancer/mod"; 4 | import "./modules/02-istio/mod"; 5 | import "./modules/03-gateway/mod"; 6 | import "./modules/04-argowf/mod"; 7 | import "./modules/05-argocd/mod"; 8 | import "./modules/06-monitoring/mod"; 9 | -------------------------------------------------------------------------------- /infra/src/modules/00-primitives/mod.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as k8s from "@pulumi/kubernetes"; 3 | import * as targets from "../../targets"; 4 | 5 | // namespaces 6 | 7 | const defaultNsName = "default"; 8 | export const defaultNs = k8s.core.v1.Namespace.get( 9 | "default-namespace", 10 | defaultNsName, 11 | { provider: targets.k8sProvider }, 12 | ); 13 | -------------------------------------------------------------------------------- /infra/src/modules/01-load-balancer/metallb-manifest.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | pod-security.kubernetes.io/audit: privileged 6 | pod-security.kubernetes.io/enforce: privileged 7 | pod-security.kubernetes.io/warn: privileged 8 | name: metallb-system 9 | --- 10 | apiVersion: apiextensions.k8s.io/v1 11 | kind: CustomResourceDefinition 12 | metadata: 13 | annotations: 14 | controller-gen.kubebuilder.io/version: v0.16.3 15 | name: bfdprofiles.metallb.io 16 | spec: 17 | group: metallb.io 18 | names: 19 | kind: BFDProfile 20 | listKind: BFDProfileList 21 | plural: bfdprofiles 22 | singular: bfdprofile 23 | scope: Namespaced 24 | versions: 25 | - additionalPrinterColumns: 26 | - jsonPath: .spec.passiveMode 27 | name: Passive Mode 28 | type: boolean 29 | - jsonPath: .spec.transmitInterval 30 | name: Transmit Interval 31 | type: integer 32 | - jsonPath: .spec.receiveInterval 33 | name: Receive Interval 34 | type: integer 35 | - jsonPath: .spec.detectMultiplier 36 | name: Multiplier 37 | type: integer 38 | name: v1beta1 39 | schema: 40 | openAPIV3Schema: 41 | description: |- 42 | BFDProfile represents the settings of the bfd session that can be 43 | optionally associated with a BGP session. 44 | properties: 45 | apiVersion: 46 | description: |- 47 | APIVersion defines the versioned schema of this representation of an object. 48 | Servers should convert recognized schemas to the latest internal value, and 49 | may reject unrecognized values. 50 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 51 | type: string 52 | kind: 53 | description: |- 54 | Kind is a string value representing the REST resource this object represents. 55 | Servers may infer this from the endpoint the client submits requests to. 56 | Cannot be updated. 57 | In CamelCase. 58 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 59 | type: string 60 | metadata: 61 | type: object 62 | spec: 63 | description: BFDProfileSpec defines the desired state of BFDProfile. 64 | properties: 65 | detectMultiplier: 66 | description: |- 67 | Configures the detection multiplier to determine 68 | packet loss. The remote transmission interval will be multiplied 69 | by this value to determine the connection loss detection timer. 70 | format: int32 71 | maximum: 255 72 | minimum: 2 73 | type: integer 74 | echoInterval: 75 | description: |- 76 | Configures the minimal echo receive transmission 77 | interval that this system is capable of handling in milliseconds. 78 | Defaults to 50ms 79 | format: int32 80 | maximum: 60000 81 | minimum: 10 82 | type: integer 83 | echoMode: 84 | description: |- 85 | Enables or disables the echo transmission mode. 86 | This mode is disabled by default, and not supported on multi 87 | hops setups. 88 | type: boolean 89 | minimumTtl: 90 | description: |- 91 | For multi hop sessions only: configure the minimum 92 | expected TTL for an incoming BFD control packet. 93 | format: int32 94 | maximum: 254 95 | minimum: 1 96 | type: integer 97 | passiveMode: 98 | description: |- 99 | Mark session as passive: a passive session will not 100 | attempt to start the connection and will wait for control packets 101 | from peer before it begins replying. 102 | type: boolean 103 | receiveInterval: 104 | description: |- 105 | The minimum interval that this system is capable of 106 | receiving control packets in milliseconds. 107 | Defaults to 300ms. 108 | format: int32 109 | maximum: 60000 110 | minimum: 10 111 | type: integer 112 | transmitInterval: 113 | description: |- 114 | The minimum transmission interval (less jitter) 115 | that this system wants to use to send BFD control packets in 116 | milliseconds. Defaults to 300ms 117 | format: int32 118 | maximum: 60000 119 | minimum: 10 120 | type: integer 121 | type: object 122 | status: 123 | description: BFDProfileStatus defines the observed state of BFDProfile. 124 | type: object 125 | type: object 126 | served: true 127 | storage: true 128 | subresources: 129 | status: {} 130 | --- 131 | apiVersion: apiextensions.k8s.io/v1 132 | kind: CustomResourceDefinition 133 | metadata: 134 | annotations: 135 | controller-gen.kubebuilder.io/version: v0.16.3 136 | name: bgpadvertisements.metallb.io 137 | spec: 138 | group: metallb.io 139 | names: 140 | kind: BGPAdvertisement 141 | listKind: BGPAdvertisementList 142 | plural: bgpadvertisements 143 | singular: bgpadvertisement 144 | scope: Namespaced 145 | versions: 146 | - additionalPrinterColumns: 147 | - jsonPath: .spec.ipAddressPools 148 | name: IPAddressPools 149 | type: string 150 | - jsonPath: .spec.ipAddressPoolSelectors 151 | name: IPAddressPool Selectors 152 | type: string 153 | - jsonPath: .spec.peers 154 | name: Peers 155 | type: string 156 | - jsonPath: .spec.nodeSelectors 157 | name: Node Selectors 158 | priority: 10 159 | type: string 160 | name: v1beta1 161 | schema: 162 | openAPIV3Schema: 163 | description: |- 164 | BGPAdvertisement allows to advertise the IPs coming 165 | from the selected IPAddressPools via BGP, setting the parameters of the 166 | BGP Advertisement. 167 | properties: 168 | apiVersion: 169 | description: |- 170 | APIVersion defines the versioned schema of this representation of an object. 171 | Servers should convert recognized schemas to the latest internal value, and 172 | may reject unrecognized values. 173 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 174 | type: string 175 | kind: 176 | description: |- 177 | Kind is a string value representing the REST resource this object represents. 178 | Servers may infer this from the endpoint the client submits requests to. 179 | Cannot be updated. 180 | In CamelCase. 181 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 182 | type: string 183 | metadata: 184 | type: object 185 | spec: 186 | description: BGPAdvertisementSpec defines the desired state of BGPAdvertisement. 187 | properties: 188 | aggregationLength: 189 | default: 32 190 | description: The aggregation-length advertisement option lets you 191 | “roll up” the /32s into a larger prefix. Defaults to 32. Works for 192 | IPv4 addresses. 193 | format: int32 194 | minimum: 1 195 | type: integer 196 | aggregationLengthV6: 197 | default: 128 198 | description: The aggregation-length advertisement option lets you 199 | “roll up” the /128s into a larger prefix. Defaults to 128. Works 200 | for IPv6 addresses. 201 | format: int32 202 | type: integer 203 | communities: 204 | description: |- 205 | The BGP communities to be associated with the announcement. Each item can be a standard community of the 206 | form 1234:1234, a large community of the form large:1234:1234:1234 or the name of an alias defined in the 207 | Community CRD. 208 | items: 209 | type: string 210 | type: array 211 | ipAddressPoolSelectors: 212 | description: |- 213 | A selector for the IPAddressPools which would get advertised via this advertisement. 214 | If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools. 215 | items: 216 | description: |- 217 | A label selector is a label query over a set of resources. The result of matchLabels and 218 | matchExpressions are ANDed. An empty label selector matches all objects. A null 219 | label selector matches no objects. 220 | properties: 221 | matchExpressions: 222 | description: matchExpressions is a list of label selector requirements. 223 | The requirements are ANDed. 224 | items: 225 | description: |- 226 | A label selector requirement is a selector that contains values, a key, and an operator that 227 | relates the key and values. 228 | properties: 229 | key: 230 | description: key is the label key that the selector applies 231 | to. 232 | type: string 233 | operator: 234 | description: |- 235 | operator represents a key's relationship to a set of values. 236 | Valid operators are In, NotIn, Exists and DoesNotExist. 237 | type: string 238 | values: 239 | description: |- 240 | values is an array of string values. If the operator is In or NotIn, 241 | the values array must be non-empty. If the operator is Exists or DoesNotExist, 242 | the values array must be empty. This array is replaced during a strategic 243 | merge patch. 244 | items: 245 | type: string 246 | type: array 247 | x-kubernetes-list-type: atomic 248 | required: 249 | - key 250 | - operator 251 | type: object 252 | type: array 253 | x-kubernetes-list-type: atomic 254 | matchLabels: 255 | additionalProperties: 256 | type: string 257 | description: |- 258 | matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels 259 | map is equivalent to an element of matchExpressions, whose key field is "key", the 260 | operator is "In", and the values array contains only "value". The requirements are ANDed. 261 | type: object 262 | type: object 263 | x-kubernetes-map-type: atomic 264 | type: array 265 | ipAddressPools: 266 | description: The list of IPAddressPools to advertise via this advertisement, 267 | selected by name. 268 | items: 269 | type: string 270 | type: array 271 | localPref: 272 | description: |- 273 | The BGP LOCAL_PREF attribute which is used by BGP best path algorithm, 274 | Path with higher localpref is preferred over one with lower localpref. 275 | format: int32 276 | type: integer 277 | nodeSelectors: 278 | description: NodeSelectors allows to limit the nodes to announce as 279 | next hops for the LoadBalancer IP. When empty, all the nodes having are 280 | announced as next hops. 281 | items: 282 | description: |- 283 | A label selector is a label query over a set of resources. The result of matchLabels and 284 | matchExpressions are ANDed. An empty label selector matches all objects. A null 285 | label selector matches no objects. 286 | properties: 287 | matchExpressions: 288 | description: matchExpressions is a list of label selector requirements. 289 | The requirements are ANDed. 290 | items: 291 | description: |- 292 | A label selector requirement is a selector that contains values, a key, and an operator that 293 | relates the key and values. 294 | properties: 295 | key: 296 | description: key is the label key that the selector applies 297 | to. 298 | type: string 299 | operator: 300 | description: |- 301 | operator represents a key's relationship to a set of values. 302 | Valid operators are In, NotIn, Exists and DoesNotExist. 303 | type: string 304 | values: 305 | description: |- 306 | values is an array of string values. If the operator is In or NotIn, 307 | the values array must be non-empty. If the operator is Exists or DoesNotExist, 308 | the values array must be empty. This array is replaced during a strategic 309 | merge patch. 310 | items: 311 | type: string 312 | type: array 313 | x-kubernetes-list-type: atomic 314 | required: 315 | - key 316 | - operator 317 | type: object 318 | type: array 319 | x-kubernetes-list-type: atomic 320 | matchLabels: 321 | additionalProperties: 322 | type: string 323 | description: |- 324 | matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels 325 | map is equivalent to an element of matchExpressions, whose key field is "key", the 326 | operator is "In", and the values array contains only "value". The requirements are ANDed. 327 | type: object 328 | type: object 329 | x-kubernetes-map-type: atomic 330 | type: array 331 | peers: 332 | description: |- 333 | Peers limits the bgppeer to advertise the ips of the selected pools to. 334 | When empty, the loadbalancer IP is announced to all the BGPPeers configured. 335 | items: 336 | type: string 337 | type: array 338 | type: object 339 | status: 340 | description: BGPAdvertisementStatus defines the observed state of BGPAdvertisement. 341 | type: object 342 | type: object 343 | served: true 344 | storage: true 345 | subresources: 346 | status: {} 347 | --- 348 | apiVersion: apiextensions.k8s.io/v1 349 | kind: CustomResourceDefinition 350 | metadata: 351 | annotations: 352 | controller-gen.kubebuilder.io/version: v0.16.3 353 | name: bgppeers.metallb.io 354 | spec: 355 | conversion: 356 | strategy: Webhook 357 | webhook: 358 | clientConfig: 359 | caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlGWlRDQ0EwMmdBd0lCQWdJVU5GRW1XcTM3MVpKdGkrMmlSQzk1WmpBV1MxZ3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3UWpFTE1Ba0dBMVVFQmhNQ1dGZ3hGVEFUQmdOVkJBY01ERVJsWm1GMWJIUWdRMmwwZVRFY01Cb0dBMVVFDQpDZ3dUUkdWbVlYVnNkQ0JEYjIxd1lXNTVJRXgwWkRBZUZ3MHlNakEzTVRrd09UTXlNek5hRncweU1qQTRNVGd3DQpPVE15TXpOYU1FSXhDekFKQmdOVkJBWVRBbGhZTVJVd0V3WURWUVFIREF4RVpXWmhkV3gwSUVOcGRIa3hIREFhDQpCZ05WQkFvTUUwUmxabUYxYkhRZ1EyOXRjR0Z1ZVNCTWRHUXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDDQpEd0F3Z2dJS0FvSUNBUUNxVFpxMWZRcC9vYkdlenhES0o3OVB3Ny94azJwellualNzMlkzb1ZYSm5sRmM4YjVlDQpma2ZZQnY2bndscW1keW5PL2phWFBaQmRQSS82aFdOUDBkdVhadEtWU0NCUUpyZzEyOGNXb3F0MGNTN3pLb1VpDQpvcU1tQ0QvRXVBeFFNZjhRZDF2c1gvVllkZ0poVTZBRXJLZEpIaXpFOUJtUkNkTDBGMW1OVW55Rk82UnRtWFZUDQpidkxsTDVYeTc2R0FaQVBLOFB4aVlDa0NtbDdxN0VnTWNiOXlLWldCYmlxQ3VkTXE5TGJLNmdKNzF6YkZnSXV4DQo1L1pXK2JraTB2RlplWk9ZODUxb1psckFUNzJvMDI4NHNTWW9uN0pHZVZkY3NoUnh5R1VpSFpSTzdkaXZVTDVTDQpmM2JmSDFYbWY1ZDQzT0NWTWRuUUV2NWVaOG8zeWVLa3ZrbkZQUGVJMU9BbjdGbDlFRVNNR2dhOGFaSG1URSttDQpsLzlMSmdDYjBnQmtPT0M0WnV4bWh2aERKV1EzWnJCS3pMQlNUZXN0NWlLNVlwcXRWVVk2THRyRW9FelVTK1lsDQpwWndXY2VQWHlHeHM5ZURsR3lNVmQraW15Y3NTU1UvVno2Mmx6MnZCS21NTXBkYldDQWhud0RsRTVqU2dyMjRRDQp0eGNXLys2N3d5KzhuQlI3UXdqVTFITndVRjBzeERWdEwrZ1NHVERnSEVZSlhZelYvT05zMy94TkpoVFNPSkxNDQpoeXNVdyttaGdackdhbUdXcHVIVU1DUitvTWJzMTc1UkcrQjJnUFFHVytPTjJnUTRyOXN2b0ZBNHBBQm8xd1dLDQpRYjRhY3pmeVVscElBOVFoSmFsZEY3S3dPSHVlV3gwRUNrNXg0T2tvVDBvWVp0dzFiR0JjRGtaSmF3SURBUUFCDQpvMU13VVRBZEJnTlZIUTRFRmdRVW90UlNIUm9IWTEyRFZ4R0NCdEhpb1g2ZmVFQXdId1lEVlIwakJCZ3dGb0FVDQpvdFJTSFJvSFkxMkRWeEdDQnRIaW9YNmZlRUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCDQpBUXNGQUFPQ0FnRUFSbkpsWWRjMTFHd0VxWnh6RDF2R3BDR2pDN2VWTlQ3aVY1d3IybXlybHdPYi9aUWFEa0xYDQpvVStaOVVXT1VlSXJTdzUydDdmQUpvVVAwSm5iYkMveVIrU1lqUGhvUXNiVHduOTc2ZldBWTduM3FMOXhCd1Y0DQphek41OXNjeUp0dlhMeUtOL2N5ak1ReDRLajBIMFg0bWJ6bzVZNUtzWWtYVU0vOEFPdWZMcEd0S1NGVGgrSEFDDQpab1Q5YnZHS25adnNHd0tYZFF0Wnh0akhaUjVqK3U3ZGtQOTJBT051RFNabS8rWVV4b2tBK09JbzdSR3BwSHNXDQo1ZTdNY0FTVXRtb1FORXd6dVFoVkJaRWQ1OGtKYjUrV0VWbGNzanlXNnRTbzErZ25tTWNqR1BsMWgxR2hVbjV4DQpFY0lWRnBIWXM5YWo1NmpBSjk1MVQvZjhMaWxmTlVnanBLQ0c1bnl0SUt3emxhOHNtdGlPdm1UNEpYbXBwSkI2DQo4bmdHRVluVjUrUTYwWFJ2OEhSSGp1VG9CRHVhaERrVDA2R1JGODU1d09FR2V4bkZpMXZYWUxLVllWb1V2MXRKDQo4dVdUR1pwNllDSVJldlBqbzg5ZytWTlJSaVFYUThJd0dybXE5c0RoVTlqTjA0SjdVL1RvRDFpNHE3VnlsRUc5DQorV1VGNkNLaEdBeTJIaEhwVncyTGFoOS9lUzdZMUZ1YURrWmhPZG1laG1BOCtqdHNZamJadnR5Mm1SWlF0UUZzDQpUU1VUUjREbUR2bVVPRVRmeStpRHdzK2RkWXVNTnJGeVVYV2dkMnpBQU4ydVl1UHFGY2pRcFNPODFzVTJTU3R3DQoxVzAyeUtYOGJEYmZFdjBzbUh3UzliQnFlSGo5NEM1Mjg0YXpsdTBmaUdpTm1OUEM4ckJLRmhBPQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== 360 | service: 361 | name: metallb-webhook-service 362 | namespace: metallb-system 363 | path: /convert 364 | conversionReviewVersions: 365 | - v1beta1 366 | - v1beta2 367 | group: metallb.io 368 | names: 369 | kind: BGPPeer 370 | listKind: BGPPeerList 371 | plural: bgppeers 372 | singular: bgppeer 373 | scope: Namespaced 374 | versions: 375 | - additionalPrinterColumns: 376 | - jsonPath: .spec.peerAddress 377 | name: Address 378 | type: string 379 | - jsonPath: .spec.peerASN 380 | name: ASN 381 | type: string 382 | - jsonPath: .spec.bfdProfile 383 | name: BFD Profile 384 | type: string 385 | - jsonPath: .spec.ebgpMultiHop 386 | name: Multi Hops 387 | type: string 388 | deprecated: true 389 | deprecationWarning: v1beta1 is deprecated, please use v1beta2 390 | name: v1beta1 391 | schema: 392 | openAPIV3Schema: 393 | description: BGPPeer is the Schema for the peers API. 394 | properties: 395 | apiVersion: 396 | description: |- 397 | APIVersion defines the versioned schema of this representation of an object. 398 | Servers should convert recognized schemas to the latest internal value, and 399 | may reject unrecognized values. 400 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 401 | type: string 402 | kind: 403 | description: |- 404 | Kind is a string value representing the REST resource this object represents. 405 | Servers may infer this from the endpoint the client submits requests to. 406 | Cannot be updated. 407 | In CamelCase. 408 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 409 | type: string 410 | metadata: 411 | type: object 412 | spec: 413 | description: BGPPeerSpec defines the desired state of Peer. 414 | properties: 415 | bfdProfile: 416 | type: string 417 | ebgpMultiHop: 418 | description: EBGP peer is multi-hops away 419 | type: boolean 420 | holdTime: 421 | description: Requested BGP hold time, per RFC4271. 422 | type: string 423 | keepaliveTime: 424 | description: Requested BGP keepalive time, per RFC4271. 425 | type: string 426 | myASN: 427 | description: AS number to use for the local end of the session. 428 | format: int32 429 | maximum: 4294967295 430 | minimum: 0 431 | type: integer 432 | nodeSelectors: 433 | description: |- 434 | Only connect to this peer on nodes that match one of these 435 | selectors. 436 | items: 437 | properties: 438 | matchExpressions: 439 | items: 440 | properties: 441 | key: 442 | type: string 443 | operator: 444 | type: string 445 | values: 446 | items: 447 | type: string 448 | minItems: 1 449 | type: array 450 | required: 451 | - key 452 | - operator 453 | - values 454 | type: object 455 | type: array 456 | matchLabels: 457 | additionalProperties: 458 | type: string 459 | type: object 460 | type: object 461 | type: array 462 | password: 463 | description: Authentication password for routers enforcing TCP MD5 464 | authenticated sessions 465 | type: string 466 | peerASN: 467 | description: AS number to expect from the remote end of the session. 468 | format: int32 469 | maximum: 4294967295 470 | minimum: 0 471 | type: integer 472 | peerAddress: 473 | description: Address to dial when establishing the session. 474 | type: string 475 | peerPort: 476 | description: Port to dial when establishing the session. 477 | maximum: 16384 478 | minimum: 0 479 | type: integer 480 | routerID: 481 | description: BGP router ID to advertise to the peer 482 | type: string 483 | sourceAddress: 484 | description: Source address to use when establishing the session. 485 | type: string 486 | required: 487 | - myASN 488 | - peerASN 489 | - peerAddress 490 | type: object 491 | status: 492 | description: BGPPeerStatus defines the observed state of Peer. 493 | type: object 494 | type: object 495 | served: true 496 | storage: false 497 | subresources: 498 | status: {} 499 | - additionalPrinterColumns: 500 | - jsonPath: .spec.peerAddress 501 | name: Address 502 | type: string 503 | - jsonPath: .spec.peerASN 504 | name: ASN 505 | type: string 506 | - jsonPath: .spec.bfdProfile 507 | name: BFD Profile 508 | type: string 509 | - jsonPath: .spec.ebgpMultiHop 510 | name: Multi Hops 511 | type: string 512 | name: v1beta2 513 | schema: 514 | openAPIV3Schema: 515 | description: BGPPeer is the Schema for the peers API. 516 | properties: 517 | apiVersion: 518 | description: |- 519 | APIVersion defines the versioned schema of this representation of an object. 520 | Servers should convert recognized schemas to the latest internal value, and 521 | may reject unrecognized values. 522 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 523 | type: string 524 | kind: 525 | description: |- 526 | Kind is a string value representing the REST resource this object represents. 527 | Servers may infer this from the endpoint the client submits requests to. 528 | Cannot be updated. 529 | In CamelCase. 530 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 531 | type: string 532 | metadata: 533 | type: object 534 | spec: 535 | description: BGPPeerSpec defines the desired state of Peer. 536 | properties: 537 | bfdProfile: 538 | description: The name of the BFD Profile to be used for the BFD session 539 | associated to the BGP session. If not set, the BFD session won't 540 | be set up. 541 | type: string 542 | connectTime: 543 | description: Requested BGP connect time, controls how long BGP waits 544 | between connection attempts to a neighbor. 545 | type: string 546 | x-kubernetes-validations: 547 | - message: connect time should be between 1 seconds to 65535 548 | rule: duration(self).getSeconds() >= 1 && duration(self).getSeconds() 549 | <= 65535 550 | - message: connect time should contain a whole number of seconds 551 | rule: duration(self).getMilliseconds() % 1000 == 0 552 | disableMP: 553 | default: false 554 | description: To set if we want to disable MP BGP that will separate 555 | IPv4 and IPv6 route exchanges into distinct BGP sessions. 556 | type: boolean 557 | dynamicASN: 558 | description: |- 559 | DynamicASN detects the AS number to use for the remote end of the session 560 | without explicitly setting it via the ASN field. Limited to: 561 | internal - if the neighbor's ASN is different than MyASN connection is denied. 562 | external - if the neighbor's ASN is the same as MyASN the connection is denied. 563 | ASN and DynamicASN are mutually exclusive and one of them must be specified. 564 | enum: 565 | - internal 566 | - external 567 | type: string 568 | ebgpMultiHop: 569 | description: To set if the BGPPeer is multi-hops away. Needed for 570 | FRR mode only. 571 | type: boolean 572 | enableGracefulRestart: 573 | description: |- 574 | EnableGracefulRestart allows BGP peer to continue to forward data packets 575 | along known routes while the routing protocol information is being 576 | restored. This field is immutable because it requires restart of the BGP 577 | session. Supported for FRR mode only. 578 | type: boolean 579 | x-kubernetes-validations: 580 | - message: EnableGracefulRestart cannot be changed after creation 581 | rule: self == oldSelf 582 | holdTime: 583 | description: Requested BGP hold time, per RFC4271. 584 | type: string 585 | keepaliveTime: 586 | description: Requested BGP keepalive time, per RFC4271. 587 | type: string 588 | myASN: 589 | description: AS number to use for the local end of the session. 590 | format: int32 591 | maximum: 4294967295 592 | minimum: 0 593 | type: integer 594 | nodeSelectors: 595 | description: |- 596 | Only connect to this peer on nodes that match one of these 597 | selectors. 598 | items: 599 | description: |- 600 | A label selector is a label query over a set of resources. The result of matchLabels and 601 | matchExpressions are ANDed. An empty label selector matches all objects. A null 602 | label selector matches no objects. 603 | properties: 604 | matchExpressions: 605 | description: matchExpressions is a list of label selector requirements. 606 | The requirements are ANDed. 607 | items: 608 | description: |- 609 | A label selector requirement is a selector that contains values, a key, and an operator that 610 | relates the key and values. 611 | properties: 612 | key: 613 | description: key is the label key that the selector applies 614 | to. 615 | type: string 616 | operator: 617 | description: |- 618 | operator represents a key's relationship to a set of values. 619 | Valid operators are In, NotIn, Exists and DoesNotExist. 620 | type: string 621 | values: 622 | description: |- 623 | values is an array of string values. If the operator is In or NotIn, 624 | the values array must be non-empty. If the operator is Exists or DoesNotExist, 625 | the values array must be empty. This array is replaced during a strategic 626 | merge patch. 627 | items: 628 | type: string 629 | type: array 630 | x-kubernetes-list-type: atomic 631 | required: 632 | - key 633 | - operator 634 | type: object 635 | type: array 636 | x-kubernetes-list-type: atomic 637 | matchLabels: 638 | additionalProperties: 639 | type: string 640 | description: |- 641 | matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels 642 | map is equivalent to an element of matchExpressions, whose key field is "key", the 643 | operator is "In", and the values array contains only "value". The requirements are ANDed. 644 | type: object 645 | type: object 646 | x-kubernetes-map-type: atomic 647 | type: array 648 | password: 649 | description: Authentication password for routers enforcing TCP MD5 650 | authenticated sessions 651 | type: string 652 | passwordSecret: 653 | description: |- 654 | passwordSecret is name of the authentication secret for BGP Peer. 655 | the secret must be of type "kubernetes.io/basic-auth", and created in the 656 | same namespace as the MetalLB deployment. The password is stored in the 657 | secret as the key "password". 658 | properties: 659 | name: 660 | description: name is unique within a namespace to reference a 661 | secret resource. 662 | type: string 663 | namespace: 664 | description: namespace defines the space within which the secret 665 | name must be unique. 666 | type: string 667 | type: object 668 | x-kubernetes-map-type: atomic 669 | peerASN: 670 | description: |- 671 | AS number to expect from the remote end of the session. 672 | ASN and DynamicASN are mutually exclusive and one of them must be specified. 673 | format: int32 674 | maximum: 4294967295 675 | minimum: 0 676 | type: integer 677 | peerAddress: 678 | description: Address to dial when establishing the session. 679 | type: string 680 | peerPort: 681 | default: 179 682 | description: Port to dial when establishing the session. 683 | maximum: 16384 684 | minimum: 0 685 | type: integer 686 | routerID: 687 | description: BGP router ID to advertise to the peer 688 | type: string 689 | sourceAddress: 690 | description: Source address to use when establishing the session. 691 | type: string 692 | vrf: 693 | description: |- 694 | To set if we want to peer with the BGPPeer using an interface belonging to 695 | a host vrf 696 | type: string 697 | required: 698 | - myASN 699 | - peerAddress 700 | type: object 701 | status: 702 | description: BGPPeerStatus defines the observed state of Peer. 703 | type: object 704 | type: object 705 | served: true 706 | storage: true 707 | subresources: 708 | status: {} 709 | --- 710 | apiVersion: apiextensions.k8s.io/v1 711 | kind: CustomResourceDefinition 712 | metadata: 713 | annotations: 714 | controller-gen.kubebuilder.io/version: v0.16.3 715 | name: communities.metallb.io 716 | spec: 717 | group: metallb.io 718 | names: 719 | kind: Community 720 | listKind: CommunityList 721 | plural: communities 722 | singular: community 723 | scope: Namespaced 724 | versions: 725 | - name: v1beta1 726 | schema: 727 | openAPIV3Schema: 728 | description: |- 729 | Community is a collection of aliases for communities. 730 | Users can define named aliases to be used in the BGPPeer CRD. 731 | properties: 732 | apiVersion: 733 | description: |- 734 | APIVersion defines the versioned schema of this representation of an object. 735 | Servers should convert recognized schemas to the latest internal value, and 736 | may reject unrecognized values. 737 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 738 | type: string 739 | kind: 740 | description: |- 741 | Kind is a string value representing the REST resource this object represents. 742 | Servers may infer this from the endpoint the client submits requests to. 743 | Cannot be updated. 744 | In CamelCase. 745 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 746 | type: string 747 | metadata: 748 | type: object 749 | spec: 750 | description: CommunitySpec defines the desired state of Community. 751 | properties: 752 | communities: 753 | items: 754 | properties: 755 | name: 756 | description: The name of the alias for the community. 757 | type: string 758 | value: 759 | description: |- 760 | The BGP community value corresponding to the given name. Can be a standard community of the form 1234:1234 761 | or a large community of the form large:1234:1234:1234. 762 | type: string 763 | type: object 764 | type: array 765 | type: object 766 | status: 767 | description: CommunityStatus defines the observed state of Community. 768 | type: object 769 | type: object 770 | served: true 771 | storage: true 772 | subresources: 773 | status: {} 774 | --- 775 | apiVersion: apiextensions.k8s.io/v1 776 | kind: CustomResourceDefinition 777 | metadata: 778 | annotations: 779 | controller-gen.kubebuilder.io/version: v0.16.3 780 | name: ipaddresspools.metallb.io 781 | spec: 782 | group: metallb.io 783 | names: 784 | kind: IPAddressPool 785 | listKind: IPAddressPoolList 786 | plural: ipaddresspools 787 | singular: ipaddresspool 788 | scope: Namespaced 789 | versions: 790 | - additionalPrinterColumns: 791 | - jsonPath: .spec.autoAssign 792 | name: Auto Assign 793 | type: boolean 794 | - jsonPath: .spec.avoidBuggyIPs 795 | name: Avoid Buggy IPs 796 | type: boolean 797 | - jsonPath: .spec.addresses 798 | name: Addresses 799 | type: string 800 | name: v1beta1 801 | schema: 802 | openAPIV3Schema: 803 | description: |- 804 | IPAddressPool represents a pool of IP addresses that can be allocated 805 | to LoadBalancer services. 806 | properties: 807 | apiVersion: 808 | description: |- 809 | APIVersion defines the versioned schema of this representation of an object. 810 | Servers should convert recognized schemas to the latest internal value, and 811 | may reject unrecognized values. 812 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 813 | type: string 814 | kind: 815 | description: |- 816 | Kind is a string value representing the REST resource this object represents. 817 | Servers may infer this from the endpoint the client submits requests to. 818 | Cannot be updated. 819 | In CamelCase. 820 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 821 | type: string 822 | metadata: 823 | type: object 824 | spec: 825 | description: IPAddressPoolSpec defines the desired state of IPAddressPool. 826 | properties: 827 | addresses: 828 | description: |- 829 | A list of IP address ranges over which MetalLB has authority. 830 | You can list multiple ranges in a single pool, they will all share the 831 | same settings. Each range can be either a CIDR prefix, or an explicit 832 | start-end range of IPs. 833 | items: 834 | type: string 835 | type: array 836 | autoAssign: 837 | default: true 838 | description: |- 839 | AutoAssign flag used to prevent MetallB from automatic allocation 840 | for a pool. 841 | type: boolean 842 | avoidBuggyIPs: 843 | default: false 844 | description: |- 845 | AvoidBuggyIPs prevents addresses ending with .0 and .255 846 | to be used by a pool. 847 | type: boolean 848 | serviceAllocation: 849 | description: |- 850 | AllocateTo makes ip pool allocation to specific namespace and/or service. 851 | The controller will use the pool with lowest value of priority in case of 852 | multiple matches. A pool with no priority set will be used only if the 853 | pools with priority can't be used. If multiple matching IPAddressPools are 854 | available it will check for the availability of IPs sorting the matching 855 | IPAddressPools by priority, starting from the highest to the lowest. If 856 | multiple IPAddressPools have the same priority, choice will be random. 857 | properties: 858 | namespaceSelectors: 859 | description: |- 860 | NamespaceSelectors list of label selectors to select namespace(s) for ip pool, 861 | an alternative to using namespace list. 862 | items: 863 | description: |- 864 | A label selector is a label query over a set of resources. The result of matchLabels and 865 | matchExpressions are ANDed. An empty label selector matches all objects. A null 866 | label selector matches no objects. 867 | properties: 868 | matchExpressions: 869 | description: matchExpressions is a list of label selector 870 | requirements. The requirements are ANDed. 871 | items: 872 | description: |- 873 | A label selector requirement is a selector that contains values, a key, and an operator that 874 | relates the key and values. 875 | properties: 876 | key: 877 | description: key is the label key that the selector 878 | applies to. 879 | type: string 880 | operator: 881 | description: |- 882 | operator represents a key's relationship to a set of values. 883 | Valid operators are In, NotIn, Exists and DoesNotExist. 884 | type: string 885 | values: 886 | description: |- 887 | values is an array of string values. If the operator is In or NotIn, 888 | the values array must be non-empty. If the operator is Exists or DoesNotExist, 889 | the values array must be empty. This array is replaced during a strategic 890 | merge patch. 891 | items: 892 | type: string 893 | type: array 894 | x-kubernetes-list-type: atomic 895 | required: 896 | - key 897 | - operator 898 | type: object 899 | type: array 900 | x-kubernetes-list-type: atomic 901 | matchLabels: 902 | additionalProperties: 903 | type: string 904 | description: |- 905 | matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels 906 | map is equivalent to an element of matchExpressions, whose key field is "key", the 907 | operator is "In", and the values array contains only "value". The requirements are ANDed. 908 | type: object 909 | type: object 910 | x-kubernetes-map-type: atomic 911 | type: array 912 | namespaces: 913 | description: Namespaces list of namespace(s) on which ip pool 914 | can be attached. 915 | items: 916 | type: string 917 | type: array 918 | priority: 919 | description: Priority priority given for ip pool while ip allocation 920 | on a service. 921 | type: integer 922 | serviceSelectors: 923 | description: |- 924 | ServiceSelectors list of label selector to select service(s) for which ip pool 925 | can be used for ip allocation. 926 | items: 927 | description: |- 928 | A label selector is a label query over a set of resources. The result of matchLabels and 929 | matchExpressions are ANDed. An empty label selector matches all objects. A null 930 | label selector matches no objects. 931 | properties: 932 | matchExpressions: 933 | description: matchExpressions is a list of label selector 934 | requirements. The requirements are ANDed. 935 | items: 936 | description: |- 937 | A label selector requirement is a selector that contains values, a key, and an operator that 938 | relates the key and values. 939 | properties: 940 | key: 941 | description: key is the label key that the selector 942 | applies to. 943 | type: string 944 | operator: 945 | description: |- 946 | operator represents a key's relationship to a set of values. 947 | Valid operators are In, NotIn, Exists and DoesNotExist. 948 | type: string 949 | values: 950 | description: |- 951 | values is an array of string values. If the operator is In or NotIn, 952 | the values array must be non-empty. If the operator is Exists or DoesNotExist, 953 | the values array must be empty. This array is replaced during a strategic 954 | merge patch. 955 | items: 956 | type: string 957 | type: array 958 | x-kubernetes-list-type: atomic 959 | required: 960 | - key 961 | - operator 962 | type: object 963 | type: array 964 | x-kubernetes-list-type: atomic 965 | matchLabels: 966 | additionalProperties: 967 | type: string 968 | description: |- 969 | matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels 970 | map is equivalent to an element of matchExpressions, whose key field is "key", the 971 | operator is "In", and the values array contains only "value". The requirements are ANDed. 972 | type: object 973 | type: object 974 | x-kubernetes-map-type: atomic 975 | type: array 976 | type: object 977 | required: 978 | - addresses 979 | type: object 980 | status: 981 | description: IPAddressPoolStatus defines the observed state of IPAddressPool. 982 | type: object 983 | required: 984 | - spec 985 | type: object 986 | served: true 987 | storage: true 988 | subresources: 989 | status: {} 990 | --- 991 | apiVersion: apiextensions.k8s.io/v1 992 | kind: CustomResourceDefinition 993 | metadata: 994 | annotations: 995 | controller-gen.kubebuilder.io/version: v0.16.3 996 | name: l2advertisements.metallb.io 997 | spec: 998 | group: metallb.io 999 | names: 1000 | kind: L2Advertisement 1001 | listKind: L2AdvertisementList 1002 | plural: l2advertisements 1003 | singular: l2advertisement 1004 | scope: Namespaced 1005 | versions: 1006 | - additionalPrinterColumns: 1007 | - jsonPath: .spec.ipAddressPools 1008 | name: IPAddressPools 1009 | type: string 1010 | - jsonPath: .spec.ipAddressPoolSelectors 1011 | name: IPAddressPool Selectors 1012 | type: string 1013 | - jsonPath: .spec.interfaces 1014 | name: Interfaces 1015 | type: string 1016 | - jsonPath: .spec.nodeSelectors 1017 | name: Node Selectors 1018 | priority: 10 1019 | type: string 1020 | name: v1beta1 1021 | schema: 1022 | openAPIV3Schema: 1023 | description: |- 1024 | L2Advertisement allows to advertise the LoadBalancer IPs provided 1025 | by the selected pools via L2. 1026 | properties: 1027 | apiVersion: 1028 | description: |- 1029 | APIVersion defines the versioned schema of this representation of an object. 1030 | Servers should convert recognized schemas to the latest internal value, and 1031 | may reject unrecognized values. 1032 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 1033 | type: string 1034 | kind: 1035 | description: |- 1036 | Kind is a string value representing the REST resource this object represents. 1037 | Servers may infer this from the endpoint the client submits requests to. 1038 | Cannot be updated. 1039 | In CamelCase. 1040 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 1041 | type: string 1042 | metadata: 1043 | type: object 1044 | spec: 1045 | description: L2AdvertisementSpec defines the desired state of L2Advertisement. 1046 | properties: 1047 | interfaces: 1048 | description: |- 1049 | A list of interfaces to announce from. The LB IP will be announced only from these interfaces. 1050 | If the field is not set, we advertise from all the interfaces on the host. 1051 | items: 1052 | type: string 1053 | type: array 1054 | ipAddressPoolSelectors: 1055 | description: |- 1056 | A selector for the IPAddressPools which would get advertised via this advertisement. 1057 | If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools. 1058 | items: 1059 | description: |- 1060 | A label selector is a label query over a set of resources. The result of matchLabels and 1061 | matchExpressions are ANDed. An empty label selector matches all objects. A null 1062 | label selector matches no objects. 1063 | properties: 1064 | matchExpressions: 1065 | description: matchExpressions is a list of label selector requirements. 1066 | The requirements are ANDed. 1067 | items: 1068 | description: |- 1069 | A label selector requirement is a selector that contains values, a key, and an operator that 1070 | relates the key and values. 1071 | properties: 1072 | key: 1073 | description: key is the label key that the selector applies 1074 | to. 1075 | type: string 1076 | operator: 1077 | description: |- 1078 | operator represents a key's relationship to a set of values. 1079 | Valid operators are In, NotIn, Exists and DoesNotExist. 1080 | type: string 1081 | values: 1082 | description: |- 1083 | values is an array of string values. If the operator is In or NotIn, 1084 | the values array must be non-empty. If the operator is Exists or DoesNotExist, 1085 | the values array must be empty. This array is replaced during a strategic 1086 | merge patch. 1087 | items: 1088 | type: string 1089 | type: array 1090 | x-kubernetes-list-type: atomic 1091 | required: 1092 | - key 1093 | - operator 1094 | type: object 1095 | type: array 1096 | x-kubernetes-list-type: atomic 1097 | matchLabels: 1098 | additionalProperties: 1099 | type: string 1100 | description: |- 1101 | matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels 1102 | map is equivalent to an element of matchExpressions, whose key field is "key", the 1103 | operator is "In", and the values array contains only "value". The requirements are ANDed. 1104 | type: object 1105 | type: object 1106 | x-kubernetes-map-type: atomic 1107 | type: array 1108 | ipAddressPools: 1109 | description: The list of IPAddressPools to advertise via this advertisement, 1110 | selected by name. 1111 | items: 1112 | type: string 1113 | type: array 1114 | nodeSelectors: 1115 | description: NodeSelectors allows to limit the nodes to announce as 1116 | next hops for the LoadBalancer IP. When empty, all the nodes having are 1117 | announced as next hops. 1118 | items: 1119 | description: |- 1120 | A label selector is a label query over a set of resources. The result of matchLabels and 1121 | matchExpressions are ANDed. An empty label selector matches all objects. A null 1122 | label selector matches no objects. 1123 | properties: 1124 | matchExpressions: 1125 | description: matchExpressions is a list of label selector requirements. 1126 | The requirements are ANDed. 1127 | items: 1128 | description: |- 1129 | A label selector requirement is a selector that contains values, a key, and an operator that 1130 | relates the key and values. 1131 | properties: 1132 | key: 1133 | description: key is the label key that the selector applies 1134 | to. 1135 | type: string 1136 | operator: 1137 | description: |- 1138 | operator represents a key's relationship to a set of values. 1139 | Valid operators are In, NotIn, Exists and DoesNotExist. 1140 | type: string 1141 | values: 1142 | description: |- 1143 | values is an array of string values. If the operator is In or NotIn, 1144 | the values array must be non-empty. If the operator is Exists or DoesNotExist, 1145 | the values array must be empty. This array is replaced during a strategic 1146 | merge patch. 1147 | items: 1148 | type: string 1149 | type: array 1150 | x-kubernetes-list-type: atomic 1151 | required: 1152 | - key 1153 | - operator 1154 | type: object 1155 | type: array 1156 | x-kubernetes-list-type: atomic 1157 | matchLabels: 1158 | additionalProperties: 1159 | type: string 1160 | description: |- 1161 | matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels 1162 | map is equivalent to an element of matchExpressions, whose key field is "key", the 1163 | operator is "In", and the values array contains only "value". The requirements are ANDed. 1164 | type: object 1165 | type: object 1166 | x-kubernetes-map-type: atomic 1167 | type: array 1168 | type: object 1169 | status: 1170 | description: L2AdvertisementStatus defines the observed state of L2Advertisement. 1171 | type: object 1172 | type: object 1173 | served: true 1174 | storage: true 1175 | subresources: 1176 | status: {} 1177 | --- 1178 | apiVersion: apiextensions.k8s.io/v1 1179 | kind: CustomResourceDefinition 1180 | metadata: 1181 | annotations: 1182 | controller-gen.kubebuilder.io/version: v0.16.3 1183 | name: servicel2statuses.metallb.io 1184 | spec: 1185 | group: metallb.io 1186 | names: 1187 | kind: ServiceL2Status 1188 | listKind: ServiceL2StatusList 1189 | plural: servicel2statuses 1190 | singular: servicel2status 1191 | scope: Namespaced 1192 | versions: 1193 | - additionalPrinterColumns: 1194 | - jsonPath: .status.node 1195 | name: Allocated Node 1196 | type: string 1197 | - jsonPath: .status.serviceName 1198 | name: Service Name 1199 | type: string 1200 | - jsonPath: .status.serviceNamespace 1201 | name: Service Namespace 1202 | type: string 1203 | name: v1beta1 1204 | schema: 1205 | openAPIV3Schema: 1206 | description: ServiceL2Status reveals the actual traffic status of loadbalancer 1207 | services in layer2 mode. 1208 | properties: 1209 | apiVersion: 1210 | description: |- 1211 | APIVersion defines the versioned schema of this representation of an object. 1212 | Servers should convert recognized schemas to the latest internal value, and 1213 | may reject unrecognized values. 1214 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 1215 | type: string 1216 | kind: 1217 | description: |- 1218 | Kind is a string value representing the REST resource this object represents. 1219 | Servers may infer this from the endpoint the client submits requests to. 1220 | Cannot be updated. 1221 | In CamelCase. 1222 | More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 1223 | type: string 1224 | metadata: 1225 | type: object 1226 | spec: 1227 | description: ServiceL2StatusSpec defines the desired state of ServiceL2Status. 1228 | type: object 1229 | status: 1230 | description: MetalLBServiceL2Status defines the observed state of ServiceL2Status. 1231 | properties: 1232 | interfaces: 1233 | description: Interfaces indicates the interfaces that receive the 1234 | directed traffic 1235 | items: 1236 | description: InterfaceInfo defines interface info of layer2 announcement. 1237 | properties: 1238 | name: 1239 | description: Name the name of network interface card 1240 | type: string 1241 | type: object 1242 | type: array 1243 | node: 1244 | description: Node indicates the node that receives the directed traffic 1245 | type: string 1246 | x-kubernetes-validations: 1247 | - message: Value is immutable 1248 | rule: self == oldSelf 1249 | serviceName: 1250 | description: ServiceName indicates the service this status represents 1251 | type: string 1252 | x-kubernetes-validations: 1253 | - message: Value is immutable 1254 | rule: self == oldSelf 1255 | serviceNamespace: 1256 | description: ServiceNamespace indicates the namespace of the service 1257 | type: string 1258 | x-kubernetes-validations: 1259 | - message: Value is immutable 1260 | rule: self == oldSelf 1261 | type: object 1262 | type: object 1263 | served: true 1264 | storage: true 1265 | subresources: 1266 | status: {} 1267 | --- 1268 | apiVersion: v1 1269 | kind: ServiceAccount 1270 | metadata: 1271 | labels: 1272 | app: metallb 1273 | name: controller 1274 | namespace: metallb-system 1275 | --- 1276 | apiVersion: v1 1277 | kind: ServiceAccount 1278 | metadata: 1279 | labels: 1280 | app: metallb 1281 | name: speaker 1282 | namespace: metallb-system 1283 | --- 1284 | apiVersion: rbac.authorization.k8s.io/v1 1285 | kind: Role 1286 | metadata: 1287 | labels: 1288 | app: metallb 1289 | name: controller 1290 | namespace: metallb-system 1291 | rules: 1292 | - apiGroups: 1293 | - "" 1294 | resources: 1295 | - secrets 1296 | verbs: 1297 | - create 1298 | - delete 1299 | - get 1300 | - list 1301 | - patch 1302 | - update 1303 | - watch 1304 | - apiGroups: 1305 | - "" 1306 | resourceNames: 1307 | - memberlist 1308 | resources: 1309 | - secrets 1310 | verbs: 1311 | - list 1312 | - apiGroups: 1313 | - apps 1314 | resourceNames: 1315 | - controller 1316 | resources: 1317 | - deployments 1318 | verbs: 1319 | - get 1320 | - apiGroups: 1321 | - metallb.io 1322 | resources: 1323 | - bgppeers 1324 | verbs: 1325 | - get 1326 | - list 1327 | - apiGroups: 1328 | - metallb.io 1329 | resources: 1330 | - bfdprofiles 1331 | verbs: 1332 | - get 1333 | - list 1334 | - watch 1335 | - apiGroups: 1336 | - metallb.io 1337 | resources: 1338 | - ipaddresspools 1339 | verbs: 1340 | - get 1341 | - list 1342 | - watch 1343 | - apiGroups: 1344 | - metallb.io 1345 | resources: 1346 | - bgpadvertisements 1347 | verbs: 1348 | - get 1349 | - list 1350 | - watch 1351 | - apiGroups: 1352 | - metallb.io 1353 | resources: 1354 | - l2advertisements 1355 | verbs: 1356 | - get 1357 | - list 1358 | - watch 1359 | - apiGroups: 1360 | - metallb.io 1361 | resources: 1362 | - communities 1363 | verbs: 1364 | - get 1365 | - list 1366 | - watch 1367 | --- 1368 | apiVersion: rbac.authorization.k8s.io/v1 1369 | kind: Role 1370 | metadata: 1371 | labels: 1372 | app: metallb 1373 | name: pod-lister 1374 | namespace: metallb-system 1375 | rules: 1376 | - apiGroups: 1377 | - "" 1378 | resources: 1379 | - pods 1380 | verbs: 1381 | - list 1382 | - get 1383 | - apiGroups: 1384 | - "" 1385 | resources: 1386 | - secrets 1387 | verbs: 1388 | - get 1389 | - list 1390 | - watch 1391 | - apiGroups: 1392 | - "" 1393 | resources: 1394 | - configmaps 1395 | verbs: 1396 | - get 1397 | - list 1398 | - watch 1399 | - apiGroups: 1400 | - metallb.io 1401 | resources: 1402 | - bfdprofiles 1403 | verbs: 1404 | - get 1405 | - list 1406 | - watch 1407 | - apiGroups: 1408 | - metallb.io 1409 | resources: 1410 | - bgppeers 1411 | verbs: 1412 | - get 1413 | - list 1414 | - watch 1415 | - apiGroups: 1416 | - metallb.io 1417 | resources: 1418 | - l2advertisements 1419 | verbs: 1420 | - get 1421 | - list 1422 | - watch 1423 | - apiGroups: 1424 | - metallb.io 1425 | resources: 1426 | - bgpadvertisements 1427 | verbs: 1428 | - get 1429 | - list 1430 | - watch 1431 | - apiGroups: 1432 | - metallb.io 1433 | resources: 1434 | - ipaddresspools 1435 | verbs: 1436 | - get 1437 | - list 1438 | - watch 1439 | - apiGroups: 1440 | - metallb.io 1441 | resources: 1442 | - communities 1443 | verbs: 1444 | - get 1445 | - list 1446 | - watch 1447 | --- 1448 | apiVersion: rbac.authorization.k8s.io/v1 1449 | kind: ClusterRole 1450 | metadata: 1451 | labels: 1452 | app: metallb 1453 | name: metallb-system:controller 1454 | rules: 1455 | - apiGroups: 1456 | - "" 1457 | resources: 1458 | - services 1459 | - namespaces 1460 | verbs: 1461 | - get 1462 | - list 1463 | - watch 1464 | - apiGroups: 1465 | - "" 1466 | resources: 1467 | - nodes 1468 | verbs: 1469 | - list 1470 | - apiGroups: 1471 | - "" 1472 | resources: 1473 | - services/status 1474 | verbs: 1475 | - update 1476 | - apiGroups: 1477 | - "" 1478 | resources: 1479 | - events 1480 | verbs: 1481 | - create 1482 | - patch 1483 | - apiGroups: 1484 | - policy 1485 | resourceNames: 1486 | - controller 1487 | resources: 1488 | - podsecuritypolicies 1489 | verbs: 1490 | - use 1491 | - apiGroups: 1492 | - admissionregistration.k8s.io 1493 | resourceNames: 1494 | - metallb-webhook-configuration 1495 | resources: 1496 | - validatingwebhookconfigurations 1497 | verbs: 1498 | - create 1499 | - delete 1500 | - get 1501 | - list 1502 | - patch 1503 | - update 1504 | - watch 1505 | - apiGroups: 1506 | - admissionregistration.k8s.io 1507 | resources: 1508 | - validatingwebhookconfigurations 1509 | verbs: 1510 | - list 1511 | - watch 1512 | - apiGroups: 1513 | - apiextensions.k8s.io 1514 | resourceNames: 1515 | - bfdprofiles.metallb.io 1516 | - bgpadvertisements.metallb.io 1517 | - bgppeers.metallb.io 1518 | - ipaddresspools.metallb.io 1519 | - l2advertisements.metallb.io 1520 | - communities.metallb.io 1521 | resources: 1522 | - customresourcedefinitions 1523 | verbs: 1524 | - create 1525 | - delete 1526 | - get 1527 | - list 1528 | - patch 1529 | - update 1530 | - watch 1531 | - apiGroups: 1532 | - apiextensions.k8s.io 1533 | resources: 1534 | - customresourcedefinitions 1535 | verbs: 1536 | - list 1537 | - watch 1538 | --- 1539 | apiVersion: rbac.authorization.k8s.io/v1 1540 | kind: ClusterRole 1541 | metadata: 1542 | labels: 1543 | app: metallb 1544 | name: metallb-system:speaker 1545 | rules: 1546 | - apiGroups: 1547 | - metallb.io 1548 | resources: 1549 | - servicel2statuses 1550 | - servicel2statuses/status 1551 | verbs: 1552 | - '*' 1553 | - apiGroups: 1554 | - "" 1555 | resources: 1556 | - services 1557 | - endpoints 1558 | - nodes 1559 | - namespaces 1560 | verbs: 1561 | - get 1562 | - list 1563 | - watch 1564 | - apiGroups: 1565 | - discovery.k8s.io 1566 | resources: 1567 | - endpointslices 1568 | verbs: 1569 | - get 1570 | - list 1571 | - watch 1572 | - apiGroups: 1573 | - "" 1574 | resources: 1575 | - events 1576 | verbs: 1577 | - create 1578 | - patch 1579 | - apiGroups: 1580 | - policy 1581 | resourceNames: 1582 | - speaker 1583 | resources: 1584 | - podsecuritypolicies 1585 | verbs: 1586 | - use 1587 | --- 1588 | apiVersion: rbac.authorization.k8s.io/v1 1589 | kind: RoleBinding 1590 | metadata: 1591 | labels: 1592 | app: metallb 1593 | name: controller 1594 | namespace: metallb-system 1595 | roleRef: 1596 | apiGroup: rbac.authorization.k8s.io 1597 | kind: Role 1598 | name: controller 1599 | subjects: 1600 | - kind: ServiceAccount 1601 | name: controller 1602 | namespace: metallb-system 1603 | --- 1604 | apiVersion: rbac.authorization.k8s.io/v1 1605 | kind: RoleBinding 1606 | metadata: 1607 | labels: 1608 | app: metallb 1609 | name: pod-lister 1610 | namespace: metallb-system 1611 | roleRef: 1612 | apiGroup: rbac.authorization.k8s.io 1613 | kind: Role 1614 | name: pod-lister 1615 | subjects: 1616 | - kind: ServiceAccount 1617 | name: speaker 1618 | namespace: metallb-system 1619 | --- 1620 | apiVersion: rbac.authorization.k8s.io/v1 1621 | kind: ClusterRoleBinding 1622 | metadata: 1623 | labels: 1624 | app: metallb 1625 | name: metallb-system:controller 1626 | roleRef: 1627 | apiGroup: rbac.authorization.k8s.io 1628 | kind: ClusterRole 1629 | name: metallb-system:controller 1630 | subjects: 1631 | - kind: ServiceAccount 1632 | name: controller 1633 | namespace: metallb-system 1634 | --- 1635 | apiVersion: rbac.authorization.k8s.io/v1 1636 | kind: ClusterRoleBinding 1637 | metadata: 1638 | labels: 1639 | app: metallb 1640 | name: metallb-system:speaker 1641 | roleRef: 1642 | apiGroup: rbac.authorization.k8s.io 1643 | kind: ClusterRole 1644 | name: metallb-system:speaker 1645 | subjects: 1646 | - kind: ServiceAccount 1647 | name: speaker 1648 | namespace: metallb-system 1649 | --- 1650 | apiVersion: v1 1651 | data: 1652 | excludel2.yaml: | 1653 | announcedInterfacesToExclude: ["^docker.*", "^cbr.*", "^dummy.*", "^virbr.*", "^lxcbr.*", "^veth.*", "^lo$", "^cali.*", "^tunl.*", "^flannel.*", "^kube-ipvs.*", "^cni.*", "^nodelocaldns.*"] 1654 | kind: ConfigMap 1655 | metadata: 1656 | name: metallb-excludel2 1657 | namespace: metallb-system 1658 | --- 1659 | apiVersion: v1 1660 | kind: Secret 1661 | metadata: 1662 | name: metallb-webhook-cert 1663 | namespace: metallb-system 1664 | --- 1665 | apiVersion: v1 1666 | kind: Service 1667 | metadata: 1668 | name: metallb-webhook-service 1669 | namespace: metallb-system 1670 | spec: 1671 | ports: 1672 | - port: 443 1673 | targetPort: 9443 1674 | selector: 1675 | component: controller 1676 | --- 1677 | apiVersion: apps/v1 1678 | kind: Deployment 1679 | metadata: 1680 | labels: 1681 | app: metallb 1682 | component: controller 1683 | name: controller 1684 | namespace: metallb-system 1685 | spec: 1686 | revisionHistoryLimit: 3 1687 | selector: 1688 | matchLabels: 1689 | app: metallb 1690 | component: controller 1691 | template: 1692 | metadata: 1693 | annotations: 1694 | prometheus.io/port: "7472" 1695 | prometheus.io/scrape: "true" 1696 | labels: 1697 | app: metallb 1698 | component: controller 1699 | spec: 1700 | containers: 1701 | - args: 1702 | - --port=7472 1703 | - --log-level=info 1704 | - --tls-min-version=VersionTLS12 1705 | env: 1706 | - name: METALLB_ML_SECRET_NAME 1707 | value: memberlist 1708 | - name: METALLB_DEPLOYMENT 1709 | value: controller 1710 | image: quay.io/metallb/controller:v0.14.9 1711 | livenessProbe: 1712 | failureThreshold: 3 1713 | httpGet: 1714 | path: /metrics 1715 | port: monitoring 1716 | initialDelaySeconds: 10 1717 | periodSeconds: 10 1718 | successThreshold: 1 1719 | timeoutSeconds: 1 1720 | name: controller 1721 | ports: 1722 | - containerPort: 7472 1723 | name: monitoring 1724 | - containerPort: 9443 1725 | name: webhook-server 1726 | protocol: TCP 1727 | readinessProbe: 1728 | failureThreshold: 3 1729 | httpGet: 1730 | path: /metrics 1731 | port: monitoring 1732 | initialDelaySeconds: 10 1733 | periodSeconds: 10 1734 | successThreshold: 1 1735 | timeoutSeconds: 1 1736 | securityContext: 1737 | allowPrivilegeEscalation: false 1738 | capabilities: 1739 | drop: 1740 | - all 1741 | readOnlyRootFilesystem: true 1742 | volumeMounts: 1743 | - mountPath: /tmp/k8s-webhook-server/serving-certs 1744 | name: cert 1745 | readOnly: true 1746 | nodeSelector: 1747 | kubernetes.io/os: linux 1748 | securityContext: 1749 | fsGroup: 65534 1750 | runAsNonRoot: true 1751 | runAsUser: 65534 1752 | serviceAccountName: controller 1753 | terminationGracePeriodSeconds: 0 1754 | volumes: 1755 | - name: cert 1756 | secret: 1757 | defaultMode: 420 1758 | secretName: metallb-webhook-cert 1759 | --- 1760 | apiVersion: apps/v1 1761 | kind: DaemonSet 1762 | metadata: 1763 | labels: 1764 | app: metallb 1765 | component: speaker 1766 | name: speaker 1767 | namespace: metallb-system 1768 | spec: 1769 | selector: 1770 | matchLabels: 1771 | app: metallb 1772 | component: speaker 1773 | template: 1774 | metadata: 1775 | annotations: 1776 | prometheus.io/port: "7472" 1777 | prometheus.io/scrape: "true" 1778 | labels: 1779 | app: metallb 1780 | component: speaker 1781 | spec: 1782 | containers: 1783 | - args: 1784 | - --port=7472 1785 | - --log-level=info 1786 | env: 1787 | - name: METALLB_NODE_NAME 1788 | valueFrom: 1789 | fieldRef: 1790 | fieldPath: spec.nodeName 1791 | - name: METALLB_POD_NAME 1792 | valueFrom: 1793 | fieldRef: 1794 | fieldPath: metadata.name 1795 | - name: METALLB_HOST 1796 | valueFrom: 1797 | fieldRef: 1798 | fieldPath: status.hostIP 1799 | - name: METALLB_ML_BIND_ADDR 1800 | valueFrom: 1801 | fieldRef: 1802 | fieldPath: status.podIP 1803 | - name: METALLB_ML_LABELS 1804 | value: app=metallb,component=speaker 1805 | - name: METALLB_ML_SECRET_KEY_PATH 1806 | value: /etc/ml_secret_key 1807 | image: quay.io/metallb/speaker:v0.14.9 1808 | livenessProbe: 1809 | failureThreshold: 3 1810 | httpGet: 1811 | path: /metrics 1812 | port: monitoring 1813 | initialDelaySeconds: 10 1814 | periodSeconds: 10 1815 | successThreshold: 1 1816 | timeoutSeconds: 1 1817 | name: speaker 1818 | ports: 1819 | - containerPort: 7472 1820 | name: monitoring 1821 | - containerPort: 7946 1822 | name: memberlist-tcp 1823 | - containerPort: 7946 1824 | name: memberlist-udp 1825 | protocol: UDP 1826 | readinessProbe: 1827 | failureThreshold: 3 1828 | httpGet: 1829 | path: /metrics 1830 | port: monitoring 1831 | initialDelaySeconds: 10 1832 | periodSeconds: 10 1833 | successThreshold: 1 1834 | timeoutSeconds: 1 1835 | securityContext: 1836 | allowPrivilegeEscalation: false 1837 | capabilities: 1838 | add: 1839 | - NET_RAW 1840 | drop: 1841 | - ALL 1842 | readOnlyRootFilesystem: true 1843 | volumeMounts: 1844 | - mountPath: /etc/ml_secret_key 1845 | name: memberlist 1846 | readOnly: true 1847 | - mountPath: /etc/metallb 1848 | name: metallb-excludel2 1849 | readOnly: true 1850 | hostNetwork: true 1851 | nodeSelector: 1852 | kubernetes.io/os: linux 1853 | serviceAccountName: speaker 1854 | terminationGracePeriodSeconds: 2 1855 | tolerations: 1856 | - effect: NoSchedule 1857 | key: node-role.kubernetes.io/master 1858 | operator: Exists 1859 | - effect: NoSchedule 1860 | key: node-role.kubernetes.io/control-plane 1861 | operator: Exists 1862 | volumes: 1863 | - name: memberlist 1864 | secret: 1865 | defaultMode: 420 1866 | secretName: memberlist 1867 | - configMap: 1868 | defaultMode: 256 1869 | name: metallb-excludel2 1870 | name: metallb-excludel2 1871 | --- 1872 | apiVersion: admissionregistration.k8s.io/v1 1873 | kind: ValidatingWebhookConfiguration 1874 | metadata: 1875 | creationTimestamp: null 1876 | name: metallb-webhook-configuration 1877 | webhooks: 1878 | - admissionReviewVersions: 1879 | - v1 1880 | clientConfig: 1881 | service: 1882 | name: metallb-webhook-service 1883 | namespace: metallb-system 1884 | path: /validate-metallb-io-v1beta2-bgppeer 1885 | failurePolicy: Fail 1886 | name: bgppeersvalidationwebhook.metallb.io 1887 | rules: 1888 | - apiGroups: 1889 | - metallb.io 1890 | apiVersions: 1891 | - v1beta2 1892 | operations: 1893 | - CREATE 1894 | - UPDATE 1895 | resources: 1896 | - bgppeers 1897 | sideEffects: None 1898 | - admissionReviewVersions: 1899 | - v1 1900 | clientConfig: 1901 | service: 1902 | name: metallb-webhook-service 1903 | namespace: metallb-system 1904 | path: /validate-metallb-io-v1beta1-bfdprofile 1905 | failurePolicy: Fail 1906 | name: bfdprofilevalidationwebhook.metallb.io 1907 | rules: 1908 | - apiGroups: 1909 | - metallb.io 1910 | apiVersions: 1911 | - v1beta1 1912 | operations: 1913 | - CREATE 1914 | - DELETE 1915 | resources: 1916 | - bfdprofiles 1917 | sideEffects: None 1918 | - admissionReviewVersions: 1919 | - v1 1920 | clientConfig: 1921 | service: 1922 | name: metallb-webhook-service 1923 | namespace: metallb-system 1924 | path: /validate-metallb-io-v1beta1-bgpadvertisement 1925 | failurePolicy: Fail 1926 | name: bgpadvertisementvalidationwebhook.metallb.io 1927 | rules: 1928 | - apiGroups: 1929 | - metallb.io 1930 | apiVersions: 1931 | - v1beta1 1932 | operations: 1933 | - CREATE 1934 | - UPDATE 1935 | resources: 1936 | - bgpadvertisements 1937 | sideEffects: None 1938 | - admissionReviewVersions: 1939 | - v1 1940 | clientConfig: 1941 | service: 1942 | name: metallb-webhook-service 1943 | namespace: metallb-system 1944 | path: /validate-metallb-io-v1beta1-community 1945 | failurePolicy: Fail 1946 | name: communityvalidationwebhook.metallb.io 1947 | rules: 1948 | - apiGroups: 1949 | - metallb.io 1950 | apiVersions: 1951 | - v1beta1 1952 | operations: 1953 | - CREATE 1954 | - UPDATE 1955 | resources: 1956 | - communities 1957 | sideEffects: None 1958 | - admissionReviewVersions: 1959 | - v1 1960 | clientConfig: 1961 | service: 1962 | name: metallb-webhook-service 1963 | namespace: metallb-system 1964 | path: /validate-metallb-io-v1beta1-ipaddresspool 1965 | failurePolicy: Fail 1966 | name: ipaddresspoolvalidationwebhook.metallb.io 1967 | rules: 1968 | - apiGroups: 1969 | - metallb.io 1970 | apiVersions: 1971 | - v1beta1 1972 | operations: 1973 | - CREATE 1974 | - UPDATE 1975 | resources: 1976 | - ipaddresspools 1977 | sideEffects: None 1978 | - admissionReviewVersions: 1979 | - v1 1980 | clientConfig: 1981 | service: 1982 | name: metallb-webhook-service 1983 | namespace: metallb-system 1984 | path: /validate-metallb-io-v1beta1-l2advertisement 1985 | failurePolicy: Fail 1986 | name: l2advertisementvalidationwebhook.metallb.io 1987 | rules: 1988 | - apiGroups: 1989 | - metallb.io 1990 | apiVersions: 1991 | - v1beta1 1992 | operations: 1993 | - CREATE 1994 | - UPDATE 1995 | resources: 1996 | - l2advertisements 1997 | sideEffects: None 1998 | -------------------------------------------------------------------------------- /infra/src/modules/01-load-balancer/mod.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as k8s from "@pulumi/kubernetes"; 3 | import * as config from "../../config"; 4 | import * as targets from "../../targets"; 5 | import * as primitives from "../00-primitives/mod"; 6 | 7 | // metallb manifest 8 | 9 | let metallbManifest: k8s.yaml.v2.ConfigFile | null = null; 10 | let ipAddressPool: k8s.apiextensions.CustomResource | null = null; 11 | let l2Advertisement: k8s.apiextensions.CustomResource | null = null; 12 | 13 | if (config.installLoadBalancer) { 14 | metallbManifest = new k8s.yaml.v2.ConfigFile( 15 | "metallb-manifest", 16 | { 17 | file: `${config.cwd}/src/modules/01-load-balancer/metallb-manifest.yaml`, 18 | }, 19 | { provider: targets.k8sProvider, dependsOn: [primitives.defaultNs] }, 20 | ); 21 | 22 | if (config.loadBalancerAddressPool !== undefined) { 23 | ipAddressPool = new k8s.apiextensions.CustomResource( 24 | "default-address-pool", 25 | { 26 | apiVersion: "metallb.io/v1beta1", 27 | kind: "IPAddressPool", 28 | metadata: { 29 | name: "default-address-pool", 30 | namespace: "metallb-system", 31 | }, 32 | spec: { 33 | addresses: [config.loadBalancerAddressPool], 34 | }, 35 | }, 36 | { provider: targets.k8sProvider, dependsOn: [metallbManifest] }, 37 | ); 38 | 39 | l2Advertisement = new k8s.apiextensions.CustomResource( 40 | "default-l2-advertisement", 41 | { 42 | apiVersion: "metallb.io/v1beta1", 43 | kind: "L2Advertisement", 44 | metadata: { 45 | name: "default", 46 | namespace: "metallb-system", 47 | }, 48 | spec: {}, 49 | }, 50 | { provider: targets.k8sProvider, dependsOn: [metallbManifest] }, 51 | ); 52 | } 53 | } 54 | 55 | export { metallbManifest, ipAddressPool, l2Advertisement }; 56 | -------------------------------------------------------------------------------- /infra/src/modules/02-istio/mod.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import type { Input, Resource } from "@pulumi/pulumi"; 3 | import * as k8s from "@pulumi/kubernetes"; 4 | import * as config from "../../config"; 5 | import * as targets from "../../targets"; 6 | import * as primitives from "../00-primitives/mod"; 7 | import * as loadBalancer from "../01-load-balancer/mod"; 8 | 9 | // namespace 10 | 11 | export const istioSystemNs = new k8s.core.v1.Namespace( 12 | "istio-system-namespace", 13 | { 14 | metadata: { 15 | name: "istio-system", 16 | }, 17 | }, 18 | { provider: targets.k8sProvider }, 19 | ); 20 | 21 | // istio manifest 22 | 23 | export const istioManifest = new k8s.yaml.v2.ConfigFile( 24 | "istio-manifest", 25 | { 26 | file: `${config.cwd}/src/modules/02-istio/istio-manifest.yaml`, 27 | }, 28 | { 29 | provider: targets.k8sProvider, 30 | dependsOn: [ 31 | primitives.defaultNs, 32 | istioSystemNs, 33 | loadBalancer.metallbManifest, 34 | loadBalancer.ipAddressPool, 35 | loadBalancer.l2Advertisement 36 | ].filter(x => x !== null) as Input[]> | Input, 37 | }, 38 | ); 39 | -------------------------------------------------------------------------------- /infra/src/modules/03-gateway/mod.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as k8s from "@pulumi/kubernetes"; 3 | // import * as tls from "@pulumi/tls"; 4 | import * as config from "../../config"; 5 | import * as targets from "../../targets"; 6 | import * as primitives from "../00-primitives/mod"; 7 | 8 | const allowedRoutes = { 9 | namespaces: { 10 | from: "Selector", 11 | selector: { 12 | matchLabels: { 13 | "shared-gateway-access": "true", 14 | }, 15 | }, 16 | }, 17 | }; 18 | 19 | // custom resources 20 | 21 | export const gatewayApiCrdsManifest = new k8s.yaml.v2.ConfigFile( 22 | "gateway-api-crds-manifest", 23 | { 24 | file: `${config.cwd}/src/modules/03-gateway/gateway-api-crds-manifest.yaml`, 25 | }, 26 | { provider: targets.k8sProvider, dependsOn: [primitives.defaultNs] }, 27 | ); 28 | 29 | // certificates 30 | 31 | // export const sharedTlsCerts = new tls.PrivateKey("shared-tls-certs", { 32 | // algorithm: "RSA", 33 | // rsaBits: 4096, 34 | // }); 35 | 36 | // const privateKey = sharedTlsCerts.privateKeyPemPkcs8.apply((k) => 37 | // Buffer.from(k).toString("base64") 38 | // ); 39 | 40 | // const publicKey = sharedTlsCerts.publicKeyPem.apply((k) => 41 | // Buffer.from(k).toString("base64") 42 | // ); 43 | 44 | const privateKey = config.privateKey; 45 | const publicKey = config.publicKey; 46 | 47 | // secrets 48 | 49 | export let sharedTls: k8s.core.v1.Secret | undefined = undefined; 50 | 51 | if (privateKey !== undefined && publicKey !== undefined) { 52 | sharedTls = new k8s.core.v1.Secret( 53 | "shared-tls", 54 | { 55 | metadata: { 56 | name: "shared-tls", 57 | namespace: primitives.defaultNs.metadata.name, 58 | }, 59 | type: "tls", 60 | data: { 61 | "tls.key": privateKey, 62 | "tls.crt": publicKey, 63 | }, 64 | }, 65 | { provider: targets.k8sProvider, dependsOn: [primitives.defaultNs] }, 66 | ); 67 | } 68 | 69 | // gateways 70 | 71 | const certificateRefs = []; 72 | 73 | if (sharedTls !== undefined) { 74 | certificateRefs.push({ name: sharedTls.metadata.name }); 75 | } 76 | 77 | export const gateway = new k8s.apiextensions.CustomResource( 78 | "gateway", 79 | { 80 | apiVersion: "gateway.networking.k8s.io/v1beta1", 81 | kind: "Gateway", 82 | metadata: { 83 | name: "shared-gateway", 84 | namespace: primitives.defaultNs.metadata.name, 85 | }, 86 | spec: { 87 | gatewayClassName: "istio", 88 | listeners: [ 89 | { 90 | name: "http", 91 | port: 80, 92 | protocol: "HTTP", 93 | allowedRoutes: allowedRoutes, 94 | }, 95 | { 96 | name: "https", 97 | port: 443, 98 | protocol: "HTTPS", 99 | tls: { 100 | mode: "Terminate", 101 | certificateRefs: certificateRefs, 102 | }, 103 | allowedRoutes: allowedRoutes, 104 | }, 105 | ], 106 | }, 107 | }, 108 | { provider: targets.k8sProvider, dependsOn: [primitives.defaultNs] }, 109 | ); 110 | -------------------------------------------------------------------------------- /infra/src/modules/04-argowf/mod.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as k8s from "@pulumi/kubernetes"; 3 | import * as config from "../../config"; 4 | import * as targets from "../../targets"; 5 | import * as gateway from "../03-gateway/mod"; 6 | 7 | // namespaces 8 | 9 | const nsName = "argowf"; 10 | export const ns = new k8s.core.v1.Namespace( 11 | "argowf-namespace", 12 | { 13 | metadata: { 14 | name: nsName, 15 | labels: { 16 | "shared-gateway-access": "true", 17 | }, 18 | }, 19 | }, 20 | { provider: targets.k8sProvider }, 21 | ); 22 | 23 | // helm charts 24 | 25 | export const chart = new k8s.helm.v3.Release( 26 | "argowf-helm-chart", 27 | { 28 | name: "argowf", 29 | namespace: ns.metadata.name, 30 | chart: "argo-workflows", 31 | repositoryOpts: { repo: "https://argoproj.github.io/argo-helm" }, 32 | values: { 33 | installCRDs: true, 34 | }, 35 | }, 36 | { provider: targets.k8sProvider, dependsOn: [ns] }, 37 | ); 38 | 39 | // http routes 40 | 41 | export const httpRoute = new k8s.apiextensions.CustomResource( 42 | "argowf-http-route", 43 | { 44 | apiVersion: "gateway.networking.k8s.io/v1beta1", 45 | kind: "HTTPRoute", 46 | metadata: { 47 | name: "argowf", 48 | namespace: ns.metadata.name, 49 | }, 50 | spec: { 51 | parentRefs: [ 52 | { 53 | name: gateway.gateway.metadata.name, 54 | namespace: gateway.gateway.metadata.namespace, 55 | }, 56 | ], 57 | hostnames: [ 58 | `workflows.${config.domain}`, 59 | ], 60 | rules: [ 61 | { 62 | backendRefs: [ 63 | { 64 | name: "argowf-argo-workflows-server", 65 | namespace: ns.metadata.name, 66 | port: 2746, 67 | }, 68 | ], 69 | }, 70 | ], 71 | }, 72 | }, 73 | { provider: targets.k8sProvider, dependsOn: [ns] }, 74 | ); 75 | -------------------------------------------------------------------------------- /infra/src/modules/05-argocd/mod.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as k8s from "@pulumi/kubernetes"; 3 | import * as config from "../../config"; 4 | import * as targets from "../../targets"; 5 | import * as gateway from "../03-gateway/mod"; 6 | 7 | // namespaces 8 | 9 | const nsName = "argocd"; 10 | export const ns = new k8s.core.v1.Namespace( 11 | "argocd-namespace", 12 | { 13 | metadata: { 14 | name: nsName, 15 | labels: { 16 | "shared-gateway-access": "true", 17 | }, 18 | }, 19 | }, 20 | { provider: targets.k8sProvider }, 21 | ); 22 | 23 | // helm charts 24 | 25 | export const chart = new k8s.helm.v3.Release( 26 | "argocd-helm-chart", 27 | { 28 | name: "argocd", 29 | namespace: ns.metadata.name, 30 | chart: "argo-cd", 31 | repositoryOpts: { repo: "https://argoproj.github.io/argo-helm" }, 32 | values: { 33 | installCRDs: true, 34 | configs: { 35 | params: { 36 | "server.insecure": true, 37 | }, 38 | }, 39 | }, 40 | }, 41 | { provider: targets.k8sProvider, dependsOn: [ns] }, 42 | ); 43 | 44 | // http routes 45 | 46 | export const httpRoute = new k8s.apiextensions.CustomResource( 47 | "argocd-http-route", 48 | { 49 | apiVersion: "gateway.networking.k8s.io/v1beta1", 50 | kind: "HTTPRoute", 51 | metadata: { 52 | name: "argocd", 53 | namespace: ns.metadata.name, 54 | }, 55 | spec: { 56 | parentRefs: [ 57 | { 58 | name: gateway.gateway.metadata.name, 59 | namespace: gateway.gateway.metadata.namespace, 60 | }, 61 | ], 62 | hostnames: [ 63 | `cd.${config.domain}`, 64 | ], 65 | rules: [ 66 | { 67 | backendRefs: [ 68 | { 69 | name: "argocd-server", 70 | namespace: ns.metadata.name, 71 | port: 80, 72 | }, 73 | ], 74 | }, 75 | ], 76 | }, 77 | }, 78 | { provider: targets.k8sProvider, dependsOn: [ns] }, 79 | ); 80 | -------------------------------------------------------------------------------- /infra/src/modules/06-monitoring/mod.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as k8s from "@pulumi/kubernetes"; 3 | import * as config from "../../config"; 4 | import * as targets from "../../targets"; 5 | import * as gateway from "../03-gateway/mod"; 6 | 7 | // namespaces 8 | 9 | const nsName = "monitoring"; 10 | export const ns = new k8s.core.v1.Namespace( 11 | nsName, 12 | { 13 | metadata: { 14 | name: nsName, 15 | labels: { 16 | "shared-gateway-access": "true", 17 | }, 18 | }, 19 | }, 20 | { provider: targets.k8sProvider }, 21 | ); 22 | 23 | // helm charts 24 | 25 | export const kubePrometheusStackChart = new k8s.helm.v3.Release( 26 | "kube-prometheus-stack-helm-chart", 27 | { 28 | name: "prom", 29 | namespace: ns.metadata.name, 30 | chart: "kube-prometheus-stack", 31 | repositoryOpts: { repo: "https://prometheus-community.github.io/helm-charts" }, 32 | values: { 33 | installCRDs: true, 34 | }, 35 | }, 36 | { provider: targets.k8sProvider, dependsOn: [ns] }, 37 | ); 38 | 39 | // grafana secrets 40 | 41 | const updatedData = { 42 | "admin-user": Buffer.from(config.grafanaUsername).toString("base64"), 43 | "admin-password": Buffer.from(config.grafanaPassword).toString("base64"), 44 | }; 45 | 46 | export const grafanaSecret = new k8s.core.v1.Secret( 47 | "grafana-secret", 48 | { 49 | metadata: { 50 | annotations: { 51 | "pulumi.com/patchForce": "true", 52 | }, 53 | name: "prom-grafana", 54 | namespace: ns.metadata.name, 55 | }, 56 | type: "Opaque", 57 | data: updatedData, 58 | }, 59 | { provider: targets.k8sProvider, dependsOn: [ns, kubePrometheusStackChart] }, 60 | ); 61 | 62 | // http routes 63 | 64 | export const httpRoute = new k8s.apiextensions.CustomResource( 65 | "grafana-http-route", 66 | { 67 | apiVersion: "gateway.networking.k8s.io/v1beta1", 68 | kind: "HTTPRoute", 69 | metadata: { 70 | name: "grafana", 71 | namespace: ns.metadata.name, 72 | }, 73 | spec: { 74 | parentRefs: [ 75 | { 76 | name: gateway.gateway.metadata.name, 77 | namespace: gateway.gateway.metadata.namespace, 78 | }, 79 | ], 80 | hostnames: [ 81 | `grafana.${config.domain}`, 82 | ], 83 | rules: [ 84 | { 85 | backendRefs: [ 86 | { 87 | name: "prom-grafana", 88 | namespace: ns.metadata.name, 89 | port: 80, 90 | }, 91 | ], 92 | }, 93 | ], 94 | }, 95 | }, 96 | { provider: targets.k8sProvider, dependsOn: [ns, kubePrometheusStackChart] }, 97 | ); 98 | -------------------------------------------------------------------------------- /infra/src/targets.ts: -------------------------------------------------------------------------------- 1 | // Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license. 2 | import * as k8s from "@pulumi/kubernetes"; 3 | 4 | // k8s provider 5 | export const k8sProvider = new k8s.Provider("provider", {}); 6 | -------------------------------------------------------------------------------- /infra/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "baseUrl": ".", 5 | "rootDir": "./src/", 6 | "outDir": "./bin/", 7 | "target": "ES2020", 8 | "module": "CommonJS", 9 | "moduleResolution": "Node", 10 | "sourceMap": true, 11 | "experimentalDecorators": true, 12 | "pretty": true, 13 | "noFallthroughCasesInSwitch": true, 14 | "noImplicitReturns": true, 15 | "forceConsistentCasingInFileNames": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /infra/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@grpc/grpc-js@^1.10.1": 6 | version "1.12.5" 7 | resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.5.tgz#0064a28fe9b1ec54ac27e1c9bf70720aa01285e8" 8 | integrity sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA== 9 | dependencies: 10 | "@grpc/proto-loader" "^0.7.13" 11 | "@js-sdsl/ordered-map" "^4.4.2" 12 | 13 | "@grpc/proto-loader@^0.7.13": 14 | version "0.7.13" 15 | resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" 16 | integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== 17 | dependencies: 18 | lodash.camelcase "^4.3.0" 19 | long "^5.0.0" 20 | protobufjs "^7.2.5" 21 | yargs "^17.7.2" 22 | 23 | "@isaacs/cliui@^8.0.2": 24 | version "8.0.2" 25 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" 26 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 27 | dependencies: 28 | string-width "^5.1.2" 29 | string-width-cjs "npm:string-width@^4.2.0" 30 | strip-ansi "^7.0.1" 31 | strip-ansi-cjs "npm:strip-ansi@^6.0.1" 32 | wrap-ansi "^8.1.0" 33 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 34 | 35 | "@isaacs/string-locale-compare@^1.1.0": 36 | version "1.1.0" 37 | resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" 38 | integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== 39 | 40 | "@js-sdsl/ordered-map@^4.4.2": 41 | version "4.4.2" 42 | resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" 43 | integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== 44 | 45 | "@logdna/tail-file@^2.0.6": 46 | version "2.2.0" 47 | resolved "https://registry.yarnpkg.com/@logdna/tail-file/-/tail-file-2.2.0.tgz#158a362d293f940dacfd07c835bf3ae2f9e0455a" 48 | integrity sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng== 49 | 50 | "@npmcli/agent@^2.0.0": 51 | version "2.2.2" 52 | resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" 53 | integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== 54 | dependencies: 55 | agent-base "^7.1.0" 56 | http-proxy-agent "^7.0.0" 57 | https-proxy-agent "^7.0.1" 58 | lru-cache "^10.0.1" 59 | socks-proxy-agent "^8.0.3" 60 | 61 | "@npmcli/arborist@^7.3.1": 62 | version "7.5.4" 63 | resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" 64 | integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g== 65 | dependencies: 66 | "@isaacs/string-locale-compare" "^1.1.0" 67 | "@npmcli/fs" "^3.1.1" 68 | "@npmcli/installed-package-contents" "^2.1.0" 69 | "@npmcli/map-workspaces" "^3.0.2" 70 | "@npmcli/metavuln-calculator" "^7.1.1" 71 | "@npmcli/name-from-folder" "^2.0.0" 72 | "@npmcli/node-gyp" "^3.0.0" 73 | "@npmcli/package-json" "^5.1.0" 74 | "@npmcli/query" "^3.1.0" 75 | "@npmcli/redact" "^2.0.0" 76 | "@npmcli/run-script" "^8.1.0" 77 | bin-links "^4.0.4" 78 | cacache "^18.0.3" 79 | common-ancestor-path "^1.0.1" 80 | hosted-git-info "^7.0.2" 81 | json-parse-even-better-errors "^3.0.2" 82 | json-stringify-nice "^1.1.4" 83 | lru-cache "^10.2.2" 84 | minimatch "^9.0.4" 85 | nopt "^7.2.1" 86 | npm-install-checks "^6.2.0" 87 | npm-package-arg "^11.0.2" 88 | npm-pick-manifest "^9.0.1" 89 | npm-registry-fetch "^17.0.1" 90 | pacote "^18.0.6" 91 | parse-conflict-json "^3.0.0" 92 | proc-log "^4.2.0" 93 | proggy "^2.0.0" 94 | promise-all-reject-late "^1.0.0" 95 | promise-call-limit "^3.0.1" 96 | read-package-json-fast "^3.0.2" 97 | semver "^7.3.7" 98 | ssri "^10.0.6" 99 | treeverse "^3.0.0" 100 | walk-up-path "^3.0.1" 101 | 102 | "@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": 103 | version "3.1.1" 104 | resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" 105 | integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== 106 | dependencies: 107 | semver "^7.3.5" 108 | 109 | "@npmcli/git@^5.0.0": 110 | version "5.0.8" 111 | resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" 112 | integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== 113 | dependencies: 114 | "@npmcli/promise-spawn" "^7.0.0" 115 | ini "^4.1.3" 116 | lru-cache "^10.0.1" 117 | npm-pick-manifest "^9.0.0" 118 | proc-log "^4.0.0" 119 | promise-inflight "^1.0.1" 120 | promise-retry "^2.0.1" 121 | semver "^7.3.5" 122 | which "^4.0.0" 123 | 124 | "@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": 125 | version "2.1.0" 126 | resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" 127 | integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== 128 | dependencies: 129 | npm-bundled "^3.0.0" 130 | npm-normalize-package-bin "^3.0.0" 131 | 132 | "@npmcli/map-workspaces@^3.0.2": 133 | version "3.0.6" 134 | resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" 135 | integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== 136 | dependencies: 137 | "@npmcli/name-from-folder" "^2.0.0" 138 | glob "^10.2.2" 139 | minimatch "^9.0.0" 140 | read-package-json-fast "^3.0.0" 141 | 142 | "@npmcli/metavuln-calculator@^7.1.1": 143 | version "7.1.1" 144 | resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf" 145 | integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g== 146 | dependencies: 147 | cacache "^18.0.0" 148 | json-parse-even-better-errors "^3.0.0" 149 | pacote "^18.0.0" 150 | proc-log "^4.1.0" 151 | semver "^7.3.5" 152 | 153 | "@npmcli/name-from-folder@^2.0.0": 154 | version "2.0.0" 155 | resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" 156 | integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== 157 | 158 | "@npmcli/node-gyp@^3.0.0": 159 | version "3.0.0" 160 | resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" 161 | integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== 162 | 163 | "@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": 164 | version "5.2.1" 165 | resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" 166 | integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== 167 | dependencies: 168 | "@npmcli/git" "^5.0.0" 169 | glob "^10.2.2" 170 | hosted-git-info "^7.0.0" 171 | json-parse-even-better-errors "^3.0.0" 172 | normalize-package-data "^6.0.0" 173 | proc-log "^4.0.0" 174 | semver "^7.5.3" 175 | 176 | "@npmcli/promise-spawn@^7.0.0": 177 | version "7.0.2" 178 | resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" 179 | integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== 180 | dependencies: 181 | which "^4.0.0" 182 | 183 | "@npmcli/query@^3.1.0": 184 | version "3.1.0" 185 | resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" 186 | integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== 187 | dependencies: 188 | postcss-selector-parser "^6.0.10" 189 | 190 | "@npmcli/redact@^2.0.0": 191 | version "2.0.1" 192 | resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" 193 | integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== 194 | 195 | "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": 196 | version "8.1.0" 197 | resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" 198 | integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg== 199 | dependencies: 200 | "@npmcli/node-gyp" "^3.0.0" 201 | "@npmcli/package-json" "^5.0.0" 202 | "@npmcli/promise-spawn" "^7.0.0" 203 | node-gyp "^10.0.0" 204 | proc-log "^4.0.0" 205 | which "^4.0.0" 206 | 207 | "@opentelemetry/api-logs@0.55.0": 208 | version "0.55.0" 209 | resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.55.0.tgz#5cd7461820d864600250deb3803c32367a6bb2d2" 210 | integrity sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg== 211 | dependencies: 212 | "@opentelemetry/api" "^1.3.0" 213 | 214 | "@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.9": 215 | version "1.9.0" 216 | resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" 217 | integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== 218 | 219 | "@opentelemetry/context-async-hooks@1.30.1": 220 | version "1.30.1" 221 | resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz#4f76280691a742597fd0bf682982126857622948" 222 | integrity sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA== 223 | 224 | "@opentelemetry/core@1.30.1": 225 | version "1.30.1" 226 | resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.30.1.tgz#a0b468bb396358df801881709ea38299fc30ab27" 227 | integrity sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ== 228 | dependencies: 229 | "@opentelemetry/semantic-conventions" "1.28.0" 230 | 231 | "@opentelemetry/exporter-zipkin@^1.28": 232 | version "1.30.1" 233 | resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.30.1.tgz#d96213a38d201ef2d50c3ba29faeb6e579f70e77" 234 | integrity sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA== 235 | dependencies: 236 | "@opentelemetry/core" "1.30.1" 237 | "@opentelemetry/resources" "1.30.1" 238 | "@opentelemetry/sdk-trace-base" "1.30.1" 239 | "@opentelemetry/semantic-conventions" "1.28.0" 240 | 241 | "@opentelemetry/instrumentation-grpc@^0.55": 242 | version "0.55.0" 243 | resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.55.0.tgz#b5161359060999f7ccbef26d6550beef021572fa" 244 | integrity sha512-n2ZH4pRwOy0Vhag/3eKqiyDBwcpUnGgJI9iiIRX7vivE0FMncaLazWphNFezRRaM/LuKwq1TD8pVUvieP68mow== 245 | dependencies: 246 | "@opentelemetry/instrumentation" "0.55.0" 247 | "@opentelemetry/semantic-conventions" "1.27.0" 248 | 249 | "@opentelemetry/instrumentation@0.55.0", "@opentelemetry/instrumentation@^0.55": 250 | version "0.55.0" 251 | resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.55.0.tgz#ecac8afd8706f6e99b3bb6951b9e07c4c81533f0" 252 | integrity sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ== 253 | dependencies: 254 | "@opentelemetry/api-logs" "0.55.0" 255 | "@types/shimmer" "^1.2.0" 256 | import-in-the-middle "^1.8.1" 257 | require-in-the-middle "^7.1.1" 258 | semver "^7.5.2" 259 | shimmer "^1.2.1" 260 | 261 | "@opentelemetry/propagator-b3@1.30.1": 262 | version "1.30.1" 263 | resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz#b73321e5f30f062a9229887a4aa80c771107fdd2" 264 | integrity sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ== 265 | dependencies: 266 | "@opentelemetry/core" "1.30.1" 267 | 268 | "@opentelemetry/propagator-jaeger@1.30.1": 269 | version "1.30.1" 270 | resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz#c06c9dacbe818b80cfb13c4dbf0b57df1ad26b71" 271 | integrity sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg== 272 | dependencies: 273 | "@opentelemetry/core" "1.30.1" 274 | 275 | "@opentelemetry/resources@1.30.1", "@opentelemetry/resources@^1.28": 276 | version "1.30.1" 277 | resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.30.1.tgz#a4eae17ebd96947fdc7a64f931ca4b71e18ce964" 278 | integrity sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA== 279 | dependencies: 280 | "@opentelemetry/core" "1.30.1" 281 | "@opentelemetry/semantic-conventions" "1.28.0" 282 | 283 | "@opentelemetry/sdk-trace-base@1.30.1", "@opentelemetry/sdk-trace-base@^1.28": 284 | version "1.30.1" 285 | resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz#41a42234096dc98e8f454d24551fc80b816feb34" 286 | integrity sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg== 287 | dependencies: 288 | "@opentelemetry/core" "1.30.1" 289 | "@opentelemetry/resources" "1.30.1" 290 | "@opentelemetry/semantic-conventions" "1.28.0" 291 | 292 | "@opentelemetry/sdk-trace-node@^1.28": 293 | version "1.30.1" 294 | resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz#bd7d68fcfb4d4ae76ea09810df9668b7dd09a2e5" 295 | integrity sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ== 296 | dependencies: 297 | "@opentelemetry/context-async-hooks" "1.30.1" 298 | "@opentelemetry/core" "1.30.1" 299 | "@opentelemetry/propagator-b3" "1.30.1" 300 | "@opentelemetry/propagator-jaeger" "1.30.1" 301 | "@opentelemetry/sdk-trace-base" "1.30.1" 302 | semver "^7.5.2" 303 | 304 | "@opentelemetry/semantic-conventions@1.27.0": 305 | version "1.27.0" 306 | resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz#1a857dcc95a5ab30122e04417148211e6f945e6c" 307 | integrity sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg== 308 | 309 | "@opentelemetry/semantic-conventions@1.28.0", "@opentelemetry/semantic-conventions@^1.28": 310 | version "1.28.0" 311 | resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz#337fb2bca0453d0726696e745f50064411f646d6" 312 | integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA== 313 | 314 | "@pkgjs/parseargs@^0.11.0": 315 | version "0.11.0" 316 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" 317 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 318 | 319 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": 320 | version "1.1.2" 321 | resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" 322 | integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== 323 | 324 | "@protobufjs/base64@^1.1.2": 325 | version "1.1.2" 326 | resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" 327 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== 328 | 329 | "@protobufjs/codegen@^2.0.4": 330 | version "2.0.4" 331 | resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" 332 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== 333 | 334 | "@protobufjs/eventemitter@^1.1.0": 335 | version "1.1.0" 336 | resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" 337 | integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== 338 | 339 | "@protobufjs/fetch@^1.1.0": 340 | version "1.1.0" 341 | resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" 342 | integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== 343 | dependencies: 344 | "@protobufjs/aspromise" "^1.1.1" 345 | "@protobufjs/inquire" "^1.1.0" 346 | 347 | "@protobufjs/float@^1.0.2": 348 | version "1.0.2" 349 | resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" 350 | integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== 351 | 352 | "@protobufjs/inquire@^1.1.0": 353 | version "1.1.0" 354 | resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" 355 | integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== 356 | 357 | "@protobufjs/path@^1.1.2": 358 | version "1.1.2" 359 | resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" 360 | integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== 361 | 362 | "@protobufjs/pool@^1.1.0": 363 | version "1.1.0" 364 | resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" 365 | integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== 366 | 367 | "@protobufjs/utf8@^1.1.0": 368 | version "1.1.0" 369 | resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" 370 | integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== 371 | 372 | "@pulumi/kubernetes@^4.21.0": 373 | version "4.21.0" 374 | resolved "https://registry.yarnpkg.com/@pulumi/kubernetes/-/kubernetes-4.21.0.tgz#3ceff2d89280c356411e1173ab4537b94c715ac3" 375 | integrity sha512-cjRPcVfvTWQwX2osQhpHpe2Y6Fd2GbbW8Bg42FTSFocy2SRbzH5/9W3M64jLT3+nR2c04xNt+0sLGHAOQXan4A== 376 | dependencies: 377 | "@pulumi/pulumi" "^3.142.0" 378 | glob "^10.3.10" 379 | shell-quote "^1.6.1" 380 | 381 | "@pulumi/pulumi@^3.142.0", "@pulumi/pulumi@^3.146.0": 382 | version "3.146.0" 383 | resolved "https://registry.yarnpkg.com/@pulumi/pulumi/-/pulumi-3.146.0.tgz#4845bf0e23f99f9e6dfc455950a816302a0dfe89" 384 | integrity sha512-DVj7nhjg+R9E4t7XLAFnRiDziVTQRDpBDonXDsNeaSE0KZQmOsP1n+PSFY/Wkcgh3Gblww/EtVfGNMNHqMD1Zg== 385 | dependencies: 386 | "@grpc/grpc-js" "^1.10.1" 387 | "@logdna/tail-file" "^2.0.6" 388 | "@npmcli/arborist" "^7.3.1" 389 | "@opentelemetry/api" "^1.9" 390 | "@opentelemetry/exporter-zipkin" "^1.28" 391 | "@opentelemetry/instrumentation" "^0.55" 392 | "@opentelemetry/instrumentation-grpc" "^0.55" 393 | "@opentelemetry/resources" "^1.28" 394 | "@opentelemetry/sdk-trace-base" "^1.28" 395 | "@opentelemetry/sdk-trace-node" "^1.28" 396 | "@opentelemetry/semantic-conventions" "^1.28" 397 | "@pulumi/query" "^0.3.0" 398 | "@types/google-protobuf" "^3.15.5" 399 | "@types/semver" "^7.5.6" 400 | "@types/tmp" "^0.2.6" 401 | execa "^5.1.0" 402 | fdir "^6.1.1" 403 | google-protobuf "^3.5.0" 404 | got "^11.8.6" 405 | ini "^2.0.0" 406 | js-yaml "^3.14.0" 407 | minimist "^1.2.6" 408 | normalize-package-data "^6.0.0" 409 | picomatch "^3.0.1" 410 | pkg-dir "^7.0.0" 411 | require-from-string "^2.0.1" 412 | semver "^7.5.2" 413 | source-map-support "^0.5.6" 414 | tmp "^0.2.1" 415 | upath "^1.1.0" 416 | 417 | "@pulumi/query@^0.3.0": 418 | version "0.3.0" 419 | resolved "https://registry.yarnpkg.com/@pulumi/query/-/query-0.3.0.tgz#f496608e86a18c3dd31b6c533408e2441c29071d" 420 | integrity sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w== 421 | 422 | "@pulumi/tls@^5.1.0": 423 | version "5.1.0" 424 | resolved "https://registry.yarnpkg.com/@pulumi/tls/-/tls-5.1.0.tgz#b6fcbf7b18e4ac4c1dd1942530eb920c66730d34" 425 | integrity sha512-XrJFMUcvuSn8mpnzWcrTRfMjJ5QXvL7skBFsvU+RMuoXs8nWBd/93qiIg+fprZwANnCFfvw1SlMW/pBcj91jqA== 426 | dependencies: 427 | "@pulumi/pulumi" "^3.142.0" 428 | 429 | "@sigstore/bundle@^2.3.2": 430 | version "2.3.2" 431 | resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" 432 | integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== 433 | dependencies: 434 | "@sigstore/protobuf-specs" "^0.3.2" 435 | 436 | "@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": 437 | version "1.1.0" 438 | resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" 439 | integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== 440 | 441 | "@sigstore/protobuf-specs@^0.3.2": 442 | version "0.3.3" 443 | resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz#7dd46d68b76c322873a2ef7581ed955af6f4dcde" 444 | integrity sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ== 445 | 446 | "@sigstore/sign@^2.3.2": 447 | version "2.3.2" 448 | resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" 449 | integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== 450 | dependencies: 451 | "@sigstore/bundle" "^2.3.2" 452 | "@sigstore/core" "^1.0.0" 453 | "@sigstore/protobuf-specs" "^0.3.2" 454 | make-fetch-happen "^13.0.1" 455 | proc-log "^4.2.0" 456 | promise-retry "^2.0.1" 457 | 458 | "@sigstore/tuf@^2.3.4": 459 | version "2.3.4" 460 | resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" 461 | integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== 462 | dependencies: 463 | "@sigstore/protobuf-specs" "^0.3.2" 464 | tuf-js "^2.2.1" 465 | 466 | "@sigstore/verify@^1.2.1": 467 | version "1.2.1" 468 | resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" 469 | integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== 470 | dependencies: 471 | "@sigstore/bundle" "^2.3.2" 472 | "@sigstore/core" "^1.1.0" 473 | "@sigstore/protobuf-specs" "^0.3.2" 474 | 475 | "@sindresorhus/is@^4.0.0": 476 | version "4.6.0" 477 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" 478 | integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== 479 | 480 | "@szmarczak/http-timer@^4.0.5": 481 | version "4.0.6" 482 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" 483 | integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== 484 | dependencies: 485 | defer-to-connect "^2.0.0" 486 | 487 | "@tufjs/canonical-json@2.0.0": 488 | version "2.0.0" 489 | resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" 490 | integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== 491 | 492 | "@tufjs/models@2.0.1": 493 | version "2.0.1" 494 | resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" 495 | integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== 496 | dependencies: 497 | "@tufjs/canonical-json" "2.0.0" 498 | minimatch "^9.0.4" 499 | 500 | "@types/cacheable-request@^6.0.1": 501 | version "6.0.3" 502 | resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" 503 | integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== 504 | dependencies: 505 | "@types/http-cache-semantics" "*" 506 | "@types/keyv" "^3.1.4" 507 | "@types/node" "*" 508 | "@types/responselike" "^1.0.0" 509 | 510 | "@types/google-protobuf@^3.15.5": 511 | version "3.15.12" 512 | resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.12.tgz#eb2ba0eddd65712211a2b455dc6071d665ccf49b" 513 | integrity sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ== 514 | 515 | "@types/http-cache-semantics@*": 516 | version "4.0.4" 517 | resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" 518 | integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== 519 | 520 | "@types/keyv@^3.1.4": 521 | version "3.1.4" 522 | resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" 523 | integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== 524 | dependencies: 525 | "@types/node" "*" 526 | 527 | "@types/node@*", "@types/node@>=13.7.0", "@types/node@^22.10.7": 528 | version "22.10.7" 529 | resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.7.tgz#14a1ca33fd0ebdd9d63593ed8d3fbc882a6d28d7" 530 | integrity sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg== 531 | dependencies: 532 | undici-types "~6.20.0" 533 | 534 | "@types/responselike@^1.0.0": 535 | version "1.0.3" 536 | resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" 537 | integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== 538 | dependencies: 539 | "@types/node" "*" 540 | 541 | "@types/semver@^7.5.6": 542 | version "7.5.8" 543 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" 544 | integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== 545 | 546 | "@types/shimmer@^1.2.0": 547 | version "1.2.0" 548 | resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded" 549 | integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg== 550 | 551 | "@types/tmp@^0.2.6": 552 | version "0.2.6" 553 | resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217" 554 | integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA== 555 | 556 | abbrev@^2.0.0: 557 | version "2.0.0" 558 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" 559 | integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== 560 | 561 | acorn-import-attributes@^1.9.5: 562 | version "1.9.5" 563 | resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" 564 | integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== 565 | 566 | acorn@^8.8.2: 567 | version "8.14.0" 568 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" 569 | integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== 570 | 571 | agent-base@^7.1.0, agent-base@^7.1.2: 572 | version "7.1.3" 573 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" 574 | integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== 575 | 576 | aggregate-error@^3.0.0: 577 | version "3.1.0" 578 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 579 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 580 | dependencies: 581 | clean-stack "^2.0.0" 582 | indent-string "^4.0.0" 583 | 584 | ansi-regex@^5.0.1: 585 | version "5.0.1" 586 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 587 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 588 | 589 | ansi-regex@^6.0.1: 590 | version "6.1.0" 591 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" 592 | integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== 593 | 594 | ansi-styles@^4.0.0: 595 | version "4.3.0" 596 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 597 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 598 | dependencies: 599 | color-convert "^2.0.1" 600 | 601 | ansi-styles@^6.1.0: 602 | version "6.2.1" 603 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 604 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 605 | 606 | argparse@^1.0.7: 607 | version "1.0.10" 608 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 609 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 610 | dependencies: 611 | sprintf-js "~1.0.2" 612 | 613 | balanced-match@^1.0.0: 614 | version "1.0.2" 615 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 616 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 617 | 618 | bin-links@^4.0.4: 619 | version "4.0.4" 620 | resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" 621 | integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== 622 | dependencies: 623 | cmd-shim "^6.0.0" 624 | npm-normalize-package-bin "^3.0.0" 625 | read-cmd-shim "^4.0.0" 626 | write-file-atomic "^5.0.0" 627 | 628 | brace-expansion@^2.0.1: 629 | version "2.0.1" 630 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 631 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 632 | dependencies: 633 | balanced-match "^1.0.0" 634 | 635 | buffer-from@^1.0.0: 636 | version "1.1.2" 637 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 638 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 639 | 640 | cacache@^18.0.0, cacache@^18.0.3: 641 | version "18.0.4" 642 | resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" 643 | integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== 644 | dependencies: 645 | "@npmcli/fs" "^3.1.0" 646 | fs-minipass "^3.0.0" 647 | glob "^10.2.2" 648 | lru-cache "^10.0.1" 649 | minipass "^7.0.3" 650 | minipass-collect "^2.0.1" 651 | minipass-flush "^1.0.5" 652 | minipass-pipeline "^1.2.4" 653 | p-map "^4.0.0" 654 | ssri "^10.0.0" 655 | tar "^6.1.11" 656 | unique-filename "^3.0.0" 657 | 658 | cacheable-lookup@^5.0.3: 659 | version "5.0.4" 660 | resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" 661 | integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== 662 | 663 | cacheable-request@^7.0.2: 664 | version "7.0.4" 665 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" 666 | integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== 667 | dependencies: 668 | clone-response "^1.0.2" 669 | get-stream "^5.1.0" 670 | http-cache-semantics "^4.0.0" 671 | keyv "^4.0.0" 672 | lowercase-keys "^2.0.0" 673 | normalize-url "^6.0.1" 674 | responselike "^2.0.0" 675 | 676 | chownr@^2.0.0: 677 | version "2.0.0" 678 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 679 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 680 | 681 | cjs-module-lexer@^1.2.2: 682 | version "1.4.1" 683 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" 684 | integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== 685 | 686 | clean-stack@^2.0.0: 687 | version "2.2.0" 688 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 689 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 690 | 691 | cliui@^8.0.1: 692 | version "8.0.1" 693 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" 694 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 695 | dependencies: 696 | string-width "^4.2.0" 697 | strip-ansi "^6.0.1" 698 | wrap-ansi "^7.0.0" 699 | 700 | clone-response@^1.0.2: 701 | version "1.0.3" 702 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" 703 | integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== 704 | dependencies: 705 | mimic-response "^1.0.0" 706 | 707 | cmd-shim@^6.0.0: 708 | version "6.0.3" 709 | resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" 710 | integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== 711 | 712 | color-convert@^2.0.1: 713 | version "2.0.1" 714 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 715 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 716 | dependencies: 717 | color-name "~1.1.4" 718 | 719 | color-name@~1.1.4: 720 | version "1.1.4" 721 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 722 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 723 | 724 | common-ancestor-path@^1.0.1: 725 | version "1.0.1" 726 | resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" 727 | integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== 728 | 729 | cross-spawn@^7.0.0, cross-spawn@^7.0.3: 730 | version "7.0.6" 731 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 732 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 733 | dependencies: 734 | path-key "^3.1.0" 735 | shebang-command "^2.0.0" 736 | which "^2.0.1" 737 | 738 | cssesc@^3.0.0: 739 | version "3.0.0" 740 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 741 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 742 | 743 | debug@4, debug@^4.3.4, debug@^4.3.5: 744 | version "4.4.0" 745 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" 746 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 747 | dependencies: 748 | ms "^2.1.3" 749 | 750 | decompress-response@^6.0.0: 751 | version "6.0.0" 752 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" 753 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== 754 | dependencies: 755 | mimic-response "^3.1.0" 756 | 757 | defer-to-connect@^2.0.0: 758 | version "2.0.1" 759 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" 760 | integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== 761 | 762 | eastasianwidth@^0.2.0: 763 | version "0.2.0" 764 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 765 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 766 | 767 | emoji-regex@^8.0.0: 768 | version "8.0.0" 769 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 770 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 771 | 772 | emoji-regex@^9.2.2: 773 | version "9.2.2" 774 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 775 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 776 | 777 | encoding@^0.1.13: 778 | version "0.1.13" 779 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" 780 | integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== 781 | dependencies: 782 | iconv-lite "^0.6.2" 783 | 784 | end-of-stream@^1.1.0: 785 | version "1.4.4" 786 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 787 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 788 | dependencies: 789 | once "^1.4.0" 790 | 791 | env-paths@^2.2.0: 792 | version "2.2.1" 793 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" 794 | integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== 795 | 796 | err-code@^2.0.2: 797 | version "2.0.3" 798 | resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" 799 | integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== 800 | 801 | escalade@^3.1.1: 802 | version "3.2.0" 803 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" 804 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== 805 | 806 | esprima@^4.0.0: 807 | version "4.0.1" 808 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 809 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 810 | 811 | execa@^5.1.0: 812 | version "5.1.1" 813 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 814 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 815 | dependencies: 816 | cross-spawn "^7.0.3" 817 | get-stream "^6.0.0" 818 | human-signals "^2.1.0" 819 | is-stream "^2.0.0" 820 | merge-stream "^2.0.0" 821 | npm-run-path "^4.0.1" 822 | onetime "^5.1.2" 823 | signal-exit "^3.0.3" 824 | strip-final-newline "^2.0.0" 825 | 826 | exponential-backoff@^3.1.1: 827 | version "3.1.1" 828 | resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" 829 | integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== 830 | 831 | fdir@^6.1.1: 832 | version "6.4.3" 833 | resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" 834 | integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== 835 | 836 | find-up@^6.3.0: 837 | version "6.3.0" 838 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" 839 | integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== 840 | dependencies: 841 | locate-path "^7.1.0" 842 | path-exists "^5.0.0" 843 | 844 | foreground-child@^3.1.0: 845 | version "3.3.0" 846 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" 847 | integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== 848 | dependencies: 849 | cross-spawn "^7.0.0" 850 | signal-exit "^4.0.1" 851 | 852 | fs-minipass@^2.0.0: 853 | version "2.1.0" 854 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" 855 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== 856 | dependencies: 857 | minipass "^3.0.0" 858 | 859 | fs-minipass@^3.0.0: 860 | version "3.0.3" 861 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" 862 | integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== 863 | dependencies: 864 | minipass "^7.0.3" 865 | 866 | function-bind@^1.1.2: 867 | version "1.1.2" 868 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 869 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 870 | 871 | get-caller-file@^2.0.5: 872 | version "2.0.5" 873 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 874 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 875 | 876 | get-stream@^5.1.0: 877 | version "5.2.0" 878 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 879 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 880 | dependencies: 881 | pump "^3.0.0" 882 | 883 | get-stream@^6.0.0: 884 | version "6.0.1" 885 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 886 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 887 | 888 | glob@^10.2.2, glob@^10.3.10: 889 | version "10.4.5" 890 | resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" 891 | integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== 892 | dependencies: 893 | foreground-child "^3.1.0" 894 | jackspeak "^3.1.2" 895 | minimatch "^9.0.4" 896 | minipass "^7.1.2" 897 | package-json-from-dist "^1.0.0" 898 | path-scurry "^1.11.1" 899 | 900 | google-protobuf@^3.5.0: 901 | version "3.21.4" 902 | resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" 903 | integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ== 904 | 905 | got@^11.8.6: 906 | version "11.8.6" 907 | resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" 908 | integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== 909 | dependencies: 910 | "@sindresorhus/is" "^4.0.0" 911 | "@szmarczak/http-timer" "^4.0.5" 912 | "@types/cacheable-request" "^6.0.1" 913 | "@types/responselike" "^1.0.0" 914 | cacheable-lookup "^5.0.3" 915 | cacheable-request "^7.0.2" 916 | decompress-response "^6.0.0" 917 | http2-wrapper "^1.0.0-beta.5.2" 918 | lowercase-keys "^2.0.0" 919 | p-cancelable "^2.0.0" 920 | responselike "^2.0.0" 921 | 922 | graceful-fs@^4.2.6: 923 | version "4.2.11" 924 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 925 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 926 | 927 | hasown@^2.0.2: 928 | version "2.0.2" 929 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 930 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 931 | dependencies: 932 | function-bind "^1.1.2" 933 | 934 | hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: 935 | version "7.0.2" 936 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" 937 | integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== 938 | dependencies: 939 | lru-cache "^10.0.1" 940 | 941 | http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: 942 | version "4.1.1" 943 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" 944 | integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== 945 | 946 | http-proxy-agent@^7.0.0: 947 | version "7.0.2" 948 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" 949 | integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== 950 | dependencies: 951 | agent-base "^7.1.0" 952 | debug "^4.3.4" 953 | 954 | http2-wrapper@^1.0.0-beta.5.2: 955 | version "1.0.3" 956 | resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" 957 | integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== 958 | dependencies: 959 | quick-lru "^5.1.1" 960 | resolve-alpn "^1.0.0" 961 | 962 | https-proxy-agent@^7.0.1: 963 | version "7.0.6" 964 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" 965 | integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== 966 | dependencies: 967 | agent-base "^7.1.2" 968 | debug "4" 969 | 970 | human-signals@^2.1.0: 971 | version "2.1.0" 972 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 973 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 974 | 975 | iconv-lite@^0.6.2: 976 | version "0.6.3" 977 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 978 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 979 | dependencies: 980 | safer-buffer ">= 2.1.2 < 3.0.0" 981 | 982 | ignore-walk@^6.0.4: 983 | version "6.0.5" 984 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" 985 | integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== 986 | dependencies: 987 | minimatch "^9.0.0" 988 | 989 | import-in-the-middle@^1.8.1: 990 | version "1.12.0" 991 | resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.12.0.tgz#80d6536a01d0708a6f119f30d22447d4eb9e5c63" 992 | integrity sha512-yAgSE7GmtRcu4ZUSFX/4v69UGXwugFFSdIQJ14LHPOPPQrWv8Y7O9PHsw8Ovk7bKCLe4sjXMbZFqGFcLHpZ89w== 993 | dependencies: 994 | acorn "^8.8.2" 995 | acorn-import-attributes "^1.9.5" 996 | cjs-module-lexer "^1.2.2" 997 | module-details-from-path "^1.0.3" 998 | 999 | imurmurhash@^0.1.4: 1000 | version "0.1.4" 1001 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1002 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1003 | 1004 | indent-string@^4.0.0: 1005 | version "4.0.0" 1006 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 1007 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1008 | 1009 | ini@^2.0.0: 1010 | version "2.0.0" 1011 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" 1012 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== 1013 | 1014 | ini@^4.1.3: 1015 | version "4.1.3" 1016 | resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" 1017 | integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== 1018 | 1019 | ip-address@^9.0.5: 1020 | version "9.0.5" 1021 | resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" 1022 | integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== 1023 | dependencies: 1024 | jsbn "1.1.0" 1025 | sprintf-js "^1.1.3" 1026 | 1027 | is-core-module@^2.16.0: 1028 | version "2.16.1" 1029 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" 1030 | integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== 1031 | dependencies: 1032 | hasown "^2.0.2" 1033 | 1034 | is-fullwidth-code-point@^3.0.0: 1035 | version "3.0.0" 1036 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1037 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1038 | 1039 | is-lambda@^1.0.1: 1040 | version "1.0.1" 1041 | resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" 1042 | integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== 1043 | 1044 | is-stream@^2.0.0: 1045 | version "2.0.1" 1046 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1047 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1048 | 1049 | isexe@^2.0.0: 1050 | version "2.0.0" 1051 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1052 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1053 | 1054 | isexe@^3.1.1: 1055 | version "3.1.1" 1056 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" 1057 | integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== 1058 | 1059 | jackspeak@^3.1.2: 1060 | version "3.4.3" 1061 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" 1062 | integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== 1063 | dependencies: 1064 | "@isaacs/cliui" "^8.0.2" 1065 | optionalDependencies: 1066 | "@pkgjs/parseargs" "^0.11.0" 1067 | 1068 | js-yaml@^3.14.0: 1069 | version "3.14.1" 1070 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1071 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1072 | dependencies: 1073 | argparse "^1.0.7" 1074 | esprima "^4.0.0" 1075 | 1076 | jsbn@1.1.0: 1077 | version "1.1.0" 1078 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" 1079 | integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== 1080 | 1081 | json-buffer@3.0.1: 1082 | version "3.0.1" 1083 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 1084 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1085 | 1086 | json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: 1087 | version "3.0.2" 1088 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" 1089 | integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== 1090 | 1091 | json-stringify-nice@^1.1.4: 1092 | version "1.1.4" 1093 | resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" 1094 | integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== 1095 | 1096 | jsonparse@^1.3.1: 1097 | version "1.3.1" 1098 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1099 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 1100 | 1101 | just-diff-apply@^5.2.0: 1102 | version "5.5.0" 1103 | resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" 1104 | integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== 1105 | 1106 | just-diff@^6.0.0: 1107 | version "6.0.2" 1108 | resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" 1109 | integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== 1110 | 1111 | keyv@^4.0.0: 1112 | version "4.5.4" 1113 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" 1114 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 1115 | dependencies: 1116 | json-buffer "3.0.1" 1117 | 1118 | locate-path@^7.1.0: 1119 | version "7.2.0" 1120 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" 1121 | integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== 1122 | dependencies: 1123 | p-locate "^6.0.0" 1124 | 1125 | lodash.camelcase@^4.3.0: 1126 | version "4.3.0" 1127 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 1128 | integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== 1129 | 1130 | long@^5.0.0: 1131 | version "5.2.4" 1132 | resolved "https://registry.yarnpkg.com/long/-/long-5.2.4.tgz#ee651d5c7c25901cfca5e67220ae9911695e99b2" 1133 | integrity sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg== 1134 | 1135 | lowercase-keys@^2.0.0: 1136 | version "2.0.0" 1137 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 1138 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 1139 | 1140 | lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: 1141 | version "10.4.3" 1142 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" 1143 | integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== 1144 | 1145 | make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: 1146 | version "13.0.1" 1147 | resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" 1148 | integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== 1149 | dependencies: 1150 | "@npmcli/agent" "^2.0.0" 1151 | cacache "^18.0.0" 1152 | http-cache-semantics "^4.1.1" 1153 | is-lambda "^1.0.1" 1154 | minipass "^7.0.2" 1155 | minipass-fetch "^3.0.0" 1156 | minipass-flush "^1.0.5" 1157 | minipass-pipeline "^1.2.4" 1158 | negotiator "^0.6.3" 1159 | proc-log "^4.2.0" 1160 | promise-retry "^2.0.1" 1161 | ssri "^10.0.0" 1162 | 1163 | merge-stream@^2.0.0: 1164 | version "2.0.0" 1165 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1166 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1167 | 1168 | mimic-fn@^2.1.0: 1169 | version "2.1.0" 1170 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1171 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1172 | 1173 | mimic-response@^1.0.0: 1174 | version "1.0.1" 1175 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 1176 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1177 | 1178 | mimic-response@^3.1.0: 1179 | version "3.1.0" 1180 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" 1181 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== 1182 | 1183 | minimatch@^9.0.0, minimatch@^9.0.4: 1184 | version "9.0.5" 1185 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 1186 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 1187 | dependencies: 1188 | brace-expansion "^2.0.1" 1189 | 1190 | minimist@^1.2.6: 1191 | version "1.2.8" 1192 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1193 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1194 | 1195 | minipass-collect@^2.0.1: 1196 | version "2.0.1" 1197 | resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" 1198 | integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== 1199 | dependencies: 1200 | minipass "^7.0.3" 1201 | 1202 | minipass-fetch@^3.0.0: 1203 | version "3.0.5" 1204 | resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" 1205 | integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== 1206 | dependencies: 1207 | minipass "^7.0.3" 1208 | minipass-sized "^1.0.3" 1209 | minizlib "^2.1.2" 1210 | optionalDependencies: 1211 | encoding "^0.1.13" 1212 | 1213 | minipass-flush@^1.0.5: 1214 | version "1.0.5" 1215 | resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" 1216 | integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== 1217 | dependencies: 1218 | minipass "^3.0.0" 1219 | 1220 | minipass-pipeline@^1.2.4: 1221 | version "1.2.4" 1222 | resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" 1223 | integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== 1224 | dependencies: 1225 | minipass "^3.0.0" 1226 | 1227 | minipass-sized@^1.0.3: 1228 | version "1.0.3" 1229 | resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" 1230 | integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== 1231 | dependencies: 1232 | minipass "^3.0.0" 1233 | 1234 | minipass@^3.0.0: 1235 | version "3.3.6" 1236 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" 1237 | integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== 1238 | dependencies: 1239 | yallist "^4.0.0" 1240 | 1241 | minipass@^5.0.0: 1242 | version "5.0.0" 1243 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" 1244 | integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== 1245 | 1246 | "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: 1247 | version "7.1.2" 1248 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" 1249 | integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== 1250 | 1251 | minizlib@^2.1.1, minizlib@^2.1.2: 1252 | version "2.1.2" 1253 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" 1254 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== 1255 | dependencies: 1256 | minipass "^3.0.0" 1257 | yallist "^4.0.0" 1258 | 1259 | mkdirp@^1.0.3: 1260 | version "1.0.4" 1261 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1262 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1263 | 1264 | module-details-from-path@^1.0.3: 1265 | version "1.0.3" 1266 | resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" 1267 | integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== 1268 | 1269 | ms@^2.1.3: 1270 | version "2.1.3" 1271 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1272 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1273 | 1274 | negotiator@^0.6.3: 1275 | version "0.6.4" 1276 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" 1277 | integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== 1278 | 1279 | node-gyp@^10.0.0: 1280 | version "10.3.1" 1281 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.3.1.tgz#1dd1a1a1c6c5c59da1a76aea06a062786b2c8a1a" 1282 | integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== 1283 | dependencies: 1284 | env-paths "^2.2.0" 1285 | exponential-backoff "^3.1.1" 1286 | glob "^10.3.10" 1287 | graceful-fs "^4.2.6" 1288 | make-fetch-happen "^13.0.0" 1289 | nopt "^7.0.0" 1290 | proc-log "^4.1.0" 1291 | semver "^7.3.5" 1292 | tar "^6.2.1" 1293 | which "^4.0.0" 1294 | 1295 | nopt@^7.0.0, nopt@^7.2.1: 1296 | version "7.2.1" 1297 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" 1298 | integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== 1299 | dependencies: 1300 | abbrev "^2.0.0" 1301 | 1302 | normalize-package-data@^6.0.0: 1303 | version "6.0.2" 1304 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" 1305 | integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== 1306 | dependencies: 1307 | hosted-git-info "^7.0.0" 1308 | semver "^7.3.5" 1309 | validate-npm-package-license "^3.0.4" 1310 | 1311 | normalize-url@^6.0.1: 1312 | version "6.1.0" 1313 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" 1314 | integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== 1315 | 1316 | npm-bundled@^3.0.0: 1317 | version "3.0.1" 1318 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" 1319 | integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== 1320 | dependencies: 1321 | npm-normalize-package-bin "^3.0.0" 1322 | 1323 | npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: 1324 | version "6.3.0" 1325 | resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" 1326 | integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== 1327 | dependencies: 1328 | semver "^7.1.1" 1329 | 1330 | npm-normalize-package-bin@^3.0.0: 1331 | version "3.0.1" 1332 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" 1333 | integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== 1334 | 1335 | npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: 1336 | version "11.0.3" 1337 | resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" 1338 | integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== 1339 | dependencies: 1340 | hosted-git-info "^7.0.0" 1341 | proc-log "^4.0.0" 1342 | semver "^7.3.5" 1343 | validate-npm-package-name "^5.0.0" 1344 | 1345 | npm-packlist@^8.0.0: 1346 | version "8.0.2" 1347 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" 1348 | integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== 1349 | dependencies: 1350 | ignore-walk "^6.0.4" 1351 | 1352 | npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: 1353 | version "9.1.0" 1354 | resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" 1355 | integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== 1356 | dependencies: 1357 | npm-install-checks "^6.0.0" 1358 | npm-normalize-package-bin "^3.0.0" 1359 | npm-package-arg "^11.0.0" 1360 | semver "^7.3.5" 1361 | 1362 | npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1: 1363 | version "17.1.0" 1364 | resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1" 1365 | integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA== 1366 | dependencies: 1367 | "@npmcli/redact" "^2.0.0" 1368 | jsonparse "^1.3.1" 1369 | make-fetch-happen "^13.0.0" 1370 | minipass "^7.0.2" 1371 | minipass-fetch "^3.0.0" 1372 | minizlib "^2.1.2" 1373 | npm-package-arg "^11.0.0" 1374 | proc-log "^4.0.0" 1375 | 1376 | npm-run-path@^4.0.1: 1377 | version "4.0.1" 1378 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1379 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1380 | dependencies: 1381 | path-key "^3.0.0" 1382 | 1383 | once@^1.3.1, once@^1.4.0: 1384 | version "1.4.0" 1385 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1386 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1387 | dependencies: 1388 | wrappy "1" 1389 | 1390 | onetime@^5.1.2: 1391 | version "5.1.2" 1392 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1393 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1394 | dependencies: 1395 | mimic-fn "^2.1.0" 1396 | 1397 | p-cancelable@^2.0.0: 1398 | version "2.1.1" 1399 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" 1400 | integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== 1401 | 1402 | p-limit@^4.0.0: 1403 | version "4.0.0" 1404 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" 1405 | integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== 1406 | dependencies: 1407 | yocto-queue "^1.0.0" 1408 | 1409 | p-locate@^6.0.0: 1410 | version "6.0.0" 1411 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" 1412 | integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== 1413 | dependencies: 1414 | p-limit "^4.0.0" 1415 | 1416 | p-map@^4.0.0: 1417 | version "4.0.0" 1418 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" 1419 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 1420 | dependencies: 1421 | aggregate-error "^3.0.0" 1422 | 1423 | package-json-from-dist@^1.0.0: 1424 | version "1.0.1" 1425 | resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" 1426 | integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== 1427 | 1428 | pacote@^18.0.0, pacote@^18.0.6: 1429 | version "18.0.6" 1430 | resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" 1431 | integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A== 1432 | dependencies: 1433 | "@npmcli/git" "^5.0.0" 1434 | "@npmcli/installed-package-contents" "^2.0.1" 1435 | "@npmcli/package-json" "^5.1.0" 1436 | "@npmcli/promise-spawn" "^7.0.0" 1437 | "@npmcli/run-script" "^8.0.0" 1438 | cacache "^18.0.0" 1439 | fs-minipass "^3.0.0" 1440 | minipass "^7.0.2" 1441 | npm-package-arg "^11.0.0" 1442 | npm-packlist "^8.0.0" 1443 | npm-pick-manifest "^9.0.0" 1444 | npm-registry-fetch "^17.0.0" 1445 | proc-log "^4.0.0" 1446 | promise-retry "^2.0.1" 1447 | sigstore "^2.2.0" 1448 | ssri "^10.0.0" 1449 | tar "^6.1.11" 1450 | 1451 | parse-conflict-json@^3.0.0: 1452 | version "3.0.1" 1453 | resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" 1454 | integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== 1455 | dependencies: 1456 | json-parse-even-better-errors "^3.0.0" 1457 | just-diff "^6.0.0" 1458 | just-diff-apply "^5.2.0" 1459 | 1460 | path-exists@^5.0.0: 1461 | version "5.0.0" 1462 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" 1463 | integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== 1464 | 1465 | path-key@^3.0.0, path-key@^3.1.0: 1466 | version "3.1.1" 1467 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1468 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1469 | 1470 | path-parse@^1.0.7: 1471 | version "1.0.7" 1472 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1473 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1474 | 1475 | path-scurry@^1.11.1: 1476 | version "1.11.1" 1477 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" 1478 | integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== 1479 | dependencies: 1480 | lru-cache "^10.2.0" 1481 | minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 1482 | 1483 | picomatch@^3.0.1: 1484 | version "3.0.1" 1485 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-3.0.1.tgz#817033161def55ec9638567a2f3bbc876b3e7516" 1486 | integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag== 1487 | 1488 | pkg-dir@^7.0.0: 1489 | version "7.0.0" 1490 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" 1491 | integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== 1492 | dependencies: 1493 | find-up "^6.3.0" 1494 | 1495 | postcss-selector-parser@^6.0.10: 1496 | version "6.1.2" 1497 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" 1498 | integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== 1499 | dependencies: 1500 | cssesc "^3.0.0" 1501 | util-deprecate "^1.0.2" 1502 | 1503 | proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: 1504 | version "4.2.0" 1505 | resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" 1506 | integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== 1507 | 1508 | proggy@^2.0.0: 1509 | version "2.0.0" 1510 | resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" 1511 | integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== 1512 | 1513 | promise-all-reject-late@^1.0.0: 1514 | version "1.0.1" 1515 | resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" 1516 | integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== 1517 | 1518 | promise-call-limit@^3.0.1: 1519 | version "3.0.2" 1520 | resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" 1521 | integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== 1522 | 1523 | promise-inflight@^1.0.1: 1524 | version "1.0.1" 1525 | resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" 1526 | integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== 1527 | 1528 | promise-retry@^2.0.1: 1529 | version "2.0.1" 1530 | resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" 1531 | integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== 1532 | dependencies: 1533 | err-code "^2.0.2" 1534 | retry "^0.12.0" 1535 | 1536 | protobufjs@^7.2.5: 1537 | version "7.4.0" 1538 | resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" 1539 | integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== 1540 | dependencies: 1541 | "@protobufjs/aspromise" "^1.1.2" 1542 | "@protobufjs/base64" "^1.1.2" 1543 | "@protobufjs/codegen" "^2.0.4" 1544 | "@protobufjs/eventemitter" "^1.1.0" 1545 | "@protobufjs/fetch" "^1.1.0" 1546 | "@protobufjs/float" "^1.0.2" 1547 | "@protobufjs/inquire" "^1.1.0" 1548 | "@protobufjs/path" "^1.1.2" 1549 | "@protobufjs/pool" "^1.1.0" 1550 | "@protobufjs/utf8" "^1.1.0" 1551 | "@types/node" ">=13.7.0" 1552 | long "^5.0.0" 1553 | 1554 | pump@^3.0.0: 1555 | version "3.0.2" 1556 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" 1557 | integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== 1558 | dependencies: 1559 | end-of-stream "^1.1.0" 1560 | once "^1.3.1" 1561 | 1562 | quick-lru@^5.1.1: 1563 | version "5.1.1" 1564 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 1565 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1566 | 1567 | read-cmd-shim@^4.0.0: 1568 | version "4.0.0" 1569 | resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" 1570 | integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== 1571 | 1572 | read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: 1573 | version "3.0.2" 1574 | resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" 1575 | integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== 1576 | dependencies: 1577 | json-parse-even-better-errors "^3.0.0" 1578 | npm-normalize-package-bin "^3.0.0" 1579 | 1580 | require-directory@^2.1.1: 1581 | version "2.1.1" 1582 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1583 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1584 | 1585 | require-from-string@^2.0.1: 1586 | version "2.0.2" 1587 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 1588 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 1589 | 1590 | require-in-the-middle@^7.1.1: 1591 | version "7.4.0" 1592 | resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz#606977820d4b5f9be75e5a108ce34cfed25b3bb4" 1593 | integrity sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ== 1594 | dependencies: 1595 | debug "^4.3.5" 1596 | module-details-from-path "^1.0.3" 1597 | resolve "^1.22.8" 1598 | 1599 | resolve-alpn@^1.0.0: 1600 | version "1.2.1" 1601 | resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" 1602 | integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== 1603 | 1604 | resolve@^1.22.8: 1605 | version "1.22.10" 1606 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" 1607 | integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== 1608 | dependencies: 1609 | is-core-module "^2.16.0" 1610 | path-parse "^1.0.7" 1611 | supports-preserve-symlinks-flag "^1.0.0" 1612 | 1613 | responselike@^2.0.0: 1614 | version "2.0.1" 1615 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" 1616 | integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== 1617 | dependencies: 1618 | lowercase-keys "^2.0.0" 1619 | 1620 | retry@^0.12.0: 1621 | version "0.12.0" 1622 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" 1623 | integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== 1624 | 1625 | "safer-buffer@>= 2.1.2 < 3.0.0": 1626 | version "2.1.2" 1627 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1628 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1629 | 1630 | semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3: 1631 | version "7.6.3" 1632 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 1633 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 1634 | 1635 | shebang-command@^2.0.0: 1636 | version "2.0.0" 1637 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1638 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1639 | dependencies: 1640 | shebang-regex "^3.0.0" 1641 | 1642 | shebang-regex@^3.0.0: 1643 | version "3.0.0" 1644 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1645 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1646 | 1647 | shell-quote@^1.6.1: 1648 | version "1.8.2" 1649 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" 1650 | integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== 1651 | 1652 | shimmer@^1.2.1: 1653 | version "1.2.1" 1654 | resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" 1655 | integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== 1656 | 1657 | signal-exit@^3.0.3: 1658 | version "3.0.7" 1659 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1660 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1661 | 1662 | signal-exit@^4.0.1: 1663 | version "4.1.0" 1664 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" 1665 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== 1666 | 1667 | sigstore@^2.2.0: 1668 | version "2.3.1" 1669 | resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" 1670 | integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== 1671 | dependencies: 1672 | "@sigstore/bundle" "^2.3.2" 1673 | "@sigstore/core" "^1.0.0" 1674 | "@sigstore/protobuf-specs" "^0.3.2" 1675 | "@sigstore/sign" "^2.3.2" 1676 | "@sigstore/tuf" "^2.3.4" 1677 | "@sigstore/verify" "^1.2.1" 1678 | 1679 | smart-buffer@^4.2.0: 1680 | version "4.2.0" 1681 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" 1682 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== 1683 | 1684 | socks-proxy-agent@^8.0.3: 1685 | version "8.0.5" 1686 | resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" 1687 | integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== 1688 | dependencies: 1689 | agent-base "^7.1.2" 1690 | debug "^4.3.4" 1691 | socks "^2.8.3" 1692 | 1693 | socks@^2.8.3: 1694 | version "2.8.3" 1695 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" 1696 | integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== 1697 | dependencies: 1698 | ip-address "^9.0.5" 1699 | smart-buffer "^4.2.0" 1700 | 1701 | source-map-support@^0.5.6: 1702 | version "0.5.21" 1703 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1704 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1705 | dependencies: 1706 | buffer-from "^1.0.0" 1707 | source-map "^0.6.0" 1708 | 1709 | source-map@^0.6.0: 1710 | version "0.6.1" 1711 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1712 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1713 | 1714 | spdx-correct@^3.0.0: 1715 | version "3.2.0" 1716 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" 1717 | integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== 1718 | dependencies: 1719 | spdx-expression-parse "^3.0.0" 1720 | spdx-license-ids "^3.0.0" 1721 | 1722 | spdx-exceptions@^2.1.0: 1723 | version "2.5.0" 1724 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" 1725 | integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== 1726 | 1727 | spdx-expression-parse@^3.0.0: 1728 | version "3.0.1" 1729 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 1730 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1731 | dependencies: 1732 | spdx-exceptions "^2.1.0" 1733 | spdx-license-ids "^3.0.0" 1734 | 1735 | spdx-license-ids@^3.0.0: 1736 | version "3.0.21" 1737 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" 1738 | integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== 1739 | 1740 | sprintf-js@^1.1.3: 1741 | version "1.1.3" 1742 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" 1743 | integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== 1744 | 1745 | sprintf-js@~1.0.2: 1746 | version "1.0.3" 1747 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1748 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 1749 | 1750 | ssri@^10.0.0, ssri@^10.0.6: 1751 | version "10.0.6" 1752 | resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" 1753 | integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== 1754 | dependencies: 1755 | minipass "^7.0.3" 1756 | 1757 | "string-width-cjs@npm:string-width@^4.2.0": 1758 | version "4.2.3" 1759 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1760 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1761 | dependencies: 1762 | emoji-regex "^8.0.0" 1763 | is-fullwidth-code-point "^3.0.0" 1764 | strip-ansi "^6.0.1" 1765 | 1766 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 1767 | version "4.2.3" 1768 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1769 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1770 | dependencies: 1771 | emoji-regex "^8.0.0" 1772 | is-fullwidth-code-point "^3.0.0" 1773 | strip-ansi "^6.0.1" 1774 | 1775 | string-width@^5.0.1, string-width@^5.1.2: 1776 | version "5.1.2" 1777 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 1778 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 1779 | dependencies: 1780 | eastasianwidth "^0.2.0" 1781 | emoji-regex "^9.2.2" 1782 | strip-ansi "^7.0.1" 1783 | 1784 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1": 1785 | version "6.0.1" 1786 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1787 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1788 | dependencies: 1789 | ansi-regex "^5.0.1" 1790 | 1791 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1792 | version "6.0.1" 1793 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1794 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1795 | dependencies: 1796 | ansi-regex "^5.0.1" 1797 | 1798 | strip-ansi@^7.0.1: 1799 | version "7.1.0" 1800 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 1801 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 1802 | dependencies: 1803 | ansi-regex "^6.0.1" 1804 | 1805 | strip-final-newline@^2.0.0: 1806 | version "2.0.0" 1807 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1808 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1809 | 1810 | supports-preserve-symlinks-flag@^1.0.0: 1811 | version "1.0.0" 1812 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1813 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1814 | 1815 | tar@^6.1.11, tar@^6.2.1: 1816 | version "6.2.1" 1817 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" 1818 | integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== 1819 | dependencies: 1820 | chownr "^2.0.0" 1821 | fs-minipass "^2.0.0" 1822 | minipass "^5.0.0" 1823 | minizlib "^2.1.1" 1824 | mkdirp "^1.0.3" 1825 | yallist "^4.0.0" 1826 | 1827 | tmp@^0.2.1: 1828 | version "0.2.3" 1829 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" 1830 | integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== 1831 | 1832 | treeverse@^3.0.0: 1833 | version "3.0.0" 1834 | resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" 1835 | integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== 1836 | 1837 | tuf-js@^2.2.1: 1838 | version "2.2.1" 1839 | resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" 1840 | integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== 1841 | dependencies: 1842 | "@tufjs/models" "2.0.1" 1843 | debug "^4.3.4" 1844 | make-fetch-happen "^13.0.1" 1845 | 1846 | undici-types@~6.20.0: 1847 | version "6.20.0" 1848 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" 1849 | integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== 1850 | 1851 | unique-filename@^3.0.0: 1852 | version "3.0.0" 1853 | resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" 1854 | integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== 1855 | dependencies: 1856 | unique-slug "^4.0.0" 1857 | 1858 | unique-slug@^4.0.0: 1859 | version "4.0.0" 1860 | resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" 1861 | integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== 1862 | dependencies: 1863 | imurmurhash "^0.1.4" 1864 | 1865 | upath@^1.1.0: 1866 | version "1.2.0" 1867 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" 1868 | integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== 1869 | 1870 | util-deprecate@^1.0.2: 1871 | version "1.0.2" 1872 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1873 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1874 | 1875 | validate-npm-package-license@^3.0.4: 1876 | version "3.0.4" 1877 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1878 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1879 | dependencies: 1880 | spdx-correct "^3.0.0" 1881 | spdx-expression-parse "^3.0.0" 1882 | 1883 | validate-npm-package-name@^5.0.0: 1884 | version "5.0.1" 1885 | resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" 1886 | integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== 1887 | 1888 | walk-up-path@^3.0.1: 1889 | version "3.0.1" 1890 | resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" 1891 | integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== 1892 | 1893 | which@^2.0.1: 1894 | version "2.0.2" 1895 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1896 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1897 | dependencies: 1898 | isexe "^2.0.0" 1899 | 1900 | which@^4.0.0: 1901 | version "4.0.0" 1902 | resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" 1903 | integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== 1904 | dependencies: 1905 | isexe "^3.1.1" 1906 | 1907 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 1908 | version "7.0.0" 1909 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1910 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1911 | dependencies: 1912 | ansi-styles "^4.0.0" 1913 | string-width "^4.1.0" 1914 | strip-ansi "^6.0.0" 1915 | 1916 | wrap-ansi@^7.0.0: 1917 | version "7.0.0" 1918 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1919 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1920 | dependencies: 1921 | ansi-styles "^4.0.0" 1922 | string-width "^4.1.0" 1923 | strip-ansi "^6.0.0" 1924 | 1925 | wrap-ansi@^8.1.0: 1926 | version "8.1.0" 1927 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 1928 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 1929 | dependencies: 1930 | ansi-styles "^6.1.0" 1931 | string-width "^5.0.1" 1932 | strip-ansi "^7.0.1" 1933 | 1934 | wrappy@1: 1935 | version "1.0.2" 1936 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1937 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1938 | 1939 | write-file-atomic@^5.0.0: 1940 | version "5.0.1" 1941 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" 1942 | integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== 1943 | dependencies: 1944 | imurmurhash "^0.1.4" 1945 | signal-exit "^4.0.1" 1946 | 1947 | y18n@^5.0.5: 1948 | version "5.0.8" 1949 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1950 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1951 | 1952 | yallist@^4.0.0: 1953 | version "4.0.0" 1954 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1955 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1956 | 1957 | yargs-parser@^21.1.1: 1958 | version "21.1.1" 1959 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 1960 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 1961 | 1962 | yargs@^17.7.2: 1963 | version "17.7.2" 1964 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" 1965 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 1966 | dependencies: 1967 | cliui "^8.0.1" 1968 | escalade "^3.1.1" 1969 | get-caller-file "^2.0.5" 1970 | require-directory "^2.1.1" 1971 | string-width "^4.2.3" 1972 | y18n "^5.0.5" 1973 | yargs-parser "^21.1.1" 1974 | 1975 | yocto-queue@^1.0.0: 1976 | version "1.1.1" 1977 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" 1978 | integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== 1979 | --------------------------------------------------------------------------------